mandrel 1.59.0 → 1.60.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 (240) hide show
  1. package/.agents/README.md +14 -14
  2. package/.agents/docs/SDLC.md +129 -134
  3. package/.agents/docs/configuration.md +16 -16
  4. package/.agents/docs/workflows.md +6 -8
  5. package/.agents/instructions.md +12 -11
  6. package/.agents/personas/architect.md +1 -1
  7. package/.agents/personas/product.md +1 -1
  8. package/.agents/personas/project-manager.md +14 -14
  9. package/.agents/personas/technical-writer.md +1 -1
  10. package/.agents/rules/changelog-style.md +5 -5
  11. package/.agents/rules/git-conventions.md +3 -3
  12. package/.agents/schemas/agentrc.schema.json +3 -3
  13. package/.agents/schemas/dispatch-manifest.json +4 -4
  14. package/.agents/schemas/epic-spec.schema.json +15 -45
  15. package/.agents/schemas/lifecycle/README.md +1 -1
  16. package/.agents/schemas/lifecycle/story.dispatch.end.schema.json +1 -1
  17. package/.agents/schemas/lifecycle/story.dispatch.start.schema.json +1 -1
  18. package/.agents/schemas/lifecycle/story.heartbeat.schema.json +1 -1
  19. package/.agents/schemas/validation-evidence.schema.json +1 -1
  20. package/.agents/scripts/README.md +1 -1
  21. package/.agents/scripts/acceptance-eval.js +1 -1
  22. package/.agents/scripts/acceptance-spec-reconciler.js +2 -2
  23. package/.agents/scripts/analyze-execution.js +2 -2
  24. package/.agents/scripts/audit-to-stories.js +1 -1
  25. package/.agents/scripts/check-doc-links.js +2 -3
  26. package/.agents/scripts/diagnose-friction.js +1 -1
  27. package/.agents/scripts/dispatcher.js +2 -2
  28. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  29. package/.agents/scripts/epic-audit-prepare.js +3 -3
  30. package/.agents/scripts/epic-deliver-note-intervention.js +2 -2
  31. package/.agents/scripts/epic-deliver-preflight.js +6 -6
  32. package/.agents/scripts/epic-deliver-prepare.js +1 -1
  33. package/.agents/scripts/epic-execute-record-wave.js +4 -4
  34. package/.agents/scripts/epic-plan-healthcheck.js +6 -10
  35. package/.agents/scripts/epic-plan-spec-validate.js +1 -1
  36. package/.agents/scripts/epic-reconcile.js +11 -29
  37. package/.agents/scripts/evidence-gate.js +1 -1
  38. package/.agents/scripts/generate-workflows-doc.js +1 -1
  39. package/.agents/scripts/hierarchy-gate.js +7 -11
  40. package/.agents/scripts/lib/ITicketingProvider.js +1 -1
  41. package/.agents/scripts/lib/audit-suite/selector.js +1 -1
  42. package/.agents/scripts/lib/audit-to-stories/seed-epic-from-findings.js +2 -2
  43. package/.agents/scripts/lib/baseline-snapshot.js +7 -7
  44. package/.agents/scripts/lib/bdd-runner-detect.js +1 -1
  45. package/.agents/scripts/lib/bdd-scenario-scanner.js +3 -3
  46. package/.agents/scripts/lib/bootstrap/baselines-layout-migration.js +1 -1
  47. package/.agents/scripts/lib/bootstrap/branch-protection.js +1 -1
  48. package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +1 -1
  49. package/.agents/scripts/lib/bootstrap/commit-push.js +2 -2
  50. package/.agents/scripts/lib/codebase-snapshot.js +1 -1
  51. package/.agents/scripts/lib/config/explain.js +1 -1
  52. package/.agents/scripts/lib/config/runners.js +2 -2
  53. package/.agents/scripts/lib/config/runtime.js +1 -1
  54. package/.agents/scripts/lib/config/temp-paths.js +2 -2
  55. package/.agents/scripts/lib/config-settings-schema-delivery.js +2 -2
  56. package/.agents/scripts/lib/config-settings-schema-quality.js +1 -1
  57. package/.agents/scripts/lib/config-settings-schema.js +3 -3
  58. package/.agents/scripts/lib/duplicate-search.js +1 -1
  59. package/.agents/scripts/lib/dynamic-workflow/capability.js +1 -1
  60. package/.agents/scripts/lib/epic-plan-clarity.js +1 -1
  61. package/.agents/scripts/lib/epic-plan-ideation.js +1 -1
  62. package/.agents/scripts/lib/feedback-loop/memory-freshness.js +1 -1
  63. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +1 -1
  64. package/.agents/scripts/lib/findings/classify-finding.js +1 -1
  65. package/.agents/scripts/lib/findings/promote-finding.js +10 -10
  66. package/.agents/scripts/lib/label-constants.js +3 -4
  67. package/.agents/scripts/lib/label-taxonomy.js +3 -8
  68. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +1 -1
  69. package/.agents/scripts/lib/orchestration/code-review.js +5 -5
  70. package/.agents/scripts/lib/orchestration/context-hydration-engine.js +8 -9
  71. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +3 -3
  72. package/.agents/scripts/lib/orchestration/detectors-phase.js +2 -2
  73. package/.agents/scripts/lib/orchestration/dispatch-engine.js +30 -38
  74. package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +9 -25
  75. package/.agents/scripts/lib/orchestration/epic-cleanup.js +1 -1
  76. package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +8 -8
  77. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +1 -1
  78. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +7 -21
  79. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +3 -3
  80. package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +26 -13
  81. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +1 -1
  82. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/prompts.js +1 -1
  83. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +2 -2
  84. package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +1 -1
  85. package/.agents/scripts/lib/orchestration/epic-run-state-store.js +3 -3
  86. package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +4 -4
  87. package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +3 -3
  88. package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +6 -21
  89. package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +7 -7
  90. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +1 -1
  91. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +2 -2
  92. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +4 -4
  93. package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +4 -4
  94. package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +8 -8
  95. package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +4 -4
  96. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +7 -15
  97. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +72 -41
  98. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +2 -4
  99. package/.agents/scripts/lib/orchestration/file-assumptions.js +2 -2
  100. package/.agents/scripts/lib/orchestration/finalize/close-planning-tickets.js +1 -1
  101. package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +2 -2
  102. package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +1 -1
  103. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +3 -3
  104. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +1 -1
  105. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +1 -1
  106. package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +1 -1
  107. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +1 -1
  108. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +1 -1
  109. package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +1 -1
  110. package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +1 -1
  111. package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +1 -1
  112. package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +1 -1
  113. package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +1 -1
  114. package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +1 -1
  115. package/.agents/scripts/lib/orchestration/manifest-builder.js +5 -5
  116. package/.agents/scripts/lib/orchestration/parked-follow-ons.js +2 -2
  117. package/.agents/scripts/lib/orchestration/plan-runner/plan-router.js +5 -5
  118. package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +3 -3
  119. package/.agents/scripts/lib/orchestration/preflight-cache.js +1 -1
  120. package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +1 -1
  121. package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +1 -1
  122. package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +2 -2
  123. package/.agents/scripts/lib/orchestration/retro-runner.js +3 -3
  124. package/.agents/scripts/lib/orchestration/review-depth.js +1 -1
  125. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +1 -1
  126. package/.agents/scripts/lib/orchestration/spec-freshness.js +1 -1
  127. package/.agents/scripts/lib/orchestration/spec-renderer.js +36 -73
  128. package/.agents/scripts/lib/orchestration/spec-section-validator.js +1 -1
  129. package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +1 -1
  130. package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +2 -2
  131. package/.agents/scripts/lib/orchestration/task-body-validator.js +6 -6
  132. package/.agents/scripts/lib/orchestration/ticket-lease.js +1 -1
  133. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +2 -2
  134. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +1 -10
  135. package/.agents/scripts/lib/orchestration/ticket-validator.js +25 -70
  136. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +5 -12
  137. package/.agents/scripts/lib/orchestration/ticketing/reads.js +8 -8
  138. package/.agents/scripts/lib/orchestration/ticketing/state.js +3 -3
  139. package/.agents/scripts/lib/orchestration/wave-record-notifications.js +2 -2
  140. package/.agents/scripts/lib/orchestration/wave-record-projection.js +1 -1
  141. package/.agents/scripts/lib/plan-phase-cleanup.js +1 -1
  142. package/.agents/scripts/lib/preflight-runner.js +1 -1
  143. package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +4 -5
  144. package/.agents/scripts/lib/presentation/manifest-builder.js +28 -34
  145. package/.agents/scripts/lib/presentation/manifest-formatter.js +3 -4
  146. package/.agents/scripts/lib/presentation/manifest-helpers.js +1 -1
  147. package/.agents/scripts/lib/presentation/manifest-procedures.js +4 -4
  148. package/.agents/scripts/lib/presentation/manifest-render-waves.js +4 -23
  149. package/.agents/scripts/lib/presentation/manifest-renderer.js +1 -1
  150. package/.agents/scripts/lib/presentation/manifest-story-views.js +2 -11
  151. package/.agents/scripts/lib/signals/schema.js +1 -1
  152. package/.agents/scripts/lib/spec/index.js +1 -1
  153. package/.agents/scripts/lib/spec/loader.js +2 -2
  154. package/.agents/scripts/lib/spec/state.js +7 -16
  155. package/.agents/scripts/lib/story-init/context-resolver.js +3 -3
  156. package/.agents/scripts/lib/story-init/state-transitioner.js +2 -2
  157. package/.agents/scripts/lib/story-init/task-graph-builder.js +7 -7
  158. package/.agents/scripts/lib/story-lifecycle.js +8 -8
  159. package/.agents/scripts/lib/story-plan.js +1 -1
  160. package/.agents/scripts/lib/templates/decomposer-prompts.js +59 -52
  161. package/.agents/scripts/lib/wave-runner/tick.js +1 -1
  162. package/.agents/scripts/lifecycle-emit-story-dispatch.js +1 -1
  163. package/.agents/scripts/lifecycle-emit.js +1 -1
  164. package/.agents/scripts/providers/github/board-add.js +1 -1
  165. package/.agents/scripts/providers/github/errors.js +1 -1
  166. package/.agents/scripts/providers/github/mappers.js +2 -2
  167. package/.agents/scripts/providers/github/tickets.js +4 -4
  168. package/.agents/scripts/resync-status-column.js +1 -1
  169. package/.agents/scripts/retro-run.js +2 -2
  170. package/.agents/scripts/run-lint.js +1 -1
  171. package/.agents/scripts/single-story-init.js +1 -1
  172. package/.agents/scripts/stories-wave-tick.js +5 -5
  173. package/.agents/scripts/story-close.js +1 -1
  174. package/.agents/scripts/story-init.js +13 -16
  175. package/.agents/scripts/story-phase.js +5 -5
  176. package/.agents/scripts/story-plan.js +3 -3
  177. package/.agents/scripts/sync-branch-from-base.js +1 -1
  178. package/.agents/scripts/validate-docs-freshness.js +1 -1
  179. package/.agents/scripts/wave-tick.js +1 -1
  180. package/.agents/skills/core/analyze-execution/SKILL.md +2 -2
  181. package/.agents/skills/core/epic-plan-consolidate/SKILL.md +21 -26
  182. package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +23 -56
  183. package/.agents/skills/core/epic-plan-spec-author/SKILL.md +4 -4
  184. package/.agents/skills/core/hydrate-context/SKILL.md +2 -2
  185. package/.agents/skills/core/idea-refinement/SKILL.md +4 -4
  186. package/.agents/skills/core/knowledge-transfer/SKILL.md +2 -2
  187. package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +1 -1
  188. package/.agents/skills/core/scope-triage/SKILL.md +9 -10
  189. package/.agents/skills/core/using-agent-skills/SKILL.md +1 -1
  190. package/.agents/skills/skills.index.json +7 -7
  191. package/.agents/templates/agent-protocol.md +2 -2
  192. package/.agents/workflows/agents-update.md +2 -2
  193. package/.agents/workflows/audit-architecture.md +2 -2
  194. package/.agents/workflows/audit-clean-code.md +2 -2
  195. package/.agents/workflows/audit-dependencies.md +1 -1
  196. package/.agents/workflows/audit-devops.md +1 -1
  197. package/.agents/workflows/audit-documentation.md +2 -2
  198. package/.agents/workflows/audit-lighthouse.md +1 -1
  199. package/.agents/workflows/audit-performance.md +2 -2
  200. package/.agents/workflows/audit-privacy.md +1 -1
  201. package/.agents/workflows/audit-quality.md +2 -2
  202. package/.agents/workflows/audit-security.md +2 -2
  203. package/.agents/workflows/audit-seo.md +1 -1
  204. package/.agents/workflows/audit-sre.md +1 -1
  205. package/.agents/workflows/audit-to-stories.md +10 -10
  206. package/.agents/workflows/audit-ux-ui.md +1 -1
  207. package/.agents/workflows/deliver.md +85 -0
  208. package/.agents/workflows/explain.md +3 -3
  209. package/.agents/workflows/git-merge-pr.md +1 -1
  210. package/.agents/workflows/git-pr-all.md +13 -10
  211. package/.agents/workflows/git-push.md +6 -3
  212. package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
  213. package/.agents/workflows/helpers/acceptance-self-eval.md +1 -1
  214. package/.agents/workflows/helpers/code-review.md +5 -5
  215. package/.agents/workflows/{epic-deliver.md → helpers/deliver-epic.md} +43 -43
  216. package/.agents/workflows/{story-deliver.md → helpers/deliver-stories.md} +25 -25
  217. package/.agents/workflows/helpers/diagnose.md +1 -1
  218. package/.agents/workflows/helpers/epic-audit.md +6 -6
  219. package/.agents/workflows/helpers/epic-deliver-story.md +13 -13
  220. package/.agents/workflows/helpers/epic-plan-decompose.md +23 -23
  221. package/.agents/workflows/helpers/epic-plan-spec.md +6 -6
  222. package/.agents/workflows/helpers/epic-testing.md +3 -3
  223. package/.agents/workflows/helpers/parallel-tooling.md +1 -1
  224. package/.agents/workflows/{epic-plan.md → helpers/plan-epic.md} +84 -84
  225. package/.agents/workflows/{story-plan.md → helpers/plan-story.md} +43 -43
  226. package/.agents/workflows/helpers/signals.md +1 -1
  227. package/.agents/workflows/helpers/single-story-deliver.md +11 -11
  228. package/.agents/workflows/helpers/worktree-lifecycle.md +18 -18
  229. package/.agents/workflows/onboard.md +17 -17
  230. package/.agents/workflows/plan.md +89 -0
  231. package/.agents/workflows/qa-explore.md +1 -1
  232. package/.agents/workflows/qa-run-harness.md +1 -1
  233. package/README.md +4 -12
  234. package/docs/CHANGELOG.md +1149 -0
  235. package/lib/cli/__tests__/update-changelog-surface.test.js +357 -0
  236. package/lib/cli/__tests__/update-reexec.test.js +513 -0
  237. package/lib/cli/init.js +31 -29
  238. package/lib/cli/update.js +413 -52
  239. package/package.json +2 -1
  240. package/.agents/scripts/lib/orchestration/reconciler.js +0 -137
@@ -13,7 +13,7 @@ description:
13
13
  - Phase 1 MUST restate the idea as a "How Might We" statement, ask 3–5 sharpening questions via `AskUserQuestion`, and generate 5–8 variations (not 20+ shallow ones); do not proceed until target user and success criteria are explicit.
14
14
  - Phase 2 grill loop poses **one** question at a time, each with a recommended answer + one-line rationale grounded in user input / codebase / first principles; never batch questions and never omit the recommendation.
15
15
  - Re-enumerate open branches after every grill answer; stop only when no unresolved decisions remain. Take the off-ramp directly to Phase 3 when the idea is already crisply scoped.
16
- - Phase 3 emits a markdown one-pager with the canonical five Epic headings exactly: `## Context`, `## Goal`, `## Non-Goals`, `## Scope`, `## Acceptance Criteria` (plus optional `## Open Questions`). No alternate heading text — the `/epic-plan` clarity gate depends on this verbatim.
16
+ - Phase 3 emits a markdown one-pager with the canonical five Epic headings exactly: `## Context`, `## Goal`, `## Non-Goals`, `## Scope`, `## Acceptance Criteria` (plus optional `## Open Questions`). No alternate heading text — the `/plan` clarity gate depends on this verbatim.
17
17
  - Surface every key assumption inside `## Context` (or `## Scope`); assumptions do not get their own heading. Unresolved decisions MUST NOT carry into the one-pager.
18
18
  - The `## Non-Goals` list is mandatory and each entry includes a reason — focus is created by explicit exclusion.
19
19
  - Be honest, not supportive: push back on weak ideas with kindness; never function as a yes-machine.
@@ -35,7 +35,7 @@ structured divergent and convergent thinking.
35
35
 
36
36
  ## Activation
37
37
 
38
- Called from `/epic-plan` Phase 1 (ideation entry, when no `<epic#>` is
38
+ Called from `/plan` Phase 1 (ideation entry, when no `<epic#>` is
39
39
  supplied or `--idea "<seed>"` is passed) and Phase 6 (Epic Clarity Gate,
40
40
  when an existing Epic body fails the section-presence rubric). In Phase 6
41
41
  the skill is seeded from the **current Epic body** — not a blank seed —
@@ -73,7 +73,7 @@ The final output is a markdown one-pager saved to `docs/ideas/[idea-name].md`
73
73
 
74
74
  Assumptions and open questions are recorded in the body of the relevant
75
75
  section (typically under Context or Scope) rather than carved into their
76
- own headings — the canonical five drive the `/epic-plan` clarity gate.
76
+ own headings — the canonical five drive the `/plan` clarity gate.
77
77
 
78
78
  ## Detailed Instructions
79
79
 
@@ -213,7 +213,7 @@ it inside the grill loop, not after the one-pager is already written.
213
213
 
214
214
  Produce a concrete artifact — a markdown one-pager that moves work forward.
215
215
  The five canonical headings below match `.agents/templates/epic-from-idea.md`
216
- and the `/epic-plan` clarity gate; emit them verbatim so the renderer can
216
+ and the `/plan` clarity gate; emit them verbatim so the renderer can
217
217
  substitute the body into a new Epic without translation.
218
218
 
219
219
  ```markdown
@@ -152,9 +152,9 @@ This skill is the engine behind two operator-facing entry points:
152
152
 
153
153
  - [`/explain`](../../../workflows/explain.md) — runs the loop over a realized
154
154
  change (a PR, branch, or diff).
155
- - [`/epic-plan`](../../../workflows/epic-plan.md) **Phase 11 — Plan
155
+ - [`/plan`](../../../workflows/helpers/plan-epic.md) **Phase 11 — Plan
156
156
  Comprehension Gate** — runs the loop over a freshly planned backlog before
157
- the operator hands off to `/epic-deliver`. That phase decides *whether* to
157
+ the operator hands off to `/deliver`. That phase decides *whether* to
158
158
  run via an LM-judgment predicate; this skill owns *how* it runs once
159
159
  invoked.
160
160
 
@@ -13,7 +13,7 @@ description:
13
13
  > teaches how to slice and order work into verifiable units, independent
14
14
  > of any particular ticket hierarchy. The word "task" below refers to a
15
15
  > generic unit of work, not specifically to a Mandrel ticket. Under
16
- > Mandrel's 3-tier hierarchy (Epic → Feature → Story), these units map
16
+ > Mandrel's 2-tier hierarchy (Epic → Story), these units map
17
17
  > onto acceptance/verification bullets inlined on the Story body, or
18
18
  > onto sequential sibling Stories. The principles — vertical slicing,
19
19
  > dependency ordering, sizing caps, explicit acceptance and
@@ -4,7 +4,7 @@ description:
4
4
  Judge whether a piece of planned work is epic-sized or story-sized before the
5
5
  planning ceremony is paid for. Emits one of three verdicts —
6
6
  `epic` | `story` | `borderline` — over any planning artifact (a one-pager, an
7
- Epic body, or a Story draft). Use from `/epic-plan` Phase 1.5 and any other
7
+ Epic body, or a Story draft). Use from `/plan` Phase 1.5 and any other
8
8
  planning gate that needs the canonical story-vs-epic rubric.
9
9
  ---
10
10
 
@@ -32,9 +32,8 @@ description:
32
32
  wrong in the `epic` direction is cheap — the Phase 8.3 consolidation pass and
33
33
  the sizing validator catch an over-planned Story later. Being wrong in the
34
34
  `story` direction is expensive — a story-sized scope pushed through the full
35
- Epic ceremony pays a PRD + Tech Spec + Acceptance Spec + Feature/Story tree +
36
- `epic/<id>` integration-branch tax for a degenerate one-Feature-one-Story
37
- output.
35
+ Epic ceremony pays a PRD + Tech Spec + Acceptance Spec + Story backlog +
36
+ `epic/<id>` integration-branch tax for a degenerate one-Story output.
38
37
  - Keep the rubric prose **artifact-agnostic**. The thing under judgment may be a
39
38
  sharpened one-pager, an existing Epic body, or a draft Story — the rubric
40
39
  reads the same against all three so every consumer reuses it verbatim.
@@ -62,7 +61,7 @@ The work is a single shippable capability. Signals:
62
61
  architectural decision and matches none of the `planning.riskHeuristics` in
63
62
  `.agentrc.json` (destructive/irreversible changes, shared auth/security,
64
63
  CI/CD gate changes, monorepo-wide rewrites, destructive migrations).
65
- - **Decomposition would degenerate.** Running it through `/epic-plan` would
64
+ - **Decomposition would degenerate.** Running it through `/plan` would
66
65
  plausibly yield exactly **one Feature with one Story** — the shape the Phase
67
66
  8.3 consolidation skill flags only after all the spec authoring is already
68
67
  sunk cost.
@@ -90,18 +89,18 @@ option; a borderline scope surfaced as borderline is the correct output.
90
89
  A workflow entered via a scope-triage **handoff** MUST NOT re-triage. A handoff
91
90
  *is* a triage decision already made — re-running this gate on the receiving side
92
91
  would re-litigate a settled call and risk a ping-pong between two planning
93
- workflows. Handoff invocations identify themselves as such (e.g. `/epic-plan`
94
- entered via a `/story-plan` scope-triage escalation, or `/story-plan` entered
95
- via an `/epic-plan` Phase 1.5 handoff), and the receiving workflow skips its own
92
+ workflows. Handoff invocations identify themselves as such (e.g. `/plan`
93
+ entered via a `/plan` scope-triage escalation, or `/plan` entered
94
+ via an `/plan` Phase 1.5 handoff), and the receiving workflow skips its own
96
95
  scope-triage gate when it detects the handoff marker.
97
96
 
98
97
  ## When to use
99
98
 
100
- - **`/epic-plan` Phase 1.5** (ideation path only) — judge the sharpened
99
+ - **`/plan` Phase 1.5** (ideation path only) — judge the sharpened
101
100
  one-pager Phase 1 produced before the Epic ceremony is paid for. The verdict
102
101
  folds into the existing Phase 1 HITL stop; on a `story` / `borderline`
103
102
  verdict the operator may hand off to
104
- [`/story-plan --from-notes`](../../../workflows/story-plan.md).
103
+ [`/plan --from-notes`](../../../workflows/helpers/plan-story.md).
105
104
  - Any other planning gate that needs the canonical story-vs-epic rubric. Keep
106
105
  the rubric here as the SSOT; consumers reference this file rather than
107
106
  forking the prose.
@@ -101,7 +101,7 @@ In that context:
101
101
  2. If you genuinely cannot proceed, transition to `agent::blocked`, post a
102
102
  `friction` structured comment naming the decision required and the
103
103
  default assumption you would have made, and exit non-zero. The parent
104
- `/epic-deliver` aggregator will surface the block.
104
+ `/deliver` aggregator will surface the block.
105
105
  3. **Never** stall waiting for input that will never arrive.
106
106
 
107
107
  This is the only documented exception to the "Manage Confusion Actively"
@@ -1,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-06-10T15:27:53.874Z",
2
+ "generatedAt": "2026-06-11T19:47:29.752Z",
3
3
  "generator": "generate-skills-index.js@1",
4
4
  "skills": [
5
5
  {
@@ -7,7 +7,7 @@
7
7
  "tier": "core",
8
8
  "category": "core",
9
9
  "path": ".agents/skills/core/analyze-execution/SKILL.md",
10
- "description": "Aggregate per-Story or per-Epic execution signals into a structured perf-summary or perf-report and upsert it onto the corresponding GitHub ticket. Use after a Story closes (Story mode) or as part of `/epic-deliver` Phase 6 (Epic mode). Reads NDJSON via `lib/signals/read` and writes a single structured comment.",
10
+ "description": "Aggregate per-Story or per-Epic execution signals into a structured perf-summary or perf-report and upsert it onto the corresponding GitHub ticket. Use after a Story closes (Story mode) or as part of `/deliver` Phase 6 (Epic mode). Reads NDJSON via `lib/signals/read` and writes a single structured comment.",
11
11
  "policyCapsuleBullets": 8,
12
12
  "allowedTools": ["Read", "Bash"],
13
13
  "vendor": null
@@ -127,8 +127,8 @@
127
127
  "tier": "core",
128
128
  "category": "core",
129
129
  "path": ".agents/skills/core/epic-plan-consolidate/SKILL.md",
130
- "description": "Run a holistic, pre-persist consolidation pass over the draft Feature/Story ticket array an Epic's decompose phase produced. Use during Phase 8 of `/epic-plan`, after `epic-plan-decompose-author` writes `temp/epic-<Epic_ID>/tickets.json` and before `epic-plan-decompose.js` validates and persists it. Reconciles the draft against the Tech Spec \"Delivery Slicing\" target via scope-preserving operations only.",
131
- "policyCapsuleBullets": 9,
130
+ "description": "Run a holistic, pre-persist consolidation pass over the draft Story ticket array an Epic's decompose phase produced. Use during Phase 8 of `/plan`, after `epic-plan-decompose-author` writes `temp/epic-<Epic_ID>/tickets.json` and before `epic-plan-decompose.js` validates and persists it. Reconciles the draft against the Tech Spec \"Delivery Slicing\" target via scope-preserving operations only.",
131
+ "policyCapsuleBullets": 8,
132
132
  "allowedTools": ["Read", "Write", "Bash"],
133
133
  "vendor": null
134
134
  },
@@ -137,7 +137,7 @@
137
137
  "tier": "core",
138
138
  "category": "core",
139
139
  "path": ".agents/skills/core/epic-plan-decompose-author/SKILL.md",
140
- "description": "Author the Feature/Story ticket JSON for an Epic from the decomposer authoring context emitted by `epic-plan-decompose.js --emit-context`. Use during Phase 8 of `/epic-plan` when the host LLM needs to write the ticket array before `epic-plan-decompose.js` validates and persists it.",
140
+ "description": "Author the Story ticket JSON for an Epic from the decomposer authoring context emitted by `epic-plan-decompose.js --emit-context`. Use during Phase 8 of `/plan` when the host LLM needs to write the ticket array before `epic-plan-decompose.js` validates and persists it.",
141
141
  "policyCapsuleBullets": 12,
142
142
  "allowedTools": ["Read", "Write", "Bash"],
143
143
  "vendor": null
@@ -147,7 +147,7 @@
147
147
  "tier": "core",
148
148
  "category": "core",
149
149
  "path": ".agents/skills/core/epic-plan-spec-author/SKILL.md",
150
- "description": "Author the PRD, Tech Spec, Acceptance Spec markdown, and risk-verdict JSON for an Epic from the planner authoring context emitted by `epic-plan-spec.js --emit-context`. Use during Phase 7 of `/epic-plan` when the host LLM needs to write the four artifacts before `epic-plan-spec.js` persists them.",
150
+ "description": "Author the PRD, Tech Spec, Acceptance Spec markdown, and risk-verdict JSON for an Epic from the planner authoring context emitted by `epic-plan-spec.js --emit-context`. Use during Phase 7 of `/plan` when the host LLM needs to write the four artifacts before `epic-plan-spec.js` persists them.",
151
151
  "policyCapsuleBullets": 12,
152
152
  "allowedTools": ["Read", "Write", "Bash"],
153
153
  "vendor": null
@@ -287,7 +287,7 @@
287
287
  "tier": "core",
288
288
  "category": "core",
289
289
  "path": ".agents/skills/core/scope-triage/SKILL.md",
290
- "description": "Judge whether a piece of planned work is epic-sized or story-sized before the planning ceremony is paid for. Emits one of three verdicts — `epic` | `story` | `borderline` — over any planning artifact (a one-pager, an Epic body, or a Story draft). Use from `/epic-plan` Phase 1.5 and any other planning gate that needs the canonical story-vs-epic rubric.",
290
+ "description": "Judge whether a piece of planned work is epic-sized or story-sized before the planning ceremony is paid for. Emits one of three verdicts — `epic` | `story` | `borderline` — over any planning artifact (a one-pager, an Epic body, or a Story draft). Use from `/plan` Phase 1.5 and any other planning gate that needs the canonical story-vs-epic rubric.",
291
291
  "policyCapsuleBullets": 1,
292
292
  "allowedTools": null,
293
293
  "vendor": null
@@ -5,8 +5,8 @@ Version: {{PROTOCOL_VERSION}}
5
5
  You are an AI coding assistant. This protocol governs your execution of the
6
6
  current work unit. You must follow these rules strictly.
7
7
 
8
- > **Hierarchy shape.** Mandrel uses a **3-tier hierarchy**
9
- > (Epic → Feature → Story). The work unit is the `type::story` issue
8
+ > **Hierarchy shape.** Mandrel uses a **2-tier hierarchy**
9
+ > (Epic → Story). The work unit is the `type::story` issue
10
10
  > itself, with acceptance criteria and verification inlined on the
11
11
  > Story body. There is no per-Task sub-loop; the agent authors commit
12
12
  > subjects directly per `.agents/rules/git-conventions.md` and
@@ -222,7 +222,7 @@ The four `quality-bootstrap` outcomes:
222
222
 
223
223
  The `baselines-layout-migration` step relocates per-Epic snapshots
224
224
  into the `temp/epic/<id>/baselines/` namespace (Story #1467: ephemeral
225
- scratch state, not committed, reaped on `/epic-deliver` merge with the
225
+ scratch state, not committed, reaped on `/deliver` merge with the
226
226
  rest of the per-Epic temp tree):
227
227
 
228
228
  - Loose `baselines/epic-<id>-{maintainability,crap}.json` files →
@@ -246,7 +246,7 @@ guarantee `agents-update`'s idempotence contract requires.
246
246
  A framework bump frequently introduces new helper scripts and `node
247
247
  .agents/scripts/<name>.js` invocations the consumer's
248
248
  `.claude/settings.json` allowlist has never seen. Left alone, the next
249
- `/story-deliver` or `/epic-deliver` run trips a fresh wave of
249
+ `/deliver` or `/deliver` run trips a fresh wave of
250
250
  permission prompts that operators answer by hand — and those hand-tuned
251
251
  allowlists drift across projects.
252
252
 
@@ -19,7 +19,7 @@ existing external APIs or business logic.
19
19
  ## Execution strategy (dual-path)
20
20
 
21
21
  This lens runs along one of two execution paths. Both emit the **identical**
22
- report contract (Step 3); downstream consumers (`/epic-deliver` Phase 4
22
+ report contract (Step 3); downstream consumers (`/deliver` Phase 4
23
23
  epic-audit, `audit-to-stories`) are agnostic to which path produced it.
24
24
 
25
25
  - **Orchestrated (dynamic-workflow) path.** When Claude Code's
@@ -72,7 +72,7 @@ degrade to the sequential path.
72
72
 
73
73
  ## Scope (Epic mode)
74
74
 
75
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
75
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
76
76
  following block is populated with the Epic's change-set file list.
77
77
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
78
78
  renders the literal substitution token and you MUST treat it as **no
@@ -17,7 +17,7 @@ velocity.
17
17
 
18
18
  ## Scope (Epic mode)
19
19
 
20
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
20
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
21
21
  following block is populated with the Epic's change-set file list.
22
22
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
23
23
  renders the literal substitution token and you MUST treat it as **no
@@ -39,7 +39,7 @@ before this section existed.
39
39
  ## Execution strategy (dual-path)
40
40
 
41
41
  This lens runs along one of two execution paths. Both emit the **identical**
42
- report contract (Step 3); downstream consumers (`/epic-deliver` Phase 4
42
+ report contract (Step 3); downstream consumers (`/deliver` Phase 4
43
43
  epic-audit, `audit-to-stories`) are agnostic to which path produced it.
44
44
 
45
45
  - **Orchestrated (dynamic-workflow) path.** When Claude Code's
@@ -16,7 +16,7 @@ system stability.
16
16
 
17
17
  ## Scope (Epic mode)
18
18
 
19
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
19
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
20
20
  following block is populated with the Epic's change-set file list.
21
21
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
22
22
  renders the literal substitution token and you MUST treat it as **no
@@ -17,7 +17,7 @@ without making any immediate changes.
17
17
 
18
18
  ## Scope (Epic mode)
19
19
 
20
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
20
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
21
21
  following block is populated with the Epic's change-set file list.
22
22
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
23
23
  renders the literal substitution token and you MUST treat it as **no
@@ -49,7 +49,7 @@ semantic review beyond Step 1's deterministic checks.
49
49
 
50
50
  ## Scope (Epic mode)
51
51
 
52
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
52
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
53
53
  following block is populated with the Epic's change-set file list.
54
54
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
55
55
  renders the literal substitution token and you MUST treat it as **no
@@ -71,7 +71,7 @@ before this section existed.
71
71
  ## Execution strategy (dual-path)
72
72
 
73
73
  This lens runs along one of two execution paths. Both emit the **identical**
74
- report contract (Step 3); downstream consumers (`/epic-deliver` Phase 4
74
+ report contract (Step 3); downstream consumers (`/deliver` Phase 4
75
75
  epic-audit, `audit-to-stories`) are agnostic to which path produced it.
76
76
 
77
77
  - **Orchestrated (dynamic-workflow) path.** When Claude Code's
@@ -31,7 +31,7 @@ inflate Performance scores misleadingly.
31
31
 
32
32
  ## Scope (Epic mode)
33
33
 
34
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
34
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
35
35
  following block is populated with the Epic's change-set file list.
36
36
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
37
37
  renders the literal substitution token and you MUST treat it as **no
@@ -16,7 +16,7 @@ load.
16
16
 
17
17
  ## Scope (Epic mode)
18
18
 
19
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
19
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
20
20
  following block is populated with the Epic's change-set file list.
21
21
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
22
22
  renders the literal substitution token and you MUST treat it as **no
@@ -38,7 +38,7 @@ before this section existed.
38
38
  ## Execution strategy (dual-path)
39
39
 
40
40
  This lens runs along one of two execution paths. Both emit the **identical**
41
- report contract (Step 3); downstream consumers (`/epic-deliver` Phase 4
41
+ report contract (Step 3); downstream consumers (`/deliver` Phase 4
42
42
  epic-audit, `audit-to-stories`) are agnostic to which path produced it.
43
43
 
44
44
  - **Orchestrated (dynamic-workflow) path.** When Claude Code's
@@ -17,7 +17,7 @@ insecure storage, or unnecessary collection of sensitive data.
17
17
 
18
18
  ## Scope (Epic mode)
19
19
 
20
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
20
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
21
21
  following block is populated with the Epic's change-set file list.
22
22
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
23
23
  renders the literal substitution token and you MUST treat it as **no
@@ -26,7 +26,7 @@ integrations, and test environment stability.
26
26
 
27
27
  ## Scope (Epic mode)
28
28
 
29
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
29
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
30
30
  following block is populated with the Epic's change-set file list.
31
31
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
32
32
  renders the literal substitution token and you MUST treat it as **no
@@ -48,7 +48,7 @@ before this section existed.
48
48
  ## Execution strategy (dual-path)
49
49
 
50
50
  This lens runs along one of two execution paths. Both emit the **identical**
51
- report contract (Step 3); downstream consumers (`/epic-deliver` Phase 4
51
+ report contract (Step 3); downstream consumers (`/deliver` Phase 4
52
52
  epic-audit, `audit-to-stories`) are agnostic to which path produced it.
53
53
 
54
54
  - **Orchestrated (dynamic-workflow) path.** When Claude Code's
@@ -16,7 +16,7 @@ potential attack vectors.
16
16
 
17
17
  ## Scope (Epic mode)
18
18
 
19
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
19
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
20
20
  following block is populated with the Epic's change-set file list.
21
21
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
22
22
  renders the literal substitution token and you MUST treat it as **no
@@ -38,7 +38,7 @@ before this section existed.
38
38
  ## Execution strategy (dual-path)
39
39
 
40
40
  This lens runs along one of two execution paths. Both emit the **identical**
41
- report contract (Step 3); downstream consumers (`/epic-deliver` Phase 4
41
+ report contract (Step 3); downstream consumers (`/deliver` Phase 4
42
42
  epic-audit, `audit-to-stories`) are agnostic to which path produced it.
43
43
 
44
44
  - **Orchestrated (dynamic-workflow) path.** When Claude Code's
@@ -20,7 +20,7 @@ indexes and AI-powered answer engines — without making any immediate changes.
20
20
 
21
21
  ## Scope (Epic mode)
22
22
 
23
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
23
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
24
24
  following block is populated with the Epic's change-set file list.
25
25
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
26
26
  renders the literal substitution token and you MUST treat it as **no
@@ -17,7 +17,7 @@ actionable report that can be handed off for remediation before deployment.
17
17
 
18
18
  ## Scope (Epic mode)
19
19
 
20
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
20
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
21
21
  following block is populated with the Epic's change-set file list.
22
22
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
23
23
  renders the literal substitution token and you MUST treat it as **no
@@ -3,7 +3,7 @@ description:
3
3
  Convert findings produced by the audit-* workflows into actionable
4
4
  GitHub Stories. Reads temp/audits/audit-*-results.md, groups findings
5
5
  cross-audit, deduplicates against existing Issues by fingerprint, and
6
- either chains into /epic-plan --idea or opens standalone Stories.
6
+ either chains into /plan --idea or opens standalone Stories.
7
7
  ---
8
8
 
9
9
  # /audit-to-stories [audit-file-or-glob]
@@ -22,7 +22,7 @@ Dimension / Category, Current State, Recommendation, Agent Prompt).
22
22
  `/audit-to-stories` closes the loop: it parses those reports, groups
23
23
  related findings (including across audit dimensions), classifies each
24
24
  group as eligible-to-create or already-tracked, and — at the operator's
25
- choice — either chains into `/epic-plan --idea` for a single planned
25
+ choice — either chains into `/plan --idea` for a single planned
26
26
  Epic or opens standalone Stories directly.
27
27
 
28
28
  The audit producers themselves are **not modified** by this workflow.
@@ -117,8 +117,8 @@ Ask:
117
117
 
118
118
  > How would you like these `<M>` Stories created?
119
119
  >
120
- > - **Single Epic via `/epic-plan`** **[Recommended]** — opens one Epic,
121
- > then chains into `/epic-plan --idea` so the standard PRD / Tech Spec
120
+ > - **Single Epic via `/plan`** **[Recommended]** — opens one Epic,
121
+ > then chains into `/plan --idea` so the standard PRD / Tech Spec
122
122
  > / WBS authoring handles decomposition. Grouped Stories become the
123
123
  > seed for Phase 7 decomposition.
124
124
  > - **Individual standalone Stories** — opens one GitHub Issue per
@@ -128,7 +128,7 @@ Ask:
128
128
 
129
129
  ## Phase 5a — Single-Epic path
130
130
 
131
- Build the `/epic-plan` idea seed from the filtered plan envelope:
131
+ Build the `/plan` idea seed from the filtered plan envelope:
132
132
 
133
133
  ```bash
134
134
  node .agents/scripts/audit-to-stories.js --emit-epic-seed \
@@ -138,16 +138,16 @@ node .agents/scripts/audit-to-stories.js --emit-epic-seed \
138
138
 
139
139
  The seed renders the canonical one-pager sections — Problem Statement,
140
140
  Recommended Direction, Key Assumptions (with links to every source
141
- report), MVP Scope (the M proposed Stories), Key Files (so `/epic-plan`
141
+ report), MVP Scope (the M proposed Stories), Key Files (so `/plan`
142
142
  Phase 7 decompose has concrete anchors), Not Doing.
143
143
 
144
144
  Chain into the existing planning entrypoint:
145
145
 
146
146
  ```text
147
- /epic-plan --idea "<path-to-seed>"
147
+ /plan --idea "<path-to-seed>"
148
148
  ```
149
149
 
150
- `/epic-plan` then runs ideation → duplicate-search → render Epic body
150
+ `/plan` then runs ideation → duplicate-search → render Epic body
151
151
  → open Epic → Phase 7 / 8 decompose, as documented in its workflow.
152
152
  Each Story it spawns from the seed carries `context::audit:
153
153
  <reportLink>` and `audit-fingerprint: <sha>` in its body so future
@@ -225,7 +225,7 @@ summarising the run:
225
225
  - Final tally: `"<M> groups planned · <K> created · <J> skipped (open)
226
226
  · <L> skipped (re-occurring)"`.
227
227
 
228
- When the Single-Epic path ran, link the Epic the chained `/epic-plan`
228
+ When the Single-Epic path ran, link the Epic the chained `/plan`
229
229
  opened. When the Standalone-Stories path ran, list every Issue URL.
230
230
 
231
231
  ## Constraints
@@ -250,7 +250,7 @@ opened. When the Standalone-Stories path ran, list every Issue URL.
250
250
 
251
251
  ## See also
252
252
 
253
- - [`/epic-plan`](epic-plan.md) — the planning pipeline `/audit-to-stories`
253
+ - [`/plan`](helpers/plan-epic.md) — the planning pipeline `/audit-to-stories`
254
254
  chains into for the Single-Epic grouping mode.
255
255
  - [`lib/findings/route-finding.js`](../scripts/lib/findings/route-finding.js) —
256
256
  the shared fingerprint/dedup/route helper this workflow and `qa-explore`
@@ -16,7 +16,7 @@ and cohesive.
16
16
 
17
17
  ## Scope (Epic mode)
18
18
 
19
- When this lens is invoked from `/epic-deliver` Phase 4 (epic-audit), the
19
+ When this lens is invoked from `/deliver` Phase 4 (epic-audit), the
20
20
  following block is populated with the Epic's change-set file list.
21
21
  Otherwise — for any manual `/audit-<dimension>` invocation — the block
22
22
  renders the literal substitution token and you MUST treat it as **no
@@ -0,0 +1,85 @@
1
+ ---
2
+ description:
3
+ Unified delivery entry point. Inspects the ticket type(s) and
4
+ Epic-reference state of the supplied IDs, then routes to the Epic wave
5
+ loop or the standalone multi-Story fan-out — preserving every flag and
6
+ the parallel-delivery contract of the retired commands.
7
+ ---
8
+
9
+ # /deliver [Epic ID] | [Story IDs...]
10
+
11
+ ## Role
12
+
13
+ Router. `/deliver` owns input classification and path selection only — all
14
+ phase content lives in the two path helpers:
15
+
16
+ - [`helpers/deliver-epic.md`](helpers/deliver-epic.md) — the full Epic
17
+ delivery loop (preflight, wave loop fanning out
18
+ [`helpers/epic-deliver-story`](helpers/epic-deliver-story.md),
19
+ close-validation, epic-audit, code-review, retro, finalize, watch,
20
+ auto-merge gate, cleanup).
21
+ - [`helpers/deliver-stories.md`](helpers/deliver-stories.md) — the
22
+ standalone multi-Story path (`stories-wave-tick.js` wave plan, operator
23
+ confirmation, parallel fan-out to
24
+ [`helpers/single-story-deliver`](helpers/single-story-deliver.md)).
25
+
26
+ ## Input matrix (authoritative)
27
+
28
+ Fetch each supplied ID's labels and body (`type::*` label, `Epic: #N`
29
+ reference) before routing:
30
+
31
+ | Input | Route |
32
+ | --- | --- |
33
+ | Exactly one `type::epic` ID | **Epic path** — run [`helpers/deliver-epic.md`](helpers/deliver-epic.md) Phases 1–9 unchanged. |
34
+ | 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. |
35
+ | Any Story carrying an `Epic: #N` reference | **Error**, naming the fix: `Story #<id> belongs to Epic #<n> — run /deliver <n>`. |
36
+ | Mixed Epic + Story IDs, or more than one Epic | **Error**: separate invocations — one `/deliver <epicId>` per Epic, one `/deliver <id> [<id>...]` for the standalone set. |
37
+
38
+ ## Flags (forwarded per path)
39
+
40
+ | Path | Flags |
41
+ | --- | --- |
42
+ | Epic | `--skip-epic-audit`, `--skip-code-review`, `--skip-retro`, `--full-retro`, `--steal`, `--as <handle>` |
43
+ | Story | `--dep <from>:<to>`, `--yes`, `--concurrency <n>` |
44
+
45
+ A flag passed to the wrong path is reported once as a no-op warning and
46
+ ignored — never an error.
47
+
48
+ **Multi-Story parallel contract (preserved verbatim).**
49
+
50
+ ```text
51
+ /deliver <id> <id> … --dep <from>:<to> --concurrency <n> --yes
52
+ ```
53
+
54
+ behaves exactly as the retired multi-Story command did: the same
55
+ `stories-wave-tick.js` wave plan, the same operator confirmation gate
56
+ (suppressed by `--yes`), and the same parallel fan-out — one Agent call per
57
+ Story per wave, capped by the resolved `concurrencyCap` — to
58
+ [`helpers/single-story-deliver`](helpers/single-story-deliver.md).
59
+
60
+ ## Procedure
61
+
62
+ 1. **Parse args.** At least one positive-integer ID is required.
63
+ 2. **Classify.** Fetch each ticket's labels + body and apply the input
64
+ matrix above. Refuse ambiguous input with the matrix's error messages —
65
+ never guess a route.
66
+ 3. **Delegate.** Read the selected path helper **in full** and execute it
67
+ from its entry phase, forwarding the absorbed flags. The helper's phase
68
+ numbering, watchdogs, gates, and scripts are unchanged — this router
69
+ adds no phase content.
70
+
71
+ ## Constraints
72
+
73
+ - `/deliver` requires a planned ticket: an Epic at `agent::ready` (the
74
+ Epic helper's preflight enforces this) or well-formed standalone Stories.
75
+ Planning happens in [`/plan`](plan.md); the plan-review gate between the
76
+ two commands is a hard boundary.
77
+ - The router performs no git or label mutations itself; the path helpers
78
+ own every script invocation.
79
+
80
+ ## See also
81
+
82
+ - [`/plan`](plan.md) — the unified planning entry point.
83
+ - [`helpers/deliver-epic.md`](helpers/deliver-epic.md) /
84
+ [`helpers/deliver-stories.md`](helpers/deliver-stories.md) — the path
85
+ helpers.
@@ -14,7 +14,7 @@ description:
14
14
  landed (or is about to) and you want to be sure you actually understand it —
15
15
  the problem it solves, why it was solved this way, the design decisions, the
16
16
  edge cases, and the blast radius. It is the after-the-fact counterpart to
17
- [`/epic-plan`](epic-plan.md) Phase 11 (which walks the operator through a
17
+ [`/plan`](helpers/plan-epic.md) Phase 11 (which walks the operator through a
18
18
  *plan* before delivery); both drive the same engine.
19
19
 
20
20
  ```text
@@ -39,7 +39,7 @@ contract.
39
39
  | Understand a change that already merged | `/explain <PR#>` |
40
40
  | Understand a branch before merging it | `/explain <branch>` |
41
41
  | Understand what you are about to commit | `/explain --staged` |
42
- | Understand a freshly planned Epic backlog | `/epic-plan` Phase 11 (automatic) |
42
+ | Understand a freshly planned Epic backlog | `/plan` Phase 11 (automatic) |
43
43
 
44
44
  ## Step 1 — Resolve the subject
45
45
 
@@ -111,7 +111,7 @@ structured-question mechanism when it sharpens understanding.
111
111
 
112
112
  - [`core/knowledge-transfer`](../skills/core/knowledge-transfer/SKILL.md) —
113
113
  the comprehension engine this command drives.
114
- - [`/epic-plan`](epic-plan.md) — Phase 11 runs the same engine over a plan
114
+ - [`/plan`](helpers/plan-epic.md) — Phase 11 runs the same engine over a plan
115
115
  before delivery.
116
116
  - `/code-review` (Claude Code built-in) — correctness review of a diff. A
117
117
  different concern: `/explain` builds *operator* understanding, not a defect
@@ -235,7 +235,7 @@ Merge the PR as a squash commit and delete the head branch. Call
235
235
 
236
236
  After the merge command returns, perform a conflict marker scan to confirm no
237
237
  stray markers entered the base branch. Delegate to `detect-merges.js` — it
238
- owns the scan logic and is the same script used by `/epic-deliver` Phase 5.3.
238
+ owns the scan logic and is the same script used by `/deliver` Phase 5.3.
239
239
 
240
240
  ```powershell
241
241
  git checkout [BASE_BRANCH]