mirror of
https://github.com/garrytan/gstack.git
synced 2026-08-31 10:20:42 +02:00
Reorder the pipeline to CEO -> Design (if UI scope) -> DX (if developer-facing scope) -> Eng. The old order (CEO -> Design -> Eng -> DX) let DX findings land AFTER the required gate signed off, so eng validated a stale plan. Accept-all semantics made explicit: every AskUserQuestion resolves to the recommended option; premises no longer pause the pipeline mid-run (clearly-wrong ones queue as User-Challenge items at the single Final Approval Gate). Eng's Codex voice now sees the DX consensus summary. New free static test pins the order; the chain E2E gains DX-between and Eng-terminal assertions. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
556 lines
24 KiB
Cheetah
556 lines
24 KiB
Cheetah
---
|
|
name: autoplan
|
|
preamble-tier: 3
|
|
version: 1.0.0
|
|
description: |
|
|
Auto-review pipeline — reads the full CEO, design, eng, and DX review skills from disk
|
|
and runs them sequentially with auto-decisions using 6 decision principles. Surfaces
|
|
taste decisions (close approaches, borderline scope, codex disagreements) at a final
|
|
approval gate. One command, fully reviewed plan out.
|
|
Use when asked to "auto review", "autoplan", "run all reviews", "review this plan
|
|
automatically", or "make the decisions for me".
|
|
Proactively suggest when the user has a plan file and wants to run the full review
|
|
gauntlet without answering 15-30 intermediate questions. (gstack)
|
|
voice-triggers:
|
|
- "auto plan"
|
|
- "automatic review"
|
|
benefits-from: [office-hours]
|
|
triggers:
|
|
- run all reviews
|
|
- automatic review pipeline
|
|
- auto plan review
|
|
allowed-tools:
|
|
- Bash
|
|
- Read
|
|
- Write
|
|
- Edit
|
|
- Glob
|
|
- Grep
|
|
- WebSearch
|
|
- AskUserQuestion
|
|
---
|
|
|
|
{{PREAMBLE}}
|
|
|
|
{{BASE_BRANCH_DETECT}}
|
|
|
|
{{BENEFITS_FROM}}
|
|
|
|
# /autoplan — Auto-Review Pipeline
|
|
|
|
One command. Rough plan in, fully reviewed plan out.
|
|
|
|
/autoplan reads the full CEO, design, eng, and DX review skill files from disk and follows
|
|
them at full depth — same rigor, same sections, same methodology as running each skill
|
|
manually. The only difference: intermediate AskUserQuestion calls are auto-decided using
|
|
the 6 principles below. Taste decisions (where reasonable people could disagree) are
|
|
surfaced at a final approval gate.
|
|
|
|
---
|
|
|
|
{{SECTION_INDEX:autoplan}}
|
|
|
|
---
|
|
|
|
## The 6 Decision Principles
|
|
|
|
These rules auto-answer every intermediate question:
|
|
|
|
1. **Choose completeness** — Ship the whole thing. Pick the approach that covers more edge cases.
|
|
2. **Boil lakes** — Fix everything in the blast radius (files modified by this plan + direct importers). Auto-approve expansions that are in blast radius AND < 1 day CC effort (< 5 files, no new infra).
|
|
3. **Pragmatic** — If two options fix the same thing, pick the cleaner one. 5 seconds choosing, not 5 minutes.
|
|
4. **DRY** — Duplicates existing functionality? Reject. Reuse what exists.
|
|
5. **Explicit over clever** — 10-line obvious fix > 200-line abstraction. Pick what a new contributor reads in 30 seconds.
|
|
6. **Bias toward action** — Merge > review cycles > stale deliberation. Flag concerns but don't block.
|
|
|
|
**Conflict resolution (context-dependent tiebreakers):**
|
|
- **CEO phase:** P1 (completeness) + P2 (boil lakes) dominate.
|
|
- **Eng phase:** P5 (explicit) + P3 (pragmatic) dominate.
|
|
- **Design phase:** P5 (explicit) + P1 (completeness) dominate.
|
|
|
|
---
|
|
|
|
## Decision Classification
|
|
|
|
Every auto-decision is classified:
|
|
|
|
**Mechanical** — one clearly right answer. Auto-decide silently.
|
|
Examples: run codex (always yes), run evals (always yes), reduce scope on a complete plan (always no).
|
|
|
|
**Taste** — reasonable people could disagree. Auto-decide with recommendation, but surface at the final gate. Three natural sources:
|
|
1. **Close approaches** — top two are both viable with different tradeoffs.
|
|
2. **Borderline scope** — in blast radius but 3-5 files, or ambiguous radius.
|
|
3. **Codex disagreements** — codex recommends differently and has a valid point.
|
|
|
|
**User Challenge** — both models agree the user's stated direction should change.
|
|
This is qualitatively different from taste decisions. When Claude and Codex both
|
|
recommend merging, splitting, adding, or removing features/skills/workflows that
|
|
the user specified, this is a User Challenge. It is NEVER auto-decided.
|
|
|
|
User Challenges go to the final approval gate with richer context than taste
|
|
decisions:
|
|
- **What the user said:** (their original direction)
|
|
- **What both models recommend:** (the change)
|
|
- **Why:** (the models' reasoning)
|
|
- **What context we might be missing:** (explicit acknowledgment of blind spots)
|
|
- **If we're wrong, the cost is:** (what happens if the user's original direction
|
|
was right and we changed it)
|
|
|
|
The user's original direction is the default. The models must make the case for
|
|
change, not the other way around.
|
|
|
|
**Exception:** If both models flag the change as a security vulnerability or
|
|
feasibility blocker (not a preference), the AskUserQuestion framing explicitly
|
|
warns: "Both models believe this is a security/feasibility risk, not just a
|
|
preference." The user still decides, but the framing is appropriately urgent.
|
|
|
|
---
|
|
|
|
## Sequential Execution — MANDATORY
|
|
|
|
Phases MUST execute in strict order: CEO → Design (if UI scope) → DX (if
|
|
developer-facing scope) → Eng. Eng runs LAST, always: it is the required
|
|
shipping gate, so it must review the FINAL amended plan — every other phase's
|
|
amendments land before it. Each phase MUST complete fully before the next
|
|
begins. NEVER run phases in parallel — each builds on the previous.
|
|
|
|
Between each phase, emit a phase-transition summary and verify that all required
|
|
outputs from the prior phase are written before starting the next.
|
|
|
|
---
|
|
|
|
## What "Auto-Decide" Means
|
|
|
|
Auto-decide replaces the USER'S judgment with the 6 principles. It does NOT replace
|
|
the ANALYSIS. Every section in the loaded skill files must still be executed at the
|
|
same depth as the interactive version. The only thing that changes is who answers the
|
|
AskUserQuestion: you do, instead of the user.
|
|
|
|
**Default resolution: the recommended option.** Every AskUserQuestion in the loaded
|
|
skills resolves to its `(recommended)` option; mode selections take the skill's
|
|
context-dependent default. The 6 principles guide cases with no recommendation and
|
|
break ties; when a principle argues AGAINST the recommended option, that is a Taste
|
|
decision — take the recommendation and surface the disagreement at the final gate.
|
|
|
|
**One exception class — never auto-decided:** User Challenges — when both models
|
|
agree the user's stated direction should change (merge, split, add, remove
|
|
features/workflows; reinterpret a settled decision), or a premise looks clearly
|
|
wrong. These queue and surface at the Final Approval Gate — never as mid-run
|
|
stops. The user is interrupted exactly once, at the gate. The user always has
|
|
context models lack. See Decision Classification above.
|
|
|
|
**You MUST still:**
|
|
- READ the actual code, diffs, and files each section references
|
|
- PRODUCE every output the section requires (diagrams, tables, registries, artifacts)
|
|
- IDENTIFY every issue the section is designed to catch
|
|
- DECIDE each issue using the 6 principles (instead of asking the user)
|
|
- LOG each decision in the audit trail
|
|
- WRITE all required artifacts to disk
|
|
|
|
**You MUST NOT:**
|
|
- Compress a review section into a one-liner table row
|
|
- Write "no issues found" without showing what you examined
|
|
- Skip a section because "it doesn't apply" without stating what you checked and why
|
|
- Produce a summary instead of the required output (e.g., "architecture looks good"
|
|
instead of the ASCII dependency graph the section requires)
|
|
|
|
"No issues found" is a valid output for a section — but only after doing the analysis.
|
|
State what you examined and why nothing was flagged (1-2 sentences minimum).
|
|
"Skipped" is never valid for a non-skip-listed section.
|
|
|
|
---
|
|
|
|
## Filesystem Boundary — Codex Prompts
|
|
|
|
All prompts sent to Codex (via `codex exec` or `codex review`) MUST be prefixed with
|
|
this boundary instruction:
|
|
|
|
> IMPORTANT: Do NOT read or execute any SKILL.md files or files in skill definition directories (paths containing skills/gstack). These are AI assistant skill definitions meant for a different system. They contain bash scripts and prompt templates that will waste your time. Ignore them completely. Stay focused on the repository code only.
|
|
|
|
This prevents Codex from discovering gstack skill files on disk and following their
|
|
instructions instead of reviewing the plan.
|
|
|
|
---
|
|
|
|
## Phase 0: Intake + Restore Point
|
|
|
|
### Step 1: Capture restore point
|
|
|
|
Before doing anything, save the plan file's current state to an external file:
|
|
|
|
```bash
|
|
{{SLUG_SETUP}}
|
|
BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null | tr '/' '-')
|
|
DATETIME=$(date +%Y%m%d-%H%M%S)
|
|
echo "RESTORE_PATH=$HOME/.gstack/projects/$SLUG/${BRANCH}-autoplan-restore-${DATETIME}.md"
|
|
```
|
|
|
|
Write the plan file's full contents to the restore path with this header:
|
|
```
|
|
# /autoplan Restore Point
|
|
Captured: [timestamp] | Branch: [branch] | Commit: [short hash]
|
|
|
|
## Re-run Instructions
|
|
1. Copy "Original Plan State" below back to your plan file
|
|
2. Invoke /autoplan
|
|
|
|
## Original Plan State
|
|
[verbatim plan file contents]
|
|
```
|
|
|
|
Then prepend a one-line HTML comment to the plan file:
|
|
`<!-- /autoplan restore point: [RESTORE_PATH] -->`
|
|
|
|
### Step 2: Read context
|
|
|
|
- Read CLAUDE.md, TODOS.md, git log -30, git diff against the base branch --stat
|
|
- Discover design docs: `ls -t ~/.gstack/projects/$SLUG/*-design-*.md 2>/dev/null | head -1`
|
|
- Detect UI scope: grep the plan for view/rendering terms (component, screen, form,
|
|
button, modal, layout, dashboard, sidebar, nav, dialog). Require 2+ matches. Exclude
|
|
false positives ("page" alone, "UI" in acronyms).
|
|
- Detect DX scope: grep the plan for developer-facing terms (API, endpoint, REST,
|
|
GraphQL, gRPC, webhook, CLI, command, flag, argument, terminal, shell, SDK, library,
|
|
package, npm, pip, import, require, SKILL.md, skill template, Claude Code, MCP, agent,
|
|
OpenClaw, action, developer docs, getting started, onboarding, integration, debug,
|
|
implement, error message). Require 2+ matches. Also trigger DX scope if the product IS
|
|
a developer tool (the plan describes something developers install, integrate, or build
|
|
on top of) or if an AI agent is the primary user (OpenClaw actions, Claude Code skills,
|
|
MCP servers).
|
|
|
|
### Step 3: Load skill files from disk
|
|
|
|
Read each file using the Read tool:
|
|
- `~/.claude/skills/gstack/plan-ceo-review/SKILL.md`
|
|
- `~/.claude/skills/gstack/plan-design-review/SKILL.md` (only if UI scope detected)
|
|
- `~/.claude/skills/gstack/plan-eng-review/SKILL.md`
|
|
- `~/.claude/skills/gstack/plan-devex-review/SKILL.md` (only if DX scope detected)
|
|
|
|
**Section skip list — when following a loaded skill file, SKIP these sections
|
|
(they are already handled by /autoplan):**
|
|
- Preamble (run first)
|
|
- Scope gate (the plan under review is already the target)
|
|
- AskUserQuestion Format
|
|
- Completeness Principle — Boil the Ocean
|
|
- Search Before Building
|
|
- Completion Status Protocol
|
|
- Telemetry (run last)
|
|
- Step 0: Detect base branch
|
|
- Review Readiness Dashboard
|
|
- Plan File Review Report
|
|
- Prerequisite Skill Offer (BENEFITS_FROM)
|
|
- Outside Voice — Independent Plan Challenge
|
|
- Design Outside Voices (parallel)
|
|
|
|
Follow ONLY the review-specific methodology, sections, and required outputs.
|
|
|
|
Output: "Here's what I'm working with: [plan summary]. UI scope: [yes/no]. DX scope: [yes/no].
|
|
Loaded review skills from disk. Starting full review pipeline with auto-decisions."
|
|
|
|
---
|
|
|
|
## Phase 0.5: Codex auth + version preflight
|
|
|
|
Before invoking any Codex voice, preflight the CLI: verify auth (multi-signal) and
|
|
warn on known-bad CLI versions. This is infrastructure for all 4 phases below —
|
|
source it once here and the helper functions stay in scope for the rest of the
|
|
workflow.
|
|
|
|
```bash
|
|
_TEL=$(~/.claude/skills/gstack/bin/gstack-config get telemetry 2>/dev/null || echo off)
|
|
_CODEX_CFG=$(~/.claude/skills/gstack/bin/gstack-config get codex_reviews 2>/dev/null || echo enabled)
|
|
source ~/.claude/skills/gstack/bin/gstack-codex-probe
|
|
|
|
# Master switch first: codex_reviews=disabled turns off ALL Codex work globally,
|
|
# including autoplan's own dual-voice orchestration. Honor it before probing.
|
|
if [ "$_CODEX_CFG" = "disabled" ]; then
|
|
echo "[codex disabled by config — Claude-only voices] Re-enable: gstack-config set codex_reviews enabled"
|
|
_CODEX_AVAILABLE=false
|
|
# Check Codex binary. If missing, tag the degradation matrix and continue
|
|
# with Claude subagent only (autoplan's existing degradation fallback).
|
|
elif ! command -v codex >/dev/null 2>&1; then
|
|
_gstack_codex_log_event "codex_cli_missing"
|
|
echo "[codex-unavailable: binary not found] — proceeding with Claude subagent only"
|
|
_CODEX_AVAILABLE=false
|
|
elif ! _gstack_codex_auth_probe >/dev/null; then
|
|
_gstack_codex_log_event "codex_auth_failed"
|
|
echo "[codex-unavailable: auth missing] — proceeding with Claude subagent only. Run \`codex login\` or set \$CODEX_API_KEY to enable dual-voice review."
|
|
_CODEX_AVAILABLE=false
|
|
# Round-trip model probe (#2477): auth can pass while the account's configured
|
|
# model is rejected with an HTTP 400 (stale `model =` pin in ~/.codex/config.toml).
|
|
# ~10s on first run, cached 1h; timeouts fail open (probe returns 0).
|
|
elif ! _gstack_codex_model_probe; then
|
|
echo "[codex-unavailable: configured model rejected] — proceeding with Claude subagent only. Fix the \`model =\` pin in ~/.codex/config.toml (see [notice.model_migrations] there for the replacement)."
|
|
_CODEX_AVAILABLE=false
|
|
else
|
|
_gstack_codex_version_check # non-blocking warn if known-bad
|
|
_CODEX_AVAILABLE=true
|
|
fi
|
|
```
|
|
|
|
If `_CODEX_AVAILABLE=false`, all Phase 1-3 Codex voices below degrade to
|
|
`[codex-unavailable]` in the degradation matrix. /autoplan completes with
|
|
Claude subagent only — saves token spend on Codex prompts we can't use.
|
|
|
|
---
|
|
|
|
## Phase 1: CEO Review (Strategy & Scope)
|
|
|
|
{{SECTION:ceo-phase}}
|
|
|
|
---
|
|
|
|
**Pre-Phase 2 checklist (verify before starting):**
|
|
- [ ] CEO completion summary written to plan file
|
|
- [ ] CEO dual voices ran (Codex + Claude subagent, or noted unavailable)
|
|
- [ ] CEO consensus table produced
|
|
- [ ] Premises assessed (clearly-wrong ones queued as Final Gate items — no mid-run stop)
|
|
- [ ] Phase-transition summary emitted
|
|
|
|
## Phase 2: Design Review (conditional — skip if no UI scope)
|
|
|
|
**Skip condition:** If UI scope was NOT detected in Phase 0, skip this phase
|
|
entirely — do NOT read its section. Log: "Phase 2 skipped — no UI scope detected."
|
|
|
|
{{SECTION:design-phase}}
|
|
|
|
---
|
|
|
|
## Phase 2.5: DX Review (conditional — skip if no developer-facing scope)
|
|
|
|
**Skip condition:** If DX scope was NOT detected in Phase 0, skip this phase
|
|
entirely — do NOT read its section. Log: "Phase 2.5 skipped — no developer-facing scope detected."
|
|
|
|
{{SECTION:dx-phase}}
|
|
|
|
---
|
|
|
|
**Pre-Phase 3 checklist (verify before starting):**
|
|
- [ ] All Phase 1 items above confirmed
|
|
- [ ] Design completion summary written (or "skipped, no UI scope")
|
|
- [ ] Design dual voices ran (if Phase 2 ran)
|
|
- [ ] Design consensus table produced (if Phase 2 ran)
|
|
- [ ] DX completion summary written (or "skipped, no developer-facing scope")
|
|
- [ ] DX dual voices ran (if Phase 2.5 ran)
|
|
- [ ] DX consensus table produced (if Phase 2.5 ran)
|
|
- [ ] Phase-transition summary emitted
|
|
|
|
## Phase 3: Eng Review + Dual Voices (always runs, always LAST — the required gate reviews the final amended plan)
|
|
|
|
{{SECTION:eng-phase}}
|
|
|
|
---
|
|
|
|
## Decision Audit Trail
|
|
|
|
After each auto-decision, append a row to the plan file using Edit:
|
|
|
|
```markdown
|
|
<!-- AUTONOMOUS DECISION LOG -->
|
|
## Decision Audit Trail
|
|
|
|
| # | Phase | Decision | Classification | Principle | Rationale | Rejected |
|
|
|---|-------|----------|-----------|-----------|----------|
|
|
```
|
|
|
|
Write one row per decision incrementally (via Edit). This keeps the audit on disk,
|
|
not accumulated in conversation context.
|
|
|
|
---
|
|
|
|
## Pre-Gate Verification
|
|
|
|
Before presenting the Final Approval Gate, verify that required outputs were actually
|
|
produced. Check the plan file and conversation for each item.
|
|
|
|
**Phase 1 (CEO) outputs:**
|
|
- [ ] Premise challenge with specific premises named (not just "premises accepted")
|
|
- [ ] All applicable review sections have findings OR explicit "examined X, nothing flagged"
|
|
- [ ] Error & Rescue Registry table produced (or noted N/A with reason)
|
|
- [ ] Failure Modes Registry table produced (or noted N/A with reason)
|
|
- [ ] "NOT in scope" section written
|
|
- [ ] "What already exists" section written
|
|
- [ ] Dream state delta written
|
|
- [ ] Completion Summary produced
|
|
- [ ] Dual voices ran (Codex + Claude subagent, or noted unavailable)
|
|
- [ ] CEO consensus table produced
|
|
|
|
**Phase 2 (Design) outputs — only if UI scope detected:**
|
|
- [ ] All 7 dimensions evaluated with scores
|
|
- [ ] Issues identified and auto-decided
|
|
- [ ] Dual voices ran (or noted unavailable/skipped with phase)
|
|
- [ ] Design litmus scorecard produced
|
|
|
|
**Phase 2.5 (DX) outputs — only if DX scope detected:**
|
|
- [ ] All 8 DX dimensions evaluated with scores
|
|
- [ ] Developer journey map produced
|
|
- [ ] Developer empathy narrative written
|
|
- [ ] TTHW assessment with target
|
|
- [ ] DX Implementation Checklist produced
|
|
- [ ] Dual voices ran (or noted unavailable/skipped with phase)
|
|
- [ ] DX consensus table produced
|
|
|
|
**Phase 3 (Eng — final phase) outputs:**
|
|
- [ ] Scope challenge with actual code analysis (not just "scope is fine")
|
|
- [ ] Architecture ASCII diagram produced
|
|
- [ ] Test diagram mapping codepaths to test coverage
|
|
- [ ] Test plan artifact written to disk at ~/.gstack/projects/$SLUG/
|
|
- [ ] "NOT in scope" section written
|
|
- [ ] "What already exists" section written
|
|
- [ ] Failure modes registry with critical gap assessment
|
|
- [ ] Completion Summary produced
|
|
- [ ] Dual voices ran (Codex + Claude subagent, or noted unavailable)
|
|
- [ ] Eng consensus table produced
|
|
|
|
**Cross-phase:**
|
|
- [ ] Cross-phase themes section written
|
|
|
|
**Audit trail:**
|
|
- [ ] Decision Audit Trail has at least one row per auto-decision (not empty)
|
|
|
|
If ANY checkbox above is missing, go back and produce the missing output. Max 2
|
|
attempts — if still missing after retrying twice, proceed to the gate with a warning
|
|
noting which items are incomplete. Do not loop indefinitely.
|
|
|
|
---
|
|
|
|
## Phase 4: Final Approval Gate
|
|
|
|
{{SECTION:tasks-aggregator}}
|
|
|
|
**STOP here and present the final state to the user.**
|
|
|
|
Present as a message, then use AskUserQuestion:
|
|
|
|
```
|
|
## /autoplan Review Complete
|
|
|
|
### Plan Summary
|
|
[1-3 sentence summary]
|
|
|
|
### Decisions Made: [N] total ([M] auto-decided, [K] taste choices, [J] user challenges)
|
|
|
|
### User Challenges (both models disagree with your stated direction)
|
|
[For each user challenge:]
|
|
**Challenge [N]: [title]** (from [phase])
|
|
You said: [user's original direction]
|
|
Both models recommend: [the change]
|
|
Why: [reasoning]
|
|
What we might be missing: [blind spots]
|
|
If we're wrong, the cost is: [downside of changing]
|
|
[If security/feasibility: "⚠️ Both models flag this as a security/feasibility risk,
|
|
not just a preference."]
|
|
|
|
Your call — your original direction stands unless you explicitly change it.
|
|
|
|
### Your Choices (taste decisions)
|
|
[For each taste decision:]
|
|
**Choice [N]: [title]** (from [phase])
|
|
I recommend [X] — [principle]. But [Y] is also viable:
|
|
[1-sentence downstream impact if you pick Y]
|
|
|
|
### Auto-Decided: [M] decisions [see Decision Audit Trail in plan file]
|
|
|
|
### Review Scores
|
|
- CEO: [summary]
|
|
- CEO Voices: Codex [summary], Claude subagent [summary], Consensus [X/6 confirmed]
|
|
- Design: [summary or "skipped, no UI scope"]
|
|
- Design Voices: Codex [summary], Claude subagent [summary], Consensus [X/7 confirmed] (or "skipped")
|
|
- Eng: [summary]
|
|
- Eng Voices: Codex [summary], Claude subagent [summary], Consensus [X/6 confirmed]
|
|
- DX: [summary or "skipped, no developer-facing scope"]
|
|
- DX Voices: Codex [summary], Claude subagent [summary], Consensus [X/6 confirmed] (or "skipped")
|
|
|
|
### Cross-Phase Themes
|
|
[For any concern that appeared in 2+ phases' dual voices independently:]
|
|
**Theme: [topic]** — flagged in [Phase 1, Phase 3]. High-confidence signal.
|
|
[If no themes span phases:] "No cross-phase themes — each phase's concerns were distinct."
|
|
|
|
### Deferred to TODOS.md
|
|
[Items auto-deferred with reasons]
|
|
|
|
### Implementation Tasks (aggregated across phases)
|
|
[Substitute the contents of $AGGREGATED_TASKS computed above. If empty:
|
|
"_No per-phase task lists found in $TASKS_DIR for branch $BRANCH._"]
|
|
```
|
|
|
|
**Cognitive load management:**
|
|
- 0 user challenges: skip "User Challenges" section
|
|
- 0 taste decisions: skip "Your Choices" section
|
|
- 1-7 taste decisions: flat list
|
|
- 8+: group by phase. Add warning: "This plan had unusually high ambiguity ([N] taste decisions). Review carefully."
|
|
|
|
AskUserQuestion options:
|
|
- A) Approve as-is (accept all recommendations)
|
|
- B) Approve with overrides (specify which taste decisions to change)
|
|
- B2) Approve with user challenge responses (accept or reject each challenge)
|
|
- C) Interrogate (ask about any specific decision)
|
|
- D) Revise (the plan itself needs changes)
|
|
- E) Reject (start over)
|
|
|
|
**Option handling:**
|
|
- A: mark APPROVED, write review logs, suggest /ship
|
|
- B: ask which overrides, apply, re-present gate
|
|
- C: answer freeform, re-present gate
|
|
- D: make changes, re-run affected phases (scope→1B, design→2, dx→2.5, test plan→3, arch→3; a re-run of any earlier phase re-runs Eng after it — the gate always reviews the final plan). Max 3 cycles.
|
|
- E: start over
|
|
|
|
---
|
|
|
|
## Completion: Write Review Logs
|
|
|
|
On approval, write 3 separate review log entries so /ship's dashboard recognizes them.
|
|
Replace TIMESTAMP, STATUS, and N with actual values from each review phase.
|
|
STATUS is "clean" if no unresolved issues, "issues_open" otherwise.
|
|
|
|
```bash
|
|
COMMIT=$(git rev-parse --short HEAD 2>/dev/null)
|
|
TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
|
|
~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-ceo-review","timestamp":"'"$TIMESTAMP"'","status":"STATUS","unresolved":N,"critical_gaps":N,"mode":"SELECTIVE_EXPANSION","via":"autoplan","commit":"'"$COMMIT"'"}'
|
|
|
|
~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-eng-review","timestamp":"'"$TIMESTAMP"'","status":"STATUS","unresolved":N,"critical_gaps":N,"issues_found":N,"mode":"FULL_REVIEW","via":"autoplan","commit":"'"$COMMIT"'"}'
|
|
```
|
|
|
|
If Phase 2 ran (UI scope):
|
|
```bash
|
|
~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-design-review","timestamp":"'"$TIMESTAMP"'","status":"STATUS","unresolved":N,"via":"autoplan","commit":"'"$COMMIT"'"}'
|
|
```
|
|
|
|
If Phase 2.5 ran (DX scope):
|
|
```bash
|
|
~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"plan-devex-review","timestamp":"'"$TIMESTAMP"'","status":"STATUS","initial_score":N,"overall_score":N,"product_type":"TYPE","tthw_current":"TTHW","tthw_target":"TARGET","unresolved":N,"via":"autoplan","commit":"'"$COMMIT"'"}'
|
|
```
|
|
|
|
Dual voice logs (one per phase that ran):
|
|
```bash
|
|
~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"autoplan-voices","timestamp":"'"$TIMESTAMP"'","status":"STATUS","source":"SOURCE","phase":"ceo","via":"autoplan","consensus_confirmed":N,"consensus_disagree":N,"commit":"'"$COMMIT"'"}'
|
|
|
|
~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"autoplan-voices","timestamp":"'"$TIMESTAMP"'","status":"STATUS","source":"SOURCE","phase":"eng","via":"autoplan","consensus_confirmed":N,"consensus_disagree":N,"commit":"'"$COMMIT"'"}'
|
|
```
|
|
|
|
If Phase 2 ran (UI scope), also log:
|
|
```bash
|
|
~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"autoplan-voices","timestamp":"'"$TIMESTAMP"'","status":"STATUS","source":"SOURCE","phase":"design","via":"autoplan","consensus_confirmed":N,"consensus_disagree":N,"commit":"'"$COMMIT"'"}'
|
|
```
|
|
|
|
If Phase 2.5 ran (DX scope), also log:
|
|
```bash
|
|
~/.claude/skills/gstack/bin/gstack-review-log '{"skill":"autoplan-voices","timestamp":"'"$TIMESTAMP"'","status":"STATUS","source":"SOURCE","phase":"dx","via":"autoplan","consensus_confirmed":N,"consensus_disagree":N,"commit":"'"$COMMIT"'"}'
|
|
```
|
|
|
|
SOURCE = "codex+subagent", "codex-only", "subagent-only", or "unavailable".
|
|
Replace N values with actual consensus counts from the tables.
|
|
|
|
Suggest next step: `/ship` when ready to create the PR.
|
|
|
|
---
|
|
|
|
## Important Rules
|
|
|
|
- **Never abort.** The user chose /autoplan. Respect that choice. Surface all taste decisions, never redirect to interactive review.
|
|
- **One gate.** The only non-auto-decided AskUserQuestions surface at the Final Approval Gate: User Challenges — including clearly-wrong premises queued from Phase 1. Everything else resolves to the recommended option (the 6 principles break ties), so the pipeline never stops mid-run.
|
|
- **Log every decision.** No silent auto-decisions. Every choice gets a row in the audit trail.
|
|
- **Full depth means full depth.** Do not compress or skip sections from the loaded skill files (except the skip list in Phase 0). "Full depth" means: read the code the section asks you to read, produce the outputs the section requires, identify every issue, and decide each one. A one-sentence summary of a section is not "full depth" — it is a skip. If you catch yourself writing fewer than 3 sentences for any review section, you are likely compressing.
|
|
- **Artifacts are deliverables.** Test plan artifact, failure modes registry, error/rescue table, ASCII diagrams — these must exist on disk or in the plan file when the review completes. If they don't exist, the review is incomplete.
|
|
- **Sequential order.** CEO → Design (if UI scope) → DX (if developer-facing scope) → Eng, always last. Each phase builds on the last; the required gate reviews the final amended plan.
|