mandrel 2.59.0 → 2.61.0

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