gsd-opencode 1.22.0 → 1.30.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 (157) hide show
  1. package/agents/gsd-advisor-researcher.md +112 -0
  2. package/agents/gsd-assumptions-analyzer.md +110 -0
  3. package/agents/gsd-codebase-mapper.md +1 -2
  4. package/agents/gsd-debugger.md +119 -2
  5. package/agents/gsd-executor.md +25 -4
  6. package/agents/gsd-integration-checker.md +1 -2
  7. package/agents/gsd-nyquist-auditor.md +1 -2
  8. package/agents/gsd-phase-researcher.md +151 -5
  9. package/agents/gsd-plan-checker.md +71 -5
  10. package/agents/gsd-planner.md +50 -4
  11. package/agents/gsd-project-researcher.md +29 -3
  12. package/agents/gsd-research-synthesizer.md +1 -2
  13. package/agents/gsd-roadmapper.md +30 -2
  14. package/agents/gsd-ui-auditor.md +445 -0
  15. package/agents/gsd-ui-checker.md +305 -0
  16. package/agents/gsd-ui-researcher.md +368 -0
  17. package/agents/gsd-user-profiler.md +173 -0
  18. package/agents/gsd-verifier.md +124 -4
  19. package/commands/gsd/gsd-add-backlog.md +76 -0
  20. package/commands/gsd/gsd-audit-uat.md +24 -0
  21. package/commands/gsd/gsd-autonomous.md +41 -0
  22. package/commands/gsd/gsd-debug.md +5 -0
  23. package/commands/gsd/gsd-discuss-phase.md +10 -36
  24. package/commands/gsd/gsd-do.md +30 -0
  25. package/commands/gsd/gsd-execute-phase.md +20 -2
  26. package/commands/gsd/gsd-fast.md +30 -0
  27. package/commands/gsd/gsd-forensics.md +56 -0
  28. package/commands/gsd/gsd-list-workspaces.md +19 -0
  29. package/commands/gsd/gsd-manager.md +39 -0
  30. package/commands/gsd/gsd-milestone-summary.md +51 -0
  31. package/commands/gsd/gsd-new-workspace.md +44 -0
  32. package/commands/gsd/gsd-next.md +24 -0
  33. package/commands/gsd/gsd-note.md +34 -0
  34. package/commands/gsd/gsd-plan-phase.md +3 -1
  35. package/commands/gsd/gsd-plant-seed.md +28 -0
  36. package/commands/gsd/gsd-pr-branch.md +25 -0
  37. package/commands/gsd/gsd-profile-user.md +46 -0
  38. package/commands/gsd/gsd-quick.md +4 -2
  39. package/commands/gsd/gsd-reapply-patches.md +10 -6
  40. package/commands/gsd/gsd-remove-workspace.md +26 -0
  41. package/commands/gsd/gsd-research-phase.md +5 -0
  42. package/commands/gsd/gsd-resume-work.md +1 -1
  43. package/commands/gsd/gsd-review-backlog.md +61 -0
  44. package/commands/gsd/gsd-review.md +37 -0
  45. package/commands/gsd/gsd-session-report.md +19 -0
  46. package/commands/gsd/gsd-set-profile.md +24 -23
  47. package/commands/gsd/gsd-ship.md +23 -0
  48. package/commands/gsd/gsd-stats.md +18 -0
  49. package/commands/gsd/gsd-thread.md +127 -0
  50. package/commands/gsd/gsd-ui-phase.md +34 -0
  51. package/commands/gsd/gsd-ui-review.md +32 -0
  52. package/commands/gsd/gsd-workstreams.md +66 -0
  53. package/get-shit-done/bin/gsd-tools.cjs +410 -84
  54. package/get-shit-done/bin/lib/commands.cjs +429 -18
  55. package/get-shit-done/bin/lib/config.cjs +318 -45
  56. package/get-shit-done/bin/lib/core.cjs +822 -84
  57. package/get-shit-done/bin/lib/frontmatter.cjs +78 -41
  58. package/get-shit-done/bin/lib/init.cjs +836 -104
  59. package/get-shit-done/bin/lib/milestone.cjs +44 -33
  60. package/get-shit-done/bin/lib/model-profiles.cjs +68 -0
  61. package/get-shit-done/bin/lib/phase.cjs +293 -306
  62. package/get-shit-done/bin/lib/profile-output.cjs +952 -0
  63. package/get-shit-done/bin/lib/profile-pipeline.cjs +539 -0
  64. package/get-shit-done/bin/lib/roadmap.cjs +55 -24
  65. package/get-shit-done/bin/lib/security.cjs +382 -0
  66. package/get-shit-done/bin/lib/state.cjs +363 -53
  67. package/get-shit-done/bin/lib/template.cjs +2 -2
  68. package/get-shit-done/bin/lib/uat.cjs +282 -0
  69. package/get-shit-done/bin/lib/verify.cjs +104 -36
  70. package/get-shit-done/bin/lib/workstream.cjs +491 -0
  71. package/get-shit-done/references/checkpoints.md +12 -10
  72. package/get-shit-done/references/decimal-phase-calculation.md +2 -3
  73. package/get-shit-done/references/git-integration.md +47 -0
  74. package/get-shit-done/references/model-profile-resolution.md +2 -0
  75. package/get-shit-done/references/model-profiles.md +62 -16
  76. package/get-shit-done/references/phase-argument-parsing.md +2 -2
  77. package/get-shit-done/references/planning-config.md +3 -1
  78. package/get-shit-done/references/user-profiling.md +681 -0
  79. package/get-shit-done/references/workstream-flag.md +58 -0
  80. package/get-shit-done/templates/UAT.md +21 -3
  81. package/get-shit-done/templates/UI-SPEC.md +100 -0
  82. package/get-shit-done/templates/claude-md.md +122 -0
  83. package/get-shit-done/templates/config.json +10 -3
  84. package/get-shit-done/templates/context.md +61 -6
  85. package/get-shit-done/templates/dev-preferences.md +21 -0
  86. package/get-shit-done/templates/discussion-log.md +63 -0
  87. package/get-shit-done/templates/phase-prompt.md +46 -5
  88. package/get-shit-done/templates/project.md +2 -0
  89. package/get-shit-done/templates/state.md +2 -2
  90. package/get-shit-done/templates/user-profile.md +146 -0
  91. package/get-shit-done/workflows/add-phase.md +2 -2
  92. package/get-shit-done/workflows/add-tests.md +4 -4
  93. package/get-shit-done/workflows/add-todo.md +3 -3
  94. package/get-shit-done/workflows/audit-milestone.md +13 -5
  95. package/get-shit-done/workflows/audit-uat.md +109 -0
  96. package/get-shit-done/workflows/autonomous.md +891 -0
  97. package/get-shit-done/workflows/check-todos.md +2 -2
  98. package/get-shit-done/workflows/cleanup.md +4 -4
  99. package/get-shit-done/workflows/complete-milestone.md +9 -6
  100. package/get-shit-done/workflows/diagnose-issues.md +15 -3
  101. package/get-shit-done/workflows/discovery-phase.md +2 -2
  102. package/get-shit-done/workflows/discuss-phase-assumptions.md +653 -0
  103. package/get-shit-done/workflows/discuss-phase.md +411 -38
  104. package/get-shit-done/workflows/do.md +104 -0
  105. package/get-shit-done/workflows/execute-phase.md +405 -18
  106. package/get-shit-done/workflows/execute-plan.md +77 -12
  107. package/get-shit-done/workflows/fast.md +105 -0
  108. package/get-shit-done/workflows/forensics.md +265 -0
  109. package/get-shit-done/workflows/health.md +28 -6
  110. package/get-shit-done/workflows/help.md +124 -7
  111. package/get-shit-done/workflows/insert-phase.md +2 -2
  112. package/get-shit-done/workflows/list-phase-assumptions.md +2 -2
  113. package/get-shit-done/workflows/list-workspaces.md +56 -0
  114. package/get-shit-done/workflows/manager.md +362 -0
  115. package/get-shit-done/workflows/map-codebase.md +74 -13
  116. package/get-shit-done/workflows/milestone-summary.md +223 -0
  117. package/get-shit-done/workflows/new-milestone.md +120 -18
  118. package/get-shit-done/workflows/new-project.md +178 -39
  119. package/get-shit-done/workflows/new-workspace.md +237 -0
  120. package/get-shit-done/workflows/next.md +97 -0
  121. package/get-shit-done/workflows/node-repair.md +92 -0
  122. package/get-shit-done/workflows/note.md +156 -0
  123. package/get-shit-done/workflows/pause-work.md +62 -8
  124. package/get-shit-done/workflows/plan-milestone-gaps.md +4 -5
  125. package/get-shit-done/workflows/plan-phase.md +332 -33
  126. package/get-shit-done/workflows/plant-seed.md +169 -0
  127. package/get-shit-done/workflows/pr-branch.md +129 -0
  128. package/get-shit-done/workflows/profile-user.md +450 -0
  129. package/get-shit-done/workflows/progress.md +145 -20
  130. package/get-shit-done/workflows/quick.md +205 -49
  131. package/get-shit-done/workflows/remove-phase.md +2 -2
  132. package/get-shit-done/workflows/remove-workspace.md +90 -0
  133. package/get-shit-done/workflows/research-phase.md +11 -3
  134. package/get-shit-done/workflows/resume-project.md +35 -16
  135. package/get-shit-done/workflows/review.md +228 -0
  136. package/get-shit-done/workflows/session-report.md +146 -0
  137. package/get-shit-done/workflows/set-profile.md +2 -2
  138. package/get-shit-done/workflows/settings.md +80 -11
  139. package/get-shit-done/workflows/ship.md +228 -0
  140. package/get-shit-done/workflows/stats.md +60 -0
  141. package/get-shit-done/workflows/transition.md +147 -20
  142. package/get-shit-done/workflows/ui-phase.md +302 -0
  143. package/get-shit-done/workflows/ui-review.md +165 -0
  144. package/get-shit-done/workflows/update.md +108 -25
  145. package/get-shit-done/workflows/validate-phase.md +15 -8
  146. package/get-shit-done/workflows/verify-phase.md +16 -5
  147. package/get-shit-done/workflows/verify-work.md +72 -18
  148. package/package.json +1 -1
  149. package/skills/gsd-audit-milestone/SKILL.md +29 -0
  150. package/skills/gsd-cleanup/SKILL.md +19 -0
  151. package/skills/gsd-complete-milestone/SKILL.md +131 -0
  152. package/skills/gsd-discuss-phase/SKILL.md +54 -0
  153. package/skills/gsd-execute-phase/SKILL.md +49 -0
  154. package/skills/gsd-plan-phase/SKILL.md +37 -0
  155. package/skills/gsd-ui-phase/SKILL.md +24 -0
  156. package/skills/gsd-ui-review/SKILL.md +24 -0
  157. package/skills/gsd-verify-work/SKILL.md +30 -0
@@ -0,0 +1,228 @@
1
+ <objective>
2
+ Create a pull request from completed phase/milestone work, generate a rich PR body from planning artifacts, optionally run code review, and prepare for merge. Closes the plan → execute → verify → ship loop.
3
+ </objective>
4
+
5
+ <required_reading>
6
+ read all files referenced by the invoking prompt's execution_context before starting.
7
+ </required_reading>
8
+
9
+ <process>
10
+
11
+ <step name="initialize">
12
+ Parse arguments and load project state:
13
+
14
+ ```bash
15
+ INIT=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" init phase-op "${PHASE_ARG}")
16
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
17
+ ```
18
+
19
+ Parse from init JSON: `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `padded_phase`, `commit_docs`.
20
+
21
+ Also load config for branching strategy:
22
+ ```bash
23
+ CONFIG=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state load)
24
+ ```
25
+
26
+ Extract: `branching_strategy`, `branch_name`.
27
+ </step>
28
+
29
+ <step name="preflight_checks">
30
+ Verify the work is ready to ship:
31
+
32
+ 1. **Verification passed?**
33
+ ```bash
34
+ VERIFICATION=$(cat ${PHASE_DIR}/*-VERIFICATION.md 2>/dev/null)
35
+ ```
36
+ Check for `status: passed` or `status: human_needed` (with human approval).
37
+ If no VERIFICATION.md or status is `gaps_found`: warn and ask user to confirm.
38
+
39
+ 2. **Clean working tree?**
40
+ ```bash
41
+ git status --short
42
+ ```
43
+ If uncommitted changes exist: ask user to commit or stash first.
44
+
45
+ 3. **On correct branch?**
46
+ ```bash
47
+ CURRENT_BRANCH=$(git branch --show-current)
48
+ ```
49
+ If on `main`/`master`: warn — should be on a feature branch.
50
+ If branching_strategy is `none`: offer to create a branch now.
51
+
52
+ 4. **Remote configured?**
53
+ ```bash
54
+ git remote -v | head -2
55
+ ```
56
+ Detect `origin` remote. If no remote: error — can't create PR.
57
+
58
+ 5. **`gh` CLI available?**
59
+ ```bash
60
+ which gh && gh auth status 2>&1
61
+ ```
62
+ If `gh` not found or not authenticated: provide setup instructions and exit.
63
+ </step>
64
+
65
+ <step name="push_branch">
66
+ Push the current branch to remote:
67
+
68
+ ```bash
69
+ git push origin ${CURRENT_BRANCH} 2>&1
70
+ ```
71
+
72
+ If push fails (e.g., no upstream): set upstream:
73
+ ```bash
74
+ git push --set-upstream origin ${CURRENT_BRANCH} 2>&1
75
+ ```
76
+
77
+ Report: "Pushed `{branch}` to origin ({commit_count} commits ahead of main)"
78
+ </step>
79
+
80
+ <step name="generate_pr_body">
81
+ Auto-generate a rich PR body from planning artifacts:
82
+
83
+ **1. Title:**
84
+ ```
85
+ Phase {phase_number}: {phase_name}
86
+ ```
87
+ Or for milestone: `Milestone {version}: {name}`
88
+
89
+ **2. Summary section:**
90
+ read ROADMAP.md for phase goal. read VERIFICATION.md for verification status.
91
+
92
+ ```markdown
93
+ ## Summary
94
+
95
+ **Phase {N}: {Name}**
96
+ **Goal:** {goal from ROADMAP.md}
97
+ **Status:** Verified ✓
98
+
99
+ {One paragraph synthesized from SUMMARY.md files — what was built}
100
+ ```
101
+
102
+ **3. Changes section:**
103
+ For each SUMMARY.md in the phase directory:
104
+ ```markdown
105
+ ## Changes
106
+
107
+ ### Plan {plan_id}: {plan_name}
108
+ {one_liner from SUMMARY.md frontmatter}
109
+
110
+ **Key files:**
111
+ {key-files.created and key-files.modified from SUMMARY.md frontmatter}
112
+ ```
113
+
114
+ **4. Requirements section:**
115
+ ```markdown
116
+ ## Requirements Addressed
117
+
118
+ {REQ-IDs from plan frontmatter, linked to REQUIREMENTS.md descriptions}
119
+ ```
120
+
121
+ **5. Testing section:**
122
+ ```markdown
123
+ ## Verification
124
+
125
+ - [x] Automated verification: {pass/fail from VERIFICATION.md}
126
+ - {human verification items from VERIFICATION.md, if any}
127
+ ```
128
+
129
+ **6. Decisions section:**
130
+ ```markdown
131
+ ## Key Decisions
132
+
133
+ {Decisions from STATE.md accumulated context relevant to this phase}
134
+ ```
135
+ </step>
136
+
137
+ <step name="create_pr">
138
+ Create the PR using the generated body:
139
+
140
+ ```bash
141
+ gh pr create \
142
+ --title "Phase ${PHASE_NUMBER}: ${PHASE_NAME}" \
143
+ --body "${PR_BODY}" \
144
+ --base main
145
+ ```
146
+
147
+ If `--draft` flag was passed: add `--draft`.
148
+
149
+ Report: "PR #{number} created: {url}"
150
+ </step>
151
+
152
+ <step name="optional_review">
153
+ Ask if user wants to trigger a code review:
154
+
155
+ ```
156
+ question:
157
+ question: "PR created. Run a code review before merge?"
158
+ options:
159
+ - label: "Skip review"
160
+ description: "PR is ready — merge when CI passes"
161
+ - label: "Self-review"
162
+ description: "I'll review the diff in the PR myself"
163
+ - label: "Request review"
164
+ description: "Request review from a teammate"
165
+ ```
166
+
167
+ **If "Request review":**
168
+ ```bash
169
+ gh pr edit ${PR_NUMBER} --add-reviewer "${REVIEWER}"
170
+ ```
171
+
172
+ **If "Self-review":**
173
+ Report the PR URL and suggest: "Review the diff at {url}/files"
174
+ </step>
175
+
176
+ <step name="track_shipping">
177
+ Update STATE.md to reflect the shipping action:
178
+
179
+ ```bash
180
+ node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state update "Last Activity" "$(date +%Y-%m-%d)"
181
+ node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state update "Status" "Phase ${PHASE_NUMBER} shipped — PR #${PR_NUMBER}"
182
+ ```
183
+
184
+ If `commit_docs` is true:
185
+ ```bash
186
+ node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs(${padded_phase}): ship phase ${PHASE_NUMBER} — PR #${PR_NUMBER}" --files .planning/STATE.md
187
+ ```
188
+ </step>
189
+
190
+ <step name="report">
191
+ ```
192
+ ───────────────────────────────────────────────────────────────
193
+
194
+ ## ✓ Phase {X}: {Name} — Shipped
195
+
196
+ PR: #{number} ({url})
197
+ Branch: {branch} → main
198
+ Commits: {count}
199
+ Verification: ✓ Passed
200
+ Requirements: {N} REQ-IDs addressed
201
+
202
+ Next steps:
203
+ - Review/approve PR
204
+ - Merge when CI passes
205
+ - /gsd-complete-milestone (if last phase in milestone)
206
+ - /gsd-progress (to see what's next)
207
+
208
+ ───────────────────────────────────────────────────────────────
209
+ ```
210
+ </step>
211
+
212
+ </process>
213
+
214
+ <offer_next>
215
+ After shipping:
216
+
217
+ - /gsd-complete-milestone — if all phases in milestone are done
218
+ - /gsd-progress — see overall project state
219
+ - /gsd-execute-phase {next} — continue to next phase
220
+ </offer_next>
221
+
222
+ <success_criteria>
223
+ - [ ] Preflight checks passed (verification, clean tree, branch, remote, gh)
224
+ - [ ] Branch pushed to remote
225
+ - [ ] PR created with rich auto-generated body
226
+ - [ ] STATE.md updated with shipping status
227
+ - [ ] User knows PR number and next steps
228
+ </success_criteria>
@@ -0,0 +1,60 @@
1
+ <objective>
2
+ Display comprehensive project statistics including phases, plans, requirements, git metrics, and timeline.
3
+ </objective>
4
+
5
+ <required_reading>
6
+ read all files referenced by the invoking prompt's execution_context before starting.
7
+ </required_reading>
8
+
9
+ <process>
10
+
11
+ <step name="gather_stats">
12
+ Gather project statistics:
13
+
14
+ ```bash
15
+ STATS=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" stats json)
16
+ if [[ "$STATS" == @file:* ]]; then STATS=$(cat "${STATS#@file:}"); fi
17
+ ```
18
+
19
+ Extract fields from JSON: `milestone_version`, `milestone_name`, `phases`, `phases_completed`, `phases_total`, `total_plans`, `total_summaries`, `percent`, `plan_percent`, `requirements_total`, `requirements_complete`, `git_commits`, `git_first_commit_date`, `last_activity`.
20
+ </step>
21
+
22
+ <step name="present_stats">
23
+ Present to the user with this format:
24
+
25
+ ```
26
+ # 📊 Project Statistics — {milestone_version} {milestone_name}
27
+
28
+ ## Progress
29
+ [████████░░] X/Y phases (Z%)
30
+
31
+ ## Plans
32
+ X/Y plans complete (Z%)
33
+
34
+ ## Phases
35
+ | Phase | Name | Plans | Completed | Status |
36
+ |-------|------|-------|-----------|--------|
37
+ | ... | ... | ... | ... | ... |
38
+
39
+ ## Requirements
40
+ ✅ X/Y requirements complete
41
+
42
+ ## Git
43
+ - **Commits:** N
44
+ - **Started:** YYYY-MM-DD
45
+ - **Last activity:** YYYY-MM-DD
46
+
47
+ ## Timeline
48
+ - **Project age:** N days
49
+ ```
50
+
51
+ If no `.planning/` directory exists, inform the user to run `/gsd-new-project` first.
52
+ </step>
53
+
54
+ </process>
55
+
56
+ <success_criteria>
57
+ - [ ] Statistics gathered from project state
58
+ - [ ] Results formatted clearly
59
+ - [ ] Displayed to user
60
+ </success_criteria>
@@ -1,3 +1,19 @@
1
+ <internal_workflow>
2
+
3
+ **This is an INTERNAL workflow — NOT a user-facing command.**
4
+
5
+ There is no `/gsd-transition` command. This workflow is invoked automatically by
6
+ `execute-phase` during auto-advance, or inline by the orchestrator after phase
7
+ verification. Users should never be told to run `/gsd-transition`.
8
+
9
+ **Valid user commands for phase progression:**
10
+ - `/gsd-discuss-phase {N}` — discuss a phase before planning
11
+ - `/gsd-plan-phase {N}` — plan a phase
12
+ - `/gsd-execute-phase {N}` — execute a phase
13
+ - `/gsd-progress` — see roadmap progress
14
+
15
+ </internal_workflow>
16
+
1
17
  <required_reading>
2
18
 
3
19
  **read these files NOW:**
@@ -10,13 +26,13 @@
10
26
 
11
27
  </required_reading>
12
28
 
13
- <purpose>
29
+ <objective>
14
30
 
15
31
  Mark current phase complete and advance to next. This is the natural point where progress tracking and PROJECT.md evolution happen.
16
32
 
17
33
  "Planning next phase" = "current phase is done"
18
34
 
19
- </purpose>
35
+ </objective>
20
36
 
21
37
  <process>
22
38
 
@@ -25,8 +41,8 @@ Mark current phase complete and advance to next. This is the natural point where
25
41
  Before transition, read project state:
26
42
 
27
43
  ```bash
28
- cat .planning/STATE.md 2>/dev/null
29
- cat .planning/PROJECT.md 2>/dev/null
44
+ cat .planning/STATE.md 2>/dev/null || true
45
+ cat .planning/PROJECT.md 2>/dev/null || true
30
46
  ```
31
47
 
32
48
  Parse current position to verify we're transitioning the right phase.
@@ -39,8 +55,8 @@ Note accumulated context that may need updating after transition.
39
55
  Check current phase has all plan summaries:
40
56
 
41
57
  ```bash
42
- ls .planning/phases/XX-current/*-PLAN.md 2>/dev/null | sort
43
- ls .planning/phases/XX-current/*-SUMMARY.md 2>/dev/null | sort
58
+ (ls .planning/phases/XX-current/*-PLAN.md 2>/dev/null || true) | sort
59
+ (ls .planning/phases/XX-current/*-SUMMARY.md 2>/dev/null || true) | sort
44
60
  ```
45
61
 
46
62
  **Verification logic:**
@@ -53,11 +69,35 @@ ls .planning/phases/XX-current/*-SUMMARY.md 2>/dev/null | sort
53
69
  <config-check>
54
70
 
55
71
  ```bash
56
- cat .planning/config.json 2>/dev/null
72
+ cat .planning/config.json 2>/dev/null || true
57
73
  ```
58
74
 
59
75
  </config-check>
60
76
 
77
+ **Check for verification debt in this phase:**
78
+
79
+ ```bash
80
+ # Count outstanding items in current phase
81
+ OUTSTANDING=""
82
+ for f in .planning/phases/XX-current/*-UAT.md .planning/phases/XX-current/*-VERIFICATION.md; do
83
+ [ -f "$f" ] || continue
84
+ grep -q "result: pending\|result: blocked\|status: partial\|status: human_needed\|status: diagnosed" "$f" && OUTSTANDING="$OUTSTANDING\n$(basename $f)"
85
+ done
86
+ ```
87
+
88
+ **If OUTSTANDING is not empty:**
89
+
90
+ Append to the completion confirmation message (regardless of mode):
91
+
92
+ ```
93
+ Outstanding verification items in this phase:
94
+ {list filenames}
95
+
96
+ These will carry forward as debt. Review: `/gsd-audit-uat`
97
+ ```
98
+
99
+ This does NOT block transition — it ensures the user sees the debt before confirming.
100
+
61
101
  **If all plans complete:**
62
102
 
63
103
  <if mode="yolo">
@@ -111,7 +151,7 @@ Wait for user decision.
111
151
  Check for lingering handoffs:
112
152
 
113
153
  ```bash
114
- ls .planning/phases/XX-current/.continue-here*.md 2>/dev/null
154
+ ls .planning/phases/XX-current/.continue-here*.md 2>/dev/null || true
115
155
  ```
116
156
 
117
157
  If found, delete them — phase is complete, handoffs are stale.
@@ -341,7 +381,7 @@ Resume file: None
341
381
 
342
382
  The `is_last_phase` field from the phase complete result tells you directly:
343
383
  - `is_last_phase: false` → More phases remain → Go to **Route A**
344
- - `is_last_phase: true` → Milestone completeGo to **Route B**
384
+ - `is_last_phase: true` → Last phase done **Check for workstream collisions first**
345
385
 
346
386
  The `next_phase` and `next_phase_name` fields give you the next phase details.
347
387
 
@@ -354,6 +394,34 @@ This returns all phases with goals, disk status, and completion info.
354
394
 
355
395
  ---
356
396
 
397
+ **Workstream collision check (when `is_last_phase: true`):**
398
+
399
+ Before routing to Route B, check whether other workstreams are still active.
400
+ This prevents one workstream from advancing or completing the milestone while
401
+ other workstreams are still working on their phases.
402
+
403
+ **Skip this check if NOT in workstream mode** (i.e., `GSD_WORKSTREAM` is not set / flat mode).
404
+ In flat mode, go directly to **Route B**.
405
+
406
+ ```bash
407
+ # Only check if we're in workstream mode
408
+ if [ -n "$GSD_WORKSTREAM" ]; then
409
+ WS_LIST=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" workstream list --raw)
410
+ fi
411
+ ```
412
+
413
+ Parse the JSON result. The output has `{ mode, workstreams: [...] }`.
414
+ Each workstream entry has: `name`, `status`, `current_phase`, `phase_count`, `completed_phases`.
415
+
416
+ Filter out the current workstream (`$GSD_WORKSTREAM`) and any workstreams with
417
+ status containing "milestone complete" or "archived" (case-insensitive).
418
+ The remaining entries are **other active workstreams**.
419
+
420
+ - **If other active workstreams exist** → Go to **Route B1**
421
+ - **If NO other active workstreams** (or flat mode) → Go to **Route B**
422
+
423
+ ---
424
+
357
425
  **Route A: More phases remain in milestone**
358
426
 
359
427
  read ROADMAP.md to get the next phase's name and goal.
@@ -361,7 +429,7 @@ read ROADMAP.md to get the next phase's name and goal.
361
429
  **Check if next phase has CONTEXT.md:**
362
430
 
363
431
  ```bash
364
- ls .planning/phases/*[X+1]*/*-CONTEXT.md 2>/dev/null
432
+ ls .planning/phases/*[X+1]*/*-CONTEXT.md 2>/dev/null || true
365
433
  ```
366
434
 
367
435
  **If next phase exists:**
@@ -378,7 +446,7 @@ Next: Phase [X+1] — [Name]
378
446
  ⚡ Auto-continuing: Plan Phase [X+1] in detail
379
447
  ```
380
448
 
381
- Exit skill and invoke command("/gsd-plan-phase [X+1] --auto")
449
+ Exit skill and invoke command("/gsd-plan-phase [X+1] --auto ${GSD_WS}")
382
450
 
383
451
  **If CONTEXT.md does NOT exist:**
384
452
 
@@ -390,7 +458,7 @@ Next: Phase [X+1] — [Name]
390
458
  ⚡ Auto-continuing: Discuss Phase [X+1] first
391
459
  ```
392
460
 
393
- Exit skill and invoke command("/gsd-discuss-phase [X+1] --auto")
461
+ Exit skill and invoke command("/gsd-discuss-phase [X+1] --auto ${GSD_WS}")
394
462
 
395
463
  </if>
396
464
 
@@ -407,15 +475,15 @@ Exit skill and invoke command("/gsd-discuss-phase [X+1] --auto")
407
475
 
408
476
  **Phase [X+1]: [Name]** — [Goal from ROADMAP.md]
409
477
 
410
- `/gsd-discuss-phase [X+1]` — gather context and clarify approach
478
+ `/gsd-discuss-phase [X+1] ${GSD_WS}` — gather context and clarify approach
411
479
 
412
480
  *`/new` first → fresh context window*
413
481
 
414
482
  ---
415
483
 
416
484
  **Also available:**
417
- - `/gsd-plan-phase [X+1]` — skip discussion, plan directly
418
- - `/gsd-research-phase [X+1]` — investigate unknowns
485
+ - `/gsd-plan-phase [X+1] ${GSD_WS}` — skip discussion, plan directly
486
+ - `/gsd-research-phase [X+1] ${GSD_WS}` — investigate unknowns
419
487
 
420
488
  ---
421
489
  ```
@@ -432,26 +500,85 @@ Exit skill and invoke command("/gsd-discuss-phase [X+1] --auto")
432
500
  **Phase [X+1]: [Name]** — [Goal from ROADMAP.md]
433
501
  *✓ Context gathered, ready to plan*
434
502
 
435
- `/gsd-plan-phase [X+1]`
503
+ `/gsd-plan-phase [X+1] ${GSD_WS}`
436
504
 
437
505
  *`/new` first → fresh context window*
438
506
 
439
507
  ---
440
508
 
441
509
  **Also available:**
442
- - `/gsd-discuss-phase [X+1]` — revisit context
443
- - `/gsd-research-phase [X+1]` — investigate unknowns
510
+ - `/gsd-discuss-phase [X+1] ${GSD_WS}` — revisit context
511
+ - `/gsd-research-phase [X+1] ${GSD_WS}` — investigate unknowns
512
+
513
+ ---
514
+ ```
515
+
516
+ </if>
444
517
 
445
518
  ---
519
+
520
+ **Route B1: Workstream done, other workstreams still active**
521
+
522
+ This route is reached when `is_last_phase: true` AND the collision check found
523
+ other active workstreams. Do NOT suggest completing the milestone or advancing
524
+ to the next milestone — other workstreams are still working.
525
+
526
+ **Clear auto-advance chain flag** — workstream boundary is the natural stopping point:
527
+
528
+ ```bash
529
+ node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-set workflow._auto_chain_active false
446
530
  ```
447
531
 
532
+ <if mode="yolo">
533
+
534
+ Override auto-advance: do NOT auto-continue to milestone completion.
535
+ Present the blocking information and stop.
536
+
448
537
  </if>
449
538
 
539
+ Present (all modes):
540
+
541
+ ```
542
+ ## ✓ Phase {X}: {Phase Name} Complete
543
+
544
+ This workstream's phases are complete. Other workstreams are still active:
545
+
546
+ | Workstream | Status | Phase | Progress |
547
+ |------------|--------|-------|----------|
548
+ | {name} | {status} | {current_phase} | {completed_phases}/{phase_count} |
549
+ | ... | ... | ... | ... |
550
+
551
+ ---
552
+
553
+ ## Next Steps
554
+
555
+ Archive this workstream:
556
+
557
+ `/gsd-workstreams complete {current_ws_name} ${GSD_WS}`
558
+
559
+ See overall milestone progress:
560
+
561
+ `/gsd-workstreams progress ${GSD_WS}`
562
+
563
+ *Milestone completion will be available once all workstreams finish.*
564
+
565
+ ---
566
+ ```
567
+
568
+ Do NOT suggest `/gsd-complete-milestone` or `/gsd-new-milestone`.
569
+ Do NOT auto-invoke any further slash commands.
570
+
571
+ **Stop here.** The user must explicitly decide what to do next.
572
+
450
573
  ---
451
574
 
452
575
  **Route B: Milestone complete (all phases done)**
453
576
 
577
+ **This route is only reached when:**
578
+ - `is_last_phase: true` AND no other active workstreams exist (or flat mode)
579
+
454
580
  **Clear auto-advance chain flag** — milestone boundary is the natural stopping point:
581
+
455
582
  ```bash
456
583
  node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-set workflow._auto_chain_active false
457
584
  ```
@@ -466,7 +593,7 @@ Phase {X} marked complete.
466
593
  ⚡ Auto-continuing: Complete milestone and archive
467
594
  ```
468
595
 
469
- Exit skill and invoke command("/gsd-complete-milestone {version}")
596
+ Exit skill and invoke command("/gsd-complete-milestone {version} ${GSD_WS}")
470
597
 
471
598
  </if>
472
599
 
@@ -483,7 +610,7 @@ Exit skill and invoke command("/gsd-complete-milestone {version}")
483
610
 
484
611
  **Complete Milestone {version}** — archive and prepare for next
485
612
 
486
- `/gsd-complete-milestone {version}`
613
+ `/gsd-complete-milestone {version} ${GSD_WS}`
487
614
 
488
615
  *`/new` first → fresh context window*
489
616