mandrel 2.60.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 (661) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  318. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  319. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  320. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  321. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  322. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  323. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  324. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  325. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  326. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  327. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  329. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  330. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  331. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  332. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  333. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  334. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  335. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  336. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  337. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  339. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  340. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  341. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  342. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  343. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  344. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  345. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  346. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  347. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  348. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  349. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  350. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  351. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  352. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  353. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  354. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  355. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  356. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  357. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  358. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  359. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  360. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  361. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  362. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  363. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  364. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  365. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  366. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  367. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  368. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  369. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  370. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  371. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  390. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  391. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  392. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  393. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  394. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  395. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  396. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  397. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  398. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  400. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  401. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  402. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  403. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  404. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  405. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  406. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  407. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  408. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  409. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  410. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  411. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  412. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  413. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  414. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  415. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  416. package/.agents/scripts/lib/path-security.js +3 -6
  417. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  418. package/.agents/scripts/lib/preflight-runner.js +13 -69
  419. package/.agents/scripts/lib/process-group.js +143 -0
  420. package/.agents/scripts/lib/project-root.js +2 -8
  421. package/.agents/scripts/lib/provider-factory.js +2 -25
  422. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  423. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  424. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  425. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  426. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  427. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  428. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  429. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  430. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  431. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  432. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  433. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  434. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  435. package/.agents/scripts/lib/signals/index.js +2 -19
  436. package/.agents/scripts/lib/signals/schema.js +14 -109
  437. package/.agents/scripts/lib/signals/write.js +2 -11
  438. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  439. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  440. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  441. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  442. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  443. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  444. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  445. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  446. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  447. package/.agents/scripts/lib/source-extensions.js +11 -42
  448. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  449. package/.agents/scripts/lib/stdio-flush.js +9 -36
  450. package/.agents/scripts/lib/story-adjacency.js +8 -40
  451. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  452. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  453. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  454. package/.agents/scripts/lib/temp-retention.js +42 -143
  455. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  456. package/.agents/scripts/lib/test-env.js +12 -65
  457. package/.agents/scripts/lib/test-run-credit.js +10 -65
  458. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  459. package/.agents/scripts/lib/test-temp.js +38 -184
  460. package/.agents/scripts/lib/test-tiers.js +12 -96
  461. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  462. package/.agents/scripts/lib/transpile.js +15 -74
  463. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  464. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  465. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  466. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  467. package/.agents/scripts/lib/validation-evidence.js +21 -96
  468. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  469. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  470. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  471. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  472. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  473. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  474. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  475. package/.agents/scripts/lib/workflow-closure.js +22 -105
  476. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  477. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  478. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  480. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  481. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  482. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  483. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  484. package/.agents/scripts/lib/worktree-manager.js +15 -40
  485. package/.agents/scripts/lint-issue-body.js +12 -68
  486. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  487. package/.agents/scripts/merge-baseline.js +30 -104
  488. package/.agents/scripts/nav-registry-diff.js +22 -108
  489. package/.agents/scripts/notify.js +12 -69
  490. package/.agents/scripts/plan-context.js +27 -111
  491. package/.agents/scripts/plan-critics.js +12 -66
  492. package/.agents/scripts/plan-persist.js +31 -148
  493. package/.agents/scripts/plan-run-epilogue.js +11 -37
  494. package/.agents/scripts/pr-watch-with-update.js +76 -267
  495. package/.agents/scripts/providers/github/auth.js +3 -8
  496. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  497. package/.agents/scripts/providers/github/board-add.js +5 -21
  498. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  499. package/.agents/scripts/providers/github/cache.js +2 -14
  500. package/.agents/scripts/providers/github/comments.js +7 -40
  501. package/.agents/scripts/providers/github/compose.js +3 -19
  502. package/.agents/scripts/providers/github/errors.js +22 -125
  503. package/.agents/scripts/providers/github/issues.js +31 -123
  504. package/.agents/scripts/providers/github/labels.js +24 -124
  505. package/.agents/scripts/providers/github/mappers.js +5 -27
  506. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  507. package/.agents/scripts/providers/github/project-board.js +2 -17
  508. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  509. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  510. package/.agents/scripts/providers/github/search-budget.js +9 -39
  511. package/.agents/scripts/providers/github/search-query.js +5 -26
  512. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  513. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  514. package/.agents/scripts/providers/github/tickets.js +32 -134
  515. package/.agents/scripts/providers/github.js +18 -59
  516. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  517. package/.agents/scripts/quality-preview.js +35 -220
  518. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  519. package/.agents/scripts/resolve-stories.js +16 -67
  520. package/.agents/scripts/resync-status-column.js +6 -25
  521. package/.agents/scripts/run-tests.js +29 -104
  522. package/.agents/scripts/single-story-close.js +23 -135
  523. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  524. package/.agents/scripts/single-story-init.js +47 -209
  525. package/.agents/scripts/stories-wave-tick.js +102 -472
  526. package/.agents/scripts/sync-agentrc.js +3 -21
  527. package/.agents/scripts/sync-claude-agents.js +9 -55
  528. package/.agents/scripts/sync-claude-commands.js +20 -110
  529. package/.agents/scripts/test-wrapper.js +6 -43
  530. package/.agents/scripts/update-coverage-baseline.js +5 -22
  531. package/.agents/scripts/update-crap-baseline.js +7 -30
  532. package/.agents/scripts/update-duplication-baseline.js +16 -92
  533. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  534. package/.agents/scripts/update-ticket-state.js +1 -7
  535. package/.agents/scripts/validate-skills.js +6 -26
  536. package/.agents/templates/agent-protocol.md +2 -2
  537. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  538. package/.agents/workflows/audit-accessibility.md +4 -7
  539. package/.agents/workflows/audit-adrs.md +3 -6
  540. package/.agents/workflows/audit-architecture.md +3 -11
  541. package/.agents/workflows/audit-baselines.md +6 -9
  542. package/.agents/workflows/audit-clean-code.md +8 -12
  543. package/.agents/workflows/audit-data-model.md +3 -7
  544. package/.agents/workflows/audit-dependencies.md +4 -7
  545. package/.agents/workflows/audit-devops.md +4 -8
  546. package/.agents/workflows/audit-documentation.md +1 -4
  547. package/.agents/workflows/audit-mobile.md +4 -7
  548. package/.agents/workflows/audit-navigability.md +3 -6
  549. package/.agents/workflows/audit-performance.md +2 -4
  550. package/.agents/workflows/audit-privacy.md +4 -7
  551. package/.agents/workflows/audit-quality.md +4 -7
  552. package/.agents/workflows/audit-security.md +4 -7
  553. package/.agents/workflows/audit-seo.md +4 -7
  554. package/.agents/workflows/audit-sre.md +4 -7
  555. package/.agents/workflows/audit-to-stories.md +17 -30
  556. package/.agents/workflows/audit-ux-ui.md +4 -7
  557. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  558. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  559. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  560. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  561. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  562. package/.agents/workflows/helpers/plan-reference.md +86 -139
  563. package/.agents/workflows/helpers/qa-core.md +12 -0
  564. package/.agents/workflows/memory-consolidate.md +1 -1
  565. package/.agents/workflows/qa-assist.md +27 -71
  566. package/.agents/workflows/qa-explore.md +19 -59
  567. package/.agents/workflows/qa-run.md +11 -33
  568. package/README.md +1 -1
  569. package/bin/mandrel.js +5 -46
  570. package/bin/postinstall.js +18 -107
  571. package/docs/CHANGELOG.md +25 -0
  572. package/lib/cli/doctor.js +11 -71
  573. package/lib/cli/init.js +26 -165
  574. package/lib/cli/migrate.js +5 -64
  575. package/lib/cli/registry.js +84 -467
  576. package/lib/cli/sync-agents.js +4 -64
  577. package/lib/cli/sync-commands.js +11 -64
  578. package/lib/cli/sync.js +34 -213
  579. package/lib/cli/uninstall.js +40 -219
  580. package/lib/cli/update.js +105 -661
  581. package/lib/cli/version-check.js +8 -72
  582. package/lib/cli/version-helpers.js +14 -87
  583. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  584. package/lib/migrations/index.js +15 -92
  585. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  586. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  587. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  588. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  589. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  590. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  591. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  592. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  593. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  594. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  595. package/package.json +16 -14
  596. package/.agents/docs/SDLC.md +0 -590
  597. package/.agents/docs/quality-gates.md +0 -1183
  598. package/.agents/rules/known-tooling-behavior.md +0 -200
  599. package/.agents/rules/orchestration-error-handling.md +0 -61
  600. package/.agents/rules/test-seams.md +0 -59
  601. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  602. package/.agents/schemas/baselines/lint.schema.json +0 -47
  603. package/.agents/scripts/check-action-pinning.js +0 -260
  604. package/.agents/scripts/check-audit-attribution.js +0 -302
  605. package/.agents/scripts/check-baseline-drift.js +0 -211
  606. package/.agents/scripts/check-baseline-scope.js +0 -362
  607. package/.agents/scripts/check-generated-validator.js +0 -202
  608. package/.agents/scripts/check-knip-entries.js +0 -159
  609. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  610. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  611. package/.agents/scripts/check-schema-references.js +0 -368
  612. package/.agents/scripts/check-test-portability.js +0 -512
  613. package/.agents/scripts/check-workflow-citations.js +0 -218
  614. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  615. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  616. package/.agents/scripts/install-matrix-assert.js +0 -326
  617. package/.agents/scripts/lib/audit-advisories.js +0 -195
  618. package/.agents/scripts/lib/audit-attribution.js +0 -134
  619. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  620. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  621. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  622. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  623. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  624. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  625. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  626. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  627. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  628. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  629. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  630. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  631. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  632. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  633. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  634. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  635. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  636. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  637. package/.agents/scripts/lib/fs-walk.js +0 -52
  638. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  639. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  640. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  641. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  642. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  643. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  644. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  645. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  646. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  647. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  648. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  649. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  650. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  651. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  652. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  653. package/.agents/scripts/post-structured-comment.js +0 -127
  654. package/.agents/scripts/provision-git-hooks.js +0 -85
  655. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  656. package/.agents/scripts/run-coverage.js +0 -197
  657. package/.agents/scripts/run-lint.js +0 -133
  658. package/.agents/scripts/run-test-profile.js +0 -129
  659. package/.agents/scripts/run-verify.js +0 -125
  660. package/.agents/scripts/test-isolate.js +0 -55
  661. 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>}