gsd-opencode 1.5.2 → 1.6.0

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.
Files changed (108) hide show
  1. package/agents/gsd-codebase-mapper.md +743 -0
  2. package/agents/gsd-debugger.md +1191 -0
  3. package/agents/gsd-executor.md +759 -0
  4. package/agents/gsd-integration-checker.md +427 -0
  5. package/agents/gsd-phase-researcher.md +637 -0
  6. package/agents/gsd-plan-checker.md +749 -0
  7. package/agents/gsd-planner.md +1373 -0
  8. package/agents/gsd-project-researcher.md +877 -0
  9. package/agents/gsd-research-synthesizer.md +250 -0
  10. package/agents/gsd-roadmapper.md +610 -0
  11. package/agents/gsd-verifier.md +782 -0
  12. package/bin/install.js +11 -1
  13. package/command/gsd/add-phase.md +5 -7
  14. package/command/gsd/add-todo.md +4 -6
  15. package/command/gsd/audit-milestone.md +257 -0
  16. package/command/gsd/check-todos.md +2 -4
  17. package/command/gsd/complete-milestone.md +53 -23
  18. package/command/gsd/debug.md +120 -30
  19. package/command/gsd/discuss-phase.md +51 -30
  20. package/command/gsd/execute-phase.md +192 -26
  21. package/command/gsd/help.md +66 -75
  22. package/command/gsd/insert-phase.md +6 -6
  23. package/command/gsd/list-phase-assumptions.md +1 -1
  24. package/command/gsd/map-codebase.md +15 -28
  25. package/command/gsd/new-milestone.md +693 -36
  26. package/command/gsd/new-project.md +668 -108
  27. package/command/gsd/pause-work.md +2 -2
  28. package/command/gsd/plan-milestone-gaps.md +284 -0
  29. package/command/gsd/plan-phase.md +449 -42
  30. package/command/gsd/progress.md +66 -36
  31. package/command/gsd/remove-phase.md +17 -19
  32. package/command/gsd/research-phase.md +155 -67
  33. package/command/gsd/resume-work.md +3 -3
  34. package/command/gsd/update.md +172 -0
  35. package/command/gsd/verify-work.md +186 -38
  36. package/command/gsd/whats-new.md +124 -0
  37. package/get-shit-done/references/checkpoints.md +599 -98
  38. package/get-shit-done/references/continuation-format.md +5 -11
  39. package/get-shit-done/references/questioning.md +87 -108
  40. package/get-shit-done/references/tdd.md +3 -3
  41. package/get-shit-done/references/ui-brand.md +160 -0
  42. package/get-shit-done/references/verification-patterns.md +595 -0
  43. package/get-shit-done/templates/DEBUG.md +3 -3
  44. package/get-shit-done/templates/UAT.md +247 -0
  45. package/get-shit-done/templates/codebase/architecture.md +5 -5
  46. package/get-shit-done/templates/codebase/concerns.md +1 -1
  47. package/get-shit-done/templates/codebase/conventions.md +1 -1
  48. package/get-shit-done/templates/codebase/structure.md +8 -8
  49. package/get-shit-done/templates/codebase/testing.md +2 -2
  50. package/get-shit-done/templates/context.md +221 -70
  51. package/get-shit-done/templates/debug-subagent-prompt.md +91 -0
  52. package/get-shit-done/templates/discovery.md +5 -5
  53. package/get-shit-done/templates/phase-prompt.md +115 -2
  54. package/get-shit-done/templates/planner-subagent-prompt.md +117 -0
  55. package/get-shit-done/templates/requirements.md +231 -0
  56. package/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
  57. package/get-shit-done/templates/research-project/FEATURES.md +147 -0
  58. package/get-shit-done/templates/research-project/PITFALLS.md +200 -0
  59. package/get-shit-done/templates/research-project/STACK.md +120 -0
  60. package/get-shit-done/templates/research-project/SUMMARY.md +170 -0
  61. package/get-shit-done/templates/research.md +2 -2
  62. package/get-shit-done/templates/roadmap.md +26 -20
  63. package/get-shit-done/templates/state.md +2 -17
  64. package/get-shit-done/templates/summary.md +13 -17
  65. package/get-shit-done/templates/user-setup.md +323 -0
  66. package/get-shit-done/templates/verification-report.md +322 -0
  67. package/get-shit-done/workflows/complete-milestone.md +152 -45
  68. package/get-shit-done/workflows/diagnose-issues.md +233 -0
  69. package/get-shit-done/workflows/discovery-phase.md +12 -17
  70. package/get-shit-done/workflows/discuss-phase.md +309 -124
  71. package/get-shit-done/workflows/execute-phase.md +177 -18
  72. package/get-shit-done/workflows/execute-plan.md +163 -145
  73. package/get-shit-done/workflows/map-codebase.md +86 -231
  74. package/get-shit-done/workflows/resume-project.md +18 -20
  75. package/get-shit-done/workflows/transition.md +7 -23
  76. package/get-shit-done/workflows/verify-phase.md +629 -0
  77. package/get-shit-done/workflows/verify-work.md +495 -134
  78. package/package.json +2 -1
  79. package/command/gsd/consider-issues.md +0 -201
  80. package/command/gsd/create-roadmap.md +0 -115
  81. package/command/gsd/discuss-milestone.md +0 -47
  82. package/command/gsd/execute-plan.md +0 -103
  83. package/command/gsd/plan-fix.md +0 -205
  84. package/command/gsd/status.md +0 -127
  85. package/get-shit-done/references/debugging/debugging-mindset.md +0 -253
  86. package/get-shit-done/references/debugging/hypothesis-testing.md +0 -373
  87. package/get-shit-done/references/debugging/investigation-techniques.md +0 -337
  88. package/get-shit-done/references/debugging/verification-patterns.md +0 -425
  89. package/get-shit-done/references/debugging/when-to-research.md +0 -361
  90. package/get-shit-done/references/plan-format.md +0 -475
  91. package/get-shit-done/references/principles.md +0 -157
  92. package/get-shit-done/references/research-pitfalls.md +0 -215
  93. package/get-shit-done/references/scope-estimation.md +0 -256
  94. package/get-shit-done/templates/agent-history.md +0 -263
  95. package/get-shit-done/templates/checkpoint-return.md +0 -204
  96. package/get-shit-done/templates/config.json +0 -26
  97. package/get-shit-done/templates/continuation-prompt.md +0 -235
  98. package/get-shit-done/templates/issues.md +0 -32
  99. package/get-shit-done/templates/milestone-context.md +0 -93
  100. package/get-shit-done/templates/subagent-task-prompt.md +0 -95
  101. package/get-shit-done/templates/uat-issues.md +0 -143
  102. package/get-shit-done/workflows/_archive/execute-phase.md +0 -899
  103. package/get-shit-done/workflows/create-milestone.md +0 -416
  104. package/get-shit-done/workflows/create-roadmap.md +0 -481
  105. package/get-shit-done/workflows/debug.md +0 -426
  106. package/get-shit-done/workflows/discuss-milestone.md +0 -236
  107. package/get-shit-done/workflows/plan-phase.md +0 -701
  108. package/get-shit-done/workflows/research-phase.md +0 -436
@@ -1,202 +1,563 @@
1
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.
2
+ Validate built features through conversational testing with persistent state. Creates UAT.md that tracks test progress, survives /new, and feeds gaps into /gsd-plan-phase --gaps.
3
3
 
4
- The USER performs all testing — OpenCode generates the checklist, guides the process, and captures issues.
4
+ User tests, OpenCode records. One test at a time. Plain text responses.
5
5
  </purpose>
6
6
 
7
+ <philosophy>
8
+ **Show expected, ask if reality matches.**
9
+
10
+ OpenCode presents what SHOULD happen. User confirms or describes what's different.
11
+ - "yes" / "y" / "next" / empty → pass
12
+ - Anything else → logged as issue, severity inferred
13
+
14
+ No Pass/Fail buttons. No severity questions. Just: "Here's what should happen. Does it?"
15
+ </philosophy>
16
+
17
+ <template>
18
+ @~/.config/opencode/get-shit-done/templates/UAT.md
19
+ </template>
20
+
7
21
  <process>
8
22
 
9
- <step name="identify">
10
- **Determine what to test:**
23
+ <step name="check_active_session">
24
+ **First: Check for active UAT sessions**
25
+
26
+ ```bash
27
+ find .planning/phases -name "*-UAT.md" -type f 2>/dev/null | head -5
28
+ ```
29
+
30
+ **If active sessions exist AND no $ARGUMENTS provided:**
31
+
32
+ read each file's frontmatter (status, phase) and Current Test section.
33
+
34
+ Display inline:
11
35
 
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)
36
+ ```
37
+ ## Active UAT Sessions
38
+
39
+ | # | Phase | Status | Current Test | Progress |
40
+ |---|-------|--------|--------------|----------|
41
+ | 1 | 04-comments | testing | 3. Reply to Comment | 2/6 |
42
+ | 2 | 05-auth | testing | 1. Login Form | 0/4 |
43
+
44
+ Reply with a number to resume, or provide a phase number to start new.
45
+ ```
46
+
47
+ Wait for user response.
15
48
 
16
- If no arguments:
17
- - Find most recently modified SUMMARY.md
49
+ - If user replies with number (1, 2) → Load that file, go to `resume_from_file`
50
+ - If user replies with phase number → Treat as new session, go to `create_uat_file`
51
+
52
+ **If active sessions exist AND $ARGUMENTS provided:**
53
+
54
+ Check if session exists for that phase. If yes, offer to resume or restart.
55
+ If no, continue to `create_uat_file`.
56
+
57
+ **If no active sessions AND no $ARGUMENTS:**
58
+
59
+ ```
60
+ No active UAT sessions.
61
+
62
+ Provide a phase number to start testing (e.g., /gsd-verify-work 4)
63
+ ```
64
+
65
+ **If no active sessions AND $ARGUMENTS provided:**
66
+
67
+ Continue to `create_uat_file`.
68
+ </step>
69
+
70
+ <step name="find_summaries">
71
+ **Find what to test:**
72
+
73
+ Parse $ARGUMENTS as phase number (e.g., "4") or plan number (e.g., "04-02").
18
74
 
19
75
  ```bash
20
- find .planning/phases -name "*SUMMARY.md" -type f -exec ls -lt {} + | head -5
76
+ # Find phase directory (match both zero-padded and unpadded)
77
+ PADDED_PHASE=$(printf "%02d" ${PHASE_ARG} 2>/dev/null || echo "${PHASE_ARG}")
78
+ PHASE_DIR=$(ls -d .planning/phases/${PADDED_PHASE}-* .planning/phases/${PHASE_ARG}-* 2>/dev/null | head -1)
79
+
80
+ # Find SUMMARY files
81
+ ls "$PHASE_DIR"/*-SUMMARY.md 2>/dev/null
21
82
  ```
22
83
 
23
- Read the SUMMARY.md to understand what was built.
84
+ read each SUMMARY.md to extract testable deliverables.
24
85
  </step>
25
86
 
26
- <step name="extract">
87
+ <step name="extract_tests">
27
88
  **Extract testable deliverables from SUMMARY.md:**
28
89
 
29
90
  Parse for:
30
91
  1. **Accomplishments** - Features/functionality added
31
- 2. **Files Created/Modified** - What changed
32
- 3. **User-facing changes** - UI, workflows, interactions
92
+ 2. **User-facing changes** - UI, workflows, interactions
33
93
 
34
94
  Focus on USER-OBSERVABLE outcomes, not implementation details.
35
95
 
96
+ For each deliverable, create a test:
97
+ - name: Brief test name
98
+ - expected: What the user should see/experience (specific, observable)
99
+
36
100
  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>
101
+ - Accomplishment: "Added comment threading with infinite nesting"
102
+ Test: "Reply to a Comment"
103
+ → Expected: "Clicking Reply opens inline composer below comment. Submitting shows reply nested under parent with visual indentation."
40
104
 
41
- <step name="generate">
42
- **Generate manual test checklist:**
105
+ Skip internal/non-observable items (refactors, type changes, etc.).
106
+ </step>
43
107
 
44
- Create structured test plan:
108
+ <step name="create_uat_file">
109
+ **Create UAT file with all tests:**
45
110
 
111
+ ```bash
112
+ mkdir -p "$PHASE_DIR"
46
113
  ```
47
- # User Acceptance Test: [Plan/Phase Name]
48
114
 
49
- **Scope:** [What was built - from SUMMARY.md]
50
- **Testing:** Manual user validation
115
+ Build test list from extracted deliverables.
116
+
117
+ Create file:
118
+
119
+ ```markdown
120
+ ---
121
+ status: testing
122
+ phase: XX-name
123
+ source: [list of SUMMARY.md files]
124
+ started: [ISO timestamp]
125
+ updated: [ISO timestamp]
126
+ ---
51
127
 
52
- ## Pre-flight
53
- - [ ] Application builds and runs without errors
54
- - [ ] Application launches to expected state
128
+ ## Current Test
129
+ <!-- OVERWRITE each test - shows where we are -->
55
130
 
56
- ## Feature Tests
131
+ number: 1
132
+ name: [first test name]
133
+ expected: |
134
+ [what user should observe]
135
+ awaiting: user response
57
136
 
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]
137
+ ## Tests
138
+
139
+ ### 1. [Test Name]
140
+ expected: [observable behavior]
141
+ result: [pending]
142
+
143
+ ### 2. [Test Name]
144
+ expected: [observable behavior]
145
+ result: [pending]
64
146
 
65
- ### [Feature 2 from deliverables]
66
147
  ...
67
148
 
68
- ## Edge Cases
69
- - [ ] [Relevant edge case based on feature]
70
- - [ ] [Another edge case]
149
+ ## Summary
150
+
151
+ total: [N]
152
+ passed: 0
153
+ issues: 0
154
+ pending: [N]
155
+ skipped: 0
156
+
157
+ ## Gaps
71
158
 
72
- ## Visual/UX Check
73
- - [ ] UI matches expected design
74
- - [ ] No visual glitches or layout issues
75
- - [ ] Responsive to interactions
159
+ [none yet]
76
160
  ```
77
161
 
78
- Present this checklist to user.
162
+ write to `.planning/phases/XX-name/{phase}-UAT.md`
163
+
164
+ Proceed to `present_test`.
79
165
  </step>
80
166
 
81
- <step name="guide">
82
- **Guide user through each test:**
83
-
84
- For each test item, use question:
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 question:
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
167
+ <step name="present_test">
168
+ **Present current test to user:**
169
+
170
+ read Current Test section from UAT file.
171
+
172
+ Display using checkpoint box format:
173
+
174
+ ```
175
+ ╔══════════════════════════════════════════════════════════════╗
176
+ CHECKPOINT: Verification Required ║
177
+ ╚══════════════════════════════════════════════════════════════╝
178
+
179
+ **Test {number}: {name}**
180
+
181
+ {expected}
182
+
183
+ ──────────────────────────────────────────────────────────────
184
+ Type "pass" or describe what's wrong
185
+ ──────────────────────────────────────────────────────────────
186
+ ```
187
+
188
+ Wait for user response (plain text, no question).
105
189
  </step>
106
190
 
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
191
+ <step name="process_response">
192
+ **Process user response and update file:**
193
+
194
+ **If response indicates pass:**
195
+ - Empty response, "yes", "y", "ok", "pass", "next", "approved", "✓"
196
+
197
+ Update Tests section:
198
+ ```
199
+ ### {N}. {name}
200
+ expected: {expected}
201
+ result: pass
202
+ ```
203
+
204
+ **If response indicates skip:**
205
+ - "skip", "can't test", "n/a"
206
+
207
+ Update Tests section:
208
+ ```
209
+ ### {N}. {name}
210
+ expected: {expected}
211
+ result: skipped
212
+ reason: [user's reason if provided]
213
+ ```
214
+
215
+ **If response is anything else:**
216
+ - Treat as issue description
217
+
218
+ Infer severity from description:
219
+ - Contains: crash, error, exception, fails, broken, unusable → blocker
220
+ - Contains: doesn't work, wrong, missing, can't → major
221
+ - Contains: slow, weird, off, minor, small → minor
222
+ - Contains: color, font, spacing, alignment, visual → cosmetic
223
+ - Default if unclear: major
224
+
225
+ Update Tests section:
226
+ ```
227
+ ### {N}. {name}
228
+ expected: {expected}
229
+ result: issue
230
+ reported: "{verbatim user response}"
231
+ severity: {inferred}
232
+ ```
233
+
234
+ Append to Gaps section (structured YAML for plan-phase --gaps):
235
+ ```yaml
236
+ - truth: "{expected behavior from test}"
237
+ status: failed
238
+ reason: "User reported: {verbatim user response}"
239
+ severity: {inferred}
240
+ test: {N}
241
+ artifacts: [] # Filled by diagnosis
242
+ missing: [] # Filled by diagnosis
243
+ ```
244
+
245
+ **After any response:**
246
+
247
+ Update Summary counts.
248
+ Update frontmatter.updated timestamp.
249
+
250
+ If more tests remain → Update Current Test, go to `present_test`
251
+ If no more tests → Go to `complete_session`
118
252
  </step>
119
253
 
120
- <step name="log">
121
- **Log issues to phase-scoped file:**
254
+ <step name="resume_from_file">
255
+ **Resume testing from UAT file:**
122
256
 
123
- If any issues found:
257
+ read the full UAT file.
124
258
 
125
- 1. Create `.planning/phases/XX-name/{phase}-{plan}-ISSUES.md` if doesn't exist
126
- 2. Use template from `@~/.config/opencode/get-shit-done/templates/uat-issues.md`
127
- 3. Add each issue:
259
+ Find first test with `result: [pending]`.
128
260
 
129
- ```markdown
130
- ### UAT-[NNN]: [Brief description]
261
+ Announce:
262
+ ```
263
+ Resuming: Phase {phase} UAT
264
+ Progress: {passed + issues + skipped}/{total}
265
+ Issues found so far: {issues count}
131
266
 
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]
267
+ Continuing from Test {N}...
138
268
  ```
139
269
 
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.
270
+ Update Current Test section with the pending test.
271
+ Proceed to `present_test`.
141
272
  </step>
142
273
 
143
- <step name="summarize">
144
- **Present test summary:**
274
+ <step name="complete_session">
275
+ **Complete testing and commit:**
276
+
277
+ Update frontmatter:
278
+ - status: complete
279
+ - updated: [now]
145
280
 
281
+ Clear Current Test section:
146
282
  ```
147
- # Test Results: [Plan/Phase Name]
283
+ ## Current Test
148
284
 
149
- **Tests run:** [N]
150
- **Passed:** [N]
151
- **Failed:** [N]
152
- **Partial:** [N]
153
- **Skipped:** [N]
285
+ [testing complete]
286
+ ```
154
287
 
155
- ## Issues Found
156
- [List any issues with severity]
288
+ Commit the UAT file:
289
+ ```bash
290
+ git add ".planning/phases/XX-name/{phase}-UAT.md"
291
+ git commit -m "test({phase}): complete UAT - {passed} passed, {issues} issues"
292
+ ```
157
293
 
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."
294
+ Present summary:
295
+ ```
296
+ ## UAT Complete: Phase {phase}
297
+
298
+ | Result | Count |
299
+ |--------|-------|
300
+ | Passed | {N} |
301
+ | Issues | {N} |
302
+ | Skipped| {N} |
164
303
 
165
- ## Next Steps
166
- [Based on verdict:]
167
- - If clean: Suggest proceeding to next phase
168
- - If issues: Suggest /gsd-plan-fix to address
304
+ [If issues > 0:]
305
+ ### Issues Found
306
+
307
+ [List from Issues section]
169
308
  ```
309
+
310
+ **If issues > 0:** Proceed to `diagnose_issues`
311
+
312
+ **If issues == 0:**
313
+ ```
314
+ All tests passed. Ready to continue.
315
+
316
+ - `/gsd-plan-phase {next}` — Plan next phase
317
+ - `/gsd-execute-phase {next}` — Execute next phase
318
+ ```
319
+ </step>
320
+
321
+ <step name="diagnose_issues">
322
+ **Diagnose root causes before planning fixes:**
323
+
324
+ ```
325
+ ---
326
+
327
+ {N} issues found. Diagnosing root causes...
328
+
329
+ Spawning parallel debug agents to investigate each issue.
330
+ ```
331
+
332
+ - Load diagnose-issues workflow
333
+ - Follow @~/.config/opencode/get-shit-done/workflows/diagnose-issues.md
334
+ - Spawn parallel debug agents for each issue
335
+ - Collect root causes
336
+ - Update UAT.md with root causes
337
+ - Proceed to `plan_gap_closure`
338
+
339
+ Diagnosis runs automatically - no user prompt. Parallel agents investigate simultaneously, so overhead is minimal and fixes are more accurate.
340
+ </step>
341
+
342
+ <step name="plan_gap_closure">
343
+ **Auto-plan fixes from diagnosed gaps:**
344
+
345
+ Display:
346
+ ```
347
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
348
+ GSD ► PLANNING FIXES
349
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
350
+
351
+ ◆ Spawning planner for gap closure...
352
+ ```
353
+
354
+ Spawn gsd-planner in --gaps mode:
355
+
356
+ ```
357
+ Task(
358
+ prompt="""
359
+ <planning_context>
360
+
361
+ **Phase:** {phase_number}
362
+ **Mode:** gap_closure
363
+
364
+ **UAT with diagnoses:**
365
+ @.planning/phases/{phase_dir}/{phase}-UAT.md
366
+
367
+ **Project State:**
368
+ @.planning/STATE.md
369
+
370
+ **Roadmap:**
371
+ @.planning/ROADMAP.md
372
+
373
+ </planning_context>
374
+
375
+ <downstream_consumer>
376
+ Output consumed by /gsd-execute-phase
377
+ Plans must be executable prompts.
378
+ </downstream_consumer>
379
+ """,
380
+ subagent_type="gsd-planner",
381
+ description="Plan gap fixes for Phase {phase}"
382
+ )
383
+ ```
384
+
385
+ On return:
386
+ - **PLANNING COMPLETE:** Proceed to `verify_gap_plans`
387
+ - **PLANNING INCONCLUSIVE:** Report and offer manual intervention
388
+ </step>
389
+
390
+ <step name="verify_gap_plans">
391
+ **Verify fix plans with checker:**
392
+
393
+ Display:
394
+ ```
395
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
396
+ GSD ► VERIFYING FIX PLANS
397
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
398
+
399
+ ◆ Spawning plan checker...
400
+ ```
401
+
402
+ Initialize: `iteration_count = 1`
403
+
404
+ Spawn gsd-plan-checker:
405
+
406
+ ```
407
+ Task(
408
+ prompt="""
409
+ <verification_context>
410
+
411
+ **Phase:** {phase_number}
412
+ **Phase Goal:** Close diagnosed gaps from UAT
413
+
414
+ **Plans to verify:**
415
+ @.planning/phases/{phase_dir}/*-PLAN.md
416
+
417
+ </verification_context>
418
+
419
+ <expected_output>
420
+ Return one of:
421
+ - ## VERIFICATION PASSED — all checks pass
422
+ - ## ISSUES FOUND — structured issue list
423
+ </expected_output>
424
+ """,
425
+ subagent_type="gsd-plan-checker",
426
+ description="Verify Phase {phase} fix plans"
427
+ )
428
+ ```
429
+
430
+ On return:
431
+ - **VERIFICATION PASSED:** Proceed to `present_ready`
432
+ - **ISSUES FOUND:** Proceed to `revision_loop`
433
+ </step>
434
+
435
+ <step name="revision_loop">
436
+ **Iterate planner ↔ checker until plans pass (max 3):**
437
+
438
+ **If iteration_count < 3:**
439
+
440
+ Display: `Sending back to planner for revision... (iteration {N}/3)`
441
+
442
+ Spawn gsd-planner with revision context:
443
+
444
+ ```
445
+ Task(
446
+ prompt="""
447
+ <revision_context>
448
+
449
+ **Phase:** {phase_number}
450
+ **Mode:** revision
451
+
452
+ **Existing plans:**
453
+ @.planning/phases/{phase_dir}/*-PLAN.md
454
+
455
+ **Checker issues:**
456
+ {structured_issues_from_checker}
457
+
458
+ </revision_context>
459
+
460
+ <instructions>
461
+ read existing PLAN.md files. Make targeted updates to address checker issues.
462
+ Do NOT replan from scratch unless issues are fundamental.
463
+ </instructions>
464
+ """,
465
+ subagent_type="gsd-planner",
466
+ description="Revise Phase {phase} plans"
467
+ )
468
+ ```
469
+
470
+ After planner returns → spawn checker again (verify_gap_plans logic)
471
+ Increment iteration_count
472
+
473
+ **If iteration_count >= 3:**
474
+
475
+ Display: `Max iterations reached. {N} issues remain.`
476
+
477
+ Offer options:
478
+ 1. Force proceed (execute despite issues)
479
+ 2. Provide guidance (user gives direction, retry)
480
+ 3. Abandon (exit, user runs /gsd-plan-phase manually)
481
+
482
+ Wait for user response.
170
483
  </step>
171
484
 
172
- <step name="offer">
173
- **Offer next actions based on results:**
485
+ <step name="present_ready">
486
+ **Present completion and next steps:**
487
+
488
+ ```
489
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
490
+ GSD ► FIXES READY ✓
491
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
492
+
493
+ **Phase {X}: {Name}** — {N} gap(s) diagnosed, {M} fix plan(s) created
494
+
495
+ | Gap | Root Cause | Fix Plan |
496
+ |-----|------------|----------|
497
+ | {truth 1} | {root_cause} | {phase}-04 |
498
+ | {truth 2} | {root_cause} | {phase}-04 |
499
+
500
+ Plans verified and ready for execution.
501
+
502
+ ───────────────────────────────────────────────────────────────
503
+
504
+ ## ▶ Next Up
174
505
 
175
- Use question:
176
- - header: "Next"
177
- - question: "What would you like to do?"
178
- - options (based on results):
506
+ **Execute fixes** — run fix plans
179
507
 
180
- If all passed:
181
- - "Continue to next phase" — Proceed with confidence
182
- - "Test more" — Run additional manual tests
183
- - "Done" — Finish testing session
508
+ `/new` then `/gsd-execute-phase {phase} --gaps-only`
184
509
 
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
510
+ ───────────────────────────────────────────────────────────────
511
+ ```
190
512
  </step>
191
513
 
192
514
  </process>
193
515
 
516
+ <update_rules>
517
+ **Batched writes for efficiency:**
518
+
519
+ Keep results in memory. write to file only when:
520
+ 1. **Issue found** — Preserve the problem immediately
521
+ 2. **Session complete** — Final write before commit
522
+ 3. **Checkpoint** — Every 5 passed tests (safety net)
523
+
524
+ | Section | Rule | When Written |
525
+ |---------|------|--------------|
526
+ | Frontmatter.status | OVERWRITE | Start, complete |
527
+ | Frontmatter.updated | OVERWRITE | On any file write |
528
+ | Current Test | OVERWRITE | On any file write |
529
+ | Tests.{N}.result | OVERWRITE | On any file write |
530
+ | Summary | OVERWRITE | On any file write |
531
+ | Gaps | APPEND | When issue found |
532
+
533
+ On context reset: File shows last checkpoint. Resume from there.
534
+ </update_rules>
535
+
536
+ <severity_inference>
537
+ **Infer severity from user's natural language:**
538
+
539
+ | User says | Infer |
540
+ |-----------|-------|
541
+ | "crashes", "error", "exception", "fails completely" | blocker |
542
+ | "doesn't work", "nothing happens", "wrong behavior" | major |
543
+ | "works but...", "slow", "weird", "minor issue" | minor |
544
+ | "color", "spacing", "alignment", "looks off" | cosmetic |
545
+
546
+ Default to **major** if unclear. User can correct if needed.
547
+
548
+ **Never ask "how severe is this?"** - just infer and move on.
549
+ </severity_inference>
550
+
194
551
  <success_criteria>
195
- - [ ] Test scope identified from SUMMARY.md
196
- - [ ] Checklist generated based on deliverables
197
- - [ ] User guided through each test via question
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
552
+ - [ ] UAT file created with all tests from SUMMARY.md
553
+ - [ ] Tests presented one at a time with expected behavior
554
+ - [ ] User responses processed as pass/issue/skip
555
+ - [ ] Severity inferred from description (never asked)
556
+ - [ ] Batched writes: on issue, every 5 passes, or completion
557
+ - [ ] Committed on completion
558
+ - [ ] If issues: parallel debug agents diagnose root causes
559
+ - [ ] If issues: gsd-planner creates fix plans (gap_closure mode)
560
+ - [ ] If issues: gsd-plan-checker verifies fix plans
561
+ - [ ] If issues: revision loop until plans pass (max 3 iterations)
562
+ - [ ] Ready for `/gsd-execute-phase --gaps-only` when complete
202
563
  </success_criteria>