From d72bd7437ecb66789ce44673dfb44619fd8f16a5 Mon Sep 17 00:00:00 2001 From: Lex Christopherson Date: Thu, 8 Jan 2026 09:17:31 -0600 Subject: [PATCH] feat(09-02): add plan-fix command and progress routing for UAT issues - Create plan-fix command to generate FIX.md from ISSUES.md - Add Route E to progress.md for detecting unaddressed UAT issues - Add verify-work and plan-fix to README commands table - Credit OracleGreyBeard for verify-work contribution Co-Authored-By: Claude Opus 4.5 --- README.md | 4 + commands/gsd/plan-fix.md | 205 +++++++++++++++++++++++++++++++++++++++ commands/gsd/progress.md | 50 +++++++++- 3 files changed, 257 insertions(+), 2 deletions(-) create mode 100644 commands/gsd/plan-fix.md diff --git a/README.md b/README.md index 44b0d9163..0055e697a 100644 --- a/README.md +++ b/README.md @@ -302,6 +302,8 @@ You're never locked in. The system adapts. | `/gsd:plan-phase [N]` | Generate task plans for phase | | `/gsd:execute-plan` | Run plan via subagent | | `/gsd:progress` | Where am I? What's next? | +| `/gsd:verify-work [N]`* | User acceptance test of phase or plan | +| `/gsd:plan-fix [plan]` | Plan fixes for UAT issues from verify-work | | `/gsd:complete-milestone` | Ship it, prep next version | | `/gsd:discuss-milestone` | Gather context for next milestone | | `/gsd:new-milestone [name]` | Create new milestone with phases | @@ -316,6 +318,8 @@ You're never locked in. The system adapts. | `/gsd:consider-issues` | Review deferred issues, close resolved, identify urgent | | `/gsd:help` | Show all commands and usage guide | +*Contributed by reddit user OracleGreyBeard + --- ## Troubleshooting diff --git a/commands/gsd/plan-fix.md b/commands/gsd/plan-fix.md new file mode 100644 index 000000000..712862e37 --- /dev/null +++ b/commands/gsd/plan-fix.md @@ -0,0 +1,205 @@ +--- +name: gsd:plan-fix +description: Plan fixes for UAT issues from verify-work +argument-hint: "[plan, e.g., '04-02']" +allowed-tools: + - Read + - Bash + - Write + - Glob + - Grep + - AskUserQuestion +--- + + +Create FIX.md plan from UAT issues found during verify-work. + +Purpose: Plan fixes for issues logged in phase-scoped ISSUES.md files. +Output: {plan}-FIX.md in the phase directory, ready for execution. + + + +@~/.claude/get-shit-done/references/plan-format.md +@~/.claude/get-shit-done/references/checkpoints.md + + + +Plan number: $ARGUMENTS (required - e.g., "04-02" or "09-01") + +**Load project state:** +@.planning/STATE.md +@.planning/ROADMAP.md + + + + + +**Parse plan argument:** + +$ARGUMENTS should be a plan number like "04-02" or "09-01". +Extract phase number (XX) and plan number (NN). + +If no argument provided: +``` +Error: Plan number required. + +Usage: /gsd:plan-fix 04-02 + +This creates a fix plan from .planning/phases/XX-name/04-02-ISSUES.md +``` +Exit. + + + +**Find ISSUES.md file:** + +Search for matching ISSUES.md: +```bash +ls .planning/phases/*/{plan}-ISSUES.md 2>/dev/null +``` + +If not found: +``` +No ISSUES.md found for plan {plan}. + +ISSUES.md files are created by /gsd:verify-work when UAT finds issues. +If no issues were found during testing, no fix plan is needed. +``` +Exit. + + + +**Read issues:** + +Read the ISSUES.md file. +Parse each issue: +- ID (UAT-XXX) +- Title +- Severity (critical/major/minor) +- Description/steps to reproduce +- Acceptance criteria + +Count total issues by severity. + + + +**Create fix tasks:** + +For each issue (or logical group): +- Create one task per issue OR +- Group related minor issues into single task + +Task structure: +```xml + + Fix UAT-001: [issue title] + [affected files from issue] + +[What to fix based on issue description] +[Reference original acceptance criteria] + + [Test that issue is resolved] + [Issue acceptance criteria met] + +``` + +Prioritize: critical → major → minor + + + +**Write FIX.md:** + +Create `.planning/phases/XX-name/{plan}-FIX.md`: + +```markdown +--- +phase: XX-name +plan: {plan}-FIX +type: fix +--- + + +Fix {N} UAT issues from plan {plan}. + +Source: {plan}-ISSUES.md +Priority: {critical count} critical, {major count} major, {minor count} minor + + + +@~/.claude/get-shit-done/workflows/execute-phase.md +@~/.claude/get-shit-done/templates/summary.md + + + +@.planning/STATE.md +@.planning/ROADMAP.md + +**Issues being fixed:** +@.planning/phases/XX-name/{plan}-ISSUES.md + +**Original plan for reference:** +@.planning/phases/XX-name/{plan}-PLAN.md + + + +[Generated fix tasks] + + + +Before declaring plan complete: +- [ ] All critical issues fixed +- [ ] All major issues fixed +- [ ] Minor issues fixed or documented as deferred +- [ ] Original acceptance criteria from issues met + + + +- All UAT issues from {plan}-ISSUES.md addressed +- Tests pass +- Ready for re-verification + + + +After completion, create `.planning/phases/XX-name/{plan}-FIX-SUMMARY.md` + +``` + + + +**Offer execution:** + +``` +--- + +## ✓ Fix Plan Created + +**{plan}-FIX.md** — {N} issues to fix + +| Severity | Count | +|----------|-------| +| Critical | {n} | +| Major | {n} | +| Minor | {n} | + +--- + +Would you like to: +1. Execute the fix plan now +2. Review the plan first +3. Modify the plan before executing + +--- +``` + +Use AskUserQuestion to get response. +If execute: `/gsd:execute-plan .planning/phases/XX-name/{plan}-FIX.md` + + + + + +- [ ] ISSUES.md found and parsed +- [ ] Fix tasks created for each issue +- [ ] FIX.md written with proper structure +- [ ] User offered to execute or review + diff --git a/commands/gsd/progress.md b/commands/gsd/progress.md index 0b0020936..5f0c628fe 100644 --- a/commands/gsd/progress.md +++ b/commands/gsd/progress.md @@ -92,21 +92,35 @@ CONTEXT: [✓ if CONTEXT.md exists | - if not] **Determine next action based on verified counts.** -**Step 1: Count plans and summaries in current phase** +**Step 1: Count plans, summaries, and issues in current phase** List files in the current phase directory: ```bash ls -1 .planning/phases/[current-phase-dir]/*-PLAN.md 2>/dev/null | wc -l ls -1 .planning/phases/[current-phase-dir]/*-SUMMARY.md 2>/dev/null | wc -l +ls -1 .planning/phases/[current-phase-dir]/*-ISSUES.md 2>/dev/null | wc -l +ls -1 .planning/phases/[current-phase-dir]/*-FIX.md 2>/dev/null | wc -l +ls -1 .planning/phases/[current-phase-dir]/*-FIX-SUMMARY.md 2>/dev/null | wc -l ``` -State: "This phase has {X} plans and {Y} summaries." +State: "This phase has {X} plans, {Y} summaries, {Z} issues files, {W} fix plans." + +**Step 1.5: Check for unaddressed UAT issues** + +For each *-ISSUES.md file, check if matching *-FIX.md exists. +For each *-FIX.md file, check if matching *-FIX-SUMMARY.md exists. + +Track: +- `issues_without_fix`: ISSUES.md files without FIX.md +- `fixes_without_summary`: FIX.md files without FIX-SUMMARY.md **Step 2: Route based on counts** | Condition | Meaning | Action | |-----------|---------|--------| +| fixes_without_summary > 0 | Unexecuted fix plans exist | Go to **Route A** (with FIX.md) | +| issues_without_fix > 0 | UAT issues need fix plans | Go to **Route E** | | summaries < plans | Unexecuted plans exist | Go to **Route A** | | summaries = plans AND plans > 0 | Phase complete | Go to Step 3 | | plans = 0 | Phase not yet planned | Go to **Route B** | @@ -180,6 +194,32 @@ Check if `{phase}-CONTEXT.md` exists in phase directory. --- +**Route E: UAT issues need fix plans** + +ISSUES.md exists without matching FIX.md. User needs to plan fixes. + +``` +--- + +## ⚠ UAT Issues Found + +**{plan}-ISSUES.md** has {N} issues without a fix plan. + +`/gsd:plan-fix {plan}` + +`/clear` first → fresh context window + +--- + +**Also available:** +- `/gsd:execute-plan [path]` — continue with other work first +- `/gsd:verify-work {phase}` — run more UAT testing + +--- +``` + +--- + **Step 3: Check milestone status (only when phase complete)** Read ROADMAP.md and identify: @@ -219,6 +259,7 @@ Read ROADMAP.md to get the next phase's name and goal. --- **Also available:** +- `/gsd:verify-work {Z}` — user acceptance test before continuing - `/gsd:discuss-phase {Z+1}` — gather context first - `/gsd:research-phase {Z+1}` — investigate unknowns @@ -244,6 +285,11 @@ All {N} phases finished! `/clear` first → fresh context window +--- + +**Also available:** +- `/gsd:verify-work` — user acceptance test before completing milestone + --- ```