mandrel 1.71.0 → 1.73.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.
@@ -44,6 +44,7 @@ forwards them to the active path helper:
44
44
  | `--force` | Epic | Close + recreate an existing ticket tree on re-plan. |
45
45
  | `--force-review` | Epic | Force the operator review gate even when risk routing would skip it. |
46
46
  | `--allow-over-budget` | Epic | Permit a decomposition that exceeds the framework `maxTickets` reviewability budget. |
47
+ | `--yes` | both | **Non-interactive / headless mode.** Deterministically auto-proceeds the two `/plan` HITL STOP gates — the ideation one-pager / scope-triage confirm (gate #1) and the Phase-7 Epic operator review gate (gate #2) — without waiting for operator input. Parallel to [`/deliver --yes`](deliver.md). Composes with `--allow-over-budget` and with the risk-routed Phase-7 skip (it forces a proceed where those do not apply). Default (flag absent) behavior is unchanged: both gates still STOP for interactive use. |
47
48
  | `--steal` | Epic | Forcibly transfer a foreign Epic-lease. |
48
49
  | `--dry-run` | both | Author + validate without GitHub writes. |
49
50
  | `--body <path>` | Story | Pre-authored Story body file; validate (and create, unless `--dry-run`) without re-authoring. |
@@ -58,6 +59,71 @@ commands (story-sized Epic ↘ Story; epic-sized Story draft ↗ Epic) is now
58
59
  an **internal branch switch** inside this router: same skills, same
59
60
  helpers, no command hop and no operator re-entry.
60
61
 
62
+ ### Headless / non-interactive mode (`--yes`)
63
+
64
+ `--yes` is the headless escape hatch for an unattended driver (CI, a
65
+ benchmark harness, or any `claude -p` run with no human at the keyboard). It
66
+ is the `/plan`-side parallel of [`/deliver --yes`](deliver.md), which
67
+ suppresses that command's segment-plan confirmation. `/plan` has exactly
68
+ **two** HITL STOP gates, and `--yes` deterministically auto-proceeds **both**
69
+ without waiting for operator input:
70
+
71
+ 1. **Gate #1 — the ideation one-pager / scope-triage / clarity confirm.**
72
+ This single conceptual gate has three faces depending on the entry form,
73
+ and `--yes` auto-proceeds **all three**:
74
+ - On the `--idea` Epic path,
75
+ [`helpers/plan-epic.md`](helpers/plan-epic.md) Phase 1 (folding in the
76
+ Phase 1.5 scope-triage verdict) STOPs to confirm the sharpened one-pager.
77
+ - On the `--idea` Story path,
78
+ [`helpers/plan-story.md`](helpers/plan-story.md) Phase 2 STOPs to
79
+ confirm the drafted Story body.
80
+ - On the existing-Epic (`/plan <epicId>`) path, the Phase 6 Epic Clarity
81
+ Gate's **needs-refinement** branch STOPs to confirm the refined-body
82
+ diff before persisting it.
83
+
84
+ Under `--yes` each auto-proceeds: the one-pager / draft / refined-body
85
+ confirm resolves as **approved**, and a `story` / `borderline` triage
86
+ verdict resolves to its **recommended** branch (the one the gate prose
87
+ marks "Recommended") rather than prompting the three-way choice. The
88
+ verdict / clarity scoring is still recorded in chat (one line); only the
89
+ *wait* is suppressed. The clarity-gate *scoring* itself (deterministic
90
+ section-presence in Phase 6 step 1) still runs — `--yes` suppresses only
91
+ the operator confirm of the proposed refinement.
92
+ 2. **Gate #2 — the Phase-7 Epic operator review gate.** When risk routing
93
+ forces a review (`planningRisk.requiresReview === true`, or the operator
94
+ also passed `--force-review`),
95
+ [`helpers/plan-epic.md`](helpers/plan-epic.md) Phase 7 STOPs for operator
96
+ approval of the PRD / Tech Spec / Acceptance Spec before decomposition.
97
+ Under `--yes` this review auto-proceeds straight to Phase 8 — the three
98
+ context tickets stay **open** through delivery exactly as on the low-risk
99
+ auto-proceed path.
100
+
101
+ **Composition.** `--yes` is orthogonal to the other planning flags and
102
+ composes cleanly:
103
+
104
+ - With **`--allow-over-budget`**: `--yes` suppresses the gate *waits* while
105
+ `--allow-over-budget` still governs the `maxTickets` over-budget persist —
106
+ passing `--yes` alone does **not** waive the budget gate.
107
+ - With the **risk-routed Phase-7 skip**: when risk routing already skips the
108
+ Phase-7 review (low-risk, no `--force-review`), `--yes` is a no-op for that
109
+ gate — it only *forces a proceed where the gate would otherwise STOP*, it
110
+ never *adds* a stop or relaxes any non-HITL validator.
111
+
112
+ **`--yes` suppresses only the HITL operator *waits* above.** It does **not**
113
+ relax any deterministic gate — the Phase 6 Epic Clarity Gate **scoring**
114
+ (section-presence), the Phase 7.5 Tech Spec Section Gate, the file-assumption
115
+ / DAG validators, the Phase 10 readiness healthcheck, and the `agent::blocked`
116
+ runtime pause all behave exactly as without the flag. A `--yes` run that hits
117
+ one of those still fails closed; the flag is an operator-input suppressor, not
118
+ a validation override. The other operator-input *waits* in the pipeline also
119
+ auto-proceed under `--yes` — the non-blocking Phase 2 duplicate-search pause
120
+ (distinct-Epic confirmed), the Phase 6 clarity refinement-diff confirm
121
+ (refined body approved), and the advisory Phase 8.3/8.4/8.5
122
+ consolidation/critic diffs (consolidated/critic output applied) — since they
123
+ are operator-input waits, not validators. The two *named* HITL STOP gates the
124
+ Story tracks (gate #1, gate #2) are the load-bearing pair; these additional
125
+ waits are auto-proceeded for the same headless reason.
126
+
61
127
  ## First-run preflight
62
128
 
63
129
  Before routing to a path helper, run a **first-run preflight** to catch
@@ -109,9 +175,11 @@ stubbed docs, or an unready doctor verdict).
109
175
  [`core/scope-triage`](../skills/core/scope-triage/SKILL.md) skill on the
110
176
  seed. Record the verdict in chat (one line).
111
177
  4. **Delegate.** Read the selected path helper **in full** and execute it
112
- from its entry phase, forwarding the absorbed flags. The helper's phase
113
- numbering, HITL gates, and scripts are unchanged — this router adds no
114
- phase content.
178
+ from its entry phase, forwarding the absorbed flags (including `--yes`).
179
+ The helper's phase numbering, HITL gates, and scripts are unchanged — this
180
+ router adds no phase content. When `--yes` is present, the two HITL STOP
181
+ gates auto-proceed per [Headless / non-interactive mode](#headless--non-interactive-mode---yes)
182
+ above; every deterministic gate still runs.
115
183
  5. **Internal returns.** When a path helper would historically have handed
116
184
  off to the other planning command, switch helpers in-place and continue;
117
185
  surface the switch to the operator as a one-line note.
package/docs/CHANGELOG.md CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## [1.73.0](https://github.com/dsj1984/mandrel/compare/mandrel-v1.72.0...mandrel-v1.73.0) (2026-06-17)
6
+
7
+
8
+ ### Added
9
+
10
+ * generate GitHub issue forms from the Story/Epic body SSOT (human↔agent ticket consistency) ([#4227](https://github.com/dsj1984/mandrel/issues/4227)) ([#4233](https://github.com/dsj1984/mandrel/issues/4233)) ([d42b0cb](https://github.com/dsj1984/mandrel/commit/d42b0cb6122f46d8528d4bbb3793f27be2854bc1))
11
+ * **plan:** robust tech-stack hydrator resolution (refs [#4228](https://github.com/dsj1984/mandrel/issues/4228)) ([#4230](https://github.com/dsj1984/mandrel/issues/4230)) ([4f1ad3c](https://github.com/dsj1984/mandrel/commit/4f1ad3c13b9a50f4e436d63282c7f6c2f461ab0e))
12
+
13
+ ## [1.72.0](https://github.com/dsj1984/mandrel/compare/mandrel-v1.71.0...mandrel-v1.72.0) (2026-06-17)
14
+
15
+
16
+ ### Added
17
+
18
+ * **plan:** add a headless/non-interactive flag to suppress the ideation one-pager + Phase-7 review gate ([#4223](https://github.com/dsj1984/mandrel/issues/4223)) ([#4226](https://github.com/dsj1984/mandrel/issues/4226)) ([9ffa355](https://github.com/dsj1984/mandrel/commit/9ffa35543f897199c096ad45a568de39b0424ba7))
19
+
20
+
21
+ ### Fixed
22
+
23
+ * **deliver:** fail open on unparseable code-review severity bullets in auto-merge gate (refs [#4222](https://github.com/dsj1984/mandrel/issues/4222)) ([#4224](https://github.com/dsj1984/mandrel/issues/4224)) ([ca949bd](https://github.com/dsj1984/mandrel/commit/ca949bd7d98eea440571db6636f8be2f2128c3b9))
24
+
5
25
  ## [1.71.0](https://github.com/dsj1984/mandrel/compare/mandrel-v1.70.0...mandrel-v1.71.0) (2026-06-16)
6
26
 
7
27
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mandrel",
3
- "version": "1.71.0",
3
+ "version": "1.73.0",
4
4
  "description": "Claude Code-first opinionated workflow framework: instructions, personas, skills, and SDLC workflows that govern AI coding assistants.",
5
5
  "files": [
6
6
  ".agents/",