mandrel 2.60.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  318. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  319. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  320. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  321. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  322. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  323. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  324. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  325. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  326. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  327. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  329. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  330. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  331. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  332. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  333. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  334. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  335. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  336. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  337. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  339. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  340. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  341. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  342. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  343. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  344. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  345. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  346. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  347. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  348. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  349. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  350. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  351. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  352. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  353. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  354. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  355. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  356. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  357. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  358. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  359. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  360. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  361. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  362. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  363. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  364. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  365. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  366. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  367. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  368. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  369. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  370. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  371. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  390. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  391. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  392. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  393. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  394. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  395. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  396. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  397. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  398. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  400. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  401. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  402. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  403. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  404. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  405. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  406. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  407. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  408. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  409. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  410. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  411. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  412. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  413. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  414. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  415. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  416. package/.agents/scripts/lib/path-security.js +3 -6
  417. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  418. package/.agents/scripts/lib/preflight-runner.js +13 -69
  419. package/.agents/scripts/lib/process-group.js +143 -0
  420. package/.agents/scripts/lib/project-root.js +2 -8
  421. package/.agents/scripts/lib/provider-factory.js +2 -25
  422. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  423. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  424. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  425. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  426. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  427. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  428. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  429. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  430. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  431. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  432. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  433. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  434. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  435. package/.agents/scripts/lib/signals/index.js +2 -19
  436. package/.agents/scripts/lib/signals/schema.js +14 -109
  437. package/.agents/scripts/lib/signals/write.js +2 -11
  438. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  439. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  440. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  441. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  442. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  443. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  444. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  445. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  446. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  447. package/.agents/scripts/lib/source-extensions.js +11 -42
  448. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  449. package/.agents/scripts/lib/stdio-flush.js +9 -36
  450. package/.agents/scripts/lib/story-adjacency.js +8 -40
  451. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  452. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  453. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  454. package/.agents/scripts/lib/temp-retention.js +42 -143
  455. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  456. package/.agents/scripts/lib/test-env.js +12 -65
  457. package/.agents/scripts/lib/test-run-credit.js +10 -65
  458. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  459. package/.agents/scripts/lib/test-temp.js +38 -184
  460. package/.agents/scripts/lib/test-tiers.js +12 -96
  461. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  462. package/.agents/scripts/lib/transpile.js +15 -74
  463. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  464. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  465. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  466. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  467. package/.agents/scripts/lib/validation-evidence.js +21 -96
  468. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  469. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  470. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  471. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  472. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  473. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  474. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  475. package/.agents/scripts/lib/workflow-closure.js +22 -105
  476. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  477. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  478. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  480. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  481. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  482. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  483. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  484. package/.agents/scripts/lib/worktree-manager.js +15 -40
  485. package/.agents/scripts/lint-issue-body.js +12 -68
  486. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  487. package/.agents/scripts/merge-baseline.js +30 -104
  488. package/.agents/scripts/nav-registry-diff.js +22 -108
  489. package/.agents/scripts/notify.js +12 -69
  490. package/.agents/scripts/plan-context.js +27 -111
  491. package/.agents/scripts/plan-critics.js +12 -66
  492. package/.agents/scripts/plan-persist.js +31 -148
  493. package/.agents/scripts/plan-run-epilogue.js +11 -37
  494. package/.agents/scripts/pr-watch-with-update.js +76 -267
  495. package/.agents/scripts/providers/github/auth.js +3 -8
  496. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  497. package/.agents/scripts/providers/github/board-add.js +5 -21
  498. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  499. package/.agents/scripts/providers/github/cache.js +2 -14
  500. package/.agents/scripts/providers/github/comments.js +7 -40
  501. package/.agents/scripts/providers/github/compose.js +3 -19
  502. package/.agents/scripts/providers/github/errors.js +22 -125
  503. package/.agents/scripts/providers/github/issues.js +31 -123
  504. package/.agents/scripts/providers/github/labels.js +24 -124
  505. package/.agents/scripts/providers/github/mappers.js +5 -27
  506. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  507. package/.agents/scripts/providers/github/project-board.js +2 -17
  508. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  509. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  510. package/.agents/scripts/providers/github/search-budget.js +9 -39
  511. package/.agents/scripts/providers/github/search-query.js +5 -26
  512. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  513. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  514. package/.agents/scripts/providers/github/tickets.js +32 -134
  515. package/.agents/scripts/providers/github.js +18 -59
  516. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  517. package/.agents/scripts/quality-preview.js +35 -220
  518. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  519. package/.agents/scripts/resolve-stories.js +16 -67
  520. package/.agents/scripts/resync-status-column.js +6 -25
  521. package/.agents/scripts/run-tests.js +29 -104
  522. package/.agents/scripts/single-story-close.js +23 -135
  523. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  524. package/.agents/scripts/single-story-init.js +47 -209
  525. package/.agents/scripts/stories-wave-tick.js +102 -472
  526. package/.agents/scripts/sync-agentrc.js +3 -21
  527. package/.agents/scripts/sync-claude-agents.js +9 -55
  528. package/.agents/scripts/sync-claude-commands.js +20 -110
  529. package/.agents/scripts/test-wrapper.js +6 -43
  530. package/.agents/scripts/update-coverage-baseline.js +5 -22
  531. package/.agents/scripts/update-crap-baseline.js +7 -30
  532. package/.agents/scripts/update-duplication-baseline.js +16 -92
  533. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  534. package/.agents/scripts/update-ticket-state.js +1 -7
  535. package/.agents/scripts/validate-skills.js +6 -26
  536. package/.agents/templates/agent-protocol.md +2 -2
  537. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  538. package/.agents/workflows/audit-accessibility.md +4 -7
  539. package/.agents/workflows/audit-adrs.md +3 -6
  540. package/.agents/workflows/audit-architecture.md +3 -11
  541. package/.agents/workflows/audit-baselines.md +6 -9
  542. package/.agents/workflows/audit-clean-code.md +8 -12
  543. package/.agents/workflows/audit-data-model.md +3 -7
  544. package/.agents/workflows/audit-dependencies.md +4 -7
  545. package/.agents/workflows/audit-devops.md +4 -8
  546. package/.agents/workflows/audit-documentation.md +1 -4
  547. package/.agents/workflows/audit-mobile.md +4 -7
  548. package/.agents/workflows/audit-navigability.md +3 -6
  549. package/.agents/workflows/audit-performance.md +2 -4
  550. package/.agents/workflows/audit-privacy.md +4 -7
  551. package/.agents/workflows/audit-quality.md +4 -7
  552. package/.agents/workflows/audit-security.md +4 -7
  553. package/.agents/workflows/audit-seo.md +4 -7
  554. package/.agents/workflows/audit-sre.md +4 -7
  555. package/.agents/workflows/audit-to-stories.md +17 -30
  556. package/.agents/workflows/audit-ux-ui.md +4 -7
  557. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  558. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  559. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  560. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  561. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  562. package/.agents/workflows/helpers/plan-reference.md +86 -139
  563. package/.agents/workflows/helpers/qa-core.md +12 -0
  564. package/.agents/workflows/memory-consolidate.md +1 -1
  565. package/.agents/workflows/qa-assist.md +27 -71
  566. package/.agents/workflows/qa-explore.md +19 -59
  567. package/.agents/workflows/qa-run.md +11 -33
  568. package/README.md +1 -1
  569. package/bin/mandrel.js +5 -46
  570. package/bin/postinstall.js +18 -107
  571. package/docs/CHANGELOG.md +25 -0
  572. package/lib/cli/doctor.js +11 -71
  573. package/lib/cli/init.js +26 -165
  574. package/lib/cli/migrate.js +5 -64
  575. package/lib/cli/registry.js +84 -467
  576. package/lib/cli/sync-agents.js +4 -64
  577. package/lib/cli/sync-commands.js +11 -64
  578. package/lib/cli/sync.js +34 -213
  579. package/lib/cli/uninstall.js +40 -219
  580. package/lib/cli/update.js +105 -661
  581. package/lib/cli/version-check.js +8 -72
  582. package/lib/cli/version-helpers.js +14 -87
  583. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  584. package/lib/migrations/index.js +15 -92
  585. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  586. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  587. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  588. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  589. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  590. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  591. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  592. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  593. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  594. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  595. package/package.json +16 -14
  596. package/.agents/docs/SDLC.md +0 -590
  597. package/.agents/docs/quality-gates.md +0 -1183
  598. package/.agents/rules/known-tooling-behavior.md +0 -200
  599. package/.agents/rules/orchestration-error-handling.md +0 -61
  600. package/.agents/rules/test-seams.md +0 -59
  601. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  602. package/.agents/schemas/baselines/lint.schema.json +0 -47
  603. package/.agents/scripts/check-action-pinning.js +0 -260
  604. package/.agents/scripts/check-audit-attribution.js +0 -302
  605. package/.agents/scripts/check-baseline-drift.js +0 -211
  606. package/.agents/scripts/check-baseline-scope.js +0 -362
  607. package/.agents/scripts/check-generated-validator.js +0 -202
  608. package/.agents/scripts/check-knip-entries.js +0 -159
  609. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  610. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  611. package/.agents/scripts/check-schema-references.js +0 -368
  612. package/.agents/scripts/check-test-portability.js +0 -512
  613. package/.agents/scripts/check-workflow-citations.js +0 -218
  614. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  615. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  616. package/.agents/scripts/install-matrix-assert.js +0 -326
  617. package/.agents/scripts/lib/audit-advisories.js +0 -195
  618. package/.agents/scripts/lib/audit-attribution.js +0 -134
  619. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  620. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  621. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  622. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  623. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  624. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  625. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  626. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  627. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  628. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  629. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  630. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  631. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  632. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  633. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  634. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  635. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  636. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  637. package/.agents/scripts/lib/fs-walk.js +0 -52
  638. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  639. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  640. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  641. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  642. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  643. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  644. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  645. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  646. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  647. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  648. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  649. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  650. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  651. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  652. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  653. package/.agents/scripts/post-structured-comment.js +0 -127
  654. package/.agents/scripts/provision-git-hooks.js +0 -85
  655. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  656. package/.agents/scripts/run-coverage.js +0 -197
  657. package/.agents/scripts/run-lint.js +0 -133
  658. package/.agents/scripts/run-test-profile.js +0 -129
  659. package/.agents/scripts/run-verify.js +0 -125
  660. package/.agents/scripts/test-isolate.js +0 -55
  661. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -2,37 +2,18 @@
2
2
  /* node:coverage ignore file */
3
3
 
4
4
  /**
5
- * Cross-platform driver for `npm test`.
5
+ * Cross-platform driver for `npm test`. Cleanup runs in-process so reserved
6
+ * temp artefacts are removed even when tests fail (`posttest` would not run).
6
7
  *
7
- * npm lifecycle `posttest` scripts only run after a successful `test` script.
8
- * This wrapper keeps cleanup in the same process path as the Node test runner
9
- * so reserved test temp artefacts are removed even when tests fail.
8
+ * The child env unsets `NOTIFICATION_WEBHOOK_URL` so no test POSTs to a live
9
+ * webhook from `.env` (`MANDREL_ALLOW_TEST_WEBHOOKS=1` opts back in).
10
10
  *
11
- * Webhook scrub: the test child inherits an environment where
12
- * `NOTIFICATION_WEBHOOK_URL` is unset and `NODE_ENV=test`. Operators keep a
13
- * real webhook URL in `.env` for development (resolveConfig loads it into
14
- * process.env); without this scrub, any test that transitively reaches
15
- * `notify()` POSTs to the live endpoint. Set `MANDREL_ALLOW_TEST_WEBHOOKS=1`
16
- * to opt back in for the rare case where a contract test deliberately
17
- * exercises a sandbox endpoint.
11
+ * Every tier enumerates explicit file targets (`node --test` has no negative
12
+ * pattern), which overflows the Windows ~32 767-char command line, so targets
13
+ * are chunked into one spawn per chunk.
18
14
  *
19
- * Windows arg-length safety: every tier enumerates explicit test-file
20
- * targets. `quick` / `integration` always did (they exclude specific slow
21
- * suites, so a single glob will not do), and `full` joined them in Story
22
- * #5111 — `node --test` has no negative pattern, so "everything except
23
- * `tests/e2e/**`" is only sayable as a file set. With ~700+ targets the
24
- * joined command line crosses the Windows `CreateProcess` ~32 767-char
25
- * `lpCommandLine` ceiling, and `spawnSync` throws `ENAMETOOLONG` before a
26
- * single test runs. To stay safe on every platform the runner partitions the
27
- * targets into chunks whose joined length stays well under that ceiling
28
- * (`MAX_TARGET_CHARS`) and spawns one `node --test` process per chunk,
29
- * aggregating the exit codes. On POSIX the far larger
30
- * `POSIX_MAX_TARGET_CHARS` budget collapses every tier back into one spawn.
31
- *
32
- * Suite credit (Story #5313): a green full-tier run inside a `story-<id>`
33
- * checkout deposits the `test` gate's evidence record — the one
34
- * `single-story-close.js` reads — so a bare `npm test` in the worktree is
35
- * credited at unchanged HEAD. See `lib/test-run-credit.js`.
15
+ * A green full-tier run in a `story-<id>` checkout deposits close's `test`
16
+ * gate evidence.
36
17
  */
37
18
 
38
19
  import { spawnSync } from 'node:child_process';
@@ -55,10 +36,6 @@ import { listTestFilesForTier, parseTierArgv } from './lib/test-tiers.js';
55
36
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
56
37
  const ROOT = path.resolve(__dirname, '..', '..');
57
38
 
58
- // The runner contract (flag set, concurrency clamp, tier preflight) is
59
- // declared once in `lib/test-runner-contract.js` so `run-coverage.js` shares
60
- // it by construction. Re-exported here because this module is the runner's
61
- // public face for its own unit tests.
62
39
  export {
63
40
  resolveTestConcurrency,
64
41
  TEST_CONCURRENCY_MAX,
@@ -67,32 +44,15 @@ export {
67
44
  };
68
45
 
69
46
  /**
70
- * Per-spawn character budget for the joined *targets* portion of the argv.
71
- *
72
- * The Windows `CreateProcess` command-line ceiling is 32 767 chars for the
73
- * whole `lpCommandLine` (node exe path + flags + targets + extra args +
74
- * quoting). Budgeting the targets to 8 000 chars keeps every spawn's full
75
- * command line at roughly a quarter of the ceiling — ample headroom for the
76
- * exe path and any pass-through `--test-name-pattern` args — while keeping
77
- * the chunk count (and thus the extra `node` start-ups) low.
78
- *
79
- * `MAX_TARGET_CHARS` is the **Windows** budget. On POSIX hosts `ARG_MAX` is
80
- * far higher (~256 KB on macOS, ~1 MB on Linux), so applying the Windows
81
- * budget there needlessly serializes the quick tier into several sequential
82
- * `node --test` spawns — each chunk pays a fresh runner start-up, and cores
83
- * idle at every chunk's tail. `POSIX_MAX_TARGET_CHARS` (100 000) lets the
84
- * whole quick-tier target list (~33 000 chars today) collapse into a single
85
- * spawn on POSIX while staying far below `ARG_MAX`.
86
- * `resolveMaxTargetChars` picks the budget per platform; the Windows
87
- * semantics of `MAX_TARGET_CHARS` are unchanged.
47
+ * Per-spawn budget for the joined targets. Windows: ~a quarter of the
48
+ * 32 767-char ceiling, leaving room for exe path and flags. POSIX `ARG_MAX` is
49
+ * far larger, so its budget keeps a tier in one spawn (each extra chunk pays a
50
+ * runner start-up and idles cores at its tail).
88
51
  */
89
52
  export const MAX_TARGET_CHARS = 8000;
90
53
  export const POSIX_MAX_TARGET_CHARS = 100_000;
91
54
 
92
55
  /**
93
- * Resolve the per-spawn target-character budget for the host platform.
94
- * The `platform` parameter is injected in tests.
95
- *
96
56
  * @param {NodeJS.Platform} [platform]
97
57
  * @returns {number}
98
58
  */
@@ -101,12 +61,9 @@ export function resolveMaxTargetChars(platform = process.platform) {
101
61
  }
102
62
 
103
63
  /**
104
- * Partition an ordered list of test-file targets into chunks whose joined
105
- * length (targets + single-space separators) stays at or below `maxChars`.
106
- * Order is preserved. A single target longer than the budget still lands in
107
- * its own chunk rather than being dropped. An empty target list yields a
108
- * single empty chunk so the caller still issues exactly one spawn (matching
109
- * the historical single-spawn behaviour, e.g. the `full`-tier glob path).
64
+ * Order-preserving chunks with joined length ≤ `maxChars`. An oversized
65
+ * target gets its own chunk; an empty list yields one empty chunk so the
66
+ * caller still spawns once.
110
67
  *
111
68
  * @param {string[]} targets
112
69
  * @param {number} [maxChars]
@@ -118,7 +75,6 @@ export function chunkTestTargets(targets, maxChars = MAX_TARGET_CHARS) {
118
75
  let currentLen = 0;
119
76
 
120
77
  for (const target of targets) {
121
- // +1 for the separator that would join this target to the previous one.
122
78
  const addition = target.length + (current.length > 0 ? 1 : 0);
123
79
  if (current.length > 0 && currentLen + addition > maxChars) {
124
80
  chunks.push(current);
@@ -134,23 +90,15 @@ export function chunkTestTargets(targets, maxChars = MAX_TARGET_CHARS) {
134
90
  }
135
91
 
136
92
  /**
137
- * Build the argv for one `node --test` invocation.
138
- *
139
- * **Flag position is load-bearing.** Node stops treating tokens as options
140
- * at the first positional, so every runner flag — the fixed
141
- * `TEST_RUNNER_FLAGS`, the optional `--test-reporter`, and any caller
142
- * `extraArgs` — has to sit *before* the test-file targets. Appending
143
- * `--test-reporter tap` after the targets (what `run-test-profile.js` used
144
- * to do) made Node read the two tokens as two more file patterns: the
145
- * default reporter ran, no TAP was emitted, and the profiler parsed zero
146
- * timed entries out of a full suite run. `reporter` is therefore an option
147
- * of this builder rather than something a caller concatenates on the end.
93
+ * Every flag must precede the targets: Node stops parsing options at the
94
+ * first positional and reads a later flag as a file pattern. Hence
95
+ * `reporter` is an option here, not something a caller appends.
148
96
  *
149
97
  * @param {object} [opts]
150
- * @param {string[]} [opts.extraArgs] Extra runner arguments (flag position).
98
+ * @param {string[]} [opts.extraArgs]
151
99
  * @param {'full' | 'quick' | 'integration'} [opts.tier]
152
100
  * @param {string} [opts.repoRoot]
153
- * @param {string} [opts.reporter] `--test-reporter` value, e.g. `'tap'`.
101
+ * @param {string} [opts.reporter]
154
102
  * @returns {string[]}
155
103
  */
156
104
  export function buildNodeTestArgs({
@@ -181,10 +129,7 @@ export function runTestSuite({
181
129
  } = {}) {
182
130
  const { tier, rest } = parseTierArgv(argv);
183
131
 
184
- // Preflight first, and abort on refusal — the tier's checks exist to stop
185
- // the suite starting from a known-bad state, so running them after the
186
- // spawn would be pointless. Nothing has been created yet, so there is
187
- // nothing to clean up on this path.
132
+ // Nothing has been created yet, so a refusal needs no cleanup.
188
133
  const preflightStatus = preflight({ tier, repoRoot: cwd });
189
134
  if (preflightStatus !== 0) return preflightStatus;
190
135
 
@@ -199,12 +144,7 @@ export function runTestSuite({
199
144
  for (const chunk of chunks) {
200
145
  const testRun = spawn(
201
146
  process.execPath,
202
- // `rest` carries the documented `node --test` pass-throughs
203
- // (`--test-name-pattern`, `--test-only`) — `parseTierArgv` has already
204
- // rejected anything else. They precede the targets for the same reason
205
- // `buildNodeTestArgs` orders them that way: Node stops parsing options
206
- // at the first positional, so a flag after a target is silently read as
207
- // another file pattern.
147
+ // Pass-through flags precede the targets (see `buildNodeTestArgs`).
208
148
  [...TEST_RUNNER_FLAGS, ...rest, ...chunk],
209
149
  { cwd, stdio: 'inherit', env },
210
150
  );
@@ -213,18 +153,14 @@ export function runTestSuite({
213
153
  break;
214
154
  }
215
155
  const chunkStatus = testRun.status ?? 1;
216
- // First non-zero exit code wins; later chunks still run so the full
217
- // failure surface is reported in one CI pass.
156
+ // First non-zero wins; later chunks still run to report every failure.
218
157
  if (chunkStatus !== 0 && status === 0) status = chunkStatus;
219
158
  }
220
159
 
221
160
  cleanup({ repoRoot: cwd });
222
161
 
223
- // A test that spawns a real CLI at the repository root inherits the real
224
- // state directory, so its fixture telemetry can land in the operator's live
225
- // signals tree — where the retro graduator counts it as recurrence evidence
226
- // and files a ticket citing a fixture Story id. Fail the run that caused it
227
- // rather than discovering it from that ticket.
162
+ // Fail a run whose fixture telemetry leaked into the live signals tree,
163
+ // where the retro graduator would count it as real evidence.
228
164
  const polluted = fixtureStreamGuard({ cwd });
229
165
  if (polluted !== 0 && status === 0) status = polluted;
230
166
 
@@ -232,26 +168,15 @@ export function runTestSuite({
232
168
  throw spawnError;
233
169
  }
234
170
 
235
- // Story #5313 — a green full run earns close's `test` credit; best-effort,
236
- // never the exit code.
171
+ // Best-effort; never affects the exit code.
237
172
  depositCredit({ cwd, tier, status, durationMs: Date.now() - startedAt });
238
173
 
239
174
  return status;
240
175
  }
241
176
 
242
177
  /**
243
- * `--help` contract for the runner — the pre-rendered shape
244
- * `lib/cli-usage.js` accepts alongside a spec object, matching how
245
- * `check-baselines.js` declares its own.
246
- *
247
- * Handed to `runAsCli`, which prints it and returns **before** `main` runs.
248
- * That ordering is the whole point: with no `usage` the flag fell through to
249
- * `runTestSuite`, which ran the tier preflight, spawned the full ~10 000-test
250
- * suite, and swept `temp/` — 25+ seconds and a mutated working tree in
251
- * answer to a question about flags.
252
- *
253
- * Exported so the unit test can assert the documented surface without
254
- * spawning the CLI.
178
+ * `runAsCli` prints this and returns before `main`, so `--help` never runs
179
+ * the suite.
255
180
  */
256
181
  export const USAGE = `Usage: node .agents/scripts/run-tests.js [--tier <full|quick|integration|e2e>] [runner args...]
257
182
 
@@ -1,42 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * single-story-close.js — Close a Story against `main` (v2 `/mandrel-deliver` path).
5
- *
6
- * Thin CLI entry for `/mandrel-deliver` / `helpers/deliver-story`. Opens a PR from
7
- * `story-<id>` to `project.baseBranch`, runs Story-scope review, and arms
8
- * auto-merge. There is no Epic parent, epic-merge-lock, or wave merge.
9
- *
10
- * Pipeline (each step is a phase under
11
- * `./lib/orchestration/single-story-close/phases/`):
12
- *
13
- * 1. close-validation — canonical gate chain against `baseBranch`
14
- * 2. base-sync — `origin/<baseBranch>` → Story branch (Story #2580)
15
- * 3. push — `git push -u` the Story branch
16
- * 4. pull-request — `gh pr list` probe + `gh pr create`
17
- * 5. code-review — Story-scope review (Epic #2815 / Story #2839)
18
- * 6. auto-merge — `gh pr merge --auto --squash --delete-branch`
19
- * 7. label flip + notify — Story → `agent::closing` (Story #3385; the
20
- * `agent::done` flip + issue-close is deferred to
21
- * the post-merge confirmation step,
22
- * `single-story-confirm-merge.js`)
23
- * 8. worktree-reap — drop the per-Story worktree
24
- * 9. confirm-merge — close-and-land (Story #4428; the DEFAULT for
25
- * every run since `delivery.routing.closeAndLand`):
26
- * poll the just-armed PR to merge confirmation
27
- * (reusing `confirmStoryMerged`), capture the
28
- * Story follow-ups, or terminate `agent::blocked`
29
- * with a classified `merge.unlanded` event — or
30
- * `merge.flip-failed` when the merge landed and
31
- * only the label write failed. Skipped when the
32
- * operator owns the merge (`--no-wait-merge`,
33
- * `--no-auto-merge`, or `autoMerge: "strict"`),
34
- * which rests at `agent::closing` for the human.
35
- *
36
- * Existing tests import the re-exported helpers
37
- * (`runSingleStoryClose`, `ensurePullRequest`, `parsePrNumber`,
38
- * `enableAutoMerge`, `handleSyncFailure`, `buildSyncFailureCommentBody`,
39
- * `runStoryScopeReview`, `buildStoryReviewCrossRefBody`) from this file.
4
+ * single-story-close.js — close a Story against the base branch: gates,
5
+ * base-sync, push, PR, Story-scope review, arm auto-merge, flip to
6
+ * `agent::closing`, reap the worktree, then (by default) wait for the merge.
7
+ * The wait is skipped when the operator owns the merge (`--no-wait-merge`,
8
+ * `--no-auto-merge`, `autoMerge: "strict"`); an arm FAILURE still waits and
9
+ * blocks, keeping the must-land contract.
40
10
  *
41
11
  * Usage:
42
12
  * node single-story-close.js --story <STORY_ID> [--cwd <main-repo>]
@@ -47,62 +17,15 @@
47
17
  * [--rerun-advisory <n>]
48
18
  * [--override-review-block <reason>]
49
19
  *
50
- * `--override-review-block <reason>` is the one sanctioned way
51
- * past a code-review CRITICAL blocker. A critical finding halts this script
52
- * before auto-merge, and until this flag existed there was no override at all —
53
- * so an operator who had read a finding and judged it wrong could only land by
54
- * running `gh pr merge` themselves, bypassing the gate with nothing written
55
- * down. The flag does not weaken the gate; it moves that escape hatch into a
56
- * mandatory-reason audit trail (Story comment + PR comment + a
57
- * `review-block-overridden` friction signal) and reports
58
- * `gates.codeReview: "overridden"` on the terminal envelope. A bare or
59
- * too-short reason fails during option parsing, before any phase runs.
60
- *
61
- * `--merge-watch-mode` (Story #4949) overrides `delivery.mergeWatch.mode` for
62
- * one invocation, on the same explicit-wins-over-config precedence
63
- * `--max-wait-seconds` uses, and the two compose. It exists because run
64
- * topology is invisible from inside close: a solo delivery is cheapest waiting
65
- * in the foreground, while the Nth close of a wave pays that wait as
66
- * serialized dead time. The config default therefore stays `sync` and the
67
- * orchestrator — the only party that knows N — passes `async` per close. An
68
- * unrecognized value fails during option parsing, before any phase runs.
69
- *
70
- * Close-and-land is the DEFAULT for every run (Story #4428 introduced it as
71
- * `--wait-merge`; `delivery.routing.closeAndLand` — default `true` — made it
72
- * the default, and Story #4539 made that knob actually readable). Resolution
73
- * order, highest first: `--no-wait-merge` (explicit opt-out, always wins);
74
- * operator-owns-the-merge (`--no-auto-merge` or `delivery.ci.autoMerge:
75
- * "strict"` — the PR was deliberately left un-armed, so there is nothing to
76
- * land and the Story rests at `agent::closing`); explicit `--wait-merge`;
77
- * then the config. A genuine arm FAILURE is not an opt-out — it still waits
78
- * and therefore still blocks, which is what keeps the must-land contract
79
- * intact.
20
+ * `--override-review-block <reason>` is the audited escape past a code-review
21
+ * CRITICAL blocker (instead of a hand-merge with no record).
22
+ * `--merge-watch-mode async` is passed per close by the orchestrator, the only
23
+ * party that knows the run has N Stories and a foreground wait is dead time.
80
24
  *
81
- * Every invocation emits ONE schema-validated terminal envelope
82
- * (`.agents/schemas/story-deliver-terminal.schema.json`, Story #4543) on
83
- * stdout between `--- STORY DELIVER TERMINAL ---` markers. Its `status` is
84
- * the contract; the exit code mirrors it:
85
- *
86
- * 0 — `landed`: the PR merged, the Story is `agent::done`, and the
87
- * post-land tail ran (follow-ups, status resync, local ref
88
- * cleanup, base fast-forward).
89
- * 3 — `pending`: RESUMABLE, not a failure. Either the per-invocation merge
90
- * wait (`delivery.mergeWatch.maxWaitSeconds`, default 300s
91
- * to fit a single host tool invocation) expired with the PR
92
- * still healthy and in flight, or the operator owns the
93
- * merge (`--no-wait-merge` / `--no-auto-merge` /
94
- * `autoMerge: "strict"`). NO label was mutated and no
95
- * `merge.unlanded` event was emitted. The envelope's
96
- * `nextCommand` names the single command that resumes it,
97
- * and the cumulative budget is anchored at the PR's
98
- * createdAt so the resume does not restart the clock.
99
- * 1 — `blocked` or `failed`: a classified hard block (the Story carries
100
- * `agent::blocked` and a friction comment) or a phase crash.
101
- *
102
- * The distinct `pending` code is the point: before it, a close-and-land whose
103
- * CI outlived the host's tool-invocation ceiling was killed mid-poll with no
104
- * terminal path taken at all, and merely shrinking the budget instead would
105
- * have misfiled every slow-CI run as a hard block.
25
+ * Every invocation emits ONE terminal envelope; the exit code mirrors its
26
+ * status: 0 `landed`; 3 `pending` (resumable — the per-invocation wait
27
+ * expired with the PR healthy, or the operator owns the merge; nothing
28
+ * mutated, run `nextCommand`); 1 `blocked` or `failed`.
106
29
  *
107
30
  * @see .agents/workflows/helpers/deliver-story.md
108
31
  * @see .agents/schemas/story-deliver-terminal.schema.json
@@ -118,7 +41,6 @@ import {
118
41
  failedTerminalFor,
119
42
  gatesForFailedPhase,
120
43
  } from './lib/orchestration/single-story-close/failed-terminal.js';
121
- import { enableAutoMergeWith } from './lib/orchestration/single-story-close/phases/auto-merge.js';
122
44
  import {
123
45
  buildSyncFailureCommentBody,
124
46
  handleSyncFailure,
@@ -128,29 +50,14 @@ import {
128
50
  parsePrNumber,
129
51
  runStoryScopeReview,
130
52
  } from './lib/orchestration/single-story-close/phases/code-review.js';
131
- import { ensurePullRequestWith } from './lib/orchestration/single-story-close/phases/pull-request.js';
132
53
  import {
133
54
  emitTerminalEnvelope,
134
55
  exitCodeForTerminal,
135
56
  } from './lib/orchestration/story-deliver-terminal.js';
136
57
 
137
- // Story #2990 moved the `gh`-spawn boundary into the `lib/gh-exec.js`
138
- // facade (the same shim the `providers/github/` gateways use). The
139
- // re-exports below preserve the SUT's public surface so tests and the
140
- // orchestration body keep importing `ensurePullRequest` /
141
- // `enableAutoMerge` from this file unchanged.
142
- export const ensurePullRequest = ensurePullRequestWith;
143
- export const enableAutoMerge = enableAutoMergeWith;
144
-
145
- // Re-export pure helpers verbatim — they don't touch `execFileSync`
146
- // or any URL-mocked module, so the phase exports work unmodified.
147
- // `gatesForFailedPhase` now lives beside the envelope it feeds
148
- // (`single-story-close/failed-terminal.js`); it is re-exported here so the
149
- // CLI's public surface is unchanged by that move.
150
- // `resolveRunScopedConfig` (Story #4891) is the run-scoped config pin the
151
- // pipeline reads before its first phase; it is part of this CLI's surface for
152
- // the same reason the sync helpers are — the runner reaches it only through a
153
- // dynamic import, so this file is where it is statically visible.
58
+ // Pure helpers re-exported as this CLI's public surface; the runner is
59
+ // reached only via dynamic import, so this is where they are statically
60
+ // visible.
154
61
  export {
155
62
  buildStoryReviewCrossRefBody,
156
63
  buildSyncFailureCommentBody,
@@ -170,22 +77,9 @@ export async function runSingleStoryClose(opts) {
170
77
  }
171
78
 
172
79
  /**
173
- * CLI entry — resolves the process exit code from the terminal envelope's
174
- * status rather than from a thrown/not-thrown distinction, so `pending`
175
- * (resumable) is distinguishable from `blocked` (come look) without parsing
176
- * stdout.
177
- *
178
- * The catch parses argv through the **non-throwing** wrapper (Story #4959).
179
- * It used to call `parseSprintArgs()` — re-invoking the very parser that had
180
- * just thrown, since `parseMergeWatchMode` made argv parsing fallible. The
181
- * second throw escaped the handler, so an unparseable argv produced a bare
182
- * stack trace with no envelope and no friction signal, on the surface whose
183
- * whole contract is that every invocation emits exactly one envelope. An
184
- * error handler may not depend on an operation already known to fail.
185
- *
186
- * A parse rejection carries no `closePhase`, so the envelope reports `init` —
187
- * accurate: the runner rejected the flag before any phase ran, and nothing
188
- * was mutated.
80
+ * Exit code comes from the envelope's status. The catch parses argv with the
81
+ * non-throwing wrapper: the strict parser may be what just threw, and every
82
+ * invocation must still emit exactly one envelope.
189
83
  */
190
84
  async function main() {
191
85
  try {
@@ -194,13 +88,9 @@ async function main() {
194
88
  } catch (err) {
195
89
  const terminal = failedTerminalFor(err, parseSprintArgsTolerant().args);
196
90
  if (!terminal) throw err;
197
- // Mirror runAsCli's default error line (which this catch pre-empts) so the
198
- // human-facing failure text is unchanged, then emit the envelope.
91
+ // Mirrors runAsCli's default error line, which this catch pre-empts.
199
92
  Logger.error(`[single-story-close] Fatal error: ${formatCliError(err)}`);
200
93
  emitTerminalEnvelope(terminal);
201
- // Story #4578 — a close that died before the runner could report its own
202
- // terminal is exactly the friction the retro must see, so the crash path
203
- // gets the same emit the happy path does. Best-effort; cannot throw.
204
94
  await emitTerminalFriction({ envelope: terminal });
205
95
  return exitCodeForTerminal(terminal);
206
96
  }
@@ -236,10 +126,8 @@ runAsCli(import.meta.url, main, {
236
126
  ],
237
127
  [
238
128
  '--override-review-block <reason>',
239
- // Deliberately does not spell the merge CLI invocation: the
240
- // merge-lockout rule in `check-lifecycle-lint.js` forbids that literal
241
- // in any string outside `phases/auto-merge.js`, and it is right to —
242
- // the point of this flag is that arming stays on the one code path.
129
+ // Must not spell the merge CLI invocation: `check-lifecycle-lint.js`
130
+ // forbids that literal outside `phases/auto-merge.js`.
243
131
  'Land despite a Story-scope code-review CRITICAL blocker you have reviewed and judged wrong. The reason is mandatory (≥12 chars) and is recorded on the Story, on the PR, and as a `review-block-overridden` friction signal; the terminal envelope reports `gates.codeReview: "overridden"`. Use this instead of merging the PR by hand with the GitHub CLI — a hand-merge bypasses the gate with no record at all.',
244
132
  ],
245
133
  ],