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,46 +1,16 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * CLI: ensure `coverage/coverage-final.json` is present and fresh before the
4
- * CRAP gate fires. Wired into close-validation (always) and pre-push (with
5
- * `--skip-when-no-crap-files` so untouched-source pushes stay fast).
3
+ * Ensures `coverage/coverage-final.json` is fresh before the CRAP gate: skip
4
+ * when the gate is off, no changed file is under `crap.targetDirs`, or the
5
+ * content-digest stamp matches; otherwise run `test:coverage` behind the
6
+ * host-level full-suite lock and stamp on success.
6
7
  *
7
- * Behaviour:
8
- * 1. Resolve `delivery.quality.crap`. If `enabled === false`, exit 0.
9
- * 2. With `--skip-when-no-crap-files`: read `git diff --name-only <ref>...HEAD`
10
- * (default ref `main`) and exit 0 if no changed file lives under
11
- * `crap.targetDirs`.
12
- * 3. Test freshness: content digest of `crap.targetDirs` vs. the persisted
13
- * capture stamp (`coverage/.capture-stamp.json`), falling back to the
14
- * artifact-mtime heuristic when no stamp exists. Exit 0 when fresh.
15
- * 4. Otherwise announce the uncredited full-suite run — naming the
16
- * invocation that would have deposited credit — and then spawn
17
- * `npm run test:coverage`, serialized behind the host-level full-suite
18
- * lock (Story #5173) so two concurrent runs on one checkout do not race;
19
- * write a fresh capture stamp on success and propagate the exit code.
20
- * With `--require-credited`, step 4 refuses instead of spawning, so the
21
- * cost is never paid unannounced.
8
+ * `--require-credited` must stay an argument, never a config read: as policy
9
+ * it also refused the depositing run, leaving no path that could deposit.
22
10
  *
23
- * **`--require-credited` is an argument, not a config read (Story #5278).**
24
- * `delivery.execution.requireCreditedCapture` is a policy about *close*: the
25
- * close gate must not silently pay for a suite the worker was supposed to
26
- * have deposited. Reading it here applied the refusal to every invocation
27
- * including the worker's depositing one, so turning the policy on left no
28
- * path that could ever deposit and bricked the CRAP gate outright. The policy
29
- * now lives where it is enforced — `close-validation/gates.js` passes this
30
- * flag when the consumer sets it — and a bare invocation always runs.
31
- *
32
- * Step 3 is preceded by the changed-file skip when
33
- * `delivery.quality.gates.crap.incrementalCoverage.skipWhenUnchanged` is on
34
- * (the default): no changed file under `crap.targetDirs` versus `baseRef`
35
- * means no capture at all.
36
- *
37
- * Exit codes:
38
- * 0 — coverage is fresh (or capture skipped/succeeded).
39
- * 1 — capture run failed (broken tests or coverage-threshold breach), or
40
- * the run was refused because it carried no credit and
41
- * `--require-credited` was passed. The caller MUST
42
- * surface this — silently passing here would defeat the CRAP gate's
43
- * `requireCoverage: true` policy.
11
+ * Exit codes: 0 fresh/skipped/captured; 1 capture failed or refused (callers
12
+ * MUST surface it); 75 lock wait expired and deferred (only under
13
+ * `MANDREL_FULL_SUITE_LOCK_ON_EXPIRY=defer`); 124 suite timed out.
44
14
  */
45
15
  import { getChangedFiles } from './lib/changed-files.js';
46
16
  import { isDirectInvocation } from './lib/cli-utils.js';
@@ -62,17 +32,15 @@ import { Logger } from './lib/Logger.js';
62
32
  import { hasNpmScript, readPackageScripts } from './lib/npm-scripts.js';
63
33
 
64
34
  /**
65
- * Parse the full `process.argv` (index 2 onward) into the capture options.
66
- *
35
+ * A `null` ref defers the fallback to `resolveChangedFilesRef`.
67
36
  * @param {string[]} argv
68
- * @returns {{ skipWhenNoCrapFiles: boolean, requireCredited: boolean, ref: string, cwd: string }}
37
+ * @returns {{ skipWhenNoCrapFiles: boolean, requireCredited: boolean, ref: string | null, cwd: string }}
69
38
  */
70
39
  export function parseArgs(argv) {
71
40
  const out = {
72
41
  skipWhenNoCrapFiles: false,
73
- // Story #5278 — an ARGUMENT, never a config read. See `runCoverageCapture`.
74
42
  requireCredited: false,
75
- ref: 'main',
43
+ ref: null,
76
44
  cwd: process.cwd(),
77
45
  };
78
46
  for (let i = 2; i < argv.length; i += 1) {
@@ -86,16 +54,7 @@ export function parseArgs(argv) {
86
54
  }
87
55
 
88
56
  /**
89
- * The capture decision core, extracted from the CLI shell so the whole
90
- * decision table (disabled gate, missing npm script, changed-file skip,
91
- * freshness skip, capture + stamp) is reachable without spawning
92
- * `npm run test:coverage` or touching the real filesystem.
93
- *
94
- * Every seam on the optional final `deps` parameter defaults to the real
95
- * implementation (`.agents/rules/test-seams.md` rules 1-2, 4), so the CLI
96
- * shell below and any production caller are unchanged.
97
- *
98
- * @param {string[]} [argv] Full `process.argv`-shaped array.
57
+ * @param {string[]} [argv]
99
58
  * @param {{
100
59
  * resolveConfigImpl?: typeof resolveConfig,
101
60
  * getQualityImpl?: typeof getQuality,
@@ -109,9 +68,9 @@ export function parseArgs(argv) {
109
68
  * filterFilesUnderTargetsImpl?: typeof filterFilesUnderTargets,
110
69
  * logger?: { info: Function, warn: Function, error: Function },
111
70
  * }} [deps]
112
- * @returns {number} process exit code
71
+ * @returns {Promise<number>}
113
72
  */
114
- export function runCoverageCapture(argv = process.argv, deps = {}) {
73
+ export async function runCoverageCapture(argv = process.argv, deps = {}) {
115
74
  const {
116
75
  resolveConfigImpl = resolveConfig,
117
76
  getQualityImpl = getQuality,
@@ -134,13 +93,7 @@ export function runCoverageCapture(argv = process.argv, deps = {}) {
134
93
  return 0;
135
94
  }
136
95
 
137
- // Story #4473 — detect the "missing npm script" misconfiguration
138
- // distinctly. `close-validation/gates.js` already declines to register
139
- // this gate when `test:coverage` is absent, so reaching here without the
140
- // script means a direct/pre-push invocation in a consumer that never
141
- // defined it. Surface a one-line, fix-naming diagnostic instead of
142
- // spawning `npm run test:coverage` only to propagate npm's opaque
143
- // "Missing script" exit code.
96
+ // Name the fix rather than propagate npm's opaque "Missing script" exit.
144
97
  if (!hasNpmScriptImpl(readPackageScriptsImpl(args.cwd), 'test:coverage')) {
145
98
  logger.error(
146
99
  '[coverage-capture] ✖ No "test:coverage" script in package.json. ' +
@@ -150,29 +103,15 @@ export function runCoverageCapture(argv = process.argv, deps = {}) {
150
103
  return 1;
151
104
  }
152
105
 
153
- // Story #5173 — the host-level full-suite lock. Resolved once here, where
154
- // the config is already in scope, and composed over the capture runner so
155
- // whichever path reaches the spawn is serialized without either of them
156
- // knowing about it. `delivery.execution.fullSuiteLock: false` and
157
- // `MANDREL_FULL_SUITE_LOCK=0` each disable it; both hatches live in
158
- // `isFullSuiteLockEnabled`.
159
- // Two wrappers, composed outermost-first: the credit probe announces (or
160
- // refuses) the run, and only a run that survives it reaches the host lock.
161
- // Whichever capture path gets here spawns through both without knowing
162
- // about either.
106
+ // Outermost first: the credit probe announces or refuses the run, and only
107
+ // a surviving run reaches the host-level full-suite lock.
163
108
  const capture = creditedCapture(lockedCapture(runCaptureImpl, config), {
164
109
  requireCredited: args.requireCredited,
165
110
  logger,
166
111
  });
167
112
 
168
- // Story #4981/#5173 — the capture skip, gated by
169
- // `delivery.quality.gates.crap.incrementalCoverage.skipWhenUnchanged` (on
170
- // by default). `null` means "not applicable" (switched off, or a
171
- // ref-resolution error) — fall through to the full-scope path below rather
172
- // than silently skipping capture.
173
- // The two capture paths take the same collaborators bar one; naming that
174
- // set once keeps a new seam from being threaded into one and forgotten on
175
- // the other.
113
+ // Shared so a new seam cannot reach one capture path and miss the other.
114
+ // An incremental `null` means not applicable: fall through to full scope.
176
115
  const shared = {
177
116
  crap,
178
117
  coverage,
@@ -185,29 +124,26 @@ export function runCoverageCapture(argv = process.argv, deps = {}) {
185
124
  logger,
186
125
  };
187
126
 
188
- const incrementalResult = tryIncrementalCapture({
127
+ const incrementalResult = await tryIncrementalCapture({
189
128
  ...shared,
190
129
  filterFilesUnderTargetsImpl,
191
130
  });
192
131
  if (incrementalResult !== null) return incrementalResult;
193
132
 
194
- return runFullScopeCapture(shared);
133
+ return await runFullScopeCapture(shared);
195
134
  }
196
135
 
197
- // cli-opt-out: synchronous main returns an exit code that is forwarded via process.exit(code); runAsCli's async-main signature does not preserve the result code.
198
- // The direct-invocation guard keeps `import`ing this module (from the unit
199
- // tests that drive `runCoverageCapture` with injected seams) side-effect free;
200
- // invoked as a CLI the behaviour — exit code and log lines — is unchanged.
136
+ // cli-opt-out: main resolves an exit code that is forwarded via process.exit(code); runAsCli's async-main signature does not preserve the result code.
201
137
  if (isDirectInvocation(import.meta.url)) {
202
- try {
203
- // `--help` is answered before the decision core runs: it used to fall
204
- // through to the capture path, so asking this script to describe itself
205
- // spawned the whole coverage suite.
206
- process.exit(
207
- handleCoverageCaptureHelp(process.argv) ? 0 : runCoverageCapture(),
208
- );
209
- } catch (err) {
210
- Logger.error('[coverage-capture] unexpected error:', err);
211
- process.exit(1);
212
- }
138
+ // `--help` must not reach the core, which would spawn the whole suite.
139
+ (handleCoverageCaptureHelp(process.argv)
140
+ ? Promise.resolve(0)
141
+ : runCoverageCapture()
142
+ ).then(
143
+ (code) => process.exit(code),
144
+ (err) => {
145
+ Logger.error('[coverage-capture] unexpected error:', err);
146
+ process.exit(1);
147
+ },
148
+ );
213
149
  }
@@ -1,58 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * deliver-light.js — the `/deliver-light` entry point (Story #4740).
4
+ * `/deliver-light` entry point — a thin shell, not a second engine: a
5
+ * risk-only suitability gate, a receipt Story, then the same init/close
6
+ * scripts `/mandrel-deliver` uses (never reimplemented). `--backstop`
7
+ * re-checks the ACTUAL diff, the only size block. An escalation ends the
8
+ * light path, not the session.
5
9
  *
6
- * A **thin entry point, not a second delivery engine.** It runs the
7
- * suitability gate, authors a minimal receipt `type::story`, and then hands off
8
- * to the SAME engine scripts `/mandrel-deliver` uses:
9
- *
10
- * suitability gate → inline receipt Story → single-story-init.js
11
- * → (agent implements + self-evals) → diff backstop
12
- * → single-story-close.js (close-and-land, every gate byte-identical)
13
- *
14
- * Worktree, branch, lease, PR, and merge mechanics are **invoked, never
15
- * reimplemented** — this file contains no parallel init/close logic
16
- * ({@link buildNextCommands} references the engine scripts by name). The
17
- * reusable decision core lives in
18
- * {@link module:lib/orchestration/light-suitability}; this module is the CLI
19
- * shell plus the receipt-authoring and diff-backstop wiring.
20
- *
21
- * Two modes:
22
- *
23
- * - **gate** (default) — judge a prompt's predicted footprint. On
24
- * `proceed-light` it authors the receipt Story (via the plan-persist
25
- * `createStoryIssues` surface) and prints the init/close hand-off,
26
- * carrying any predicted-shape `warnings[]` (Story #5313: an over-ceiling
27
- * prediction warns, it no longer stops). An un-ledgered verdict or an
28
- * un-waivable risk rule emits an `escalated` terminal envelope, never
29
- * landing silently. The former attended stop-and-ask outcome and the
30
- * flag that answered it went with the gate they answered.
31
- * - **backstop** (`--backstop --story <id>`) — re-check the ACTUAL diff of
32
- * the Story branch after implementation; exit non-zero when it exceeds the
33
- * light ceilings, so an over-scope diff is blocked rather than landed.
34
- *
35
- * ## Escalation is terminal, not advisory (Story #4746)
36
- *
37
- * Over-scope under `--yes` emits a schema-validated `story-deliver-terminal`
38
- * envelope with status `escalated` and **ends the session**. Before that it was
39
- * an ordinary gate envelope plus exit 2 — a warning a caller could walk past,
40
- * and one mandrel-bench 2.13.0 light-arm run did exactly that: it read the
41
- * escalation, invoked `/mandrel-plan` in the same session, and delivered. In-session
42
- * planning under-decomposed (ONE Story against the scenario's 3-5 contract,
43
- * where a fresh `/mandrel-plan` session on the identical seed authored four), so
44
- * escalation silently produced the outcome the guard exists to prevent.
45
- * {@link module:lib/orchestration/story-deliver-terminal.buildEscalationTerminal}
46
- * carries the guarantees the schema then enforces.
47
- *
48
- * Usage:
49
- * node .agents/scripts/deliver-light.js --prompt "<text>" \
50
- * --creates path,path --acceptance 1 --route lite --reason "<why>"
51
- * node .agents/scripts/deliver-light.js --prompt "<text>" --amends '#123' --route lite --reason "<why>"
52
- * node .agents/scripts/deliver-light.js --backstop --story 4741
53
- *
54
- * Exit codes: 0 ok (proceed / clean backstop), 1 usage error, 2 the gate did
55
- * not proceed light (an `escalated` terminal), 3 the diff backstop blocked.
10
+ * Exit codes: 0 ok, 1 usage error, 2 escalated, 3 backstop blocked.
56
11
  */
57
12
 
58
13
  import { parseArgs } from 'node:util';
@@ -81,37 +36,26 @@ import { createProvider } from './lib/provider-factory.js';
81
36
  const HELP = `\
82
37
  Usage:
83
38
  deliver-light.js --prompt <text> [--creates csv] [--refactors csv]
84
- [--acceptance n] [--kinds csv] [--magnitude m]
85
- [--uncertainty u] [--route lite|full] [--reason <text>]
86
- [--amends '#id'] [--yes]
39
+ --reason <text> [--amends '#id']
87
40
  deliver-light.js --backstop --story <id>
88
41
 
89
42
  The thin /deliver-light entry point: suitability gate → inline receipt Story →
90
43
  the same single-story-init.js / single-story-close.js engine /mandrel-deliver uses.
91
44
 
92
- The gate judges EFFORT and RISK, not artifact counts: N instances of one
93
- mechanical edit is one kind at N sites. A predicted shape past a light ceiling
94
- is a WARNING on the envelope, not a refusal (Story #5313); only an un-ledgered
95
- verdict or an un-waivable risk rule (sensitive path, migration span) escalates.
96
- The --backstop pass enforces size against the actual diff.
45
+ The gate judges RISK, not size. Only two things refuse: a verdict with no
46
+ recorded reason, and an un-waivable risk rule the predicted PATHS trip (a
47
+ sensitive-path class, a migration paired with its consumers). The predicted-
48
+ shape ceilings were self-declared buckets and are gone (Story #5344, after
49
+ Story #5313 had already demoted them to warnings). The --backstop pass measures
50
+ the ACTUAL diff and is the only size block.
97
51
 
98
52
  Gate options:
99
53
  --prompt <text> Operator prompt describing the change. Required for the gate.
100
54
  --creates <csv> Predicted NEW file paths (comma-separated).
101
55
  --refactors <csv> Predicted edited/existing file paths (comma-separated).
102
- --acceptance <n> Predicted acceptance-criteria count (default 1). Not capped.
103
- --kinds <csv> Distinct KINDS of change (default: one per assumption, so
104
- N same-shaped edits count once).
105
- --magnitude <m> Coarse effort bucket: trivial | moderate | substantial
106
- (default moderate; substantial routes to /mandrel-plan).
107
- --uncertainty <u> determined (the request fixes the shape) | needs-design
108
- (default determined; needs-design routes to /mandrel-plan).
109
- --route <r> Ledgered model verdict route: lite | full.
110
- --reason <text> Recorded reason for a lite verdict (required for lite).
56
+ --reason <text> Recorded reason for taking the light path. Required: an
57
+ un-ledgered verdict escalates.
111
58
  --amends <#id> Mark this as an amendment of an existing issue.
112
- --yes Unattended marker. Escalation is terminal either way;
113
- the flag is accepted so unattended callers keep their
114
- invocation shape.
115
59
 
116
60
  Backstop options:
117
61
  --backstop Re-check the ACTUAL diff after implementation. Bounds the
@@ -126,8 +70,6 @@ Backstop options:
126
70
  `;
127
71
 
128
72
  /**
129
- * Split a comma-separated path list into trimmed, non-empty entries.
130
- *
131
73
  * @param {string|undefined} csv
132
74
  * @returns {string[]}
133
75
  */
@@ -140,9 +82,6 @@ export function parseCsvPaths(csv) {
140
82
  }
141
83
 
142
84
  /**
143
- * Assemble the predicted `changes[]` footprint from the declared creates /
144
- * refactors lists — the input {@link deriveLightSuitability} shape-checks.
145
- *
146
85
  * @param {{ creates?: string[], refactors?: string[] }} args
147
86
  * @returns {Array<{ path: string, assumption: string }>}
148
87
  */
@@ -154,63 +93,26 @@ export function buildPredictedChanges({ creates = [], refactors = [] } = {}) {
154
93
  }
155
94
 
156
95
  /**
157
- * Synthesize a predicted-acceptance array of the requested length — the shape
158
- * gate reads the count, not the text, so placeholder strings suffice. A count
159
- * below 1 yields a single-item array (a Story with no contract cannot be judged
160
- * trivial, and the shape derivation rejects a zero-length acceptance anyway).
161
- *
162
- * @param {unknown} count
163
- * @returns {string[]}
164
- */
165
- export function synthesizeAcceptance(count) {
166
- const n =
167
- typeof count === 'number' && Number.isFinite(count) && count >= 1
168
- ? Math.floor(count)
169
- : 1;
170
- return Array.from({ length: n }, (_v, i) => `AC-${i + 1}`);
171
- }
172
-
173
- /**
174
- * Run the suitability gate purely — no I/O. Returns the outcome envelope the
175
- * CLI serializes. The prompt text and `--amends` target are deliberately **not**
176
- * inputs: routing is shape-checked identically whether or not the change is an
177
- * amendment (Story #4740 R3), and the prompt's text carries no routing signal —
178
- * the predicted footprint does. Both flow into the receipt Story instead.
179
- *
96
+ * Pure. The prompt and `--amends` are deliberately not inputs: only the
97
+ * recorded reason and the predicted paths carry a routing signal.
180
98
  * @param {{
181
99
  * creates?: string[],
182
100
  * refactors?: string[],
183
- * acceptance?: number,
184
- * kinds?: string[],
185
- * magnitude?: string,
186
- * uncertainty?: string,
187
- * route?: string,
188
101
  * reason?: string,
189
102
  * injectedRules?: object,
190
- * }} args `kinds` / `magnitude` / `uncertainty` are the declared effort-and-risk
191
- * axes the gate judges (Story #4764); omitting them declares no signal, not a
192
- * small one — an unrecognized bucket is reported as a warning (Story #5313).
103
+ * }} args
193
104
  * @returns {{ action: string, suitability: object, outcome: object }}
194
105
  */
195
106
  export function runLightGate({
196
107
  creates = [],
197
108
  refactors = [],
198
- acceptance,
199
- kinds,
200
- magnitude,
201
- uncertainty,
202
- route,
203
109
  reason,
204
110
  injectedRules,
205
111
  } = {}) {
206
112
  const predictedChanges = buildPredictedChanges({ creates, refactors });
207
113
  const suitability = deriveLightSuitability({
208
114
  predictedChanges,
209
- predictedAcceptance: synthesizeAcceptance(acceptance),
210
- predictedKinds: kinds,
211
- predictedMagnitude: magnitude,
212
- predictedUncertainty: uncertainty,
213
- verdict: { route, reason },
115
+ verdict: { reason },
214
116
  injectedRules,
215
117
  });
216
118
  const outcome = resolveLightGateOutcome({ suitability });
@@ -218,9 +120,6 @@ export function runLightGate({
218
120
  }
219
121
 
220
122
  /**
221
- * Author the receipt Story via the plan-persist creation surface (reused, not
222
- * reimplemented). Injectable seams keep it unit-testable without a network.
223
- *
224
123
  * @param {{
225
124
  * provider: object,
226
125
  * prompt: string,
@@ -256,10 +155,6 @@ export async function createLightReceipt({
256
155
  }
257
156
 
258
157
  /**
259
- * The engine hand-off — the SAME scripts `/mandrel-deliver` uses. Named here as
260
- * commands, never reimplemented: this is the whole of deliver-light's
261
- * relationship to worktree/branch/lease/PR/merge mechanics.
262
- *
263
158
  * @param {number} storyId
264
159
  * @returns {{ init: string, close: string }}
265
160
  */
@@ -271,9 +166,6 @@ export function buildNextCommands(storyId) {
271
166
  }
272
167
 
273
168
  /**
274
- * Emit a JSON envelope on stdout (the machine surface) so a headless caller can
275
- * branch on it. Human-readable log lines stay on stderr.
276
- *
277
169
  * @param {object} envelope
278
170
  * @param {boolean} pretty
279
171
  */
@@ -286,10 +178,7 @@ function emit(envelope, pretty) {
286
178
  }
287
179
 
288
180
  /**
289
- * Backstop mode — re-check the actual diff. The decision lives in
290
- * {@link module:lib/orchestration/light-backstop}; this branches and prints.
291
- *
292
- * @param {object} values Parsed CLI values.
181
+ * @param {object} values
293
182
  * @param {{ resolveFn?: typeof resolveBackstopOutcome }} [deps]
294
183
  * @returns {Promise<number>}
295
184
  */
@@ -310,25 +199,9 @@ async function runBackstopMode(values, deps = {}) {
310
199
  }
311
200
 
312
201
  /**
313
- * Gate mode — judge the prompt and, on proceed, author the receipt Story.
314
- *
315
- * The three outcomes are deliberately asymmetric in what they emit:
316
- *
317
- * - **`escalate-plan`** returns a schema-validated `escalated` **terminal
318
- * envelope** and stops (Story #4746). It is placed **first**, above every
319
- * creation call site, so "nothing was started" is a property of the
320
- * control flow rather than a claim the envelope makes about itself.
321
- * - **`proceed-light`** authors the receipt Story and prints the hand-off,
322
- * carrying the predicted-shape `warnings[]` (Story #5313) on the envelope
323
- * and on stderr, so an over-ceiling prediction is stated rather than
324
- * silently waved through. The former attended stop-and-ask outcome is
325
- * gone: the gate never had a question a human could answer that the diff
326
- * backstop does not answer better.
327
- *
328
- * The injectable seams exist so the no-side-effect guarantee is testable
329
- * without a network: a test asserts the escalate path never reaches them.
330
- *
331
- * @param {object} values Parsed CLI values.
202
+ * The escalate branch sits above every creation call site, so "nothing was
203
+ * started" is a property of the control flow, not a claim of the envelope.
204
+ * @param {object} values
332
205
  * @param {{
333
206
  * createProviderFn?: typeof createProvider,
334
207
  * resolveConfigFn?: typeof resolveConfig,
@@ -356,13 +229,6 @@ export async function runGateMode(values, deps = {}) {
356
229
  const gate = runLightGate({
357
230
  creates: parseCsvPaths(values.creates),
358
231
  refactors: parseCsvPaths(values.refactors),
359
- acceptance: values.acceptance
360
- ? Number.parseInt(String(values.acceptance), 10)
361
- : 1,
362
- kinds: parseCsvPaths(values.kinds),
363
- magnitude: values.magnitude,
364
- uncertainty: values.uncertainty,
365
- route: values.route,
366
232
  reason: values.reason,
367
233
  });
368
234
 
@@ -372,16 +238,14 @@ export async function runGateMode(values, deps = {}) {
372
238
  reasons: gate.outcome.reasons,
373
239
  });
374
240
  emitTerminalFn(envelope);
375
- // The refusal is still telemetered (Story #4856): the ceilings stay
376
- // recalibratable from evidence even now that only risk rules refuse.
241
+ // Telemetered so the rules stay recalibratable from evidence.
377
242
  await recordRefusalFn({ gate, amends: values.amends });
378
243
  Logger.warn(
379
- `[deliver-light] ESCALATED to /mandrel-plan — this session ENDS here; run ${envelope.nextCommand} in a FRESH session: ${gate.outcome.reasons.join('; ')}`,
244
+ `[deliver-light] ESCALATED to /mandrel-plan — the light path ENDS here; run ${envelope.nextCommand}, seeded with these reasons: ${gate.outcome.reasons.join('; ')}`,
380
245
  );
381
246
  return exitCodeForTerminal(envelope);
382
247
  }
383
248
 
384
- const warnings = gate.outcome.warnings ?? [];
385
249
  const provider = createProviderFn(resolveConfigFn());
386
250
  const receipt = await createReceiptFn({
387
251
  provider,
@@ -398,15 +262,11 @@ export async function runGateMode(values, deps = {}) {
398
262
  action: 'proceed-light',
399
263
  storyId: receipt.storyId,
400
264
  url: receipt.url,
401
- warnings,
402
265
  nextCommands: buildNextCommands(receipt.storyId),
403
266
  outcome: gate.outcome,
404
267
  },
405
268
  values.pretty,
406
269
  );
407
- for (const warning of warnings) {
408
- Logger.warn(`[deliver-light] ⚠ ${warning}`);
409
- }
410
270
  Logger.info(
411
271
  `[deliver-light] receipt Story #${receipt.storyId} created — hand off to single-story-init.js.`,
412
272
  );
@@ -419,14 +279,8 @@ async function main() {
419
279
  prompt: { type: 'string' },
420
280
  creates: { type: 'string' },
421
281
  refactors: { type: 'string' },
422
- acceptance: { type: 'string' },
423
- kinds: { type: 'string' },
424
- magnitude: { type: 'string' },
425
- uncertainty: { type: 'string' },
426
- route: { type: 'string' },
427
282
  reason: { type: 'string' },
428
283
  amends: { type: 'string' },
429
- yes: { type: 'boolean', default: false },
430
284
  backstop: { type: 'boolean', default: false },
431
285
  story: { type: 'string' },
432
286
  pretty: { type: 'boolean', default: false },
@@ -1,40 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * deliver-recover.js — probe a stranded Story's live state and print the ONE
5
- * command that resumes it (Story #4543).
4
+ * Read-only: probes a stranded Story's live state and prints the ONE command
5
+ * that resumes it — never a menu, and never a re-dispatch, which would re-run
6
+ * init under live work and put a second close on one PR. Covers the
7
+ * merged-but-label-stale Story that `/mandrel-deliver` refuses outright.
6
8
  *
7
- * Read-only by construction. This CLI mutates nothing: it reads the ticket's
8
- * labels and lease, the Story branch locally and via its tracking ref, the
9
- * worktree, and the PR (state + checks), then walks a fixed decision table
10
- * and prints one command with the evidence it was derived from. It never
11
- * prints a menu — a menu of options is what the operator already has, and it
12
- * is the thing they cannot act on.
13
- *
14
- * The strand this exists for above all others is the **merged-but-label-stale**
15
- * Story: a `/mandrel-deliver` re-run refuses it outright, because
16
- * `single-story-init.js` hard-errors on an already-closed Story. Before this
17
- * surface, that Story had no automated way back.
18
- *
19
- * Every command it prints **resumes** — it re-enters the in-flight worker or
20
- * close, or closes the branch that is already pushed. None of them re-dispatch
21
- * the Story, and that is deliberate: since Story #4876 the close-and-land tail
22
- * belongs to the dispatching orchestrator, so a worker returning without a
23
- * terminal envelope is the expected shape rather than evidence the Story never
24
- * ran. Answering it with a fresh dispatch re-runs `single-story-init.js`
25
- * underneath live work and puts a second close on one PR.
26
- *
27
- * Usage:
28
- * node .agents/scripts/deliver-recover.js --story <STORY_ID> [--cwd <main-repo>]
29
- * [--json]
30
- *
31
- * Exit codes:
32
- * 0 — a recovery shape was resolved and its next command printed (including
33
- * the "nothing to recover" shapes). Reading state is not a failure.
34
- * 1 — the probe itself could not run (unreadable ticket, bad input).
35
- *
36
- * @see .agents/scripts/lib/orchestration/deliver-recover.js
37
- * @see .agents/schemas/story-deliver-terminal.schema.json
9
+ * Exit codes: 0 a shape resolved (including nothing-to-recover), 1 the probe
10
+ * itself could not run.
38
11
  */
39
12
 
40
13
  import { parseArgs } from 'node:util';
@@ -94,15 +67,6 @@ export function parseArgv(argv) {
94
67
  }
95
68
 
96
69
  /**
97
- * Probe and report. Exported for testing.
98
- *
99
- * The optional final `deps` parameter is the module's injectable seam
100
- * (`.agents/rules/test-seams.md` rules 1-2): config resolution, provider
101
- * construction, the probe itself, the renderer, and the log sink each default
102
- * to the real implementation, so the CLI path and every production caller are
103
- * unchanged. The pre-existing `injected*` fields on the first argument stay
104
- * supported for callers already threading a resolved provider/config.
105
- *
106
70
  * @param {object} [args]
107
71
  * @param {{
108
72
  * resolveConfigImpl?: typeof resolveConfig,