name: geniro:plan
description: "Use when turning a vague idea or feature request into an approved spec.md before /geniro:implement. Spec-first planning workflow: explore → grill (decision-tree clarification) → propose 2-3 approaches → approve sections → write spec.md → mechanical validate → user approve → handoff. Skip for well-formed specs already authored — use /geniro:implement directly. Optional --deep deepens the analysis — a wider approach search plus a 3-vote majority verification of the spec's cited claims (higher quality, higher cost). Optional --artifact builds a live, auto-updating visual artifact of the plan as it develops."
context: main
allowed-tools: [Read, Write, Bash, Glob, Grep, Agent, AskUserQuestion, TodoWrite, WebSearch, WebFetch, Workflow]
model: inherit
argument-hint: " [--prd] [--deep] [--artifact]"
/geniro:plan — Spec-first planning
Contents
- When to use / When NOT to use
- Phase structure
- Loop invariants
- Budgets — quality-first framing
- State persistence
- Memory I/O
- ACI per-phase tool surface
- Task execution entry
- Anti-rationalization
Turn a vague idea into an approved spec.md that /geniro:implement can consume directly. This skill is a thin wrapper around the canonical planning loop (Phases 0–9 plus the conditional Phase 0.5 problem-discovery and the always-on Phase 7.5 spec-challenge; Phase 2 Visual Companion is UI-conditional — fires only when the UI trigger matches) in ${CLAUDE_PLUGIN_ROOT}/skills/plan/plan-loop.md. It applies the loop verbatim.
Output:
- spec.md at
.geniro/planning/<task-slug>/spec.mdwith the fixed 11-section schema, goal-state frontmatter, and all three design-doc detection markers per${CLAUDE_PLUGIN_ROOT}/skills/_shared/design-doc-detect.md. - For Big tasks: sibling
milestone-N.mdfiles. - state.md at the same task-dir tracking phase progress + AUQ answers.
git commitof spec.md (+ milestones) — fires at Phase 8 post-approve, NOT Phase 6.- Phase 8.7 executes any user-authored
### After user-approvesteps loaded from.geniro/instructions/plan.md— the generic extension point for project-specific post-plan work (e.g. duplicating the approved plan into an OpenSpec change via the project's own tooling). The plugin stays tool-agnostic; the procedure lives in the project's instruction file. - Phase 9 handoff — prints the milestone-aware
/geniro:implement <path>command (no question — the spec is already saved and committed at Phase 8).
The HARD-GATE in plan-loop.md prevents any implementation invocation until Phase 8 user-approve returns "Approve".
Flags & presets: --prd, --deep, --artifact, and the launch modifiers (workspace / ship / freshness:) that pre-fill the spec's launch_config are cataloged in ${CLAUDE_PLUGIN_ROOT}/skills/_shared/flags-reference.md.
When to use
- User has an idea but no spec yet.
- $ARGUMENTS contains a topic string OR a path to an existing design doc.
- Topic spans new functionality (vs a bug fix, which routes to
/geniro:debug). - Pre-implementation refinement (vs in-implementation tweaks, which route to
/geniro:implementwith the original spec + adjustment description as new $ARGUMENTS).
When NOT to use
- Spec already written → use
/geniro:implement <design-path>directly. Detection is automatic per${CLAUDE_PLUGIN_ROOT}/skills/_shared/design-doc-detect.md. - Bug to fix →
/geniro:debugfor root cause;/geniro:implementfor the patch. - Code-file path (NOT a design doc) passed as $ARGUMENTS → error per Phase 0 (design-doc-detect CODE_REFERENCE branch).
Phase structure
mode-detect → [problem-discovery: --prd only] → explore → [visual-companion: UI-conditional] → clarify → approaches → section-approve → write-spec → validate → spec-challenge → user-approve → handoff → done
Any phase may branch to the aborted terminal on cancel; phase-8 revision / validator hard-fail re-enters write-spec or section-approve.
Terminal states: done, aborted. The SessionStart hook treats both as "planning complete or cancelled — no resume needed". Every transition into a terminal state first runs the transient cleanup in ${CLAUDE_PLUGIN_ROOT}/skills/plan/plan-loop.md §9.2 (clean_task_transients against the planning task-dir) before the terminal phase: write — the per-facet research, approach-critique, and spec-challenge scratch files left in a finished task-dir otherwise resurface as recurring migration warnings on every /geniro:update. Cleanup deletes only this run's scratch; the durable spec.md / state.md / plan-*.md / milestone-*.md survive.
Phase contracts are defined in ${CLAUDE_PLUGIN_ROOT}/skills/plan/plan-loop.md:
| Phase | Purpose | Plan-loop section |
|---|---|---|
| 0 | Mode detect (also detects the opt-in --prd, --deep, and --artifact flags; asks the visual-artifact opt-in question when --artifact is absent, per ${CLAUDE_PLUGIN_ROOT}/skills/_shared/plan-artifact.md) |
§"Phase 0 — Mode detect" |
| 0.5 | Problem discovery (opt-in — fires only with --prd: problem-first interview before explore, feeds the spec's optional ## Problem & Evidence section) |
§"Phase 0.5 — Problem discovery" |
| 1 | Explore (effort-tier-scaled spawns + custom-instructions/project-snapshot/past-learnings refresh + workflow_refs fetch) | §"Phase 1 — Explore" |
| 2 | Visual Companion (UI-conditional — calls ui-preview-gate.md) | §"Phase 2 — Visual Companion" |
| 3 | Grill (decision-tree clarification — depth-first walk of the design's open decisions, one question at a time, each preceded by a message-first framing then a lean single-question AUQ with a recommended answer; the frontier regenerates after each answer so a later question adapts to or drops on an earlier one; no fixed cap — bounded by a summarize-and-continue checkpoint AUQ every ~6 questions or at branch completion), plus the Standard/Deep depth question asked once at wrap-up when --deep is absent |
§"Phase 3 — Grill (decision-tree clarification)" |
| 4 | Approaches (2-3 rendered to a chat message in the shared visual language — progress tracker, plain-English digest, diagrams — then ONE lean AUQ with Recommended first; when an approach involves non-trivial code an external library could own (effort tier Small/Medium/Big — skip Trivial), folds a build-vs-buy option into the approach trade-offs per ${CLAUDE_PLUGIN_ROOT}/skills/_shared/library-reuse-audit.md MODE: plan — verified candidate libraries with links; the approach approval is the confirmation, the binding install confirmation is deferred to /geniro:implement; --deep: judge-panel approach search + 3× feasibility critics with majority vote — ${CLAUDE_PLUGIN_ROOT}/skills/plan/deep-mode-reference.md) |
§"Phase 4 — Approaches" |
| 5 | Cluster approval (fixed 11-section schema grouped into 3 dependency-ordered clusters; each cluster rendered in the visual language — progress tracker, one-sentence opener, scope/steps/done visuals, friendly per-section digests — then ONE lean AUQ — Approve all / Explain a section further / Revise specific sections / Cancel; milestone-mode) | §"Phase 5 — Section approval" |
| 6 | Write spec.md (NO auto-commit; workflow_refs[] copied from state.md) |
§"Phase 6 — Write spec.md" |
| 7 | Mechanical validator (full check set — adds workflow_refs_consistency) |
§"Phase 7 — Mechanical validator" |
| 7.5 | Spec challenge (always-on adversarial pass — verify claims, generate alternatives, red-team; advisory, fail-open; --deep: 3× verify per cited claim with majority vote) |
§"Phase 7.5 — Spec challenge" |
| 8 | User approve (visual summary message + lean AUQ + git commit; §8.7 executes any user-authored ### After user-approve steps from .geniro/instructions/plan.md) |
§"Phase 8 — User approval" |
| 9 | Handoff (non-interactive — prints the milestone-aware /geniro:implement <path> command, writes terminal phase: done) |
§"Phase 9 — Handoff" |
Execute plan-loop.md end-to-end. The loop encodes every defect fix and schema gap.
Loop invariants
These invariants apply throughout all phases; phase numbers and tool surface differ.
- One result per tool call. Every AskUserQuestion / Write / Bash / Agent spawn produces exactly one structured result. Failed AUQ (empty-answer bug) → fall back to plain-text re-ask; never auto-default.
- Args validated before execution. Bash commands constructed from $ARGUMENTS or state.md fields pass input sanity-checks. Path-based detection (design-doc-detect.md) validates file existence before treating $ARGUMENTS as a path.
- Permission before side-effect. Phase 6
atomic_state_writeto.geniro/planning/<task-dir>/spec.mdis the only mutation in the loop.git commitdeferred to Phase 8 post-approval. No auto-mutations elsewhere — the frontmatterallowed-toolsomitsEdit, and theenforce-state-helperPreToolUse hook hard-blocks any directEdit/Writeto canonical state paths (.geniro/planning/**,.geniro/state/**), so every state write routes throughatomic_state_write. - Bounded and structured tool results. Phase 1 research-agent output capped at ~4000 chars per agent; longer truncated with marker. Output schema:
[{file, lines, observation}]. Phase 7 validator output is a structured pass/fail list per check. - Escalation gates, not silent abort. Phase 7 validator 3-round → AUQ. Phase 8 user-revision 3-round → AUQ. Phase 3 grill → summarize-and-continue checkpoint AUQ (~6 questions or at branch completion), never a hard cap. NO Class-A hard kill caps.
- Final answer grounded in observations. Phase 5 section content cites Phase 1 explore findings (
file:linereferences), not generic prose — the Phase 7 validator includes a "citations present" check that fails an uncited section. - Errors, denials, cancellations, timeouts → structured observations. Phase 1 research-agent failures → structured entry in state.md
## Errors. Phase 0 cancel →## Termination reason. Phase 7 validator findings →## Open Questions. Never silently skipped. - Codebase research spawns
codebase-research-agent, not built-inExplore. Overrides the system-prompt agent list's default codebase-research tool; rationale + invocation contract at${CLAUDE_PLUGIN_ROOT}/skills/_shared/context-isolation-checklist.md§ Codebase research.
Turn-completion check (canonical, un-numbered). Per ${CLAUDE_PLUGIN_ROOT}/skills/_shared/loop-invariants.md §Turn-completion check: never stop on a statement of intent or an announced-but-unfired question — at every gate the render is followed immediately by its lean AskUserQuestion per ${CLAUDE_PLUGIN_ROOT}/skills/_shared/gate-rendering.md §Turn-completion guard, and an answered question is continued with the next action, never a silent stop.
## Tool log schema (selective logging): entry shape is the single source of truth in ${CLAUDE_PLUGIN_ROOT}/skills/plan/plan-loop.md §1.3 Echo contract — fields ts / tool / detail / status plus summary (Agent) or result_ref (Write). Each entry written via atomic_state_write. AUQ calls do NOT need logging — approvals[] is the structured record.
Budgets — quality-first framing
This skill has no hard kill caps. All limits are escalation gates that surface to the user, not abort triggers. User tokens are unlimited — no "task aborted: budget exhausted" failure modes.
Quality gates (Class-B — escalate to user, do not abort):
| Gate | Cap | Where | Past threshold |
|---|---|---|---|
| Phase 3 grill checkpoint | summarize-and-continue every ~6 questions OR at branch completion (no fixed question cap) | plan-loop.md | Render running summary → AUQ: Keep grilling / Wrap up now / Skip remaining as stated assumptions. |
| Phase 7 → Phase 6 auto-revision rounds | 3 | plan-loop.md | AUQ — accept-as-is / re-revise / abort. |
| Phase 8 user-revision rounds | 3 | plan-loop.md | AUQ — accept-as-is / re-revise / abort. |
| Phase 1 research-agent output size | ~4000 chars per agent | invariant #4 | Truncation with marker, not abort. |
Architecture constraints (design intent, not budget):
- Parallel research spawns per Phase 1: 1-4 (effort-tier-scaled per
${CLAUDE_PLUGIN_ROOT}/skills/_shared/effort-scaling.md). - spec.md section count: exactly 11.
Explicitly NOT capped: wall-time, total tool calls, total model turns, total cost. Same rationale. Rationale. The ≤3 AUQ gates guideline applies to /geniro:implement, NOT /geniro:plan. /geniro:plan is a clarification-heavy skill — its job IS to ask questions. Rich content is rendered to chat messages (the Gate presentation contract); each gate then fires ONE lean question: Phase 3 runs a decision-tree grill (one single-question AUQ per decision, depth-first, each preceded by its own framing, with a summarize-and-continue checkpoint every ~6 questions or at branch completion — variable count, no fixed cap) + Phase 4 ×1 + Phase 5 ×3 (one per cluster, not per section) + Phase 8 ×1. Phase 3 trades round-trips for per-question clarity (focused explanation + answers that reshape the tree frontier); the checkpoint is the off-ramp that keeps the grill bounded by the user's judgment rather than a fixed number. Phase 5 stays one-per-cluster (not one-per-section), keeping the questions the user answers there at 3 not ~11. Explain-further rounds add re-asks only when the user requests them.
State persistence
Task directory: .geniro/planning/<task-slug>/
state.md frontmatter:
---
tier: T1.5
producer: plan
schema-version: 1
branch: <git-branch>
worktree: <git-rev-parse-show-toplevel> # optional, recommended for cross-worktree resume
timestamp: <ISO-8601 UTC>
phase: <state-machine-enum>
status: in-progress
non-resumable-actions: []
approvals: []
task_slug: <slug>
mode: <IDEA|DESIGN_DOC>
prd_mode: true # optional, present only when --prd was passed (Phase 0)
deep-mode: <true|false> # optional, set by the --deep flag (Phase 0); missing reads as false
artifact_mode: true # optional, present only when the user opted into the visual artifact (Phase 0 question or --artifact)
artifact_status: pending|live|unavailable # optional, present only in artifact mode — publish lifecycle state
artifact_url: "<url>" # optional, present once the page is published live
---
The visual-artifact lifecycle is owned by ${CLAUDE_PLUGIN_ROOT}/skills/_shared/plan-artifact.md; the captured claude.ai URL persists in state.md so a later session re-targets the same page instead of publishing a duplicate.
When deep-mode: true, Phase 4 and Phase 7.5 run their deeper paths via an internal Workflow(...) per ${CLAUDE_PLUGIN_ROOT}/skills/plan/deep-mode-reference.md; persist the activation to approvals[] category deep_mode_choice so a resume re-applies it. When --deep is absent, a Standard/Deep depth question is asked as the last question in the Phase 3 clarify sequence (skipped on a Trivial task → flag-only there); pick Deep there to set deep-mode: true.
Write contract. Every state.md AND spec.md mutation goes through atomic_state_write from ${CLAUDE_PLUGIN_ROOT}/lib/atomic-state-write.sh, never direct Edit/Write on canonical state paths — the enforce-state-helper hook hard-blocks such direct writes. The frontmatter allowed-tools omits Edit, and the hook hard-blocks direct Edit/Write to canonical state paths (.geniro/planning/**, .geniro/state/**), so both artifacts are written through the helper while a /geniro:plan run is active.
Validation before resume. When Phase 0 detects a pre-existing state.md (resume path), pre-flight via validate_state_file:
source "${CLAUDE_PLUGIN_ROOT}/lib/validate-state-file.sh"
if ! validate_state_file ".geniro/planning/<task-slug>/state.md"; then
# Open recovery AskUserQuestion (delete-and-restart / open-in-editor / update-worktree-path / skip-emergency)
...
fi
Memory I/O
Full Phase 1 entry inventory + per-phase write sites. See ${CLAUDE_PLUGIN_ROOT}/skills/plan/plan-loop.md for full call signatures.
| Phase | Helper | Direction | Notes |
|---|---|---|---|
| Phase 1 entry | load-custom-instructions (MODE: refresh) |
read L4 | scope = plan + global + code-style |
| Phase 1 entry | load_semantic |
read L3 | top-2 default; fingerprint drift check |
| Phase 1 entry | query_learnings |
read L2 | tags inferred from $ARGUMENTS topic |
| Phase 1 entry | resolve-conflicts |
read protocol | fires only if L4/L3/L2 disagree |
| Phase 1.4 (conditional) | matching tracker MCP (mcp__linear__get_issue, etc.) |
read external | fires only when $ARGUMENTS carries a tracker URL/ID; payload → state.md ## Workflow Refs |
| Phase 1.4 (conditional) | atomic_state_write |
write T1.5 | state.md ## Workflow Refs body section |
| Phase 2 (conditional) | ${CLAUDE_PLUGIN_ROOT}/skills/_shared/ui-preview-gate.md |
helper procedure | fires only when UI trigger matches; approved description → state.md ## UI Preview |
| Phase 6 | atomic_state_write |
write T1.5 | state.md ## Tool log after the spec.md write |
| Phase 6 | atomic_state_write |
write T1.5 | spec.md frontmatter workflow_refs[] copied from state.md ## Workflow Refs when present |
| Phase 7 (hard-fail) | atomic_state_write |
write T1.5 | state.md ## Open Questions |
| Phase 8.4 | atomic_state_write |
write T1.5 | state.md non-resumable-actions[] after git commit |
| Phase 8.5 (conditional) | emit_learning |
write L2 | decision type when Phase 4 had ≥2 approaches with trade-off |
Default trust for L2 emits: verified (planning decisions are user-validated via Phase 8 AUQ).
Cross-layer conflict surfacing: when L4/L3/L2 reads disagree, apply ${CLAUDE_PLUGIN_ROOT}/skills/_shared/resolve-conflicts.md protocol — soft conflict prints notice and continues; hard conflict halts with AUQ.
ACI per-phase tool surface
| Phase | Allowed | Blocked |
|---|---|---|
| Phase 0 (Mode detect) | Read / Bash (read-only: ls, file) |
All mutations |
| Phase 1 (Explore) | Read / Grep / Glob / Bash (read-only) / Agent (research spawn — OMIT model=) / tracker MCP read (mcp__linear__get_issue, etc.) / native Artifact publish (when artifact mode is on, via ${CLAUDE_PLUGIN_ROOT}/skills/_shared/plan-artifact.md) |
Edit / Write outside state.md |
| Phase 2 (Visual Companion, UI-conditional) | Read / Agent (UI description spawn, OMIT model= — inherits orchestrator tier per ui-preview-gate.md) / AskUserQuestion / atomic_state_write (state.md ## UI Preview) |
Edit / Write outside state.md |
| Phase 3-5 (Clarify / Approaches / Section approve) | Read / Grep / Glob / AskUserQuestion / atomic_state_write (state.md only) / Agent (Phase 4 top-level general-purpose web-research spawn for library candidates — WebSearch + WebFetch, OMIT model=) / Workflow (Phase 4 approach panel + critics, deep-mode: true only — OMIT model=) |
Edit / mutating Bash |
| Phase 6 (Write spec) | atomic_state_write (spec.md + state.md) | Edit / direct Write / mutating Bash |
| Phase 7 (Validate) | Read / atomic_state_write (state.md ## Open Questions) |
All other mutations |
| Phase 7.5 (Spec challenge, always-on) | Read / Grep / Glob / Bash (read-only) / Agent (claim-verifier spawn — OMIT model=) / Workflow (3× claim verify, deep-mode: true only) / atomic_state_write (state.md ## Errors) |
Edit / Write outside state.md / mutating Bash |
| Phase 8 (User approve) | AskUserQuestion / Bash (git add, git commit only) / atomic_state_write |
Edit / general-purpose Bash |
| Phase 9 (Handoff) | Read / Bash (terminal state.md write via atomic_state_write; clean_task_transients rm of this run's own scratch in the planning task-dir) |
All file mutations except the state.md terminal write and the transient-scratch cleanup (deleting the skill's own scratch is not a source mutation) |
Mutation enforcement: frontmatter allowed-tools excludes Edit (this skill never edits in place).
Existing safety layer: file-protection hook, git-guardrails, .geniro/ deletion guard apply across all phases.
Task execution entry
- Check for existing state.md. Glob
.geniro/planning/*/state.mdfor a file matching the resolved task slug:
- No state.md → fresh run. Proceed to Phase 0.
- state.md exists, phase in non-terminal set → resume from
phase:value. the SessionStart hook re-injects context. - state.md exists, phase in terminal set (
done/aborted) → task complete. Surface terminal state to user; if $ARGUMENTS carries a new topic, derive a new slug, fresh run.
Validate state.md if found (
validate_state_file). On fail, open recovery AUQ.TodoWrite checklist. Add: Detect mode / Problem discovery (--prd only) / Offer the plan artifact / Explore codebase / Visual companion / Grill the design decisions / Propose approaches / Approve plan in groups / Write spec / Validate spec / Challenge spec / User approval / Handoff. Mark the first item in_progress; update each as it completes. The problem-discovery item is marked completed-skipped when
--prdwas not passed; Phase 2 is marked completed-skipped when the UI trigger doesn't fire; the plan-artifact item is marked completed-skipped when the user declines the opt-in or the session can't publish.Begin Phase 0. Execute
${CLAUDE_PLUGIN_ROOT}/skills/plan/plan-loop.mdend-to-end.
Anti-rationalization
Do NOT reintroduce these anti-patterns:
| Your reasoning | Why it's wrong |
|---|---|
"I'll cram the section digest into the AUQ preview so each option is self-contained." |
The preview side-box is a narrow monospace panel beside the option list — too small for a section digest, code examples, and diagrams; the user squints at it per option. Render the cluster to a chat message (full width, persists in scrollback) per the Gate presentation contract, then keep the AUQ options lean. Cramming content into preview is the exact failure mode message-first exists to fix. |
| "I'll author all 11 sections and fire one approval for the whole spec — fewer questions is strictly better." | Authoring everything before the first gate surfaces cross-section issues only after the user reads the whole plan — too late to cheaply correct. Author → render → gate ONE cluster, then the next; cluster 1 is approved before cluster 2 is authored, so each cluster builds on grounded prior content. One question per cluster (not per section, not per whole spec) is the chosen granularity — per-section approvals[] grain is preserved by the Revise-picker. |
| "Skip Phase 2 Visual Companion — UI intent fits in Phase 5 sections later." | Phase 2 fires only when the UI trigger matches (Phase 1 found UI files OR topic carries a UI noun). When it fires, the approved description IS the substrate Phase 5 sections 6 + 9 cite. Skipping it forces the user to describe visual intent twice (once in Phase 3 prose, again to /geniro:implement when the rendered UI doesn't match). |
| "Add a refine/edit mode that re-derives spec sections from an existing design doc — saves three phases of re-work." | Re-deriving sections from prose is structurally-lossy: downstream consumers parse a malformed spec.md. DESIGN_DOC mode offers Start-fresh-with-doc-as-context (or Cancel) precisely because starting fresh produces a schema-clean spec.md. |
| "Phase 7 mechanical validator misses cases a smart LLM would catch." | The validator checks cover the mechanical surface (including workflow_refs_consistency). Phase 8 user-approve catches everything else — the user IS the smart-LLM check. |
| "Auto-commit at Phase 6 is convenient — drop a commit if Phase 8 rejects." | Rejection-induced commit-drop = forced git reset / git revert, polluting git history (every revision round would leave a commit). Phase 8 post-approve commit is a single commit per approved spec. |
| "The state-write enforcement is over-engineered — model can be trusted." | The model can be reasoned-with, jailbroken, or instructed via a compromised CLAUDE.md. The frontmatter allowed-tools field (omits Edit) + the enforce-state-helper PreToolUse hook (hard-blocks direct Edit/Write to canonical state paths) are the only mechanical layers between a bad-intent prompt and a modified source tree. Belt + suspenders. |
| "Re-cap Phase 3 at ~5 questions like before, OR just grill forever without pausing." | Phase 3 is an uncapped decision-tree grill, bounded by the checkpoint gate — summarize-and-continue every ~6 questions or when a branch resolves (plan-loop §3.4). Re-imposing a flat cap drops the relentless property the grill exists to provide; skipping the checkpoint drops the user's off-ramp. Keep both: no fixed cap, always a checkpoint. |
| "11-section spec.md schema is too rigid for small tasks." | Sections 4 / 5 / 10 can be "none with rationale" for Trivial. The schema is structural commitment (every consumer can rely on section presence), not content commitment. |
| "Phase 7 validator hard-fail blocks user — they're stuck with auto-revision rounds." | 3-round escalation cap. On round 3, AUQ surfaces to user with "accept as-is" option. User has agency at all times. |
| "Drop the milestone-mode AUQ — a Big task can just emit a spec and the user decides later." | Slicing into milestones IS a planning decision. Punting it to /geniro:implement time means the user discovers a 50-step spec is unmanageable, and must come back to re-plan. Phase 5 surfaces the choice when context AND attention are present. |
| "Add a wall-time / token kill cap so runaway /geniro:plan sessions abort cleanly." | Class-A hard caps forbidden by Class-B gates only (Phase 3 grill checkpoint, Phase 7 3-round, Phase 8 3-round) — all escalate to user, not abort. |
| "Auto-default empty AUQ answer to the Recommended option." | Forbidden. Empty answer = upstream Claude Code bug; fall back to plain-text re-ask. Auto-default silently mutates user intent. |
| "Skip persisting Phase 3 clarifying answers — they're trivial." | Compaction mid-Phase-5 round 2 loses 5 AUQs of user input — that data-loss is exactly what approvals[] persistence prevents, so it is non-negotiable. |
| "Bypass git pre-commit hooks with --no-verify when committing spec.md in Phase 8.4." | Hooks fail for a reason. Investigate root cause, not bypass. CLAUDE.md-level prohibition; honors it. |