mandrel 1.93.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 (463) hide show
  1. package/.agents/README.md +59 -73
  2. package/.agents/agents/acceptance-critic.md +129 -0
  3. package/.agents/agents/story-worker.md +161 -0
  4. package/.agents/docs/SDLC.md +489 -1285
  5. package/.agents/docs/agentrc-reference.json +177 -67
  6. package/.agents/docs/configuration.md +108 -136
  7. package/.agents/docs/execution-reference.md +44 -22
  8. package/.agents/docs/quality-gates.md +13 -19
  9. package/.agents/docs/workflows.md +3 -3
  10. package/.agents/instructions.md +107 -108
  11. package/.agents/rules/ci-remediation.md +8 -12
  12. package/.agents/rules/git-conventions-reference.md +224 -0
  13. package/.agents/rules/git-conventions.md +42 -223
  14. package/.agents/rules/security-baseline.md +5 -0
  15. package/.agents/rules/testing-standards.md +106 -13
  16. package/.agents/schemas/acceptance-eval-verdict.schema.json +1 -1
  17. package/.agents/schemas/agentrc.schema.json +71 -201
  18. package/.agents/schemas/lifecycle/ledger-record.schema.json +1 -1
  19. package/.agents/schemas/lifecycle/retro.end.schema.json +1 -1
  20. package/.agents/schemas/risk-verdict.schema.json +0 -13
  21. package/.agents/scripts/acceptance-eval.js +62 -18
  22. package/.agents/scripts/agents-bootstrap-github.js +1 -1
  23. package/.agents/scripts/analyze-execution.js +1 -1
  24. package/.agents/scripts/audit-to-stories.js +7 -7
  25. package/.agents/scripts/boot-sweep.js +1 -1
  26. package/.agents/scripts/check-context-budget.js +62 -5
  27. package/.agents/scripts/check-lifecycle-lint.js +6 -9
  28. package/.agents/scripts/check-prepush-recovery.js +1 -1
  29. package/.agents/scripts/cleanup-repo-test-temp.js +6 -1
  30. package/.agents/scripts/diagnose-friction.js +0 -6
  31. package/.agents/scripts/lib/Logger.js +6 -10
  32. package/.agents/scripts/lib/audit-suite/runner.js +2 -2
  33. package/.agents/scripts/lib/audit-suite/selector.js +5 -5
  34. package/.agents/scripts/lib/audit-to-stories/{seed-epic-from-findings.js → seed-from-findings.js} +9 -9
  35. package/.agents/scripts/lib/baselines/kernel.js +206 -18
  36. package/.agents/scripts/lib/baselines/kinds/maintainability.js +0 -4
  37. package/.agents/scripts/lib/baselines/reader.js +1 -6
  38. package/.agents/scripts/lib/bdd-runner-detect.js +5 -9
  39. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +32 -33
  40. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +56 -18
  41. package/.agents/scripts/lib/checks/core-bare-clean.js +2 -2
  42. package/.agents/scripts/lib/checks/index.js +2 -1
  43. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +23 -21
  44. package/.agents/scripts/lib/cli/standard-args.js +13 -22
  45. package/.agents/scripts/lib/cli-args.js +16 -7
  46. package/.agents/scripts/lib/close-validation/gates.js +160 -22
  47. package/.agents/scripts/lib/config/acceptance-eval.js +52 -5
  48. package/.agents/scripts/lib/config/ci.js +6 -31
  49. package/.agents/scripts/lib/config/delivery-routing.js +103 -0
  50. package/.agents/scripts/lib/config/explain.js +57 -36
  51. package/.agents/scripts/lib/config/limits.js +17 -58
  52. package/.agents/scripts/lib/config/paths.js +0 -2
  53. package/.agents/scripts/lib/config/quality.js +1 -1
  54. package/.agents/scripts/lib/config/runners.js +17 -50
  55. package/.agents/scripts/lib/config/temp-paths.js +19 -14
  56. package/.agents/scripts/lib/config/worktree-isolation.js +0 -5
  57. package/.agents/scripts/lib/config-resolver.js +3 -8
  58. package/.agents/scripts/lib/config-settings-schema-delivery.js +46 -136
  59. package/.agents/scripts/lib/config-settings-schema-quality.js +17 -14
  60. package/.agents/scripts/lib/config-settings-schema.js +52 -38
  61. package/.agents/scripts/lib/dependency-parser.js +3 -2
  62. package/.agents/scripts/lib/doc-tiers.js +39 -4
  63. package/.agents/scripts/lib/duplicate-search.js +211 -41
  64. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
  65. package/.agents/scripts/lib/findings/promote-finding.js +5 -5
  66. package/.agents/scripts/lib/framework-version.js +2 -3
  67. package/.agents/scripts/lib/git-branch-cleanup.js +1 -10
  68. package/.agents/scripts/lib/git-branch-lifecycle.js +17 -22
  69. package/.agents/scripts/lib/git-utils.js +32 -6
  70. package/.agents/scripts/lib/github/framework-repo.js +6 -0
  71. package/.agents/scripts/lib/label-constants.js +10 -23
  72. package/.agents/scripts/lib/label-taxonomy.js +9 -43
  73. package/.agents/scripts/lib/observability/active-story-env.js +112 -3
  74. package/.agents/scripts/lib/observability/hook-heartbeat.js +187 -0
  75. package/.agents/scripts/lib/observability/source-classifier.js +3 -3
  76. package/.agents/scripts/lib/observability/tool-trace-hook.js +15 -4
  77. package/.agents/scripts/lib/onboard/init-tail.js +1 -3
  78. package/.agents/scripts/lib/orchestration/acceptance-clusters.js +111 -0
  79. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +32 -4
  80. package/.agents/scripts/lib/orchestration/audit-lens-routing.js +128 -0
  81. package/.agents/scripts/lib/orchestration/bookkeeping-outbox.js +273 -0
  82. package/.agents/scripts/lib/orchestration/ceremony-routing.js +204 -0
  83. package/.agents/scripts/lib/orchestration/code-review.js +20 -268
  84. package/.agents/scripts/lib/orchestration/column-sync.js +1 -1
  85. package/.agents/scripts/lib/orchestration/consolidation-precondition.js +1 -1
  86. package/.agents/scripts/lib/orchestration/context-envelope.js +2 -5
  87. package/.agents/scripts/lib/orchestration/docs-digest.js +8 -8
  88. package/.agents/scripts/lib/orchestration/file-assumptions.js +7 -13
  89. package/.agents/scripts/lib/orchestration/git-cleanup/phases/cli.js +1 -1
  90. package/.agents/scripts/lib/orchestration/lifecycle/emit-loop-tick.js +8 -8
  91. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +2 -2
  92. package/.agents/scripts/lib/orchestration/lifecycle/ledger-writer.js +6 -3
  93. package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +17 -43
  94. package/.agents/scripts/lib/orchestration/lint-baseline-service.js +4 -4
  95. package/.agents/scripts/lib/orchestration/merge-block-class.js +1 -1
  96. package/.agents/scripts/lib/orchestration/phase-runner.js +3 -2
  97. package/.agents/scripts/lib/orchestration/plan-context.js +248 -266
  98. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +3 -2
  99. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +1 -1
  100. package/.agents/scripts/lib/orchestration/plan-navigation.js +92 -0
  101. package/.agents/scripts/lib/orchestration/plan-persist/fan-out-gate.js +61 -0
  102. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +97 -0
  103. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +223 -854
  104. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +361 -0
  105. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +35 -108
  106. package/.agents/scripts/lib/orchestration/plan-reachability.js +9 -14
  107. package/.agents/scripts/lib/orchestration/plan-runner/worktree-sweep.js +1 -1
  108. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/authoring-context.js +14 -14
  109. package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +27 -0
  110. package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/risk-verdict.js +3 -4
  111. package/.agents/scripts/lib/orchestration/post-merge/phases/branch-cleanup.js +2 -2
  112. package/.agents/scripts/lib/orchestration/post-merge/phases/dashboard-refresh.js +8 -20
  113. package/.agents/scripts/lib/orchestration/post-merge/phases/worktree-reap.js +3 -2
  114. package/.agents/scripts/lib/orchestration/pr-base-guard.js +18 -28
  115. package/.agents/scripts/lib/orchestration/preflight-cache.js +5 -5
  116. package/.agents/scripts/lib/orchestration/remote-verifier.js +1 -1
  117. package/.agents/scripts/lib/orchestration/resolve-plan-run.js +155 -0
  118. package/.agents/scripts/lib/orchestration/resolves-token.js +1 -1
  119. package/.agents/scripts/lib/orchestration/retro-perf-heuristics.js +8 -8
  120. package/.agents/scripts/lib/orchestration/retro-proposals.js +140 -79
  121. package/.agents/scripts/lib/orchestration/review-depth.js +26 -12
  122. package/.agents/scripts/lib/orchestration/review-providers/codex.js +2 -2
  123. package/.agents/scripts/lib/orchestration/review-providers/review-provider-factory.js +21 -56
  124. package/.agents/scripts/lib/orchestration/run-epilogue.js +426 -0
  125. package/.agents/scripts/lib/orchestration/single-story-close/phases/auto-merge.js +1 -1
  126. package/.agents/scripts/lib/orchestration/single-story-close/phases/close-validation.js +1 -0
  127. package/.agents/scripts/lib/orchestration/single-story-close/phases/code-review.js +95 -41
  128. package/.agents/scripts/lib/orchestration/single-story-close/phases/options.js +16 -13
  129. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +40 -0
  130. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +11 -3
  131. package/.agents/scripts/lib/orchestration/spec-freshness.js +14 -205
  132. package/.agents/scripts/lib/orchestration/spec-section-validator.js +4 -5
  133. package/.agents/scripts/lib/orchestration/spec-spill.js +60 -0
  134. package/.agents/scripts/lib/orchestration/split-policy-validator.js +188 -0
  135. package/.agents/scripts/lib/orchestration/story-close/emit-blocked.js +49 -0
  136. package/.agents/scripts/lib/orchestration/story-close/phases/code-review.js +15 -12
  137. package/.agents/scripts/lib/orchestration/story-follow-ups.js +237 -0
  138. package/.agents/scripts/lib/orchestration/story-init-remote.js +47 -0
  139. package/.agents/scripts/lib/orchestration/story-plan-state.js +48 -0
  140. package/.agents/scripts/lib/orchestration/{epic-runner → story-progress}/story-run-progress-writer.js +3 -3
  141. package/.agents/scripts/lib/orchestration/structured-comment-parser.js +1 -1
  142. package/.agents/scripts/lib/orchestration/task-body-validator.js +8 -18
  143. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +11 -61
  144. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +189 -373
  145. package/.agents/scripts/lib/orchestration/ticket-validator.js +3 -8
  146. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +0 -25
  147. package/.agents/scripts/lib/orchestration/ticketing/reads.js +29 -26
  148. package/.agents/scripts/lib/orchestration/ticketing/transition.js +5 -5
  149. package/.agents/scripts/lib/planning-corpus.js +16 -11
  150. package/.agents/scripts/lib/preflight-runner.js +2 -2
  151. package/.agents/scripts/lib/provider-factory.js +1 -1
  152. package/.agents/scripts/lib/qa/coverage-verdict.js +5 -5
  153. package/.agents/scripts/lib/single-story/confirm-merge-follow-ups.js +36 -0
  154. package/.agents/scripts/lib/single-story-sweep/protection-ctx.js +1 -1
  155. package/.agents/scripts/lib/story-adjacency.js +11 -14
  156. package/.agents/scripts/lib/story-body/story-body.js +124 -70
  157. package/.agents/scripts/lib/story-plan.js +2 -4
  158. package/.agents/scripts/lib/templates/decomposer-prompts.js +46 -45
  159. package/.agents/scripts/lib/templates/spec-author-prompts.js +47 -45
  160. package/.agents/scripts/lib/{epic-body-sections.js → ticket-body-sections.js} +26 -26
  161. package/.agents/scripts/lib/validation-evidence.js +1 -1
  162. package/.agents/scripts/lib/wave-runner/ready-set.js +6 -6
  163. package/.agents/scripts/lib/workspace-provisioner.js +1 -1
  164. package/.agents/scripts/lib/worktree/lifecycle/reap.js +5 -7
  165. package/.agents/scripts/lint-issue-body.js +71 -40
  166. package/.agents/scripts/mandrel-update-preflight.js +1 -1
  167. package/.agents/scripts/notify.js +4 -3
  168. package/.agents/scripts/plan-context.js +64 -74
  169. package/.agents/scripts/plan-persist.js +121 -280
  170. package/.agents/scripts/plan-run-epilogue.js +97 -0
  171. package/.agents/scripts/post-structured-comment.js +38 -0
  172. package/.agents/scripts/providers/github/issues.js +17 -33
  173. package/.agents/scripts/providers/github/mappers.js +0 -12
  174. package/.agents/scripts/providers/github/tickets.js +2 -5
  175. package/.agents/scripts/resolve-plan-run.js +117 -0
  176. package/.agents/scripts/signals-view.js +24 -19
  177. package/.agents/scripts/single-story-close.js +11 -14
  178. package/.agents/scripts/single-story-confirm-merge.js +39 -23
  179. package/.agents/scripts/single-story-init.js +29 -20
  180. package/.agents/scripts/stories-wave-tick.js +6 -6
  181. package/.agents/scripts/story-plan.js +26 -47
  182. package/.agents/scripts/sync-claude-agents.js +165 -0
  183. package/.agents/scripts/update-ticket-state.js +37 -15
  184. package/.agents/skills/core/analyze-execution/SKILL.md +21 -18
  185. package/.agents/skills/core/api-and-interface-design/SKILL.md +5 -3
  186. package/.agents/skills/core/code-review-and-quality/SKILL.md +63 -7
  187. package/.agents/skills/core/debugging-and-error-recovery/SKILL.md +1 -1
  188. package/.agents/skills/core/gates-and-baselines/SKILL.md +149 -0
  189. package/.agents/skills/core/idea-refinement/SKILL.md +8 -14
  190. package/.agents/skills/core/qa-coverage-mapping/SKILL.md +7 -7
  191. package/.agents/skills/core/scope-triage/SKILL.md +28 -172
  192. package/.agents/skills/skills.index.json +8 -418
  193. package/.agents/starter-agentrc.json +0 -5
  194. package/.agents/templates/agent-protocol.md +9 -10
  195. package/.agents/workflows/audit-architecture.md +3 -3
  196. package/.agents/workflows/audit-clean-code.md +3 -3
  197. package/.agents/workflows/audit-dependencies.md +3 -3
  198. package/.agents/workflows/audit-devops.md +3 -3
  199. package/.agents/workflows/audit-documentation.md +5 -5
  200. package/.agents/workflows/audit-lighthouse.md +3 -3
  201. package/.agents/workflows/audit-navigability.md +3 -2
  202. package/.agents/workflows/audit-performance.md +3 -3
  203. package/.agents/workflows/audit-privacy.md +3 -3
  204. package/.agents/workflows/audit-quality.md +3 -3
  205. package/.agents/workflows/audit-security.md +3 -3
  206. package/.agents/workflows/audit-seo.md +3 -3
  207. package/.agents/workflows/audit-sre.md +3 -3
  208. package/.agents/workflows/audit-to-stories.md +20 -20
  209. package/.agents/workflows/audit-ux-ui.md +3 -3
  210. package/.agents/workflows/deliver.md +122 -131
  211. package/.agents/workflows/git-cleanup.md +3 -4
  212. package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
  213. package/.agents/workflows/helpers/acceptance-self-eval.md +52 -40
  214. package/.agents/workflows/helpers/code-review.md +70 -193
  215. package/.agents/workflows/helpers/{single-story-deliver-reference.md → deliver-story-reference.md} +12 -14
  216. package/.agents/workflows/helpers/{single-story-deliver.md → deliver-story.md} +113 -139
  217. package/.agents/workflows/helpers/diagnose.md +10 -10
  218. package/.agents/workflows/helpers/mandrel-sync-config.md +1 -1
  219. package/.agents/workflows/helpers/parallel-tooling.md +1 -1
  220. package/.agents/workflows/helpers/signals.md +16 -16
  221. package/.agents/workflows/helpers/worktree-lifecycle.md +48 -64
  222. package/.agents/workflows/mandrel-update.md +3 -2
  223. package/.agents/workflows/plan.md +112 -145
  224. package/.agents/workflows/qa-assist.md +24 -30
  225. package/.agents/workflows/qa-explore.md +29 -38
  226. package/.agents/workflows/qa-run.md +2 -2
  227. package/README.md +9 -8
  228. package/docs/CHANGELOG.md +46 -0
  229. package/lib/cli/registry.js +95 -0
  230. package/lib/migrations/index.js +6 -5
  231. package/package.json +5 -3
  232. package/.agents/personas/architect.md +0 -113
  233. package/.agents/personas/devops-engineer.md +0 -38
  234. package/.agents/personas/engineer-mobile.md +0 -120
  235. package/.agents/personas/engineer-web.md +0 -111
  236. package/.agents/personas/engineer.md +0 -119
  237. package/.agents/personas/product.md +0 -94
  238. package/.agents/personas/project-manager.md +0 -114
  239. package/.agents/personas/qa-engineer.md +0 -95
  240. package/.agents/personas/refactorer.md +0 -113
  241. package/.agents/personas/security-engineer.md +0 -112
  242. package/.agents/personas/sre.md +0 -86
  243. package/.agents/personas/technical-writer.md +0 -101
  244. package/.agents/personas/ux-designer.md +0 -95
  245. package/.agents/schemas/dispatch-manifest.json +0 -232
  246. package/.agents/schemas/epic-spec.schema.json +0 -153
  247. package/.agents/scripts/acceptance-spec-reconciler.js +0 -642
  248. package/.agents/scripts/dispatcher.js +0 -295
  249. package/.agents/scripts/epic-audit-prepare.js +0 -497
  250. package/.agents/scripts/epic-audit-recheck.js +0 -274
  251. package/.agents/scripts/epic-deliver-note-intervention.js +0 -192
  252. package/.agents/scripts/epic-deliver-preflight.js +0 -462
  253. package/.agents/scripts/epic-deliver-prepare.js +0 -590
  254. package/.agents/scripts/epic-execute-record-wave.js +0 -449
  255. package/.agents/scripts/epic-plan-clarity.js +0 -211
  256. package/.agents/scripts/epic-plan-decompose.js +0 -54
  257. package/.agents/scripts/epic-plan-healthcheck.js +0 -581
  258. package/.agents/scripts/epic-plan-spec.js +0 -64
  259. package/.agents/scripts/epic-reconcile.js +0 -625
  260. package/.agents/scripts/lib/baseline-snapshot.js +0 -979
  261. package/.agents/scripts/lib/checks/epic-merge-lock-stale.js +0 -54
  262. package/.agents/scripts/lib/checks/stale-origin-epic.js +0 -49
  263. package/.agents/scripts/lib/config/lifecycle.js +0 -40
  264. package/.agents/scripts/lib/config/preflight.js +0 -58
  265. package/.agents/scripts/lib/config/retro.js +0 -77
  266. package/.agents/scripts/lib/epic-merge-lock.js +0 -322
  267. package/.agents/scripts/lib/epic-plan-clarity.js +0 -181
  268. package/.agents/scripts/lib/epic-plan-ideation.js +0 -261
  269. package/.agents/scripts/lib/orchestration/context-hydration-engine.js +0 -660
  270. package/.agents/scripts/lib/orchestration/dispatch-engine.js +0 -134
  271. package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +0 -183
  272. package/.agents/scripts/lib/orchestration/epic-cleanup.js +0 -801
  273. package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +0 -310
  274. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/context.js +0 -163
  275. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +0 -140
  276. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +0 -64
  277. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +0 -72
  278. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist-helpers.js +0 -156
  279. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/persist.js +0 -345
  280. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/planning-artifacts.js +0 -41
  281. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/reconcile-spawn.js +0 -86
  282. package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +0 -391
  283. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/drain.js +0 -94
  284. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +0 -236
  285. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +0 -307
  286. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/spec-freshness.js +0 -117
  287. package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +0 -117
  288. package/.agents/scripts/lib/orchestration/epic-run-state-store.js +0 -388
  289. package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +0 -186
  290. package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +0 -50
  291. package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +0 -129
  292. package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +0 -103
  293. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +0 -267
  294. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +0 -210
  295. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +0 -238
  296. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/_bullet-format.js +0 -32
  297. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/component-drift.js +0 -203
  298. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/crap-drift.js +0 -227
  299. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/maintainability-drift.js +0 -117
  300. package/.agents/scripts/lib/orchestration/epic-runner/progress-signals/stalled-worktree.js +0 -37
  301. package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +0 -127
  302. package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +0 -276
  303. package/.agents/scripts/lib/orchestration/epic-runner/wave-scheduler.js +0 -66
  304. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +0 -789
  305. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +0 -676
  306. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-discriminator.js +0 -389
  307. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-format.js +0 -230
  308. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +0 -361
  309. package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +0 -306
  310. package/.agents/scripts/lib/orchestration/finalize/post-handoff-comment.js +0 -489
  311. package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +0 -88
  312. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +0 -147
  313. package/.agents/scripts/lib/orchestration/lifecycle/listeners/acceptance-reconciler.js +0 -384
  314. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +0 -501
  315. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +0 -984
  316. package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +0 -264
  317. package/.agents/scripts/lib/orchestration/lifecycle/listeners/checkpoint-pointer-writer.js +0 -278
  318. package/.agents/scripts/lib/orchestration/lifecycle/listeners/cleaner.js +0 -355
  319. package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +0 -673
  320. package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +0 -378
  321. package/.agents/scripts/lib/orchestration/lifecycle/listeners/intervention-recorder.js +0 -140
  322. package/.agents/scripts/lib/orchestration/lifecycle/listeners/label-transitioner.js +0 -144
  323. package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +0 -174
  324. package/.agents/scripts/lib/orchestration/manifest-builder.js +0 -222
  325. package/.agents/scripts/lib/orchestration/plan-persist/amend.js +0 -359
  326. package/.agents/scripts/lib/orchestration/plan-persist/delivery-mode.js +0 -127
  327. package/.agents/scripts/lib/orchestration/post-merge-pipeline.js +0 -205
  328. package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +0 -152
  329. package/.agents/scripts/lib/orchestration/retro/phases/checks.js +0 -94
  330. package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +0 -571
  331. package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +0 -450
  332. package/.agents/scripts/lib/orchestration/retro/phases/post-and-mirror.js +0 -191
  333. package/.agents/scripts/lib/orchestration/retro-heuristics.js +0 -57
  334. package/.agents/scripts/lib/orchestration/retro-runner.js +0 -197
  335. package/.agents/scripts/lib/orchestration/skill-capsule-loader.js +0 -109
  336. package/.agents/scripts/lib/orchestration/spec-renderer.js +0 -447
  337. package/.agents/scripts/lib/orchestration/story-close/auto-refresh-runner.js +0 -747
  338. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/gate-failure.js +0 -211
  339. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/pre-merge-attribution.js +0 -158
  340. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/refresh-commit.js +0 -446
  341. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/regression-projection.js +0 -297
  342. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution/phases/scope-discovery.js +0 -48
  343. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution-wiring.js +0 -67
  344. package/.agents/scripts/lib/orchestration/story-close/baseline-attribution.js +0 -161
  345. package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +0 -117
  346. package/.agents/scripts/lib/orchestration/story-close/cd-out-guard.js +0 -86
  347. package/.agents/scripts/lib/orchestration/story-close/cleanup-reconciler.js +0 -147
  348. package/.agents/scripts/lib/orchestration/story-close/close-inputs.js +0 -142
  349. package/.agents/scripts/lib/orchestration/story-close/comment-bodies.js +0 -62
  350. package/.agents/scripts/lib/orchestration/story-close/merge-runner.js +0 -658
  351. package/.agents/scripts/lib/orchestration/story-close/merge-subject.js +0 -198
  352. package/.agents/scripts/lib/orchestration/story-close/phases/branch-restore.js +0 -105
  353. package/.agents/scripts/lib/orchestration/story-close/phases/close.js +0 -222
  354. package/.agents/scripts/lib/orchestration/story-close/phases/gates.js +0 -292
  355. package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +0 -270
  356. package/.agents/scripts/lib/orchestration/story-close/phases/preflight.js +0 -110
  357. package/.agents/scripts/lib/orchestration/story-close/phases/refresh.js +0 -86
  358. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked-emitter.js +0 -112
  359. package/.agents/scripts/lib/orchestration/story-close/phases/timeout-blocked.js +0 -157
  360. package/.agents/scripts/lib/orchestration/story-close/post-merge-close.js +0 -421
  361. package/.agents/scripts/lib/orchestration/story-close/pre-merge-validation.js +0 -301
  362. package/.agents/scripts/lib/orchestration/story-close/shared-checkout-guard.js +0 -163
  363. package/.agents/scripts/lib/orchestration/story-close-recovery.js +0 -690
  364. package/.agents/scripts/lib/orchestration/wave-marker.js +0 -28
  365. package/.agents/scripts/lib/orchestration/wave-record-io.js +0 -218
  366. package/.agents/scripts/lib/orchestration/wave-record-notifications.js +0 -145
  367. package/.agents/scripts/lib/orchestration/wave-record-projection.js +0 -212
  368. package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +0 -111
  369. package/.agents/scripts/lib/presentation/manifest-builder.js +0 -239
  370. package/.agents/scripts/lib/presentation/manifest-formatter.js +0 -242
  371. package/.agents/scripts/lib/presentation/manifest-helpers.js +0 -213
  372. package/.agents/scripts/lib/presentation/manifest-persistence.js +0 -261
  373. package/.agents/scripts/lib/presentation/manifest-procedures.js +0 -55
  374. package/.agents/scripts/lib/presentation/manifest-render-waves.js +0 -306
  375. package/.agents/scripts/lib/presentation/manifest-renderer.js +0 -188
  376. package/.agents/scripts/lib/presentation/manifest-story-views.js +0 -110
  377. package/.agents/scripts/lib/push-epic-retry.js +0 -209
  378. package/.agents/scripts/lib/spec/index.js +0 -36
  379. package/.agents/scripts/lib/spec/loader.js +0 -425
  380. package/.agents/scripts/lib/spec/state.js +0 -208
  381. package/.agents/scripts/lib/story-init/blocker-validator.js +0 -68
  382. package/.agents/scripts/lib/story-init/branch-initializer.js +0 -408
  383. package/.agents/scripts/lib/story-init/context-resolver.js +0 -92
  384. package/.agents/scripts/lib/story-init/donor-precheck.js +0 -207
  385. package/.agents/scripts/lib/story-init/state-transitioner.js +0 -80
  386. package/.agents/scripts/lib/story-init/task-graph-builder.js +0 -124
  387. package/.agents/scripts/lib/story-init/transition-summary.js +0 -34
  388. package/.agents/scripts/lib/test-reserved-epic-temp-ids.js +0 -35
  389. package/.agents/scripts/lib/wave-runner/tick.js +0 -754
  390. package/.agents/scripts/lib/wave-runner/wave-runner-error.js +0 -20
  391. package/.agents/scripts/lifecycle-emit-story-dispatch.js +0 -194
  392. package/.agents/scripts/lifecycle-emit.js +0 -510
  393. package/.agents/scripts/plan-critics.js +0 -199
  394. package/.agents/scripts/retro-run.js +0 -218
  395. package/.agents/scripts/standalone-feedback-rollup.js +0 -188
  396. package/.agents/scripts/story-close.js +0 -294
  397. package/.agents/scripts/story-init.js +0 -599
  398. package/.agents/scripts/story-phase.js +0 -369
  399. package/.agents/scripts/wave-tick.js +0 -335
  400. package/.agents/skills/core/baseline-refresh/SKILL.md +0 -181
  401. package/.agents/skills/core/ci-cd-and-automation/SKILL.md +0 -274
  402. package/.agents/skills/core/ci-cd-and-automation/examples.md +0 -211
  403. package/.agents/skills/core/code-simplification/SKILL.md +0 -389
  404. package/.agents/skills/core/context-engineering/SKILL.md +0 -309
  405. package/.agents/skills/core/context-engineering/examples.md +0 -58
  406. package/.agents/skills/core/deprecation-and-migration/SKILL.md +0 -250
  407. package/.agents/skills/core/epic-plan-consolidate/SKILL.md +0 -172
  408. package/.agents/skills/core/epic-plan-consolidate/examples.md +0 -51
  409. package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +0 -441
  410. package/.agents/skills/core/epic-plan-decompose-author/examples.md +0 -47
  411. package/.agents/skills/core/epic-plan-premortem/SKILL.md +0 -146
  412. package/.agents/skills/core/epic-plan-premortem/examples.md +0 -53
  413. package/.agents/skills/core/epic-plan-spec-author/SKILL.md +0 -413
  414. package/.agents/skills/core/epic-plan-spec-author/examples.md +0 -91
  415. package/.agents/skills/core/frontend-ui-engineering/SKILL.md +0 -357
  416. package/.agents/skills/core/hydrate-context/SKILL.md +0 -123
  417. package/.agents/skills/core/idea-refinement/examples.md +0 -437
  418. package/.agents/skills/core/idea-refinement/frameworks.md +0 -135
  419. package/.agents/skills/core/incremental-implementation/SKILL.md +0 -271
  420. package/.agents/skills/core/introducing-a-baseline-gate/SKILL.md +0 -213
  421. package/.agents/skills/core/knowledge-transfer/SKILL.md +0 -180
  422. package/.agents/skills/core/mutation-survivor-remediation/SKILL.md +0 -117
  423. package/.agents/skills/core/performance-optimization/SKILL.md +0 -314
  424. package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +0 -277
  425. package/.agents/skills/core/property-based-testing/SKILL.md +0 -148
  426. package/.agents/skills/core/refactoring-discipline/SKILL.md +0 -111
  427. package/.agents/skills/core/shipping-and-launch/SKILL.md +0 -328
  428. package/.agents/skills/core/spec-driven-development/SKILL.md +0 -252
  429. package/.agents/skills/core/test-driven-development/SKILL.md +0 -475
  430. package/.agents/skills/core/using-agent-skills/SKILL.md +0 -232
  431. package/.agents/skills/stack/architecture/monorepo-path-strategist/SKILL.md +0 -31
  432. package/.agents/skills/stack/architecture/structured-output-zod/SKILL.md +0 -51
  433. package/.agents/skills/stack/architecture/subagent-orchestration/SKILL.md +0 -76
  434. package/.agents/skills/stack/backend/cloudflare-hono-architect/SKILL.md +0 -31
  435. package/.agents/skills/stack/backend/cloudflare-hono-architect/examples/route-template.ts +0 -33
  436. package/.agents/skills/stack/backend/cloudflare-queue-manager/SKILL.md +0 -31
  437. package/.agents/skills/stack/backend/cloudflare-workers/SKILL.md +0 -51
  438. package/.agents/skills/stack/backend/highlevel-crm/SKILL.md +0 -54
  439. package/.agents/skills/stack/backend/sqlite-drizzle-expert/SKILL.md +0 -29
  440. package/.agents/skills/stack/backend/sqlite-drizzle-expert/examples/schema-template.ts +0 -30
  441. package/.agents/skills/stack/backend/stripe-integration/SKILL.md +0 -57
  442. package/.agents/skills/stack/backend/stripe-integration/scripts/listen-stripe.sh +0 -9
  443. package/.agents/skills/stack/backend/turso-sqlite/SKILL.md +0 -48
  444. package/.agents/skills/stack/frontend/astro/SKILL.md +0 -62
  445. package/.agents/skills/stack/frontend/astro-react-island-strategist/SKILL.md +0 -30
  446. package/.agents/skills/stack/frontend/expo-react-native-developer/SKILL.md +0 -29
  447. package/.agents/skills/stack/frontend/google-analytics-v4/SKILL.md +0 -50
  448. package/.agents/skills/stack/frontend/tailwind-v4/SKILL.md +0 -58
  449. package/.agents/skills/stack/frontend/ui-accessibility-engineer/SKILL.md +0 -34
  450. package/.agents/skills/stack/qa/audit-accessibility/SKILL.md +0 -51
  451. package/.agents/skills/stack/qa/lighthouse-baseline/SKILL.md +0 -199
  452. package/.agents/skills/stack/security/backend-security-patterns/SKILL.md +0 -68
  453. package/.agents/workflows/helpers/deliver-epic-reference.md +0 -534
  454. package/.agents/workflows/helpers/deliver-epic.md +0 -955
  455. package/.agents/workflows/helpers/deliver-stories.md +0 -440
  456. package/.agents/workflows/helpers/epic-audit.md +0 -189
  457. package/.agents/workflows/helpers/epic-deliver-story.md +0 -427
  458. package/.agents/workflows/helpers/epic-testing.md +0 -125
  459. package/.agents/workflows/helpers/plan-epic-reference.md +0 -160
  460. package/.agents/workflows/helpers/plan-epic.md +0 -351
  461. package/.agents/workflows/helpers/plan-story.md +0 -251
  462. package/.agents/workflows/helpers/scope-triage-gate.md +0 -108
  463. /package/.agents/scripts/lib/orchestration/{epic-plan-spec/phases → planning}/spec-authoring-grounding.js +0 -0
@@ -1,440 +0,0 @@
1
- ---
2
- description: >-
3
- Deliver one or more standalone Stories end-to-end. Accepts 1+ Story IDs,
4
- builds a dependency DAG, asks the operator to confirm it, then drives a
5
- continuous ready-set loop via `stories-wave-tick.js` (the shared
6
- `selectReadySet` core) — dispatching each Story the instant its own deps
7
- are done, under one global concurrency cap and one file-overlap guard,
8
- each dispatch delegating to `helpers/single-story-deliver`. Stories
9
- without an `Epic: #N` reference only; Epic-attached Stories use `/deliver`.
10
- ---
11
-
12
- # helpers/deliver-stories — multi-Story delivery path (invoked by /deliver)
13
-
14
- ## Overview
15
-
16
- This helper is the **standalone multi-Story delivery path** behind
17
- `/deliver`. The router delegates to it whenever the supplied IDs include
18
- standalone Stories — either as the sole route (Story-only input) or as the
19
- **standalone segment** of a mixed segment plan (run first, before any Epic
20
- segments; see [`deliver.md`](../deliver.md)). It takes one or more Story
21
- IDs, builds a dependency DAG, optionally confirms it with the operator, and
22
- then drives a **continuous ready-set loop**: it dispatches each Story the
23
- instant its **own** dependencies are done — there is no wave barrier where a
24
- whole group must drain before the next opens — capped by one global
25
- concurrency limit and guarded by one file-overlap rule, the same scheduling
26
- core (`lib/wave-runner/ready-set.js#selectReadySet`) the Epic path uses.
27
-
28
- ```text
29
- /deliver 101 102 103
30
- → Phase 0 — Validate input & build DAG
31
- → Phase 1 — stories-wave-tick.js → DAG sanity + operator confirmation
32
- → Phase 2 — continuous ready-set loop:
33
- repeat until every Story is done:
34
- stories-wave-tick.js --dag … --done <doneIds> --in-flight <n>
35
- → ready[] = Stories dispatchable on this beat
36
- Agent tool × ready.length parallel calls (≤ concurrencyCap − inFlight)
37
- helpers/single-story-deliver <storyId>
38
- as each child returns done, add its id to <doneIds> and re-tick
39
- → Phase 3 — Summary
40
- ```
41
-
42
- **When to use `/deliver` vs. other commands:**
43
-
44
- | Scenario | Command |
45
- | --- | --- |
46
- | 1+ standalone Stories (no `Epic: #N` in body) | `/deliver <id> [<id>...]` |
47
- | Exactly one standalone Story (lighter path) | `/single-story-deliver <id>` |
48
- | Epic-attached Stories (have `Epic: #N`) | `/deliver <epicId>` |
49
- | Mixed Epics + standalone Stories | `/deliver <ids...>` — the router composes a sequential segment plan; this helper delivers the standalone segment first |
50
-
51
- This helper **refuses** Stories that carry an `Epic: #N` reference in
52
- their body. Those Stories belong to an Epic's dispatch manifest and must flow
53
- through `/deliver <epicId>`. Use `/single-story-deliver` for a single
54
- Epic-free Story when you want the leaner one-story path without the
55
- ready-set scheduling loop.
56
-
57
- > **Concurrency cap.** The cap is resolved **deterministically in code** by
58
- > `stories-wave-tick.js` — the same `resolveConfig` + `getRunners` seam
59
- > `/deliver` uses — and emitted as the `concurrencyCap` field on the
60
- > `stories-ready-set` envelope on **every** beat. The default is 3; override
61
- > persistently via `delivery.deliverRunner.concurrencyCap` in `.agentrc.json`
62
- > (a `.agentrc.local.json` override is honored) or per-run via the
63
- > `--concurrency` flag below. The cap is global, not per-wave: the core caps
64
- > each beat's `ready[]` at `concurrencyCap − inFlight`, so the workflow simply
65
- > dispatches every id in `ready[]` — do **not** re-read or merge config
66
- > yourself, and do **not** re-throttle the returned set.
67
-
68
- ---
69
-
70
- ## Arguments
71
-
72
- ```text
73
- /deliver <storyId> [<storyId> ...] [--dep <fromId>:<toId> ...] [--yes] [--concurrency <n>]
74
- ```
75
-
76
- - `storyId` — One or more GitHub issue numbers carrying `type::story` and
77
- **no** `Epic: #N` reference. At least one is required.
78
- - `--dep <fromId>:<toId>` — Declare an explicit dependency edge: `<fromId>`
79
- must complete before `<toId>` runs. Repeat for each edge. When omitted,
80
- all Stories are treated as independent (every Story is dispatchable on the
81
- first beat) unless `blocked by #N` references between the supplied IDs are
82
- detected automatically.
83
- - `--yes` — Skip the operator confirmation in Phase 1 and proceed
84
- immediately. Safe for scripted / sub-agent invocations.
85
- - `--concurrency <n>` — Override the global concurrency cap for this run
86
- only. Passed through to `stories-wave-tick.js` on every beat, which validates
87
- it (must be a positive integer) and reflects it in the emitted
88
- `concurrencyCap` field. When omitted, the cap is resolved from
89
- `delivery.deliverRunner.concurrencyCap` (default 3).
90
-
91
- ---
92
-
93
- ## Phase 0 — Validate input and build DAG
94
-
95
- For each supplied Story ID:
96
-
97
- 1. Confirm the issue exists and carries the `type::story` label.
98
- 2. Confirm the issue body does **not** contain an `Epic: #N` reference. If
99
- it does, STOP and tell the operator to use `/deliver <epicId>`
100
- instead.
101
- 3. Collect `blocked by #N` references between the supplied Story IDs.
102
- References to Story IDs outside the supplied set are advisory warnings
103
- only — they do not block delivery.
104
-
105
- Construct the DAG input array:
106
-
107
- ```json
108
- [
109
- { "id": 101, "dependsOn": [] },
110
- { "id": 102, "dependsOn": [101] },
111
- { "id": 103, "dependsOn": [] }
112
- ]
113
- ```
114
-
115
- `dependsOn` is the union of:
116
-
117
- - `blocked by #N` edges where `N` is in the supplied set.
118
- - Explicit `--dep` edges.
119
-
120
- ---
121
-
122
- ## Phase 1 — DAG sanity check and operator confirmation
123
-
124
- ### 1a. Sanity-check the DAG (first beat, nothing done yet)
125
-
126
- ```bash
127
- node .agents/scripts/stories-wave-tick.js --dag '<dag-json>'
128
- # with a per-run cap override:
129
- node .agents/scripts/stories-wave-tick.js --dag '<dag-json>' --concurrency <n>
130
- ```
131
-
132
- When the operator passed `--concurrency <n>` to `/deliver`, forward it
133
- verbatim to `stories-wave-tick.js`. The script resolves the cap from config
134
- (`delivery.deliverRunner.concurrencyCap`, default 3) and the override wins for
135
- that run.
136
-
137
- With no `--done` / `--in-flight` (the first beat), stdout is one JSON
138
- envelope describing the Stories dispatchable **right now** — the roots:
139
-
140
- ```json
141
- {
142
- "kind": "stories-ready-set",
143
- "ready": [101, 103],
144
- "totalStories": 3,
145
- "concurrencyCap": 3,
146
- "inFlight": 0,
147
- "cycleError": null
148
- }
149
- ```
150
-
151
- - **`cycleError` non-null** → STOP. Report the cycle to the operator and
152
- exit. The Story set cannot be delivered until the circular dependency is
153
- resolved.
154
- - **`totalStories === 0`** → STOP. Zero Stories resolved — report and exit.
155
- - **`ready` empty with `totalStories > 0` on the first beat** → STOP. Every
156
- Story is gated behind a dependency outside the supplied set; report and
157
- exit (the operator must include the missing prerequisites).
158
- - **`concurrencyCap`** is the resolved global cap. Phase 2 re-reads it from
159
- each beat's envelope and never re-derives it from config.
160
- - An invalid `--concurrency` / `--in-flight` / `--done` value makes the
161
- script exit non-zero with an `inputError` → STOP and surface the message.
162
-
163
- This first call is a **sanity gate**, not the schedule: Phase 2 re-ticks
164
- continuously as Stories complete. The envelope no longer enumerates future
165
- waves — ordering emerges beat by beat from the live `--done` set.
166
-
167
- ### 1b. Operator confirmation (skipped with `--yes` or for single-story runs)
168
-
169
- **Auto-skip rule (Story #3302):** When `totalStories === 1`, skip the
170
- confirmation prompt automatically and proceed. A single-Story run has no
171
- ordering ambiguity and no meaningful operator decision to make — the run
172
- *is* "deliver this one Story". Prompting for confirmation would just be
173
- friction.
174
-
175
- Otherwise, present the dependency DAG to the operator in a readable table —
176
- the roots dispatch immediately, dependents unlock as their prerequisites
177
- complete:
178
-
179
- ```text
180
- Delivery plan — 3 Stories (continuous, dependency-driven)
181
- Ready now: #101 "<title>", #103 "<title>"
182
- Unlocks after its deps complete: #102 "<title>" (needs #101)
183
-
184
- Proceed? [Y/n]
185
- ```
186
-
187
- Wait for the operator to confirm before dispatching. When the operator
188
- types `n` or `N`, abort cleanly with a summary of the plan that was
189
- declined. When `--yes` was passed, skip this step and proceed regardless
190
- of Story count.
191
-
192
- ---
193
-
194
- ## Phase 2 — Continuous ready-set loop
195
-
196
- Drive a single loop, re-ticking after every child returns. Maintain two
197
- pieces of state across the loop:
198
-
199
- - **`doneIds`** — the set of Story IDs that have returned `status: 'done'`
200
- (start empty).
201
- - **`inFlight`** — the count of Stories dispatched but not yet returned
202
- (start at 0).
203
-
204
- Each iteration (one **beat**):
205
-
206
- ### 2a. Tick the ready set
207
-
208
- ```bash
209
- node .agents/scripts/stories-wave-tick.js --dag '<dag-json>' \
210
- --done '<comma-separated doneIds>' --in-flight <inFlight> [--concurrency <n>]
211
- ```
212
-
213
- The envelope's `ready[]` is the set of Stories whose **own** dependencies
214
- are all in `doneIds` and that fit the remaining capacity
215
- (`concurrencyCap − inFlight`) without a file-overlap collision — the core
216
- has already applied the global cap and the overlap guard, so the list is
217
- safe to dispatch verbatim. **Termination:** when `ready` is empty **and**
218
- `inFlight === 0` **and** `doneIds` covers every Story, the run is complete →
219
- go to Phase 3. When `ready` is empty but `inFlight > 0`, dispatch nothing
220
- and wait for an in-flight child to return (a dependent is waiting on it).
221
-
222
- ### 2b. Fan out per-Story Agent calls
223
-
224
- Emit **one `Agent` tool call per Story ID in `ready[]`**, all with
225
- `run_in_background: true`. The list is already capped, so dispatch the whole
226
- of `ready[]` and increment `inFlight` by `ready.length`. Do **not** re-derive
227
- or re-throttle the cap here; the core sized `ready[]` for you.
228
-
229
- Each Agent call:
230
-
231
- 1. Names the Story ID and instructs the child to invoke
232
- [`helpers/single-story-deliver`](single-story-deliver.md)
233
- for that Story.
234
- 2. States the **return contract** (see § 2c) and the **no-park rule**: the
235
- child MUST drive the close → CI-watch → merge-confirm → `agent::done`
236
- sequence to a terminal state *within its own turn* and end **only** by
237
- returning the § 2c JSON object. The auto-merge wait is an
238
- internally-blocking step (`pr-watch-with-update.js` blocks the turn), **not**
239
- a reason to suspend and hand back. A child that ends its turn with
240
- free-form prose and an unconfirmed merge (e.g. "I'll wait for the
241
- background watch task…") has violated the contract — the loop cannot
242
- advance, and the Story strands at `agent::closing` (the Story #1553 /
243
- PR #1554 failure mode). There is no "pending" return status: the child
244
- returns `done` (merge confirmed), `blocked` (transitioned + friction
245
- posted), or `failed`.
246
- 3. Reminds the child of the **non-interactive contract**: no clarifying
247
- questions — if stuck, transition to `agent::blocked`, post a
248
- `friction` comment, and exit non-zero.
249
- 4. Requests the child suppress per-phase chat relay and include its
250
- **terminal** `renderedBody` in the JSON return.
251
-
252
- Use `subagent_type: general-purpose`.
253
-
254
- ### 2b′. Collect each return and re-tick
255
-
256
- As each child returns, decrement `inFlight` by 1 and apply its outcome
257
- (§ 2d). When a child returns `done`, add its id to `doneIds`. Then **re-tick
258
- immediately** (§ 2a) so a newly-unblocked Story dispatches the instant its
259
- last dependency clears — do not wait for the whole batch to drain. This is
260
- the no-false-barrier behavior: an unrelated still-running Story never holds
261
- back a Story whose own deps are already done.
262
-
263
- ### 2c. Per-Story return contract
264
-
265
- Each child ends its turn by returning **exactly one** JSON object — never
266
- free-form prose:
267
-
268
- ```json
269
- {
270
- "storyId": <number>,
271
- "status": "done" | "blocked" | "failed",
272
- "phase": "init|implementing|closing|blocked|done",
273
- "branchDeleted": <boolean>,
274
- "blockerCommentId": <string|null>,
275
- "detail": "<one-liner>",
276
- "renderedBody": "<terminal story body>"
277
- }
278
- ```
279
-
280
- The status enum is **closed** — `done`, `blocked`, or `failed`. There is no
281
- "pending" / "waiting" status, because the close-phase auto-merge wait is
282
- **not** a returnable suspension: the child blocks on `pr-watch-with-update.js`
283
- *inside its own turn*, confirms the merge, flips `agent::done`, and only then
284
- returns `status: "done"`. A child that returns prose instead — parking on the
285
- CI wait with an unconfirmed merge — breaks the loop's ability to advance
286
- and leaves the Story at `agent::closing` (Story #1553 / PR #1554). The
287
- single-homed restatement of this no-park rule for the child's own perspective
288
- is [`single-story-deliver.md` § Step 7](single-story-deliver.md#return-contract).
289
-
290
- ### 2d. Per-return outcome handling
291
-
292
- As each child returns (before the next re-tick):
293
-
294
- - **`status === 'done'`** → Add its id to `doneIds` and re-tick. Print a
295
- one-line per-Story complete summary.
296
- - **`status === 'blocked'`** → STOP dispatching new Stories. Drain the
297
- Stories still in flight (let them return), then post a summary of blocked
298
- Stories and their `blockerCommentId` references. Do not dispatch any
299
- further beat. Wait for the operator to resolve each blocker and re-run
300
- `/deliver` with the same set (already-done Stories will short-circuit
301
- because `single-story-close.js` is idempotent).
302
- - **`status === 'failed'`** → STOP dispatching new Stories, drain the
303
- in-flight set, and report the failures. The operator must fix the failing
304
- Stories before re-running.
305
-
306
- ---
307
-
308
- ## Phase 3 — Summary
309
-
310
- Print a final run summary listing every delivered Story in completion order:
311
-
312
- ```text
313
- /deliver — 3 Stories delivered (continuous, dependency-driven)
314
-
315
- #101 ✅ done, #103 ✅ done (dispatched first — roots)
316
- #102 ✅ done (after #101 cleared)
317
-
318
- All Stories delivered. PRs opened, auto-merge armed. CI will merge each
319
- PR when checks pass; each child then confirms the merge and flips its
320
- Story to `agent::done` (Story #3385 — until the merge confirms, a Story
321
- rests at `agent::closing` with its issue OPEN).
322
- ```
323
-
324
- Then **fast-forward `main` yourself** — do not instruct the operator to run it
325
- after the last merge. The delivering flow owns bringing the local base branch
326
- up to whatever has merged so far:
327
-
328
- ```bash
329
- node .agents/scripts/git-cleanup.js --fast-forward-main --execute --yes
330
- ```
331
-
332
- This runs only the fast-forward-main phase (`git fetch origin main` →
333
- `git merge --ff-only`); it is idempotent and a no-op when `main` is already
334
- current, so it is safe to run even while some PRs are still queued in
335
- auto-merge. Report its one-line result in the summary. Merged Story branches
336
- themselves are reaped by the boot sweep at the next `/plan` / `/deliver` boot —
337
- see [`.agents/rules/git-conventions.md` § Local checkout hygiene](../../rules/git-conventions.md).
338
-
339
- ### Feedback rollup
340
-
341
- Then run the **end-of-run feedback rollup** over the delivered Story set so
342
- the write-only standalone signals tree finally has a consumer. Each per-Story
343
- sub-agent appends `friction` records to its standalone stream
344
- (`temp/standalone/stories/story-<sid>/signals.ndjson`); the rollup scans those
345
- streams and aggregates friction by category:
346
-
347
- ```bash
348
- node .agents/scripts/standalone-feedback-rollup.js --stories <all delivered story ids, comma-separated>
349
- ```
350
-
351
- The CLI prints one JSON object
352
- (`{ kind, stories, totalFriction, byCategory, perStory }`) and **always exits
353
- 0** — missing or empty streams degrade to an empty summary, so this beat never
354
- fails the run. Surface `totalFriction` and the `byCategory` totals in the run
355
- summary so the operator sees where friction clustered across the delivery:
356
-
357
- ```text
358
- Feedback rollup — 4 friction signals across 3 Stories
359
- Execution Error: 2, Tool Limitation: 1, Missing Skill: 1
360
- ```
361
-
362
- When `totalFriction` is 0 (or every stream was missing), report a single
363
- "no friction signals recorded" line and move on — it is not an error.
364
-
365
- When some Stories are blocked or failed, list them explicitly with the
366
- `blockerCommentId` or failure detail so the operator knows where to look.
367
-
368
- ---
369
-
370
- ## Opt-in post-green refactor stage (`delivery.refactorStage`)
371
-
372
- When `delivery.refactorStage.enabled` is `true` in `.agentrc.json`, each
373
- per-Story worker runs an **advisory** post-green refactor pass after the
374
- Story's suite is green and the close-validation gates already pass — and
375
- **before** close. The stage is **strictly opt-in and default-OFF**: when the
376
- key is unset or `false`, story-deliver behaves exactly as documented above
377
- and this stage is skipped entirely.
378
-
379
- The stage adopts the [`refactorer`](../../personas/refactorer.md) persona and the
380
- [`core/refactoring-discipline`](../../skills/core/refactoring-discipline/SKILL.md)
381
- skill to drive a behaviour-preserving pass that lowers CRAP and removes
382
- duplication on the files the Story already touched:
383
-
384
- - **Post-green only.** It runs after the suite is green and the gates pass —
385
- never from red, and never to make a failing test pass.
386
- - **Behaviour-preserving.** Existing tests MUST keep passing without
387
- modification; if a test had to change, the change was a behaviour change and
388
- must be reverted.
389
- - **Advisory, not a gate.** This stage does **not** introduce a new
390
- close-validation gate and does **not** change the semantics of the existing
391
- [close-validation](../../scripts/lib/close-validation/runner.js) chain (typecheck,
392
- lint, test, format, maintainability, coverage, crap). The canonical gates
393
- remain the single source of pass/fail at close; the refactor stage only adds
394
- an extra behaviour-preserving cleanup commit when enabled.
395
-
396
- > **Default-OFF guarantee.** Consumers who do not set
397
- > `delivery.refactorStage.enabled` (or set it to `false`) see no change in
398
- > delivery behaviour — no extra stage, no new gate, identical close semantics.
399
-
400
- ---
401
-
402
- ## Idempotence
403
-
404
- `/single-story-deliver` is idempotent at every phase:
405
- `single-story-init.js` reuses an existing worktree and
406
- `single-story-close.js` short-circuits when the Story is already closed.
407
- Re-running `/deliver` with the same Story set after a partial
408
- failure is safe — already-done Stories produce no-op outcomes; only the
409
- blocked or unstarted Stories execute.
410
-
411
- ---
412
-
413
- ## Constraints
414
-
415
- - **Never** pass Epic-attached Stories to this command. Detect `Epic: #N`
416
- in Phase 0 and STOP.
417
- - **Never** dispatch a new beat once any Story has returned `blocked` or
418
- `failed` — drain the in-flight set and stop.
419
- - **Never** exceed the resolved `concurrencyCap` (emitted by
420
- `stories-wave-tick.js` on every beat) parallel Agent calls at any moment.
421
- The core caps each beat's `ready[]` at `concurrencyCap − inFlight`;
422
- dispatch the whole list and never add to it.
423
- - **Always** confirm the dependency DAG with the operator before dispatching,
424
- unless `--yes` was passed.
425
- - **Label transitions**: drive every `agent::*` state change through
426
- `node .agents/scripts/update-ticket-state.js --ticket <id> --state <state>`.
427
- This CLI is the authoritative mechanism — there is no separate
428
- state-mutation MCP server to degrade from (see
429
- [`.agents/instructions.md` § 1.D](../../instructions.md)).
430
-
431
- ---
432
-
433
- ## See also
434
-
435
- - [`helpers/single-story-deliver`](single-story-deliver.md) — the
436
- per-Story worker this command delegates to.
437
- - [`/deliver`](deliver-epic.md) — full Epic wave loop for
438
- Epic-attached Stories.
439
- - [`helpers/epic-deliver-story`](epic-deliver-story.md) — the
440
- per-Story worker `/deliver` uses internally.
@@ -1,189 +0,0 @@
1
- ---
2
- description: >-
3
- Resolve the slim Epic-close (gate3) lens roster for /deliver. Consumes the
4
- epic-audit-prepare envelope, restricts it to the cumulative + global +
5
- risk-routed lenses the Epic-close tier owns, and hands that roster to the
6
- Phase 5 code-review pass — which walks the cumulative Epic diff once and folds
7
- the lens findings into its single verification-results comment.
8
- ---
9
-
10
- # Epic-close lens roster (helper)
11
-
12
- > **Helper module.** Not a slash command. Invoked automatically from
13
- > `/deliver` Phase 4 once the wave loop completes (all Stories at
14
- > `agent::done`) to resolve the Epic-close lens roster that the Phase 5
15
- > code-review pass walks. To run delivery, use `/deliver [Epic_ID]` (or pass
16
- > `--skip-epic-audit` to bypass the Epic-close lens tier).
17
-
18
- This helper resolves the **change-set-aware Epic-close lens roster** for an
19
- Epic branch. Under the three-tier verification model (Epic #4405) it does
20
- **not** run a standalone lens walk of its own and does **not** post its own
21
- structured comment. It selects the slim roster and hands it to the Phase 5
22
- [`code-review.md`](code-review.md) pass, which walks the cumulative Epic diff
23
- **once** — executing these lenses as review dimensions — and folds their
24
- findings into the single `verification-results` comment it posts on the Epic.
25
-
26
- > **Three-tier model — where each lens concern is verified.** A lens's `scope`
27
- > field in [`audit-rules.json`](../../schemas/audit-rules.json) (resolved by
28
- > [`resolveLensTier`](../../scripts/lib/audit-suite/selector.js)) decides the
29
- > **one** tier that owns its concern:
30
- >
31
- > - **`local`** — decidable from a single Story's diff. Verified **write-time**
32
- > (the distilled checklist threaded into the Story implementation prompt,
33
- > Story #4410) and at **Story-scope** (the maker-blind local-lens pass in
34
- > `story-close`, Story #4409). **Not** re-run at Epic close.
35
- > - **`cumulative`** — only decidable across the Epic's combined diff. Verified
36
- > at **Epic close** only.
37
- > - **`global`** — evaluates a whole-product property regardless of the diff
38
- > (exempt from the cross-epic-leak change-set narrowing). Verified at **Epic
39
- > close** only.
40
- >
41
- > No lens concern is verified at more than one tier: the Epic-close roster
42
- > below deliberately **excludes every local-tier change-set lens** and keeps
43
- > only cumulative + global + risk-routed lenses.
44
-
45
- **When to run**: After Phase 3 close-validation passes, to resolve the roster
46
- the Phase 5 code-review pass consumes. `/deliver` invokes this automatically
47
- once the wave loop completes and all Stories reach `agent::done`.
48
-
49
- **Persona**: `architect` · **Skills**: `core/code-review-and-quality`,
50
- `core/security-and-hardening`
51
-
52
- ## Step 0 — Resolve Context
53
-
54
- 1. Resolve `[EPIC_ID]` — the GitHub Issue number of the Epic under audit.
55
- 2. Resolve `[EPIC_BRANCH]` — `epic/<epicId>`.
56
- 3. Resolve `[BASE_BRANCH]` from `baseBranch` in `.agentrc.json` (default:
57
- `main`).
58
- 4. Fetch the Epic ticket — the Epic body is the single planning
59
- document:
60
- - **Narrative sections** — Context / Goal / Scope / User Stories /
61
- Acceptance Criteria.
62
- - **Tech Spec** — the folded Tech Spec sections (opening with
63
- `## Delivery Slicing`) inside the body's managed region.
64
- 5. Read the Epic body fully (including its Tech Spec sections) to
65
- understand the intended scope, selected lenses, and acceptance criteria.
66
-
67
- ## Step 1 — Prepare (`epic-audit-prepare.js`)
68
-
69
- Run the prepare CLI to compute the change-set, ask `selectAudits` which
70
- lenses fire at `gate3` (the Epic close gate), union in the model-judged
71
- risk-routed lenses, and emit the helper-consumable JSON envelope on stdout:
72
-
73
- ```bash
74
- node .agents/scripts/epic-audit-prepare.js \
75
- --epic [EPIC_ID] --base-branch [BASE_BRANCH] --gate gate3
76
- ```
77
-
78
- The CLI is thin glue around the audit-suite SDK and is fully described in
79
- [`epic-audit-prepare.js`](../../scripts/epic-audit-prepare.js). Capture the
80
- envelope:
81
-
82
- ```json
83
- {
84
- "epicId": 2586,
85
- "epicBranch": "epic/2586",
86
- "depth": "deep",
87
- "selectedAudits": ["audit-security", "audit-architecture", "audit-privacy"],
88
- "epicCloseLenses": ["audit-architecture", "audit-security"],
89
- "changeSetAudits": ["audit-architecture", "audit-privacy"],
90
- "riskRoutedAudits": ["audit-security"],
91
- "globalLenses": [],
92
- "changedFiles": ["src/api/admin/users.ts", "..."],
93
- "changedFilesCount": 47,
94
- "substitutionsPayload": "src/api/admin/users.ts\n..."
95
- }
96
- ```
97
-
98
- - **`epicCloseLenses` is the roster you hand to Phase 5.** It is the slim
99
- Epic-close roster — `selectedAudits` restricted to the tiers the Epic-close
100
- tier owns via
101
- [`selectEpicCloseLenses`](../../scripts/lib/orchestration/code-review.js):
102
- every **cumulative** and **global** change-set lens, plus every **risk-routed**
103
- lens, with every **local-tier** change-set lens dropped (its concern is
104
- already verified shift-left). In the example above `audit-privacy` (local) is
105
- excluded from `epicCloseLenses` while `audit-architecture` (cumulative) is
106
- kept and `audit-security` (risk-routed) is kept.
107
- - **`selectedAudits` / `changeSetAudits` / `riskRoutedAudits`** are surfaced for
108
- observability so the operator can see the pre-slim union and why each lens
109
- fired. Do **not** walk `selectedAudits` — walk `epicCloseLenses`.
110
- - **`globalLenses`** is the subset of the roster on the global-lens allowlist
111
- (e.g. `audit-navigability`) that the Phase 5 walk runs against the WHOLE
112
- route tree, exempt from the cross-epic-leak guard's change-set narrowing
113
- (Epic #4131, F2).
114
-
115
- ### The `depth` field (Story #3939)
116
-
117
- `depth` is `light`, `standard`, or `deep` — an **orthogonal** signal that
118
- tells the Phase 5 pass how thorough each **rostered** lens should be on this
119
- Epic. It is resolved by the shared `resolveDepth` resolver from the Epic's
120
- model-judged risk envelope (`overallLevel` off the `epic-plan-state`
121
- checkpoint) folded with `changedFilesCount`: a high-risk **or** wide-footprint
122
- Epic resolves to `deep`, a low-risk small one to `light`, and everything else
123
- — including an Epic that skipped `/plan` and has no checkpoint — to `standard`.
124
- Depth changes **how deeply** each lens runs, never **which** lenses fire.
125
-
126
- ### Outcomes
127
-
128
- - **`epicCloseLenses` is non-empty** — pass the roster (and `depth`,
129
- `globalLenses`, `substitutionsPayload`) to the Phase 5 code-review pass.
130
- - **`epicCloseLenses` is empty** (docs-only change set, or every selected lens
131
- was a local-tier change-set lens already covered shift-left, and no high-risk
132
- axis routed a lens) — there is no Epic-close lens dimension to walk; the
133
- Phase 5 pass still runs its review pillars and posts the
134
- `verification-results` comment.
135
- - **`degraded: true`** — the selector aborted. Possible `reason` codes:
136
- `GIT_DIFF_TIMEOUT` (git-diff timed out), `HEAD_REF_UNRESOLVED` (the
137
- Epic's branch `refs/heads/epic/<id>` is not present in this checkout),
138
- or `EPIC_REF_MISMATCH` (the selector diffed a ref other than the
139
- requested Epic's branch — the cross-epic-leak guard from Story #3362).
140
- Surface the `reason`/`detail` fields to the operator, post a friction
141
- comment on the Epic, and STOP. Do not fall back to running the full lens
142
- roster — that defeats the change-set scoping, and an unresolved/mismatched
143
- ref means the change set would belong to the wrong Epic.
144
-
145
- ## Step 2 — Hand the roster to the Phase 5 code-review pass
146
-
147
- The cumulative Epic diff is walked **once** at Epic close. The
148
- `epicCloseLenses` roster is executed as **dimensions of the Phase 5
149
- code-review pass** ([`code-review.md`](code-review.md) with `scope: epic`),
150
- not as a standalone walk here. The Phase 5 pass:
151
-
152
- 1. Loads each rostered lens's `.agents/workflows/audit-<lens>.md` via
153
- [`runAuditSuite`](../../scripts/lib/audit-suite/index.js) (the
154
- prompt-assembly runner), applying the `{{changedFiles}}` / `{{ticketId}}` /
155
- `{{baseBranch}}` substitutions from this envelope.
156
- 2. Executes each lens inline at the run's `depth` over the cumulative diff,
157
- folding its findings into the pass's severity aggregate alongside the review
158
- pillars — one walk of `main..epic/<id>`, one aggregate.
159
- 3. Posts the single `verification-results` structured comment (there is **no**
160
- separate `audit-results` comment; that producer was retired in Story #4412).
161
-
162
- Remediation of the aggregate is **tier-aware** (Story #4412): the Epic-close
163
- tier reads `delivery.epicAudit.autoFixSeverity` (default **`high`** — see
164
- [`config/runners.js`](../../scripts/lib/config/runners.js)) and routes only
165
- 🔴 Critical + 🟠 High findings into on-branch remediation; 🟡 Medium and
166
- 🟢 Suggestion findings graduate to follow-up issues, because 🟡 Medium concerns
167
- are already remediated shift-left at the write-time and Story-scope tiers.
168
- Setting `medium` opts back into routing 🔴/🟠/🟡 on-branch. The severity gate
169
- is **unchanged** — a surviving 🔴 Critical Blocker halts the run.
170
-
171
- ## Constraints
172
-
173
- - **Always** diff against `[BASE_BRANCH]`, not against individual Story
174
- branches. The Epic-close pass examines the cumulative effect of the entire
175
- Epic.
176
- - **Always** read the Epic body and Tech Spec before the Phase 5 walk. Findings
177
- without spec context are noise.
178
- - **Never** walk `selectedAudits`. The roster the Phase 5 pass executes is
179
- `epicCloseLenses` — the slim cumulative + global + risk-routed set. Walking
180
- the pre-slim union re-verifies local-tier concerns already covered
181
- shift-left, defeating the three-tier model.
182
- - **Never** widen the roster past `epicCloseLenses`. The whole point of the
183
- change-set selector plus the tier filter is to avoid re-running irrelevant or
184
- already-verified lenses on a scoped Epic.
185
- - **Never** post an `audit-results` structured comment. The Epic-close lens
186
- findings are folded into the Phase 5 `verification-results` comment — the
187
- single findings surface on the Epic.
188
- - **Always** propagate `degraded` envelopes verbatim. Do not paper over a
189
- selector failure with a full-roster fallback.