get-shit-done-cc 1.3.28 → 1.3.29
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.
- package/README.md +4 -0
- package/bin/install.js +60 -2
- package/commands/gsd/plan-fix.md +205 -0
- package/commands/gsd/progress.md +48 -2
- package/commands/gsd/verify-work.md +71 -0
- package/get-shit-done/templates/uat-issues.md +143 -0
- package/get-shit-done/workflows/verify-work.md +202 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -302,6 +302,8 @@ You're never locked in. The system adapts.
|
|
|
302
302
|
| `/gsd:plan-phase [N]` | Generate task plans for phase |
|
|
303
303
|
| `/gsd:execute-plan` | Run plan via subagent |
|
|
304
304
|
| `/gsd:progress` | Where am I? What's next? |
|
|
305
|
+
| `/gsd:verify-work [N]`* | User acceptance test of phase or plan |
|
|
306
|
+
| `/gsd:plan-fix [plan]` | Plan fixes for UAT issues from verify-work |
|
|
305
307
|
| `/gsd:complete-milestone` | Ship it, prep next version |
|
|
306
308
|
| `/gsd:discuss-milestone` | Gather context for next milestone |
|
|
307
309
|
| `/gsd:new-milestone [name]` | Create new milestone with phases |
|
|
@@ -316,6 +318,8 @@ You're never locked in. The system adapts.
|
|
|
316
318
|
| `/gsd:consider-issues` | Review deferred issues, close resolved, identify urgent |
|
|
317
319
|
| `/gsd:help` | Show all commands and usage guide |
|
|
318
320
|
|
|
321
|
+
*Contributed by reddit user OracleGreyBeard
|
|
322
|
+
|
|
319
323
|
---
|
|
320
324
|
|
|
321
325
|
## Troubleshooting
|
package/bin/install.js
CHANGED
|
@@ -33,8 +33,61 @@ const args = process.argv.slice(2);
|
|
|
33
33
|
const hasGlobal = args.includes('--global') || args.includes('-g');
|
|
34
34
|
const hasLocal = args.includes('--local') || args.includes('-l');
|
|
35
35
|
|
|
36
|
+
// Parse --config-dir argument
|
|
37
|
+
function parseConfigDirArg() {
|
|
38
|
+
const configDirIndex = args.findIndex(arg => arg === '--config-dir' || arg === '-c');
|
|
39
|
+
if (configDirIndex !== -1) {
|
|
40
|
+
const nextArg = args[configDirIndex + 1];
|
|
41
|
+
// Error if --config-dir is provided without a value or next arg is another flag
|
|
42
|
+
if (!nextArg || nextArg.startsWith('-')) {
|
|
43
|
+
console.error(` ${yellow}--config-dir requires a path argument${reset}`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
return nextArg;
|
|
47
|
+
}
|
|
48
|
+
// Also handle --config-dir=value format
|
|
49
|
+
const configDirArg = args.find(arg => arg.startsWith('--config-dir=') || arg.startsWith('-c='));
|
|
50
|
+
if (configDirArg) {
|
|
51
|
+
return configDirArg.split('=')[1];
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const explicitConfigDir = parseConfigDirArg();
|
|
56
|
+
const hasHelp = args.includes('--help') || args.includes('-h');
|
|
57
|
+
|
|
36
58
|
console.log(banner);
|
|
37
59
|
|
|
60
|
+
// Show help if requested
|
|
61
|
+
if (hasHelp) {
|
|
62
|
+
console.log(` ${yellow}Usage:${reset} npx get-shit-done-cc [options]
|
|
63
|
+
|
|
64
|
+
${yellow}Options:${reset}
|
|
65
|
+
${cyan}-g, --global${reset} Install globally (to Claude config directory)
|
|
66
|
+
${cyan}-l, --local${reset} Install locally (to ./.claude in current directory)
|
|
67
|
+
${cyan}-c, --config-dir <path>${reset} Specify custom Claude config directory
|
|
68
|
+
${cyan}-h, --help${reset} Show this help message
|
|
69
|
+
|
|
70
|
+
${yellow}Examples:${reset}
|
|
71
|
+
${dim}# Install to default ~/.claude directory${reset}
|
|
72
|
+
npx get-shit-done-cc --global
|
|
73
|
+
|
|
74
|
+
${dim}# Install to custom config directory (for multiple Claude accounts)${reset}
|
|
75
|
+
npx get-shit-done-cc --global --config-dir ~/.claude-bc
|
|
76
|
+
|
|
77
|
+
${dim}# Using environment variable${reset}
|
|
78
|
+
CLAUDE_CONFIG_DIR=~/.claude-bc npx get-shit-done-cc --global
|
|
79
|
+
|
|
80
|
+
${dim}# Install to current project only${reset}
|
|
81
|
+
npx get-shit-done-cc --local
|
|
82
|
+
|
|
83
|
+
${yellow}Notes:${reset}
|
|
84
|
+
The --config-dir option is useful when you have multiple Claude Code
|
|
85
|
+
configurations (e.g., for different subscriptions). It takes priority
|
|
86
|
+
over the CLAUDE_CONFIG_DIR environment variable.
|
|
87
|
+
`);
|
|
88
|
+
process.exit(0);
|
|
89
|
+
}
|
|
90
|
+
|
|
38
91
|
/**
|
|
39
92
|
* Expand ~ to home directory (shell doesn't expand in env vars passed to node)
|
|
40
93
|
*/
|
|
@@ -75,7 +128,8 @@ function copyWithPathReplacement(srcDir, destDir, pathPrefix) {
|
|
|
75
128
|
*/
|
|
76
129
|
function install(isGlobal) {
|
|
77
130
|
const src = path.join(__dirname, '..');
|
|
78
|
-
|
|
131
|
+
// Priority: explicit --config-dir arg > CLAUDE_CONFIG_DIR env var > default ~/.claude
|
|
132
|
+
const configDir = expandTilde(explicitConfigDir) || expandTilde(process.env.CLAUDE_CONFIG_DIR);
|
|
79
133
|
const defaultGlobalDir = configDir || path.join(os.homedir(), '.claude');
|
|
80
134
|
const claudeDir = isGlobal
|
|
81
135
|
? defaultGlobalDir
|
|
@@ -123,7 +177,8 @@ function promptLocation() {
|
|
|
123
177
|
output: process.stdout
|
|
124
178
|
});
|
|
125
179
|
|
|
126
|
-
const
|
|
180
|
+
const configDir = expandTilde(explicitConfigDir) || expandTilde(process.env.CLAUDE_CONFIG_DIR);
|
|
181
|
+
const globalPath = configDir || path.join(os.homedir(), '.claude');
|
|
127
182
|
const globalLabel = globalPath.replace(os.homedir(), '~');
|
|
128
183
|
|
|
129
184
|
console.log(` ${yellow}Where would you like to install?${reset}
|
|
@@ -144,6 +199,9 @@ function promptLocation() {
|
|
|
144
199
|
if (hasGlobal && hasLocal) {
|
|
145
200
|
console.error(` ${yellow}Cannot specify both --global and --local${reset}`);
|
|
146
201
|
process.exit(1);
|
|
202
|
+
} else if (explicitConfigDir && hasLocal) {
|
|
203
|
+
console.error(` ${yellow}Cannot use --config-dir with --local${reset}`);
|
|
204
|
+
process.exit(1);
|
|
147
205
|
} else if (hasGlobal) {
|
|
148
206
|
install(true);
|
|
149
207
|
} else if (hasLocal) {
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd:plan-fix
|
|
3
|
+
description: Plan fixes for UAT issues from verify-work
|
|
4
|
+
argument-hint: "[plan, e.g., '04-02']"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Bash
|
|
8
|
+
- Write
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- AskUserQuestion
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<objective>
|
|
15
|
+
Create FIX.md plan from UAT issues found during verify-work.
|
|
16
|
+
|
|
17
|
+
Purpose: Plan fixes for issues logged in phase-scoped ISSUES.md files.
|
|
18
|
+
Output: {plan}-FIX.md in the phase directory, ready for execution.
|
|
19
|
+
</objective>
|
|
20
|
+
|
|
21
|
+
<execution_context>
|
|
22
|
+
@~/.claude/get-shit-done/references/plan-format.md
|
|
23
|
+
@~/.claude/get-shit-done/references/checkpoints.md
|
|
24
|
+
</execution_context>
|
|
25
|
+
|
|
26
|
+
<context>
|
|
27
|
+
Plan number: $ARGUMENTS (required - e.g., "04-02" or "09-01")
|
|
28
|
+
|
|
29
|
+
**Load project state:**
|
|
30
|
+
@.planning/STATE.md
|
|
31
|
+
@.planning/ROADMAP.md
|
|
32
|
+
</context>
|
|
33
|
+
|
|
34
|
+
<process>
|
|
35
|
+
|
|
36
|
+
<step name="parse">
|
|
37
|
+
**Parse plan argument:**
|
|
38
|
+
|
|
39
|
+
$ARGUMENTS should be a plan number like "04-02" or "09-01".
|
|
40
|
+
Extract phase number (XX) and plan number (NN).
|
|
41
|
+
|
|
42
|
+
If no argument provided:
|
|
43
|
+
```
|
|
44
|
+
Error: Plan number required.
|
|
45
|
+
|
|
46
|
+
Usage: /gsd:plan-fix 04-02
|
|
47
|
+
|
|
48
|
+
This creates a fix plan from .planning/phases/XX-name/04-02-ISSUES.md
|
|
49
|
+
```
|
|
50
|
+
Exit.
|
|
51
|
+
</step>
|
|
52
|
+
|
|
53
|
+
<step name="find">
|
|
54
|
+
**Find ISSUES.md file:**
|
|
55
|
+
|
|
56
|
+
Search for matching ISSUES.md:
|
|
57
|
+
```bash
|
|
58
|
+
ls .planning/phases/*/{plan}-ISSUES.md 2>/dev/null
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
If not found:
|
|
62
|
+
```
|
|
63
|
+
No ISSUES.md found for plan {plan}.
|
|
64
|
+
|
|
65
|
+
ISSUES.md files are created by /gsd:verify-work when UAT finds issues.
|
|
66
|
+
If no issues were found during testing, no fix plan is needed.
|
|
67
|
+
```
|
|
68
|
+
Exit.
|
|
69
|
+
</step>
|
|
70
|
+
|
|
71
|
+
<step name="read">
|
|
72
|
+
**Read issues:**
|
|
73
|
+
|
|
74
|
+
Read the ISSUES.md file.
|
|
75
|
+
Parse each issue:
|
|
76
|
+
- ID (UAT-XXX)
|
|
77
|
+
- Title
|
|
78
|
+
- Severity (critical/major/minor)
|
|
79
|
+
- Description/steps to reproduce
|
|
80
|
+
- Acceptance criteria
|
|
81
|
+
|
|
82
|
+
Count total issues by severity.
|
|
83
|
+
</step>
|
|
84
|
+
|
|
85
|
+
<step name="plan">
|
|
86
|
+
**Create fix tasks:**
|
|
87
|
+
|
|
88
|
+
For each issue (or logical group):
|
|
89
|
+
- Create one task per issue OR
|
|
90
|
+
- Group related minor issues into single task
|
|
91
|
+
|
|
92
|
+
Task structure:
|
|
93
|
+
```xml
|
|
94
|
+
<task type="auto">
|
|
95
|
+
<name>Fix UAT-001: [issue title]</name>
|
|
96
|
+
<files>[affected files from issue]</files>
|
|
97
|
+
<action>
|
|
98
|
+
[What to fix based on issue description]
|
|
99
|
+
[Reference original acceptance criteria]
|
|
100
|
+
</action>
|
|
101
|
+
<verify>[Test that issue is resolved]</verify>
|
|
102
|
+
<done>[Issue acceptance criteria met]</done>
|
|
103
|
+
</task>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Prioritize: critical → major → minor
|
|
107
|
+
</step>
|
|
108
|
+
|
|
109
|
+
<step name="write">
|
|
110
|
+
**Write FIX.md:**
|
|
111
|
+
|
|
112
|
+
Create `.planning/phases/XX-name/{plan}-FIX.md`:
|
|
113
|
+
|
|
114
|
+
```markdown
|
|
115
|
+
---
|
|
116
|
+
phase: XX-name
|
|
117
|
+
plan: {plan}-FIX
|
|
118
|
+
type: fix
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
<objective>
|
|
122
|
+
Fix {N} UAT issues from plan {plan}.
|
|
123
|
+
|
|
124
|
+
Source: {plan}-ISSUES.md
|
|
125
|
+
Priority: {critical count} critical, {major count} major, {minor count} minor
|
|
126
|
+
</objective>
|
|
127
|
+
|
|
128
|
+
<execution_context>
|
|
129
|
+
@~/.claude/get-shit-done/workflows/execute-phase.md
|
|
130
|
+
@~/.claude/get-shit-done/templates/summary.md
|
|
131
|
+
</execution_context>
|
|
132
|
+
|
|
133
|
+
<context>
|
|
134
|
+
@.planning/STATE.md
|
|
135
|
+
@.planning/ROADMAP.md
|
|
136
|
+
|
|
137
|
+
**Issues being fixed:**
|
|
138
|
+
@.planning/phases/XX-name/{plan}-ISSUES.md
|
|
139
|
+
|
|
140
|
+
**Original plan for reference:**
|
|
141
|
+
@.planning/phases/XX-name/{plan}-PLAN.md
|
|
142
|
+
</context>
|
|
143
|
+
|
|
144
|
+
<tasks>
|
|
145
|
+
[Generated fix tasks]
|
|
146
|
+
</tasks>
|
|
147
|
+
|
|
148
|
+
<verification>
|
|
149
|
+
Before declaring plan complete:
|
|
150
|
+
- [ ] All critical issues fixed
|
|
151
|
+
- [ ] All major issues fixed
|
|
152
|
+
- [ ] Minor issues fixed or documented as deferred
|
|
153
|
+
- [ ] Original acceptance criteria from issues met
|
|
154
|
+
</verification>
|
|
155
|
+
|
|
156
|
+
<success_criteria>
|
|
157
|
+
- All UAT issues from {plan}-ISSUES.md addressed
|
|
158
|
+
- Tests pass
|
|
159
|
+
- Ready for re-verification
|
|
160
|
+
</success_criteria>
|
|
161
|
+
|
|
162
|
+
<output>
|
|
163
|
+
After completion, create `.planning/phases/XX-name/{plan}-FIX-SUMMARY.md`
|
|
164
|
+
</output>
|
|
165
|
+
```
|
|
166
|
+
</step>
|
|
167
|
+
|
|
168
|
+
<step name="offer">
|
|
169
|
+
**Offer execution:**
|
|
170
|
+
|
|
171
|
+
```
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## ✓ Fix Plan Created
|
|
175
|
+
|
|
176
|
+
**{plan}-FIX.md** — {N} issues to fix
|
|
177
|
+
|
|
178
|
+
| Severity | Count |
|
|
179
|
+
|----------|-------|
|
|
180
|
+
| Critical | {n} |
|
|
181
|
+
| Major | {n} |
|
|
182
|
+
| Minor | {n} |
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
Would you like to:
|
|
187
|
+
1. Execute the fix plan now
|
|
188
|
+
2. Review the plan first
|
|
189
|
+
3. Modify the plan before executing
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Use AskUserQuestion to get response.
|
|
195
|
+
If execute: `/gsd:execute-plan .planning/phases/XX-name/{plan}-FIX.md`
|
|
196
|
+
</step>
|
|
197
|
+
|
|
198
|
+
</process>
|
|
199
|
+
|
|
200
|
+
<success_criteria>
|
|
201
|
+
- [ ] ISSUES.md found and parsed
|
|
202
|
+
- [ ] Fix tasks created for each issue
|
|
203
|
+
- [ ] FIX.md written with proper structure
|
|
204
|
+
- [ ] User offered to execute or review
|
|
205
|
+
</success_criteria>
|
package/commands/gsd/progress.md
CHANGED
|
@@ -92,21 +92,35 @@ CONTEXT: [✓ if CONTEXT.md exists | - if not]
|
|
|
92
92
|
<step name="route">
|
|
93
93
|
**Determine next action based on verified counts.**
|
|
94
94
|
|
|
95
|
-
**Step 1: Count plans and
|
|
95
|
+
**Step 1: Count plans, summaries, and issues in current phase**
|
|
96
96
|
|
|
97
97
|
List files in the current phase directory:
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
100
|
ls -1 .planning/phases/[current-phase-dir]/*-PLAN.md 2>/dev/null | wc -l
|
|
101
101
|
ls -1 .planning/phases/[current-phase-dir]/*-SUMMARY.md 2>/dev/null | wc -l
|
|
102
|
+
ls -1 .planning/phases/[current-phase-dir]/*-ISSUES.md 2>/dev/null | wc -l
|
|
103
|
+
ls -1 .planning/phases/[current-phase-dir]/*-FIX.md 2>/dev/null | wc -l
|
|
104
|
+
ls -1 .planning/phases/[current-phase-dir]/*-FIX-SUMMARY.md 2>/dev/null | wc -l
|
|
102
105
|
```
|
|
103
106
|
|
|
104
|
-
State: "This phase has {X} plans
|
|
107
|
+
State: "This phase has {X} plans, {Y} summaries, {Z} issues files, {W} fix plans."
|
|
108
|
+
|
|
109
|
+
**Step 1.5: Check for unaddressed UAT issues**
|
|
110
|
+
|
|
111
|
+
For each *-ISSUES.md file, check if matching *-FIX.md exists.
|
|
112
|
+
For each *-FIX.md file, check if matching *-FIX-SUMMARY.md exists.
|
|
113
|
+
|
|
114
|
+
Track:
|
|
115
|
+
- `issues_without_fix`: ISSUES.md files without FIX.md
|
|
116
|
+
- `fixes_without_summary`: FIX.md files without FIX-SUMMARY.md
|
|
105
117
|
|
|
106
118
|
**Step 2: Route based on counts**
|
|
107
119
|
|
|
108
120
|
| Condition | Meaning | Action |
|
|
109
121
|
|-----------|---------|--------|
|
|
122
|
+
| fixes_without_summary > 0 | Unexecuted fix plans exist | Go to **Route A** (with FIX.md) |
|
|
123
|
+
| issues_without_fix > 0 | UAT issues need fix plans | Go to **Route E** |
|
|
110
124
|
| summaries < plans | Unexecuted plans exist | Go to **Route A** |
|
|
111
125
|
| summaries = plans AND plans > 0 | Phase complete | Go to Step 3 |
|
|
112
126
|
| plans = 0 | Phase not yet planned | Go to **Route B** |
|
|
@@ -180,6 +194,32 @@ Check if `{phase}-CONTEXT.md` exists in phase directory.
|
|
|
180
194
|
|
|
181
195
|
---
|
|
182
196
|
|
|
197
|
+
**Route E: UAT issues need fix plans**
|
|
198
|
+
|
|
199
|
+
ISSUES.md exists without matching FIX.md. User needs to plan fixes.
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## ⚠ UAT Issues Found
|
|
205
|
+
|
|
206
|
+
**{plan}-ISSUES.md** has {N} issues without a fix plan.
|
|
207
|
+
|
|
208
|
+
`/gsd:plan-fix {plan}`
|
|
209
|
+
|
|
210
|
+
<sub>`/clear` first → fresh context window</sub>
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
**Also available:**
|
|
215
|
+
- `/gsd:execute-plan [path]` — continue with other work first
|
|
216
|
+
- `/gsd:verify-work {phase}` — run more UAT testing
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
183
223
|
**Step 3: Check milestone status (only when phase complete)**
|
|
184
224
|
|
|
185
225
|
Read ROADMAP.md and identify:
|
|
@@ -219,6 +259,7 @@ Read ROADMAP.md to get the next phase's name and goal.
|
|
|
219
259
|
---
|
|
220
260
|
|
|
221
261
|
**Also available:**
|
|
262
|
+
- `/gsd:verify-work {Z}` — user acceptance test before continuing
|
|
222
263
|
- `/gsd:discuss-phase {Z+1}` — gather context first
|
|
223
264
|
- `/gsd:research-phase {Z+1}` — investigate unknowns
|
|
224
265
|
|
|
@@ -244,6 +285,11 @@ All {N} phases finished!
|
|
|
244
285
|
|
|
245
286
|
<sub>`/clear` first → fresh context window</sub>
|
|
246
287
|
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
**Also available:**
|
|
291
|
+
- `/gsd:verify-work` — user acceptance test before completing milestone
|
|
292
|
+
|
|
247
293
|
---
|
|
248
294
|
```
|
|
249
295
|
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gsd:verify-work
|
|
3
|
+
description: Guide manual user acceptance testing of recently built features
|
|
4
|
+
argument-hint: "[optional: phase or plan number, e.g., '4' or '04-02']"
|
|
5
|
+
allowed-tools:
|
|
6
|
+
- Read
|
|
7
|
+
- Bash
|
|
8
|
+
- Glob
|
|
9
|
+
- Grep
|
|
10
|
+
- Edit
|
|
11
|
+
- Write
|
|
12
|
+
- AskUserQuestion
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
<objective>
|
|
16
|
+
Guide the user through manual acceptance testing of recently built features.
|
|
17
|
+
|
|
18
|
+
Purpose: Validate that what Claude thinks was built actually works from the user's perspective. The USER performs all testing — Claude generates the test checklist, guides the process, and captures issues.
|
|
19
|
+
|
|
20
|
+
Output: Validation of features, any issues logged to phase-scoped ISSUES.md
|
|
21
|
+
</objective>
|
|
22
|
+
|
|
23
|
+
<execution_context>
|
|
24
|
+
@~/.claude/get-shit-done/workflows/verify-work.md
|
|
25
|
+
@~/.claude/get-shit-done/templates/uat-issues.md
|
|
26
|
+
</execution_context>
|
|
27
|
+
|
|
28
|
+
<context>
|
|
29
|
+
Scope: $ARGUMENTS (optional)
|
|
30
|
+
- If provided: Test specific phase or plan (e.g., "4" or "04-02")
|
|
31
|
+
- If not provided: Test most recently completed plan
|
|
32
|
+
|
|
33
|
+
**Load project state:**
|
|
34
|
+
@.planning/STATE.md
|
|
35
|
+
|
|
36
|
+
**Load roadmap:**
|
|
37
|
+
@.planning/ROADMAP.md
|
|
38
|
+
</context>
|
|
39
|
+
|
|
40
|
+
<process>
|
|
41
|
+
1. Validate arguments (if provided, parse as phase or plan number)
|
|
42
|
+
2. Find relevant SUMMARY.md (specified or most recent)
|
|
43
|
+
3. Follow verify-work.md workflow:
|
|
44
|
+
- Extract testable deliverables
|
|
45
|
+
- Generate test checklist
|
|
46
|
+
- Guide through each test via AskUserQuestion
|
|
47
|
+
- Collect and categorize issues
|
|
48
|
+
- Log issues to `.planning/phases/XX-name/{phase}-{plan}-ISSUES.md`
|
|
49
|
+
- Present summary with verdict
|
|
50
|
+
4. Offer next steps based on results:
|
|
51
|
+
- If all passed: Continue to next phase
|
|
52
|
+
- If issues found: `/gsd:plan-fix {phase} {plan}` to create fix plan
|
|
53
|
+
</process>
|
|
54
|
+
|
|
55
|
+
<anti_patterns>
|
|
56
|
+
- Don't run automated tests (that's for CI/test suites)
|
|
57
|
+
- Don't make assumptions about test results — USER reports outcomes
|
|
58
|
+
- Don't skip the guidance — walk through each test
|
|
59
|
+
- Don't dismiss minor issues — log everything user reports
|
|
60
|
+
- Don't fix issues during testing — capture for later
|
|
61
|
+
</anti_patterns>
|
|
62
|
+
|
|
63
|
+
<success_criteria>
|
|
64
|
+
- [ ] Test scope identified from SUMMARY.md
|
|
65
|
+
- [ ] Checklist generated based on deliverables
|
|
66
|
+
- [ ] User guided through each test
|
|
67
|
+
- [ ] All test results captured (pass/fail/partial/skip)
|
|
68
|
+
- [ ] Any issues logged to phase-scoped ISSUES.md (not global)
|
|
69
|
+
- [ ] Summary presented with verdict
|
|
70
|
+
- [ ] User knows next steps based on results
|
|
71
|
+
</success_criteria>
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# UAT Issues Template
|
|
2
|
+
|
|
3
|
+
Template for `.planning/phases/XX-name/{phase}-{plan}-ISSUES.md` - phase-scoped issues discovered during user acceptance testing.
|
|
4
|
+
|
|
5
|
+
**Purpose:** Capture issues found during /gsd:verify-work. Unlike global ISSUES.md (for deferred enhancements), this file tracks bugs and problems in specific delivered work.
|
|
6
|
+
|
|
7
|
+
**Location:** Same directory as the SUMMARY.md being tested.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## File Template
|
|
12
|
+
|
|
13
|
+
```markdown
|
|
14
|
+
# UAT Issues: Phase [X] Plan [Y]
|
|
15
|
+
|
|
16
|
+
**Tested:** [date]
|
|
17
|
+
**Source:** [path to SUMMARY.md that was tested]
|
|
18
|
+
**Tester:** User via /gsd:verify-work
|
|
19
|
+
|
|
20
|
+
## Open Issues
|
|
21
|
+
|
|
22
|
+
### UAT-001: [Brief description]
|
|
23
|
+
|
|
24
|
+
**Discovered:** [date]
|
|
25
|
+
**Phase/Plan:** [XX]-[YY]
|
|
26
|
+
**Severity:** [Blocker/Major/Minor/Cosmetic]
|
|
27
|
+
**Feature:** [Which feature from the test checklist]
|
|
28
|
+
**Description:** [User's description of the problem]
|
|
29
|
+
**Expected:** [What should have happened]
|
|
30
|
+
**Actual:** [What actually happened]
|
|
31
|
+
**Repro:** [Steps to reproduce, if captured]
|
|
32
|
+
|
|
33
|
+
### UAT-002: [Brief description]
|
|
34
|
+
|
|
35
|
+
...
|
|
36
|
+
|
|
37
|
+
## Resolved Issues
|
|
38
|
+
|
|
39
|
+
[Moved here after /gsd:plan-fix executes and fixes are verified]
|
|
40
|
+
|
|
41
|
+
### UAT-001: [Brief description]
|
|
42
|
+
**Resolved:** [date] - Fixed in [phase]-[plan]-FIX.md
|
|
43
|
+
**Commit:** [hash]
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
*Phase: XX-name*
|
|
48
|
+
*Plan: YY*
|
|
49
|
+
*Tested: [date]*
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Severity Guide
|
|
55
|
+
|
|
56
|
+
| Severity | Definition | Example |
|
|
57
|
+
|----------|------------|---------|
|
|
58
|
+
| **Blocker** | Feature completely unusable | App crashes on button click |
|
|
59
|
+
| **Major** | Feature works but significant problem | Form submits but data not saved |
|
|
60
|
+
| **Minor** | Feature usable but has issues | Button text slightly cut off |
|
|
61
|
+
| **Cosmetic** | Visual only, no functional impact | Wrong shade of color |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## UAT Numbering
|
|
66
|
+
|
|
67
|
+
- **Prefix:** `UAT-` (distinguishes from ISS- enhancement issues)
|
|
68
|
+
- **Scope:** Per-file numbering (UAT-001, UAT-002, etc. within each file)
|
|
69
|
+
- **No global numbering:** Each {phase}-{plan}-ISSUES.md has its own sequence
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
<good_examples>
|
|
74
|
+
```markdown
|
|
75
|
+
# UAT Issues: Phase 5 Plan 2
|
|
76
|
+
|
|
77
|
+
**Tested:** 2025-01-15
|
|
78
|
+
**Source:** .planning/phases/05-auth/05-02-SUMMARY.md
|
|
79
|
+
**Tester:** User via /gsd:verify-work
|
|
80
|
+
|
|
81
|
+
## Open Issues
|
|
82
|
+
|
|
83
|
+
### UAT-001: Login form doesn't show validation errors
|
|
84
|
+
|
|
85
|
+
**Discovered:** 2025-01-15
|
|
86
|
+
**Phase/Plan:** 05-02
|
|
87
|
+
**Severity:** Major
|
|
88
|
+
**Feature:** User login form
|
|
89
|
+
**Description:** When I enter an invalid email, nothing happens. No error message appears.
|
|
90
|
+
**Expected:** Red error message below email field saying "Invalid email format"
|
|
91
|
+
**Actual:** Field border turns red but no text explanation
|
|
92
|
+
**Repro:**
|
|
93
|
+
1. Go to /login
|
|
94
|
+
2. Enter "notanemail" in email field
|
|
95
|
+
3. Click Login button
|
|
96
|
+
|
|
97
|
+
### UAT-002: Password field allows paste
|
|
98
|
+
|
|
99
|
+
**Discovered:** 2025-01-15
|
|
100
|
+
**Phase/Plan:** 05-02
|
|
101
|
+
**Severity:** Cosmetic
|
|
102
|
+
**Feature:** User login form
|
|
103
|
+
**Description:** Can paste into password field. Minor UX inconsistency.
|
|
104
|
+
**Expected:** Paste disabled (matches signup form)
|
|
105
|
+
**Actual:** Paste works in login but not signup
|
|
106
|
+
**Repro:** Ctrl+V in password field
|
|
107
|
+
|
|
108
|
+
## Resolved Issues
|
|
109
|
+
|
|
110
|
+
[None yet]
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
*Phase: 05-auth*
|
|
115
|
+
*Plan: 02*
|
|
116
|
+
*Tested: 2025-01-15*
|
|
117
|
+
```
|
|
118
|
+
</good_examples>
|
|
119
|
+
|
|
120
|
+
<guidelines>
|
|
121
|
+
**When to create:**
|
|
122
|
+
- First time /gsd:verify-work finds an issue for a plan
|
|
123
|
+
- One file per plan tested
|
|
124
|
+
|
|
125
|
+
**Location:**
|
|
126
|
+
- `.planning/phases/XX-name/{phase}-{plan}-ISSUES.md`
|
|
127
|
+
- Lives alongside SUMMARY.md being tested
|
|
128
|
+
|
|
129
|
+
**Difference from global ISSUES.md:**
|
|
130
|
+
- Global ISSUES.md: Deferred enhancements (Rule 5 - nice-to-haves)
|
|
131
|
+
- UAT ISSUES.md: Actual problems found during testing
|
|
132
|
+
|
|
133
|
+
**Workflow:**
|
|
134
|
+
1. /gsd:verify-work creates this file with issues
|
|
135
|
+
2. /gsd:plan-fix reads this file and creates FIX.md plan
|
|
136
|
+
3. After FIX.md executes, issues move to "Resolved" section
|
|
137
|
+
4. File becomes historical record of what was found and fixed
|
|
138
|
+
|
|
139
|
+
**Resolution:**
|
|
140
|
+
- Don't delete resolved issues - move to "Resolved Issues" section
|
|
141
|
+
- Include fix reference (commit hash, plan that fixed it)
|
|
142
|
+
- File serves as audit trail
|
|
143
|
+
</guidelines>
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
<purpose>
|
|
2
|
+
Guide manual user acceptance testing of recently built features. Extract deliverables from SUMMARY.md, generate test checklist, guide user through each test, log issues to phase-scoped file.
|
|
3
|
+
|
|
4
|
+
The USER performs all testing — Claude generates the checklist, guides the process, and captures issues.
|
|
5
|
+
</purpose>
|
|
6
|
+
|
|
7
|
+
<process>
|
|
8
|
+
|
|
9
|
+
<step name="identify">
|
|
10
|
+
**Determine what to test:**
|
|
11
|
+
|
|
12
|
+
If $ARGUMENTS provided:
|
|
13
|
+
- Parse as phase number (e.g., "4") or plan number (e.g., "04-02")
|
|
14
|
+
- Find corresponding SUMMARY.md file(s)
|
|
15
|
+
|
|
16
|
+
If no arguments:
|
|
17
|
+
- Find most recently modified SUMMARY.md
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
find .planning/phases -name "*SUMMARY.md" -type f -exec ls -lt {} + | head -5
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Read the SUMMARY.md to understand what was built.
|
|
24
|
+
</step>
|
|
25
|
+
|
|
26
|
+
<step name="extract">
|
|
27
|
+
**Extract testable deliverables from SUMMARY.md:**
|
|
28
|
+
|
|
29
|
+
Parse for:
|
|
30
|
+
1. **Accomplishments** - Features/functionality added
|
|
31
|
+
2. **Files Created/Modified** - What changed
|
|
32
|
+
3. **User-facing changes** - UI, workflows, interactions
|
|
33
|
+
|
|
34
|
+
Focus on USER-OBSERVABLE outcomes, not implementation details.
|
|
35
|
+
|
|
36
|
+
Examples:
|
|
37
|
+
- "Check-in menu item added to navigation" → User can see/click Check-in in nav
|
|
38
|
+
- "HomePage refreshes after check-in" → After check-in, home shows updated state
|
|
39
|
+
</step>
|
|
40
|
+
|
|
41
|
+
<step name="generate">
|
|
42
|
+
**Generate manual test checklist:**
|
|
43
|
+
|
|
44
|
+
Create structured test plan:
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
# User Acceptance Test: [Plan/Phase Name]
|
|
48
|
+
|
|
49
|
+
**Scope:** [What was built - from SUMMARY.md]
|
|
50
|
+
**Testing:** Manual user validation
|
|
51
|
+
|
|
52
|
+
## Pre-flight
|
|
53
|
+
- [ ] Application builds and runs without errors
|
|
54
|
+
- [ ] Application launches to expected state
|
|
55
|
+
|
|
56
|
+
## Feature Tests
|
|
57
|
+
|
|
58
|
+
### [Feature 1 from deliverables]
|
|
59
|
+
**What to test:** [User-observable behavior]
|
|
60
|
+
**Steps:**
|
|
61
|
+
1. [Specific action to take]
|
|
62
|
+
2. [What to look for]
|
|
63
|
+
3. [Expected result]
|
|
64
|
+
|
|
65
|
+
### [Feature 2 from deliverables]
|
|
66
|
+
...
|
|
67
|
+
|
|
68
|
+
## Edge Cases
|
|
69
|
+
- [ ] [Relevant edge case based on feature]
|
|
70
|
+
- [ ] [Another edge case]
|
|
71
|
+
|
|
72
|
+
## Visual/UX Check
|
|
73
|
+
- [ ] UI matches expected design
|
|
74
|
+
- [ ] No visual glitches or layout issues
|
|
75
|
+
- [ ] Responsive to interactions
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Present this checklist to user.
|
|
79
|
+
</step>
|
|
80
|
+
|
|
81
|
+
<step name="guide">
|
|
82
|
+
**Guide user through each test:**
|
|
83
|
+
|
|
84
|
+
For each test item, use AskUserQuestion:
|
|
85
|
+
- header: "[Feature name]"
|
|
86
|
+
- question: "[Test description] - Did this work as expected?"
|
|
87
|
+
- options:
|
|
88
|
+
- "Pass" — Works correctly
|
|
89
|
+
- "Fail" — Doesn't work as expected
|
|
90
|
+
- "Partial" — Works but with issues
|
|
91
|
+
- "Skip" — Can't test right now
|
|
92
|
+
|
|
93
|
+
**If Pass:** Move to next test
|
|
94
|
+
|
|
95
|
+
**If Fail or Partial:**
|
|
96
|
+
Follow up with AskUserQuestion:
|
|
97
|
+
- header: "Issue details"
|
|
98
|
+
- question: "What went wrong?"
|
|
99
|
+
- options:
|
|
100
|
+
- "Crashes/errors" — Application error or exception
|
|
101
|
+
- "Wrong behavior" — Does something unexpected
|
|
102
|
+
- "Missing feature" — Expected functionality not present
|
|
103
|
+
- "UI/visual issue" — Looks wrong but functions
|
|
104
|
+
- "Let me describe" — Free-form description needed
|
|
105
|
+
</step>
|
|
106
|
+
|
|
107
|
+
<step name="collect">
|
|
108
|
+
**Collect and categorize issues:**
|
|
109
|
+
|
|
110
|
+
For each failed/partial test, gather:
|
|
111
|
+
- Feature affected
|
|
112
|
+
- What went wrong (from user input)
|
|
113
|
+
- Severity:
|
|
114
|
+
- **Blocker** — Can't use the feature at all
|
|
115
|
+
- **Major** — Feature works but significant problem
|
|
116
|
+
- **Minor** — Small issue, feature still usable
|
|
117
|
+
- **Cosmetic** — Visual only, no functional impact
|
|
118
|
+
</step>
|
|
119
|
+
|
|
120
|
+
<step name="log">
|
|
121
|
+
**Log issues to phase-scoped file:**
|
|
122
|
+
|
|
123
|
+
If any issues found:
|
|
124
|
+
|
|
125
|
+
1. Create `.planning/phases/XX-name/{phase}-{plan}-ISSUES.md` if doesn't exist
|
|
126
|
+
2. Use template from `@~/.claude/get-shit-done/templates/uat-issues.md`
|
|
127
|
+
3. Add each issue:
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
### UAT-[NNN]: [Brief description]
|
|
131
|
+
|
|
132
|
+
**Discovered:** [date] during user acceptance testing
|
|
133
|
+
**Phase/Plan:** [phase]-[plan] that was tested
|
|
134
|
+
**Severity:** [Blocker/Major/Minor/Cosmetic]
|
|
135
|
+
**Description:** [User's description of the problem]
|
|
136
|
+
**Expected:** [What should have happened]
|
|
137
|
+
**Actual:** [What actually happened]
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Note:** Issues go to phase-scoped file, NOT global `.planning/ISSUES.md`. This keeps UAT findings tied to the specific work being tested and enables `/gsd:plan-fix` to address them.
|
|
141
|
+
</step>
|
|
142
|
+
|
|
143
|
+
<step name="summarize">
|
|
144
|
+
**Present test summary:**
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
# Test Results: [Plan/Phase Name]
|
|
148
|
+
|
|
149
|
+
**Tests run:** [N]
|
|
150
|
+
**Passed:** [N]
|
|
151
|
+
**Failed:** [N]
|
|
152
|
+
**Partial:** [N]
|
|
153
|
+
**Skipped:** [N]
|
|
154
|
+
|
|
155
|
+
## Issues Found
|
|
156
|
+
[List any issues with severity]
|
|
157
|
+
|
|
158
|
+
## Verdict
|
|
159
|
+
[Based on results:]
|
|
160
|
+
- ALL PASS: "All tests passed. Feature validated."
|
|
161
|
+
- MINOR ISSUES: "Feature works with minor issues logged."
|
|
162
|
+
- MAJOR ISSUES: "Significant issues found - review before proceeding."
|
|
163
|
+
- BLOCKERS: "Blocking issues found - must fix before continuing."
|
|
164
|
+
|
|
165
|
+
## Next Steps
|
|
166
|
+
[Based on verdict:]
|
|
167
|
+
- If clean: Suggest proceeding to next phase
|
|
168
|
+
- If issues: Suggest /gsd:plan-fix to address
|
|
169
|
+
```
|
|
170
|
+
</step>
|
|
171
|
+
|
|
172
|
+
<step name="offer">
|
|
173
|
+
**Offer next actions based on results:**
|
|
174
|
+
|
|
175
|
+
Use AskUserQuestion:
|
|
176
|
+
- header: "Next"
|
|
177
|
+
- question: "What would you like to do?"
|
|
178
|
+
- options (based on results):
|
|
179
|
+
|
|
180
|
+
If all passed:
|
|
181
|
+
- "Continue to next phase" — Proceed with confidence
|
|
182
|
+
- "Test more" — Run additional manual tests
|
|
183
|
+
- "Done" — Finish testing session
|
|
184
|
+
|
|
185
|
+
If issues found:
|
|
186
|
+
- "Plan fixes" — Create plan to address issues (/gsd:plan-fix)
|
|
187
|
+
- "Log and continue" — Issues logged, proceed anyway
|
|
188
|
+
- "Review issues" — Look at logged issues in detail
|
|
189
|
+
- "Done" — Finish testing session
|
|
190
|
+
</step>
|
|
191
|
+
|
|
192
|
+
</process>
|
|
193
|
+
|
|
194
|
+
<success_criteria>
|
|
195
|
+
- [ ] Test scope identified from SUMMARY.md
|
|
196
|
+
- [ ] Checklist generated based on deliverables
|
|
197
|
+
- [ ] User guided through each test via AskUserQuestion
|
|
198
|
+
- [ ] All test results captured (pass/fail/partial/skip)
|
|
199
|
+
- [ ] Any issues logged to phase-scoped ISSUES.md
|
|
200
|
+
- [ ] Summary presented with verdict
|
|
201
|
+
- [ ] User knows next steps based on results
|
|
202
|
+
</success_criteria>
|
package/package.json
CHANGED