mandrel 2.37.0 → 2.38.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 (154) hide show
  1. package/.agents/README.md +16 -16
  2. package/.agents/agents/plan-critic.md +1 -1
  3. package/.agents/docs/SDLC.md +40 -40
  4. package/.agents/docs/configuration.md +16 -16
  5. package/.agents/docs/execution-reference.md +3 -3
  6. package/.agents/docs/quality-gates.md +2 -2
  7. package/.agents/docs/workflows.md +6 -6
  8. package/.agents/instructions.md +5 -5
  9. package/.agents/rules/changelog-style.md +3 -3
  10. package/.agents/rules/ci-remediation.md +1 -1
  11. package/.agents/rules/git-conventions-reference.md +4 -4
  12. package/.agents/schemas/agentrc.schema.json +9 -9
  13. package/.agents/schemas/story-deliver-terminal.schema.json +2 -2
  14. package/.agents/schemas/validation-evidence.schema.json +1 -1
  15. package/.agents/scripts/acceptance-eval.js +1 -1
  16. package/.agents/scripts/apply-quality-bootstrap.js +1 -1
  17. package/.agents/scripts/audit-to-stories.js +2 -2
  18. package/.agents/scripts/check-doc-links.js +32 -4
  19. package/.agents/scripts/check-test-temp-hygiene.js +1 -1
  20. package/.agents/scripts/check-workflow-cli-lint.js +1 -1
  21. package/.agents/scripts/deliver-light.js +10 -10
  22. package/.agents/scripts/deliver-recover.js +1 -1
  23. package/.agents/scripts/drain-pending-cleanup.js +1 -1
  24. package/.agents/scripts/evidence-gate.js +1 -1
  25. package/.agents/scripts/generate-workflows-doc.js +1 -1
  26. package/.agents/scripts/lib/audit-suite/selector.js +1 -1
  27. package/.agents/scripts/lib/audit-to-stories/audit-label-taxonomy.js +1 -1
  28. package/.agents/scripts/lib/audit-to-stories/build-story-body.js +1 -1
  29. package/.agents/scripts/lib/audit-to-stories/seed-from-findings.js +5 -5
  30. package/.agents/scripts/lib/audit-to-stories/wire-dependencies.js +1 -1
  31. package/.agents/scripts/lib/bdd-runner-detect.js +1 -1
  32. package/.agents/scripts/lib/bdd-scenario-budget.js +1 -1
  33. package/.agents/scripts/lib/bdd-scenario-scanner.js +3 -3
  34. package/.agents/scripts/lib/bdd-step-index.js +1 -1
  35. package/.agents/scripts/lib/bootstrap/branch-protection.js +1 -1
  36. package/.agents/scripts/lib/bootstrap/commit-push.js +2 -2
  37. package/.agents/scripts/lib/bootstrap/issue-forms-template.js +1 -1
  38. package/.agents/scripts/lib/checks/core-bare-clean.js +1 -1
  39. package/.agents/scripts/lib/checks/story-init-not-backgrounded.js +1 -1
  40. package/.agents/scripts/lib/cli-args.js +1 -1
  41. package/.agents/scripts/lib/command-header.js +1 -1
  42. package/.agents/scripts/lib/config/delivery-routing.js +1 -1
  43. package/.agents/scripts/lib/config/explain.js +1 -1
  44. package/.agents/scripts/lib/config/runners.js +2 -2
  45. package/.agents/scripts/lib/config/runtime.js +1 -1
  46. package/.agents/scripts/lib/config/temp-paths.js +2 -2
  47. package/.agents/scripts/lib/config-settings-schema-delivery.js +3 -3
  48. package/.agents/scripts/lib/config-settings-schema-quality.js +6 -6
  49. package/.agents/scripts/lib/config-settings-schema.js +3 -3
  50. package/.agents/scripts/lib/duplicate-search.js +1 -1
  51. package/.agents/scripts/lib/feedback-loop/prior-feedback-fetcher.js +4 -4
  52. package/.agents/scripts/lib/feedback-loop/retro-proposals-graduator.js +1 -1
  53. package/.agents/scripts/lib/findings/classify-finding.js +1 -1
  54. package/.agents/scripts/lib/findings/promote-finding.js +12 -12
  55. package/.agents/scripts/lib/findings/route-finding.js +2 -2
  56. package/.agents/scripts/lib/generated/agentrc-validator.js +1 -1
  57. package/.agents/scripts/lib/git-branch-lifecycle.js +2 -2
  58. package/.agents/scripts/lib/label-constants.js +2 -2
  59. package/.agents/scripts/lib/label-taxonomy.js +1 -1
  60. package/.agents/scripts/lib/onboard/init-tail.js +4 -4
  61. package/.agents/scripts/lib/onboard/scaffold-docs.js +2 -2
  62. package/.agents/scripts/lib/orchestration/acceptance-eval-decision.js +1 -1
  63. package/.agents/scripts/lib/orchestration/code-review.js +4 -4
  64. package/.agents/scripts/lib/orchestration/complexity-gate.js +5 -5
  65. package/.agents/scripts/lib/orchestration/deliver-recover.js +3 -3
  66. package/.agents/scripts/lib/orchestration/docs-digest.js +3 -3
  67. package/.agents/scripts/lib/orchestration/lease-guard-shared.js +2 -2
  68. package/.agents/scripts/lib/orchestration/light-backstop.js +1 -1
  69. package/.agents/scripts/lib/orchestration/light-escalation.js +6 -6
  70. package/.agents/scripts/lib/orchestration/light-suitability.js +19 -19
  71. package/.agents/scripts/lib/orchestration/plan-context.js +4 -4
  72. package/.agents/scripts/lib/orchestration/plan-critic-conditions.js +2 -2
  73. package/.agents/scripts/lib/orchestration/plan-critics-evaluate.js +2 -2
  74. package/.agents/scripts/lib/orchestration/plan-metrics.js +1 -1
  75. package/.agents/scripts/lib/orchestration/plan-persist/persist-helpers.js +1 -1
  76. package/.agents/scripts/lib/orchestration/plan-persist/plan-context-source.js +3 -3
  77. package/.agents/scripts/lib/orchestration/plan-persist/run-plan-persist.js +6 -6
  78. package/.agents/scripts/lib/orchestration/plan-persist/story-ops.js +16 -16
  79. package/.agents/scripts/lib/orchestration/plan-persist/summary.js +3 -3
  80. package/.agents/scripts/lib/orchestration/plan-persist/supersede-ops.js +6 -6
  81. package/.agents/scripts/lib/orchestration/planning/authoring-context.js +7 -7
  82. package/.agents/scripts/lib/orchestration/planning/decomposer-context.js +1 -1
  83. package/.agents/scripts/lib/orchestration/planning/memory-pool-advisory.js +3 -3
  84. package/.agents/scripts/lib/orchestration/remote-verifier.js +2 -2
  85. package/.agents/scripts/lib/orchestration/resolve-stories.js +4 -4
  86. package/.agents/scripts/lib/orchestration/run-epilogue.js +2 -2
  87. package/.agents/scripts/lib/orchestration/single-story-close/phases/base-sync.js +2 -2
  88. package/.agents/scripts/lib/orchestration/single-story-close/phases/conventional-subject.js +1 -1
  89. package/.agents/scripts/lib/orchestration/single-story-close/phases/normalize-pr-title.js +5 -1
  90. package/.agents/scripts/lib/orchestration/single-story-close/phases/review-block.js +1 -1
  91. package/.agents/scripts/lib/orchestration/single-story-close/phases/wrong-tree-guard.js +3 -3
  92. package/.agents/scripts/lib/orchestration/single-story-close/runner.js +2 -2
  93. package/.agents/scripts/lib/orchestration/single-story-lease-guard.js +1 -1
  94. package/.agents/scripts/lib/orchestration/story-deliver-terminal.js +14 -12
  95. package/.agents/scripts/lib/orchestration/ticket-validator.js +1 -1
  96. package/.agents/scripts/lib/orchestration/ticketing/reads.js +3 -3
  97. package/.agents/scripts/lib/plan-phase-cleanup.js +1 -1
  98. package/.agents/scripts/lib/signals/schema.js +1 -1
  99. package/.agents/scripts/lib/story-adjacency.js +2 -2
  100. package/.agents/scripts/lib/templates/decomposer-prompts.js +1 -1
  101. package/.agents/scripts/lib/ticket-body-sections.js +1 -1
  102. package/.agents/scripts/lib/util/concurrent-map.js +1 -1
  103. package/.agents/scripts/lib/util/parse-id-list.js +1 -1
  104. package/.agents/scripts/lib/wave-runner/live-probe.js +4 -4
  105. package/.agents/scripts/lib/wave-runner/ready-set.js +1 -1
  106. package/.agents/scripts/lib/workflow-closure.js +1 -1
  107. package/.agents/scripts/lib/worktree/lifecycle/pending-cleanup.js +2 -2
  108. package/.agents/scripts/lint-issue-body.js +3 -3
  109. package/.agents/scripts/plan-context.js +4 -4
  110. package/.agents/scripts/plan-critics.js +2 -2
  111. package/.agents/scripts/plan-persist.js +2 -2
  112. package/.agents/scripts/plan-run-epilogue.js +2 -2
  113. package/.agents/scripts/providers/github/board-add.js +1 -1
  114. package/.agents/scripts/providers/github/errors.js +1 -1
  115. package/.agents/scripts/providers/github/tickets.js +6 -6
  116. package/.agents/scripts/resolve-stories.js +3 -3
  117. package/.agents/scripts/resync-status-column.js +1 -1
  118. package/.agents/scripts/run-lint.js +1 -1
  119. package/.agents/scripts/single-story-close.js +2 -2
  120. package/.agents/scripts/single-story-init.js +5 -5
  121. package/.agents/scripts/stories-wave-tick.js +8 -8
  122. package/.agents/skills/core/idea-refinement/SKILL.md +5 -5
  123. package/.agents/skills/core/scope-triage/SKILL.md +3 -3
  124. package/.agents/skills/skills.index.json +1 -1
  125. package/.agents/skills/stack/qa/qa-harness/SKILL.md +1 -1
  126. package/.agents/workflows/audit-data-model.md +1 -1
  127. package/.agents/workflows/audit-documentation.md +2 -2
  128. package/.agents/workflows/audit-to-stories.md +11 -11
  129. package/.agents/workflows/git-deliver.md +4 -4
  130. package/.agents/workflows/helpers/_merge-conflict-template.md +1 -1
  131. package/.agents/workflows/helpers/audit-lens-core.md +1 -1
  132. package/.agents/workflows/helpers/code-review.md +4 -4
  133. package/.agents/workflows/helpers/deliver-light.md +26 -26
  134. package/.agents/workflows/helpers/deliver-reference.md +15 -7
  135. package/.agents/workflows/helpers/deliver-story-reference.md +9 -4
  136. package/.agents/workflows/helpers/deliver-story.md +6 -7
  137. package/.agents/workflows/helpers/diagnose.md +2 -2
  138. package/.agents/workflows/helpers/parallel-tooling.md +1 -1
  139. package/.agents/workflows/helpers/plan-reference.md +9 -9
  140. package/.agents/workflows/helpers/qa-core.md +8 -8
  141. package/.agents/workflows/helpers/worktree-lifecycle.md +6 -6
  142. package/.agents/workflows/{deliver.md → mandrel-deliver.md} +15 -19
  143. package/.agents/workflows/{plan.md → mandrel-plan.md} +9 -9
  144. package/.agents/workflows/memory-consolidate.md +4 -4
  145. package/.agents/workflows/prototype.md +3 -3
  146. package/.agents/workflows/qa-assist.md +12 -12
  147. package/.agents/workflows/qa-explore.md +6 -6
  148. package/.agents/workflows/qa-run.md +1 -1
  149. package/README.md +7 -7
  150. package/docs/CHANGELOG.md +11 -0
  151. package/lib/cli/doctor.js +1 -1
  152. package/lib/cli/init.js +1 -1
  153. package/lib/migrations/steps/2.2.0-retire-epic-ac-tags.js +1 -1
  154. package/package.json +1 -1
@@ -5,7 +5,7 @@ description:
5
5
  deliver-story engine — story-<id> → PR → main.
6
6
  ---
7
7
 
8
- # /deliver
8
+ # /mandrel-deliver
9
9
 
10
10
  > **Lean spine.** Happy path + gate list. Sequencing, dispatch mechanics,
11
11
  > intent phrases, ceremony and the epilogue live in on-demand
@@ -16,7 +16,7 @@ description:
16
16
 
17
17
  ## Role
18
18
 
19
- One delivery door. `/deliver` owns input resolution, sequencing and the
19
+ One delivery door. `/mandrel-deliver` owns input resolution, sequencing and the
20
20
  close-and-land tail; Stories are implemented via
21
21
  [`helpers/deliver-story.md`](helpers/deliver-story.md).
22
22
 
@@ -32,11 +32,11 @@ you read:
32
32
 
33
33
  | Invocation | Shape | Behavior |
34
34
  | --- | --- | --- |
35
- | `/deliver` | bare | List the open `agent::ready` Stories and ask which to deliver. Deliver nothing until answered. |
36
- | `/deliver 4712` | ids | One Story via `helpers/deliver-story.md`, **inline in this session** — no `story-worker` spawn. |
37
- | `/deliver 4712 4713 …` | ids | Resolve the set, sequence by the discovered graph via `stories-wave-tick.js`, dispatch sub-agents. |
38
- | `/deliver 4712 - 4716` | ids | A **range** — every id in the inclusive span. |
39
- | `/deliver add a --json flag to doctor` | prompt | Unplanned work: gate, author a receipt Story, land it — [`helpers/deliver-light.md`](helpers/deliver-light.md). |
35
+ | `/mandrel-deliver` | bare | List the open `agent::ready` Stories and ask which to deliver. Deliver nothing until answered. |
36
+ | `/mandrel-deliver 4712` | ids | One Story via `helpers/deliver-story.md`, **inline in this session** — no `story-worker` spawn. |
37
+ | `/mandrel-deliver 4712 4713 …` | ids | Resolve the set, sequence by the discovered graph via `stories-wave-tick.js`, dispatch sub-agents. |
38
+ | `/mandrel-deliver 4712 - 4716` | ids | A **range** — every id in the inclusive span. |
39
+ | `/mandrel-deliver add a --json flag to doctor` | prompt | Unplanned work: gate, author a receipt Story, land it — [`helpers/deliver-light.md`](helpers/deliver-light.md). |
40
40
 
41
41
  **The discriminator is lexical and total.** An argument matching `^#?\d+$` is an
42
42
  id, and `^#?\d+\s*[-–—]\s*#?\d+$` an inclusive **range** — pass one on as a
@@ -92,14 +92,10 @@ it to an operator or add it to an attended run.
92
92
  - **0** — dispatch each `ready` id (already capped and overlap-free); an
93
93
  empty `ready` with work in flight means "waiting", so keep looping;
94
94
  `epilogueDue: true` means every Story is done — step 4.
95
- - **2** — `cycleError`: the graph is self-referential; fix `depends_on`, do
96
- not retry. **3** `wedged`: nothing dispatchable, nothing in flight, the
97
- undone Stories and their unmet blockers named; land a blocker or add it to
98
- `--ids`. **4** `blocked`: a Story carries `agent::blocked` with
99
- `blockedReason`, the protocol's HITL pause
100
- ([`instructions.md` § 1.J](../instructions.md)) — **stop the loop and
101
- surface it; do not poll**, resuming once the operator unblocks it. Blocked
102
- outranks a wedge, not a cycle.
95
+ - **2 / 3 / 4** — `cycleError` / `wedged` / `blocked`: stop the loop and
96
+ route per reference § Sequencing edge cases. **4** is the protocol's HITL
97
+ pause ([`instructions.md` § 1.J](../instructions.md)) surface it and
98
+ wait for the operator; never poll.
103
99
 
104
100
  4. **Close each hand-off** (§ Closing what the workers hand back), then, with
105
101
  every Story landed, run the **per-run epilogue (N>1)**:
@@ -143,13 +139,13 @@ it): reference § Ceremony.
143
139
  - **Land or block — never a silent local build** (digest § 2). Attended delivers
144
140
  default to close-and-land (`delivery.routing.closeAndLand: true`); rest at
145
141
  `agent::closing` only when a human owns it.
146
- - **`/deliver` never plans.** Planned tickets come from [`/plan`](plan.md), and
147
- an over-scope prompt **escalates and ends** — never invoke `/plan` in this
142
+ - **`/mandrel-deliver` never plans.** Planned tickets come from [`/mandrel-plan`](mandrel-plan.md), and
143
+ an over-scope prompt **escalates and ends** — never invoke `/mandrel-plan` in this
148
144
  session to rescue it ([`helpers/deliver-light.md`](helpers/deliver-light.md)
149
145
  § Escalation is terminal).
150
146
 
151
147
  ## See also
152
148
 
153
- [`/plan`](plan.md), [`helpers/deliver-story.md`](helpers/deliver-story.md) (the
149
+ [`/mandrel-plan`](mandrel-plan.md), [`helpers/deliver-story.md`](helpers/deliver-story.md) (the
154
150
  engine), [`helpers/deliver-light.md`](helpers/deliver-light.md) (the unplanned
155
- prompt path, shared with `/plan` Gate #1).
151
+ prompt path, shared with `/mandrel-plan` Gate #1).
@@ -5,7 +5,7 @@ description:
5
5
  policy.
6
6
  ---
7
7
 
8
- # /plan
8
+ # /mandrel-plan
9
9
 
10
10
  > **Lean spine.** Happy path + gate list; edge-case detail lives on demand in
11
11
  > [`helpers/plan-reference.md`](helpers/plan-reference.md).
@@ -18,11 +18,11 @@ it, act**:
18
18
 
19
19
  | Invocation | Mode | Behavior |
20
20
  | --- | --- | --- |
21
- | `/plan` | ask | Ask what to plan; nothing runs first. |
22
- | `/plan add a --json flag to doctor` | seed | Ideation from prose: interrogate → author **one Story by default** → persist. |
23
- | `/plan temp/notes/idea.md` | seed-file | Same, from notes. An existing file is a path, not prose. |
24
- | `/plan 4712[,4713…]` | tickets | Fetch issue(s), analyze into proper Stories (prefer N=1 rewrite). |
25
- | `/plan 4712`, already delivered | amends | Amend a shipped Story from a **delta envelope**, not a re-interrogation. |
21
+ | `/mandrel-plan` | ask | Ask what to plan; nothing runs first. |
22
+ | `/mandrel-plan add a --json flag to doctor` | seed | Ideation from prose: interrogate → author **one Story by default** → persist. |
23
+ | `/mandrel-plan temp/notes/idea.md` | seed-file | Same, from notes. An existing file is a path, not prose. |
24
+ | `/mandrel-plan 4712[,4713…]` | tickets | Fetch issue(s), analyze into proper Stories (prefer N=1 rewrite). |
25
+ | `/mandrel-plan 4712`, already delivered | amends | Amend a shipped Story from a **delta envelope**, not a re-interrogation. |
26
26
 
27
27
  **Resolving a bare id.** Read live state rather than asking: `agent::done` can
28
28
  only be amended, an open unplanned issue can only be planned. **Announce the
@@ -156,14 +156,14 @@ JSON. Tickets mode also comments on and closes each source id
156
156
 
157
157
  ## Constraints
158
158
 
159
- - `/plan` starts delivery **only** through a confirmed Gate #1 light route —
160
- never off its own authored Stories, which land via [`/deliver`](deliver.md).
159
+ - `/mandrel-plan` starts delivery **only** through a confirmed Gate #1 light route —
160
+ never off its own authored Stories, which land via [`/mandrel-deliver`](mandrel-deliver.md).
161
161
  - Duplicate search targets open Stories (`type::story`), not Epics; and
162
162
  deterministic gates still fail closed under `--yes`.
163
163
 
164
164
  ## See also
165
165
 
166
- [`/deliver`](deliver.md), [`/audit-to-stories`](audit-to-stories.md),
166
+ [`/mandrel-deliver`](mandrel-deliver.md), [`/audit-to-stories`](audit-to-stories.md),
167
167
  [`helpers/plan-reference.md`](helpers/plan-reference.md) (on-demand detail),
168
168
  [`core/scope-triage`](../skills/core/scope-triage/SKILL.md) — optional
169
169
  split-advisory notes only (no routing verdict).
@@ -2,7 +2,7 @@
2
2
  description: >-
3
3
  Attended consolidation pass over this project's agent memory pool — merge
4
4
  duplicates, verify claims against the current tree, prune with operator
5
- confirmation, rewrite the index, and stamp the pool so the /plan advisory
5
+ confirmation, rewrite the index, and stamp the pool so the /mandrel-plan advisory
6
6
  goes quiet.
7
7
  ---
8
8
 
@@ -96,7 +96,7 @@ Then write the receipt to `.consolidation-stamp.json` in the pool root:
96
96
  { "lastConsolidatedAt": "<ISO-8601 timestamp>" }
97
97
  ```
98
98
 
99
- The `/plan` Phase 0 advisory reads this file; until it is written, the nudge
99
+ The `/mandrel-plan` Phase 0 advisory reads this file; until it is written, the nudge
100
100
  keeps firing. Write it **only** after Gate #2 — the stamp asserts an operator
101
101
  reviewed the pass, so writing it early makes it a lie.
102
102
 
@@ -112,5 +112,5 @@ Close with counts: entries read, corrected, merged, pruned, and the new total.
112
112
 
113
113
  ## See also
114
114
 
115
- [`/plan`](plan.md) (surfaces the advisory at its Gate #1),
116
- [`/deliver`](deliver.md) (point-of-write corrections as work lands).
115
+ [`/mandrel-plan`](mandrel-plan.md) (surfaces the advisory at its Gate #1),
116
+ [`/mandrel-deliver`](mandrel-deliver.md) (point-of-write corrections as work lands).
@@ -13,7 +13,7 @@ active runs" says nothing about layout, density, or interaction, so delivery
13
13
  resolves those by taste. `/prototype` puts a reviewable artifact in front of the
14
14
  operator before the criteria are written.
15
15
 
16
- **Operator-invoked only.** `/plan` may report that a plan touches UI and that
16
+ **Operator-invoked only.** `/mandrel-plan` may report that a plan touches UI and that
17
17
  this command exists; it must never run it. No workflow, gate, or script invokes
18
18
  `/prototype` — the whole design rests on the operator asking for it.
19
19
 
@@ -89,7 +89,7 @@ documentation-freshness gate already carries that failure mode.
89
89
  - **One file, under the temp tree.** Never a second artifact, never outside the
90
90
  gitignored workspace-root temp tree, and never a committed prototype
91
91
  directory by default.
92
- - **Never invoked automatically.** `/plan` records the offer and proceeds with
92
+ - **Never invoked automatically.** `/mandrel-plan` records the offer and proceeds with
93
93
  planning; no workflow, gate, or script may call this command.
94
94
  - **Read-only over the codebase.** The prototype file is the only write. Do not
95
95
  edit application source, tokens, or components to make a prototype render.
@@ -100,5 +100,5 @@ documentation-freshness gate already carries that failure mode.
100
100
 
101
101
  - [`/audit-ux-ui`](audit-ux-ui.md) — the same design-system SSOT discovery,
102
102
  applied as a review lens after the UI ships.
103
- - [`/plan`](plan.md) — where the advisory `complexitySignals.uiSurface` offer
103
+ - [`/mandrel-plan`](mandrel-plan.md) — where the advisory `complexitySignals.uiSurface` offer
104
104
  surfaces. It names this command; it never runs it.
@@ -1,5 +1,5 @@
1
1
  ---
2
- description: Human-led QA assist loop — set up, then ride a rolling multi-observation intake session. The operator reports observations in any order; the agent enriches each (repro + root-cause file:line + coverage verdict for bugs; analysis + options + recommendation for enhancements), asks clarifying questions only when ambiguous, and appends a redacted ledger item — recording, never planning — to a persistent, resumable session under temp/qa/. Only when the operator says they are done does it review the full ledger and hand off to /plan.
2
+ description: Human-led QA assist loop — set up, then ride a rolling multi-observation intake session. The operator reports observations in any order; the agent enriches each (repro + root-cause file:line + coverage verdict for bugs; analysis + options + recommendation for enhancements), asks clarifying questions only when ambiguous, and appends a redacted ledger item — recording, never planning — to a persistent, resumable session under temp/qa/. Only when the operator says they are done does it review the full ledger and hand off to /mandrel-plan.
3
3
  ---
4
4
 
5
5
  # /qa-assist
@@ -21,7 +21,7 @@ high-quality, triage-ready ledger. The session has four movements:
21
21
  a final review of the **entire** ledger and asks any last clarifying
22
22
  questions.
23
23
  4. **Triage & Plan** (Phase 4) — only then does it route the full ledger through
24
- [`/plan`](plan.md) to generate Stories.
24
+ [`/mandrel-plan`](mandrel-plan.md) to generate Stories.
25
25
 
26
26
  Unlike [`/qa-explore`](qa-explore.md) (where the *agent* drives open-ended
27
27
  exploration of a named surface), `/qa-assist` is **human-led**: the human owns
@@ -89,12 +89,12 @@ rolling loop stays fluid:
89
89
  to **ask clarifying questions when the observation is ambiguous**. After each
90
90
  append it **echoes the recorded item** for correction, then **loops back** for
91
91
  the next observation. It does **not** triage, route, file tickets, or invoke
92
- `/plan` during intake.
92
+ `/mandrel-plan` during intake.
93
93
  - **Two things always require explicit operator confirmation** (the HITL write
94
94
  gate in [`helpers/qa-core.md`](helpers/qa-core.md)). First, the session-level
95
95
  transition into **Phase 4 — Triage & Plan** — the operator must say they are
96
96
  done. Second, **every write that leaves the local ledger** — filing a ticket,
97
- invoking `/plan`, or mutating a label. Present the artifact, ask, and wait.
97
+ invoking `/mandrel-plan`, or mutating a label. Present the artifact, ask, and wait.
98
98
 
99
99
  In short: appending to the rolling ledger is the natural product of intake and
100
100
  needs no gate beyond the echo-back; **planning and anything that leaves the
@@ -198,7 +198,7 @@ every decision to the shared helpers; never re-derive them in prose.
198
198
  ## Phase 3 — Record (per observation), then loop
199
199
 
200
200
  Goal: persist the enriched finding to the rolling ledger and **return to
201
- intake**. **No triage, routing, ticket-filing, or `/plan` happens here** — that
201
+ intake**. **No triage, routing, ticket-filing, or `/mandrel-plan` happens here** — that
202
202
  is Phase 4, and only after the operator says they are done.
203
203
 
204
204
  1. **Append a `QaLedgerItem`** to the ledger (shape per
@@ -232,17 +232,17 @@ its transition is **explicitly operator-gated**.
232
232
  2. **Triage the ledger** through the shared classify → route → disposition →
233
233
  promote procedure in [`helpers/qa-core.md`](helpers/qa-core.md): dedup/route
234
234
  each `file` finding against open + closed Issues, then promote the
235
- `file`-dispositioned findings through `promoteFindings` → `/plan` (never a raw
235
+ `file`-dispositioned findings through `promoteFindings` → `/mandrel-plan` (never a raw
236
236
  Issue), stamping each cluster's `fingerprintFooter(sha)` into the seed.
237
237
  `defer` carries an item forward as backlog; `dismiss` marks it non-actionable.
238
238
  3. **Gate:** the move into this phase, and every write inside it (seed write,
239
- `/plan` invocation, ticket-filing, label mutation), is **operator-gated** —
239
+ `/mandrel-plan` invocation, ticket-filing, label mutation), is **operator-gated** —
240
240
  confirm each one. The plan→deliver hard stop is preserved; redaction has
241
241
  already run, so nothing unredacted reaches disk or GitHub.
242
242
 
243
243
  After planning, summarize: the findings recorded, the route/promotion decisions
244
244
  (`new`/`update-existing`/`duplicate`/`regression-of-closed`), whether each
245
- cluster became a Story via `/plan --seed-file`, and any `defer` backlog a
245
+ cluster became a Story via `/mandrel-plan --seed-file`, and any `defer` backlog a
246
246
  resumed session will pick up.
247
247
 
248
248
  ---
@@ -259,7 +259,7 @@ the `/qa-assist`-specific deltas are:
259
259
  records each. **Never invent an observation**; ask clarifying questions only
260
260
  when one is ambiguous, batched across the dump.
261
261
  - **Record during intake; plan only on "done".** Phases 1–3 enrich, append, and
262
- loop — never triage, route, file, or invoke `/plan`. All of that is Phase 4,
262
+ loop — never triage, route, file, or invoke `/mandrel-plan`. All of that is Phase 4,
263
263
  entered only on explicit operator confirmation that testing is done.
264
264
  - **Light intake gate, firm boundary gate.** Intake → Enrich → Record is fluid
265
265
  (echo-back, no ceremony); the move into Phase 4 and every write that leaves the
@@ -275,11 +275,11 @@ the `/qa-assist`-specific deltas are:
275
275
 
276
276
  ## See also
277
277
 
278
- - [`/plan`](plan.md) — the planning pipeline `/qa-assist` chains into in Phase 4.
278
+ - [`/mandrel-plan`](mandrel-plan.md) — the planning pipeline `/qa-assist` chains into in Phase 4.
279
279
  The plan→deliver hard stop is preserved across the handoff.
280
280
  - [`/qa-explore`](qa-explore.md) — the agent-led sibling that drives a named
281
- surface and triages through the same `/plan` handoff.
281
+ surface and triages through the same `/mandrel-plan` handoff.
282
282
  - [`/audit-to-stories`](audit-to-stories.md) — the precedent for the
283
- findings → `/plan` handoff and the shared fingerprint-footer dedup contract.
283
+ findings → `/mandrel-plan` handoff and the shared fingerprint-footer dedup contract.
284
284
  - [`helpers/qa-core.md`](helpers/qa-core.md) — the shared contract/session/
285
285
  redaction/QaLedgerItem/triage/HITL core.
@@ -31,7 +31,7 @@ workflow states only the `/qa-explore`-specific phases (Plan / Capture) plus a
31
31
  Constraints delta.
32
32
 
33
33
  > **When to run**: ad-hoc agent-driven exploration of a freshly delivered Story
34
- > or Feature, a regression sweep over a risky surface before `/deliver`, or a
34
+ > or Feature, a regression sweep over a risky surface before `/mandrel-deliver`, or a
35
35
  > structured agent-driven bug-hunt captured into a triageable ledger.
36
36
  >
37
37
  > **Skills**: `core/qa-coverage-mapping`, `stack/qa/qa-explore-driving`
@@ -198,14 +198,14 @@ For each observation the agent makes while driving:
198
198
  Route the captured ledger through the shared classify → route → disposition →
199
199
  promote procedure in [`helpers/qa-core.md`](helpers/qa-core.md), with the
200
200
  operator deciding each `file` / `defer` / `dismiss` and every write
201
- operator-gated. `file` findings are promoted through `/plan` (never a raw
201
+ operator-gated. `file` findings are promoted through `/mandrel-plan` (never a raw
202
202
  Issue); `defer` carries an item forward as backlog; `dismiss` marks it
203
203
  non-actionable.
204
204
 
205
205
  After triage, write the updated dispositions back to the ledger (still under
206
206
  `temp/qa/`), and summarize: items captured, the driving method used, classes,
207
207
  routes (`new`/`update-existing`/`duplicate`/`regression-of-closed`), the
208
- Stories (`/plan --seed-file`) promoted, and the deferred rolling backlog a
208
+ Stories (`/mandrel-plan --seed-file`) promoted, and the deferred rolling backlog a
209
209
  resumed session will pick up.
210
210
 
211
211
  ---
@@ -238,11 +238,11 @@ the `/qa-explore`-specific deltas are:
238
238
 
239
239
  ## See also
240
240
 
241
- - [`/plan`](plan.md) — the planning pipeline Triage chains into for a
241
+ - [`/mandrel-plan`](mandrel-plan.md) — the planning pipeline Triage chains into for a
242
242
  `file`-dispositioned finding. The plan→deliver hard stop is preserved.
243
243
  - [`/qa-assist`](qa-assist.md) — the human-led sibling that enriches a single
244
- operator observation and triages through the same `/plan` handoff.
244
+ operator observation and triages through the same `/mandrel-plan` handoff.
245
245
  - [`/audit-to-stories`](audit-to-stories.md) — the precedent for the
246
- findings → `/plan` handoff and the shared fingerprint-footer dedup contract.
246
+ findings → `/mandrel-plan` handoff and the shared fingerprint-footer dedup contract.
247
247
  - [`helpers/qa-core.md`](helpers/qa-core.md) — the shared contract/session/
248
248
  redaction/QaLedgerItem/triage/HITL core.
@@ -26,7 +26,7 @@ the agent never invents those decisions in prose.
26
26
 
27
27
  > **When to run**: during sprint testing to exercise a targeted slice of the
28
28
  > acceptance suite (a feature, a tag expression, or a domain), for regression
29
- > passes before `/deliver`, or on demand while debugging a Story's
29
+ > passes before `/mandrel-deliver`, or on demand while debugging a Story's
30
30
  > user-visible behavior in a live browser.
31
31
  >
32
32
  > **Skills**: `stack/qa/gherkin-authoring`, `stack/qa/playwright-bdd`
package/README.md CHANGED
@@ -30,26 +30,26 @@ provisions both as part of a cold start (`git init` → `gh repo create --push`
30
30
  The canonical cold-start path is one command, then one slash command:
31
31
 
32
32
  ```bash
33
- npx mandrel init # install mandrel → sync → prompt → bootstrap → onboarding tail → /plan handoff
33
+ npx mandrel init # install mandrel → sync → prompt → bootstrap → onboarding tail → /mandrel-plan handoff
34
34
  ```
35
35
 
36
36
  ```text
37
37
  # then, inside Claude Code (commands load from .claude/commands/):
38
- /plan --seed "…" # interrogate → author one Story (default) → persist
39
- /deliver <id> # story-<id> → PR → main
38
+ /mandrel-plan --seed "…" # interrogate → author one Story (default) → persist
39
+ /mandrel-deliver <id> # story-<id> → PR → main
40
40
  ```
41
41
 
42
42
  `npx mandrel init` installs `mandrel` (when `./.agents/` is absent),
43
43
  materializes it via `mandrel sync`, then asks whether to **configure now**
44
44
  (option 1 → runs `bootstrap.js`, then the onboarding tail: stack detection,
45
- docs scaffolding offer, `mandrel doctor` readiness gate, and a `/plan`
45
+ docs scaffolding offer, `mandrel doctor` readiness gate, and a `/mandrel-plan`
46
46
  handoff) or stop at **just the files** (option 2 → re-run `mandrel init`
47
47
  any time to configure). Pass `--assume-yes` for a non-interactive run that
48
48
  proceeds straight to configure (and forwards the flag to bootstrap). When
49
49
  `./.agents/` is already present (you ran `npm install mandrel` first), `init`
50
50
  skips the install/sync and goes straight to the prompt. Once `mandrel init`
51
- completes, you land at the `/plan` handoff — run `/plan --seed "<idea>"` to
52
- author your first Story, then deliver it with `/deliver <storyId>`
51
+ completes, you land at the `/mandrel-plan` handoff — run `/mandrel-plan --seed "<idea>"` to
52
+ author your first Story, then deliver it with `/mandrel-deliver <storyId>`
53
53
  (`story-<id>` → PR → `main`).
54
54
 
55
55
  ### Manual equivalent
@@ -164,7 +164,7 @@ npx mandrel doctor # verify the install
164
164
  Mandrel's effectiveness is measured by a separate companion repo,
165
165
  **[mandrel-bench](https://github.com/dsj1984/mandrel-bench)** — a *consumer* of
166
166
  the published `mandrel` package. It pins a specific framework version,
167
- materializes it via `mandrel sync`, and drives Mandrel's own `/plan`→`/deliver`
167
+ materializes it via `mandrel sync`, and drives Mandrel's own `/mandrel-plan`→`/mandrel-deliver`
168
168
  pipeline (plus a bare-model control) over a scenario corpus. Each run is scored
169
169
  across five dimensions — Quality, Planning fidelity, and Autonomy (what the
170
170
  scaffolding *buys*) versus Efficiency and Overhead ratio (what it *costs*) —
package/docs/CHANGELOG.md CHANGED
@@ -15,6 +15,17 @@ All notable changes to this project will be documented in this file.
15
15
  -->
16
16
  <!-- markdownlint-disable-file MD004 MD012 MD037 -->
17
17
 
18
+ ## [2.38.0](https://github.com/dsj1984/mandrel/compare/mandrel-v2.37.0...mandrel-v2.38.0) (2026-09-04)
19
+
20
+
21
+ ### ⚠ BREAKING CHANGES
22
+
23
+ * the `/plan` and `/deliver` slash commands are renamed to `/mandrel-plan` and `/mandrel-deliver`. Run `mandrel sync` (or `npm run sync:commands`) to reap the old command files and project the new ones. No `/plan` or `/deliver` alias remains.
24
+
25
+ ### Added
26
+
27
+ * rename /plan and /deliver to /mandrel-plan and /mandrel-deliver ([#5126](https://github.com/dsj1984/mandrel/issues/5126)) ([#5127](https://github.com/dsj1984/mandrel/issues/5127)) ([945d8de](https://github.com/dsj1984/mandrel/commit/945d8de4a41aeca7adc89c009a0252f5bb5387b4))
28
+
18
29
  ## [2.37.0](https://github.com/dsj1984/mandrel/compare/mandrel-v2.36.0...mandrel-v2.37.0) (2026-09-03)
19
30
 
20
31
 
package/lib/cli/doctor.js CHANGED
@@ -122,7 +122,7 @@ export function formatClosureReport({
122
122
 
123
123
  /**
124
124
  * Best-effort write of the doctor verdict to `temp/doctor-result.json` under
125
- * the consumer root so downstream workflows (e.g. the `/plan` first-run
125
+ * the consumer root so downstream workflows (e.g. the `/mandrel-plan` first-run
126
126
  * preflight) can read the last recorded verdict without re-running doctor.
127
127
  * `temp/` is the gitignored scratch root, so neither git nor the sync prune
128
128
  * pass ever sees the cache. Any write failure is swallowed — the cache is
package/lib/cli/init.js CHANGED
@@ -299,7 +299,7 @@ export async function planInit({
299
299
  }
300
300
 
301
301
  // Bootstrap succeeded — run the onboarding tail: stack detection, docs
302
- // scaffolding offer, doctor gate, and /plan handoff. A tail that reports
302
+ // scaffolding offer, doctor gate, and /mandrel-plan handoff. A tail that reports
303
303
  // `ok: false` (the doctor gate failed) makes the whole init exit
304
304
  // non-zero; the tail already printed its own remediation message, and the
305
305
  // earlier install/sync/bootstrap phases' results stand as completed.
@@ -4,7 +4,7 @@
4
4
  * from consumer feature files.
5
5
  *
6
6
  * The v2 Epic removal deleted `acceptance-spec-reconciler.js`, the only
7
- * consumer of the namespaced per-Epic AC tags, and the `/plan` authoring
7
+ * consumer of the namespaced per-Epic AC tags, and the `/mandrel-plan` authoring
8
8
  * prompt no longer mandates them. Surviving tags in consumer `.feature`
9
9
  * files are inert and violate the gherkin-standards tag taxonomy's
10
10
  * no-ad-hoc-tags rule, so this step removes them: each `@epic-<digits>-ac-<digits>`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mandrel",
3
- "version": "2.37.0",
3
+ "version": "2.38.0",
4
4
  "description": "Claude Code-first opinionated workflow framework: instructions, skills, rules, and SDLC workflows that govern AI coding assistants.",
5
5
  "files": [
6
6
  ".agents/",