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 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
- const configDir = expandTilde(process.env.CLAUDE_CONFIG_DIR);
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 globalPath = expandTilde(process.env.CLAUDE_CONFIG_DIR) || path.join(os.homedir(), '.claude');
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>
@@ -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 summaries in current phase**
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 and {Y} summaries."
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "get-shit-done-cc",
3
- "version": "1.3.28",
3
+ "version": "1.3.29",
4
4
  "description": "A meta-prompting, context engineering and spec-driven development system for Claude Code by TÂCHES.",
5
5
  "bin": {
6
6
  "get-shit-done-cc": "bin/install.js"