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,60 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  /**
4
- * plan-persist.js — flat Story GitHub-write surface for v2 `/mandrel-plan`
5
- * (Stage 3 — `docs/roadmap.md`).
6
- *
7
- * Given the author-written planning artifacts (`stories.json`, optional shared
8
- * Tech Spec), this CLI validates and creates Story issue(s) directly:
9
- *
10
- * changes[] repair → ticket validator / DAG → reachability →
11
- * split-policy partition → fold Spec into each Story body →
12
- * createIssue(s) with type::story, resumably by plan fingerprint (NOT
13
- * agent::ready) → story-plan-state on every Story;
14
- * plan-summary on the primary → flip every Story to agent::ready →
15
- * comment + close superseded source tickets → temp cleanup + stale reap.
16
- *
17
- * Story #4542 retired the authored risk verdict: persist neither requires nor
18
- * accepts one, and no plan-time step produces one. Review depth and the
19
- * acceptance-critic mode are derived from the diff at close time
20
- * (`review-depth.js#deriveChangeLevel`). `--force-review` is the only review
21
- * gate the planner still carries, and it is an explicit operator flag.
22
- *
23
- * CLI:
24
- * --stories <file> Required Story ticket array (default length 1)
25
- * --tech-spec <file> Optional shared Tech Spec folded into each Story
26
- * --plan-dir <dir> Optional temp dir deleted at terminal success.
27
- * Also where the `plan-context.json` envelope is
28
- * auto-discovered from (see --plan-context)
29
- * --plan-context <file> Optional explicit path to the `plan-context.js`
30
- * envelope. Its `sourceTickets[]` is what makes
31
- * `--tickets` superseding work without a flag
32
- * --source-tickets <ids> Explicit OVERRIDE of the envelope-derived source
33
- * ids, for hand-driven runs. Each id must be
34
- * claimed by exactly one Story's `supersedes[]`;
35
- * they are commented on and closed as superseded
36
- * --no-close-superseded Keep the source tickets open (no comment, no
37
- * close) — for a genuinely partial supersede
38
- * --dry-run Assemble + validate without GitHub writes
39
- * --chain-on-clean Fast path (Story #4741; any plan since Story
40
- * #5312): run the write-free dry-run first, and
41
- * when it passes clean chain straight into the
42
- * real persist in the SAME invocation, collapsing
43
- * the two operator round-trips into one. A
44
- * dry-run failure stops before any createIssue.
45
- * Ignored when `--dry-run` is also set
46
- * --force-review Operator-forced review stop before persist lands
47
- *
48
- * Run `--dry-run` first. It exercises every gate — the changes[] repair, the
49
- * validator, DAG, reachability, split/supersede partition, Spec fold —
50
- * write-free, and lists every warning (a footprint probe that disagrees with
51
- * the base branch, an open question in a body) so an authoring mistake
52
- * surfaces before a single issue exists.
53
- *
54
- * stdout is reserved for the JSON result (Story #2278 discipline, extended to
55
- * this CLI by Story #4541): `routeAllOutputToStderr()` runs before any
56
- * pipeline code so a headless driver can `JSON.parse` stdout unconditionally.
57
- * Human-readable log lines go to stderr, matching the sibling `plan-context`.
4
+ * plan-persist.js — validate authored plan artifacts and create the Story
5
+ * issue(s). Without `--dry-run` it runs the write-free dry-run first and
6
+ * persists in the same invocation only if every gate passes. stdout carries
7
+ * only the JSON result; logs go to stderr.
58
8
  *
59
9
  * Exit codes: 0 success; 1 fatal; 3 reachability orphans (nothing mutated).
60
10
  */
@@ -82,12 +32,11 @@ import {
82
32
  } from './lib/orchestration/plan-persist/plan-context-source.js';
83
33
  import {
84
34
  runPlanPersist,
85
- writeCheckpointV2,
35
+ writePlanSummaryComment,
86
36
  } from './lib/orchestration/plan-persist/run-plan-persist.js';
87
37
  import {
88
38
  buildPlanSummaryCommentBody,
89
39
  buildWaveTable,
90
- PLAN_SUMMARY_COMMENT_TYPE,
91
40
  } from './lib/orchestration/plan-persist/summary.js';
92
41
  import { resolveSourceTicketIds } from './lib/orchestration/plan-persist/supersede-ops.js';
93
42
  import { createProvider } from './lib/provider-factory.js';
@@ -95,9 +44,8 @@ import { createProvider } from './lib/provider-factory.js';
95
44
  export {
96
45
  buildPlanSummaryCommentBody,
97
46
  buildWaveTable,
98
- PLAN_SUMMARY_COMMENT_TYPE,
99
47
  runPlanPersist,
100
- writeCheckpointV2,
48
+ writePlanSummaryComment,
101
49
  };
102
50
 
103
51
  const CLI_OPTIONS = {
@@ -109,7 +57,6 @@ const CLI_OPTIONS = {
109
57
  'close-superseded': { type: 'boolean', default: true },
110
58
  'no-close-superseded': { type: 'boolean', default: false },
111
59
  'dry-run': { type: 'boolean', default: false },
112
- 'chain-on-clean': { type: 'boolean', default: false },
113
60
  'force-review': { type: 'boolean', default: false },
114
61
  'epic-title': { type: 'string' },
115
62
  'epic-goal': { type: 'string' },
@@ -120,7 +67,7 @@ const USAGE =
120
67
  'Usage: plan-persist.js --stories <file> ' +
121
68
  '[--tech-spec <file>] [--plan-dir <dir>] [--plan-context <file>] ' +
122
69
  '[--source-tickets <ids>] [--no-close-superseded] ' +
123
- '[--dry-run] [--chain-on-clean] [--force-review] ' +
70
+ '[--dry-run] [--force-review] ' +
124
71
  '[--epic-title <text> --epic-goal <text> | --epic <id>]';
125
72
 
126
73
  async function readOptional(filePath, { required }) {
@@ -144,9 +91,6 @@ async function readJsonFile(filePath, label) {
144
91
  }
145
92
 
146
93
  /**
147
- * Resolve every input path the CLI accepts, including where the
148
- * `plan-context.js` envelope is discovered from. Exported for tests.
149
- *
150
94
  * @param {object} values Parsed `parseArgs` values.
151
95
  */
152
96
  export function resolveInputPaths(values) {
@@ -178,16 +122,11 @@ async function loadArtifacts(paths) {
178
122
  }
179
123
 
180
124
  /**
181
- * Resolve the optional container-Epic request from the CLI flags.
182
- *
183
- * Both halves are required together: an Epic with a title and no goal is a
184
- * container with nothing explaining the grouping, and a goal with no title
185
- * cannot be opened at all. Supplying exactly one is a **usage error**, not a
186
- * silent no-Epic run — the operator asked for a container and would otherwise
187
- * never learn they did not get one.
125
+ * Title and goal are required together; exactly one is a usage error rather
126
+ * than a silent no-Epic run.
188
127
  *
189
- * @param {object} values Parsed `parseArgs` values.
190
- * @returns {{ title: string, goal: string }|null} `null` when no Epic was requested.
128
+ * @param {object} values
129
+ * @returns {{ title: string, goal: string }|null}
191
130
  */
192
131
  export function resolveEpicRequest(values) {
193
132
  const title = (values['epic-title'] ?? '').trim();
@@ -204,15 +143,11 @@ export function resolveEpicRequest(values) {
204
143
  }
205
144
 
206
145
  /**
207
- * Refuse `--epic` alongside `--epic-title`/`--epic-goal`.
208
- *
209
- * A run either joins a container or opens one; asking for both names no
210
- * coherent outcome, so it is a usage error rather than a silent precedence
211
- * rule the operator would have to know.
146
+ * A run joins an Epic or opens one, never both.
212
147
  *
213
- * @param {object} values Parsed `parseArgs` values.
148
+ * @param {object} values
214
149
  * @returns {void}
215
- * @throws {Error} When both forms were supplied.
150
+ * @throws {Error}
216
151
  */
217
152
  export function assertEpicFlagsExclusive(values) {
218
153
  const adopts = (values.epic ?? '').trim() !== '';
@@ -229,14 +164,11 @@ export function assertEpicFlagsExclusive(values) {
229
164
  }
230
165
 
231
166
  /**
232
- * Resolve `--epic <id>`: the existing open container this run joins.
233
- *
234
- * Story #5155. Parsed here rather than deep in the engine so a typo costs a
235
- * usage error before any provider call — the id itself is verified against
236
- * live state later, before the first create.
167
+ * `--epic <id>` shape check before any provider call; existence is verified
168
+ * later against live state.
237
169
  *
238
- * @param {object} values Parsed `parseArgs` values.
239
- * @returns {number|null} `null` when no adoption was requested.
170
+ * @param {object} values
171
+ * @returns {number|null}
240
172
  */
241
173
  export function resolveEpicAdoptionId(values) {
242
174
  const raw = (values.epic ?? '').trim();
@@ -251,16 +183,13 @@ export function resolveEpicAdoptionId(values) {
251
183
  }
252
184
 
253
185
  /**
254
- * Assemble the `runPlanPersist` opts bag from parsed CLI values.
255
- *
256
- * Exported for tests: this is the join where the envelope-derived source ids
257
- * meet the persist engine, so a regression here silently un-wires
258
- * `/mandrel-plan --tickets` superseding (Story #4554).
186
+ * Where envelope-derived source ids meet the engine; a break here silently
187
+ * un-wires `--tickets` superseding.
259
188
  *
260
- * @param {object} values Parsed `parseArgs` values.
189
+ * @param {object} values
261
190
  * @param {ReturnType<typeof resolveInputPaths>} paths
262
191
  * @param {object|null} planContextEnvelope
263
- * @returns {object} opts for `runPlanPersist`.
192
+ * @returns {object}
264
193
  */
265
194
  export function buildPersistOptions(values, paths, planContextEnvelope) {
266
195
  const source = resolveSourceTicketIds({
@@ -277,8 +206,7 @@ export function buildPersistOptions(values, paths, planContextEnvelope) {
277
206
  sourceTicketOrigin: source.origin,
278
207
  epic: resolveEpicRequest(values),
279
208
  adoptEpicId: resolveEpicAdoptionId(values),
280
- // Default-on: `--no-close-superseded` is the explicit escape and always
281
- // wins over the (default `true`) `--close-superseded`.
209
+ // `--no-close-superseded` always wins.
282
210
  closeSuperseded:
283
211
  values['no-close-superseded'] === true
284
212
  ? false
@@ -320,23 +248,10 @@ async function runPersistInvocation({
320
248
  }
321
249
 
322
250
  /**
323
- * Fast path (Story #4741 AC-1/AC-3; widened to any plan by Story #5312):
324
- * chain a clean dry-run into the real persist in ONE operator invocation.
325
- *
326
- * Two passes over the **same** loaded artifacts:
327
- *
328
- * 1. A write-free dry-run. Every gate runs before any `createIssue` can
329
- * happen, so a validation failure — which throws or returns reachability
330
- * orphans — stops here, before a single issue exists (AC-3).
331
- * 2. The real write, run when the dry-run passed clean. Because it replays
332
- * the identical artifacts, the persisted output is byte-identical to
333
- * what the dry-run validated (AC-1). The lite-route condition that used
334
- * to gate this step went with the plan-side lite claim: a clean dry-run
335
- * is the review the chain exists to fold.
336
- *
337
- * Exported for tests — this is where the round-trip collapse lives, so a
338
- * regression here silently re-opens the second operator round-trip (or
339
- * worse, persists a plan the dry-run never gated).
251
+ * Dry-run then persist over the SAME artifacts: a gate failure throws before
252
+ * any issue exists, and the write replays exactly what was validated. The
253
+ * repair pass mutates tickets in place, so pass 2 sees no repairs — carry pass
254
+ * 1's evidence onto the returned envelope.
340
255
  *
341
256
  * @param {{ values: object, config: object, provider: object,
342
257
  * artifacts: object, metricsSince: string }} args
@@ -366,6 +281,14 @@ export async function runPersistChain({
366
281
  metricsSince,
367
282
  dryRun: false,
368
283
  });
284
+ persistResult.repairs = mergeEvidence(
285
+ dryResult.repairs,
286
+ persistResult.repairs,
287
+ );
288
+ persistResult.warnings = mergeEvidence(
289
+ dryResult.warnings,
290
+ persistResult.warnings,
291
+ );
369
292
  persistResult.chain = {
370
293
  attempted: true,
371
294
  persisted: true,
@@ -375,18 +298,38 @@ export async function runPersistChain({
375
298
  }
376
299
 
377
300
  /**
378
- * Attach the plan-metrics roll-up for **this** invocation.
379
- *
380
- * Two Story #4541 fixes meet here. `readPlanMetrics` is declared
381
- * `(epicId, config)` but was called with `config` first, so it threw its
382
- * `epicId` guard on every run and the catch below turned that into a
383
- * silently missing summary — v2 persist is always Epic-less, hence the
384
- * explicit `null`. And the Epic-less ledger is shared across every plan the
385
- * repo has ever run, so `since` scopes the counts to the current invocation
386
- * instead of reporting lifetime totals under an invocation-shaped line.
301
+ * Ordered union, deduped by serialized content.
387
302
  *
388
- * This runs *after* `recordPlanInvocation` has appended this run's own
389
- * record, so the summary always has at least that one entry to report.
303
+ * @param {unknown} first
304
+ * @param {unknown} second
305
+ * @returns {unknown[]}
306
+ */
307
+ function mergeEvidence(first, second) {
308
+ const merged = [];
309
+ const seen = new Set();
310
+ for (const entry of [
311
+ ...(Array.isArray(first) ? first : []),
312
+ ...(Array.isArray(second) ? second : []),
313
+ ]) {
314
+ const key = JSON.stringify(entry);
315
+ if (seen.has(key)) continue;
316
+ seen.add(key);
317
+ merged.push(entry);
318
+ }
319
+ return merged;
320
+ }
321
+
322
+ /**
323
+ * @param {object} values
324
+ * @returns {boolean} `true` to run the gates and then persist.
325
+ */
326
+ export function shouldChainPersist(values) {
327
+ return values?.['dry-run'] !== true;
328
+ }
329
+
330
+ /**
331
+ * Attach the plan-metrics roll-up for this invocation. The Epic-less (`null`)
332
+ * ledger is shared by every plan run, so `since` scopes it to this one.
390
333
  *
391
334
  * @param {object} result Mutated in place with `planMetrics`.
392
335
  * @param {object} config
@@ -413,14 +356,10 @@ async function main() {
413
356
  throw new Error(USAGE);
414
357
  }
415
358
 
416
- // stdout is reserved for the JSON result: flip every Logger sink that could
417
- // land on stdout to stderr BEFORE any pipeline code runs (Story #2278
418
- // discipline, extended here by Story #4541 — this CLI interleaved Logger
419
- // lines with its own JSON, so a headless driver could not parse stdout).
359
+ // stdout is reserved for the JSON result.
420
360
  routeAllOutputToStderr();
421
361
 
422
- // Boundary for this invocation's plan-metrics roll-up — stamped before any
423
- // ledger-writing work so every record this run appends falls inside it.
362
+ // Stamped before any ledger write so this run's records fall inside it.
424
363
  const metricsSince = new Date().toISOString();
425
364
 
426
365
  let config;
@@ -430,8 +369,7 @@ async function main() {
430
369
  } catch (err) {
431
370
  throw new Error(`Config schema validation failed:\n${err.message}`);
432
371
  }
433
- // Argument-shape refusals fire before any I/O (Story #5155): a usage error
434
- // the operator can see without waiting on artifact reads or a provider.
372
+ // Argument-shape refusals fire before any I/O.
435
373
  assertEpicFlagsExclusive(values);
436
374
  resolveEpicRequest(values);
437
375
  resolveEpicAdoptionId(values);
@@ -440,10 +378,7 @@ async function main() {
440
378
  const paths = resolveInputPaths(values);
441
379
  const artifacts = await loadArtifacts(paths);
442
380
 
443
- // `--chain-on-clean` collapses the dry-run + persist operator round-trips
444
- // (Story #4741). `--dry-run` always wins — an explicit dry-run never writes.
445
- const useChain =
446
- values['chain-on-clean'] === true && values['dry-run'] !== true;
381
+ const useChain = shouldChainPersist(values);
447
382
 
448
383
  let result;
449
384
  try {
@@ -482,7 +417,7 @@ runAsCli(import.meta.url, main, {
482
417
  invocation:
483
418
  'node .agents/scripts/plan-persist.js --stories <file> [--tech-spec <file>] [--dry-run] [options]',
484
419
  summary:
485
- 'Validate an authored plan and persist it as GitHub Stories. Prints the result envelope as JSON on stdout.',
420
+ 'Validate an authored plan and persist it as GitHub Stories in one invocation (pass --dry-run to validate only). Prints the result envelope as JSON on stdout.',
486
421
  flags: [
487
422
  ['--stories <file>', 'Authored stories.json (required).'],
488
423
  ['--tech-spec <file>', 'Optional companion techspec.md.'],
@@ -493,7 +428,6 @@ runAsCli(import.meta.url, main, {
493
428
  ],
494
429
  ['--source-tickets <ids>', 'Ticket ids this plan supersedes.'],
495
430
  ['--dry-run', 'Validate and report; create nothing.'],
496
- ['--chain-on-clean', 'Persist immediately when the dry run is clean.'],
497
431
  ['--no-close-superseded', 'Leave superseded source tickets open.'],
498
432
  [
499
433
  '--force-review',
@@ -7,9 +7,7 @@
7
7
  * node .agents/scripts/plan-run-epilogue.js --stories 1,2,3
8
8
  * node .agents/scripts/plan-run-epilogue.js --stories 101-104 # inclusive range
9
9
  *
10
- * Keyed on the delivered id set: an `adhoc-<sorted-ids>` run id is
11
- * synthesized from `--stories`. Story #4540 retired the `--run <planRunId>`
12
- * label-resolution branch along with the `plan-run::<id>` label itself.
10
+ * Keyed on the delivered id set via a synthesized `adhoc-<sorted-ids>` run id.
13
11
  */
14
12
 
15
13
  import './lib/runtime-deps/ensure-installed.js';
@@ -25,6 +23,8 @@ import { expandIdList } from './lib/util/parse-id-list.js';
25
23
  const CLI_OPTIONS = {
26
24
  stories: { type: 'string' },
27
25
  cwd: { type: 'string' },
26
+ /** Opt-in; see `run-epilogue.js` RUN_EPILOGUE_STEP_KINDS. */
27
+ 'audit-roster': { type: 'boolean', default: false },
28
28
  };
29
29
 
30
30
  /**
@@ -34,9 +34,7 @@ const CLI_OPTIONS = {
34
34
  * createProviderImpl?: typeof createProvider,
35
35
  * runPlanRunEpilogueImpl?: typeof runPlanRunEpilogue,
36
36
  * logger?: { info: Function, warn: Function },
37
- * }} [deps] Injectable seams; every entry defaults to the real
38
- * implementation (`.agents/rules/test-seams.md` rules 1-2), so the CLI path
39
- * and every production caller are unchanged.
37
+ * }} [deps]
40
38
  * @returns {Promise<object>}
41
39
  */
42
40
  export async function main(argv = process.argv.slice(2), deps = {}) {
@@ -51,26 +49,15 @@ export async function main(argv = process.argv.slice(2), deps = {}) {
51
49
  options: CLI_OPTIONS,
52
50
  strict: false,
53
51
  });
54
- const hasStoriesFlag =
55
- typeof values.stories === 'string' && values.stories.trim().length > 0;
56
- if (!hasStoriesFlag) {
52
+ if (typeof values.stories !== 'string' || !values.stories.trim()) {
57
53
  throw new Error('Usage: node plan-run-epilogue.js --stories 1,2,3');
58
54
  }
59
- const cwd =
60
- typeof values.cwd === 'string' && values.cwd.trim()
61
- ? values.cwd.trim()
62
- : process.cwd();
55
+ const cwd = values.cwd?.trim() || process.cwd();
63
56
  const config = resolveConfigImpl({ cwd });
64
57
  const provider = createProviderImpl(config);
65
58
 
66
- // Story #4540 retired the `--run <planRunId>` label-resolution branch
67
- // along with the label itself. The epilogue is keyed on the delivered id
68
- // set, and the synthesized `adhoc-<ids>` id it already used for positional
69
- // runs is now the only id it needs.
70
- // Range tokens expand here too (`--stories 101-104`): /mandrel-deliver blesses the
71
- // dash range at the operator surface, so the id set the epilogue is keyed on
72
- // must read the same shape. Rejecting a bad token is deliberate — the old
73
- // silent filter turned a typo into an empty, wrongly-keyed rollup.
59
+ // Ranges expand as at the operator surface; a bad token throws rather than
60
+ // silently producing an empty, wrongly-keyed rollup.
74
61
  const { ids: stories, error: storiesError } = expandIdList(values.stories, {
75
62
  flag: '--stories',
76
63
  prefix: '[plan-run-epilogue] ',
@@ -87,6 +74,7 @@ export async function main(argv = process.argv.slice(2), deps = {}) {
87
74
  provider,
88
75
  config,
89
76
  cwd,
77
+ auditRoster: values['audit-roster'] === true,
90
78
  });
91
79
  warnOnUnresolvedBase(result, logger);
92
80
  warnOnEmptyRollup(result, logger);
@@ -98,13 +86,9 @@ export async function main(argv = process.argv.slice(2), deps = {}) {
98
86
  }
99
87
 
100
88
  /**
101
- * Surface an unresolvable combined landed diff as a loud operator warning.
102
- *
103
- * The roster's changed-file set is the input the host walks its audit lenses
104
- * against; a silent absence would read as "nothing changed" and the lens walk
105
- * would look complete while covering nothing. Not fatal — with no diff the
106
- * selector degrades to keyword-only lens selection, so the rest of the
107
- * roster is still useful.
89
+ * Warn (not fatal) when the combined landed diff is unresolvable under
90
+ * `--audit-roster`: silence would read as "nothing changed" and the lens walk
91
+ * would look complete while covering nothing.
108
92
  *
109
93
  * @param {object} result - `runPlanRunEpilogue` envelope.
110
94
  * @param {{ warn: Function }} [logger]
@@ -125,20 +109,9 @@ function warnOnUnresolvedBase(result, logger = Logger) {
125
109
  }
126
110
 
127
111
  /**
128
- * Surface a zero-signal roll-up over a multi-Story run as a loud operator
129
- * warning (Story #4578).
130
- *
131
- * The failure this exists to prevent is a *reassuring* one. The roll-up read
132
- * "No friction signals — nothing to follow up" for a 7-Story run that
133
- * contained a mid-run git outage, a parked worker needing an operator
134
- * resume, and an acceptance critic that needed four rounds. Nothing was
135
- * broken in the roll-up — the stream really was empty — but the report was
136
- * indistinguishable from a clean run, so the retro loop that exists to learn
137
- * from a run was silently blind to that run's pain.
138
- *
139
- * Not fatal: a genuinely friction-free multi-Story run is possible, and this
140
- * cannot tell the two apart — which is precisely why it asks the operator
141
- * rather than asserting either reading.
112
+ * Warn on a zero-signal roll-up over a multi-Story run: it is
113
+ * indistinguishable from a run whose friction went unrecorded, so the
114
+ * operator decides which it was.
142
115
  *
143
116
  * @param {object} result - `runPlanRunEpilogue` envelope.
144
117
  * @param {{ warn: Function }} [logger]
@@ -167,7 +140,7 @@ function warnOnEmptyRollup(result, logger = Logger) {
167
140
  await runAsCli(import.meta.url, main, {
168
141
  usage: {
169
142
  invocation:
170
- 'node .agents/scripts/plan-run-epilogue.js --stories <id,id,...> [--cwd <path>]',
143
+ 'node .agents/scripts/plan-run-epilogue.js --stories <id,id,...> [--cwd <path>] [--audit-roster]',
171
144
  summary:
172
145
  'Close out a delivery run: roll up the delivered Stories’ signals and report the run’s loop health.',
173
146
  flags: [
@@ -176,6 +149,10 @@ await runAsCli(import.meta.url, main, {
176
149
  'Comma-separated delivered Story ids, singles or A-B ranges (required).',
177
150
  ],
178
151
  ['--cwd <path>', 'Repository root (default: process cwd).'],
152
+ [
153
+ '--audit-roster',
154
+ 'Also select the cross-Story audit lens roster and post plan-run-audit-roster (off by default; the host then walks every listed lens).',
155
+ ],
179
156
  ],
180
157
  },
181
158
  });