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,200 +1,148 @@
1
1
  ---
2
2
  description:
3
- Unified delivery entry point. Inspects the ticket type(s) and
4
- Epic-reference state of the supplied IDs, composes a sequential segment
5
- plan over any mix of Epics and standalone Stories, then delegates each
6
- segment to the Epic wave loop or the standalone multi-Story fan-out —
7
- preserving every flag and the parallel-delivery contract of the retired
8
- commands.
3
+ Unified delivery entry point. Delivers one or more Stories via the single
4
+ deliver-story engine story-<id> PR main. Sequences N>1 by depends_on
5
+ and runs the per-run epilogue once at the end.
9
6
  ---
10
7
 
11
- # /deliver [Epic IDs...] | [Story IDs...]
8
+ # /deliver <storyId...> | --run <planRunId>
12
9
 
13
10
  ## Role
14
11
 
15
- Router. `/deliver` owns input classification, segment-plan composition, and
16
- path selection only — all phase content lives in the two path helpers:
12
+ Single delivery path. `/deliver` owns input resolution and sequencing only —
13
+ every Story runs through
14
+ [`helpers/deliver-story.md`](helpers/deliver-story.md) (the evolved
15
+ single-Story engine). There is no Epic wave loop, no `epic/<id>` integration
16
+ branch, and no `--no-ff` wave merges.
17
17
 
18
- - [`helpers/deliver-epic.md`](helpers/deliver-epic.md) — the full Epic
19
- delivery loop (preflight, wave loop fanning out
20
- [`helpers/epic-deliver-story`](helpers/epic-deliver-story.md),
21
- close-validation, epic-audit, code-review, retro, finalize, watch,
22
- auto-merge gate, cleanup).
23
- - [`helpers/deliver-stories.md`](helpers/deliver-stories.md) — the
24
- standalone multi-Story path (`stories-wave-tick.js` continuous ready-set
25
- loop, operator confirmation, parallel fan-out to
26
- [`helpers/single-story-deliver`](helpers/single-story-deliver.md)).
18
+ ## Inputs
27
19
 
28
- ## Input matrix (authoritative)
20
+ | Invocation | Behavior |
21
+ | --- | --- |
22
+ | `/deliver <storyId>` | Deliver one Story via `helpers/deliver-story.md`. |
23
+ | `/deliver <storyId> <storyId> ...` | Sequence Stories in `depends_on` order via `stories-wave-tick.js`; each ready Story runs `deliver-story`. Default concurrency is **3**. |
24
+ | `/deliver --run <planRunId>` | Resolve Stories labeled `plan-run::<planRunId>` (envelope includes `dag` + `done`); sequence as above; after the last Story lands, run the per-run epilogue. |
29
25
 
30
- Fetch each supplied ID's labels and body (`type::*` label, `Epic: #N`
31
- reference) before routing:
26
+ Any ticket that is not `type::story`, or that still carries an `Epic: #N`
27
+ reference, is a hard error naming the ID and the fix (close or re-plan as a
28
+ v2 Story).
32
29
 
33
- | Input | Route |
34
- | --- | --- |
35
- | Exactly one `type::epic` ID | **Epic path** — resolve the Epic's delivery route (see [Epic delivery-route resolution](#epic-delivery-route-resolution) below), then run the selected helper's phases unchanged (single-segment plan; no confirmation prompt). |
36
- | One or more `type::story` IDs, none carrying an `Epic: #N` reference | **Standalone path** — run [`helpers/deliver-stories.md`](helpers/deliver-stories.md) Phases 0–3 (single-segment plan; no confirmation prompt). |
37
- | Any combination of ≥1 `type::epic` IDs and ≥0 standalone `type::story` IDs | **Segment plan** — compose and execute the sequential segment plan below. |
38
- | Any Story carrying an `Epic: #N` reference (alone or mixed into an otherwise-valid set) | **Error**, naming every affected ID and the fix: `Story #<id> belongs to Epic #<n> — run /deliver <n>`. |
39
-
40
- Per-ID classification is unchanged: fetch the `type::*` label and probe the
41
- body for an `Epic: #N` reference before routing. Never guess a route.
42
-
43
- ## Epic delivery-route resolution
44
-
45
- Every `type::epic` segment resolves to one of two delivery shapes before its
46
- helper runs. The routing is a pure function of the Epic's labels, its
47
- `epic-plan-state` checkpoint, and the config kill-switch — implemented in
48
- [`lib/orchestration/deliver-route.js`](../scripts/lib/orchestration/deliver-route.js)
49
- (`resolveEpicDeliveryRoute(epic, checkpoint, config)`), mirroring how the
50
- code-review depth resolver reads `planningRisk`/`decompose` off the same
51
- checkpoint. Fetch the Epic's labels and read its `epic-plan-state` structured
52
- comment, then apply the precedence (highest wins):
53
-
54
- 1. **Kill-switch — overrides all.** `delivery.routing.singleDelivery === false`
55
- (default `true`, read via `getDeliveryRouting`) forces **fan-out** for
56
- *every* Epic, even a single-marked one. This is the instant, per-consumer
57
- global revert that ships before the default flips — no code rollback, no
58
- re-plan.
59
- 2. **Single marker → single route.** The `delivery::single` label (primary)
60
- **or** `decompose.shape === "single"` on the checkpoint (secondary). A
61
- spec-only plan authored no Story tree; its `## Delivery Slicing` table is
62
- the audit trail.
63
- 3. **No marker → fan-out.** A legacy Epic (no marker, an authored Story tree)
64
- or a genuinely-wide DAG. Deliver-time width only *advises* — it never
65
- reroutes a single-marked Epic (that would orphan a tree that does not
66
- exist; re-route = re-plan).
67
-
68
- **Route dispatch.**
69
-
70
- - **`fan-out`** → run [`helpers/deliver-epic.md`](helpers/deliver-epic.md)
71
- Phases 1–9 unchanged (the wave loop fanning out per-Story sub-agents).
72
- - **`single`** → run
73
- [`helpers/deliver-epic-single.md`](helpers/deliver-epic-single.md) (the
74
- live flip, M4-B): a one-worktree in-session slice walk (prepare `--single` →
75
- ordered `## Delivery Slicing` walk on `epic/<id>` → per-AC-cluster
76
- acceptance critics) that **reuses `helpers/deliver-epic.md` Phases 3–9
77
- byte-for-byte** for the merge tail. This is now the **default** shape for a
78
- single-marked Epic. The kill-switch (`delivery.routing.singleDelivery=false`)
79
- still forces this verdict back to `fan-out` — an instant global revert with
80
- no code rollback.
81
-
82
- ## Segment plan (mixed / multi-Epic input)
83
-
84
- When the supplied IDs span more than one Epic, or mix Epics with standalone
85
- Stories, the router composes a **segment plan** and executes the segments
86
- **strictly sequentially**:
87
-
88
- 1. **Standalone segment first** (when any standalone Story IDs are
89
- present): the full standalone-Story set forms **one** segment,
90
- delivered via [`helpers/deliver-stories.md`](helpers/deliver-stories.md)
91
- Phases 0–3 unchanged. It runs first because it is fast, each Story
92
- merges to `main` independently, and each subsequent Epic segment's
93
- Phase 7.0 base-sync then integrates those merges naturally instead of
94
- the Epic PR opening behind base.
95
- 2. **Epic segments in input order**: each `type::epic` ID forms its own
96
- segment. Resolve its delivery route (see [Epic delivery-route
97
- resolution](#epic-delivery-route-resolution)) and run the selected helper
98
- unchanged — the `fan-out` route dispatches
99
- [`helpers/deliver-epic.md`](helpers/deliver-epic.md) Phases 1–9, the
100
- `single` route dispatches
101
- [`helpers/deliver-epic-single.md`](helpers/deliver-epic-single.md) (which
102
- reuses that helper's Phases 3–9 for the merge tail).
103
-
104
- Sequential execution is a deliberate design decision: the Epic path assumes
105
- a single main checkout (prepare's checkout guard, Phase 7.0
106
- `git checkout epic/<id>`), holds a per-Epic lease, serializes same-machine
107
- sessions via `epic-merge-lock.js`, and constrains dispatch to one wave at a
108
- time. Segments are never interleaved or parallelized; running them one at a
109
- time keeps both helpers' machinery untouched.
110
-
111
- **Confirmation gate.** When the composed plan has more than one segment,
112
- present it to the operator before dispatching — the segments, the IDs in
113
- each, and the execution order — and wait for confirmation. `--yes`
114
- suppresses this prompt. Single-segment plans route directly with today's
115
- behavior (no new prompt; the standalone path's own Phase 1 confirmation
116
- still applies as before).
117
-
118
- **Failure policy.** A segment that ends non-complete (blocked, failed, or
119
- halted at a gate) **stops the run** — no subsequent segment dispatches.
120
- Report the terminal state: which segments completed, which segment halted
121
- (and why), and which segments never started. Name the resume command:
122
- re-running `/deliver` with the same IDs — both path helpers short-circuit
123
- already-done work (the Epic path resumes idempotently from its checkpoint;
124
- merged standalone Stories no-op).
125
-
126
- ## Flags (scoped per segment)
127
-
128
- | Path | Flags |
30
+ ## Flags
31
+
32
+ | Flag | Meaning |
129
33
  | --- | --- |
130
- | Epic | `--skip-epic-audit`, `--skip-code-review`, `--skip-retro`, `--full-retro`, `--steal`, `--as <handle>` |
131
- | Story | `--dep <from>:<to>`, `--yes`, `--concurrency <n>` |
34
+ | `--run <planRunId>` | Deliver every Story in the plan-run (label `plan-run::<id>`). |
35
+ | `--dep <from>:<to>` | Extra operator dependency edge (Story id → Story id). |
36
+ | `--concurrency <n>` | Ready-set fan-out cap (default **3** from `delivery.deliverRunner.concurrencyCap`; set `1` for sequential). |
37
+ | `--yes` | Suppress the multi-Story confirmation gate. |
38
+ | `--steal` | Forwarded to `single-story-init.js` / lease steal. |
39
+ | `--wait-merge` | Force close-and-land (default when `delivery.routing.closeAndLand` is true). |
40
+ | `--no-wait-merge` | Opt out of close-and-land; stop at `agent::closing` for a human land. |
41
+
42
+ ## Procedure
43
+
44
+ 1. **Resolve the Story set.**
45
+ - Positional IDs → use them.
46
+ - `--run <planRunId>` →
47
+
48
+ ```bash
49
+ node .agents/scripts/resolve-plan-run.js --run <planRunId>
50
+ ```
51
+
52
+ Capture `stories[]`, `dag[]`, and `done[]` from the envelope. Prefer
53
+ the emitted `dag` — do **not** rebuild it by hand when `--run` was used.
54
+
55
+ 2. **Build the DAG (positional only).** When delivering positional IDs
56
+ (no `--run`), read `depends_on` / `blocked by` from each body and merge
57
+ `--dep` edges into a JSON DAG for `stories-wave-tick.js`:
58
+
59
+ ```json
60
+ [{ "id": 101, "dependsOn": [] }, { "id": 102, "dependsOn": [101] }]
61
+ ```
62
+
63
+ 3. **Confirm (N>1).** Present the order and wait unless `--yes`.
132
64
 
133
- In a segment plan, Epic-path flags apply to **every** Epic segment;
134
- Story-path flags apply to the standalone segment. `--yes` additionally
135
- suppresses the router's segment-plan confirmation gate above. A flag with
136
- no applicable segment in the plan is reported once as a no-op warning and
137
- ignored — never an error (the existing convention, restated for segment
138
- plans).
65
+ 4. **Sequence.** Loop until every Story is done:
139
66
 
140
- **Multi-Story parallel contract (preserved verbatim).**
67
+ ```bash
68
+ node .agents/scripts/stories-wave-tick.js \
69
+ --dag '<json>' --done <csv> --in-flight <n> --concurrency <n>
70
+ ```
71
+
72
+ For each `ready` Story id, read
73
+ [`helpers/deliver-story.md`](helpers/deliver-story.md) **in full** and
74
+ execute it (init → implement → ceremony → close-and-land). Under
75
+ `--yes` / injected helper content, execute directly without a re-read
76
+ turn.
77
+
78
+ 5. **Per-run epilogue (N>1).** After the last Story lands:
79
+
80
+ ```bash
81
+ # Plan-run label path:
82
+ node .agents/scripts/plan-run-epilogue.js --run <planRunId>
83
+
84
+ # Positional multi-Story path (synthesizes an adhoc planRunId):
85
+ node .agents/scripts/plan-run-epilogue.js --stories 101,102
86
+ ```
87
+
88
+ This executes, in order:
89
+ - `audit-roster` — selects cross-Story audit lenses over the combined
90
+ landed tip and posts `plan-run-audit-roster` on the primary Story;
91
+ the host MUST walk each listed lens against the combined diff
92
+ - `follow-up-rollup` — friction follow-ups across every Story in the
93
+ run (files issues when auto-file is on; posts `follow-ups`)
94
+ - `sibling-coherence` — Spec/Acceptance coherence check across sibling
95
+ bodies (`plan-run-sibling-coherence`)
96
+
97
+ A single-Story run skips the epilogue — follow-ups are captured on
98
+ merge confirm instead (`captureStoryFollowUps`).
99
+
100
+ ## Branch model (authoritative)
101
+
102
+ Every Story:
141
103
 
142
104
  ```text
143
- /deliver <id> <id> --dep <from>:<to> --concurrency <n> --yes
105
+ story-<id> → PR → main (squash + required checks)
144
106
  ```
145
107
 
146
- preserves the retired multi-Story command's full surface the same flags,
147
- the same operator confirmation gate (suppressed by `--yes`), and the same
148
- parallel fan-out to
149
- [`helpers/single-story-deliver`](helpers/single-story-deliver.md) — but
150
- schedules through `stories-wave-tick.js`'s **continuous ready-set loop**
151
- (the shared `selectReadySet` core) rather than a static wave plan: each
152
- Story dispatches the instant its own dependencies are done, capped by the
153
- resolved global `concurrencyCap` and guarded against file-overlap
154
- co-dispatch, exactly as the Epic path is. The parallelism lives **inside**
155
- the standalone segment; segments themselves remain strictly sequential.
108
+ There is no `epic/<id>` integration branch and no `--no-ff` wave merge.
109
+ Dependent Stories land sequentially so each builds on the previous merge
110
+ to `main`.
156
111
 
157
- ## Procedure
112
+ ## Ceremony (profiles + two scopes)
113
+
114
+ Ceremony depth is selected by `delivery.routing.ceremonyProfile`
115
+ (`minimal` | `standard` | `strict`, default `standard`) and the Story's
116
+ planning risk:
117
+
118
+ | Profile | Acceptance critic | When to use |
119
+ | --- | --- | --- |
120
+ | `minimal` | Always inline | Tiny trusted N=1 Stories |
121
+ | `standard` | Risk-routed (+ sampling floor) | Default |
122
+ | `strict` | Always fresh-context | High-assurance / regulated surfaces |
158
123
 
159
- 1. **Parse args.** At least one positive-integer ID is required.
160
- 2. **Classify.** Fetch each ticket's labels + body and apply the input
161
- matrix above. Any Epic-attached Story ID is a hard error naming the
162
- affected IDs and the fix never guess a route.
163
- 3. **Compose the segment plan.** Standalone-Story set (when present) as
164
- one segment, then one segment per Epic ID in input order. For a
165
- multi-segment plan, present it and wait for operator confirmation
166
- (`--yes` suppresses).
167
- 4. **Execute segments sequentially.** For each segment in order, read the
168
- selected path helper **in full** and execute it from its entry phase,
169
- forwarding the segment's scoped flags. The helper's phase numbering,
170
- watchdogs, gates, and scripts are unchanged — this router adds no phase
171
- content. Stop on the first non-complete segment per the failure policy.
172
- 5. **Report.** On completion (or halt), summarize per-segment outcomes and,
173
- when halted, the resume command.
124
+ | Scope | What runs | Mechanism |
125
+ | --- | --- | --- |
126
+ | **Per-Story (always)** | Gates, branch discipline, close-and-land | `deliver-story` / `single-story-close` |
127
+ | **Per-Story (profile + risk)** | Acceptance critic mode; review depth; audit lenses | `ceremony-routing.js` + `review-depth.js` + `code-review.js` |
128
+ | **Per-run (N>1)** | Audit roster · follow-up roll-up · sibling coherence | `plan-run-epilogue.js` once at run end |
129
+ | **Per-Story land** | Actionable follow-ups from friction | `captureStoryFollowUps` in confirm-merge |
174
130
 
175
131
  ## Constraints
176
132
 
177
- - **Land or block — never a silent local build (issue #4483).** The
178
- helpers' orchestration path (worktrees, `story-<id>`/`epic/<id>` branches,
179
- close-validation, PR) is the ONLY sanctioned delivery mechanism.
180
- Executing story slices inline in this session and/or committing the
181
- delivery to local `main` is expressly forbidden, regardless of how the
182
- environment looks. Each path surfaces verified remote evidence
183
- (`remoteVerified`) at entry; on `false`, transition the ticket to
184
- `agent::blocked` quoting `remoteProbe.detail` and halt.
185
- - `/deliver` requires planned tickets: Epics at `agent::ready` (the
186
- Epic helper's preflight enforces this, per segment) or well-formed
187
- standalone Stories. Planning happens in [`/plan`](plan.md); the
188
- plan-review gate between the two commands is a hard boundary.
189
- - The router performs no git or label mutations itself; the path helpers
190
- own every script invocation.
191
- - Segments execute strictly sequentially — never interleave a standalone
192
- Story fan-out with an Epic wave loop, and never run two Epic segments
193
- concurrently.
133
+ - **Land or block — never a silent local build.** Worktrees, `story-<id>`
134
+ branches, close-validation, and PR-to-`main` are the only sanctioned
135
+ delivery mechanism. Attended delivers default to close-and-land
136
+ (`delivery.routing.closeAndLand: true`); use `--no-wait-merge` only when
137
+ a human will land the PR.
138
+ - `/deliver` never plans tickets come from [`/plan`](plan.md).
139
+ - The router performs no git/label mutations; `deliver-story` owns every
140
+ script invocation per Story.
194
141
 
195
142
  ## See also
196
143
 
197
- - [`/plan`](plan.md) — the unified planning entry point.
198
- - [`helpers/deliver-epic.md`](helpers/deliver-epic.md) /
199
- [`helpers/deliver-stories.md`](helpers/deliver-stories.md) — the path
200
- helpers, delegated to per segment.
144
+ - [`/plan`](plan.md) — unified planning entry point.
145
+ - [`helpers/deliver-story.md`](helpers/deliver-story.md) — the one Story
146
+ delivery engine.
147
+ - Placeholder design Story for a fully deterministic deliver-run
148
+ orchestrator: [#4521](https://github.com/dsj1984/mandrel/issues/4521).
@@ -226,10 +226,9 @@ The merged-branch sweep recognizes three detection signals, in order:
226
226
  `git merge-tree --write-tree <base> <branch>` (git ≥ 2.38) produces a
227
227
  tree identical to `<base>`'s own tree — i.e. applying the branch's
228
228
  changes on top of `<base>` is a content no-op. This catches
229
- `story-<id>` branches merged into `epic/<id>` whose Epic PR
230
- **squash-merged** to `main` (the story commits are not ancestors of
231
- `main` and the story branch usually has no PR of its own), and any
232
- other branch whose content landed via a different route (a renamed
229
+ `story-<id>` branches whose PR **squash-merged** to `main` (the story
230
+ commits are not ancestors of `main`), and any other branch whose content
231
+ landed via a different route (a renamed
233
232
  head, a cherry-pick, a manual `merge --squash`). When git rejects
234
233
  `--write-tree` (git < 2.38) or the simulated merge conflicts, the
235
234
  probe is inconclusive and the branch keeps its existing `not-merged`
@@ -1,7 +1,7 @@
1
1
  # Merge Conflict Resolution — Shared Procedure
2
2
 
3
3
  Canonical, workflow-agnostic procedure for resolving merge / rebase conflicts.
4
- Referenced by `deliver-stories.md` and `deliver-epic.md`.
4
+ Referenced by `deliver.md` and `helpers/deliver-story.md`.
5
5
 
6
6
  ## Procedure
7
7
 
@@ -1,19 +1,16 @@
1
1
  ---
2
2
  description: >-
3
3
  Shared include for the bounded acceptance self-eval loop run during Story
4
- delivery (both Epic-attached `epic-deliver-story` and standalone
5
- `single-story-deliver`). Defines the per-round critic mechanic; each caller
6
- supplies its own gate-decision wrapper (snapshot vs. label transitions).
4
+ delivery (`helpers/deliver-story`). Defines the per-round critic mechanic;
5
+ the caller supplies its gate-decision wrapper (label transitions).
7
6
  ---
8
7
 
9
8
  # Bounded acceptance self-eval loop (shared include)
10
9
 
11
10
  > **Include module.** Not a slash command. Referenced from
12
- > [`epic-deliver-story.md`](epic-deliver-story.md) and
13
- > [`single-story-deliver.md`](single-story-deliver.md) at their respective
14
- > Step 1a. This file is the **single prose home** for the per-round critic
15
- > mechanic; each caller layers only its own wrapper (snapshot transitions vs.
16
- > standalone label transitions, and whether to pass `--epic`).
11
+ > [`deliver-story.md`](deliver-story.md) at Step 1a. This file is the
12
+ > **single prose home** for the per-round critic mechanic; the caller layers
13
+ > only its wrapper (Story label transitions).
17
14
 
18
15
  After the implementation commits land and **before** the Story proceeds to
19
16
  close, run an explicit, **independent** eval pass that scores the working diff
@@ -25,10 +22,9 @@ satisfies *this Story's* acceptance criteria.
25
22
  The loop is **always on** (a hard cutover — there is no flag to disable it) and
26
23
  **bounded** by `delivery.acceptanceEval.maxRounds` (default 2), which the
27
24
  resolver clamps into `[1, hard ceiling]` so the cap can never be switched off or
28
- run unbounded. It is **distinct from** the Epic-level acceptance-spec
29
- reconciliation in `/deliver` Phase 7.1 (which fires once at finalize and
30
- only checks `@ac-*` Gherkin tag presence): this loop is per-Story,
31
- per-criterion, mid-delivery, and evaluates the actual work product.
25
+ run unbounded. It is **distinct from** the per-run `sibling-coherence` epilogue
26
+ step (`planRunEpilogue` for N>1): this loop is per-Story, per-criterion,
27
+ mid-delivery, and evaluates the actual work product.
32
28
 
33
29
  ## Per round
34
30
 
@@ -50,8 +46,8 @@ per-criterion, mid-delivery, and evaluates the actual work product.
50
46
  > review-depth and risk → audit-lens routers). Resolve it per cluster with
51
47
  > `resolveCeremonyForRisk` from
52
48
  > [`ceremony-routing.js`](../../scripts/lib/orchestration/ceremony-routing.js)
53
- > using the Epic's `planningRisk.overallLevel` and
54
- > `delivery.routing.freshCriticSampleRate`:
49
+ > using the **Story's** `planningRisk.overallLevel` (or folded
50
+ > `risk-verdict`) and `delivery.routing.freshCriticSampleRate`:
55
51
  > **`high`/`medium` risk → `fresh`** (spawn the critic); **`low` risk →
56
52
  > `inline`** (the contract-identical inline fallback below), **except** the
57
53
  > `freshCriticSampleRate` fraction of low-risk clusters the sampling floor
@@ -100,15 +96,9 @@ per-criterion, mid-delivery, and evaluates the actual work product.
100
96
  HEAD-sha key enforces "unchanged HEAD") and pass the exact gate name:
101
97
 
102
98
  ```bash
103
- # Epic-attached Story:
104
99
  node <main-repo>/.agents/scripts/evidence-gate.js \
105
- --epic-id <epicId> --scope-id <storyId> --gate lint \
100
+ --standalone --scope-id <storyId> --gate lint \
106
101
  --worktree <worktree> -- npm run lint
107
-
108
- # Standalone Story (no parent Epic) — use --standalone, omit --epic-id:
109
- node <main-repo>/.agents/scripts/evidence-gate.js \
110
- --standalone --scope-id <storyId> --gate typecheck \
111
- --worktree <worktree> -- <resolved typecheck command>
112
102
  ```
113
103
 
114
104
  Close's `shouldSkip` then short-circuits that gate when HEAD is
@@ -122,13 +112,11 @@ per-criterion, mid-delivery, and evaluates the actual work product.
122
112
  one `{ index, criterion, verdict: met|partial|unmet, evidence,
123
113
  verifyEvidence[] }` record per acceptance item.
124
114
  2. **Decide.** Run the gate against the verdict (the caller's Step 1a names the
125
- exact invocation — standalone omits `--epic`; the Epic-attached path passes
126
- `--epic <epicId>` so the per-criterion signal lands on the Epic-scoped
127
- stream):
115
+ exact invocation — omit `--epic`):
128
116
 
129
117
  ```bash
130
118
  node <main-repo>/.agents/scripts/acceptance-eval.js \
131
- --story <storyId> [--epic <epicId>] --verdict <verdict-path>
119
+ --story <storyId> --verdict <verdict-path>
132
120
  ```
133
121
 
134
122
  The gate validates the verdict against the schema, applies the round cap,
@@ -138,11 +126,10 @@ per-criterion, mid-delivery, and evaluates the actual work product.
138
126
  close.
139
127
  - **`decision: "redraft"`** (some `partial`/`unmet`, rounds remaining) →
140
128
  exit 0. Redraft the flagged criteria (named in `unmetCriteria[]`), commit
141
- the fix, and re-run the eval pass for the next round.
129
+ the fix, and start another round.
142
130
  - **`decision: "block"`** (round cap reached, criteria still unmet) → exit
143
131
  non-zero. **Do not proceed to close.** Take the caller's blocked path
144
- (transition to `agent::blocked` / flip the snapshot to `blocked`) and post
145
- a `friction` comment naming the unmet criteria and their evidence. Never
146
- silently proceed to close.
132
+ (transition to `agent::blocked`) and post a `friction` comment naming the
133
+ unmet criteria and their evidence. Never silently proceed to close.
147
134
 
148
135
  Write the verdict files under `temp/` only — they are scratch artifacts.