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 <noreply@anthropic.com>
This commit is contained in:
@@ -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
|
||||
|
||||
205
commands/gsd/plan-fix.md
Normal file
205
commands/gsd/plan-fix.md
Normal file
@@ -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
|
||||
---
|
||||
|
||||
<objective>
|
||||
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.
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/references/plan-format.md
|
||||
@~/.claude/get-shit-done/references/checkpoints.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
Plan number: $ARGUMENTS (required - e.g., "04-02" or "09-01")
|
||||
|
||||
**Load project state:**
|
||||
@.planning/STATE.md
|
||||
@.planning/ROADMAP.md
|
||||
</context>
|
||||
|
||||
<process>
|
||||
|
||||
<step name="parse">
|
||||
**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.
|
||||
</step>
|
||||
|
||||
<step name="find">
|
||||
**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.
|
||||
</step>
|
||||
|
||||
<step name="read">
|
||||
**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.
|
||||
</step>
|
||||
|
||||
<step name="plan">
|
||||
**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
|
||||
<task type="auto">
|
||||
<name>Fix UAT-001: [issue title]</name>
|
||||
<files>[affected files from issue]</files>
|
||||
<action>
|
||||
[What to fix based on issue description]
|
||||
[Reference original acceptance criteria]
|
||||
</action>
|
||||
<verify>[Test that issue is resolved]</verify>
|
||||
<done>[Issue acceptance criteria met]</done>
|
||||
</task>
|
||||
```
|
||||
|
||||
Prioritize: critical → major → minor
|
||||
</step>
|
||||
|
||||
<step name="write">
|
||||
**Write FIX.md:**
|
||||
|
||||
Create `.planning/phases/XX-name/{plan}-FIX.md`:
|
||||
|
||||
```markdown
|
||||
---
|
||||
phase: XX-name
|
||||
plan: {plan}-FIX
|
||||
type: fix
|
||||
---
|
||||
|
||||
<objective>
|
||||
Fix {N} UAT issues from plan {plan}.
|
||||
|
||||
Source: {plan}-ISSUES.md
|
||||
Priority: {critical count} critical, {major count} major, {minor count} minor
|
||||
</objective>
|
||||
|
||||
<execution_context>
|
||||
@~/.claude/get-shit-done/workflows/execute-phase.md
|
||||
@~/.claude/get-shit-done/templates/summary.md
|
||||
</execution_context>
|
||||
|
||||
<context>
|
||||
@.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
|
||||
</context>
|
||||
|
||||
<tasks>
|
||||
[Generated fix tasks]
|
||||
</tasks>
|
||||
|
||||
<verification>
|
||||
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
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- All UAT issues from {plan}-ISSUES.md addressed
|
||||
- Tests pass
|
||||
- Ready for re-verification
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
After completion, create `.planning/phases/XX-name/{plan}-FIX-SUMMARY.md`
|
||||
</output>
|
||||
```
|
||||
</step>
|
||||
|
||||
<step name="offer">
|
||||
**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`
|
||||
</step>
|
||||
|
||||
</process>
|
||||
|
||||
<success_criteria>
|
||||
- [ ] ISSUES.md found and parsed
|
||||
- [ ] Fix tasks created for each issue
|
||||
- [ ] FIX.md written with proper structure
|
||||
- [ ] User offered to execute or review
|
||||
</success_criteria>
|
||||
@@ -92,21 +92,35 @@ CONTEXT: [✓ if CONTEXT.md exists | - if not]
|
||||
<step name="route">
|
||||
**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}`
|
||||
|
||||
<sub>`/clear` first → fresh context window</sub>
|
||||
|
||||
---
|
||||
|
||||
**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!
|
||||
|
||||
<sub>`/clear` first → fresh context window</sub>
|
||||
|
||||
---
|
||||
|
||||
**Also available:**
|
||||
- `/gsd:verify-work` — user acceptance test before completing milestone
|
||||
|
||||
---
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user