mandrel 1.59.0 → 1.61.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/.agents/README.md +86 -44
  2. package/.agents/docs/SDLC.md +135 -141
  3. package/.agents/docs/configuration.md +77 -20
  4. package/.agents/docs/quality-gates.md +796 -0
  5. package/.agents/docs/workflows.md +6 -9
  6. package/.agents/instructions.md +12 -11
  7. package/.agents/personas/architect.md +1 -1
  8. package/.agents/personas/product.md +1 -1
  9. package/.agents/personas/project-manager.md +14 -14
  10. package/.agents/personas/technical-writer.md +1 -1
  11. package/.agents/rules/changelog-style.md +5 -5
  12. package/.agents/rules/git-conventions.md +3 -3
  13. package/.agents/runtime-deps.json +2 -2
  14. package/.agents/schemas/agentrc.schema.json +3 -3
  15. package/.agents/schemas/dispatch-manifest.json +4 -4
  16. package/.agents/schemas/epic-spec.schema.json +15 -45
  17. package/.agents/schemas/lifecycle/README.md +1 -1
  18. package/.agents/schemas/lifecycle/story.dispatch.end.schema.json +1 -1
  19. package/.agents/schemas/lifecycle/story.dispatch.start.schema.json +1 -1
  20. package/.agents/schemas/lifecycle/story.heartbeat.schema.json +1 -1
  21. package/.agents/schemas/validation-evidence.schema.json +1 -1
  22. package/.agents/scripts/README.md +2 -2
  23. package/.agents/scripts/acceptance-eval.js +1 -1
  24. package/.agents/scripts/acceptance-spec-reconciler.js +2 -2
  25. package/.agents/scripts/agents-bootstrap-github.js +23 -119
  26. package/.agents/scripts/analyze-execution.js +2 -2
  27. package/.agents/scripts/audit-to-stories.js +1 -1
  28. package/.agents/scripts/check-doc-links.js +2 -3
  29. package/.agents/scripts/diagnose-friction.js +1 -1
  30. package/.agents/scripts/dispatcher.js +2 -2
  31. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  32. package/.agents/scripts/epic-audit-prepare.js +3 -3
  33. package/.agents/scripts/epic-deliver-note-intervention.js +2 -2
  34. package/.agents/scripts/epic-deliver-preflight.js +6 -6
  35. package/.agents/scripts/epic-deliver-prepare.js +1 -1
  36. package/.agents/scripts/epic-execute-record-wave.js +4 -4
  37. package/.agents/scripts/epic-plan-healthcheck.js +6 -10
  38. package/.agents/scripts/epic-plan-spec-validate.js +1 -1
  39. package/.agents/scripts/epic-reconcile.js +11 -29
  40. package/.agents/scripts/evidence-gate.js +1 -1
  41. package/.agents/scripts/generate-workflows-doc.js +1 -1
  42. package/.agents/scripts/hierarchy-gate.js +7 -11
  43. package/.agents/scripts/lib/ITicketingProvider.js +1 -1
  44. package/.agents/scripts/lib/audit-suite/selector.js +1 -1
  45. package/.agents/scripts/lib/audit-to-stories/seed-epic-from-findings.js +2 -2
  46. package/.agents/scripts/lib/baseline-snapshot.js +7 -7
  47. package/.agents/scripts/lib/bdd-runner-detect.js +1 -1
  48. package/.agents/scripts/lib/bdd-scenario-scanner.js +3 -3
  49. package/.agents/scripts/lib/bootstrap/baselines-layout-migration.js +1 -1
  50. package/.agents/scripts/lib/bootstrap/branch-protection.js +1 -1
  51. package/.agents/scripts/lib/bootstrap/ci-workflow-template.js +47 -1
  52. package/.agents/scripts/lib/bootstrap/commit-push.js +2 -2
  53. package/.agents/scripts/lib/bootstrap/gh-preflight.js +7 -9
  54. package/.agents/scripts/lib/bootstrap/manifest.js +21 -1
  55. package/.agents/scripts/lib/bootstrap/merge-methods.js +31 -16
  56. package/.agents/scripts/lib/bootstrap/project-bootstrap.js +32 -11
  57. package/.agents/scripts/lib/codebase-snapshot.js +1 -1
  58. package/.agents/scripts/lib/config/explain.js +1 -1
  59. package/.agents/scripts/lib/config/runners.js +2 -2
  60. package/.agents/scripts/lib/config/runtime.js +1 -1
  61. package/.agents/scripts/lib/config/sync-agentrc.js +1 -1
  62. package/.agents/scripts/lib/config/temp-paths.js +2 -2
  63. package/.agents/scripts/lib/config-settings-schema-delivery.js +2 -2
  64. package/.agents/scripts/lib/config-settings-schema-quality.js +1 -1
  65. package/.agents/scripts/lib/config-settings-schema.js +3 -3
  66. package/.agents/scripts/lib/detect-package-manager.js +72 -0
  67. package/.agents/scripts/lib/duplicate-search.js +1 -1
  68. package/.agents/scripts/lib/dynamic-workflow/capability.js +1 -1
  69. package/.agents/scripts/lib/epic-plan-clarity.js +1 -1
  70. package/.agents/scripts/lib/epic-plan-ideation.js +1 -1
  71. package/.agents/scripts/lib/errors/index.js +4 -4
  72. package/.agents/scripts/lib/feedback-loop/memory-freshness.js +1 -1
  73. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +1 -1
  74. package/.agents/scripts/lib/findings/classify-finding.js +1 -1
  75. package/.agents/scripts/lib/findings/promote-finding.js +10 -10
  76. package/.agents/scripts/lib/label-constants.js +3 -4
  77. package/.agents/scripts/lib/label-taxonomy.js +5 -10
  78. package/.agents/scripts/lib/onboard/detect-stack.js +10 -10
  79. package/.agents/scripts/lib/onboard/init-tail.js +218 -0
  80. package/.agents/scripts/lib/onboard/scaffold-docs.js +18 -3
  81. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +1 -1
  82. package/.agents/scripts/lib/orchestration/code-review.js +5 -5
  83. package/.agents/scripts/lib/orchestration/context-hydration-engine.js +8 -9
  84. package/.agents/scripts/lib/orchestration/dependency-analyzer.js +3 -3
  85. package/.agents/scripts/lib/orchestration/detectors-phase.js +2 -2
  86. package/.agents/scripts/lib/orchestration/dispatch-engine.js +30 -38
  87. package/.agents/scripts/lib/orchestration/dispatch-pipeline.js +9 -25
  88. package/.agents/scripts/lib/orchestration/epic-cleanup.js +1 -1
  89. package/.agents/scripts/lib/orchestration/epic-deliver-lease-guard.js +8 -8
  90. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/creation.js +1 -1
  91. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/dag.js +7 -21
  92. package/.agents/scripts/lib/orchestration/epic-plan-decompose/phases/diagnostics.js +3 -3
  93. package/.agents/scripts/lib/orchestration/epic-plan-lease-guard.js +26 -13
  94. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/plan-epic.js +1 -1
  95. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/prompts.js +1 -1
  96. package/.agents/scripts/lib/orchestration/epic-plan-spec/phases/run-spec-phase.js +2 -2
  97. package/.agents/scripts/lib/orchestration/epic-plan-state-store.js +1 -1
  98. package/.agents/scripts/lib/orchestration/epic-run-state-store.js +3 -3
  99. package/.agents/scripts/lib/orchestration/epic-runner/concurrency-gate.js +4 -4
  100. package/.agents/scripts/lib/orchestration/epic-runner/deliver-phases.js +3 -3
  101. package/.agents/scripts/lib/orchestration/epic-runner/phases/build-wave-dag.js +6 -21
  102. package/.agents/scripts/lib/orchestration/epic-runner/phases/snapshot.js +7 -7
  103. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/composition.js +1 -1
  104. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/signals.js +2 -2
  105. package/.agents/scripts/lib/orchestration/epic-runner/progress-reporter/transport.js +4 -4
  106. package/.agents/scripts/lib/orchestration/epic-runner/story-launcher.js +4 -4
  107. package/.agents/scripts/lib/orchestration/epic-runner/story-run-progress-writer.js +8 -8
  108. package/.agents/scripts/lib/orchestration/epic-runner/sub-agent-return.js +4 -4
  109. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-apply.js +7 -15
  110. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-diff.js +72 -41
  111. package/.agents/scripts/lib/orchestration/epic-spec-reconciler-ops.js +2 -4
  112. package/.agents/scripts/lib/orchestration/file-assumptions.js +2 -2
  113. package/.agents/scripts/lib/orchestration/finalize/close-planning-tickets.js +1 -1
  114. package/.agents/scripts/lib/orchestration/finalize/open-or-locate-pr.js +2 -2
  115. package/.agents/scripts/lib/orchestration/finalize/sanitize-skip-ci.js +1 -1
  116. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +3 -3
  117. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-dispatch-end.js +1 -1
  118. package/.agents/scripts/lib/orchestration/lifecycle/emit-story-heartbeat.js +1 -1
  119. package/.agents/scripts/lib/orchestration/lifecycle/listeners/README.md +1 -1
  120. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-armer.js +1 -1
  121. package/.agents/scripts/lib/orchestration/lifecycle/listeners/automerge-predicate.js +1 -1
  122. package/.agents/scripts/lib/orchestration/lifecycle/listeners/branch-cleaner.js +1 -1
  123. package/.agents/scripts/lib/orchestration/lifecycle/listeners/finalizer.js +1 -1
  124. package/.agents/scripts/lib/orchestration/lifecycle/listeners/index.js +1 -1
  125. package/.agents/scripts/lib/orchestration/lifecycle/listeners/merge-watcher.js +1 -1
  126. package/.agents/scripts/lib/orchestration/lifecycle/listeners/notify-dispatcher.js +1 -1
  127. package/.agents/scripts/lib/orchestration/lifecycle/listeners/watcher.js +1 -1
  128. package/.agents/scripts/lib/orchestration/manifest-builder.js +5 -5
  129. package/.agents/scripts/lib/orchestration/parked-follow-ons.js +2 -2
  130. package/.agents/scripts/lib/orchestration/plan-runner/plan-router.js +5 -5
  131. package/.agents/scripts/lib/orchestration/post-merge/phases/ticket-closure.js +3 -3
  132. package/.agents/scripts/lib/orchestration/preflight-cache.js +1 -1
  133. package/.agents/scripts/lib/orchestration/recurring-failure-detector.js +1 -1
  134. package/.agents/scripts/lib/orchestration/retro/phases/compose-body.js +1 -1
  135. package/.agents/scripts/lib/orchestration/retro/phases/gather-signals.js +2 -2
  136. package/.agents/scripts/lib/orchestration/retro-runner.js +3 -3
  137. package/.agents/scripts/lib/orchestration/review-depth.js +1 -1
  138. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +1 -1
  139. package/.agents/scripts/lib/orchestration/spec-freshness.js +1 -1
  140. package/.agents/scripts/lib/orchestration/spec-renderer.js +36 -73
  141. package/.agents/scripts/lib/orchestration/spec-section-validator.js +1 -1
  142. package/.agents/scripts/lib/orchestration/story-close/baseline-friction-body.js +1 -1
  143. package/.agents/scripts/lib/orchestration/story-close/phases/locked-pipeline.js +2 -2
  144. package/.agents/scripts/lib/orchestration/task-body-validator.js +6 -6
  145. package/.agents/scripts/lib/orchestration/ticket-lease.js +1 -1
  146. package/.agents/scripts/lib/orchestration/ticket-validator-conflicts.js +2 -2
  147. package/.agents/scripts/lib/orchestration/ticket-validator-sizing.js +1 -10
  148. package/.agents/scripts/lib/orchestration/ticket-validator.js +25 -70
  149. package/.agents/scripts/lib/orchestration/ticketing/bulk.js +5 -12
  150. package/.agents/scripts/lib/orchestration/ticketing/reads.js +8 -8
  151. package/.agents/scripts/lib/orchestration/ticketing/state.js +3 -3
  152. package/.agents/scripts/lib/orchestration/wave-record-notifications.js +2 -2
  153. package/.agents/scripts/lib/orchestration/wave-record-projection.js +1 -1
  154. package/.agents/scripts/lib/plan-phase-cleanup.js +1 -1
  155. package/.agents/scripts/lib/preflight-runner.js +1 -1
  156. package/.agents/scripts/lib/presentation/dispatch-manifest-render.js +4 -5
  157. package/.agents/scripts/lib/presentation/manifest-builder.js +28 -34
  158. package/.agents/scripts/lib/presentation/manifest-formatter.js +3 -4
  159. package/.agents/scripts/lib/presentation/manifest-helpers.js +1 -1
  160. package/.agents/scripts/lib/presentation/manifest-procedures.js +4 -4
  161. package/.agents/scripts/lib/presentation/manifest-render-waves.js +4 -23
  162. package/.agents/scripts/lib/presentation/manifest-renderer.js +1 -1
  163. package/.agents/scripts/lib/presentation/manifest-story-views.js +2 -11
  164. package/.agents/scripts/lib/runtime-deps/preflight.js +6 -6
  165. package/.agents/scripts/lib/signals/schema.js +1 -1
  166. package/.agents/scripts/lib/spec/index.js +1 -1
  167. package/.agents/scripts/lib/spec/loader.js +2 -2
  168. package/.agents/scripts/lib/spec/state.js +7 -16
  169. package/.agents/scripts/lib/story-init/context-resolver.js +3 -3
  170. package/.agents/scripts/lib/story-init/state-transitioner.js +2 -2
  171. package/.agents/scripts/lib/story-init/task-graph-builder.js +7 -7
  172. package/.agents/scripts/lib/story-lifecycle.js +8 -8
  173. package/.agents/scripts/lib/story-plan.js +1 -1
  174. package/.agents/scripts/lib/templates/decomposer-prompts.js +59 -52
  175. package/.agents/scripts/lib/wave-runner/tick.js +1 -1
  176. package/.agents/scripts/lib/worktree/node-modules-strategy.js +5 -2
  177. package/.agents/scripts/lifecycle-emit-story-dispatch.js +1 -1
  178. package/.agents/scripts/lifecycle-emit.js +1 -1
  179. package/.agents/scripts/providers/github/board-add.js +1 -1
  180. package/.agents/scripts/providers/github/errors.js +1 -1
  181. package/.agents/scripts/providers/github/mappers.js +2 -2
  182. package/.agents/scripts/providers/github/tickets.js +4 -4
  183. package/.agents/scripts/resync-status-column.js +1 -1
  184. package/.agents/scripts/retro-run.js +2 -2
  185. package/.agents/scripts/run-lint.js +1 -1
  186. package/.agents/scripts/single-story-init.js +1 -1
  187. package/.agents/scripts/stories-wave-tick.js +5 -5
  188. package/.agents/scripts/story-close.js +1 -1
  189. package/.agents/scripts/story-init.js +13 -16
  190. package/.agents/scripts/story-phase.js +5 -5
  191. package/.agents/scripts/story-plan.js +3 -3
  192. package/.agents/scripts/sync-branch-from-base.js +1 -1
  193. package/.agents/scripts/validate-docs-freshness.js +1 -1
  194. package/.agents/scripts/wave-tick.js +1 -1
  195. package/.agents/skills/core/analyze-execution/SKILL.md +2 -2
  196. package/.agents/skills/core/epic-plan-consolidate/SKILL.md +21 -26
  197. package/.agents/skills/core/epic-plan-decompose-author/SKILL.md +23 -56
  198. package/.agents/skills/core/epic-plan-spec-author/SKILL.md +4 -4
  199. package/.agents/skills/core/hydrate-context/SKILL.md +2 -2
  200. package/.agents/skills/core/idea-refinement/SKILL.md +4 -4
  201. package/.agents/skills/core/knowledge-transfer/SKILL.md +2 -2
  202. package/.agents/skills/core/planning-and-task-breakdown/SKILL.md +1 -1
  203. package/.agents/skills/core/scope-triage/SKILL.md +9 -10
  204. package/.agents/skills/core/using-agent-skills/SKILL.md +1 -1
  205. package/.agents/skills/skills.index.json +7 -7
  206. package/.agents/templates/agent-protocol.md +2 -2
  207. package/.agents/workflows/agents-update.md +16 -31
  208. package/.agents/workflows/audit-architecture.md +2 -2
  209. package/.agents/workflows/audit-clean-code.md +2 -2
  210. package/.agents/workflows/audit-dependencies.md +1 -1
  211. package/.agents/workflows/audit-devops.md +1 -1
  212. package/.agents/workflows/audit-documentation.md +2 -2
  213. package/.agents/workflows/audit-lighthouse.md +1 -1
  214. package/.agents/workflows/audit-performance.md +2 -2
  215. package/.agents/workflows/audit-privacy.md +1 -1
  216. package/.agents/workflows/audit-quality.md +2 -2
  217. package/.agents/workflows/audit-security.md +2 -2
  218. package/.agents/workflows/audit-seo.md +1 -1
  219. package/.agents/workflows/audit-sre.md +1 -1
  220. package/.agents/workflows/audit-to-stories.md +10 -10
  221. package/.agents/workflows/audit-ux-ui.md +1 -1
  222. package/.agents/workflows/deliver.md +85 -0
  223. package/.agents/workflows/explain.md +3 -3
  224. package/.agents/workflows/git-merge-pr.md +1 -1
  225. package/.agents/workflows/git-pr-all.md +13 -10
  226. package/.agents/workflows/git-push.md +6 -3
  227. package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
  228. package/.agents/workflows/helpers/acceptance-self-eval.md +1 -1
  229. package/.agents/workflows/helpers/agents-sync-config.md +3 -2
  230. package/.agents/workflows/helpers/code-review.md +5 -5
  231. package/.agents/workflows/{epic-deliver.md → helpers/deliver-epic.md} +43 -43
  232. package/.agents/workflows/{story-deliver.md → helpers/deliver-stories.md} +25 -25
  233. package/.agents/workflows/helpers/diagnose.md +1 -1
  234. package/.agents/workflows/helpers/epic-audit.md +6 -6
  235. package/.agents/workflows/helpers/epic-deliver-story.md +13 -13
  236. package/.agents/workflows/helpers/epic-plan-decompose.md +23 -23
  237. package/.agents/workflows/helpers/epic-plan-spec.md +6 -6
  238. package/.agents/workflows/helpers/epic-testing.md +3 -3
  239. package/.agents/workflows/helpers/parallel-tooling.md +1 -1
  240. package/.agents/workflows/{epic-plan.md → helpers/plan-epic.md} +84 -84
  241. package/.agents/workflows/{story-plan.md → helpers/plan-story.md} +43 -43
  242. package/.agents/workflows/helpers/signals.md +1 -1
  243. package/.agents/workflows/helpers/single-story-deliver.md +11 -11
  244. package/.agents/workflows/helpers/worktree-lifecycle.md +18 -18
  245. package/.agents/workflows/plan.md +131 -0
  246. package/.agents/workflows/qa-explore.md +1 -1
  247. package/.agents/workflows/qa-run-harness.md +1 -1
  248. package/README.md +19 -39
  249. package/bin/mandrel.js +235 -16
  250. package/docs/CHANGELOG.md +1173 -0
  251. package/lib/cli/doctor.js +45 -3
  252. package/lib/cli/init.js +97 -36
  253. package/lib/cli/registry.js +41 -145
  254. package/lib/cli/sync.js +122 -23
  255. package/lib/cli/uninstall.js +42 -7
  256. package/lib/cli/update.js +524 -210
  257. package/lib/cli/version-helpers.js +59 -0
  258. package/package.json +7 -6
  259. package/.agents/scripts/lib/orchestration/reconciler.js +0 -137
  260. package/.agents/workflows/onboard.md +0 -208
  261. package/lib/cli/__tests__/migrate.test.js +0 -268
  262. package/lib/cli/__tests__/sync-local-zone.test.js +0 -247
  263. package/lib/cli/__tests__/sync.test.js +0 -372
  264. package/lib/cli/__tests__/update-major.test.js +0 -217
  265. package/lib/cli/__tests__/update.test.js +0 -696
  266. package/lib/cli/__tests__/version-check.test.js +0 -398
  267. package/lib/migrations/__tests__/index.test.js +0 -216
@@ -7,7 +7,7 @@ description: >-
7
7
  # Code Review (helper)
8
8
 
9
9
  > **Helper module.** Not a slash command. Invoked automatically from
10
- > `/story-deliver` (Story scope) and `/epic-deliver` Phase 5 (Epic scope).
10
+ > `/deliver` (Story scope) and `/deliver` Phase 5 (Epic scope).
11
11
  > To run a review directly, invoke the parent workflow — operators do not
12
12
  > call this helper by hand.
13
13
 
@@ -17,7 +17,7 @@ is merged upstream. It runs in two scopes:
17
17
  - **Story scope** — reviews the diff between a Story branch and its parent
18
18
  Epic branch, before `story-close.js` merges the Story into the Epic.
19
19
  - **Epic scope** — reviews the cumulative diff between an Epic branch and
20
- `main`, before `/epic-deliver` opens the integration pull request.
20
+ `main`, before `/deliver` opens the integration pull request.
21
21
 
22
22
  > **Persona**: `architect` · **Skills**: `core/code-review-and-quality`,
23
23
  > `core/security-and-hardening`
@@ -43,7 +43,7 @@ the argument envelope.
43
43
 
44
44
  `depth` is the risk-derived thoroughness lever introduced by Story #3876 and
45
45
  made a live consumed signal end to end by Story #3937. The Epic caller
46
- (`/epic-deliver` Phase 5) resolves it from the Epic's judged `planningRisk`
46
+ (`/deliver` Phase 5) resolves it from the Epic's judged `planningRisk`
47
47
  envelope via
48
48
  [`resolveReviewDepthForEpic`](../../scripts/lib/orchestration/code-review.js)
49
49
  (`high` → `deep`, `low` → `light`, everything else — including a missing
@@ -54,7 +54,7 @@ It is an **input-only** signal: it changes *how thorough* the review is, never
54
54
  the findings envelope (`{ status, severity, posted, report, halted,
55
55
  blockerReason }`) nor the posted `code-review` structured-comment body. An
56
56
  absent or malformed `depth` is treated as `standard`, so an Epic that skipped
57
- `/epic-plan` still gets a passing review with no new failure mode.
57
+ `/plan` still gets a passing review with no new failure mode.
58
58
 
59
59
  How each tier changes the review protocol:
60
60
 
@@ -307,7 +307,7 @@ When `selectedAudits` is non-empty:
307
307
  2. **Append** a `## Cross-phase re-check` section to the **existing**
308
308
  `audit-results` structured comment on the Epic ticket. Do **not** post
309
309
  a new comment; the comment is idempotent and downstream consumers
310
- (the code-review trim, `/epic-deliver` Pillar 2, the retro helper)
310
+ (the code-review trim, `/deliver` Pillar 2, the retro helper)
311
311
  read it once. The append carries the re-checked lens names, the new
312
312
  findings (if any), and the focused-fix commit SHAs that triggered the
313
313
  re-run, so reviewers can trace each finding back to the change set
@@ -10,16 +10,16 @@ description: >-
10
10
  inspects the surface area.
11
11
  ---
12
12
 
13
- # /epic-deliver #[Epic ID]
13
+ # helpers/deliver-epic Epic delivery path (invoked by /deliver)
14
14
 
15
15
  ## Overview
16
16
 
17
- `/epic-deliver` is the **single SDL execution command** in the 5.40 surface.
17
+ `/deliver` is the **single SDL execution command** in the 5.40 surface.
18
18
  It opens a PR against `main` and auto-merges when every signal certifies a
19
19
  clean run; otherwise it falls back to the operator-merges-button path.
20
20
 
21
21
  ```text
22
- /epic-deliver <epicId>
22
+ /deliver <epicId>
23
23
  → Phase 1 — prepare (epic-deliver-prepare.js)
24
24
  → Phase 2 — wave loop (wave-tick.js + Agent fan-out × concurrencyCap)
25
25
  → Phase 3 — close-validation (lint + test + ratchets on epic/<id>)
@@ -33,8 +33,8 @@ clean run; otherwise it falls back to the operator-merges-button path.
33
33
  ```
34
34
 
35
35
  The argument is always an Epic ID (`type::epic`). Story IDs go to
36
- [`/story-deliver`](story-deliver.md) (standalone) or the
37
- [`helpers/epic-deliver-story`](helpers/epic-deliver-story.md) helper
36
+ [`/deliver`](deliver-stories.md) (standalone) or the
37
+ [`helpers/epic-deliver-story`](epic-deliver-story.md) helper
38
38
  (Epic-attached, invoked by this workflow's fan-out); Tasks are not directly
39
39
  executable.
40
40
  Story dispatch is in-session via the Agent tool — no subprocess is
@@ -45,11 +45,11 @@ spawned.
45
45
  ## Arguments
46
46
 
47
47
  ```text
48
- /epic-deliver <epicId> [--skip-epic-audit] [--skip-code-review] [--skip-retro] [--full-retro]
48
+ /deliver <epicId> [--skip-epic-audit] [--skip-code-review] [--skip-retro] [--full-retro]
49
49
  ```
50
50
 
51
51
  - `epicId` — must carry `type::epic`. Otherwise STOP and tell the operator
52
- to use `/story-deliver <id>` (standalone Story) or open the parent Epic.
52
+ to use `/deliver <id>` (standalone Story) or open the parent Epic.
53
53
  - `--skip-epic-audit` — skip Phase 4 (log the override). Use only when the
54
54
  change-set audits are known to be irrelevant (e.g., docs-only Epic).
55
55
  - `--skip-code-review` — skip Phase 5 (log the override).
@@ -79,7 +79,7 @@ Every other runtime modifier is sourced from the Epic's labels or from
79
79
  typed events on the in-session lifecycle bus; a fixed roster of
80
80
  listeners performs the side effects. Phase 7, 8.5, and 9 each fire
81
81
  exactly one lifecycle event via the generic
82
- [`lifecycle-emit.js`](../scripts/lifecycle-emit.js) CLI
82
+ [`lifecycle-emit.js`](../../scripts/lifecycle-emit.js) CLI
83
83
  (`--event epic.close.end` / `--event epic.automerge.start` /
84
84
  `--event epic.merge.armed`); the matching listener chain runs the
85
85
  bus-driven side effects (acceptance reconcile, automerge-armer,
@@ -88,20 +88,20 @@ Every other runtime modifier is sourced from the Epic's labels or from
88
88
  the canonical manual sequence and `finalizer.js` for the listener's
89
89
  no-op disclaimer. The append-only NDJSON ledger at
90
90
  `temp/epic-<id>/lifecycle.ndjson` is the resume target. See
91
- [`docs/LIFECYCLE.md`](../../docs/LIFECYCLE.md) for the bus
91
+ [`docs/LIFECYCLE.md`](../../../docs/LIFECYCLE.md) for the bus
92
92
  contract, event taxonomy, ledger format, and listener model.
93
93
 
94
- > **Hierarchy.** `/epic-deliver` operates over the 3-tier hierarchy
95
- > (Epic → Feature → Story). The fan-out is one `Agent` tool call per
94
+ > **Hierarchy.** `/deliver` operates over the 2-tier hierarchy
95
+ > (Epic → Story). The fan-out is one `Agent` tool call per
96
96
  > Story per wave (§ 2b); Story branches merge into `epic/<id>` with
97
97
  > `--no-ff` via `story-close.js`; the close-validation chain
98
98
  > (Phase 3), epic-audit, code-review, retro, finalize, and auto-merge
99
99
  > gates all operate on Story-level units.
100
- > [`helpers/epic-deliver-story`](helpers/epic-deliver-story.md) runs a
100
+ > [`helpers/epic-deliver-story`](epic-deliver-story.md) runs a
101
101
  > single Story-implementation phase per Story against the Story's
102
102
  > inline `acceptance[]` / `verify[]` fields. See
103
- > [`.agents/instructions.md` § 5.D](../instructions.md) and
104
- > [`.agents/docs/SDLC.md` § Ticket hierarchy](../docs/SDLC.md) for the full
103
+ > [`.agents/instructions.md` § 5.D](../../instructions.md) and
104
+ > [`.agents/docs/SDLC.md` § Ticket hierarchy](../../docs/SDLC.md) for the full
105
105
  > contract.
106
106
 
107
107
  ---
@@ -132,7 +132,7 @@ flip the Epic to `agent::blocked`, surface the envelope in chat for the
132
132
  operator, and halt before Phase 1's `epic-deliver-prepare.js` call.
133
133
  Resume after the operator unblocks (raising the threshold in
134
134
  `.agentrc.json`, splitting the Epic, or accepting the cost) by re-running
135
- `/epic-deliver <epicId>` — the preflight is idempotent and the second
135
+ `/deliver <epicId>` — the preflight is idempotent and the second
136
136
  run upserts the same comment in place.
137
137
 
138
138
  Threshold defaults live in `delivery.preflight.*` in `.agentrc.json`
@@ -157,7 +157,7 @@ and upserts the `epic-run-state` checkpoint. Treat the printed JSON as
157
157
  > **Preflight guards (Story #3482 / F-workflow-guards).** Before the
158
158
  > snapshot phase runs — and before any worktree is created — prepare runs
159
159
  > two **fail-closed** guards
160
- > ([`lib/orchestration/epic-deliver-lease-guard.js`](../scripts/lib/orchestration/epic-deliver-lease-guard.js)):
160
+ > ([`lib/orchestration/epic-deliver-lease-guard.js`](../../scripts/lib/orchestration/epic-deliver-lease-guard.js)):
161
161
  >
162
162
  > 1. **Checkout safety.** Prepare refuses to start when the working tree is
163
163
  > dirty or HEAD is on a branch other than the expected one (`epic/<id>`
@@ -182,23 +182,23 @@ and upserts the `epic-run-state` checkpoint. Treat the printed JSON as
182
182
  > `epic-merge-lock.js` continues to serialize same-machine sessions.
183
183
  >
184
184
  > Both guards throw on failure, which `runAsCli` maps to `process.exit(1)`
185
- > per [`orchestration-error-handling.md`](../rules/orchestration-error-handling.md).
185
+ > per [`orchestration-error-handling.md`](../../rules/orchestration-error-handling.md).
186
186
 
187
187
  Once the preflight guards pass, the snapshot phase applies one more gate:
188
188
 
189
189
  > **Acceptance-spec start gate.** Before the wave loop fans out, the
190
190
  > snapshot phase
191
- > ([`lib/orchestration/epic-runner/phases/snapshot.js`](../scripts/lib/orchestration/epic-runner/phases/snapshot.js))
191
+ > ([`lib/orchestration/epic-runner/phases/snapshot.js`](../../scripts/lib/orchestration/epic-runner/phases/snapshot.js))
192
192
  > asserts that the Epic either carries the `acceptance::n-a` waiver
193
193
  > label **or** has a linked `context::acceptance-spec` ticket. The
194
194
  > ticket's GitHub state (open / closed) is **not** checked —
195
195
  > presence is sufficient, matching the PRD and Tech Spec contract.
196
- > The reviewer's OK during `/epic-plan` Phase 7 is the approval
196
+ > The reviewer's OK during `/plan` Phase 7 is the approval
197
197
  > signal, not a manual ticket-close action. Neither condition met →
198
198
  > the snapshot throws a clear error
199
199
  > (`[epic-deliver] Epic #<id> cannot launch: …`) and `runAsCli`
200
200
  > maps it to `process.exit(1)`. Operator remediation: either run
201
- > `/epic-plan` Phase 7 to author the spec, or apply the
201
+ > `/plan` Phase 7 to author the spec, or apply the
202
202
  > `acceptance::n-a` label to opt out.
203
203
 
204
204
  ---
@@ -206,7 +206,7 @@ Once the preflight guards pass, the snapshot phase applies one more gate:
206
206
  ## Phase 2 — Wave loop
207
207
 
208
208
  The wave-loop state machine lives in
209
- [`lib/wave-runner/tick.js`](../scripts/lib/wave-runner/tick.js) — one
209
+ [`lib/wave-runner/tick.js`](../../scripts/lib/wave-runner/tick.js) — one
210
210
  stateless `tick({ epic })` call returns one `WaveTickResult` describing
211
211
  the next action. The slash command's job is to call `tick()` via its CLI
212
212
  shim, dispatch from `nextAction.stories` via the Agent tool, persist the
@@ -243,7 +243,7 @@ only the two wave-window forensics signals that have a live consumer —
243
243
  `waveParallelism` report (and `wave-start` anchors span-tree Story spans).
244
244
  Story #3909 retired the write-only wave events with no reader (`wave-tick`,
245
245
  `epic-complete`) — they duplicated the checkpoint + rollup. The
246
- [`signals` helper](helpers/signals.md) (`node .agents/scripts/signals-view.js`)
246
+ [`signals` helper](signals.md) (`node .agents/scripts/signals-view.js`)
247
247
  renders the forensics signals in the span-tree view.
248
248
 
249
249
  ### 2b. Dispatch — fan out per-Story Agent calls
@@ -252,7 +252,7 @@ renders the forensics signals in the span-tree view.
252
252
  invoke `helpers/epic-deliver-story` yourself. Emit **one `Agent` tool call per
253
253
  Story** in `nextAction.stories` (even when `length === 1` — the
254
254
  parent-child boundary keeps the return-parser uniform). The *children*
255
- run [`helpers/epic-deliver-story`](helpers/epic-deliver-story.md). Use
255
+ run [`helpers/epic-deliver-story`](epic-deliver-story.md). Use
256
256
  `subagent_type: general-purpose`.
257
257
 
258
258
  Emit **one assistant turn** with **N parallel `Agent` calls** where
@@ -276,7 +276,7 @@ the cap, never wait for a whole batch before refilling.
276
276
  **Ledger the dispatch BEFORE the Agent call.** Immediately before each
277
277
  per-Story `Agent` tool call (one shell-out per Story, every attempt —
278
278
  including retries from a refill), invoke
279
- [`lifecycle-emit-story-dispatch.js`](../scripts/lifecycle-emit-story-dispatch.js)
279
+ [`lifecycle-emit-story-dispatch.js`](../../scripts/lifecycle-emit-story-dispatch.js)
280
280
  so the lifecycle ledger durably records the dispatch attempt. The
281
281
  emit must happen **before** the Agent call fires — never after — so
282
282
  that a host-process crash mid-Agent leaves a `story.dispatch.start`
@@ -425,7 +425,7 @@ one in-flight Story has been silent for ≥ the threshold:
425
425
 
426
426
  **On a stall.** When the watchdog exits non-zero, post the envelope
427
427
  verbatim as a `wave-stall` structured comment on the Epic (use
428
- [`post-structured-comment.js`](../scripts/post-structured-comment.js)
428
+ [`post-structured-comment.js`](../../scripts/post-structured-comment.js)
429
429
  with `--kind wave-stall`), then re-evaluate the affected Stories: if a
430
430
  child sub-agent has crashed (no `story.dispatch.end`, no recent
431
431
  heartbeat, no commit on `story-<id>`), re-dispatch the Story per § 2b
@@ -465,14 +465,14 @@ the Epic branch; if any drifts, refresh and commit
465
465
  ## Phase 4 — Epic audit (change-set lenses)
466
466
 
467
467
  Skip when `--skip-epic-audit`. Otherwise auto-invoke
468
- [`helpers/epic-audit.md`](helpers/epic-audit.md) inline. The helper runs
469
- [`epic-audit-prepare.js`](../scripts/epic-audit-prepare.js) to ask the
470
- [`selectAudits`](../scripts/lib/audit-suite/index.js) SDK which lenses fire
468
+ [`helpers/epic-audit.md`](epic-audit.md) inline. The helper runs
469
+ [`epic-audit-prepare.js`](../../scripts/epic-audit-prepare.js) to ask the
470
+ [`selectAudits`](../../scripts/lib/audit-suite/index.js) SDK which lenses fire
471
471
  at the `gate3` close gate, **unions in the model-judged risk-routed lenses**
472
472
  (Story #3889 — `epic-audit-prepare.js` reads the Epic's `planningRisk`
473
473
  envelope off the `epic-plan-state` checkpoint and maps each high-risk axis to
474
474
  its lens via `resolveAuditLenses`), then dispatches each selected lens through
475
- [`runAuditSuite`](../scripts/lib/audit-suite/index.js). A high-risk Epic
475
+ [`runAuditSuite`](../../scripts/lib/audit-suite/index.js). A high-risk Epic
476
476
  therefore auto-runs its mapped lenses (e.g. a `security`-axis Epic runs
477
477
  `audit-security`) even when the change set alone did not select them; a
478
478
  low-risk Epic adds nothing. Findings are persisted as an `audit-results`
@@ -492,7 +492,7 @@ structured comment on the Epic.
492
492
 
493
493
  Skip when `--skip-code-review`. Otherwise resolve the **risk-derived review
494
494
  depth** for this Epic, then auto-invoke
495
- [`helpers/code-review.md`](helpers/code-review.md) inline (read-only audit)
495
+ [`helpers/code-review.md`](code-review.md) inline (read-only audit)
496
496
  with the argument envelope `{ scope: 'epic', ticketId: <epicId>, baseRef:
497
497
  'main', headRef: 'epic/<epicId>', depth: <reviewDepth> }`. The helper
498
498
  persists findings as a `code-review` structured comment on the Epic.
@@ -500,11 +500,11 @@ persists findings as a `code-review` structured comment on the Epic.
500
500
  The `depth` is the live epic-scope producer for Story #3876's review-depth
501
501
  lever (Story #3937). Resolve it from the Epic's judged risk envelope the same
502
502
  best-effort way Phase 4 routes audit lenses — via
503
- [`resolveReviewDepthForEpic`](../scripts/lib/orchestration/code-review.js),
503
+ [`resolveReviewDepthForEpic`](../../scripts/lib/orchestration/code-review.js),
504
504
  which reads `planningRisk.overallLevel` off the Epic's `epic-plan-state`
505
505
  checkpoint and maps it: `high` → `deep`, `low` → `light`, everything else
506
506
  (including a missing/unparseable checkpoint, or an Epic that skipped
507
- `/epic-plan`) → `standard`. The helper threads `depth` into `runCodeReview`,
507
+ `/plan`) → `standard`. The helper threads `depth` into `runCodeReview`,
508
508
  which forwards it to every provider's `runReview` input; the LLM-backed
509
509
  providers (codex, security-review, ultrareview) render it into the prompt they
510
510
  emit so a high-risk Epic gets a deeper adversarial pass and a low-risk one a
@@ -527,12 +527,12 @@ runner via its CLI wrapper:
527
527
  node .agents/scripts/retro-run.js --epic <epicId>
528
528
  ```
529
529
 
530
- [`retro-run.js`](../scripts/retro-run.js) resolves the config/provider,
530
+ [`retro-run.js`](../../scripts/retro-run.js) resolves the config/provider,
531
531
  constructs a lifecycle bus with a `LedgerWriter` (so the run's
532
532
  `retro.start` / `retro.end` boundaries land in
533
533
  `temp/epic-<epicId>/lifecycle.ndjson`), and calls `runRetro` — the
534
534
  canonical compose-and-post surface at
535
- [`.agents/scripts/lib/orchestration/retro-runner.js`](../scripts/lib/orchestration/retro-runner.js).
535
+ [`.agents/scripts/lib/orchestration/retro-runner.js`](../../scripts/lib/orchestration/retro-runner.js).
536
536
  Propagate `--full-retro` to bypass the compact-path heuristic.
537
537
 
538
538
  Retro fires here (before the PR opens) so it stays in the operator's
@@ -541,7 +541,7 @@ local session with full env access (env vars, credentials, MCP).
541
541
  After the GitHub upsert succeeds, the retro body is also **mirrored
542
542
  locally** to the per-Epic temp tree at `temp/epic-<epicId>/retro.md`
543
543
  (path resolved via
544
- [`lib/config/temp-paths.js`](../scripts/lib/config/temp-paths.js)'s
544
+ [`lib/config/temp-paths.js`](../../scripts/lib/config/temp-paths.js)'s
545
545
  `epicRetroMirrorPath`, which honours `project.paths.tempRoot`).
546
546
  Operators can read the retro without re-fetching from GitHub. GitHub
547
547
  remains the source of truth — a mirror-write failure only logs a warn
@@ -592,16 +592,16 @@ responsibility below runs inside the listener chain — the operator
592
592
  shells nothing manually. The `Finalizer` listener (Story #2894 —
593
593
  bus-owned finalize) composes three helpers under
594
594
  `.agents/scripts/lib/orchestration/finalize/` and emits the canonical
595
- chain.** Treat this section as a runtime contract — `/epic-deliver`
595
+ chain.** Treat this section as a runtime contract — `/deliver`
596
596
  just fires the emit and reads the resulting ledger.
597
597
 
598
598
  1. **Acceptance-spec reconciliation — bus-driven.** The
599
599
  `AcceptanceReconciler` listener invokes
600
- [`acceptance-spec-reconciler.js`](../scripts/acceptance-spec-reconciler.js)
600
+ [`acceptance-spec-reconciler.js`](../../scripts/acceptance-spec-reconciler.js)
601
601
  to diff the AC IDs declared in the linked `context::acceptance-spec`
602
602
  body against `@ac-*` / `@pending` tags in `tests/features/**`. A
603
603
  non-OK reconciliation throws (per
604
- [`rules/orchestration-error-handling.md`](../rules/orchestration-error-handling.md)),
604
+ [`rules/orchestration-error-handling.md`](../../rules/orchestration-error-handling.md)),
605
605
  aborting finalize **before** any PR is opened or planning artifacts
606
606
  are closed — so the PRD, Tech Spec, and Acceptance Spec stay open
607
607
  until the AC coverage gap is fixed. The reconciler returns
@@ -611,10 +611,10 @@ just fires the emit and reads the resulting ledger.
611
611
  start gate in Phase 1 would normally catch that first).
612
612
  2. **PR open — bus-driven (Story #2894).** On
613
613
  `acceptance.reconcile.ok` the `Finalizer` listener invokes
614
- [`openOrLocatePr`](../scripts/lib/orchestration/finalize/open-or-locate-pr.js)
614
+ [`openOrLocatePr`](../../scripts/lib/orchestration/finalize/open-or-locate-pr.js)
615
615
  with `{ epicId, headBranch: 'epic/<id>', baseBranch: 'main' }`.
616
616
  The helper probes for an existing open PR on the head branch
617
- first (idempotent locate path — a re-run of `/epic-deliver`
617
+ first (idempotent locate path — a re-run of `/deliver`
618
618
  on the same branch short-circuits without opening a duplicate)
619
619
  and only opens a new PR when none exists. The listener then
620
620
  emits `pr.created` → `epic.finalize.end` and **stops** (Story
@@ -627,17 +627,17 @@ just fires the emit and reads the resulting ledger.
627
627
  driven later from the gated watch path (`pr.created` → `Watcher`
628
628
  → `epic.watch.end` → `AutomergePredicate` → `epic.merge.ready` →
629
629
  `AutomergeArmer`) re-entered in Phase 8.5. The merge-lockout rule
630
- in [`check-lifecycle-lint.js`](../scripts/check-lifecycle-lint.js)
630
+ in [`check-lifecycle-lint.js`](../../scripts/check-lifecycle-lint.js)
631
631
  keeps `gh pr merge --auto --squash --delete-branch` confined to
632
632
  `AutomergeArmer` — Phase 7 never shells the merge command.
633
633
  3. **Planning-artifact close + hand-off — bus-driven (Story
634
634
  #2894).** After `openOrLocatePr` returns, the `Finalizer` chains
635
- [`closePlanningTickets`](../scripts/lib/orchestration/finalize/close-planning-tickets.js)
635
+ [`closePlanningTickets`](../../scripts/lib/orchestration/finalize/close-planning-tickets.js)
636
636
  to close the three planning context tickets
637
637
  (`context::prd`, `context::tech-spec`, `context::acceptance-spec`)
638
638
  so the Epic's `Closes #<id>` auto-close path is not blocked by
639
639
  open sub-issues, then
640
- [`postHandoffComment`](../scripts/lib/orchestration/finalize/post-handoff-comment.js)
640
+ [`postHandoffComment`](../../scripts/lib/orchestration/finalize/post-handoff-comment.js)
641
641
  to upsert the canonical `epic-handoff` structured comment naming
642
642
  the PR URL. Both helpers are idempotent — already-closed tickets
643
643
  are counted under `alreadyClosed`, and the handoff comment is
@@ -4,20 +4,20 @@ description: >-
4
4
  computes a dependency-aware wave plan via `stories-wave-tick.js`, asks the
5
5
  operator to confirm the plan, then fans out parallel Agent calls per wave
6
6
  — each delegating to `helpers/single-story-deliver`. Stories without an
7
- `Epic: #N` reference only; Epic-attached Stories use `/epic-deliver`.
7
+ `Epic: #N` reference only; Epic-attached Stories use `/deliver`.
8
8
  ---
9
9
 
10
- # /story-deliver [Story IDs...]
10
+ # helpers/deliver-stories — multi-Story delivery path (invoked by /deliver)
11
11
 
12
12
  ## Overview
13
13
 
14
- `/story-deliver` is the **operator-facing multi-Story delivery command**. It
14
+ `/deliver` is the **operator-facing multi-Story delivery command**. It
15
15
  takes one or more Story IDs, builds a dependency-aware wave plan, optionally
16
16
  confirms it with the operator, and fans out one Agent call per Story per wave
17
17
  — parallel within each wave, serialised across waves.
18
18
 
19
19
  ```text
20
- /story-deliver 101 102 103
20
+ /deliver 101 102 103
21
21
  → Phase 0 — Validate input & build DAG
22
22
  → Phase 1 — stories-wave-tick.js → wave plan + operator confirmation
23
23
  → Phase 2 — for each wave:
@@ -26,22 +26,22 @@ confirms it with the operator, and fans out one Agent call per Story per wave
26
26
  → Phase 3 — Summary
27
27
  ```
28
28
 
29
- **When to use `/story-deliver` vs. other commands:**
29
+ **When to use `/deliver` vs. other commands:**
30
30
 
31
31
  | Scenario | Command |
32
32
  | --- | --- |
33
- | 1+ standalone Stories (no `Epic: #N` in body) | `/story-deliver <id> [<id>...]` |
33
+ | 1+ standalone Stories (no `Epic: #N` in body) | `/deliver <id> [<id>...]` |
34
34
  | Exactly one standalone Story (lighter path) | `/single-story-deliver <id>` |
35
- | Epic-attached Stories (have `Epic: #N`) | `/epic-deliver <epicId>` |
35
+ | Epic-attached Stories (have `Epic: #N`) | `/deliver <epicId>` |
36
36
 
37
- `/story-deliver` **refuses** Stories that carry an `Epic: #N` reference in
37
+ `/deliver` **refuses** Stories that carry an `Epic: #N` reference in
38
38
  their body. Those Stories belong to an Epic's dispatch manifest and must flow
39
- through `/epic-deliver`. Use `/single-story-deliver` for a single Epic-free
39
+ through `/deliver`. Use `/single-story-deliver` for a single Epic-free
40
40
  Story when you want the leaner one-story path without wave machinery.
41
41
 
42
42
  > **Concurrency cap.** The cap is resolved **deterministically in code** by
43
43
  > `stories-wave-tick.js` (Phase 1a) — the same `resolveConfig` + `getRunners`
44
- > seam `/epic-deliver` uses — and emitted as the `concurrencyCap` field on the
44
+ > seam `/deliver` uses — and emitted as the `concurrencyCap` field on the
45
45
  > `stories-wave-plan` envelope. The default is 3; override persistently via
46
46
  > `delivery.deliverRunner.concurrencyCap` in `.agentrc.json` (a
47
47
  > `.agentrc.local.json` override is honored) or per-run via the `--concurrency`
@@ -53,7 +53,7 @@ Story when you want the leaner one-story path without wave machinery.
53
53
  ## Arguments
54
54
 
55
55
  ```text
56
- /story-deliver <storyId> [<storyId> ...] [--dep <fromId>:<toId> ...] [--yes] [--concurrency <n>]
56
+ /deliver <storyId> [<storyId> ...] [--dep <fromId>:<toId> ...] [--yes] [--concurrency <n>]
57
57
  ```
58
58
 
59
59
  - `storyId` — One or more GitHub issue numbers carrying `type::story` and
@@ -79,7 +79,7 @@ For each supplied Story ID:
79
79
 
80
80
  1. Confirm the issue exists and carries the `type::story` label.
81
81
  2. Confirm the issue body does **not** contain an `Epic: #N` reference. If
82
- it does, STOP and tell the operator to use `/epic-deliver <epicId>`
82
+ it does, STOP and tell the operator to use `/deliver <epicId>`
83
83
  instead.
84
84
  3. Collect `blocked by #N` references between the supplied Story IDs.
85
85
  References to Story IDs outside the supplied set are advisory warnings
@@ -112,7 +112,7 @@ node .agents/scripts/stories-wave-tick.js --dag '<dag-json>'
112
112
  node .agents/scripts/stories-wave-tick.js --dag '<dag-json>' --concurrency <n>
113
113
  ```
114
114
 
115
- When the operator passed `--concurrency <n>` to `/story-deliver`, forward it
115
+ When the operator passed `--concurrency <n>` to `/deliver`, forward it
116
116
  verbatim to `stories-wave-tick.js`. The script resolves the cap from config
117
117
  (`delivery.deliverRunner.concurrencyCap`, default 3) and the override wins for
118
118
  that run.
@@ -184,7 +184,7 @@ envelope field is the single deterministic source.
184
184
  Each Agent call:
185
185
 
186
186
  1. Names the Story ID and instructs the child to invoke
187
- [`helpers/single-story-deliver`](helpers/single-story-deliver.md)
187
+ [`helpers/single-story-deliver`](single-story-deliver.md)
188
188
  for that Story.
189
189
  2. States the **return contract** (see § 2c).
190
190
  3. Reminds the child of the **non-interactive contract**: no clarifying
@@ -226,7 +226,7 @@ After every Story in a wave returns:
226
226
  - **Any `status === 'blocked'`** → STOP the wave loop. Post a summary
227
227
  of blocked Stories and their `blockerCommentId` references. Do not
228
228
  dispatch the next wave. Wait for the operator to resolve each blocker
229
- and re-run `/story-deliver` with the same set (already-done Stories
229
+ and re-run `/deliver` with the same set (already-done Stories
230
230
  will short-circuit because `single-story-close.js` is idempotent).
231
231
  - **Any `status === 'failed'`** → STOP the wave loop. Report the
232
232
  failures. The operator must fix the failing Stories before re-running.
@@ -238,7 +238,7 @@ After every Story in a wave returns:
238
238
  Print a final run summary:
239
239
 
240
240
  ```text
241
- /story-deliver — 3 Stories delivered in 2 waves
241
+ /deliver — 3 Stories delivered in 2 waves
242
242
 
243
243
  Wave 0: #101 ✅ done, #103 ✅ done
244
244
  Wave 1: #102 ✅ done
@@ -265,8 +265,8 @@ Story's suite is green and the close-validation gates already pass — and
265
265
  key is unset or `false`, story-deliver behaves exactly as documented above
266
266
  and this stage is skipped entirely.
267
267
 
268
- The stage adopts the [`refactorer`](../personas/refactorer.md) persona and the
269
- [`core/refactoring-discipline`](../skills/core/refactoring-discipline/SKILL.md)
268
+ The stage adopts the [`refactorer`](../../personas/refactorer.md) persona and the
269
+ [`core/refactoring-discipline`](../../skills/core/refactoring-discipline/SKILL.md)
270
270
  skill to drive a behaviour-preserving pass that lowers CRAP and removes
271
271
  duplication on the files the Story already touched:
272
272
 
@@ -277,7 +277,7 @@ duplication on the files the Story already touched:
277
277
  must be reverted.
278
278
  - **Advisory, not a gate.** This stage does **not** introduce a new
279
279
  close-validation gate and does **not** change the semantics of the existing
280
- [close-validation](../scripts/lib/close-validation/runner.js) chain (typecheck,
280
+ [close-validation](../../scripts/lib/close-validation/runner.js) chain (typecheck,
281
281
  lint, test, format, maintainability, coverage, crap). The canonical gates
282
282
  remain the single source of pass/fail at close; the refactor stage only adds
283
283
  an extra behaviour-preserving cleanup commit when enabled.
@@ -293,7 +293,7 @@ duplication on the files the Story already touched:
293
293
  `/single-story-deliver` is idempotent at every phase:
294
294
  `single-story-init.js` reuses an existing worktree and
295
295
  `single-story-close.js` short-circuits when the Story is already closed.
296
- Re-running `/story-deliver` with the same Story set after a partial
296
+ Re-running `/deliver` with the same Story set after a partial
297
297
  failure is safe — already-done Stories produce no-op outcomes; only the
298
298
  blocked or unstarted Stories execute.
299
299
 
@@ -313,15 +313,15 @@ blocked or unstarted Stories execute.
313
313
  `node .agents/scripts/update-ticket-state.js --ticket <id> --state <state>`.
314
314
  This CLI is the authoritative mechanism — there is no separate
315
315
  state-mutation MCP server to degrade from (see
316
- [`.agents/instructions.md` § 1.D](../instructions.md)).
316
+ [`.agents/instructions.md` § 1.D](../../instructions.md)).
317
317
 
318
318
  ---
319
319
 
320
320
  ## See also
321
321
 
322
- - [`helpers/single-story-deliver`](helpers/single-story-deliver.md) — the
322
+ - [`helpers/single-story-deliver`](single-story-deliver.md) — the
323
323
  per-Story worker this command delegates to.
324
- - [`/epic-deliver`](epic-deliver.md) — full Epic wave loop for
324
+ - [`/deliver`](deliver-epic.md) — full Epic wave loop for
325
325
  Epic-attached Stories.
326
- - [`helpers/epic-deliver-story`](helpers/epic-deliver-story.md) — the
327
- per-Story worker `/epic-deliver` uses internally.
326
+ - [`helpers/epic-deliver-story`](epic-deliver-story.md) — the
327
+ per-Story worker `/deliver` uses internally.
@@ -9,7 +9,7 @@ description: >-
9
9
 
10
10
  > **Helper, not a slash command.** Files under `workflows/helpers/` are not
11
11
  > projected into the mandrel plugin command tree. The same `lib/checks/` registry runs
12
- > automatically as preflight inside `/epic-deliver`, `/story-close`, and
12
+ > automatically as preflight inside `/deliver`, `/story-close`, and
13
13
  > `npm test` — this viewer exists only for ad-hoc inspection. Invoke the
14
14
  > backing script directly: `node .agents/scripts/diagnose.js [args]`.
15
15
 
@@ -8,8 +8,8 @@ description: >-
8
8
  # Epic Audit (helper)
9
9
 
10
10
  > **Helper module.** Not a slash command. Invoked automatically from
11
- > `/epic-deliver` Phase 4 once the wave loop completes (all Stories at
12
- > `agent::done`). To run an audit directly, use `/epic-deliver [Epic_ID]` — it
11
+ > `/deliver` Phase 4 once the wave loop completes (all Stories at
12
+ > `agent::done`). To run an audit directly, use `/deliver [Epic_ID]` — it
13
13
  > delegates here (or pass `--skip-epic-audit` to bypass).
14
14
 
15
15
  This helper runs the **change-set-aware audit pass** on an Epic branch
@@ -32,7 +32,7 @@ change-set selection. Both lens sources fire through the **same**
32
32
  `runAuditSuite` dispatch below — no new audit machinery.
33
33
 
34
34
  > **When to run**: After Phase 3 close-validation passes and before Phase 5
35
- > code-review. `/epic-deliver` invokes this automatically once the wave loop
35
+ > code-review. `/deliver` invokes this automatically once the wave loop
36
36
  > completes and all Stories reach `agent::done`.
37
37
  >
38
38
  > **Persona**: `architect` · **Skills**: `core/code-review-and-quality`,
@@ -94,7 +94,7 @@ resolved by the shared `resolveDepth` resolver from the Epic's model-judged
94
94
  risk envelope (`overallLevel` off the `epic-plan-state` checkpoint) folded
95
95
  with `changedFilesCount`: a high-risk **or** wide-footprint Epic resolves to
96
96
  `deep`, a low-risk small one to `light`, and everything else — including an
97
- Epic that skipped `/epic-plan` and has no checkpoint — to `standard`.
97
+ Epic that skipped `/plan` and has no checkpoint — to `standard`.
98
98
 
99
99
  Depth changes **how deeply** each lens runs, never **which** lenses fire:
100
100
 
@@ -274,8 +274,8 @@ The body MUST include:
274
274
  ### Severity gating
275
275
 
276
276
  - **Any 🔴 Critical Blocker** → STOP. Relay to the operator and let
277
- `/epic-deliver` Phase 4 record a manual intervention.
278
- - **Only 🟠/🟡/🟢** → log as non-blocking and return to `/epic-deliver`
277
+ `/deliver` Phase 4 record a manual intervention.
278
+ - **Only 🟠/🟡/🟢** → log as non-blocking and return to `/deliver`
279
279
  Phase 5 (code-review).
280
280
 
281
281
  ## Constraints
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  description: >-
3
3
  Helper — not a slash command. Execute one Epic-attached Story end-to-end on
4
- behalf of `/epic-deliver`. Calls `story-init.js`, `cd`s into the worktree,
4
+ behalf of `/deliver`. Calls `story-init.js`, `cd`s into the worktree,
5
5
  runs the Story-implementation phase against the inline acceptance[] /
6
6
  verify[] arrays, writes a `story-run-progress` snapshot per transition, and
7
7
  finally calls `story-close.js` to merge into the Epic branch and reap the
@@ -13,19 +13,19 @@ caller: epic-deliver.md
13
13
 
14
14
  > **Not a slash command.** This file lives in `helpers/` and is not projected
15
15
  > into the mandrel plugin command tree. It is invoked exclusively by the
16
- > [`/epic-deliver`](../epic-deliver.md) per-wave fan-out via an `Agent` tool
17
- > call (`subagent_type: general-purpose`). Run `/epic-deliver <epicId>` from
16
+ > [`/deliver`](deliver-epic.md) per-wave fan-out via an `Agent` tool
17
+ > call (`subagent_type: general-purpose`). Run `/deliver <epicId>` from
18
18
  > the operator surface, not this helper directly.
19
19
 
20
20
  ## Overview
21
21
 
22
22
  `epic-deliver-story` is the **single-Story worker** for Epic-attached Stories.
23
- It sits below [`/epic-deliver`](../epic-deliver.md) (which fans out one Story
23
+ It sits below [`/deliver`](deliver-epic.md) (which fans out one Story
24
24
  sub-agent per slot, per wave) and runs one Story from init to close in one
25
25
  invocation.
26
26
 
27
27
  ```text
28
- /epic-deliver <epicId>
28
+ /deliver <epicId>
29
29
  → for each wave N:
30
30
  Agent tool × concurrencyCap parallel calls (one assistant turn):
31
31
  helpers/epic-deliver-story <storyId>
@@ -36,10 +36,10 @@ invocation.
36
36
  ```
37
37
 
38
38
  The argument is always a **Story ID** (`type::story`). Epic IDs go through
39
- [`/epic-deliver`](../epic-deliver.md).
39
+ [`/deliver`](deliver-epic.md).
40
40
 
41
41
  **Standalone Stories** (no `Epic: #N` in body) use
42
- [`/story-deliver`](../story-deliver.md) instead — that workflow's helper
42
+ [`/deliver`](deliver-stories.md) instead — that workflow's helper
43
43
  branches from `main`, opens its PR directly to `main`, and skips the
44
44
  Epic-scoped machinery (cascade, dispatch manifest, dashboard regen). This
45
45
  helper requires a parent Epic and will refuse to initialize a Story that lacks
@@ -56,7 +56,7 @@ the `Epic: #N` reference.
56
56
 
57
57
  ## Non-interactive execution contract
58
58
 
59
- `epic-deliver-story` runs as a sub-agent of `/epic-deliver`'s per-wave fan-out
59
+ `epic-deliver-story` runs as a sub-agent of `/deliver`'s per-wave fan-out
60
60
  (common case) or interactively for a single Story. Sub-agent runs share
61
61
  the parent's permissions but have **no input channel** mid-run.
62
62
 
@@ -93,7 +93,7 @@ node .agents/scripts/story-init.js --story <storyId>
93
93
  > prevention is cheaper: just give Bash the 10-minute timeout and block.
94
94
 
95
95
  The script validates `type::story`, checks blockers, traces the
96
- Feature → Epic → PRD/Tech-Spec hierarchy, seeds `story-<id>` from the
96
+ Epic → PRD/Tech-Spec hierarchy, seeds `story-<id>` from the
97
97
  Epic branch, and (when worktree isolation is on) runs `git worktree add`
98
98
  at `.worktrees/story-<id>/`. The Story flips to `agent::executing`. A
99
99
  `story-init` structured comment is upserted with the Story's inline
@@ -130,7 +130,7 @@ The Step 0 result envelope carries a `prepare.renderedBody` field — the
130
130
  markdown body for the initial Story-phase table. **Relay it verbatim to
131
131
  chat** so operators see the initial progress block before the first commit
132
132
  lands. Do the same after every transition in Step 1 / Step 3 (the body is
133
- the Story-level rollup the parent `/epic-deliver` aggregator reads).
133
+ the Story-level rollup the parent `/deliver` aggregator reads).
134
134
 
135
135
  ---
136
136
 
@@ -291,7 +291,7 @@ When run as a sub-agent, return one JSON object:
291
291
  > existing `storyId` / `branchDeleted` / `phase` / `detail` /
292
292
  > `renderedBody` fields — do **not** add new envelope fields). Do not
293
293
  > narrate the steps you took to get there, and do not prescribe how
294
- > `/epic-deliver`'s aggregator should do its job downstream. The parent
294
+ > `/deliver`'s aggregator should do its job downstream. The parent
295
295
  > reads structured state from this envelope and the `story-run-progress`
296
296
  > snapshot; prose process commentary only bloats the hydrated prompt
297
297
  > (`delivery.maxTokenBudget` elision).
@@ -307,7 +307,7 @@ regardless of the reap status.
307
307
  `renderedBody` is the **most recent** `renderedBody` returned by
308
308
  `story-phase.js` (typically the `phase: 'done'` snapshot at close,
309
309
  or the `phase: 'blocked'` snapshot on a blocker). The parent
310
- `/epic-deliver` may inline a digest of this in its wave-level Notable
310
+ `/deliver` may inline a digest of this in its wave-level Notable
311
311
  section. When run interactively (no parent), omit it — the chat already
312
312
  has the latest body relayed during Step 1 / Step 3.
313
313
 
@@ -328,7 +328,7 @@ running this helper against an already-closed Story is safe.
328
328
  only integration target is the parent Epic's integration branch. If
329
329
  `story-close.js` short-circuits, no-ops, or otherwise fails to merge,
330
330
  **do NOT** fall back to `gh pr create --base main`, **do NOT** invoke
331
- `/story-deliver` on the same Story, and **do NOT** open a PR by
331
+ `/deliver` on the same Story, and **do NOT** open a PR by
332
332
  hand against `main`. Such a PR orphans the change on `main` and forces
333
333
  a manual `git merge origin/main` back into `epic/<id>` to recover (the
334
334
  Epic #2880 wave-5 / Story #2960 friction note). The framework refuses