mandrel 1.94.0 → 2.0.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 (393) hide show
  1. package/.agents/README.md +59 -73
  2. package/.agents/agents/story-worker.md +12 -13
  3. package/.agents/docs/SDLC.md +489 -1285
  4. package/.agents/docs/agentrc-reference.json +177 -67
  5. package/.agents/docs/configuration.md +104 -138
  6. package/.agents/docs/execution-reference.md +17 -20
  7. package/.agents/docs/quality-gates.md +13 -19
  8. package/.agents/docs/workflows.md +3 -3
  9. package/.agents/instructions.md +70 -81
  10. package/.agents/rules/ci-remediation.md +8 -12
  11. package/.agents/rules/git-conventions-reference.md +6 -7
  12. package/.agents/rules/git-conventions.md +16 -22
  13. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  14. package/.agents/schemas/agentrc.schema.json +54 -214
  15. package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
  16. package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
  17. package/.agents/schemas/risk-verdict.schema.json +0 -13
  18. package/.agents/scripts/analyze-execution.js +1 -1
  19. package/.agents/scripts/audit-to-stories.js +7 -7
  20. package/.agents/scripts/boot-sweep.js +1 -1
  21. package/.agents/scripts/check-lifecycle-lint.js +6 -9
  22. package/.agents/scripts/check-prepush-recovery.js +1 -1
  23. package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
  24. package/.agents/scripts/lib/Logger.js +6 -10
  25. package/.agents/scripts/lib/audit-suite/runner.js +2 -2
  26. package/.agents/scripts/lib/audit-suite/selector.js +5 -5
  27. package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
  28. package/.agents/scripts/lib/baselines/kernel.js +206 -18
  29. package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -4
  30. package/.agents/scripts/lib/baselines/reader.js +1 -6
  31. package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
  32. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
  33. package/.agents/scripts/lib/checks/core-bare-clean.js +2 -2
  34. package/.agents/scripts/lib/checks/index.js +2 -1
  35. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +23 -21
  36. package/.agents/scripts/lib/cli/standard-args.js +13 -22
  37. package/.agents/scripts/lib/cli-args.js +16 -7
  38. package/.agents/scripts/lib/close-validation/gates.js +2 -2
  39. package/.agents/scripts/lib/config/ci.js +6 -31
  40. package/.agents/scripts/lib/config/delivery-routing.js +45 -29
  41. package/.agents/scripts/lib/config/explain.js +55 -36
  42. package/.agents/scripts/lib/config/limits.js +17 -58
  43. package/.agents/scripts/lib/config/paths.js +0 -2
  44. package/.agents/scripts/lib/config/quality.js +1 -1
  45. package/.agents/scripts/lib/config/runners.js +17 -50
  46. package/.agents/scripts/lib/config/temp-paths.js +19 -14
  47. package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
  48. package/.agents/scripts/lib/config-resolver.js +2 -7
  49. package/.agents/scripts/lib/config-settings-schema-delivery.js +24 -148
  50. package/.agents/scripts/lib/config-settings-schema-quality.js +8 -14
  51. package/.agents/scripts/lib/config-settings-schema.js +52 -38
  52. package/.agents/scripts/lib/dependency-parser.js +3 -2
  53. package/.agents/scripts/lib/doc-tiers.js +2 -2
  54. package/.agents/scripts/lib/duplicate-search.js +211 -41
  55. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
  56. package/.agents/scripts/lib/findings/promote-finding.js +5 -5
  57. package/.agents/scripts/lib/framework-version.js +2 -3
  58. package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
  59. package/.agents/scripts/lib/git-branch-lifecycle.js +17 -22
  60. package/.agents/scripts/lib/git-utils.js +32 -6
  61. package/.agents/scripts/lib/github/framework-repo.js +6 -0
  62. package/.agents/scripts/lib/label-constants.js +10 -23
  63. package/.agents/scripts/lib/label-taxonomy.js +9 -43
  64. package/.agents/scripts/lib/observability/active-story-env.js +1 -1
  65. package/.agents/scripts/lib/observability/hook-heartbeat.js +20 -52
  66. package/.agents/scripts/lib/observability/source-classifier.js +3 -3
  67. package/.agents/scripts/lib/onboard/init-tail.js +1 -3
  68. package/.agents/scripts/lib/orchestration/audit-lens-routing.js +128 -0
  69. package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +8 -5
  70. package/.agents/scripts/lib/orchestration/ceremony-routing.js +83 -20
  71. package/.agents/scripts/lib/orchestration/code-review.js +20 -268
  72. package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
  73. package/.agents/scripts/lib/orchestration/consolidation-precondition.js +1 -1
  74. package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
  75. package/.agents/scripts/lib/orchestration/docs-digest.js +8 -8
  76. package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
  77. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
  78. package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +8 -8
  79. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +2 -2
  80. package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
  81. package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +17 -43
  82. package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
  83. package/.agents/scripts/lib/orchestration/merge-block-class.js +1 -1
  84. package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
  85. package/.agents/scripts/lib/orchestration/plan-context.js +248 -266
  86. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +1 -1
  87. package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
  88. package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +61 -0
  89. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +97 -0
  90. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +223 -854
  91. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +361 -0
  92. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +35 -108
  93. package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
  94. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
  95. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +13 -13
  96. package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
  97. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/risk-verdict.js +3 -4
  98. package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +2 -2
  99. package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +8 -20
  100. package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +3 -2
  101. package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
  102. package/.agents/scripts/lib/orchestration/preflight-cache.js +5 -5
  103. package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
  104. package/.agents/scripts/lib/orchestration/resolve-plan-run.js +155 -0
  105. package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
  106. package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +8 -8
  107. package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
  108. package/.agents/scripts/lib/orchestration/review-depth.js +26 -12
  109. package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
  110. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
  111. package/.agents/scripts/lib/orchestration/run-epilogue.js +426 -0
  112. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +1 -1
  113. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +95 -41
  114. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +16 -13
  115. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +40 -0
  116. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +11 -3
  117. package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
  118. package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
  119. package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
  120. package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
  121. package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
  122. package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +15 -12
  123. package/.agents/scripts/lib/orchestration/story-follow-ups.js +237 -0
  124. package/.agents/scripts/lib/orchestration/story-init-remote.js +47 -0
  125. package/.agents/scripts/lib/orchestration/story-plan-state.js +48 -0
  126. package/.agents/scripts/lib/orchestration/{epic-runner → story-progress}/story-run-progress-writer.js +3 -3
  127. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
  128. package/.agents/scripts/lib/orchestration/task-body-validator.js +8 -18
  129. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +11 -61
  130. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +189 -373
  131. package/.agents/scripts/lib/orchestration/ticket-validator.js +2 -7
  132. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +0 -25
  133. package/.agents/scripts/lib/orchestration/ticketing/reads.js +29 -26
  134. package/.agents/scripts/lib/orchestration/ticketing/transition.js +5 -5
  135. package/.agents/scripts/lib/planning-corpus.js +16 -11
  136. package/.agents/scripts/lib/preflight-runner.js +2 -2
  137. package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
  138. package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +36 -0
  139. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
  140. package/.agents/scripts/lib/story-adjacency.js +11 -14
  141. package/.agents/scripts/lib/story-body/story-body.js +124 -70
  142. package/.agents/scripts/lib/story-plan.js +2 -4
  143. package/.agents/scripts/lib/templates/decomposer-prompts.js +46 -45
  144. package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
  145. package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +26 -26
  146. package/.agents/scripts/lib/validation-evidence.js +1 -1
  147. package/.agents/scripts/lib/wave-runner/ready-set.js +6 -6
  148. package/.agents/scripts/lib/workspace-provisioner.js +1 -1
  149. package/.agents/scripts/lib/worktree/lifecycle/reap.js +5 -7
  150. package/.agents/scripts/lint-issue-body.js +71 -40
  151. package/.agents/scripts/mandrel-update-preflight.js +1 -1
  152. package/.agents/scripts/notify.js +4 -3
  153. package/.agents/scripts/plan-context.js +64 -74
  154. package/.agents/scripts/plan-persist.js +121 -280
  155. package/.agents/scripts/plan-run-epilogue.js +97 -0
  156. package/.agents/scripts/providers/github/issues.js +17 -33
  157. package/.agents/scripts/providers/github/mappers.js +0 -12
  158. package/.agents/scripts/providers/github/tickets.js +2 -5
  159. package/.agents/scripts/resolve-plan-run.js +117 -0
  160. package/.agents/scripts/signals-view.js +24 -19
  161. package/.agents/scripts/single-story-close.js +11 -14
  162. package/.agents/scripts/single-story-confirm-merge.js +39 -23
  163. package/.agents/scripts/single-story-init.js +29 -20
  164. package/.agents/scripts/stories-wave-tick.js +6 -6
  165. package/.agents/scripts/story-plan.js +26 -47
  166. package/.agents/scripts/update-ticket-state.js +6 -15
  167. package/.agents/skills/core/analyze-execution/SKILL.md +21 -18
  168. package/.agents/skills/core/idea-refinement/SKILL.md +6 -6
  169. package/.agents/skills/core/scope-triage/SKILL.md +28 -172
  170. package/.agents/skills/skills.index.json +3 -43
  171. package/.agents/starter-agentrc.json +0 -5
  172. package/.agents/templates/agent-protocol.md +9 -10
  173. package/.agents/workflows/audit-architecture.md +3 -3
  174. package/.agents/workflows/audit-clean-code.md +3 -3
  175. package/.agents/workflows/audit-dependencies.md +3 -3
  176. package/.agents/workflows/audit-devops.md +3 -3
  177. package/.agents/workflows/audit-documentation.md +5 -5
  178. package/.agents/workflows/audit-lighthouse.md +3 -3
  179. package/.agents/workflows/audit-navigability.md +3 -2
  180. package/.agents/workflows/audit-performance.md +3 -3
  181. package/.agents/workflows/audit-privacy.md +3 -3
  182. package/.agents/workflows/audit-quality.md +3 -3
  183. package/.agents/workflows/audit-security.md +3 -3
  184. package/.agents/workflows/audit-seo.md +3 -3
  185. package/.agents/workflows/audit-sre.md +3 -3
  186. package/.agents/workflows/audit-to-stories.md +20 -20
  187. package/.agents/workflows/audit-ux-ui.md +3 -3
  188. package/.agents/workflows/deliver.md +122 -174
  189. package/.agents/workflows/git-cleanup.md +3 -4
  190. package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
  191. package/.agents/workflows/helpers/acceptance-self-eval.md +16 -29
  192. package/.agents/workflows/helpers/code-review.md +70 -193
  193. package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +12 -14
  194. package/.agents/workflows/helpers/{single-story-deliver.md → deliver-story.md} +113 -139
  195. package/.agents/workflows/helpers/diagnose.md +10 -10
  196. package/.agents/workflows/helpers/parallel-tooling.md +1 -1
  197. package/.agents/workflows/helpers/signals.md +16 -16
  198. package/.agents/workflows/helpers/worktree-lifecycle.md +48 -64
  199. package/.agents/workflows/mandrel-update.md +2 -1
  200. package/.agents/workflows/plan.md +112 -145
  201. package/.agents/workflows/qa-assist.md +24 -30
  202. package/.agents/workflows/qa-explore.md +29 -38
  203. package/.agents/workflows/qa-run.md +2 -2
  204. package/README.md +9 -8
  205. package/docs/CHANGELOG.md +30 -0
  206. package/lib/migrations/index.js +6 -5
  207. package/package.json +2 -2
  208. package/.agents/agents/retro.md +0 -42
  209. package/.agents/personas/architect.md +0 -113
  210. package/.agents/personas/devops-engineer.md +0 -38
  211. package/.agents/personas/engineer.md +0 -33
  212. package/.agents/personas/project-manager.md +0 -114
  213. package/.agents/personas/qa-engineer.md +0 -95
  214. package/.agents/personas/security-engineer.md +0 -111
  215. package/.agents/personas/technical-writer.md +0 -101
  216. package/.agents/schemas/dispatch-manifest.json +0 -232
  217. package/.agents/schemas/epic-spec.schema.json +0 -153
  218. package/.agents/schemas/lifecycle/slice.end.schema.json +0 -21
  219. package/.agents/schemas/lifecycle/slice.heartbeat.schema.json +0 -20
  220. package/.agents/schemas/lifecycle/slice.start.schema.json +0 -17
  221. package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
  222. package/.agents/scripts/bookkeeping-reconcile.js +0 -117
  223. package/.agents/scripts/dispatcher.js +0 -295
  224. package/.agents/scripts/epic-audit-prepare.js +0 -497
  225. package/.agents/scripts/epic-audit-recheck.js +0 -274
  226. package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
  227. package/.agents/scripts/epic-deliver-preflight.js +0 -462
  228. package/.agents/scripts/epic-deliver-prepare.js +0 -852
  229. package/.agents/scripts/epic-execute-record-wave.js +0 -449
  230. package/.agents/scripts/epic-plan-clarity.js +0 -211
  231. package/.agents/scripts/epic-plan-healthcheck.js +0 -581
  232. package/.agents/scripts/epic-reconcile.js +0 -625
  233. package/.agents/scripts/lib/baseline-snapshot.js +0 -979
  234. package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
  235. package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
  236. package/.agents/scripts/lib/config/lifecycle.js +0 -40
  237. package/.agents/scripts/lib/config/preflight.js +0 -58
  238. package/.agents/scripts/lib/config/retro.js +0 -77
  239. package/.agents/scripts/lib/epic-merge-lock.js +0 -322
  240. package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
  241. package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
  242. package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -539
  243. package/.agents/scripts/lib/orchestration/deliver-route.js +0 -173
  244. package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
  245. package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
  246. package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
  247. package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
  248. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
  249. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
  250. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
  251. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
  252. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
  253. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
  254. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
  255. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
  256. package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
  257. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
  258. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
  259. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
  260. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
  261. package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
  262. package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -621
  263. package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
  264. package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
  265. package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
  266. package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
  267. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
  268. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
  269. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
  270. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
  271. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
  272. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
  273. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
  274. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
  275. package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
  276. package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
  277. package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
  278. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
  279. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
  280. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
  281. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
  282. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
  283. package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
  284. package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
  285. package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
  286. package/.agents/scripts/lib/orchestration/lifecycle/emit-slice-lifecycle.js +0 -270
  287. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
  288. package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -465
  289. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
  290. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
  291. package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
  292. package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -284
  293. package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
  294. package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
  295. package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
  296. package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
  297. package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
  298. package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
  299. package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
  300. package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
  301. package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
  302. package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
  303. package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
  304. package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
  305. package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
  306. package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
  307. package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
  308. package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
  309. package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
  310. package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
  311. package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
  312. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
  313. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
  314. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
  315. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
  316. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
  317. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
  318. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
  319. package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
  320. package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
  321. package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
  322. package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
  323. package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
  324. package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
  325. package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
  326. package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
  327. package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
  328. package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
  329. package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
  330. package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
  331. package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
  332. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
  333. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
  334. package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
  335. package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -302
  336. package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
  337. package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
  338. package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
  339. package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
  340. package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
  341. package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
  342. package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
  343. package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
  344. package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
  345. package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
  346. package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
  347. package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
  348. package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
  349. package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
  350. package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
  351. package/.agents/scripts/lib/push-epic-retry.js +0 -209
  352. package/.agents/scripts/lib/spec/index.js +0 -36
  353. package/.agents/scripts/lib/spec/loader.js +0 -425
  354. package/.agents/scripts/lib/spec/state.js +0 -208
  355. package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
  356. package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
  357. package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
  358. package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
  359. package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
  360. package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
  361. package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
  362. package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
  363. package/.agents/scripts/lib/wave-runner/tick.js +0 -754
  364. package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
  365. package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
  366. package/.agents/scripts/lifecycle-emit.js +0 -510
  367. package/.agents/scripts/retro-run.js +0 -218
  368. package/.agents/scripts/slice-phase.js +0 -361
  369. package/.agents/scripts/standalone-feedback-rollup.js +0 -188
  370. package/.agents/scripts/story-close.js +0 -294
  371. package/.agents/scripts/story-init.js +0 -599
  372. package/.agents/scripts/story-phase.js +0 -369
  373. package/.agents/scripts/wave-tick.js +0 -464
  374. package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
  375. package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
  376. package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
  377. package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
  378. package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
  379. package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
  380. package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -383
  381. package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
  382. package/.agents/workflows/helpers/deliver-epic-reference.md +0 -547
  383. package/.agents/workflows/helpers/deliver-epic-single.md +0 -331
  384. package/.agents/workflows/helpers/deliver-epic.md +0 -998
  385. package/.agents/workflows/helpers/deliver-stories.md +0 -450
  386. package/.agents/workflows/helpers/epic-audit.md +0 -189
  387. package/.agents/workflows/helpers/epic-deliver-story.md +0 -436
  388. package/.agents/workflows/helpers/epic-testing.md +0 -125
  389. package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
  390. package/.agents/workflows/helpers/plan-epic.md +0 -353
  391. package/.agents/workflows/helpers/plan-story.md +0 -251
  392. package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
  393. /package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +0 -0
@@ -1,331 +0,0 @@
1
- ---
2
- description: >-
3
- Single-delivery Epic path (invoked by /deliver when the route resolves to
4
- `single`). Collapses a spec-only Epic — one that authored NO Story tickets —
5
- into ONE guarded in-session slice walk on `epic/<id>`: prepare `--single`,
6
- walk the Epic body's `## Delivery Slicing` table in order (implement + commit
7
- each slice, flip its checkpoint marker), run per-AC-cluster acceptance
8
- critics, then hand off to `deliver-epic.md` Phase 3 for the merge tail
9
- (Phases 3–9 reused byte-for-byte). Not a second engine — deliver-epic with
10
- Phases 1–2 replaced by the slice walk.
11
- ---
12
-
13
- # helpers/deliver-epic-single — single-delivery Epic path (invoked by /deliver)
14
-
15
- > **Runtime core.** The single-delivery executor for Epic #4475. The
16
- > [`/deliver`](../deliver.md) router dispatches here when
17
- > [`resolveEpicDeliveryRoute`](../../scripts/lib/orchestration/deliver-route.js)
18
- > returns `single` (the Epic carries `delivery::single` or its
19
- > `epic-plan-state` checkpoint has `decompose.shape === "single"`), unless the
20
- > `delivery.routing.singleDelivery=false` kill-switch forces fan-out.
21
-
22
- ## Overview
23
-
24
- A spec-only plan (authored by `/plan`'s single-delivery variant) creates **no
25
- Story tickets** — the Epic body's `## Delivery Slicing` table is the whole
26
- work breakdown and the audit trail. There is nothing to fan out, so this path
27
- does not run the [`deliver-epic.md`](deliver-epic.md) Phase 1–2 wave loop.
28
- Instead it walks the slicing table **in order** inside one guarded session on
29
- `epic/<id>`.
30
-
31
- The **least-surface insight** (adopted design): in `deliver-epic.md` only
32
- **Phases 1–2 are Story-tier-specific**. **Phases 3–9 are Epic-scope** — they
33
- operate on `epic/<id>` + the Epic body's `## Acceptance Table` and dereference
34
- **no** Story ticket (close-validation, epic-audit lens roster, code-review over
35
- the cumulative `main..epic/<id>` diff, retro, integration gate, finalize →
36
- reconcile → the merge machine). So:
37
-
38
- ```text
39
- single-delivery = deliver-epic with Phases 1–2 replaced by an in-session
40
- slice walk (S1/S2/S2a below), and Phases 3–9 reused
41
- byte-for-byte (S2b handoff).
42
- ```
43
-
44
- ```text
45
- /deliver <epicId> (route: single)
46
- → S1 Prepare (epic-deliver-prepare.js --single — slice map, ONE worktree)
47
- → S2 Slice walk (walk ## Delivery Slicing in order; commit + flip each slice on epic/<id>)
48
- → S2a Acceptance (per-AC-cluster fresh-context critics over the cumulative diff)
49
- → S2b Handoff → deliver-epic.md Phase 3 … Phase 9 (merge tail, unchanged)
50
- ```
51
-
52
- ---
53
-
54
- ## Contract
55
-
56
- - **One long guarded session.** No Story fan-out, no `Agent` dispatch for
57
- implementation — you (the LLM running this helper) implement each slice
58
- in-session on `epic/<id>`. The per-AC-cluster acceptance critics (S2a) are
59
- the **only** `Agent` spawns, and they are read-only maker-blind critics.
60
- - **Idempotent by checkpoint.** The `epic-run-state` slice map
61
- (`slices[id].status ∈ {pending, done, blocked, failed}`) is the resume
62
- target: a re-run **skips `done` slices** — the work already sits on
63
- `epic/<id>`, so it is never re-paid.
64
- - **Single pause point.** Only `agent::blocked` halts. If a slice or an
65
- acceptance cluster cannot be satisfied, flip the Epic to `agent::blocked`,
66
- post a friction comment, and park — never fall silent, never proceed to
67
- close with an unmet AC.
68
- - **No Story-ticket dereference (audit receipt).** Nothing in this path reads,
69
- enumerates, or transitions a `type::story` ticket. The leaf unit is a
70
- `## Delivery Slicing` slice; the acceptance unit is an `## Acceptance Table`
71
- AC cluster; the merge tail is Epic-scope. This is the load-bearing property
72
- that lets Phases 3–9 be reused unchanged.
73
- - **Land or block (issue #4483).** The worktree / `epic/<id>` branch / PR path
74
- is the ONLY sanctioned delivery mechanism. Executing slices inline in the
75
- main checkout or committing to local `main` is forbidden regardless of how
76
- the environment looks. Prepare surfaces `remoteVerified`; on `false` flip to
77
- `agent::blocked` quoting `remoteProbe.detail` and halt.
78
-
79
- ---
80
-
81
- ## S1 — Prepare the single run
82
-
83
- ```bash
84
- node .agents/scripts/epic-deliver-prepare.js --epic <epicId> --single [--steal] [--as <handle>]
85
- ```
86
-
87
- `--single` short-circuits Story enumeration
88
- ([`runEpicDeliverPrepareSingle`](../../scripts/epic-deliver-prepare.js)). It:
89
-
90
- 1. **Refuses `acceptance::n-a`** (fail-closed front gate). Under single
91
- delivery the non-waivable epic-level acceptance reconcile is the ONLY
92
- acceptance gate, so an Epic declaring "no acceptance criteria" is
93
- structurally incoherent — prepare throws. (The back gate is S2b's
94
- reconcile; see [Non-waivable reconcile](#non-waivable-acceptance-reconcile).)
95
- 2. Runs the same fail-closed preflight guards as the fan-out prepare
96
- (checkout-safety + Epic lease).
97
- 3. Seeds `epic/<id>` and materializes **ONE** worktree at
98
- `.worktrees/epic-<epicId>/` on it.
99
- 4. Parses the Epic body's `## Delivery Slicing` table and writes the
100
- `epic-run-state` **slice map** (`deliveryShape: "single"`, `storyCount: 0`,
101
- `concurrencyCap: 1`) — idempotent + resume-preserving (a re-run keeps every
102
- already-`done` slice).
103
- 5. Writes the per-Epic docs digest.
104
-
105
- Treat the printed JSON as `state`:
106
- `{ epicId, deliveryShape, storyCount: 0, sliceCount, slices, epicBranch, workCwd, worktreeCreated, checkpointInitializedAt, docsDigestPath }`.
107
- Flip the Epic to `agent::executing` (idempotent) after the CLI returns.
108
-
109
- > **`sliceCount === 0`.** A missing / unparseable `## Delivery Slicing` table
110
- > yields an empty slice map — there is nothing to walk. That is a plan-quality
111
- > defect: post a friction comment, flip to `agent::blocked`, and halt (do NOT
112
- > proceed to an empty close).
113
-
114
- ### S2 — `cd` into the worktree (absolute-path discipline)
115
-
116
- ```bash
117
- cd "<workCwd from S1>"
118
- ```
119
-
120
- All subsequent commands run from this directory.
121
-
122
- > **Worktree scope is not just the Bash cwd.** `cd <workCwd>` steers the Bash
123
- > tool's cwd but does **not** scope the path-based Edit/Write/Read tools — you
124
- > MUST prefix every such path with the absolute `workCwd` root or risk
125
- > silently editing the main checkout (same discipline as
126
- > [`single-story-deliver.md`](single-story-deliver.md) Step 0.5).
127
-
128
- ---
129
-
130
- ## S2 — Walk the Delivery Slicing table in order
131
-
132
- Read the Epic body's `## Delivery Slicing` table. Walk it **strictly in
133
- order** as an in-session checklist. The ordered slicing **is** the audit trail
134
- (the plan authored no tickets), and the ordering encodes the dependency chain
135
- — never reorder or parallelize.
136
-
137
- For each slice `slice-<n>` (1-based, matching the checkpoint's slice-map keys),
138
- **skip it when `slices[slice-<n>].status === "done"`** (resume: the work is
139
- already on `epic/<id>`). Otherwise:
140
-
141
- 1. **Announce the slice.** Emit `slice.start` on the ledger. This same
142
- boundary call also exports the active-slice env
143
- (`CC_EPIC_ID` / `CC_SLICE_ID`) into the worktree's `.env.local`, which
144
- arms the PostToolUse hook to emit `slice.heartbeat` for the rest of this
145
- slice (below):
146
-
147
- ```bash
148
- node <main-repo>/.agents/scripts/slice-phase.js \
149
- --epic <epicId> --slice slice-<n> --event start --slice-index <n-1> --title "<slice label>"
150
- ```
151
-
152
- 2. **Implement the slice** on `epic/<id>` in the worktree. Apply the relevant
153
- [skills](../../instructions.md) and local-lens concerns for the slice's
154
- footprint. You do **NOT** run a per-step `slice.heartbeat` CLI (Epic
155
- #4476): once `--event start` armed the active-slice env, the PostToolUse
156
- hook emits a throttled `slice.heartbeat` off the token stream as a free
157
- byproduct of every tool call, so the `/deliver` §2e Idle Watchdog can tell
158
- this one long session from a dead one without a dedicated bookkeeping turn.
159
- (The `slice-phase.js --event heartbeat` CLI remains available for an
160
- explicit beat if you deliberately want one, e.g. a long non-tool wait.)
161
-
162
- 3. **Commit** the slice to `epic/<id>` before the next slice
163
- (conventional subject, `(refs #<epicId>)`). Run the advisory quick gates
164
- (`lint`, `typecheck`) while iterating so drift surfaces early.
165
-
166
- 4. **Flip the marker + close the slice.** After the commit lands, flip the
167
- checkpoint marker `pending → done` and emit `slice.end`:
168
-
169
- ```bash
170
- node <main-repo>/.agents/scripts/slice-phase.js \
171
- --epic <epicId> --slice slice-<n> --event end --outcome done --record done
172
- ```
173
-
174
- (`--record done` splices `slices[slice-<n>].status = "done"` via
175
- [`recordSliceStatus`](../../scripts/lib/orchestration/epic-run-state-store.js)
176
- so a resumed run skips this slice.)
177
-
178
- If a slice cannot be completed, emit `slice.end --outcome blocked
179
- --record blocked`, post a friction comment, flip the Epic to `agent::blocked`,
180
- and park.
181
-
182
- When every slice is `done`, proceed to S2a.
183
-
184
- ---
185
-
186
- ## S2a — Per-AC-cluster acceptance critics (the acceptance-dilution guard)
187
-
188
- **This is the load-bearing risk mitigation.** In the fan-out shape each Story
189
- ran its own fresh-context acceptance self-eval critic, so acceptance coverage
190
- was distributed across the Story tree for free. Collapsing to one session would
191
- degrade that to two redraft rounds scoring every AC at once — the "acceptance
192
- dilution" risk the design calls out as blocking. The fix restores the
193
- distributed critic count.
194
-
195
- 1. **Cluster the ACs.** Parse the Epic body's `## Acceptance Table` AC ids
196
- (`AC-<n>`), ordered by their associated Delivery-Slicing slice, then split
197
- into clusters of at most `delivery.acceptanceEval.clusterCeiling` (default
198
- **4**, hard-clamped to `[1, 8]`) via
199
- [`clusterAcceptanceCriteria`](../../scripts/lib/orchestration/acceptance-clusters.js).
200
- The result is **exactly `ceil(totalACs / clusterCeiling)`** clusters — the
201
- fan-out width.
202
-
203
- 2. **One maker-blind critic per cluster.** For **each** cluster author **one**
204
- maker-blind verdict — NOT a continuation of your implementing turn, so the
205
- critic does not grade its own homework. There MUST be
206
- **exactly `ceil(totalACs / clusterCeiling)`** critic passes — **one per
207
- cluster** — never a single critic over all ACs (that is the collapse this
208
- guard forecloses). Each critic runs the shared
209
- [`acceptance-self-eval.md`](acceptance-self-eval.md) mechanic scoped to its
210
- cluster: it scores **that cluster's ACs** against the cumulative
211
- `git diff main...epic/<epicId>` diff (plus any `verify[]` evidence the ACs
212
- reference) and writes a verdict file under `temp/` conforming to
213
- [`acceptance-eval-verdict.schema.json`](../../schemas/acceptance-eval-verdict.schema.json).
214
-
215
- > **Fresh-vs-inline is risk-routed PER CLUSTER — the count is fixed
216
- > (Epic #4478, M7-B).** Whether a given cluster's critic runs as a
217
- > fresh-context spawn or inline is resolved per cluster by
218
- > `resolveCeremonyForRisk`
219
- > ([`ceremony-routing.js`](../../scripts/lib/orchestration/ceremony-routing.js))
220
- > from the Epic's `planningRisk.overallLevel` and
221
- > `delivery.routing.freshCriticSampleRate`: **`high`/`medium` → fresh spawn**,
222
- > **`low` → inline** (except the sampling-floor fraction forced fresh),
223
- > **missing/unknown → fresh + full ceremony**. This is **strictly** a
224
- > fresh-vs-inline choice **per cluster**: the number of clusters — hence the
225
- > number of critic passes and verdicts — stays **exactly**
226
- > `ceil(totalACs / clusterCeiling)` under **every** risk level. Risk routing
227
- > NEVER re-slices, merges, or drops a cluster.
228
- >
229
- > - **Fresh** → emit a **separate** `Agent` tool call
230
- > (`subagent_type: acceptance-critic` when
231
- > `delivery.routing.roleScopedAgents` is on — the default — else
232
- > `general-purpose`), maker-blind, scoped to that cluster's ACs.
233
- > - **Inline** → author that cluster's verdict inline in a deliberately
234
- > scoped self-critical pass (re-read only the diff + that cluster's ACs,
235
- > treat the implementation reasoning as untrusted). The gate, schema, and
236
- > proceed/redraft/block decision are identical.
237
- > - **Nesting-absent fallback.** If the host cannot spawn a nested `Agent` at
238
- > this depth at all, author **every** cluster's verdict inline regardless of
239
- > the risk verdict. Note the fallback in any block/friction comment.
240
-
241
- 3. **Gate each cluster (Epic-scoped).** Run the gate per cluster:
242
-
243
- ```bash
244
- node <main-repo>/.agents/scripts/acceptance-eval.js \
245
- --epic <epicId> --cluster <clusterId> --verdict <verdict-path>
246
- ```
247
-
248
- The Epic-scoped invocation (no `--story`) scopes the redraft-round count
249
- **per cluster** off the Epic's `signals.ndjson`. It exits:
250
- - **`proceed`** (every AC in the cluster `met`) → this cluster is clear.
251
- - **`redraft`** (some `partial`/`unmet`, rounds remain) → redraft the
252
- flagged ACs on `epic/<id>`, commit, and re-run this cluster's critic.
253
- - **`block`** (round cap reached, ACs still unmet) → exit non-zero. **STOP
254
- the whole run.** Flip the Epic to `agent::blocked` and post a friction
255
- comment naming the unmet ACs (with their cluster) and their evidence.
256
- **Never proceed to close (S2b) with any cluster blocked.**
257
-
258
- 4. Only when **every** cluster returns `proceed` do you proceed to S2b.
259
-
260
- ---
261
-
262
- ## S2b — Hand off to deliver-epic.md Phase 3 (merge tail, reused unchanged)
263
-
264
- Everything downstream of the acceptance gate is Epic-scope and reused
265
- **byte-for-byte** — there is exactly one home for the merge machinery. Continue
266
- at [`deliver-epic.md`](deliver-epic.md) **Phase 3** and run **Phases 3–9
267
- verbatim**:
268
-
269
- - Phase 3 — close-validation (lint + test + ratchets on `epic/<id>`)
270
- - Phase 4 — epic-close lens roster
271
- - Phase 5 — code-review (the ONE maker-blind cumulative-diff review — the
272
- north-star's "review is a fresh-context critic")
273
- - Phase 6 — retro
274
- - Phase 6.5 — integration gate
275
- - Phase 7 — finalize (branch-sync → `epic.close.end` → reconcile → open PR)
276
- - Phase 8 — watch-and-iterate to green CI
277
- - Phase 8.5 — auto-merge gate
278
- - Phase 9 — cleanup
279
-
280
- Do **not** copy those phases here. Read `deliver-epic.md` from Phase 3 and run
281
- them exactly as the fan-out route does — they never touch a Story ticket, so
282
- they compose unchanged over the slice-walked `epic/<id>` branch.
283
-
284
- ### Non-waivable acceptance reconcile
285
-
286
- Phase 7's `epic.close.end` fires the bus-owned `AcceptanceReconciler`. Under
287
- single delivery this listener is **non-waivable** (design §2c, the back gate):
288
- [`acceptance-reconciler.js`](../../scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js)
289
- resolves the delivery shape (off `epic-run-state.deliveryShape` or the
290
- `delivery::single` label) and treats a `status: "waived"` reconcile as
291
- **`failed`** (`acceptance.reconcile.failed` → `epic.blocked`) instead of
292
- passing it through. Combined with the S1 front gate (prepare refusing
293
- `acceptance::n-a`), this structurally forecloses shipping a single Epic with
294
- its sole acceptance gate waived.
295
-
296
- ---
297
-
298
- ## Idempotence and resume
299
-
300
- Re-runs resume from the slice map: `done` slices are skipped, `pending` slices
301
- resume in order. The per-cluster acceptance signals on the Epic stream let a
302
- resumed run pick up the correct redraft round per cluster. The PR from Phase 7
303
- is updated in place. `slice.start` / `slice.end` / `slice.heartbeat` on the
304
- ledger give the resume path and the idle watchdog an inspectable forward-
305
- progress signal for the single long session.
306
-
307
- ---
308
-
309
- ## Constraints
310
-
311
- - **Never** fan out `Agent` calls for slice implementation — the slice walk is
312
- in-session. The only `Agent` spawns are the S2a maker-blind acceptance
313
- critics (read-only), and only for clusters the risk router sends `fresh`.
314
- - **Never** dereference, enumerate, or transition a `type::story` ticket —
315
- this path has none.
316
- - **Never** collapse the S2a critics to fewer than
317
- `ceil(totalACs / clusterCeiling)` **critic passes** — one maker-blind verdict
318
- per cluster (fresh spawn or inline; the risk router chooses the mode, never
319
- the count) — and **never** proceed to S2b with a blocked cluster.
320
- - **Never** merge `epic/<epicId>` to `main` outside Phase 8.5 — the merge tail
321
- is `deliver-epic.md`'s, unchanged.
322
- - **Always** flip the slice marker `→ done` after each slice commits, and
323
- **always** post a friction comment before any non-`complete` outcome.
324
-
325
- ## See also
326
-
327
- - [`deliver.md`](../deliver.md) — the router that dispatches here.
328
- - [`deliver-epic.md`](deliver-epic.md) — the fan-out path; its Phases 3–9 are
329
- this helper's merge tail.
330
- - [`acceptance-self-eval.md`](acceptance-self-eval.md) — the per-cluster critic
331
- mechanic.