mandrel 2.59.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (678) hide show
  1. package/.agents/README.md +21 -19
  2. package/.agents/agents/acceptance-critic.md +24 -43
  3. package/.agents/agents/story-worker.md +20 -21
  4. package/.agents/docs/agentrc-reference.json +5 -84
  5. package/.agents/docs/configuration.md +48 -132
  6. package/.agents/docs/workflows.md +2 -2
  7. package/.agents/instructions.md +5 -8
  8. package/.agents/rules/ci-remediation.md +41 -8
  9. package/.agents/rules/gherkin-standards.md +4 -0
  10. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  11. package/.agents/schemas/agentrc.schema.json +16 -496
  12. package/.agents/schemas/story-deliver-terminal.schema.json +13 -3
  13. package/.agents/schemas/validation-evidence.schema.json +2 -1
  14. package/.agents/scripts/README.md +23 -13
  15. package/.agents/scripts/acceptance-eval.js +35 -169
  16. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  17. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  18. package/.agents/scripts/audit-baselines.js +6 -27
  19. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  20. package/.agents/scripts/audit-to-stories.js +91 -361
  21. package/.agents/scripts/boot-sweep.js +19 -72
  22. package/.agents/scripts/bootstrap.js +74 -395
  23. package/.agents/scripts/ceremony-derive.js +10 -41
  24. package/.agents/scripts/check-arch-cycles.js +14 -64
  25. package/.agents/scripts/check-baselines.js +8 -48
  26. package/.agents/scripts/check-context-budget.js +105 -311
  27. package/.agents/scripts/check-cyclomatic.js +12 -44
  28. package/.agents/scripts/check-dead-exports.js +13 -64
  29. package/.agents/scripts/check-doc-links.js +38 -186
  30. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  31. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  32. package/.agents/scripts/coverage-capture.js +34 -98
  33. package/.agents/scripts/deliver-light.js +25 -171
  34. package/.agents/scripts/deliver-recover.js +6 -42
  35. package/.agents/scripts/deliver-run.js +534 -0
  36. package/.agents/scripts/diagnose-friction.js +24 -116
  37. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  38. package/.agents/scripts/evidence-gate.js +23 -85
  39. package/.agents/scripts/file-ci-gap.js +57 -49
  40. package/.agents/scripts/generate-config-docs.js +30 -170
  41. package/.agents/scripts/generate-lens-checklists.js +8 -52
  42. package/.agents/scripts/generate-skills-index.js +14 -112
  43. package/.agents/scripts/generate-workflows-doc.js +10 -70
  44. package/.agents/scripts/git-cleanup.js +2 -34
  45. package/.agents/scripts/lib/Graph.js +24 -81
  46. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  47. package/.agents/scripts/lib/Logger.js +14 -76
  48. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  49. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  50. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  51. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  52. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  53. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  54. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  55. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  56. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  57. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  58. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  59. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  60. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  61. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  62. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  63. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  64. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  65. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  66. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  67. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  68. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  69. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  70. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  71. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  72. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  73. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  74. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  75. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  76. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  77. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  78. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  79. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  80. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  81. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  82. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  83. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  84. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  85. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  86. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  87. package/.agents/scripts/lib/baseline-loader.js +12 -51
  88. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  89. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  90. package/.agents/scripts/lib/baselines/components.js +10 -61
  91. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  92. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +7 -19
  93. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  94. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  95. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  96. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  97. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  98. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  99. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  100. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  101. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  102. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  103. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  104. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  105. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  106. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  107. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  108. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  109. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  110. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  111. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  112. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  113. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  114. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  115. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  116. package/.agents/scripts/lib/baselines/reader.js +14 -107
  117. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  118. package/.agents/scripts/lib/baselines/scope.js +11 -135
  119. package/.agents/scripts/lib/baselines/writer.js +16 -149
  120. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  121. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  122. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  123. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  124. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  125. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  126. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  127. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  128. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  129. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  130. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  131. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  132. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  133. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  134. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  135. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  136. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  137. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  138. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  139. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  140. package/.agents/scripts/lib/changed-files.js +39 -121
  141. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  142. package/.agents/scripts/lib/checks/index.js +18 -101
  143. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  144. package/.agents/scripts/lib/checks/state.js +16 -91
  145. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  146. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  147. package/.agents/scripts/lib/child-exec.js +39 -108
  148. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  149. package/.agents/scripts/lib/cli-args.js +31 -146
  150. package/.agents/scripts/lib/cli-usage.js +5 -27
  151. package/.agents/scripts/lib/cli-utils.js +2 -12
  152. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  153. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  154. package/.agents/scripts/lib/close-validation/process.js +121 -151
  155. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  156. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  157. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  158. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  159. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  160. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  161. package/.agents/scripts/lib/command-header.js +6 -28
  162. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  163. package/.agents/scripts/lib/config/baselines.js +3 -14
  164. package/.agents/scripts/lib/config/ci.js +8 -38
  165. package/.agents/scripts/lib/config/commands.js +1 -15
  166. package/.agents/scripts/lib/config/defaults.js +4 -33
  167. package/.agents/scripts/lib/config/delivery-routing.js +6 -34
  168. package/.agents/scripts/lib/config/explain.js +10 -83
  169. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  170. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +3 -31
  171. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  172. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  173. package/.agents/scripts/lib/config/gates/index.js +2 -17
  174. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  175. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  176. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  177. package/.agents/scripts/lib/config/github.js +4 -22
  178. package/.agents/scripts/lib/config/limits.js +4 -57
  179. package/.agents/scripts/lib/config/paths.js +2 -21
  180. package/.agents/scripts/lib/config/qa.js +4 -38
  181. package/.agents/scripts/lib/config/quality.js +76 -432
  182. package/.agents/scripts/lib/config/runners.js +12 -56
  183. package/.agents/scripts/lib/config/runtime.js +13 -57
  184. package/.agents/scripts/lib/config/shared.js +2 -16
  185. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  186. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  187. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  188. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  189. package/.agents/scripts/lib/config-resolver.js +11 -52
  190. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  191. package/.agents/scripts/lib/config-settings-schema-delivery.js +16 -291
  192. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  193. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  194. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  195. package/.agents/scripts/lib/coverage-capture-fullscope.js +18 -35
  196. package/.agents/scripts/lib/coverage-capture-incremental.js +15 -45
  197. package/.agents/scripts/lib/coverage-capture-usage.js +8 -25
  198. package/.agents/scripts/lib/coverage-capture.js +99 -224
  199. package/.agents/scripts/lib/coverage-utils.js +14 -79
  200. package/.agents/scripts/lib/cpu-pool.js +17 -123
  201. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  202. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  203. package/.agents/scripts/lib/crap-engine.js +40 -153
  204. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  205. package/.agents/scripts/lib/crap-utils.js +31 -155
  206. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  207. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  208. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  209. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  210. package/.agents/scripts/lib/degraded-mode.js +3 -26
  211. package/.agents/scripts/lib/dependency-parser.js +8 -40
  212. package/.agents/scripts/lib/dependency-version.js +13 -35
  213. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  214. package/.agents/scripts/lib/doc-tiers.js +22 -124
  215. package/.agents/scripts/lib/duplicate-search.js +8 -72
  216. package/.agents/scripts/lib/env-loader.js +5 -27
  217. package/.agents/scripts/lib/error-redactor.js +6 -31
  218. package/.agents/scripts/lib/errors/index.js +2 -22
  219. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  220. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  221. package/.agents/scripts/lib/feedback-loop/graduator-core.js +94 -419
  222. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  223. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -149
  224. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  225. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  226. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  227. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  228. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  229. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  230. package/.agents/scripts/lib/findings/severity.js +18 -104
  231. package/.agents/scripts/lib/format-generated-json.js +12 -44
  232. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  233. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  234. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  235. package/.agents/scripts/lib/gates/friction.js +1 -3
  236. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  237. package/.agents/scripts/lib/gh-exec.js +123 -191
  238. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  239. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  240. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  241. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  242. package/.agents/scripts/lib/git-utils.js +37 -161
  243. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  244. package/.agents/scripts/lib/github-url.js +2 -17
  245. package/.agents/scripts/lib/import-graph.js +11 -38
  246. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  247. package/.agents/scripts/lib/json-utils.js +3 -18
  248. package/.agents/scripts/lib/label-constants.js +16 -111
  249. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  250. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  251. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  252. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  253. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  254. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  255. package/.agents/scripts/lib/npm-scripts.js +4 -23
  256. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  257. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  258. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  259. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  260. package/.agents/scripts/lib/observability/source-classifier.js +22 -203
  261. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  262. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  263. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  264. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  265. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  266. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  267. package/.agents/scripts/lib/orchestration/ceremony-routing.js +28 -156
  268. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  274. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  275. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  276. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  277. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  278. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  279. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +121 -157
  280. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  281. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  282. package/.agents/scripts/lib/orchestration/complexity-gate.js +118 -462
  283. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  284. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  285. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  286. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  287. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  288. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  289. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  290. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  291. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  292. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  293. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  294. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  295. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  308. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  309. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  310. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  311. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  313. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  314. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  315. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  316. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  317. package/.agents/scripts/lib/orchestration/light-suitability.js +37 -307
  318. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  319. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  320. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  321. package/.agents/scripts/lib/orchestration/plan-context.js +55 -318
  322. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  323. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  324. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  325. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  326. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  327. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  328. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +16 -78
  329. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  330. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  331. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  332. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  333. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  334. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  335. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +71 -289
  336. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  337. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +96 -362
  338. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +9 -39
  339. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +60 -186
  340. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  341. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  342. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  343. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  344. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  345. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  346. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  347. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  348. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  349. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  350. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  351. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  352. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  353. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  354. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  355. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  356. package/.agents/scripts/lib/orchestration/review-depth.js +12 -91
  357. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  358. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  359. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  360. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  361. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  362. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  363. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  364. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  365. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  366. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  367. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  368. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  369. package/.agents/scripts/lib/orchestration/run-epilogue.js +245 -326
  370. package/.agents/scripts/lib/orchestration/run-scoped-config.js +55 -159
  371. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  372. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  373. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +20 -82
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +96 -0
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  391. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  392. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  393. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +180 -273
  394. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  395. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  396. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  397. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  398. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  399. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  400. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  401. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  402. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -200
  403. package/.agents/scripts/lib/orchestration/story-follow-ups.js +167 -252
  404. package/.agents/scripts/lib/orchestration/story-init-envelope.js +52 -0
  405. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  406. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  407. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -135
  408. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  409. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  410. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  411. package/.agents/scripts/lib/orchestration/ticket-validator.js +63 -344
  412. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  413. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -261
  414. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  415. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  416. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  417. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  418. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  419. package/.agents/scripts/lib/path-security.js +3 -6
  420. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  421. package/.agents/scripts/lib/preflight-runner.js +13 -69
  422. package/.agents/scripts/lib/process-group.js +143 -0
  423. package/.agents/scripts/lib/project-root.js +2 -8
  424. package/.agents/scripts/lib/provider-factory.js +2 -25
  425. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  426. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  427. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  428. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  429. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  430. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  431. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  432. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  433. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  434. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  435. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  436. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  437. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  438. package/.agents/scripts/lib/signals/index.js +2 -19
  439. package/.agents/scripts/lib/signals/schema.js +14 -109
  440. package/.agents/scripts/lib/signals/write.js +2 -11
  441. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  442. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  443. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  444. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  445. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  446. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  447. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  448. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  449. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  450. package/.agents/scripts/lib/source-extensions.js +11 -42
  451. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  452. package/.agents/scripts/lib/stdio-flush.js +9 -36
  453. package/.agents/scripts/lib/story-adjacency.js +8 -40
  454. package/.agents/scripts/lib/story-body/body-format-lints.js +51 -66
  455. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  456. package/.agents/scripts/lib/story-body/story-body.js +123 -344
  457. package/.agents/scripts/lib/temp-retention.js +42 -143
  458. package/.agents/scripts/lib/templates/decomposer-prompts.js +18 -80
  459. package/.agents/scripts/lib/test-env.js +12 -65
  460. package/.agents/scripts/lib/test-run-credit.js +10 -65
  461. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  462. package/.agents/scripts/lib/test-temp.js +38 -184
  463. package/.agents/scripts/lib/test-tiers.js +12 -96
  464. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  465. package/.agents/scripts/lib/transpile.js +15 -74
  466. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  467. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  468. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  469. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  470. package/.agents/scripts/lib/validation-evidence.js +21 -96
  471. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  472. package/.agents/scripts/lib/wave-runner/live-probe.js +67 -209
  473. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  474. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  475. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  476. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  477. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  478. package/.agents/scripts/lib/workflow-closure.js +22 -105
  479. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  480. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  481. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  482. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  483. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  484. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  485. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  486. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  487. package/.agents/scripts/lib/worktree-manager.js +15 -40
  488. package/.agents/scripts/lint-issue-body.js +12 -68
  489. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  490. package/.agents/scripts/merge-baseline.js +30 -105
  491. package/.agents/scripts/nav-registry-diff.js +22 -108
  492. package/.agents/scripts/notify.js +12 -69
  493. package/.agents/scripts/plan-context.js +97 -92
  494. package/.agents/scripts/plan-critics.js +12 -66
  495. package/.agents/scripts/plan-persist.js +71 -137
  496. package/.agents/scripts/plan-run-epilogue.js +20 -43
  497. package/.agents/scripts/pr-watch-with-update.js +79 -263
  498. package/.agents/scripts/providers/github/auth.js +3 -8
  499. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  500. package/.agents/scripts/providers/github/board-add.js +5 -21
  501. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  502. package/.agents/scripts/providers/github/cache.js +2 -14
  503. package/.agents/scripts/providers/github/comments.js +7 -40
  504. package/.agents/scripts/providers/github/compose.js +3 -19
  505. package/.agents/scripts/providers/github/errors.js +22 -125
  506. package/.agents/scripts/providers/github/issues.js +31 -123
  507. package/.agents/scripts/providers/github/labels.js +24 -124
  508. package/.agents/scripts/providers/github/mappers.js +5 -27
  509. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  510. package/.agents/scripts/providers/github/project-board.js +2 -17
  511. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  512. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  513. package/.agents/scripts/providers/github/search-budget.js +9 -39
  514. package/.agents/scripts/providers/github/search-query.js +5 -26
  515. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  516. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  517. package/.agents/scripts/providers/github/tickets.js +32 -134
  518. package/.agents/scripts/providers/github.js +18 -59
  519. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  520. package/.agents/scripts/quality-preview.js +35 -220
  521. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  522. package/.agents/scripts/resolve-stories.js +16 -67
  523. package/.agents/scripts/resync-status-column.js +6 -25
  524. package/.agents/scripts/run-tests.js +29 -104
  525. package/.agents/scripts/single-story-close.js +23 -135
  526. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  527. package/.agents/scripts/single-story-init.js +47 -259
  528. package/.agents/scripts/stories-wave-tick.js +179 -415
  529. package/.agents/scripts/sync-agentrc.js +3 -21
  530. package/.agents/scripts/sync-claude-agents.js +9 -55
  531. package/.agents/scripts/sync-claude-commands.js +20 -110
  532. package/.agents/scripts/test-wrapper.js +6 -43
  533. package/.agents/scripts/update-coverage-baseline.js +5 -22
  534. package/.agents/scripts/update-crap-baseline.js +7 -30
  535. package/.agents/scripts/update-duplication-baseline.js +16 -92
  536. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  537. package/.agents/scripts/update-ticket-state.js +1 -7
  538. package/.agents/scripts/validate-skills.js +6 -26
  539. package/.agents/skills/core/gates-and-baselines/reference.md +0 -1
  540. package/.agents/skills/skills.index.json +2 -2
  541. package/.agents/skills/stack/qa/playwright/SKILL.md +26 -0
  542. package/.agents/templates/agent-protocol.md +2 -2
  543. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  544. package/.agents/workflows/audit-accessibility.md +4 -7
  545. package/.agents/workflows/audit-adrs.md +3 -6
  546. package/.agents/workflows/audit-architecture.md +3 -11
  547. package/.agents/workflows/audit-baselines.md +6 -9
  548. package/.agents/workflows/audit-clean-code.md +8 -12
  549. package/.agents/workflows/audit-data-model.md +3 -7
  550. package/.agents/workflows/audit-dependencies.md +4 -7
  551. package/.agents/workflows/audit-devops.md +4 -8
  552. package/.agents/workflows/audit-documentation.md +1 -4
  553. package/.agents/workflows/audit-mobile.md +4 -7
  554. package/.agents/workflows/audit-navigability.md +3 -6
  555. package/.agents/workflows/audit-performance.md +2 -4
  556. package/.agents/workflows/audit-privacy.md +4 -7
  557. package/.agents/workflows/audit-quality.md +4 -7
  558. package/.agents/workflows/audit-security.md +4 -7
  559. package/.agents/workflows/audit-seo.md +4 -7
  560. package/.agents/workflows/audit-sre.md +4 -7
  561. package/.agents/workflows/audit-to-stories.md +17 -30
  562. package/.agents/workflows/audit-ux-ui.md +4 -7
  563. package/.agents/workflows/helpers/acceptance-self-eval.md +84 -157
  564. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  565. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  566. package/.agents/workflows/helpers/code-review.md +4 -2
  567. package/.agents/workflows/helpers/deliver-digest.md +37 -28
  568. package/.agents/workflows/helpers/deliver-light.md +92 -101
  569. package/.agents/workflows/helpers/deliver-reference.md +162 -220
  570. package/.agents/workflows/helpers/deliver-story-reference.md +197 -607
  571. package/.agents/workflows/helpers/deliver-story.md +17 -18
  572. package/.agents/workflows/helpers/plan-reference.md +125 -167
  573. package/.agents/workflows/helpers/qa-core.md +12 -0
  574. package/.agents/workflows/mandrel-deliver.md +47 -31
  575. package/.agents/workflows/mandrel-plan.md +22 -21
  576. package/.agents/workflows/mandrel-update.md +36 -21
  577. package/.agents/workflows/memory-consolidate.md +1 -1
  578. package/.agents/workflows/qa-assist.md +27 -71
  579. package/.agents/workflows/qa-explore.md +19 -59
  580. package/.agents/workflows/qa-run.md +11 -33
  581. package/README.md +1 -1
  582. package/bin/mandrel.js +5 -46
  583. package/bin/postinstall.js +18 -107
  584. package/docs/CHANGELOG.md +60 -0
  585. package/lib/cli/doctor.js +11 -71
  586. package/lib/cli/init.js +26 -165
  587. package/lib/cli/migrate.js +5 -64
  588. package/lib/cli/registry.js +84 -467
  589. package/lib/cli/sync-agents.js +4 -64
  590. package/lib/cli/sync-commands.js +11 -64
  591. package/lib/cli/sync.js +34 -213
  592. package/lib/cli/uninstall.js +40 -219
  593. package/lib/cli/update.js +326 -523
  594. package/lib/cli/version-check.js +8 -72
  595. package/lib/cli/version-helpers.js +14 -87
  596. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  597. package/lib/migrations/index.js +17 -92
  598. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  599. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  600. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  601. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  602. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  603. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  604. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  605. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  606. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +21 -0
  607. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  608. package/package.json +17 -14
  609. package/.agents/docs/SDLC.md +0 -590
  610. package/.agents/docs/quality-gates.md +0 -1179
  611. package/.agents/rules/known-tooling-behavior.md +0 -150
  612. package/.agents/rules/orchestration-error-handling.md +0 -61
  613. package/.agents/rules/test-seams.md +0 -59
  614. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  615. package/.agents/schemas/baselines/lint.schema.json +0 -47
  616. package/.agents/schemas/model-attribution.schema.json +0 -53
  617. package/.agents/scripts/check-action-pinning.js +0 -260
  618. package/.agents/scripts/check-audit-attribution.js +0 -302
  619. package/.agents/scripts/check-baseline-drift.js +0 -211
  620. package/.agents/scripts/check-baseline-scope.js +0 -362
  621. package/.agents/scripts/check-generated-validator.js +0 -202
  622. package/.agents/scripts/check-knip-entries.js +0 -159
  623. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  624. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  625. package/.agents/scripts/check-schema-references.js +0 -366
  626. package/.agents/scripts/check-test-portability.js +0 -512
  627. package/.agents/scripts/check-workflow-citations.js +0 -332
  628. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  629. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  630. package/.agents/scripts/install-matrix-assert.js +0 -326
  631. package/.agents/scripts/lib/audit-advisories.js +0 -195
  632. package/.agents/scripts/lib/audit-attribution.js +0 -134
  633. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  634. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  635. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  636. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  637. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  638. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  639. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  640. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  641. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  642. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  643. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  644. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  645. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  646. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  647. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  648. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  649. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  650. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  651. package/.agents/scripts/lib/fs-walk.js +0 -52
  652. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  653. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  654. package/.agents/scripts/lib/orchestration/model-attribution.js +0 -418
  655. package/.agents/scripts/lib/orchestration/story-plan-state.js +0 -33
  656. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +0 -67
  657. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  658. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  659. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  660. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  661. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  662. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  663. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  664. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  665. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  666. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  667. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  668. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  669. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  670. package/.agents/scripts/post-structured-comment.js +0 -127
  671. package/.agents/scripts/provision-git-hooks.js +0 -85
  672. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  673. package/.agents/scripts/run-coverage.js +0 -197
  674. package/.agents/scripts/run-lint.js +0 -133
  675. package/.agents/scripts/run-test-profile.js +0 -129
  676. package/.agents/scripts/run-verify.js +0 -118
  677. package/.agents/scripts/test-isolate.js +0 -55
  678. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,53 +1,10 @@
1
1
  // lib/cli/uninstall.js
2
2
  /**
3
- * `mandrel uninstall` subcommand.
4
- *
5
- * Reverses a recorded install by consuming the install ledger written by the
6
- * consent-first bootstrap (`.agents/.install-manifest.json`, Story #3524).
7
- * Each ledger entry is a mutation-manifest record
8
- * (`{ phaseGroup, target, action, reversible }`); uninstall walks the
9
- * reversible entries and undoes exactly the mutation the install applied,
10
- * keyed off the entry's `target` path.
11
- *
12
- * Design goals
13
- * ------------
14
- * - **Preserve pre-existing user content.** Reversal is marker-based, not
15
- * blunt file deletion: the CLAUDE.md import block is stripped (not the file
16
- * removed) so a CLAUDE.md the operator authored before install survives;
17
- * the `.claude/settings.json` sync hook is spliced out without touching
18
- * other hooks; the `.gitignore` entries are removed without disturbing the
19
- * operator's own ignore rules; only the framework's own npm scripts are
20
- * removed from `package.json`. A file is deleted outright only when
21
- * stripping the framework block leaves it empty / framework-only (the
22
- * install created it from nothing).
23
- * - **GitHub-side state is never touched by default.** The `github-admin`
24
- * ledger entries carry `reversible: false`; they are surfaced as a manual
25
- * rollback checklist and are only acted on when the operator opts in with
26
- * `--include-github` (which, for now, still only enumerates them — remote
27
- * admin reversal is out of scope for this Story and would require the same
28
- * `gh` plumbing the bootstrap uses).
29
- * - **Idempotent.** Re-running after a successful uninstall is a no-op: the
30
- * ledger is removed last, and every reversal step is a no-op when the
31
- * marker is already absent.
32
- *
33
- * Output contract
34
- * ---------------
35
- * reversed file → "✔ reverted <target> <detail>"
36
- * skipped → "• skipped <target> <reason>"
37
- * manual (gh) → "! manual <target> <detail>"
38
- * final → "✅ Uninstalled (<n> reversed, <m> manual follow-ups)"
39
- * | "❌ No install ledger found — nothing to uninstall."
40
- *
41
- * All output goes to process.stdout (never console.log — the repo enforces a
42
- * no-console rule). Exit code 0 on success (including the no-ledger case,
43
- * which is a benign no-op), 1 only on an unrecoverable error.
44
- *
45
- * Injectable seams (used by tests so no real filesystem is touched):
46
- * - `projectRoot` — overrides the resolved consumer root.
47
- * - `fsImpl` — replaces the `node:fs` surface.
48
- * - `write` — replaces process.stdout.write.
49
- * - `exit` — replaces process.exit.
50
- * - `includeGithub`— forces the --include-github behaviour.
3
+ * `mandrel uninstall`: reverse the reversible entries of the install ledger
4
+ * (`.agents/.install-manifest.json`). Reversal is marker-based so
5
+ * operator-authored content survives; a file is deleted only when the install
6
+ * created it. `github-admin` entries (`reversible: false`) are only listed as
7
+ * manual follow-ups. Idempotent: the ledger is removed last.
51
8
  *
52
9
  * @module cli/uninstall
53
10
  */
@@ -74,16 +31,7 @@ import {
74
31
  QUALITY_NPM_SCRIPTS,
75
32
  } from '../../.agents/scripts/lib/bootstrap/quality-bootstrap.js';
76
33
 
77
- // ---------------------------------------------------------------------------
78
- // Project-root resolution
79
- // ---------------------------------------------------------------------------
80
-
81
34
  /**
82
- * Resolve the consumer project root — the directory that holds `.agents/`.
83
- * `mandrel uninstall` runs from the consumer's checkout, so the install
84
- * ledger and every target path are anchored at `process.cwd()`. This mirrors
85
- * how `lib/cli/sync.js` and the doctor checks anchor consumer-facing paths.
86
- *
87
35
  * @param {() => string} [cwd=process.cwd]
88
36
  * @returns {string}
89
37
  */
@@ -91,17 +39,10 @@ function resolveProjectRoot(cwd = () => process.cwd()) {
91
39
  return cwd();
92
40
  }
93
41
 
94
- // ---------------------------------------------------------------------------
95
- // npm-script removal set
96
- // ---------------------------------------------------------------------------
97
-
98
42
  /**
99
- * The exact `package.json` scripts the bootstrap seeds. Reversal removes a
100
- * script key only when its value still equals the framework-seeded command —
101
- * an operator who overwrote the value keeps their version. `prepare` is
102
- * special: the bootstrap may *append* the sync command to an existing
103
- * `prepare`, so reversal strips the framework fragment rather than deleting
104
- * the whole key. Mirrors `ensurePackageJson` / `ensureQualityNpmScripts`.
43
+ * Scripts the bootstrap seeds; one is removed only while its value still
44
+ * equals the seeded command. `prepare` is handled separately because the
45
+ * sync command may have been appended to an existing value.
105
46
  *
106
47
  * @type {Readonly<Record<string, string>>}
107
48
  */
@@ -111,10 +52,6 @@ const FRAMEWORK_NPM_SCRIPTS = Object.freeze({
111
52
  ...QUALITY_NPM_SCRIPTS,
112
53
  });
113
54
 
114
- // ---------------------------------------------------------------------------
115
- // Pure reversal helpers (filesystem effects via the injected fsImpl)
116
- // ---------------------------------------------------------------------------
117
-
118
55
  /**
119
56
  * @typedef {object} ReversalOutcome
120
57
  * @property {'reverted'|'skipped'|'manual'} kind
@@ -123,15 +60,9 @@ const FRAMEWORK_NPM_SCRIPTS = Object.freeze({
123
60
  */
124
61
 
125
62
  /**
126
- * Strip the framework system-prompt import block from a `CLAUDE.md`. The file
127
- * is removed only when it is byte-identical to the install-authored template
128
- * (`SYSTEM_PROMPT_CLAUDE_MD`). Any other file — including one whose only
129
- * operator content is markdown headings — is preserved with just the framework
130
- * block excised.
131
- *
132
- * Using a byte-equality check rather than a "non-`#` meaningful lines"
133
- * heuristic prevents data loss when an operator's pre-install `CLAUDE.md`
134
- * consists entirely of markdown headings (all lines start with `#`).
63
+ * Strip the system-prompt import block from `CLAUDE.md`. The file is deleted
64
+ * only when byte-identical to the install template — a heading-only heuristic
65
+ * would delete an operator's all-headings file.
135
66
  *
136
67
  * @param {string} projectRoot
137
68
  * @param {typeof fs} fsImpl
@@ -147,9 +78,6 @@ function revertClaudeMd(projectRoot, fsImpl) {
147
78
  if (!original.includes(SYSTEM_PROMPT_IMPORT)) {
148
79
  return { kind: 'skipped', target: rel, detail: 'import already absent' };
149
80
  }
150
- // Delete only when the file is exactly the install-authored template — i.e.
151
- // the install created it from nothing. Operator-authored content (even an
152
- // all-headings file) must survive.
153
81
  if (original.trim() === SYSTEM_PROMPT_CLAUDE_MD.trim()) {
154
82
  fsImpl.rmSync(target, { force: true });
155
83
  return {
@@ -158,8 +86,7 @@ function revertClaudeMd(projectRoot, fsImpl) {
158
86
  detail: 'removed install-created CLAUDE.md',
159
87
  };
160
88
  }
161
- // Remove the full block first (heading + import), then fall back to the
162
- // bare import line so a hand-edited block without the heading still clears.
89
+ // Full block first, then the bare import line for a hand-edited block.
163
90
  let next = original.includes(SYSTEM_PROMPT_BLOCK)
164
91
  ? original.replace(SYSTEM_PROMPT_BLOCK, '')
165
92
  : original;
@@ -169,7 +96,6 @@ function revertClaudeMd(projectRoot, fsImpl) {
169
96
  .filter((line) => line.trim() !== SYSTEM_PROMPT_IMPORT)
170
97
  .join('\n');
171
98
  }
172
- // Collapse any run of 3+ blank lines the splice may have produced.
173
99
  next = next.replace(/\n{3,}/g, '\n\n').replace(/^\n+/, '');
174
100
  fsImpl.writeFileSync(
175
101
  target,
@@ -184,10 +110,8 @@ function revertClaudeMd(projectRoot, fsImpl) {
184
110
  }
185
111
 
186
112
  /**
187
- * Splice the framework UserPromptSubmit sync hook **and** the plugin
188
- * enablement keys (Story #3576) out of `.claude/settings.json`, leaving every
189
- * other hook and setting intact. When the settings file is left with no hooks
190
- * and no other keys, it is removed.
113
+ * Splice the sync hook and any legacy plugin-enablement keys out of
114
+ * `.claude/settings.json`, keeping everything else; delete the file if empty.
191
115
  *
192
116
  * @param {string} projectRoot
193
117
  * @param {typeof fs} fsImpl
@@ -207,9 +131,6 @@ function revertClaudeSettings(projectRoot, fsImpl) {
207
131
 
208
132
  let mutated = false;
209
133
 
210
- // 1. Strip any legacy plugin-enablement keys (#3576). The flat-command
211
- // projection no longer writes these, but a consumer upgraded from a
212
- // #3576 install may still carry them — clean them up on uninstall.
213
134
  if (
214
135
  settings.enabledPlugins &&
215
136
  settings.enabledPlugins['mandrel@mandrel'] !== undefined
@@ -228,7 +149,6 @@ function revertClaudeSettings(projectRoot, fsImpl) {
228
149
  mutated = true;
229
150
  }
230
151
 
231
- // 2. Splice out the UserPromptSubmit sync hook.
232
152
  if (Array.isArray(groups)) {
233
153
  const kept = groups
234
154
  .map((group) => ({
@@ -273,11 +193,8 @@ function revertClaudeSettings(projectRoot, fsImpl) {
273
193
  }
274
194
 
275
195
  /**
276
- * Remove the generated Claude Code command projection: the flat
277
- * `.claude/commands/` tree. The tree is generated from `.agents/workflows/`, so
278
- * it is safe to remove wholesale (it is gitignored and never hand-edited). Any
279
- * legacy #3576 plugin projection (`.claude/plugins/mandrel/` +
280
- * `.claude/.claude-plugin/`) left by an older install is also removed.
196
+ * Remove the generated (gitignored, never hand-edited) `.claude/commands/`
197
+ * tree plus any legacy plugin projection.
281
198
  *
282
199
  * @param {string} projectRoot
283
200
  * @param {typeof fs} fsImpl
@@ -287,7 +204,6 @@ function revertClaudeCommands(projectRoot, fsImpl) {
287
204
  const rel = '.claude/commands';
288
205
  const targets = [
289
206
  path.join(projectRoot, '.claude', 'commands'),
290
- // Legacy #3576 plugin projection — clean it up too if present.
291
207
  path.join(projectRoot, '.claude', 'plugins', 'mandrel'),
292
208
  path.join(projectRoot, '.claude', '.claude-plugin'),
293
209
  ];
@@ -310,13 +226,9 @@ function revertClaudeCommands(projectRoot, fsImpl) {
310
226
  }
311
227
 
312
228
  /**
313
- * Remove the two `.gitignore` blocks the install appended (the
314
- * `.claude/commands/` and `.mcp.json` entries), preserving every other line
315
- * the operator authored. When the file is left empty it is removed.
316
- *
317
- * The `.mcp.json` ignore block is intentionally retained when a real
318
- * `.mcp.json` exists at the project root: that file may carry secrets and
319
- * removing the ignore entry would expose it on the next `git add .`.
229
+ * Remove the install's `.gitignore` blocks, keeping operator lines. The
230
+ * `.mcp.json` block is kept while a real `.mcp.json` exists — it may carry
231
+ * secrets and would otherwise be exposed to `git add .`.
320
232
  *
321
233
  * @param {string} projectRoot
322
234
  * @param {typeof fs} fsImpl
@@ -333,8 +245,6 @@ function revertGitignore(projectRoot, fsImpl) {
333
245
  let next = original;
334
246
  for (const [key, def] of Object.entries(GITIGNORE_BLOCKS)) {
335
247
  if (next.includes(def.block)) {
336
- // Retain the .mcp.json ignore entry when a real .mcp.json is present —
337
- // removing it would expose a potentially secret-bearing file to git.
338
248
  if (key === 'mcp' && mcpJsonExists) {
339
249
  continue;
340
250
  }
@@ -361,10 +271,6 @@ function revertGitignore(projectRoot, fsImpl) {
361
271
  }
362
272
 
363
273
  /**
364
- * Remove the framework-seeded npm scripts (and the appended `prepare`
365
- * fragment) from `package.json`, leaving every operator-authored script and
366
- * field intact. A script whose value the operator overwrote is preserved.
367
- *
368
274
  * @param {string} projectRoot
369
275
  * @param {typeof fs} fsImpl
370
276
  * @returns {ReversalOutcome}
@@ -386,11 +292,8 @@ function revertPackageJson(projectRoot, fsImpl) {
386
292
  removed.push(name);
387
293
  }
388
294
  }
389
- // `prepare` may be the bare sync command (delete it) or an operator command
390
- // with the sync fragment appended via ` && ` (strip just the fragment).
391
- // When stripping leaves an empty string, delete the key rather than writing
392
- // `"prepare": ""`. Only push 'prepare' onto `removed` when the value
393
- // actually changed (i.e. the fragment was present and was stripped).
295
+ // `prepare` is either the bare sync command or an operator command with it
296
+ // appended via ` && `; strip just the fragment, never write `""`.
394
297
  const prepare = pkg.scripts.prepare;
395
298
  if (typeof prepare === 'string' && prepare.includes(SYNC_COMMAND)) {
396
299
  if (prepare === SYNC_COMMAND) {
@@ -426,24 +329,9 @@ function revertPackageJson(projectRoot, fsImpl) {
426
329
  }
427
330
 
428
331
  /**
429
- * Remove an install-created `.agentrc.json` — but never one the install did
430
- * not create (Story #3895, data-loss fix for `docs/install-bootstrap-review.md`
431
- * Finding B.2).
432
- *
433
- * The ledger now records the **live** outcome of the `agentrc` bootstrap phase
434
- * as `executedAction` (schema v2). `ensureAgentrc` returns `seeded` when it
435
- * wrote the file from the starter and `already-present` when it left a
436
- * pre-existing, operator-authored file untouched. Reversal is gated on that:
437
- *
438
- * - `executedAction === 'already-present'` → the operator owned this file
439
- * before the install ran; the install created nothing, so deleting it would
440
- * be data loss. Skip.
441
- * - `executedAction === 'seeded'` (or any other create-class outcome) → the
442
- * install authored the file from nothing; deleting it returns the project to
443
- * the pre-install state.
444
- * - `executedAction` absent (legacy v1 ledger / no hint) → cannot happen for a
445
- * v2 ledger written by this framework, but if encountered we fail **safe**
446
- * and skip rather than risk deleting operator content.
332
+ * Delete `.agentrc.json` only when the ledger's `executedAction` is `seeded`
333
+ * (the install wrote it). `already-present`, a missing hint, or anything else
334
+ * fails safe and preserves the operator's file.
447
335
  *
448
336
  * @param {string} projectRoot
449
337
  * @param {typeof fs} fsImpl
@@ -456,9 +344,6 @@ function revertAgentrc(projectRoot, fsImpl, executedAction) {
456
344
  if (!fsImpl.existsSync(target)) {
457
345
  return { kind: 'skipped', target: rel, detail: 'file absent' };
458
346
  }
459
- // Only delete a file the install actually created. Any non-`seeded` outcome
460
- // (pre-existing `already-present`, a missing hint, or an unexpected value)
461
- // is treated as "not install-created" → preserve the operator's file.
462
347
  if (executedAction !== 'seeded') {
463
348
  return {
464
349
  kind: 'skipped',
@@ -475,14 +360,9 @@ function revertAgentrc(projectRoot, fsImpl, executedAction) {
475
360
  }
476
361
 
477
362
  /**
478
- * Reverse the `.husky/pre-commit` quality hook. The file is removed only when
479
- * it is byte-identical to the install-authored template (`DOWNSTREAM_PRE_COMMIT`).
480
- * Any other hook — including one whose only non-framework lines are a shebang
481
- * or comments — is preserved with just the quality-preview line stripped.
482
- *
483
- * Using a byte-equality check rather than a "non-`#` meaningful lines"
484
- * heuristic prevents data loss when an operator's pre-install hook consists
485
- * entirely of a shebang line and/or comments (all lines start with `#`).
363
+ * Strip the quality-preview line from `.husky/pre-commit`; delete the file
364
+ * only when byte-identical to the install template (an operator hook of only
365
+ * a shebang and comments must survive).
486
366
  *
487
367
  * @param {string} projectRoot
488
368
  * @param {typeof fs} fsImpl
@@ -498,9 +378,6 @@ function revertPreCommitHook(projectRoot, fsImpl) {
498
378
  if (!original.includes(PRE_COMMIT_MARKER)) {
499
379
  return { kind: 'skipped', target: rel, detail: 'quality line absent' };
500
380
  }
501
- // Delete only when the file is exactly the install-authored template — i.e.
502
- // the install created it from nothing. Operator-authored content (even an
503
- // all-comments hook) must survive.
504
381
  if (original.trim() === DOWNSTREAM_PRE_COMMIT.trim()) {
505
382
  fsImpl.rmSync(target, { force: true });
506
383
  return {
@@ -521,19 +398,9 @@ function revertPreCommitHook(projectRoot, fsImpl) {
521
398
  };
522
399
  }
523
400
 
524
- // ---------------------------------------------------------------------------
525
- // Dispatch table — ledger target → reversal helper
526
- // ---------------------------------------------------------------------------
527
-
528
401
  /**
529
- * Map a reversible ledger entry's `target` to the helper that undoes it.
530
- * Targets that map to the same file (e.g. both `repo-config` and
531
- * `quality-gates` touch `package.json`) are deduped by the caller so each
532
- * file is reverted once.
533
- *
534
- * Handlers take `(root, fsImpl)`; `.agentrc.json` additionally takes the
535
- * recorded `executedAction` (the third arg, ignored by the others) so it can
536
- * preserve a pre-existing file the install did not create (Story #3895).
402
+ * Ledger target → reversal helper. Only `revertAgentrc` reads the third
403
+ * `executedAction` argument.
537
404
  *
538
405
  * @type {Readonly<Record<string, (root: string, fsImpl: typeof fs, executedAction?: string) => ReversalOutcome>>}
539
406
  */
@@ -547,23 +414,10 @@ const REVERSAL_BY_TARGET = Object.freeze({
547
414
  '.husky/pre-commit': revertPreCommitHook,
548
415
  });
549
416
 
550
- // ---------------------------------------------------------------------------
551
- // Planner (pure over the ledger; effects deferred to the helpers)
552
- // ---------------------------------------------------------------------------
553
-
554
417
  /**
555
- * Partition a ledger's entries into the reversible local-file reversals to
556
- * run, the remote (`github-admin`) entries to surface as manual follow-ups,
557
- * and the set of unique file targets to revert (deduped).
558
- *
559
- * Pure — derives entirely from the ledger record, with no filesystem access.
560
- *
561
- * The returned `executedActionByTarget` map carries the per-target
562
- * `executedAction` recorded in the ledger (schema v2, Story #3895). When more
563
- * than one entry shares a target (e.g. the repo-config `create` and
564
- * quality-gates `merge` entries for `.agentrc.json`), the first defined
565
- * `executedAction` wins — they resolve to the same bootstrap phase outcome, so
566
- * the choice is unambiguous.
418
+ * Partition ledger entries into deduped file targets and manual follow-ups.
419
+ * Pure. For a target shared by several entries, the first defined
420
+ * `executedAction` wins (they record the same phase outcome).
567
421
  *
568
422
  * @param {{ entries: Array<import('../../.agents/scripts/lib/bootstrap/manifest.js').MutationManifestEntry & { executedAction?: string }> }} ledger
569
423
  * @returns {{ fileTargets: string[], manual: import('../../.agents/scripts/lib/bootstrap/manifest.js').MutationManifestEntry[], executedActionByTarget: Record<string, string> }}
@@ -579,8 +433,7 @@ export function planUninstall(ledger) {
579
433
  continue;
580
434
  }
581
435
  if (!REVERSAL_BY_TARGET[entry.target]) {
582
- // A reversible entry with no known handler is surfaced as manual so the
583
- // operator is never silently left with an un-reverted mutation.
436
+ // Never silently leave a mutation un-reverted.
584
437
  manual.push(entry);
585
438
  continue;
586
439
  }
@@ -598,10 +451,6 @@ export function planUninstall(ledger) {
598
451
  return { fileTargets, manual, executedActionByTarget };
599
452
  }
600
453
 
601
- // ---------------------------------------------------------------------------
602
- // Formatting
603
- // ---------------------------------------------------------------------------
604
-
605
454
  const TARGET_COL = 22;
606
455
 
607
456
  function pad(value, width) {
@@ -625,13 +474,7 @@ function formatOutcome(outcome) {
625
474
  return `${icon} ${label} ${pad(outcome.target, TARGET_COL)} ${outcome.detail}\n`;
626
475
  }
627
476
 
628
- // ---------------------------------------------------------------------------
629
- // Runner (exported for testing)
630
- // ---------------------------------------------------------------------------
631
-
632
477
  /**
633
- * Execute the uninstall against a project root.
634
- *
635
478
  * @param {{
636
479
  * projectRoot?: string,
637
480
  * cwd?: () => string,
@@ -670,8 +513,7 @@ export function runUninstall({
670
513
 
671
514
  if (!ledger) {
672
515
  write('❌ No install ledger found — nothing to uninstall.\n');
673
- // A missing ledger is a benign no-op (never installed, or already
674
- // uninstalled), so this is success, not an error.
516
+ // Never installed or already uninstalled: a benign no-op.
675
517
  exit(0);
676
518
  return {
677
519
  revertedCount: 0,
@@ -696,7 +538,6 @@ export function runUninstall({
696
538
 
697
539
  const { fileTargets, manual, executedActionByTarget } = planUninstall(ledger);
698
540
 
699
- // --- Dry run — show what would be reversed without touching anything. ---
700
541
  if (dryRun) {
701
542
  write('mandrel uninstall — planned reversal (dry run)\n');
702
543
  for (const target of fileTargets) {
@@ -734,22 +575,14 @@ export function runUninstall({
734
575
  for (const target of fileTargets) {
735
576
  let outcome;
736
577
  try {
737
- // The third arg carries the recorded `executedAction` for the target
738
- // (schema v2). Only `revertAgentrc` consults it; the other handlers
739
- // ignore extra arguments. This is how uninstall avoids deleting a
740
- // pre-existing `.agentrc.json` the install did not create (Story #3895).
741
578
  outcome = REVERSAL_BY_TARGET[target](
742
579
  root,
743
580
  fsImpl,
744
581
  executedActionByTarget[target],
745
582
  );
746
583
  } catch (err) {
747
- // An operator-edited file that contains invalid JSON (or any other
748
- // unexpected throw from the reversal helper) must not abort the whole
749
- // uninstall and leave earlier targets reverted while later ones are not.
750
- // Emit a `skipped` outcome so the operator knows they must revert this
751
- // target by hand, and leave the install ledger intact so a re-run after
752
- // the file is fixed can resume cleanly.
584
+ // One corrupt operator file must not abort a half-done uninstall;
585
+ // report it and keep the ledger so a re-run can resume.
753
586
  outcome = {
754
587
  kind: 'skipped',
755
588
  target,
@@ -761,9 +594,7 @@ export function runUninstall({
761
594
  write(formatOutcome(outcome));
762
595
  }
763
596
 
764
- // GitHub-admin (and any unhandled reversible) entries are manual follow-ups.
765
- // They are NEVER acted on automatically; --include-github only annotates
766
- // that the operator acknowledged them (remote reversal stays out of scope).
597
+ // Never acted on automatically; --include-github only acknowledges them.
767
598
  let manualCount = 0;
768
599
  for (const entry of manual) {
769
600
  manualCount += 1;
@@ -775,10 +606,7 @@ export function runUninstall({
775
606
  );
776
607
  }
777
608
 
778
- // Remove the ledger last so a re-run is a clean no-op and a partial failure
779
- // mid-reversal still leaves the ledger for a resume. When any target was
780
- // skipped due to a parse error, leave the ledger in place so the operator
781
- // can fix the corrupt file and re-run to complete the uninstall.
609
+ // Ledger goes last, and stays when any target failed, so a re-run resumes.
782
610
  const lp = ledgerPath(root);
783
611
  if (fsImpl.existsSync(lp) && parseErrorCount === 0) {
784
612
  fsImpl.rmSync(lp, { force: true });
@@ -809,16 +637,9 @@ export function runUninstall({
809
637
  return { revertedCount, manualCount, ledgerFound: true, parseErrorCount };
810
638
  }
811
639
 
812
- // ---------------------------------------------------------------------------
813
- // Subcommand entry point (called by bin/mandrel.js)
814
- // ---------------------------------------------------------------------------
815
-
816
640
  /**
817
- * Default export consumed by `bin/mandrel.js`.
818
- *
819
- * Supported flags:
820
- * --include-github Acknowledge GitHub-side manual follow-ups.
821
- * --dry-run Show what would be reversed without touching anything.
641
+ * Flags: `--include-github` (acknowledge GitHub-side follow-ups),
642
+ * `--dry-run`.
822
643
  *
823
644
  * @param {string[]} argv
824
645
  * @returns {Promise<void>}