mandrel 2.60.0 → 2.62.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 (662) 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/merge-queue.js +158 -0
  318. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  319. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  320. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  321. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  322. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  323. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  324. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  325. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  326. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  327. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  329. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  330. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  331. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  332. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  333. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  334. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  335. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  336. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  337. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  339. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  340. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  341. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  342. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  343. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  344. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  345. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  346. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  347. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  348. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  349. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  350. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  351. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  352. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  353. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  354. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  355. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  356. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  357. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  358. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  359. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  360. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  361. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  362. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  363. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  364. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  365. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  366. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  367. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  368. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  369. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  370. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  371. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +190 -280
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +183 -485
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  390. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  391. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  392. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  393. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  394. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  395. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  396. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  397. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  398. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  400. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  401. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  402. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  403. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  404. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  405. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  406. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  407. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  408. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  409. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  410. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  411. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  412. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  413. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  414. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  415. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  416. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  417. package/.agents/scripts/lib/path-security.js +3 -6
  418. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  419. package/.agents/scripts/lib/preflight-runner.js +13 -69
  420. package/.agents/scripts/lib/process-group.js +143 -0
  421. package/.agents/scripts/lib/project-root.js +2 -8
  422. package/.agents/scripts/lib/provider-factory.js +2 -25
  423. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  424. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  425. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  426. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  427. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  428. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  429. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  430. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  431. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  432. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  433. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  434. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  435. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  436. package/.agents/scripts/lib/signals/index.js +2 -19
  437. package/.agents/scripts/lib/signals/schema.js +14 -109
  438. package/.agents/scripts/lib/signals/write.js +2 -11
  439. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  440. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  441. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  442. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  443. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  444. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  445. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  446. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  447. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  448. package/.agents/scripts/lib/source-extensions.js +11 -42
  449. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  450. package/.agents/scripts/lib/stdio-flush.js +9 -36
  451. package/.agents/scripts/lib/story-adjacency.js +8 -40
  452. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  453. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  454. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  455. package/.agents/scripts/lib/temp-retention.js +42 -143
  456. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  457. package/.agents/scripts/lib/test-env.js +12 -65
  458. package/.agents/scripts/lib/test-run-credit.js +10 -65
  459. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  460. package/.agents/scripts/lib/test-temp.js +38 -184
  461. package/.agents/scripts/lib/test-tiers.js +12 -96
  462. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  463. package/.agents/scripts/lib/transpile.js +15 -74
  464. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  465. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  466. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  467. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  468. package/.agents/scripts/lib/validation-evidence.js +21 -96
  469. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  470. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  471. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  472. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  473. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  474. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  475. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  476. package/.agents/scripts/lib/workflow-closure.js +22 -105
  477. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  478. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  480. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  481. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  482. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  483. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  484. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  485. package/.agents/scripts/lib/worktree-manager.js +15 -40
  486. package/.agents/scripts/lint-issue-body.js +12 -68
  487. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  488. package/.agents/scripts/merge-baseline.js +30 -104
  489. package/.agents/scripts/nav-registry-diff.js +22 -108
  490. package/.agents/scripts/notify.js +12 -69
  491. package/.agents/scripts/plan-context.js +27 -111
  492. package/.agents/scripts/plan-critics.js +12 -66
  493. package/.agents/scripts/plan-persist.js +31 -148
  494. package/.agents/scripts/plan-run-epilogue.js +11 -37
  495. package/.agents/scripts/pr-watch-with-update.js +76 -267
  496. package/.agents/scripts/providers/github/auth.js +3 -8
  497. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  498. package/.agents/scripts/providers/github/board-add.js +5 -21
  499. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  500. package/.agents/scripts/providers/github/cache.js +2 -14
  501. package/.agents/scripts/providers/github/comments.js +7 -40
  502. package/.agents/scripts/providers/github/compose.js +3 -19
  503. package/.agents/scripts/providers/github/errors.js +22 -125
  504. package/.agents/scripts/providers/github/issues.js +31 -123
  505. package/.agents/scripts/providers/github/labels.js +24 -124
  506. package/.agents/scripts/providers/github/mappers.js +5 -27
  507. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  508. package/.agents/scripts/providers/github/project-board.js +2 -17
  509. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  510. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  511. package/.agents/scripts/providers/github/search-budget.js +9 -39
  512. package/.agents/scripts/providers/github/search-query.js +5 -26
  513. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  514. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  515. package/.agents/scripts/providers/github/tickets.js +32 -134
  516. package/.agents/scripts/providers/github.js +18 -59
  517. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  518. package/.agents/scripts/quality-preview.js +35 -220
  519. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  520. package/.agents/scripts/resolve-stories.js +16 -67
  521. package/.agents/scripts/resync-status-column.js +6 -25
  522. package/.agents/scripts/run-tests.js +29 -104
  523. package/.agents/scripts/single-story-close.js +23 -135
  524. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  525. package/.agents/scripts/single-story-init.js +47 -209
  526. package/.agents/scripts/stories-wave-tick.js +102 -472
  527. package/.agents/scripts/sync-agentrc.js +3 -21
  528. package/.agents/scripts/sync-claude-agents.js +9 -55
  529. package/.agents/scripts/sync-claude-commands.js +20 -110
  530. package/.agents/scripts/test-wrapper.js +6 -43
  531. package/.agents/scripts/update-coverage-baseline.js +5 -22
  532. package/.agents/scripts/update-crap-baseline.js +7 -30
  533. package/.agents/scripts/update-duplication-baseline.js +16 -92
  534. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  535. package/.agents/scripts/update-ticket-state.js +1 -7
  536. package/.agents/scripts/validate-skills.js +6 -26
  537. package/.agents/templates/agent-protocol.md +2 -2
  538. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  539. package/.agents/workflows/audit-accessibility.md +4 -7
  540. package/.agents/workflows/audit-adrs.md +3 -6
  541. package/.agents/workflows/audit-architecture.md +3 -11
  542. package/.agents/workflows/audit-baselines.md +6 -9
  543. package/.agents/workflows/audit-clean-code.md +8 -12
  544. package/.agents/workflows/audit-data-model.md +3 -7
  545. package/.agents/workflows/audit-dependencies.md +4 -7
  546. package/.agents/workflows/audit-devops.md +4 -8
  547. package/.agents/workflows/audit-documentation.md +1 -4
  548. package/.agents/workflows/audit-mobile.md +4 -7
  549. package/.agents/workflows/audit-navigability.md +3 -6
  550. package/.agents/workflows/audit-performance.md +2 -4
  551. package/.agents/workflows/audit-privacy.md +4 -7
  552. package/.agents/workflows/audit-quality.md +4 -7
  553. package/.agents/workflows/audit-security.md +4 -7
  554. package/.agents/workflows/audit-seo.md +4 -7
  555. package/.agents/workflows/audit-sre.md +4 -7
  556. package/.agents/workflows/audit-to-stories.md +17 -30
  557. package/.agents/workflows/audit-ux-ui.md +4 -7
  558. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  559. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  560. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  561. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  562. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  563. package/.agents/workflows/helpers/plan-reference.md +86 -139
  564. package/.agents/workflows/helpers/qa-core.md +12 -0
  565. package/.agents/workflows/memory-consolidate.md +1 -1
  566. package/.agents/workflows/qa-assist.md +27 -71
  567. package/.agents/workflows/qa-explore.md +19 -59
  568. package/.agents/workflows/qa-run.md +11 -33
  569. package/README.md +1 -1
  570. package/bin/mandrel.js +5 -46
  571. package/bin/postinstall.js +18 -107
  572. package/docs/CHANGELOG.md +32 -0
  573. package/lib/cli/doctor.js +11 -71
  574. package/lib/cli/init.js +26 -165
  575. package/lib/cli/migrate.js +5 -64
  576. package/lib/cli/registry.js +84 -467
  577. package/lib/cli/sync-agents.js +4 -64
  578. package/lib/cli/sync-commands.js +11 -64
  579. package/lib/cli/sync.js +34 -213
  580. package/lib/cli/uninstall.js +40 -219
  581. package/lib/cli/update.js +105 -661
  582. package/lib/cli/version-check.js +8 -72
  583. package/lib/cli/version-helpers.js +14 -87
  584. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  585. package/lib/migrations/index.js +15 -92
  586. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  587. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  588. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  589. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  590. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  591. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  592. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  593. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  594. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  595. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  596. package/package.json +16 -14
  597. package/.agents/docs/SDLC.md +0 -590
  598. package/.agents/docs/quality-gates.md +0 -1183
  599. package/.agents/rules/known-tooling-behavior.md +0 -200
  600. package/.agents/rules/orchestration-error-handling.md +0 -61
  601. package/.agents/rules/test-seams.md +0 -59
  602. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  603. package/.agents/schemas/baselines/lint.schema.json +0 -47
  604. package/.agents/scripts/check-action-pinning.js +0 -260
  605. package/.agents/scripts/check-audit-attribution.js +0 -302
  606. package/.agents/scripts/check-baseline-drift.js +0 -211
  607. package/.agents/scripts/check-baseline-scope.js +0 -362
  608. package/.agents/scripts/check-generated-validator.js +0 -202
  609. package/.agents/scripts/check-knip-entries.js +0 -159
  610. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  611. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  612. package/.agents/scripts/check-schema-references.js +0 -368
  613. package/.agents/scripts/check-test-portability.js +0 -512
  614. package/.agents/scripts/check-workflow-citations.js +0 -218
  615. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  616. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  617. package/.agents/scripts/install-matrix-assert.js +0 -326
  618. package/.agents/scripts/lib/audit-advisories.js +0 -195
  619. package/.agents/scripts/lib/audit-attribution.js +0 -134
  620. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  621. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  622. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  623. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  624. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  625. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  626. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  627. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  628. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  629. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  630. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  631. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  632. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  633. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  634. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  635. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  636. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  637. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  638. package/.agents/scripts/lib/fs-walk.js +0 -52
  639. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  640. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  641. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  642. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  643. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  644. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  645. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  646. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  647. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  648. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  649. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  650. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  651. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  652. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  653. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  654. package/.agents/scripts/post-structured-comment.js +0 -127
  655. package/.agents/scripts/provision-git-hooks.js +0 -85
  656. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  657. package/.agents/scripts/run-coverage.js +0 -197
  658. package/.agents/scripts/run-lint.js +0 -133
  659. package/.agents/scripts/run-test-profile.js +0 -129
  660. package/.agents/scripts/run-verify.js +0 -125
  661. package/.agents/scripts/test-isolate.js +0 -55
  662. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -1,14 +1,7 @@
1
1
  /**
2
- * bootstrap/project-bootstrap — deterministic project bootstrap steps.
3
- *
4
- * Each exported `ensure*` function is one step of the bootstrap. Every step
5
- * is idempotent and additive — re-running on an already-bootstrapped clone
6
- * produces zero file mutations and zero network I/O.
7
- *
8
- * Injectable seams: every function that performs filesystem I/O or spawns a
9
- * child process accepts an optional `fsImpl` / `spawnImpl` default-param so
10
- * unit tests can stub I/O without touching the real filesystem. The seam
11
- * contract is defined in `.agents/rules/test-seams.md`.
2
+ * Deterministic project bootstrap steps. Every step is idempotent and
3
+ * additive: a re-run on a bootstrapped clone mutates nothing and does no
4
+ * network I/O.
12
5
  */
13
6
 
14
7
  import { spawnSync as defaultSpawnSync } from 'node:child_process';
@@ -25,36 +18,19 @@ import { applyQualityBootstrap } from './quality-bootstrap.js';
25
18
 
26
19
  export const SYNC_COMMAND = 'node .agents/scripts/sync-claude-commands.js';
27
20
 
28
- // Epic #4478 (M7-B). The role-scoped agent projection runs in every place the
29
- // command projection does — `sync:agents` script, `prepare`, and the bootstrap
30
- // `sync` phase (`runSyncCommands`) — so `.claude/agents/*.md` materializes for
31
- // hosts that read it, exactly as `.claude/commands/*.md` does.
21
+ // The agent projection runs everywhere the command projection does.
32
22
  export const SYNC_AGENTS_COMMAND = 'node .agents/scripts/sync-claude-agents.js';
33
23
 
34
24
  export const BOOTSTRAP_COMMAND = 'node .agents/scripts/bootstrap.js';
35
25
 
36
- /**
37
- * Marker that identifies the framework's system-prompt import inside a
38
- * consumer `CLAUDE.md`. The wiring step keys idempotence off this exact
39
- * import path so a re-run never duplicates the import line.
40
- */
26
+ /** `CLAUDE.md` wiring keys idempotence off this exact import path. */
41
27
  export const SYSTEM_PROMPT_IMPORT = '@.agents/instructions.md';
42
28
 
43
- /**
44
- * Import block appended to an existing `CLAUDE.md` that lacks the import.
45
- * Mirrors the root `CLAUDE.md` shape (a `## System Prompt` heading above
46
- * the import) so the consumer file reads the same as this repo's own.
47
- */
48
29
  export const SYSTEM_PROMPT_BLOCK = `## System Prompt
49
30
 
50
31
  ${SYSTEM_PROMPT_IMPORT}
51
32
  `;
52
33
 
53
- /**
54
- * Full `CLAUDE.md` body written when the consumer has no `CLAUDE.md` at
55
- * all. A bare title plus the import block is enough for Claude Code to
56
- * hydrate the framework system prompt on cold start.
57
- */
58
34
  export const SYSTEM_PROMPT_CLAUDE_MD = `# Agent Protocols
59
35
 
60
36
  ${SYSTEM_PROMPT_BLOCK}`;
@@ -70,21 +46,12 @@ export const GITIGNORE_BLOCKS = Object.freeze({
70
46
  block:
71
47
  '\n# Project-scoped MCP config carries secrets — keep out of git.\n.mcp.json\n',
72
48
  },
73
- // Story #3894: `.env` holds real secrets (`mandrel init` instructs operators
74
- // to put `GITHUB_TOKEN` here). It MUST be ignored by default so a cold-start
75
- // provision never stages/pushes it. The pattern matches a bare `.env` (with
76
- // an optional trailing slash) but deliberately NOT `.env.example`, the
77
- // committed placeholder that `security-baseline.md` § Secrets Management
78
- // exempts.
49
+ // Matches bare `.env` but NOT the committed `.env.example` placeholder.
79
50
  env: {
80
51
  pattern: /^\s*\.env\/?\s*$/m,
81
52
  block:
82
53
  '\n# Secrets live in .env (e.g. GITHUB_TOKEN) — never commit it. Only .env.example (placeholders) is checked in.\n.env\n',
83
54
  },
84
- // Story #3894: the install ledger is a per-clone install record, not a
85
- // checked-in source artifact. `install-ledger.js` documents that the
86
- // bootstrap `.gitignore` step ignores it — key the entry off the exact
87
- // `LEDGER_RELATIVE_PATH` constant so the doc and code never drift again.
88
55
  installLedger: {
89
56
  pattern: new RegExp(
90
57
  `^\\s*${LEDGER_RELATIVE_PATH.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\s*$`,
@@ -95,9 +62,6 @@ export const GITIGNORE_BLOCKS = Object.freeze({
95
62
  });
96
63
 
97
64
  /**
98
- * Read a JSON file if it exists; return null when missing. Accepts an
99
- * injectable `fsImpl` so callers can stub filesystem access in tests.
100
- *
101
65
  * @param {string} p
102
66
  * @param {typeof fs} [fsImpl]
103
67
  * @returns {object|null}
@@ -108,10 +72,6 @@ function readJsonIfExists(p, fsImpl = fs) {
108
72
  }
109
73
 
110
74
  /**
111
- * Write a pretty-printed JSON file, creating parent directories as needed.
112
- * Accepts an injectable `fsImpl` so callers can stub filesystem access in
113
- * tests.
114
- *
115
75
  * @param {string} p
116
76
  * @param {object} obj
117
77
  * @param {typeof fs} [fsImpl]
@@ -122,28 +82,13 @@ function writeJson(p, obj, fsImpl = fs) {
122
82
  }
123
83
 
124
84
  /**
125
- * The minimum Node.js patch version mandrel requires.
126
- *
127
- * Rationale: `22.22.1` is the Node 22 LTS patch that ships with the
128
- * `node:sqlite` built-in (`--experimental-sqlite` removed from flag
129
- * requirement in 22.5.0, but the module stabilised at 22.22.1 per the
130
- * Node 22 LTS changelog). Pinning to this patch prevents silent failures on
131
- * older 22.x installs that lack the built-in. CI exercises `node-version: 22`
132
- * which resolves to the latest 22.x (always ≥ 22.22.1 in the current GHA
133
- * environment), so CI validates the contract without exercising the exact
134
- * patch floor — the floor is enforced at install time, not in CI.
135
- *
136
- * Single source of truth: `registry.js` and any other consumer MUST import
137
- * this constant rather than duplicating it.
138
- *
139
- * Matches `package.json` `engines.node` (`>=22.22.1 <25`).
85
+ * Node floor SSOT (`node:sqlite` stabilised at 22.22.1); import it, never
86
+ * duplicate. Matches `package.json` `engines.node` (`>=22.22.1 <25`).
140
87
  */
141
88
  export const REQUIRED_NODE_FLOOR = '22.22.1';
142
89
  export const REQUIRED_NODE_CEILING_MAJOR = 25;
143
90
 
144
91
  /**
145
- * Return true when `version` satisfies `>=22.22.1 <25` (same as `engines`).
146
- *
147
92
  * @param {string} version
148
93
  * @returns {boolean}
149
94
  */
@@ -161,10 +106,6 @@ export function satisfiesNodeEngine(version) {
161
106
  }
162
107
 
163
108
  /**
164
- * Step 1 — Verify Node satisfies `engines.node`. Returns `{ ok, version,
165
- * required }` so the CLI can report the detected version regardless of
166
- * whether the check passed.
167
- *
168
109
  * @param {string} [version=process.versions.node]
169
110
  */
170
111
  export function checkNodeVersion(version = process.versions.node) {
@@ -176,12 +117,7 @@ export function checkNodeVersion(version = process.versions.node) {
176
117
  }
177
118
 
178
119
  /**
179
- * Detect the package manager based on lockfile presence. Defaults to
180
- * `npm` when no lock is found (including the `null` case from the shared
181
- * helper where no Node manifest exists at all).
182
- *
183
- * Delegates to the shared `detectPackageManager` helper
184
- * (Story #4048 B3 — one implementation per concept).
120
+ * Lockfile-based; defaults to `npm`.
185
121
  *
186
122
  * @param {string} projectRoot
187
123
  * @param {typeof fs} [fsImpl]
@@ -192,12 +128,8 @@ export function detectPackageManager(projectRoot, fsImpl = fs) {
192
128
  }
193
129
 
194
130
  /**
195
- * Step 2a/2b/2c — Ensure `package.json` exists and carries the
196
- * `sync:commands` + `prepare` + `bootstrap` scripts. The consumer manifest
197
- * is never mutated with framework runtime dependencies: those arrive
198
- * transitively via the `mandrel` package, so bootstrap leaves the
199
- * `dependencies` block untouched (Story #3466). Returns the per-key outcome
200
- * the caller can render.
131
+ * Ensure `package.json` carries the sync/prepare/bootstrap scripts. Never
132
+ * touches `dependencies` — framework deps arrive transitively via `mandrel`.
201
133
  *
202
134
  * @param {object} ctx
203
135
  * @param {typeof fs} [ctx.fsImpl]
@@ -237,9 +169,7 @@ export function ensurePackageJson(ctx) {
237
169
  pkg.scripts.prepare = `${SYNC_COMMAND} && ${SYNC_AGENTS_COMMAND}`;
238
170
  outcomes.scriptsPrepare = 'added';
239
171
  } else {
240
- // Append each projection independently so an existing prepare that already
241
- // carries the command sync still gains the agent sync on the next bootstrap
242
- // (and both are idempotent — a prepare carrying both is left untouched).
172
+ // Append each projection independently so a partial prepare gains the other.
243
173
  let next = prepare;
244
174
  if (!next.includes('sync-claude-commands.js')) {
245
175
  next = `${next} && ${SYNC_COMMAND}`;
@@ -252,9 +182,7 @@ export function ensurePackageJson(ctx) {
252
182
  outcomes.scriptsPrepare = 'appended';
253
183
  }
254
184
  }
255
- // Expose a discoverable `npm run bootstrap` alias for the framework
256
- // setup command. An operator-defined `bootstrap` script always wins —
257
- // we only seed the default when the key is absent.
185
+ // An operator-defined `bootstrap` script always wins.
258
186
  if (!pkg.scripts.bootstrap) {
259
187
  pkg.scripts.bootstrap = BOOTSTRAP_COMMAND;
260
188
  outcomes.scriptsBootstrap = 'added';
@@ -270,11 +198,7 @@ export function ensurePackageJson(ctx) {
270
198
  }
271
199
 
272
200
  /**
273
- * Step 2d — Install dependencies when the framework's sentinel module is
274
- * unresolvable. Bootstrap no longer seeds framework deps into the consumer
275
- * manifest (Story #3466) — they arrive transitively via `mandrel`
276
- * — so the install is triggered purely by an empty/stale `node_modules`.
277
- * Returns `{ ran, manager, skipped, reason }`.
201
+ * Install dependencies when the sentinel module (`ajv`) is unresolvable.
278
202
  *
279
203
  * @param {object} ctx
280
204
  * @param {typeof fs} [ctx.fsImpl]
@@ -310,15 +234,8 @@ export function ensureDependenciesInstalled(ctx) {
310
234
  }
311
235
 
312
236
  /**
313
- * Step 2.5a — Seed `.agentrc.json` when missing.
314
- *
315
- * Seeds from the bundled `starter-agentrc.json` reference, applying the
316
- * operator-identity placeholder substitution (`[OWNER]` / `[REPO]` /
317
- * `[USERNAME]`) and the `baseBranch` override. (Story #3690 removed the
318
- * named config-profile seeding path — the starter reference is the single
319
- * seed source.)
320
- *
321
- * An existing `.agentrc.json` is never overwritten — operator wins.
237
+ * Seed a missing `.agentrc.json` from `starter-agentrc.json` with identity
238
+ * placeholders filled. Never overwrites an existing file.
322
239
  *
323
240
  * @param {object} ctx
324
241
  * @param {typeof fs} [ctx.fsImpl]
@@ -342,9 +259,7 @@ export function ensureAgentrc(ctx) {
342
259
  .replace(/\[OWNER\]/g, ctx.answers.owner)
343
260
  .replace(/\[REPO\]/g, ctx.answers.repo)
344
261
  .replace(/\[USERNAME\]/g, ctx.answers.operatorHandle ?? ctx.answers.owner);
345
- // The starter pins baseBranch to "main"; if the operator chose a
346
- // different default, update the seeded copy so the per-clone config
347
- // matches the live remote HEAD.
262
+ // The starter pins baseBranch to "main".
348
263
  if (ctx.answers.baseBranch && ctx.answers.baseBranch !== 'main') {
349
264
  body = body.replace(
350
265
  /"baseBranch":\s*"main"/,
@@ -356,8 +271,7 @@ export function ensureAgentrc(ctx) {
356
271
  }
357
272
 
358
273
  /**
359
- * Step 2.5b — Validate `.agentrc.json` against the framework's AJV schema.
360
- * Returns `{ ok, errors }`. Caller decides whether to abort.
274
+ * Validate `.agentrc.json` against the AJV schema; the caller decides whether to abort.
361
275
  *
362
276
  * @param {object} ctx
363
277
  * @param {typeof fs} [ctx.fsImpl]
@@ -373,8 +287,7 @@ export async function validateAgentrc(ctx) {
373
287
  if (!fsImpl.existsSync(schemaModule)) {
374
288
  return { ok: false, errors: ['config-settings-schema.js not found'] };
375
289
  }
376
- // pathToFileURL handles Windows drive letters and percent-encoding
377
- // correctly (same fix as commit 2e3d210b in lib/transpile.js).
290
+ // pathToFileURL handles Windows drive letters and percent-encoding.
378
291
  const mod = await import(pathToFileURL(schemaModule).href);
379
292
  const validate = mod.getAgentrcValidator();
380
293
  const data = readJsonIfExists(
@@ -386,24 +299,8 @@ export async function validateAgentrc(ctx) {
386
299
  return { ok: !!ok, errors: ok ? [] : (validate.errors ?? []) };
387
300
  }
388
301
 
389
- // Story #4527/#4530: the UserPromptSubmit sync-hook wiring
390
- // (ensureClaudeSettings, formerly Step 3) was removed. It spawned
391
- // `mandrel sync-commands` on every prompt to keep `.claude/commands/` in
392
- // sync with `.agents/workflows/` — a rewrite racing the harness's own read
393
- // of that same directory while expanding a slash command, and a directory
394
- // that cannot change mid-session in the first place, so the hook reported
395
- // `0 file(s) synced` on effectively every invocation. The real sync points
396
- // already cover every case: `prepare` on install, `mandrel sync` /
397
- // `mandrel update` on upgrade, and doctor's `commands-in-sync` check for
398
- // hand-edits. `lib/cli/uninstall.js#revertClaudeSettings` still removes the
399
- // hook from a consumer who already has it installed from a prior version.
400
-
401
302
  /**
402
- * Step 4 + Step 8 — Ensure `.gitignore` carries every {@link GITIGNORE_BLOCKS}
403
- * entry (`.claude/commands/`, `.mcp.json`, `.env`, and the per-clone install
404
- * ledger). Each block is marker-keyed off a presence pattern, so a re-run is a
405
- * zero-mutation no-op and never appends a duplicate block. Returns a per-block
406
- * outcome (`added` | `already-present`).
303
+ * Append each missing {@link GITIGNORE_BLOCKS} entry, keyed off its presence pattern.
407
304
  *
408
305
  * @param {object} ctx
409
306
  * @param {typeof fs} [ctx.fsImpl]
@@ -431,17 +328,7 @@ export function ensureGitignore(ctx) {
431
328
  }
432
329
 
433
330
  /**
434
- * Materialize the generated GitHub Issue Forms
435
- * (`.github/ISSUE_TEMPLATE/story.yml`) into the consumer
436
- * project (Story #4227). Derived from the Story-body SSOT so a human-filed
437
- * ticket round-trips through `story-body.parse()`. Idempotent and additive,
438
- * mirroring `ensureGitignore`: byte-identical forms are `unchanged`,
439
- * operator-edited forms are preserved (`custom-skip`).
440
- *
441
- * Returns the per-form action envelope keyed by ticket type.
442
- *
443
- * Internal — consumed only by the `issueForms` entry in
444
- * {@link BOOTSTRAP_PHASES} below.
331
+ * Materialize the generated Issue Forms; returns per-form actions keyed by ticket type.
445
332
  *
446
333
  * @param {object} ctx
447
334
  * @param {string} ctx.projectRoot
@@ -456,11 +343,7 @@ function ensureIssueFormsPhase(ctx) {
456
343
  }
457
344
 
458
345
  /**
459
- * Step 5 — Run the sync script. Step 6 (parity) is enforced by the
460
- * sync script itself (it removes stale entries and writes from the
461
- * single source of truth), so a successful exit equals parity.
462
- *
463
- * Returns `{ ok, stdout }`.
346
+ * Run the command and agent projections; the sync itself enforces parity.
464
347
  *
465
348
  * @param {object} ctx
466
349
  * @param {typeof defaultSpawnSync} [ctx.spawnImpl]
@@ -471,9 +354,6 @@ export function runSyncCommands(ctx) {
471
354
  ctx.agentRoot ?? path.join(ctx.projectRoot, '.agents'),
472
355
  'scripts',
473
356
  );
474
- // Both projections run here (Epic #4478, M7-B): the command tree AND the
475
- // role-scoped agent tree, so `mandrel sync` / the postinstall path
476
- // materializes `.claude/agents/*.md` alongside `.claude/commands/*.md`.
477
357
  const projections = [
478
358
  { label: 'sync-claude-commands.js', script: 'sync-claude-commands.js' },
479
359
  { label: 'sync-claude-agents.js', script: 'sync-claude-agents.js' },
@@ -503,19 +383,8 @@ export function runSyncCommands(ctx) {
503
383
  }
504
384
 
505
385
  /**
506
- * Step 6 — Parity check between `.agents/workflows/*.md` and the generated
507
- * flat command tree `.claude/commands/*.md`. Step 5's sync already enforces
508
- * this; this is a belt-and-braces verification that the command projection
509
- * covers every top-level workflow.
510
- *
511
- * A workflow whose frontmatter carries `command: false` is deliberately NOT
512
- * projected to a command — `sync-claude-commands.js` skips it via the same
513
- * `isCommandExcluded` predicate used here. Such a workflow must therefore be
514
- * excluded from the expected-command set, or this check would demand a
515
- * command the sync is contracted never to emit (e.g. the `audit-lighthouse` /
516
- * `audit-security` lenses, which are run by the audit suite, not as slash
517
- * commands). Keeping the two surfaces on one predicate is what stops them
518
- * drifting.
386
+ * Verify `.claude/commands/*.md` matches the projectable workflows. Shares
387
+ * `isCommandExcluded` with the sync so `command: false` workflows never drift.
519
388
  *
520
389
  * @param {object} ctx
521
390
  * @param {typeof fs} [ctx.fsImpl]
@@ -535,9 +404,6 @@ export function checkParity(ctx) {
535
404
  .map((e) => e.name.replace(/\.md$/, ''))
536
405
  .sort()
537
406
  : [];
538
- // Expected commands = projectable workflows only. A `command: false`
539
- // workflow is contracted out of the command tree, so it is not "missing" a
540
- // command — it declined one.
541
407
  const projectable = (name) =>
542
408
  !isCommandExcluded(
543
409
  fsImpl.readFileSync(path.join(workflowsDir, `${name}.md`), 'utf8'),
@@ -554,22 +420,8 @@ export function checkParity(ctx) {
554
420
  }
555
421
 
556
422
  /**
557
- * Step 8.5 — Wire the framework system prompt into a consumer `CLAUDE.md`.
558
- *
559
- * Claude Code hydrates its always-loaded context from a project-root
560
- * `CLAUDE.md`; without the `@.agents/instructions.md` import the framework
561
- * system prompt never loads on cold start. This step makes that wiring
562
- * automatic and idempotent:
563
- *
564
- * - No `CLAUDE.md` at all → write a minimal one carrying the import.
565
- * - `CLAUDE.md` exists but lacks the import → append the import block.
566
- * - `CLAUDE.md` already imports it → no-op (no duplicate import line).
567
- *
568
- * Idempotence is keyed off the literal `SYSTEM_PROMPT_IMPORT` path, so a
569
- * re-run on an already-wired file is a guaranteed zero-mutation no-op.
570
- *
571
- * Returns `{ action, path }` where `action` is one of `created`,
572
- * `appended`, or `already-present`.
423
+ * Ensure `CLAUDE.md` imports the system prompt — without it the framework
424
+ * never loads on cold start. Creates, appends, or no-ops.
573
425
  *
574
426
  * @param {object} ctx
575
427
  * @param {typeof fs} [ctx.fsImpl]
@@ -595,9 +447,7 @@ export function ensureSystemPromptWiring(ctx) {
595
447
  }
596
448
 
597
449
  /**
598
- * Step 9 — Windows git-perf hints (warn-only). On non-Windows this is a
599
- * silent no-op. On Windows the check probes three settings and reports
600
- * which are missing; it never mutates global git config.
450
+ * Windows git-perf hints, warn-only; never mutates global git config.
601
451
  *
602
452
  * @param {object} ctx
603
453
  * @param {typeof fs} [ctx.fsImpl]
@@ -628,34 +478,13 @@ export function checkWindowsGitPerf(ctx) {
628
478
  };
629
479
  }
630
480
 
631
- // ---------------------------------------------------------------------------
632
- // BOOTSTRAP_PHASES (Story #2459 / Task #2473)
633
- //
634
- // The previous `applyProjectBootstrap` was an 11-step inline pipeline with
635
- // three fatal-abort branches (`nodeCheck`, `validation`, `parity`). Each
636
- // phase is now a declarative `{ name, run, isFatal?, formatError? }`
637
- // entry. The single-pass driver `runPhases` reads the array, calls each
638
- // `run(ctx, report)`, accumulates the result onto `report[phase.name]`,
639
- // and routes fatal phases through `throwIfFatal` so the abort message
640
- // remains operator-visible.
641
- //
642
- // `applyProjectBootstrap` collapses to two lines: instantiate an empty
643
- // report, hand it to `runPhases`, return it.
644
- // ---------------------------------------------------------------------------
645
-
646
481
  /**
647
482
  * @typedef {object} BootstrapPhase
648
- * @property {string} name — key used to land the result on the report.
483
+ * @property {string} name — report key.
649
484
  * @property {(ctx: object, report: object) => any|Promise<any>} run
650
- * — executes the phase. May read prior
651
- * phases via `report.<name>`.
652
- * @property {boolean} [isFatal] — when `true`, the driver passes the
653
- * result through `formatError`; if the
654
- * formatter returns a non-empty string,
655
- * the driver throws with that message.
485
+ * — may read prior phases via `report.<name>`.
486
+ * @property {boolean} [isFatal] — throw when `formatError` returns a message.
656
487
  * @property {(result: any) => string|null} [formatError]
657
- * — produces the error message when the
658
- * phase result indicates a fatal abort.
659
488
  */
660
489
 
661
490
  const fatalNodeCheck = (result) =>
@@ -680,17 +509,8 @@ const fatalParity = (result) =>
680
509
  }; orphan commands: ${result.orphanCommand.join(', ') || '(none)'}`;
681
510
 
682
511
  /**
683
- * Pipeline definition — the order, the helpers, and the fatal-abort
684
- * branches. Exported so tests can assert phase ordering, the fatal flag,
685
- * and the report-shape parity guarantee without driving the whole
686
- * bootstrap.
687
- *
688
- * Each project-side mutation phase carries a `phaseGroup` matching one of
689
- * the {@link PHASE_GROUPS}. Since Story #5007 that string is pure
690
- * ledger/uninstall metadata — every phase runs on every install, and the
691
- * ledger decides after the fact which groups actually landed. Phases with no
692
- * `phaseGroup` (the Node-version precondition and the dependency install)
693
- * are always-run infrastructure.
512
+ * Ordered bootstrap pipeline. `phaseGroup` is ledger/uninstall metadata only
513
+ * — every phase runs on every install.
694
514
  */
695
515
  export const BOOTSTRAP_PHASES = Object.freeze([
696
516
  {
@@ -765,12 +585,6 @@ export const BOOTSTRAP_PHASES = Object.freeze([
765
585
  ]);
766
586
 
767
587
  /**
768
- * Throw with the formatted message when the phase is marked fatal and
769
- * the result indicates an abort. Pure helper so the driver stays a
770
- * single-branch loop.
771
- *
772
- * Exported for tests.
773
- *
774
588
  * @param {BootstrapPhase} phase
775
589
  * @param {any} result
776
590
  */
@@ -781,13 +595,6 @@ export function throwIfFatal(phase, result) {
781
595
  }
782
596
 
783
597
  /**
784
- * Iterate `phases` in order; await each phase's `run(ctx, report)`, land
785
- * the result on `report[phase.name]`, then route fatal phases through
786
- * `throwIfFatal`. Returns the accumulated report.
787
- *
788
- * Exported for tests so phase ordering and fatal behaviour can be
789
- * asserted without spawning a full bootstrap.
790
- *
791
598
  * @param {ReadonlyArray<BootstrapPhase>} phases
792
599
  * @param {object} ctx
793
600
  * @returns {Promise<object>}
@@ -803,14 +610,6 @@ export async function runPhases(phases, ctx) {
803
610
  }
804
611
 
805
612
  /**
806
- * Compose every step in order. Each returned key is the outcome of one
807
- * step so the CLI can render a structured summary.
808
- *
809
- * Story #5007 removed the no-write `ctx.preview` branch: it had zero
810
- * production callers (bootstrap's own `--dry-run` renders a hand-rolled text
811
- * plan instead) and it survived only to serve the consent-first install
812
- * screen Story #3690 replaced with a plain summary+confirm loop.
813
- *
814
613
  * @param {object} ctx
815
614
  * @param {string} ctx.projectRoot
816
615
  * @param {string} [ctx.agentRoot]
@@ -820,8 +619,8 @@ export async function runPhases(phases, ctx) {
820
619
  * @param {boolean} [ctx.skipGithub]
821
620
  * @param {boolean} [ctx.skipInstall]
822
621
  * @param {boolean} [ctx.quiet]
823
- * @param {typeof fs} [ctx.fsImpl] — injectable filesystem seam (test-seams.md).
824
- * @param {typeof defaultSpawnSync} [ctx.spawnImpl] — injectable spawn seam (test-seams.md).
622
+ * @param {typeof fs} [ctx.fsImpl]
623
+ * @param {typeof defaultSpawnSync} [ctx.spawnImpl]
825
624
  * @returns {Promise<object>}
826
625
  */
827
626
  export async function applyProjectBootstrap(ctx) {