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,89 +1,18 @@
1
1
  /**
2
- * lib/orchestration/light-suitability.js — the `/deliver-light` suitability
3
- * gate and diff backstop (Story #4740).
4
- *
5
- * ## Why a light entry point exists
6
- *
7
- * mandrel-bench 2.12.0 forensics attributed the framework arm's cost to
8
- * **session multiplication** — repeated cold framework boots (2 for a one-file
9
- * greenfield build, 4 for a change request) — where the bare control does
10
- * comparable small work in a single session, lacking only the quality gates
11
- * and the landing guarantee. `/deliver-light` closes that gap: one session
12
- * straight to execution from an operator prompt, landing through the
13
- * **unchanged** `single-story-close.js` path. This module is the reusable
14
- * decision core the light workflow drives; it owns **no** git, branch, PR, or
15
- * label mutation — those stay in the shared engine scripts.
16
- *
17
- * ## Four invariants keep it proportional, not a planning bypass
18
- *
19
- * 1. **Suitability gate ({@link deriveLightSuitability}).** The prompt's
20
- * predicted footprint is judged by the **shared shape machinery**
21
- * ({@link module:lib/orchestration/complexity-gate.deriveStoryShape} over
22
- * {@link module:lib/orchestration/complexity-gate.STORY_SHAPE_CEILINGS})
23
- * **and** a ledgered model verdict carrying a recorded reason
24
- * ({@link resolveLedgeredVerdict}). Both must agree on `lite`; either
25
- * falling short fails closed to `full`. The shape axes are effort and
26
- * risk — distinct change kinds, a coarse magnitude bucket, uncertainty,
27
- * and epic-scope span — never artifact counts (Story #4764), so this gate
28
- * is deliberately **coarse**: it rejects clearly-epic work, and invariant
29
- * 3 below does the real enforcement against ground truth.
30
- * 2. **The predicted shape is a warning, not a gate ({@link
31
- * resolveLightGateOutcome}, Story #5313).** An over-ceiling prediction
32
- * proceeds light with a `warnings[]` entry naming the exceeded axis — the
33
- * prediction is a guess, and invariant 3 bounds the real change set. Only
34
- * the two things no re-slicing can fix still refuse: an un-ledgered
35
- * verdict and an un-waivable risk rule (a sensitive-path class or a
36
- * migration span), which route `full` through an `escalated` terminal.
37
- * The former `ask-operator` outcome and its `--operator-proceed-light`
38
- * answer are gone with the gate they answered.
39
- * 3. **Diff-derived backstop ({@link checkLightDiffBackstop}).** After
40
- * implementation the **actual** change set is re-checked with
41
- * {@link module:lib/orchestration/review-depth.deriveChangeLevel} plus the
42
- * implementation-only magnitude ceilings of {@link LIGHT_DIFF_CEILINGS} —
43
- * the diff is the real scope signal — and an over-ceiling diff is blocked
44
- * rather than landed silently. Story #4856 moved this from a `maxFiles: 4`
45
- * cardinality ceiling to changed lines over implementation files, and made
46
- * a block **recycle** its receipt Story through `/mandrel-plan` tickets mode
47
- * instead of orphaning it.
48
- * 4. **Minimal receipt Story ({@link buildReceiptStoryTicket}).** A
49
- * `type::story` ticket is authored inline so `refs #`, history, telemetry,
50
- * and the `agent::executing -> agent::done` state machine survive.
51
- *
52
- * Every function here is pure and total: inputs in, decision out, no I/O and no
53
- * throws (except {@link buildReceiptStoryTicket}, which rejects an empty
54
- * prompt — a receipt with no prompt has nothing to record).
2
+ * lib/orchestration/light-suitability.js — pure `/deliver-light` decision
3
+ * core (no git/PR/label mutation). Nothing the caller declares about its own
4
+ * size decides: the gate reads risk off predicted paths plus a recorded
5
+ * reason, and the diff backstop is the only size block.
55
6
  *
56
7
  * @module lib/orchestration/light-suitability
57
8
  */
58
9
 
59
- import {
60
- deriveStoryShape,
61
- SHAPE_CODES,
62
- STORY_SHAPE_CEILINGS,
63
- } from './complexity-gate.js';
10
+ import { deriveStoryShape, SHAPE_CODES } from './complexity-gate.js';
64
11
  import { deriveChangeLevel } from './review-depth.js';
65
12
 
66
13
  /**
67
- * Detect the **un-waivable** risk rules a predicted footprint trips —
68
- * `sensitive-path` and `migration-span` — **independent of which rule the
69
- * shape decision happened to record** (Story #4875).
70
- *
71
- * No re-slicing, shrinking, or operator answer satisfies one: a footprint
72
- * intersecting a sensitive-path class routes `full` however small the change,
73
- * and the diff backstop refuses the same footprint again at the end. But
74
- * {@link deriveStoryShape} reports only the **first** rule a shape trips and
75
- * evaluates the ceiling rules first, so a prompt tripping both `change-kinds`
76
- * and `sensitive-path` is reported as a size objection — which reads as
77
- * appealable, is waivable by an attended operator, and sends the work all the
78
- * way to an implementation the backstop then refuses.
79
- *
80
- * The recovery is that the shape decision attaches the built effort shape to
81
- * every footprint it can judge at all, and that shape carries the risk facts
82
- * (`sensitiveClasses`, `migrationSpan`) whether or not a risk rule fired.
83
- * Reading them here surfaces the objection first-hit reporting hides — the
84
- * difference between a wasted session and a redirected one.
85
- *
86
- * Pure and total.
14
+ * Read from the risk shape, not the recorded `code`: first-hit reporting can
15
+ * hide a risk rule behind a fixable one.
87
16
  *
88
17
  * @param {{ shape?: { sensitiveClasses?: unknown, migrationSpan?: unknown } }} [decision]
89
18
  * A {@link deriveStoryShape} return value.
@@ -129,28 +58,8 @@ function deriveUnwaivableRisk(decision) {
129
58
  }
130
59
 
131
60
  /**
132
- * Ceilings for the **actual landed** change set the diff backstop
133
- * ({@link checkLightDiffBackstop}) enforces, measured on the change's
134
- * implementation half (Story #4856 — see
135
- * {@link module:lib/orchestration/diff-magnitude} for the measured case and the
136
- * companion-class boundary).
137
- *
138
- * The backstop reads ground truth, so it is where size is genuinely enforced;
139
- * the prediction gate above it is a declaration and stays coarse (Story #4764).
140
- * What changed is the **axis**: this used to be `maxFiles: 4`, a cardinality
141
- * ceiling that rejected 79% of this repository's real merged work while passing
142
- * a three-file 323-line rewrite.
143
- *
144
- * - `maxImplLines` — additions plus deletions across implementation files.
145
- * Simulated over 41 merges, 1000 admits 83% of real work
146
- * and rejects exactly the genuinely large changes.
147
- * - `maxImplFiles` — implementation files touched, a *sprawl* tripwire rather
148
- * than a size gate. Set to `DEFAULT_DIFF_WIDTH.softFiles`
149
- * so the light path and `review-depth.js` stop holding two
150
- * different definitions of a narrow diff.
151
- *
152
- * Framework constants, not knobs: a ceiling an operator could widen past what a
153
- * single session safely absorbs is a ceiling that fails silently.
61
+ * Implementation-half ceilings (companions exempt); `maxImplFiles` matches
62
+ * `DEFAULT_DIFF_WIDTH.softFiles`. Constants: a widenable ceiling fails silently.
154
63
  */
155
64
  export const LIGHT_DIFF_CEILINGS = Object.freeze({
156
65
  maxImplLines: 1000,
@@ -158,9 +67,7 @@ export const LIGHT_DIFF_CEILINGS = Object.freeze({
158
67
  });
159
68
 
160
69
  /**
161
- * Coerce a candidate ceiling into a positive integer, falling back to the
162
- * framework default for anything malformed — a stray `0`, `-1`, or `NaN` must
163
- * never widen (or zero out) a light diff ceiling.
70
+ * A malformed ceiling falls back to the default, never widens or zeroes.
164
71
  *
165
72
  * @param {unknown} value
166
73
  * @param {number} fallback
@@ -174,8 +81,6 @@ function normalizeCeiling(value, fallback) {
174
81
  }
175
82
 
176
83
  /**
177
- * Resolve the effective diff ceilings from a caller-supplied partial override.
178
- *
179
84
  * @param {{ maxImplLines?: unknown, maxImplFiles?: unknown }} [ceilings]
180
85
  * @returns {{ maxImplLines: number, maxImplFiles: number }}
181
86
  */
@@ -193,96 +98,51 @@ function resolveDiffCeilings(ceilings) {
193
98
  }
194
99
 
195
100
  /**
196
- * Resolve the model's trivial-vs-standard verdict, held to a ledgering
197
- * contract: a `lite` route counts **only** with a non-empty recorded reason. A lite claim
198
- * without a recorded reason, or any non-`lite` route, fails closed to `full` —
199
- * an unaudited "trust me, it's small" never buys the light path.
200
- *
201
- * Pure and total.
101
+ * No recorded reason fails closed to `full`.
202
102
  *
203
- * @param {{ route?: unknown, reason?: unknown }} [verdict]
103
+ * @param {{ reason?: unknown }} [verdict]
204
104
  * @returns {{
205
- * route: 'lite'|'full',
206
105
  * reason: string|null,
207
106
  * recorded: boolean,
208
107
  * note: string,
209
108
  * }}
210
109
  */
211
- export function resolveLedgeredVerdict({ route, reason } = {}) {
110
+ export function resolveLedgeredVerdict({ reason } = {}) {
212
111
  const recordedReason = typeof reason === 'string' ? reason.trim() : '';
213
- if (route !== 'lite') {
214
- return {
215
- route: 'full',
216
- reason: recordedReason || null,
217
- recorded: recordedReason !== '',
218
- note: 'model verdict is not lite — standard /mandrel-plan route',
219
- };
220
- }
221
112
  if (recordedReason === '') {
222
113
  return {
223
- route: 'full',
224
114
  reason: null,
225
115
  recorded: false,
226
- note: 'lite claim without a recorded reason — fails closed to full (the verdict must be ledgered)',
116
+ note: 'no recorded reason — fails closed to full (the light verdict must be ledgered)',
227
117
  };
228
118
  }
229
119
  return {
230
- route: 'lite',
231
120
  reason: recordedReason,
232
121
  recorded: true,
233
- note: `model verdict: lite (recorded reason): ${recordedReason}`,
122
+ note: `light verdict (recorded reason): ${recordedReason}`,
234
123
  };
235
124
  }
236
125
 
237
126
  /**
238
- * Judge whether an operator prompt's predicted footprint is suitable for the
239
- * light path. The deterministic effort/risk derivation and the ledgered model
240
- * verdict must **both** agree on `lite`; anything else — clearly-epic work, a
241
- * sensitive-path footprint, an unledgered verdict — resolves to `full` (the
242
- * conservative default that routes the operator to `/mandrel-plan`).
243
- *
244
- * The predicted axes are declared by the caller: `predictedKinds` (the distinct
245
- * kinds of change; absent, each entry's `assumption` is its kind, so N
246
- * instances of one mechanical edit count once), `predictedMagnitude`
247
- * (`trivial` | `moderate` | `substantial`), and `predictedUncertainty`
248
- * (`determined` | `needs-design`). A malformed bucket fails closed; an absent
249
- * one carries no signal, because a marginal footprint must not be rejected on
250
- * counts the diff backstop is the right place to enforce.
251
- *
252
- * Pure and total: never throws, never mutates its inputs.
127
+ * Refuses only on un-waivable risk or an un-ledgered verdict; size is bounded
128
+ * later by {@link checkLightDiffBackstop}.
253
129
  *
254
130
  * @param {{
255
131
  * predictedChanges?: unknown,
256
- * predictedAcceptance?: unknown,
257
- * predictedKinds?: unknown,
258
- * predictedMagnitude?: unknown,
259
- * predictedUncertainty?: unknown,
260
- * verdict?: { route?: unknown, reason?: unknown },
132
+ * verdict?: { reason?: unknown },
261
133
  * injectedRules?: object,
262
134
  * selectSensitivePathClassesFn?: Function,
263
135
  * }} [args]
264
136
  * @returns {{
265
137
  * suitable: boolean,
266
- * route: 'lite'|'full',
267
138
  * shape: ReturnType<typeof deriveStoryShape>,
268
139
  * ledger: ReturnType<typeof resolveLedgeredVerdict>,
269
140
  * unwaivable: ReturnType<typeof deriveUnwaivableRisk>,
270
- * ceilings: typeof STORY_SHAPE_CEILINGS,
271
141
  * reasons: string[],
272
- * warnings: string[],
273
- * }} `unwaivable` names an absolute risk rule the predicted footprint trips
274
- * even when the recorded `shape.code` is a size prediction (Story #4875), so
275
- * the operator learns at prediction time that no re-slicing can help.
276
- * `warnings` carries the predicted-shape objection when the shape is past a
277
- * light ceiling (Story #5313): it names the exceeded axis, and it never
278
- * decides `suitable` — the diff backstop bounds the real change set.
142
+ * }}
279
143
  */
280
144
  export function deriveLightSuitability({
281
145
  predictedChanges,
282
- predictedAcceptance,
283
- predictedKinds,
284
- predictedMagnitude,
285
- predictedUncertainty,
286
146
  verdict,
287
147
  injectedRules,
288
148
  selectSensitivePathClassesFn,
@@ -290,72 +150,23 @@ export function deriveLightSuitability({
290
150
  const ledger = resolveLedgeredVerdict(verdict ?? {});
291
151
  const shape = deriveStoryShape({
292
152
  changes: predictedChanges,
293
- acceptance: predictedAcceptance,
294
- kinds: predictedKinds,
295
- magnitude: predictedMagnitude,
296
- uncertainty: predictedUncertainty,
297
153
  injectedRules,
298
154
  selectSensitivePathClassesFn,
299
155
  });
300
156
  const unwaivable = deriveUnwaivableRisk(shape);
301
- // Story #5313: the predicted shape no longer decides. A tripped risk rule is
302
- // decisive on its own — a sensitive footprint can never be lite — and the
303
- // ledgered verdict must still be lite; everything the shape ceilings say is
304
- // carried as a warning for the operator and bounded for real by the backstop.
305
- const suitable = ledger.route === 'lite' && !unwaivable.present;
157
+ const suitable = ledger.recorded && !unwaivable.present;
306
158
  const reasons = [`shape: ${shape.reasons[0]}`];
307
159
  if (unwaivable.present) reasons.push(unwaivable.reason);
308
160
  reasons.push(`verdict: ${ledger.note}`);
309
- return {
310
- suitable,
311
- route: suitable ? 'lite' : 'full',
312
- shape,
313
- ledger,
314
- unwaivable,
315
- ceilings: STORY_SHAPE_CEILINGS,
316
- reasons,
317
- warnings: shapeWarnings(shape),
318
- };
319
- }
320
-
321
- /**
322
- * The predicted-shape objection as a warning (Story #5313): one entry naming
323
- * the exceeded axis (`shape.code`) and the shape's own reason, or none when
324
- * the prediction is within every light ceiling.
325
- *
326
- * @param {ReturnType<typeof deriveStoryShape>} shape
327
- * @returns {string[]}
328
- */
329
- function shapeWarnings(shape) {
330
- if (shape?.route === 'lite') return [];
331
- const axis = shape?.code ?? 'unknown';
332
- const reason = shape?.reasons?.[0] ?? 'no reason recorded';
333
- return [
334
- `predicted shape exceeds a light ceiling on "${axis}": ${reason} — ` +
335
- 'proceeding light; the diff backstop bounds the actual change set',
336
- ];
161
+ return { suitable, shape, ledger, unwaivable, reasons };
337
162
  }
338
163
 
339
164
  /**
340
- * Resolve what the light gate does with a suitability decision (Story #4740
341
- * AC-3; Story #5313).
342
- *
343
- * - suitable → `proceed-light`, carrying the predicted-shape
344
- * `warnings[]` (possibly empty) so an over-ceiling
345
- * prediction is stated, never silent.
346
- * - not suitable → `escalate-plan` — only an un-ledgered verdict or an
347
- * un-waivable risk rule gets here, and neither has an
348
- * answer an operator could give, so there is no
349
- * attended/unattended split any more.
350
- *
351
- * Pure and total.
352
- *
353
165
  * @param {{
354
- * suitability?: { suitable?: boolean, reasons?: string[], warnings?: string[] },
166
+ * suitability?: { suitable?: boolean, reasons?: string[] },
355
167
  * }} [args]
356
168
  * @returns {{
357
169
  * action: 'proceed-light'|'escalate-plan',
358
- * warnings: string[],
359
170
  * reasons: string[],
360
171
  * }}
361
172
  */
@@ -363,71 +174,43 @@ export function resolveLightGateOutcome({ suitability } = {}) {
363
174
  const reasons = Array.isArray(suitability?.reasons)
364
175
  ? [...suitability.reasons]
365
176
  : [];
366
- const warnings = Array.isArray(suitability?.warnings)
367
- ? [...suitability.warnings]
368
- : [];
369
177
 
370
178
  if (suitability?.suitable === true) {
371
179
  return {
372
180
  action: 'proceed-light',
373
- warnings,
374
181
  reasons: [
375
182
  ...reasons,
376
- warnings.length > 0
377
- ? 'ledgered verdict lite and no un-waivable risk — proceeding light with a predicted-shape warning'
378
- : 'predicted shape and ledgered verdict both lite — proceed light',
183
+ 'ledgered verdict recorded and no un-waivable risk rule fired — proceed light; the diff backstop bounds the actual change set',
379
184
  ],
380
185
  };
381
186
  }
382
187
 
383
188
  return {
384
189
  action: 'escalate-plan',
385
- warnings,
386
190
  reasons: [
387
191
  ...reasons,
388
- 'the ledgered verdict is not lite or an un-waivable risk rule fired — fails closed to /mandrel-plan (never silently proceeds light)',
192
+ 'the verdict is un-ledgered or an un-waivable risk rule fired — fails closed to /mandrel-plan (never silently proceeds light)',
389
193
  ],
390
194
  };
391
195
  }
392
196
 
393
197
  /**
394
- * The refusal classes a blocked diff backstop can carry — the machine-readable
395
- * half of a verdict whose `reasons[]` are prose (Story #5238).
396
- *
397
- * One value per blocked verdict, and the reason it exists is downstream: the
398
- * refusal's friction category is derived from it
399
- * ({@link module:lib/observability/runtime-friction.lightScopeRejectedCategory}),
400
- * and the category is the ONLY key the retro composer separates buckets on.
401
- * Under one bare category an empty-diff refusal and a `public-api` refusal
402
- * aggregated into a single "recurred 2 times" follow-up with nothing in common
403
- * (issue #5237) — the roll-up's shape fingerprint could not tell them apart
404
- * either, because it hashes detail keys and every refusal carries the same set.
405
- *
406
- * Kept coarse on purpose: a class must be stable enough that N refusals of one
407
- * cause still coalesce into the recurrence evidence the ceilings are
408
- * recalibrated from.
198
+ * One class per blocked verdict; retro buckets split only on the friction
199
+ * category derived from it. Kept coarse so repeats of one cause coalesce.
409
200
  *
410
201
  * @typedef {{ reason: string, refusalClass: string }} Objection
411
202
  */
412
203
  export const LIGHT_REFUSAL_CLASSES = Object.freeze({
413
- /** The diff could not be enumerated, or enumerated to nothing. */
414
204
  CHANGE_SET_UNKNOWN: 'change-set-unknown',
415
205
  /** Enumerated-empty, but the worktree carries uncommitted changes. */
416
206
  UNCOMMITTED_WORK: 'uncommitted-work',
417
- /** The change set intersects a registered sensitive-path class. */
418
207
  SENSITIVE_PATH: 'sensitive-path',
419
- /** Sensitivity could not be classified, so non-sensitivity is unproven. */
420
208
  SENSITIVITY_UNKNOWN: 'sensitivity-unknown',
421
- /** The implementation magnitude could not be measured. */
422
209
  MAGNITUDE_UNKNOWN: 'magnitude-unknown',
423
- /** Measured magnitude exceeded a light ceiling. */
424
210
  OVER_CEILING: 'over-ceiling',
425
211
  });
426
212
 
427
213
  /**
428
- * Name the branch a commit-first refusal tells the agent to commit on, with a
429
- * generic stand-in when the caller supplied none. Pure.
430
- *
431
214
  * @param {unknown} storyBranch
432
215
  * @returns {string}
433
216
  */
@@ -437,29 +220,9 @@ function describeStoryBranch(storyBranch) {
437
220
  }
438
221
 
439
222
  /**
440
- * Diff-derived backstop (Story #4740 AC-4, re-based on magnitude by Story
441
- * #4856): re-check the **actual** change set after implementation, because the
442
- * diff — not the prompt — is the real scope signal. Blocks (rather than landing)
443
- * when the diff intersects a sensitive-path class, exceeds an implementation
444
- * ceiling, or cannot be measured. A clean result is the only path that lands
445
- * light.
446
- *
447
- * Two inputs, two different scopes, and the difference is load-bearing:
448
- *
449
- * - `changedFiles` is the **full** change set, companions included, and is
450
- * what sensitive-path derivation reads. Exempting a companion from the
451
- * *count* must never exempt it from *risk* — a test file under a registered
452
- * sensitive class still blocks.
453
- * - `magnitude` is the implementation-only summary from
454
- * {@link module:lib/orchestration/diff-magnitude.summarizeDiffMagnitude}.
455
- * `null` means the magnitude could not be measured, which blocks: absence
456
- * of evidence is not evidence the diff is small.
457
- *
458
- * Reuses close's own {@link module:lib/orchestration/review-depth.deriveChangeLevel}
459
- * — one taxonomy, applied to the predicted shape at the gate and the actual
460
- * diff here — so the two read points can never disagree about what is sensitive.
461
- *
462
- * Pure and total.
223
+ * Re-check the ACTUAL diff; anything unmeasurable blocks. `changedFiles` is
224
+ * the full set — a companion exempt from the count is never exempt from
225
+ * risk. Shares close's `deriveChangeLevel`, so gate and backstop agree.
463
226
  *
464
227
  * @param {{
465
228
  * changedFiles?: unknown,
@@ -469,12 +232,7 @@ function describeStoryBranch(storyBranch) {
469
232
  * selectSensitivePathClassesFn?: Function,
470
233
  * storyBranch?: string,
471
234
  * uncommittedWork?: boolean,
472
- * }} [args] `uncommittedWork` is the caller's dirty-worktree probe result: the
473
- * backstop reads COMMITTED state, so an implemented-but-uncommitted run
474
- * measures an empty diff, and the door for that is `git commit` — not an
475
- * escalation. It only ever refines an enumerated-empty verdict's guidance;
476
- * the verdict itself still blocks. `storyBranch` names the branch that
477
- * guidance points at.
235
+ * }} [args] `uncommittedWork` only redirects guidance to `git commit`.
478
236
  * @returns {{
479
237
  * blocked: boolean,
480
238
  * level: 'low'|'high'|null,
@@ -484,8 +242,7 @@ function describeStoryBranch(storyBranch) {
484
242
  * ceilings: { maxImplLines: number, maxImplFiles: number },
485
243
  * refusalClass: string|null,
486
244
  * reasons: string[],
487
- * }} `refusalClass` is `null` on a clean verdict and exactly one
488
- * {@link LIGHT_REFUSAL_CLASSES} value on every blocked one.
245
+ * }}
489
246
  */
490
247
  export function checkLightDiffBackstop({
491
248
  changedFiles,
@@ -502,11 +259,7 @@ export function checkLightDiffBackstop({
502
259
  : null;
503
260
 
504
261
  if (files === null || files.length === 0) {
505
- // An ENUMERATED-empty diff over a dirty worktree is a different event from
506
- // an unverifiable one, and blocking is right for both — but only one of
507
- // them is about scope. The caller's probe distinguishes them; `files ===
508
- // null` never can, because a `git diff` that failed outright is exactly
509
- // the case where nothing about the change is known.
262
+ // `files === null` (git diff failed) can never be the uncommitted case.
510
263
  const uncommitted = files !== null && uncommittedWork === true;
511
264
  return {
512
265
  blocked: true,
@@ -546,10 +299,8 @@ export function checkLightDiffBackstop({
546
299
  fileCount: files.length,
547
300
  magnitude: measured,
548
301
  ceilings: resolved,
549
- // Objection ORDER is the class precedence: sensitivity is derived before
550
- // magnitude, so a diff that is both sensitive and over-ceiling files as a
551
- // sensitive-path refusal. That is the right way round — the ceiling is
552
- // recalibratable, the sensitive path is not.
302
+ // Order is precedence: sensitivity wins over magnitude, since a ceiling
303
+ // is recalibratable and a sensitive path is not.
553
304
  refusalClass: blocked ? objections[0].refusalClass : null,
554
305
  reasons: blocked
555
306
  ? objections.map((objection) => objection.reason)
@@ -562,9 +313,6 @@ export function checkLightDiffBackstop({
562
313
  }
563
314
 
564
315
  /**
565
- * Coerce a magnitude summary into non-negative integer counts, or `null` when
566
- * it was not measurable. Pure.
567
- *
568
316
  * @param {unknown} magnitude
569
317
  * @returns {{ implFiles: number, implLines: number }|null}
570
318
  */
@@ -577,8 +325,6 @@ function normalizeMagnitude(magnitude) {
577
325
  }
578
326
 
579
327
  /**
580
- * Sensitivity objections, over the **full** change set. Pure.
581
- *
582
328
  * @param {{ level: 'low'|'high'|null, classes: string[] }} derived
583
329
  * @returns {Objection[]}
584
330
  */
@@ -604,8 +350,6 @@ function describeSensitivity({ level, classes }) {
604
350
  }
605
351
 
606
352
  /**
607
- * Magnitude objections, over the implementation half only. Pure.
608
- *
609
353
  * @param {{ implFiles: number, implLines: number }|null} measured
610
354
  * @param {{ maxImplLines: number, maxImplFiles: number }} ceilings
611
355
  * @returns {Objection[]}
@@ -636,12 +380,9 @@ function describeMagnitude(measured, ceilings) {
636
380
  return objections;
637
381
  }
638
382
 
639
- /** Cap on a receipt slug's length — keep the branch/id readable. */
640
383
  const RECEIPT_SLUG_MAX = 48;
641
384
 
642
385
  /**
643
- * Derive a stable, lowercase, hyphenated slug from a prompt.
644
- *
645
386
  * @param {string} text
646
387
  * @returns {string}
647
388
  */
@@ -655,12 +396,10 @@ function slugifyPrompt(text) {
655
396
  return slug === '' ? 'light-change' : slug;
656
397
  }
657
398
 
658
- /** Cap on a receipt title's length. */
659
399
  const RECEIPT_TITLE_MAX = 72;
660
400
 
661
401
  /**
662
- * Coerce an `--amends` argument (`#123`, `123`, or `123` as a number) into a
663
- * positive integer issue number, or `null` when absent/malformed.
402
+ * `#<n>`, `<n>` or a number → positive issue number, else `null`.
664
403
  *
665
404
  * @param {unknown} amends
666
405
  * @returns {number|null}
@@ -680,8 +419,6 @@ function normalizeAmends(amends) {
680
419
  }
681
420
 
682
421
  /**
683
- * One-line receipt title from the prompt, prefixed for an amendment.
684
- *
685
422
  * @param {string} text
686
423
  * @param {number|null} amendsId
687
424
  * @returns {string}
@@ -698,9 +435,7 @@ function deriveReceiptTitle(text, amendsId) {
698
435
  }
699
436
 
700
437
  /**
701
- * Map an actual/predicted changed-file list into `changes[]` PathEntry objects
702
- * for the receipt body. Every entry is recorded as `refactors-existing` — the
703
- * conservative assumption, since the light path is not asserting creates.
438
+ * All `refactors-existing`: the light path does not assert creates.
704
439
  *
705
440
  * @param {unknown} changedFiles
706
441
  * @returns {Array<{ path: string, assumption: string }>}
@@ -719,12 +454,7 @@ function toReceiptChanges(changedFiles) {
719
454
  }
720
455
 
721
456
  /**
722
- * Build the minimal receipt `type::story` ticket for the light path
723
- * (Story #4740 AC-5) — the input `assemblePlanStories` / `createStoryIssues`
724
- * consume, so the light path reuses the plan-persist story-creation surface
725
- * rather than reimplementing issue authoring. The body carries the operator
726
- * prompt (goal + spec) and the diff-derived footprint (`changes[]`), so
727
- * history and `refs #<id>` on the commit survive.
457
+ * Minimal receipt Story in plan-persist's input shape; throws on empty prompt.
728
458
  *
729
459
  * @param {{
730
460
  * prompt?: unknown,