mandrel 2.60.0 → 2.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (661) hide show
  1. package/.agents/README.md +10 -10
  2. package/.agents/agents/story-worker.md +1 -1
  3. package/.agents/docs/agentrc-reference.json +4 -82
  4. package/.agents/docs/configuration.md +20 -87
  5. package/.agents/docs/workflows.md +1 -1
  6. package/.agents/instructions.md +1 -3
  7. package/.agents/rules/gherkin-standards.md +4 -0
  8. package/.agents/schemas/agentrc.schema.json +11 -486
  9. package/.agents/schemas/story-deliver-terminal.schema.json +10 -0
  10. package/.agents/schemas/validation-evidence.schema.json +2 -1
  11. package/.agents/scripts/README.md +14 -14
  12. package/.agents/scripts/acceptance-eval.js +32 -164
  13. package/.agents/scripts/agents-bootstrap-github.js +27 -129
  14. package/.agents/scripts/apply-quality-bootstrap.js +4 -40
  15. package/.agents/scripts/audit-baselines.js +6 -27
  16. package/.agents/scripts/audit-labels-bootstrap.js +5 -29
  17. package/.agents/scripts/audit-to-stories.js +91 -361
  18. package/.agents/scripts/boot-sweep.js +19 -72
  19. package/.agents/scripts/bootstrap.js +74 -395
  20. package/.agents/scripts/ceremony-derive.js +9 -45
  21. package/.agents/scripts/check-arch-cycles.js +14 -64
  22. package/.agents/scripts/check-baselines.js +8 -48
  23. package/.agents/scripts/check-context-budget.js +46 -172
  24. package/.agents/scripts/check-cyclomatic.js +12 -44
  25. package/.agents/scripts/check-dead-exports.js +13 -64
  26. package/.agents/scripts/check-doc-links.js +38 -186
  27. package/.agents/scripts/check-gherkin-corpus.js +24 -127
  28. package/.agents/scripts/check-test-temp-hygiene.js +28 -169
  29. package/.agents/scripts/coverage-capture.js +32 -99
  30. package/.agents/scripts/deliver-light.js +14 -101
  31. package/.agents/scripts/deliver-recover.js +6 -42
  32. package/.agents/scripts/deliver-run.js +36 -133
  33. package/.agents/scripts/diagnose-friction.js +24 -116
  34. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  35. package/.agents/scripts/evidence-gate.js +23 -85
  36. package/.agents/scripts/file-ci-gap.js +10 -50
  37. package/.agents/scripts/generate-config-docs.js +30 -170
  38. package/.agents/scripts/generate-lens-checklists.js +8 -52
  39. package/.agents/scripts/generate-skills-index.js +14 -112
  40. package/.agents/scripts/generate-workflows-doc.js +10 -70
  41. package/.agents/scripts/git-cleanup.js +2 -34
  42. package/.agents/scripts/lib/Graph.js +24 -81
  43. package/.agents/scripts/lib/ITicketingProvider.js +47 -143
  44. package/.agents/scripts/lib/Logger.js +14 -76
  45. package/.agents/scripts/lib/audit-baselines/engine.js +11 -31
  46. package/.agents/scripts/lib/audit-baselines/gate-surface.js +3 -17
  47. package/.agents/scripts/lib/audit-baselines/headroom.js +4 -20
  48. package/.agents/scripts/lib/audit-baselines/hotspots.js +3 -15
  49. package/.agents/scripts/lib/audit-baselines/kinds.js +23 -89
  50. package/.agents/scripts/lib/audit-baselines/outliers.js +6 -23
  51. package/.agents/scripts/lib/audit-baselines/read.js +3 -16
  52. package/.agents/scripts/lib/audit-baselines/staleness.js +7 -26
  53. package/.agents/scripts/lib/audit-baselines/surface-entry.js +7 -28
  54. package/.agents/scripts/lib/audit-baselines/trend.js +7 -20
  55. package/.agents/scripts/lib/audit-baselines/weights.js +9 -37
  56. package/.agents/scripts/lib/audit-suite/audit-rules-reader.js +3 -18
  57. package/.agents/scripts/lib/audit-suite/checklist-threading.js +26 -124
  58. package/.agents/scripts/lib/audit-suite/dispatch-checklist.js +14 -45
  59. package/.agents/scripts/lib/audit-suite/findings.js +12 -52
  60. package/.agents/scripts/lib/audit-suite/frontmatter.js +5 -29
  61. package/.agents/scripts/lib/audit-suite/index.js +1 -15
  62. package/.agents/scripts/lib/audit-suite/lens-checklist.js +10 -45
  63. package/.agents/scripts/lib/audit-suite/lens-diff-floor.js +11 -76
  64. package/.agents/scripts/lib/audit-suite/runner.js +13 -43
  65. package/.agents/scripts/lib/audit-suite/selector.js +49 -349
  66. package/.agents/scripts/lib/audit-suite/substitutions.js +12 -40
  67. package/.agents/scripts/lib/audit-suite/workflow-loader.js +3 -15
  68. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +11 -73
  69. package/.agents/scripts/lib/audit-to-stories/audit-lenses.js +8 -37
  70. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +25 -143
  71. package/.agents/scripts/lib/audit-to-stories/dedupe-against-github.js +14 -80
  72. package/.agents/scripts/lib/audit-to-stories/epic-grouping-directive.js +4 -18
  73. package/.agents/scripts/lib/audit-to-stories/finding-adapter.js +7 -40
  74. package/.agents/scripts/lib/audit-to-stories/group-findings.js +9 -39
  75. package/.agents/scripts/lib/audit-to-stories/issue-corpus.js +10 -66
  76. package/.agents/scripts/lib/audit-to-stories/issue-index.js +6 -30
  77. package/.agents/scripts/lib/audit-to-stories/issues-file.js +6 -36
  78. package/.agents/scripts/lib/audit-to-stories/ledger-commit.js +17 -69
  79. package/.agents/scripts/lib/audit-to-stories/ledger-pr.js +17 -85
  80. package/.agents/scripts/lib/audit-to-stories/ledger-record.js +10 -48
  81. package/.agents/scripts/lib/audit-to-stories/parse-audit-md.js +38 -146
  82. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +7 -42
  83. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +10 -57
  84. package/.agents/scripts/lib/baseline-loader.js +12 -51
  85. package/.agents/scripts/lib/baseline-schema-registry.js +5 -22
  86. package/.agents/scripts/lib/baselines/component-matcher.js +3 -12
  87. package/.agents/scripts/lib/baselines/components.js +10 -61
  88. package/.agents/scripts/lib/baselines/coverage-updater-cli.js +7 -36
  89. package/.agents/scripts/lib/baselines/crap-preview-incremental.js +5 -21
  90. package/.agents/scripts/lib/baselines/crap-preview-scan.js +19 -45
  91. package/.agents/scripts/lib/baselines/crap-updater-cli.js +16 -65
  92. package/.agents/scripts/lib/baselines/diff-scope-cli.js +5 -33
  93. package/.agents/scripts/lib/baselines/duplication-scanner.js +11 -60
  94. package/.agents/scripts/lib/baselines/env-overrides.js +12 -67
  95. package/.agents/scripts/lib/baselines/envelope.js +13 -129
  96. package/.agents/scripts/lib/baselines/exit-codes.js +6 -49
  97. package/.agents/scripts/lib/baselines/git-base.js +23 -142
  98. package/.agents/scripts/lib/baselines/kernel.js +11 -111
  99. package/.agents/scripts/lib/baselines/kinds/_crap-new-method-gate.js +9 -47
  100. package/.agents/scripts/lib/baselines/kinds/_crap-read.js +8 -51
  101. package/.agents/scripts/lib/baselines/kinds/_shared-metric.js +7 -62
  102. package/.agents/scripts/lib/baselines/kinds/bundle-size.js +8 -29
  103. package/.agents/scripts/lib/baselines/kinds/coverage.js +3 -15
  104. package/.agents/scripts/lib/baselines/kinds/crap.js +94 -415
  105. package/.agents/scripts/lib/baselines/kinds/duplication.js +4 -30
  106. package/.agents/scripts/lib/baselines/kinds/kind-factory.js +7 -53
  107. package/.agents/scripts/lib/baselines/kinds/maintainability.js +15 -80
  108. package/.agents/scripts/lib/baselines/kinds/mutation.js +12 -72
  109. package/.agents/scripts/lib/baselines/maintainability-baseline-io.js +4 -11
  110. package/.agents/scripts/lib/baselines/merge-envelopes.js +30 -146
  111. package/.agents/scripts/lib/baselines/path-canon.js +19 -128
  112. package/.agents/scripts/lib/baselines/preview-gates.js +8 -37
  113. package/.agents/scripts/lib/baselines/reader.js +14 -107
  114. package/.agents/scripts/lib/baselines/refresh-service.js +35 -252
  115. package/.agents/scripts/lib/baselines/scope.js +11 -135
  116. package/.agents/scripts/lib/baselines/writer.js +16 -149
  117. package/.agents/scripts/lib/bdd-runner-detect.js +18 -113
  118. package/.agents/scripts/lib/bdd-scenario-budget.js +9 -36
  119. package/.agents/scripts/lib/bdd-scenario-scanner.js +11 -73
  120. package/.agents/scripts/lib/bdd-step-index.js +26 -100
  121. package/.agents/scripts/lib/bootstrap/baseline-merge-driver.js +23 -103
  122. package/.agents/scripts/lib/bootstrap/branch-protection.js +2 -5
  123. package/.agents/scripts/lib/bootstrap/commit-push.js +12 -50
  124. package/.agents/scripts/lib/bootstrap/gh-preflight.js +14 -101
  125. package/.agents/scripts/lib/bootstrap/hitl-confirm.js +5 -30
  126. package/.agents/scripts/lib/bootstrap/install-ledger.js +17 -73
  127. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +17 -121
  128. package/.agents/scripts/lib/bootstrap/manifest.js +15 -86
  129. package/.agents/scripts/lib/bootstrap/merge-methods.js +4 -33
  130. package/.agents/scripts/lib/bootstrap/preflight.js +12 -61
  131. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +34 -235
  132. package/.agents/scripts/lib/bootstrap/prompt.js +21 -129
  133. package/.agents/scripts/lib/bootstrap/quality-bootstrap.js +27 -141
  134. package/.agents/scripts/lib/bootstrap/summary.js +1 -8
  135. package/.agents/scripts/lib/bootstrap/workflow-audit.js +11 -84
  136. package/.agents/scripts/lib/branch-name-guard.js +4 -23
  137. package/.agents/scripts/lib/changed-files.js +31 -143
  138. package/.agents/scripts/lib/checks/core-bare-clean.js +4 -24
  139. package/.agents/scripts/lib/checks/index.js +18 -101
  140. package/.agents/scripts/lib/checks/loop-health.js +11 -53
  141. package/.agents/scripts/lib/checks/state.js +16 -91
  142. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +10 -61
  143. package/.agents/scripts/lib/checks/subagent-agent-tool-required.js +14 -83
  144. package/.agents/scripts/lib/child-exec.js +39 -108
  145. package/.agents/scripts/lib/cli/standard-args.js +9 -116
  146. package/.agents/scripts/lib/cli-args.js +31 -146
  147. package/.agents/scripts/lib/cli-usage.js +5 -27
  148. package/.agents/scripts/lib/cli-utils.js +2 -12
  149. package/.agents/scripts/lib/close-validation/commands.js +13 -76
  150. package/.agents/scripts/lib/close-validation/gates.js +92 -331
  151. package/.agents/scripts/lib/close-validation/process.js +121 -151
  152. package/.agents/scripts/lib/close-validation/projections/advisories.js +5 -31
  153. package/.agents/scripts/lib/close-validation/projections/crap.js +19 -67
  154. package/.agents/scripts/lib/close-validation/projections/head-sha.js +1 -17
  155. package/.agents/scripts/lib/close-validation/projections/inputs.js +4 -34
  156. package/.agents/scripts/lib/close-validation/projections/maintainability.js +11 -58
  157. package/.agents/scripts/lib/close-validation/runner.js +53 -110
  158. package/.agents/scripts/lib/command-header.js +6 -28
  159. package/.agents/scripts/lib/config/acceptance-eval.js +4 -30
  160. package/.agents/scripts/lib/config/baselines.js +3 -14
  161. package/.agents/scripts/lib/config/ci.js +8 -38
  162. package/.agents/scripts/lib/config/commands.js +1 -15
  163. package/.agents/scripts/lib/config/defaults.js +4 -33
  164. package/.agents/scripts/lib/config/delivery-routing.js +6 -35
  165. package/.agents/scripts/lib/config/explain.js +9 -80
  166. package/.agents/scripts/lib/config/gates/coverage.schema.js +0 -12
  167. package/.agents/scripts/lib/config/gates/crap-incremental-coverage.schema.js +2 -30
  168. package/.agents/scripts/lib/config/gates/crap.schema.js +1 -34
  169. package/.agents/scripts/lib/config/gates/duplication.schema.js +1 -8
  170. package/.agents/scripts/lib/config/gates/index.js +2 -17
  171. package/.agents/scripts/lib/config/gates/maintainability.schema.js +1 -20
  172. package/.agents/scripts/lib/config/gates/mutation.schema.js +1 -7
  173. package/.agents/scripts/lib/config/gates/shared.js +4 -64
  174. package/.agents/scripts/lib/config/github.js +4 -22
  175. package/.agents/scripts/lib/config/limits.js +4 -57
  176. package/.agents/scripts/lib/config/paths.js +2 -21
  177. package/.agents/scripts/lib/config/qa.js +4 -38
  178. package/.agents/scripts/lib/config/quality.js +76 -432
  179. package/.agents/scripts/lib/config/runners.js +12 -56
  180. package/.agents/scripts/lib/config/runtime.js +13 -57
  181. package/.agents/scripts/lib/config/shared.js +2 -16
  182. package/.agents/scripts/lib/config/sync-agentrc.js +9 -50
  183. package/.agents/scripts/lib/config/temp-paths.js +40 -280
  184. package/.agents/scripts/lib/config/validate-orchestration.js +5 -17
  185. package/.agents/scripts/lib/config/worktree-isolation.js +9 -28
  186. package/.agents/scripts/lib/config-resolver.js +10 -52
  187. package/.agents/scripts/lib/config-schema-shared.js +1 -4
  188. package/.agents/scripts/lib/config-settings-schema-delivery.js +12 -294
  189. package/.agents/scripts/lib/config-settings-schema-quality.js +7 -219
  190. package/.agents/scripts/lib/config-settings-schema.js +37 -274
  191. package/.agents/scripts/lib/coverage-baseline.js +20 -110
  192. package/.agents/scripts/lib/coverage-capture-fullscope.js +12 -37
  193. package/.agents/scripts/lib/coverage-capture-incremental.js +12 -43
  194. package/.agents/scripts/lib/coverage-capture-usage.js +4 -24
  195. package/.agents/scripts/lib/coverage-capture.js +99 -224
  196. package/.agents/scripts/lib/coverage-utils.js +14 -79
  197. package/.agents/scripts/lib/cpu-pool.js +17 -123
  198. package/.agents/scripts/lib/crap-baseline-join.js +16 -88
  199. package/.agents/scripts/lib/crap-coordinates.js +6 -25
  200. package/.agents/scripts/lib/crap-engine.js +40 -153
  201. package/.agents/scripts/lib/crap-method-identity.js +16 -78
  202. package/.agents/scripts/lib/crap-utils.js +31 -155
  203. package/.agents/scripts/lib/cyclomatic-ceiling.js +14 -87
  204. package/.agents/scripts/lib/cyclomatic-scope.js +10 -50
  205. package/.agents/scripts/lib/dead-exports-knip.js +18 -56
  206. package/.agents/scripts/lib/dead-exports-mode.js +5 -24
  207. package/.agents/scripts/lib/degraded-mode.js +3 -26
  208. package/.agents/scripts/lib/dependency-parser.js +8 -40
  209. package/.agents/scripts/lib/dependency-version.js +13 -35
  210. package/.agents/scripts/lib/detect-package-manager.js +6 -36
  211. package/.agents/scripts/lib/doc-tiers.js +22 -126
  212. package/.agents/scripts/lib/duplicate-search.js +8 -72
  213. package/.agents/scripts/lib/env-loader.js +5 -27
  214. package/.agents/scripts/lib/error-redactor.js +6 -31
  215. package/.agents/scripts/lib/errors/index.js +2 -22
  216. package/.agents/scripts/lib/escomplex-ast-compat.js +22 -163
  217. package/.agents/scripts/lib/escomplex-kernel.js +21 -123
  218. package/.agents/scripts/lib/feedback-loop/graduator-core.js +93 -419
  219. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +20 -98
  220. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +27 -151
  221. package/.agents/scripts/lib/findings/audit-ledger.js +23 -97
  222. package/.agents/scripts/lib/findings/classify-finding.js +14 -69
  223. package/.agents/scripts/lib/findings/promote-finding.js +14 -112
  224. package/.agents/scripts/lib/findings/provenance-field.js +11 -52
  225. package/.agents/scripts/lib/findings/route-finding.js +37 -255
  226. package/.agents/scripts/lib/findings/semantic-issue-search.js +14 -59
  227. package/.agents/scripts/lib/findings/severity.js +18 -104
  228. package/.agents/scripts/lib/format-generated-json.js +12 -44
  229. package/.agents/scripts/lib/full-suite-lock.js +160 -429
  230. package/.agents/scripts/lib/full-suite-queue.js +213 -0
  231. package/.agents/scripts/lib/gates/baseline-store.js +5 -9
  232. package/.agents/scripts/lib/gates/friction.js +1 -3
  233. package/.agents/scripts/lib/generated/agentrc-validator.js +2 -2
  234. package/.agents/scripts/lib/gh-exec.js +31 -259
  235. package/.agents/scripts/lib/git/cached-fetch.js +9 -52
  236. package/.agents/scripts/lib/git/sync-from-base.js +15 -107
  237. package/.agents/scripts/lib/git-branch-cleanup.js +14 -61
  238. package/.agents/scripts/lib/git-branch-lifecycle.js +16 -87
  239. package/.agents/scripts/lib/git-utils.js +37 -161
  240. package/.agents/scripts/lib/github/framework-repo.js +8 -71
  241. package/.agents/scripts/lib/github-url.js +2 -17
  242. package/.agents/scripts/lib/import-graph.js +11 -38
  243. package/.agents/scripts/lib/install-cmd-parser.js +4 -13
  244. package/.agents/scripts/lib/json-utils.js +3 -18
  245. package/.agents/scripts/lib/label-constants.js +16 -111
  246. package/.agents/scripts/lib/label-taxonomy.js +4 -30
  247. package/.agents/scripts/lib/maintainability-engine.js +12 -80
  248. package/.agents/scripts/lib/maintainability-unscorable.js +5 -25
  249. package/.agents/scripts/lib/maintainability-utils.js +16 -92
  250. package/.agents/scripts/lib/mandrel-catalog.js +12 -70
  251. package/.agents/scripts/lib/notifications/notifier.js +13 -38
  252. package/.agents/scripts/lib/npm-scripts.js +4 -23
  253. package/.agents/scripts/lib/observability/metrics-ledger.js +16 -76
  254. package/.agents/scripts/lib/observability/runtime-friction.js +44 -286
  255. package/.agents/scripts/lib/observability/signal-validator.js +5 -37
  256. package/.agents/scripts/lib/observability/signals-writer.js +11 -121
  257. package/.agents/scripts/lib/observability/source-classifier.js +21 -203
  258. package/.agents/scripts/lib/observability/terse-result.js +14 -47
  259. package/.agents/scripts/lib/onboard/init-tail.js +13 -74
  260. package/.agents/scripts/lib/onboard/scaffold-docs.js +11 -34
  261. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +25 -139
  262. package/.agents/scripts/lib/orchestration/auto-merge-cwd.js +11 -66
  263. package/.agents/scripts/lib/orchestration/behind-recovery.js +10 -55
  264. package/.agents/scripts/lib/orchestration/ceremony-routing.js +5 -75
  265. package/.agents/scripts/lib/orchestration/change-set.js +7 -36
  266. package/.agents/scripts/lib/orchestration/check-baselines/phases/compare.js +9 -46
  267. package/.agents/scripts/lib/orchestration/check-baselines/phases/evaluate.js +11 -44
  268. package/.agents/scripts/lib/orchestration/check-baselines/phases/floors.js +5 -24
  269. package/.agents/scripts/lib/orchestration/check-baselines/phases/friction.js +3 -12
  270. package/.agents/scripts/lib/orchestration/check-baselines/phases/parse-args.js +5 -38
  271. package/.agents/scripts/lib/orchestration/check-baselines/phases/pipeline.js +3 -8
  272. package/.agents/scripts/lib/orchestration/check-baselines/phases/refresh-ack.js +28 -136
  273. package/.agents/scripts/lib/orchestration/check-baselines/phases/report.js +3 -13
  274. package/.agents/scripts/lib/orchestration/check-state.js +92 -0
  275. package/.agents/scripts/lib/orchestration/ci-gap-intake.js +37 -144
  276. package/.agents/scripts/lib/orchestration/ci-rerun-guard.js +42 -189
  277. package/.agents/scripts/lib/orchestration/code-review.js +24 -128
  278. package/.agents/scripts/lib/orchestration/column-sync.js +23 -111
  279. package/.agents/scripts/lib/orchestration/complexity-gate.js +42 -214
  280. package/.agents/scripts/lib/orchestration/deliver-recover.js +36 -168
  281. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +4 -35
  282. package/.agents/scripts/lib/orchestration/dependency-candidates.js +9 -41
  283. package/.agents/scripts/lib/orchestration/diff-magnitude.js +25 -115
  284. package/.agents/scripts/lib/orchestration/doc-reader.js +2 -6
  285. package/.agents/scripts/lib/orchestration/docs-digest.js +13 -51
  286. package/.agents/scripts/lib/orchestration/epic-candidates.js +13 -53
  287. package/.agents/scripts/lib/orchestration/epic-checklist.js +9 -33
  288. package/.agents/scripts/lib/orchestration/epic-container.js +41 -167
  289. package/.agents/scripts/lib/orchestration/epic-expansion.js +10 -40
  290. package/.agents/scripts/lib/orchestration/epic-rollup.js +55 -207
  291. package/.agents/scripts/lib/orchestration/file-assumption-enum.js +2 -22
  292. package/.agents/scripts/lib/orchestration/file-assumptions.js +45 -253
  293. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-detect.js +9 -46
  294. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches-reap.js +7 -57
  295. package/.agents/scripts/lib/orchestration/git-cleanup/phases/branches.js +21 -126
  296. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +2 -6
  297. package/.agents/scripts/lib/orchestration/git-cleanup/phases/fast-forward.js +1 -4
  298. package/.agents/scripts/lib/orchestration/git-cleanup/phases/filters.js +1 -5
  299. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes-ff.js +9 -34
  300. package/.agents/scripts/lib/orchestration/git-cleanup/phases/git-probes.js +41 -190
  301. package/.agents/scripts/lib/orchestration/git-cleanup/phases/merged-tip.js +9 -45
  302. package/.agents/scripts/lib/orchestration/git-cleanup/phases/parse-args.js +1 -4
  303. package/.agents/scripts/lib/orchestration/git-cleanup/phases/phase-drivers.js +19 -85
  304. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prompts.js +3 -17
  305. package/.agents/scripts/lib/orchestration/git-cleanup/phases/prune.js +1 -5
  306. package/.agents/scripts/lib/orchestration/git-cleanup/phases/render.js +16 -100
  307. package/.agents/scripts/lib/orchestration/git-cleanup/phases/stashes.js +1 -4
  308. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +16 -67
  309. package/.agents/scripts/lib/orchestration/lifecycle/emit-ledger-event.js +9 -33
  310. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-flip-failed.js +8 -29
  311. package/.agents/scripts/lib/orchestration/lifecycle/emit-merge-unlanded.js +15 -68
  312. package/.agents/scripts/lib/orchestration/light-backstop.js +11 -49
  313. package/.agents/scripts/lib/orchestration/light-escalation.js +21 -89
  314. package/.agents/scripts/lib/orchestration/light-suitability.js +26 -231
  315. package/.agents/scripts/lib/orchestration/merge-block-class.js +39 -216
  316. package/.agents/scripts/lib/orchestration/merge-poll.js +104 -377
  317. package/.agents/scripts/lib/orchestration/pinned-identifier-lint.js +17 -57
  318. package/.agents/scripts/lib/orchestration/plan-context.js +52 -303
  319. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +22 -79
  320. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +5 -31
  321. package/.agents/scripts/lib/orchestration/plan-metrics.js +29 -108
  322. package/.agents/scripts/lib/orchestration/plan-navigation.js +8 -27
  323. package/.agents/scripts/lib/orchestration/plan-persist/acceptance-handle-repair.js +12 -49
  324. package/.agents/scripts/lib/orchestration/plan-persist/audit-provenance.js +18 -73
  325. package/.agents/scripts/lib/orchestration/plan-persist/changes-repair.js +14 -78
  326. package/.agents/scripts/lib/orchestration/plan-persist/cross-plan-links.js +6 -30
  327. package/.agents/scripts/lib/orchestration/plan-persist/epic-adoption.js +14 -65
  328. package/.agents/scripts/lib/orchestration/plan-persist/epic-ops.js +21 -76
  329. package/.agents/scripts/lib/orchestration/plan-persist/external-deps.js +6 -43
  330. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +14 -68
  331. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +9 -41
  332. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +49 -248
  333. package/.agents/scripts/lib/orchestration/plan-persist/soft-findings.js +2 -12
  334. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +85 -368
  335. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +8 -38
  336. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +30 -190
  337. package/.agents/scripts/lib/orchestration/plan-persist/wave-collision-gate.js +9 -49
  338. package/.agents/scripts/lib/orchestration/plan-persist/wave-serialisation.js +7 -28
  339. package/.agents/scripts/lib/orchestration/plan-reachability.js +13 -42
  340. package/.agents/scripts/lib/orchestration/plan-run-labels/reap.js +16 -91
  341. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +16 -54
  342. package/.agents/scripts/lib/orchestration/plan-text-hygiene.js +10 -52
  343. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +14 -109
  344. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +11 -83
  345. package/.agents/scripts/lib/orchestration/pr-watch.js +48 -306
  346. package/.agents/scripts/lib/orchestration/project-meta-cache.js +15 -80
  347. package/.agents/scripts/lib/orchestration/project-meta-resolver.js +10 -51
  348. package/.agents/scripts/lib/orchestration/reassert-status-column.js +12 -76
  349. package/.agents/scripts/lib/orchestration/remote-verifier.js +12 -36
  350. package/.agents/scripts/lib/orchestration/resolve-stories.js +33 -164
  351. package/.agents/scripts/lib/orchestration/retro-proposals.js +66 -361
  352. package/.agents/scripts/lib/orchestration/review-base-ref.js +9 -43
  353. package/.agents/scripts/lib/orchestration/review-depth.js +12 -94
  354. package/.agents/scripts/lib/orchestration/review-providers/codex.js +10 -111
  355. package/.agents/scripts/lib/orchestration/review-providers/degraded-gates.js +13 -71
  356. package/.agents/scripts/lib/orchestration/review-providers/findings-renderer.js +7 -51
  357. package/.agents/scripts/lib/orchestration/review-providers/mi-exemptions.js +8 -53
  358. package/.agents/scripts/lib/orchestration/review-providers/native.js +30 -214
  359. package/.agents/scripts/lib/orchestration/review-providers/parse-findings.js +7 -52
  360. package/.agents/scripts/lib/orchestration/review-providers/review-depth.js +4 -33
  361. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +11 -71
  362. package/.agents/scripts/lib/orchestration/review-providers/scoped-lint.js +19 -131
  363. package/.agents/scripts/lib/orchestration/review-providers/security-review.js +6 -89
  364. package/.agents/scripts/lib/orchestration/review-providers/types.js +26 -56
  365. package/.agents/scripts/lib/orchestration/review-providers/ultrareview.js +3 -46
  366. package/.agents/scripts/lib/orchestration/run-epilogue.js +40 -199
  367. package/.agents/scripts/lib/orchestration/run-scoped-config.js +13 -81
  368. package/.agents/scripts/lib/orchestration/single-story-close/close-note.js +7 -34
  369. package/.agents/scripts/lib/orchestration/single-story-close/failed-terminal.js +16 -89
  370. package/.agents/scripts/lib/orchestration/single-story-close/gate-log.js +18 -109
  371. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +83 -239
  372. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +18 -80
  373. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +103 -97
  374. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +8 -64
  375. package/.agents/scripts/lib/orchestration/single-story-close/phases/confirm-merge.js +136 -486
  376. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +30 -134
  377. package/.agents/scripts/lib/orchestration/single-story-close/phases/graphql-preflight.js +9 -50
  378. package/.agents/scripts/lib/orchestration/single-story-close/phases/lock-wait-pending.js +49 -0
  379. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +13 -86
  380. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +20 -95
  381. package/.agents/scripts/lib/orchestration/single-story-close/phases/post-land.js +46 -203
  382. package/.agents/scripts/lib/orchestration/single-story-close/phases/pre-gate-steps.js +8 -50
  383. package/.agents/scripts/lib/orchestration/single-story-close/phases/pull-request.js +12 -83
  384. package/.agents/scripts/lib/orchestration/single-story-close/phases/push.js +6 -39
  385. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -6
  386. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-outcome.js +4 -28
  387. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-override.js +6 -51
  388. package/.agents/scripts/lib/orchestration/single-story-close/phases/worktree-reap.js +6 -34
  389. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +23 -121
  390. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +110 -290
  391. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +15 -69
  392. package/.agents/scripts/lib/orchestration/story-body-gate.js +4 -23
  393. package/.agents/scripts/lib/orchestration/story-close/baseline-upward-writeback.js +50 -179
  394. package/.agents/scripts/lib/orchestration/story-close/context-budget-writeback.js +11 -41
  395. package/.agents/scripts/lib/orchestration/story-close/format-autofix.js +23 -311
  396. package/.agents/scripts/lib/orchestration/story-close/phases/local-lens-review.js +22 -147
  397. package/.agents/scripts/lib/orchestration/story-close/phases/review-core.js +16 -67
  398. package/.agents/scripts/lib/orchestration/story-deliver-terminal-schema.js +12 -68
  399. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +42 -201
  400. package/.agents/scripts/lib/orchestration/story-follow-ups.js +43 -245
  401. package/.agents/scripts/lib/orchestration/story-init-envelope.js +4 -23
  402. package/.agents/scripts/lib/orchestration/story-init-remote.js +2 -6
  403. package/.agents/scripts/lib/orchestration/story-reachability.js +3 -23
  404. package/.agents/scripts/lib/orchestration/task-body-validator.js +12 -126
  405. package/.agents/scripts/lib/orchestration/ticket-lease.js +28 -131
  406. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +15 -149
  407. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +5 -33
  408. package/.agents/scripts/lib/orchestration/ticket-validator.js +39 -181
  409. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +51 -244
  410. package/.agents/scripts/lib/orchestration/ticketing/reads.js +39 -250
  411. package/.agents/scripts/lib/orchestration/ticketing/state.js +14 -68
  412. package/.agents/scripts/lib/orchestration/ticketing/transition.js +46 -263
  413. package/.agents/scripts/lib/orchestration/ticketing.js +2 -26
  414. package/.agents/scripts/lib/orchestration/verify-credit.js +18 -79
  415. package/.agents/scripts/lib/orchestration/worktree-dirty.js +5 -30
  416. package/.agents/scripts/lib/path-security.js +3 -6
  417. package/.agents/scripts/lib/plan-phase-cleanup.js +9 -49
  418. package/.agents/scripts/lib/preflight-runner.js +13 -69
  419. package/.agents/scripts/lib/process-group.js +143 -0
  420. package/.agents/scripts/lib/project-root.js +2 -8
  421. package/.agents/scripts/lib/provider-factory.js +2 -25
  422. package/.agents/scripts/lib/qa/console-allowlist.js +10 -59
  423. package/.agents/scripts/lib/qa/qa-session.js +15 -69
  424. package/.agents/scripts/lib/qa/redact-evidence.js +18 -129
  425. package/.agents/scripts/lib/qa/resolve-qa-contract.js +26 -135
  426. package/.agents/scripts/lib/qa/resolve-selection.js +16 -84
  427. package/.agents/scripts/lib/reserved-test-ids.js +9 -47
  428. package/.agents/scripts/lib/runtime-deps/dep-resolution.js +13 -53
  429. package/.agents/scripts/lib/runtime-deps/ensure-installed.js +10 -44
  430. package/.agents/scripts/lib/runtime-deps/manifest.js +10 -30
  431. package/.agents/scripts/lib/runtime-deps/parser-major.js +15 -51
  432. package/.agents/scripts/lib/runtime-deps/preflight.js +4 -22
  433. package/.agents/scripts/lib/runtime-deps/scan-imports.js +11 -55
  434. package/.agents/scripts/lib/signals/detectors/common.js +12 -38
  435. package/.agents/scripts/lib/signals/index.js +2 -19
  436. package/.agents/scripts/lib/signals/schema.js +14 -109
  437. package/.agents/scripts/lib/signals/write.js +2 -11
  438. package/.agents/scripts/lib/single-story/confirm-merge.js +31 -72
  439. package/.agents/scripts/lib/single-story/story-merged-notify.js +8 -49
  440. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +4 -26
  441. package/.agents/scripts/lib/single-story-sweep/protection.js +13 -100
  442. package/.agents/scripts/lib/single-story-sweep/sweep-lock.js +60 -258
  443. package/.agents/scripts/lib/single-story-sweep.js +14 -97
  444. package/.agents/scripts/lib/skills/parse-skill.js +13 -59
  445. package/.agents/scripts/lib/skills/skills-index.js +8 -29
  446. package/.agents/scripts/lib/skills/walk-skill-files.js +17 -78
  447. package/.agents/scripts/lib/source-extensions.js +11 -42
  448. package/.agents/scripts/lib/source-text/strip-js-comments.js +8 -41
  449. package/.agents/scripts/lib/stdio-flush.js +9 -36
  450. package/.agents/scripts/lib/story-adjacency.js +8 -40
  451. package/.agents/scripts/lib/story-body/body-format-lints.js +22 -83
  452. package/.agents/scripts/lib/story-body/footer-block.js +11 -44
  453. package/.agents/scripts/lib/story-body/story-body.js +83 -358
  454. package/.agents/scripts/lib/temp-retention.js +42 -143
  455. package/.agents/scripts/lib/templates/decomposer-prompts.js +11 -65
  456. package/.agents/scripts/lib/test-env.js +12 -65
  457. package/.agents/scripts/lib/test-run-credit.js +10 -65
  458. package/.agents/scripts/lib/test-runner-contract.js +19 -74
  459. package/.agents/scripts/lib/test-temp.js +38 -184
  460. package/.agents/scripts/lib/test-tiers.js +12 -96
  461. package/.agents/scripts/lib/ticket-body-sections.js +21 -96
  462. package/.agents/scripts/lib/transpile.js +15 -74
  463. package/.agents/scripts/lib/util/concurrent-map.js +6 -25
  464. package/.agents/scripts/lib/util/parse-id-list.js +8 -34
  465. package/.agents/scripts/lib/util/poll-loop.js +8 -28
  466. package/.agents/scripts/lib/util/with-timeout.js +2 -11
  467. package/.agents/scripts/lib/validation-evidence.js +21 -96
  468. package/.agents/scripts/lib/wave-runner/footprint.js +17 -70
  469. package/.agents/scripts/lib/wave-runner/live-probe.js +53 -221
  470. package/.agents/scripts/lib/wave-runner/ready-set.js +72 -301
  471. package/.agents/scripts/lib/workers/crap-worker.js +11 -64
  472. package/.agents/scripts/lib/workers/maintainability-report-worker.js +8 -45
  473. package/.agents/scripts/lib/workers/maintainability-worker.js +5 -21
  474. package/.agents/scripts/lib/workers/serve-worker-messages.js +2 -18
  475. package/.agents/scripts/lib/workflow-closure.js +22 -105
  476. package/.agents/scripts/lib/workspace-provisioner.js +16 -54
  477. package/.agents/scripts/lib/worktree/git-hooks.js +15 -60
  478. package/.agents/scripts/lib/worktree/lifecycle/force-drain.js +20 -60
  479. package/.agents/scripts/lib/worktree/lifecycle/merge-reachability.js +10 -62
  480. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +22 -86
  481. package/.agents/scripts/lib/worktree/lifecycle/reap.js +24 -126
  482. package/.agents/scripts/lib/worktree/lifecycle-manager.js +2 -20
  483. package/.agents/scripts/lib/worktree/node-modules-strategy.js +46 -180
  484. package/.agents/scripts/lib/worktree-manager.js +15 -40
  485. package/.agents/scripts/lint-issue-body.js +12 -68
  486. package/.agents/scripts/mandrel-update-preflight.js +10 -70
  487. package/.agents/scripts/merge-baseline.js +30 -104
  488. package/.agents/scripts/nav-registry-diff.js +22 -108
  489. package/.agents/scripts/notify.js +12 -69
  490. package/.agents/scripts/plan-context.js +27 -111
  491. package/.agents/scripts/plan-critics.js +12 -66
  492. package/.agents/scripts/plan-persist.js +31 -148
  493. package/.agents/scripts/plan-run-epilogue.js +11 -37
  494. package/.agents/scripts/pr-watch-with-update.js +76 -267
  495. package/.agents/scripts/providers/github/auth.js +3 -8
  496. package/.agents/scripts/providers/github/blocked-by-add.js +14 -61
  497. package/.agents/scripts/providers/github/board-add.js +5 -21
  498. package/.agents/scripts/providers/github/branch-protection.js +11 -43
  499. package/.agents/scripts/providers/github/cache.js +2 -14
  500. package/.agents/scripts/providers/github/comments.js +7 -40
  501. package/.agents/scripts/providers/github/compose.js +3 -19
  502. package/.agents/scripts/providers/github/errors.js +22 -125
  503. package/.agents/scripts/providers/github/issues.js +31 -123
  504. package/.agents/scripts/providers/github/labels.js +24 -124
  505. package/.agents/scripts/providers/github/mappers.js +5 -27
  506. package/.agents/scripts/providers/github/merge-methods.js +3 -22
  507. package/.agents/scripts/providers/github/project-board.js +2 -17
  508. package/.agents/scripts/providers/github/projects-v2-graphql.js +3 -6
  509. package/.agents/scripts/providers/github/request-helpers.js +5 -32
  510. package/.agents/scripts/providers/github/search-budget.js +9 -39
  511. package/.agents/scripts/providers/github/search-query.js +5 -26
  512. package/.agents/scripts/providers/github/sub-issue-add.js +15 -65
  513. package/.agents/scripts/providers/github/sub-issues.js +7 -36
  514. package/.agents/scripts/providers/github/tickets.js +32 -134
  515. package/.agents/scripts/providers/github.js +18 -59
  516. package/.agents/scripts/prune-plan-run-labels.js +12 -46
  517. package/.agents/scripts/quality-preview.js +35 -220
  518. package/.agents/scripts/resolve-doc-tiers.js +3 -26
  519. package/.agents/scripts/resolve-stories.js +16 -67
  520. package/.agents/scripts/resync-status-column.js +6 -25
  521. package/.agents/scripts/run-tests.js +29 -104
  522. package/.agents/scripts/single-story-close.js +23 -135
  523. package/.agents/scripts/single-story-confirm-merge.js +32 -139
  524. package/.agents/scripts/single-story-init.js +47 -209
  525. package/.agents/scripts/stories-wave-tick.js +102 -472
  526. package/.agents/scripts/sync-agentrc.js +3 -21
  527. package/.agents/scripts/sync-claude-agents.js +9 -55
  528. package/.agents/scripts/sync-claude-commands.js +20 -110
  529. package/.agents/scripts/test-wrapper.js +6 -43
  530. package/.agents/scripts/update-coverage-baseline.js +5 -22
  531. package/.agents/scripts/update-crap-baseline.js +7 -30
  532. package/.agents/scripts/update-duplication-baseline.js +16 -92
  533. package/.agents/scripts/update-maintainability-baseline.js +8 -62
  534. package/.agents/scripts/update-ticket-state.js +1 -7
  535. package/.agents/scripts/validate-skills.js +6 -26
  536. package/.agents/templates/agent-protocol.md +2 -2
  537. package/.agents/templates/docs/audit-sweep-runbook.md +3 -4
  538. package/.agents/workflows/audit-accessibility.md +4 -7
  539. package/.agents/workflows/audit-adrs.md +3 -6
  540. package/.agents/workflows/audit-architecture.md +3 -11
  541. package/.agents/workflows/audit-baselines.md +6 -9
  542. package/.agents/workflows/audit-clean-code.md +8 -12
  543. package/.agents/workflows/audit-data-model.md +3 -7
  544. package/.agents/workflows/audit-dependencies.md +4 -7
  545. package/.agents/workflows/audit-devops.md +4 -8
  546. package/.agents/workflows/audit-documentation.md +1 -4
  547. package/.agents/workflows/audit-mobile.md +4 -7
  548. package/.agents/workflows/audit-navigability.md +3 -6
  549. package/.agents/workflows/audit-performance.md +2 -4
  550. package/.agents/workflows/audit-privacy.md +4 -7
  551. package/.agents/workflows/audit-quality.md +4 -7
  552. package/.agents/workflows/audit-security.md +4 -7
  553. package/.agents/workflows/audit-seo.md +4 -7
  554. package/.agents/workflows/audit-sre.md +4 -7
  555. package/.agents/workflows/audit-to-stories.md +17 -30
  556. package/.agents/workflows/audit-ux-ui.md +4 -7
  557. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  558. package/.agents/workflows/helpers/code-quality-guardrails.md +12 -15
  559. package/.agents/workflows/helpers/deliver-digest.md +6 -4
  560. package/.agents/workflows/helpers/deliver-reference.md +114 -188
  561. package/.agents/workflows/helpers/deliver-story-reference.md +189 -533
  562. package/.agents/workflows/helpers/plan-reference.md +86 -139
  563. package/.agents/workflows/helpers/qa-core.md +12 -0
  564. package/.agents/workflows/memory-consolidate.md +1 -1
  565. package/.agents/workflows/qa-assist.md +27 -71
  566. package/.agents/workflows/qa-explore.md +19 -59
  567. package/.agents/workflows/qa-run.md +11 -33
  568. package/README.md +1 -1
  569. package/bin/mandrel.js +5 -46
  570. package/bin/postinstall.js +18 -107
  571. package/docs/CHANGELOG.md +25 -0
  572. package/lib/cli/doctor.js +11 -71
  573. package/lib/cli/init.js +26 -165
  574. package/lib/cli/migrate.js +5 -64
  575. package/lib/cli/registry.js +84 -467
  576. package/lib/cli/sync-agents.js +4 -64
  577. package/lib/cli/sync-commands.js +11 -64
  578. package/lib/cli/sync.js +34 -213
  579. package/lib/cli/uninstall.js +40 -219
  580. package/lib/cli/update.js +105 -661
  581. package/lib/cli/version-check.js +8 -72
  582. package/lib/cli/version-helpers.js +14 -87
  583. package/lib/migrations/helpers/retire-agentrc-key.js +11 -52
  584. package/lib/migrations/index.js +15 -92
  585. package/lib/migrations/steps/2.1.0-retire-mi-drop-knobs.js +2 -15
  586. package/lib/migrations/steps/2.1.0-retire-verify-concurrency-cap.js +1 -13
  587. package/lib/migrations/steps/2.11.0-retire-max-seed-words.js +2 -15
  588. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +9 -38
  589. package/lib/migrations/steps/2.20.0-retire-codebase-snapshot.js +1 -13
  590. package/lib/migrations/steps/2.32.0-retire-lint-baseline-command.js +2 -27
  591. package/lib/migrations/steps/2.57.0-retire-delivery-limit-knobs.js +2 -23
  592. package/lib/migrations/steps/2.57.0-retire-planning-limit-knobs.js +2 -27
  593. package/lib/migrations/steps/2.60.0-retire-audit-results-autofile.js +2 -21
  594. package/lib/migrations/steps/strip-removed-agentrc-keys.js +333 -0
  595. package/package.json +16 -14
  596. package/.agents/docs/SDLC.md +0 -590
  597. package/.agents/docs/quality-gates.md +0 -1183
  598. package/.agents/rules/known-tooling-behavior.md +0 -200
  599. package/.agents/rules/orchestration-error-handling.md +0 -61
  600. package/.agents/rules/test-seams.md +0 -59
  601. package/.agents/schemas/baselines/lighthouse.schema.json +0 -59
  602. package/.agents/schemas/baselines/lint.schema.json +0 -47
  603. package/.agents/scripts/check-action-pinning.js +0 -260
  604. package/.agents/scripts/check-audit-attribution.js +0 -302
  605. package/.agents/scripts/check-baseline-drift.js +0 -211
  606. package/.agents/scripts/check-baseline-scope.js +0 -362
  607. package/.agents/scripts/check-generated-validator.js +0 -202
  608. package/.agents/scripts/check-knip-entries.js +0 -159
  609. package/.agents/scripts/check-lifecycle-lint.js +0 -294
  610. package/.agents/scripts/check-pinned-override-notes.js +0 -102
  611. package/.agents/scripts/check-schema-references.js +0 -368
  612. package/.agents/scripts/check-test-portability.js +0 -512
  613. package/.agents/scripts/check-workflow-citations.js +0 -218
  614. package/.agents/scripts/check-workflow-cli-lint.js +0 -299
  615. package/.agents/scripts/check-workflow-timeouts.js +0 -291
  616. package/.agents/scripts/install-matrix-assert.js +0 -326
  617. package/.agents/scripts/lib/audit-advisories.js +0 -195
  618. package/.agents/scripts/lib/audit-attribution.js +0 -134
  619. package/.agents/scripts/lib/baselines/drift-detector.js +0 -351
  620. package/.agents/scripts/lib/baselines/kinds/lighthouse.js +0 -87
  621. package/.agents/scripts/lib/baselines/kinds/lint.js +0 -184
  622. package/.agents/scripts/lib/baselines/orphan-pruner.js +0 -233
  623. package/.agents/scripts/lib/baselines/scope-assert.js +0 -223
  624. package/.agents/scripts/lib/baselines/scope-inventory.js +0 -314
  625. package/.agents/scripts/lib/c8-cli-path.js +0 -21
  626. package/.agents/scripts/lib/config/gates/lighthouse.schema.js +0 -51
  627. package/.agents/scripts/lib/config/gates/lint.schema.js +0 -18
  628. package/.agents/scripts/lib/dynamic-workflow/architecture-report-contract.js +0 -70
  629. package/.agents/scripts/lib/dynamic-workflow/audit-orchestrator.js +0 -284
  630. package/.agents/scripts/lib/dynamic-workflow/clean-code-report-contract.js +0 -80
  631. package/.agents/scripts/lib/dynamic-workflow/degraded-coverage.js +0 -81
  632. package/.agents/scripts/lib/dynamic-workflow/documentation-report-contract.js +0 -87
  633. package/.agents/scripts/lib/dynamic-workflow/performance-report-contract.js +0 -74
  634. package/.agents/scripts/lib/dynamic-workflow/quality-report-contract.js +0 -90
  635. package/.agents/scripts/lib/dynamic-workflow/report-contract-core.js +0 -43
  636. package/.agents/scripts/lib/dynamic-workflow/security-report-contract.js +0 -83
  637. package/.agents/scripts/lib/fs-walk.js +0 -52
  638. package/.agents/scripts/lib/knip-config-resolver.js +0 -181
  639. package/.agents/scripts/lib/knip-entry-sync.js +0 -452
  640. package/.agents/scripts/lib/pinned-override-notes.js +0 -88
  641. package/.agents/scripts/lib/pinned-override-resolve.js +0 -212
  642. package/.agents/scripts/lib/test-isolate/cli-options.js +0 -93
  643. package/.agents/scripts/lib/test-isolate/env-snapshot-loader.js +0 -52
  644. package/.agents/scripts/lib/test-isolate/list-files.js +0 -90
  645. package/.agents/scripts/lib/test-isolate/parse-tap.js +0 -75
  646. package/.agents/scripts/lib/test-isolate/progress-log.js +0 -45
  647. package/.agents/scripts/lib/test-isolate/render-report.js +0 -97
  648. package/.agents/scripts/lib/test-isolate/run-isolate.js +0 -87
  649. package/.agents/scripts/lib/test-isolate/runner.js +0 -483
  650. package/.agents/scripts/lib/test-profile/parse-tap.js +0 -136
  651. package/.agents/scripts/lib/test-profile/render-report.js +0 -45
  652. package/.agents/scripts/lint-label-vocabulary.js +0 -214
  653. package/.agents/scripts/post-structured-comment.js +0 -127
  654. package/.agents/scripts/provision-git-hooks.js +0 -85
  655. package/.agents/scripts/prune-baseline-orphans.js +0 -181
  656. package/.agents/scripts/run-coverage.js +0 -197
  657. package/.agents/scripts/run-lint.js +0 -133
  658. package/.agents/scripts/run-test-profile.js +0 -129
  659. package/.agents/scripts/run-verify.js +0 -125
  660. package/.agents/scripts/test-isolate.js +0 -55
  661. package/.agents/scripts/update-dead-exports-baseline.js +0 -321
@@ -8,14 +8,13 @@ description:
8
8
 
9
9
  # /mandrel-deliver — reference appendix (on-demand)
10
10
 
11
- Reference-only detail split out of [`mandrel-deliver.md`](../mandrel-deliver.md) so the
12
- always-resident spine stays lean. Nothing here is a new MUST —
13
- it is the mechanics an operator consults when the matching lever is engaged.
11
+ Reference-only detail split out of [`mandrel-deliver.md`](../mandrel-deliver.md).
12
+ Nothing here is a new MUST — it is the mechanics an operator consults when the
13
+ matching lever is engaged.
14
14
 
15
15
  ## Ranges (`4922 - 4926`) {#ranges}
16
16
 
17
- A contiguous span is how an operator reads a plan run, so the dash range is a
18
- first-class id shape rather than prose to interpret — `/mandrel-deliver 4922 - 4926`
17
+ A contiguous span is a first-class id shape — `/mandrel-deliver 4922 - 4926`
19
18
  means exactly the five ids in it.
20
19
 
21
20
  **Pass the span through; never expand it by hand.** Every id-list flag on the
@@ -26,8 +25,7 @@ the scripts one unspaced token (`--ids 4922-4926`), mixed freely with singles
26
25
  and commas (`--ids 4901,4922-4926`); overlaps dedupe. A hand-typed enumeration
27
26
  is where an id gets dropped or invented, and the drop is silent.
28
27
 
29
- The shared expander (`lib/util/parse-id-list.js`) refuses rather than guesses,
30
- so a typo fails where it was typed instead of resolving the wrong set:
28
+ The shared expander (`lib/util/parse-id-list.js`) refuses rather than guesses:
31
29
 
32
30
  | Input | Outcome |
33
31
  | --- | --- |
@@ -36,30 +34,26 @@ so a typo fails where it was typed instead of resolving the wrong set:
36
34
  | `1-4926` | Refused — above the 50-id span cap (`MAX_RANGE_SPAN`). |
37
35
  | `4922-`, `-4926`, `4922-4923-4924` | Refused as a malformed token. |
38
36
 
39
- The cap is per range token, not per run: a genuine 60-Story delivery is still
40
- expressible as two ranges, but a slipped digit cannot fan out into a live
41
- resolution sweep of thousands of issues.
37
+ The cap is per range token, not per run: a 60-Story delivery is still two
38
+ ranges.
42
39
 
43
40
  ## Sequencing edge cases (`deliver-run.js` over `stories-wave-tick.js`)
44
41
 
45
42
  **What "discovered, not declared" means concretely.** `resolve-stories.js` reads
46
43
  the graph from live state as the union of the Story bodies' `depends_on` edges
47
44
  and GitHub's native `blocked_by` edges, resolving each blocker against its real
48
- issue state rather than against anything you hand it. That is why there is no
49
- batch label to pass and why a blocker that landed in an unrelated run is simply
50
- seen as done.
45
+ issue state. That is why there is no batch label to pass and why a blocker that
46
+ landed in an unrelated run is simply seen as done.
51
47
 
52
48
  **A Story with no `agent::*` label is refused.** The audit sweep files Stories
53
49
  deliberately without one — their bodies are audit prose, not a scoped change
54
- with verifiable acceptance criteria — so resolving one means dispatching a
55
- worker at an unenriched body, after taking its lease. Route it through
56
- `/mandrel-plan` first, which applies `agent::ready` at the end of planning.
57
- `--allow-unlabelled` is the deliberate escape hatch.
50
+ with verifiable acceptance criteria. Route it through `/mandrel-plan` first,
51
+ which applies `agent::ready` at the end of planning. `--allow-unlabelled` is
52
+ the deliberate escape hatch.
58
53
 
59
54
  **Inspecting a beat without taking one.** `deliver-run.js` writes — the ledger,
60
- the prompts — so it is not the tool for "what *would* the next beat do?". The
61
- tick underneath it is read-only and answers exactly that, with no ledger and no
62
- prompt files:
55
+ the prompts. The tick underneath it is read-only and answers "what *would* the
56
+ next beat do?":
63
57
 
64
58
  ```bash
65
59
  node .agents/scripts/stories-wave-tick.js --stories <id,id,...> --probe-live
@@ -89,83 +83,62 @@ turn, not a slow beat.
89
83
  Each beat re-probes live state: it re-resolves the graph, classifies **done**
90
84
  (`agent::done` or a closed issue — including foreign blockers that landed in
91
85
  another run), and derives **in-flight** from live `agent::executing` /
92
- `agent::closing` labels. You never compute `done` or `in-flight` — that
93
- accounting is read from reality every beat.
94
-
95
- **The run ledger closes the init window, and you maintain nothing.** Live state
96
- cannot instantly report a Story dispatched moments ago:
97
- `single-story-init.js` publishes `agent::executing` before the worktree install
98
- (ahead of the multi-minute install, so the window is short rather than
99
- minutes-long), but it is not zero — until the label lands the Story still reads
100
- `agent::ready`, and an unaugmented beat would hand it back so a second
101
- sub-agent joined the first on the same branch and worktree, interleaving
102
- commits. `deliver-run.js` closes that window from its own ledger
103
- (`<tempRoot>/run-<id>/ledger.json`): every id it hands out as ready is
104
- recorded, and the next beat reads the file back and seeds the tick with it.
105
- Append-only by construction, so the "forgot to re-list one" failure the
106
- hand-maintained list had cannot occur. The ledger is additive, not
107
- authoritative — the probe unions it into the label-derived set and then filters
108
- it against live state, so an id that has since gone `agent::done` is dropped
109
- for you. A missing or corrupt ledger costs one extra beat of the init window,
110
- never the run. The run id is a stable digest of the Story id set, so every beat
111
- of one run finds the same ledger and two concurrent runs never share one;
112
- `--run-id` pins it explicitly.
113
-
114
- **A spawn that never reached init is the ledger's one sharp edge.** Append-only
115
- is what makes the list safe to keep, and it is also why a bad entry never
116
- leaves: if a spawn dies before `single-story-init.js` runs, the id stays
117
- ledgered, is withheld as in flight on every later beat, and the run returns an
118
- empty `ready[]` with a non-zero `inFlight` forever — which reads exactly like a
119
- healthy wait. The beat names it instead: every ledgered id live state still
120
- reports as `agent::ready` appears in `stalledDispatch[]`, with the recovery in
121
- `stalledDispatchReason`. That is its **own** reason — not a footprint withhold
122
- (which names a blocking peer and the colliding paths) and not a foreign lease
123
- (which names a holder and clears itself when their run ends).
124
-
125
- It is a report, not a release. A slow init and a dead spawn are the same
126
- observation at the beat's altitude, and auto-releasing would re-dispatch a live
127
- Story onto its own branch — the failure the ledger exists to prevent. So the
86
+ `agent::closing` labels. You never compute `done` or `in-flight`.
87
+
88
+ **The run ledger closes the init window, and you maintain nothing.** Until
89
+ `single-story-init.js` publishes `agent::executing`, a just-dispatched Story
90
+ still reads `agent::ready`, and an unaugmented beat would hand it out again.
91
+ `deliver-run.js` records every id it hands out in
92
+ `<tempRoot>/run-<id>/ledger.json` and seeds the next beat with it. The ledger
93
+ is additive, not authoritative — the probe unions it into the label-derived set
94
+ and filters it against live state, so an id that has gone `agent::done` drops
95
+ out. A missing or corrupt ledger costs one extra beat of the init window, never
96
+ the run. The run id is a stable digest of the Story id set, so every beat of
97
+ one run finds the same ledger; `--run-id` pins it explicitly.
98
+
99
+ **A spawn that never reached init is the ledger's one sharp edge.** If a spawn
100
+ dies before `single-story-init.js` runs, the id stays ledgered and is withheld
101
+ as in flight on every later beat — an empty `ready[]` with a non-zero
102
+ `inFlight` that reads like a healthy wait. The beat names it: every ledgered id
103
+ live state still reports as `agent::ready` appears in `stalledDispatch[]`, with
104
+ the recovery in `stalledDispatchReason` — its **own** reason, not a footprint
105
+ withhold and not a foreign lease.
106
+
107
+ It is a report, not a release: a slow init and a dead spawn look identical, and
108
+ auto-releasing would re-dispatch a live Story onto its own branch. So the
128
109
  operator owns the call: confirm no worker is running, remove the id from
129
110
  `dispatched` in `<tempRoot>/run-<id>/ledger.json` (deleting the file works too,
130
111
  at the cost of reopening the init window for the rest), and beat again with
131
- `--run-id <id>` so the same run directory is reused. An id that has since
132
- picked up `agent::executing`, `agent::closing` or `agent::done` is never
133
- reported here — live state has moved on and the ledger entry is already inert.
112
+ `--run-id <id>` so the same run directory is reused.
134
113
 
135
114
  **Cross-run de-confliction is automatic.** A Story another
136
115
  operator is delivering is withheld without any bookkeeping from you: the probe
137
116
  reads the Story's assignee lease and, when it belongs to a different operator,
138
117
  withholds the Story and reports it in the envelope's
139
118
  `foreignHeld: [{ id, holder }]` (with `foreignHeldReason`). That is not a
140
- failure or a wedge — the holder's run owns the branch, and this run picks the
141
- Story up automatically once their lease clears. Init is the backstop: it
142
- refuses a Story already labelled `agent::executing`, or one whose lease a
143
- different operator holds, unless you pass `--steal`. Assignee-based withholding
144
- needs `github.operatorHandle` set (in `.agentrc.local.json`); without it the
145
- probe logs a warning and leans on init's lease refusal alone.
119
+ failure or a wedge — this run picks the Story up once their lease clears. Init
120
+ is the backstop: it refuses a Story already labelled `agent::executing`, or one
121
+ whose lease a different operator holds, unless you pass `--steal`.
122
+ Assignee-based withholding needs `github.operatorHandle` set (in
123
+ `.agentrc.local.json`); without it the probe logs a warning and leans on init's
124
+ lease refusal alone.
146
125
 
147
126
  **Overlapping footprints are reserved across beats, not just within one.** A
148
127
  Story sharing a **concrete** path with a still-implementing Story is withheld
149
128
  and named in `inFlightReservation: { available, withheld: [{ id, blockedBy,
150
129
  reason, source, paths }], note }`, where `reason` is `in-flight-earlier-beat` or
151
130
  `foreign-lease`. Like `foreignHeld` this is neither a failure nor a wedge — the
152
- Story re-admits automatically once its blocker leaves the in-flight set — and
153
- it exists so an unfilled slot is explained rather than mysterious. A **glob**
154
- footprint (or the UNKNOWN sentinel for an unparseable body) reserves nothing
155
- across beats; it still serializes its own beat. Reservation needs the in-flight
156
- Stories' footprints, so it is a `--probe-live` capability: under `--dag` the
157
- report is `available: false` and selection de-conflicts within the beat only.
131
+ Story re-admits automatically once its blocker leaves the in-flight set. A
132
+ **glob** footprint (or the UNKNOWN sentinel for an unparseable body) reserves
133
+ nothing across beats; it still serializes its own beat. Reservation is a
134
+ `--probe-live` capability: under `--dag` the report is `available: false` and
135
+ selection de-conflicts within the beat only.
158
136
 
159
137
  **Beat-local skips are reported too**, in `footprintGuard: { mode, withheld,
160
- advisory, note }`. They used to be an unreported skip, so a Story simply
161
- vanished from `ready[]` and an unfilled slot read exactly like a cap that was
162
- never reached. Every entry in **either** report carries the colliding `paths`
163
- and one `source` tag, `declared-overlap`: both Stories' `changes[]` named the
164
- path, or one declared a glob. Intended serialization — two Stories rewriting
165
- the same generated baseline must not co-dispatch. A declared footprint is the
166
- whole footprint: Story #5313 retired the body scrape that used to widen it,
167
- and the second source class it produced, so `changes[]` is the only evidence
168
- a collision is scored against.
138
+ advisory, note }`. Every entry in **either** report carries the colliding
139
+ `paths` and one `source` tag, `declared-overlap`: both Stories' `changes[]`
140
+ named the path, or one declared a glob. A declared footprint is the whole
141
+ footprint — `changes[]` is the only evidence a collision is scored against.
169
142
 
170
143
  **`delivery.deliverRunner.footprintGuard`** selects what a collision does:
171
144
 
@@ -176,47 +149,24 @@ a collision is scored against.
176
149
 
177
150
  ## Dispatch mechanics (role-scoped by default)
178
151
 
179
- **A single-Story run executes inline.** Sub-agent isolation is
180
- load-bearing only for **concurrent** dispatch — two workers sharing a checkout
181
- would race on worktrees and branch refs — so a run resolving exactly one Story
182
- has no sibling to isolate from and pays the spawn premium for nothing (a boot is
183
- a cache write at full rate; an inline continuation is a cache read at ~10%).
184
- `resolve-stories.js` already reports it: a one-id run comes back with
185
- `dispatchMode: "inline"` whatever the Story's shape. Role-scoped spawning is
186
- retained in full for multi-Story waves, and the rule changes **where** the
187
- engine runs, never what runs — gates, PR, and terminal envelope are identical.
188
-
189
- **Read the mode; never infer it from shape.** Before spawning
190
- anything, read the Story's `dispatchMode` from the resolver envelope
191
- (`stories[].dispatchMode`, produced by `resolveStoryDispatchMode` in
192
- `lib/orchestration/complexity-gate.js`, which decides on the resolved set size
193
- alone — it does not read the Story body). A Story with `dispatchMode: "inline"`
194
- executes [`deliver-story.md`](deliver-story.md) **inline in this session** — no
195
- `story-worker` sub-agent boot (sub-agent boots are the dominant deliver-phase
196
- token cost at trivial scope) — threading the same `docsDigestPath` /
197
- `checklistPath` / change-set discipline as a spawned worker. It does not touch
198
- the acceptance verdict owner, which the ceremony profile alone names
199
- ([`deliver-digest.md`](deliver-digest.md) § 3). Every `single-story-close.js`
200
- gate, the PR to `main`, and the terminal envelope are identical.
201
-
202
- **A trivial shape does not buy that session.** Only the
203
- one-Story rule above yields `inline`; every Story of a multi-Story run comes
204
- back `subagent` however lite its body, because the ready set below may offer
205
- several Stories on one beat and a session cannot be split between them. The
206
- Story's shape does not enter the decision at all — `resolveStoryDispatchMode`
207
- reads the resolved set size and nothing else, and the `route::lite` hint label
208
- was retired with the plan-side route claim (Story #5312), so there is no label
209
- left to lose or misread.
152
+ **Read the mode; never infer it from shape.** Before spawning anything, read
153
+ the Story's `dispatchMode` from the resolver envelope (`stories[].dispatchMode`,
154
+ from `resolveStoryDispatchMode` in `lib/orchestration/complexity-gate.js`,
155
+ which decides on the resolved set size alone). The rule is digest § 1: a
156
+ one-Story run is `inline`, every Story of a multi-Story run is `subagent`
157
+ however lite its body. A Story with `dispatchMode: "inline"` executes
158
+ [`deliver-story.md`](deliver-story.md) **inline in this session** — no
159
+ `story-worker` boot — threading the same `docsDigestPath` / `checklistPath` /
160
+ change-set discipline as a spawned worker. It does not touch the acceptance
161
+ verdict owner ([`deliver-digest.md`](deliver-digest.md) § 3).
210
162
 
211
163
  **Issue a beat's spawns in one turn.** A beat hands you a ready set, not a
212
- queue: those Stories have no dependency edge between them (the resolver already
213
- withheld any that do) and no shared write paths (each owns its own worktree and
214
- branch). Dispatch them the way
164
+ queue: those Stories have no dependency edge between them and no shared write
165
+ paths. Dispatch them the way
215
166
  [`parallel-tooling.md`](parallel-tooling.md) Rule 3 prescribes — **N `Agent`
216
167
  calls issued together in a single assistant turn**, one per ready Story, not
217
- `Agent` → wait → `Agent`. Serial dispatch is compliant with every other rule on
218
- this page and costs the run a full Story's implementation time per sibling for
219
- nothing; the wave aggregator is built for the parallel shape. Respect
168
+ `Agent` → wait → `Agent`. Serial dispatch costs the run a full Story's
169
+ implementation time per sibling for nothing. Respect
220
170
  `delivery.deliverRunner.concurrencyCap`: when the ready set exceeds it, slice
221
171
  into batches of `cap` and dispatch each batch in its own turn.
222
172
 
@@ -289,8 +239,7 @@ at `agent::closing` for the human merge and is **not** flipped to
289
239
  `agent::blocked` — `--wait-merge` does not override this, because the operator
290
240
  owning the merge is a decision to respect, not a fault to report. A genuine
291
241
  *arm failure* is the opposite case: nobody chose it, so close still waits and
292
- still blocks. That asymmetry is what keeps the must-land contract intact
293
- without misfiling deliberate human merges as blocks.
242
+ still blocks.
294
243
 
295
244
  ## Per-run epilogue (N>1)
296
245
 
@@ -306,16 +255,14 @@ This executes, in order:
306
255
  - `follow-up-rollup` — friction follow-ups across every Story in the run
307
256
  (files issues when auto-file is on; posts `follow-ups`).
308
257
  - `epic-close` — **reports** which of the run's container Epics its land tails
309
- left closed and which are still open. **Read-only** — it derives nothing:
310
- every child state change is already a rollup edge, so the container was
311
- derived from a complete child set by the last Story's own land tail.
258
+ left closed and which are still open. **Read-only** — the last Story's own
259
+ land tail already derived the container from a complete child set.
312
260
 
313
261
  **The audit roster is opt-in** (Story #5343). Add `--audit-roster` and the run
314
262
  also selects cross-Story audit lenses over the combined landed tip and posts
315
263
  `plan-run-audit-roster` on the primary Story — and the host MUST then walk
316
264
  every listed lens against the combined diff, one `auditor` sub-agent per lens.
317
- That walk is the expensive half, and it only pays for itself when someone is
318
- going to read it, so **the operator asks for it** — exactly as for the
265
+ That walk is expensive, so **the operator asks for it** — exactly as for the
319
266
  pre-mortem plan critic. Without the flag no roster comment is posted and no
320
267
  auditor is spawned.
321
268
 
@@ -324,56 +271,40 @@ confirm instead (`captureStoryFollowUps`).
324
271
 
325
272
  ## Container-Epic rollup (every N)
326
273
 
327
- A container Epic is never delivered, so nothing used to write to it during
328
- the run it was the subject of. `epic-rollup.js` derives its state from its
329
- children at **every edge that changes a child's state** — the
330
- `agent::executing` flip in `single-story-init.js`, the post-land tail
331
- (reported as the tail's `epicRollup` step), and `plan-persist`'s supersede
332
- close (reported as `supersede.epicRollup`) — which is why it holds at **N=1**,
333
- where no epilogue runs, and why a cohort superseded by a re-plan no longer
334
- strands its container open above finished work.
274
+ `epic-rollup.js` derives a container Epic's state from its children at
275
+ **every edge that changes a child's state** — the `agent::executing` flip in
276
+ `single-story-init.js`, the post-land tail (the tail's `epicRollup` step), and
277
+ `plan-persist`'s supersede close (`supersede.epicRollup`) — so it holds at
278
+ **N=1**, where no epilogue runs.
335
279
 
336
280
  - **Status** follows the children's composition (`deriveParentState` mapped
337
281
  onto the board's three options): any **open** child executing or blocked →
338
282
  `In Progress`, every child `agent::done` or closed → `Done`. A **closed**
339
- child contributes no `agent::*` state at all — its label records where it
340
- stopped, and a superseded Story closed still wearing `agent::blocked` used
341
- to pin its container open forever. It is written
342
- **directly**, never via a label: the container carries no `agent::*` label
343
- by construction, which is what keeps it out of the bare `/mandrel-deliver`
344
- ready list.
283
+ child contributes no `agent::*` state at all. It is written **directly**,
284
+ never via a label: the container carries no `agent::*` label by
285
+ construction, which keeps it out of the bare `/mandrel-deliver` ready list.
345
286
  - **Owner** — `github.operatorHandle` is added to the Epic while any child is
346
287
  in flight, through the additive assignees endpoint, and is never removed.
347
288
  - **Closure** is one-way: a container whose children are all finished closes,
348
289
  as `completed` when at least one child landed and as `not_planned` when none
349
- did (a cohort superseded by a re-plan is finished, but nothing merged). A
350
- reopened child moves Status back to `In Progress` and does **not** reopen the
351
- issue — which is why the lookup reads `state: 'all'`, since an open-only
352
- listing cannot see the container it would have to correct.
290
+ did. A reopened child moves Status back to `In Progress` and does **not**
291
+ reopen the issue.
353
292
  - The parent lookup resolves the native parent edge in **one** call
354
- (`getParentIssue`), because linkage is parent→child only; it falls back to a
355
- `type::epic` scan for a child linked by checklist alone. Children are read as
356
- the body checklist **union** the native sub-issue edges — literally the same
357
- reader `/mandrel-deliver`'s expansion uses, so an Epic can never be
358
- expandable but unclosable — bounded at 5 concurrent reads.
293
+ (`getParentIssue`), falling back to a `type::epic` scan for a child linked by
294
+ checklist alone. Children are the body checklist **union** the native
295
+ sub-issue edges — the same reader `/mandrel-deliver`'s expansion uses.
359
296
  - A checklist row citing an id that resolves to nothing is **dropped with a
360
- warning** when the native read succeeded: hand-edited prose can cite a
361
- deleted or mistyped issue, and no re-run will make it resolve. An
362
- unresolvable *native* edge still fails the read. An Epic-typed child is
363
- refused by name (`epic-typed-child`) and neither blocks nor advances the
364
- parent.
297
+ warning** when the native read succeeded; an unresolvable *native* edge
298
+ still fails the read. An Epic-typed child is refused by name
299
+ (`epic-typed-child`) and neither blocks nor advances the parent.
365
300
  - Every step is best-effort and never throws: a stale container costs
366
301
  tidiness, not a landed Story's envelope.
367
302
 
368
303
  ## Ceremony (profiles + two scopes)
369
304
 
370
- Ceremony depth is selected by `delivery.routing.ceremonyProfile`
371
- (`minimal` | `standard` | `strict`, default `standard`) — and by that alone
372
- since Story #5343. The **change level derived from the Story's own diff** (the
373
- changed files' intersection with the sensitive-path classes in
374
- `audit-rules.json`, `review-depth.js#deriveChangeLevel`, never a
375
- planner-authored verdict) still selects **review depth**, which is the second
376
- row of the scope table below:
305
+ The ceremony rule is digest § 3: `delivery.routing.ceremonyProfile` alone names
306
+ the acceptance verdict owner; the change level derived from the Story's own
307
+ diff selects **review depth**.
377
308
 
378
309
  | Profile | Acceptance verdict owner | When to use |
379
310
  | --- | --- | --- |
@@ -391,34 +322,29 @@ row of the scope table below:
391
322
 
392
323
  ## Async merge-confirm mode (`delivery.mergeWatch.mode: "async"`)
393
324
 
394
- A slow-CI consumer can opt the close into `"async"` mode so the merge wait
395
- probes once for ~60s (catching an instant merge or an instantly-red required
396
- check) and then returns `pending` instead of burning ~5 minutes of the host
397
- tool slot polling a merge that lands after the wait would have expired anyway.
398
- When a close returns that `pending` envelope, launch its `nextCommand` as a
399
- **background** invocation (host background Bash — its completion re-invokes the
400
- agent) and move on to the next Story; `single-story-confirm-merge.js` is
401
- idempotent and owns the whole tail. Do not foreground-poll the merge. The
402
- default `"sync"` behaviour is unchanged.
325
+ In async mode the close arms auto-merge, probes for ~60s (catching an instant
326
+ merge or, via the head-anchored required-check predicate, an instantly-red
327
+ required check) and then returns `pending` with a `nextCommand`, instead of
328
+ holding the host tool slot for a merge that lands after the wait would have
329
+ expired anyway. When a close returns that `pending` envelope, launch its
330
+ `nextCommand` (`single-story-confirm-merge.js … --wait`) as a **background**
331
+ invocation (host background Bash — its completion re-invokes the agent) and
332
+ move on to the next Story; `single-story-confirm-merge.js` is idempotent and
333
+ owns the whole tail, and `deliver-recover.js` recovers an orphaned confirm. Do
334
+ not foreground-poll the merge. The cumulative `maxBudgetSeconds` give-up is
335
+ unchanged.
403
336
 
404
337
  **On a multi-Story run the beat adds `--merge-watch-mode async` for you.** Close
405
- sees one Story and cannot see run topology, so it cannot make this call for
406
- itself — `deliver-run.js` can, and does: every `close[]` command it renders
407
- carries the flag when the run holds more than one Story and omits it for a run
408
- of one. Run the command it printed verbatim rather than composing your own.
409
- The reason it matters: implementation runs in parallel but the close tail is
410
- serialized one at a time, and under `sync` each of those closes holds the
411
- foreground for its full merge wait before the next Story's close may start.
412
- That is the run's dominant serialized cost, and it is paid per sibling.
413
-
414
- The flag overrides `delivery.mergeWatch.mode` for that invocation only — the
415
- config default stays `"sync"`, which is right for the solo delivery that has no
416
- sibling waiting behind it. It composes with `--max-wait-seconds`: pass both and
417
- the explicit bound still wins over the async probe cap. An unrecognized value
418
- exits non-zero before any phase runs, so a typo cannot silently drop the run
419
- back onto synchronous waiting. Expect a `pending` envelope from each async
420
- close — that is the designed ending here, not a failure; background its
421
- `nextCommand` and move to the next Story's close immediately.
422
-
423
- A one-Story run should keep the `sync` default: there is no sibling to unblock,
424
- and the foreground wait is the cheapest path to `landed`.
338
+ sees one Story and cannot see run topology — `deliver-run.js` can: every
339
+ `close[]` command it renders carries the flag when the run holds more than one
340
+ Story and omits it for a run of one. Run the command it printed verbatim rather
341
+ than composing your own. Under `sync` each serialized close would hold the
342
+ foreground for its full merge wait before the next may start — the run's
343
+ dominant serialized cost, paid per sibling. Expect a `pending` envelope from
344
+ each async close — that is the designed ending here, not a failure.
345
+
346
+ The flag overrides `delivery.mergeWatch.mode` for that invocation only; the
347
+ config default stays `"sync"`. A slow-CI solo consumer may opt into `"async"`
348
+ for the same reason — a foreground wait longer than the host tool ceiling
349
+ expires `pending` anyway. Otherwise a one-Story run keeps `sync`: there is no
350
+ sibling to unblock, and the foreground wait is the cheapest path to `landed`.