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.
- package/agents/gsd-advisor-researcher.md +112 -0
- package/agents/gsd-assumptions-analyzer.md +110 -0
- package/agents/gsd-codebase-mapper.md +1 -2
- package/agents/gsd-debugger.md +119 -2
- package/agents/gsd-executor.md +25 -4
- package/agents/gsd-integration-checker.md +1 -2
- package/agents/gsd-nyquist-auditor.md +1 -2
- package/agents/gsd-phase-researcher.md +151 -5
- package/agents/gsd-plan-checker.md +71 -5
- package/agents/gsd-planner.md +50 -4
- package/agents/gsd-project-researcher.md +29 -3
- package/agents/gsd-research-synthesizer.md +1 -2
- package/agents/gsd-roadmapper.md +30 -2
- package/agents/gsd-ui-auditor.md +445 -0
- package/agents/gsd-ui-checker.md +305 -0
- package/agents/gsd-ui-researcher.md +368 -0
- package/agents/gsd-user-profiler.md +173 -0
- package/agents/gsd-verifier.md +124 -4
- package/commands/gsd/gsd-add-backlog.md +76 -0
- package/commands/gsd/gsd-audit-uat.md +24 -0
- package/commands/gsd/gsd-autonomous.md +41 -0
- package/commands/gsd/gsd-debug.md +5 -0
- package/commands/gsd/gsd-discuss-phase.md +10 -36
- package/commands/gsd/gsd-do.md +30 -0
- package/commands/gsd/gsd-execute-phase.md +20 -2
- package/commands/gsd/gsd-fast.md +30 -0
- package/commands/gsd/gsd-forensics.md +56 -0
- package/commands/gsd/gsd-list-workspaces.md +19 -0
- package/commands/gsd/gsd-manager.md +39 -0
- package/commands/gsd/gsd-milestone-summary.md +51 -0
- package/commands/gsd/gsd-new-workspace.md +44 -0
- package/commands/gsd/gsd-next.md +24 -0
- package/commands/gsd/gsd-note.md +34 -0
- package/commands/gsd/gsd-plan-phase.md +3 -1
- package/commands/gsd/gsd-plant-seed.md +28 -0
- package/commands/gsd/gsd-pr-branch.md +25 -0
- package/commands/gsd/gsd-profile-user.md +46 -0
- package/commands/gsd/gsd-quick.md +4 -2
- package/commands/gsd/gsd-reapply-patches.md +10 -6
- package/commands/gsd/gsd-remove-workspace.md +26 -0
- package/commands/gsd/gsd-research-phase.md +5 -0
- package/commands/gsd/gsd-resume-work.md +1 -1
- package/commands/gsd/gsd-review-backlog.md +61 -0
- package/commands/gsd/gsd-review.md +37 -0
- package/commands/gsd/gsd-session-report.md +19 -0
- package/commands/gsd/gsd-set-profile.md +24 -23
- package/commands/gsd/gsd-ship.md +23 -0
- package/commands/gsd/gsd-stats.md +18 -0
- package/commands/gsd/gsd-thread.md +127 -0
- package/commands/gsd/gsd-ui-phase.md +34 -0
- package/commands/gsd/gsd-ui-review.md +32 -0
- package/commands/gsd/gsd-workstreams.md +66 -0
- package/get-shit-done/bin/gsd-tools.cjs +410 -84
- package/get-shit-done/bin/lib/commands.cjs +429 -18
- package/get-shit-done/bin/lib/config.cjs +318 -45
- package/get-shit-done/bin/lib/core.cjs +822 -84
- package/get-shit-done/bin/lib/frontmatter.cjs +78 -41
- package/get-shit-done/bin/lib/init.cjs +836 -104
- package/get-shit-done/bin/lib/milestone.cjs +44 -33
- package/get-shit-done/bin/lib/model-profiles.cjs +68 -0
- package/get-shit-done/bin/lib/phase.cjs +293 -306
- package/get-shit-done/bin/lib/profile-output.cjs +952 -0
- package/get-shit-done/bin/lib/profile-pipeline.cjs +539 -0
- package/get-shit-done/bin/lib/roadmap.cjs +55 -24
- package/get-shit-done/bin/lib/security.cjs +382 -0
- package/get-shit-done/bin/lib/state.cjs +363 -53
- package/get-shit-done/bin/lib/template.cjs +2 -2
- package/get-shit-done/bin/lib/uat.cjs +282 -0
- package/get-shit-done/bin/lib/verify.cjs +104 -36
- package/get-shit-done/bin/lib/workstream.cjs +491 -0
- package/get-shit-done/references/checkpoints.md +12 -10
- package/get-shit-done/references/decimal-phase-calculation.md +2 -3
- package/get-shit-done/references/git-integration.md +47 -0
- package/get-shit-done/references/model-profile-resolution.md +2 -0
- package/get-shit-done/references/model-profiles.md +62 -16
- package/get-shit-done/references/phase-argument-parsing.md +2 -2
- package/get-shit-done/references/planning-config.md +3 -1
- package/get-shit-done/references/user-profiling.md +681 -0
- package/get-shit-done/references/workstream-flag.md +58 -0
- package/get-shit-done/templates/UAT.md +21 -3
- package/get-shit-done/templates/UI-SPEC.md +100 -0
- package/get-shit-done/templates/claude-md.md +122 -0
- package/get-shit-done/templates/config.json +10 -3
- package/get-shit-done/templates/context.md +61 -6
- package/get-shit-done/templates/dev-preferences.md +21 -0
- package/get-shit-done/templates/discussion-log.md +63 -0
- package/get-shit-done/templates/phase-prompt.md +46 -5
- package/get-shit-done/templates/project.md +2 -0
- package/get-shit-done/templates/state.md +2 -2
- package/get-shit-done/templates/user-profile.md +146 -0
- package/get-shit-done/workflows/add-phase.md +2 -2
- package/get-shit-done/workflows/add-tests.md +4 -4
- package/get-shit-done/workflows/add-todo.md +3 -3
- package/get-shit-done/workflows/audit-milestone.md +13 -5
- package/get-shit-done/workflows/audit-uat.md +109 -0
- package/get-shit-done/workflows/autonomous.md +891 -0
- package/get-shit-done/workflows/check-todos.md +2 -2
- package/get-shit-done/workflows/cleanup.md +4 -4
- package/get-shit-done/workflows/complete-milestone.md +9 -6
- package/get-shit-done/workflows/diagnose-issues.md +15 -3
- package/get-shit-done/workflows/discovery-phase.md +2 -2
- package/get-shit-done/workflows/discuss-phase-assumptions.md +653 -0
- package/get-shit-done/workflows/discuss-phase.md +411 -38
- package/get-shit-done/workflows/do.md +104 -0
- package/get-shit-done/workflows/execute-phase.md +405 -18
- package/get-shit-done/workflows/execute-plan.md +77 -12
- package/get-shit-done/workflows/fast.md +105 -0
- package/get-shit-done/workflows/forensics.md +265 -0
- package/get-shit-done/workflows/health.md +28 -6
- package/get-shit-done/workflows/help.md +124 -7
- package/get-shit-done/workflows/insert-phase.md +2 -2
- package/get-shit-done/workflows/list-phase-assumptions.md +2 -2
- package/get-shit-done/workflows/list-workspaces.md +56 -0
- package/get-shit-done/workflows/manager.md +362 -0
- package/get-shit-done/workflows/map-codebase.md +74 -13
- package/get-shit-done/workflows/milestone-summary.md +223 -0
- package/get-shit-done/workflows/new-milestone.md +120 -18
- package/get-shit-done/workflows/new-project.md +178 -39
- package/get-shit-done/workflows/new-workspace.md +237 -0
- package/get-shit-done/workflows/next.md +97 -0
- package/get-shit-done/workflows/node-repair.md +92 -0
- package/get-shit-done/workflows/note.md +156 -0
- package/get-shit-done/workflows/pause-work.md +62 -8
- package/get-shit-done/workflows/plan-milestone-gaps.md +4 -5
- package/get-shit-done/workflows/plan-phase.md +332 -33
- package/get-shit-done/workflows/plant-seed.md +169 -0
- package/get-shit-done/workflows/pr-branch.md +129 -0
- package/get-shit-done/workflows/profile-user.md +450 -0
- package/get-shit-done/workflows/progress.md +145 -20
- package/get-shit-done/workflows/quick.md +205 -49
- package/get-shit-done/workflows/remove-phase.md +2 -2
- package/get-shit-done/workflows/remove-workspace.md +90 -0
- package/get-shit-done/workflows/research-phase.md +11 -3
- package/get-shit-done/workflows/resume-project.md +35 -16
- package/get-shit-done/workflows/review.md +228 -0
- package/get-shit-done/workflows/session-report.md +146 -0
- package/get-shit-done/workflows/set-profile.md +2 -2
- package/get-shit-done/workflows/settings.md +80 -11
- package/get-shit-done/workflows/ship.md +228 -0
- package/get-shit-done/workflows/stats.md +60 -0
- package/get-shit-done/workflows/transition.md +147 -20
- package/get-shit-done/workflows/ui-phase.md +302 -0
- package/get-shit-done/workflows/ui-review.md +165 -0
- package/get-shit-done/workflows/update.md +108 -25
- package/get-shit-done/workflows/validate-phase.md +15 -8
- package/get-shit-done/workflows/verify-phase.md +16 -5
- package/get-shit-done/workflows/verify-work.md +72 -18
- package/package.json +1 -1
- package/skills/gsd-audit-milestone/SKILL.md +29 -0
- package/skills/gsd-cleanup/SKILL.md +19 -0
- package/skills/gsd-complete-milestone/SKILL.md +131 -0
- package/skills/gsd-discuss-phase/SKILL.md +54 -0
- package/skills/gsd-execute-phase/SKILL.md +49 -0
- package/skills/gsd-plan-phase/SKILL.md +37 -0
- package/skills/gsd-ui-phase/SKILL.md +24 -0
- package/skills/gsd-ui-review/SKILL.md +24 -0
- package/skills/gsd-verify-work/SKILL.md +30 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<
|
|
1
|
+
<objective>
|
|
2
2
|
Create all phases necessary to close gaps identified by `/gsd-audit-milestone`. Reads MILESTONE-AUDIT.md, groups gaps into logical phases, creates phase entries in ROADMAP.md, and offers to plan each phase. One command creates all fix phases — no manual `/gsd-add-phase` per gap.
|
|
3
|
-
</
|
|
3
|
+
</objective>
|
|
4
4
|
|
|
5
5
|
<required_reading>
|
|
6
6
|
read all files referenced by the invoking prompt's execution_context before starting.
|
|
@@ -12,7 +12,7 @@ read all files referenced by the invoking prompt's execution_context before star
|
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
# Find the most recent audit file
|
|
15
|
-
ls -t .planning/v*-MILESTONE-AUDIT.md 2>/dev/null | head -1
|
|
15
|
+
(ls -t .planning/v*-MILESTONE-AUDIT.md 2>/dev/null || true) | head -1
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
Parse YAML frontmatter to extract structured gaps:
|
|
@@ -65,8 +65,7 @@ Gap: Flow "View dashboard" broken at data fetch
|
|
|
65
65
|
Find highest existing phase:
|
|
66
66
|
```bash
|
|
67
67
|
# Get sorted phase list, extract last one
|
|
68
|
-
|
|
69
|
-
HIGHEST=$(printf '%s\n' "$PHASES" | jq -r '.directories[-1]')
|
|
68
|
+
HIGHEST=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" phases list --pick directories[-1])
|
|
70
69
|
```
|
|
71
70
|
|
|
72
71
|
New phases continue from there:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<
|
|
1
|
+
<objective>
|
|
2
2
|
Create executable phase prompts (PLAN.md files) for a roadmap phase with integrated research and verification. Default flow: Research (if needed) -> Plan -> Verify -> Done. Orchestrates gsd-phase-researcher, gsd-planner, and gsd-plan-checker agents with a revision loop (max 3 iterations).
|
|
3
|
-
</
|
|
3
|
+
</objective>
|
|
4
4
|
|
|
5
5
|
<required_reading>
|
|
6
6
|
read all files referenced by the invoking prompt's execution_context before starting.
|
|
@@ -8,6 +8,13 @@ read all files referenced by the invoking prompt's execution_context before star
|
|
|
8
8
|
@$HOME/.config/opencode/get-shit-done/references/ui-brand.md
|
|
9
9
|
</required_reading>
|
|
10
10
|
|
|
11
|
+
<available_agent_types>
|
|
12
|
+
Valid GSD subagent types (use exact names — do not fall back to 'general'):
|
|
13
|
+
- gsd-phase-researcher — Researches technical approaches for a phase
|
|
14
|
+
- gsd-planner — Creates detailed plans from phase scope
|
|
15
|
+
- gsd-plan-checker — Reviews plan quality before execution
|
|
16
|
+
</available_agent_types>
|
|
17
|
+
|
|
11
18
|
<process>
|
|
12
19
|
|
|
13
20
|
## 1. Initialize
|
|
@@ -17,17 +24,22 @@ Load all context in one call (paths only to minimize orchestrator context):
|
|
|
17
24
|
```bash
|
|
18
25
|
INIT=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" init plan-phase "$PHASE")
|
|
19
26
|
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
27
|
+
AGENT_SKILLS_RESEARCHER=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" agent-skills gsd-researcher 2>/dev/null)
|
|
28
|
+
AGENT_SKILLS_PLANNER=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" agent-skills gsd-planner 2>/dev/null)
|
|
29
|
+
AGENT_SKILLS_CHECKER=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" agent-skills gsd-checker 2>/dev/null)
|
|
20
30
|
```
|
|
21
31
|
|
|
22
|
-
Parse JSON for: `researcher_model`, `planner_model`, `checker_model`, `research_enabled`, `plan_checker_enabled`, `nyquist_validation_enabled`, `commit_docs`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_research`, `has_context`, `has_plans`, `plan_count`, `planning_exists`, `roadmap_exists`, `phase_req_ids`.
|
|
32
|
+
Parse JSON for: `researcher_model`, `planner_model`, `checker_model`, `research_enabled`, `plan_checker_enabled`, `nyquist_validation_enabled`, `commit_docs`, `text_mode`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `has_research`, `has_context`, `has_reviews`, `has_plans`, `plan_count`, `planning_exists`, `roadmap_exists`, `phase_req_ids`.
|
|
23
33
|
|
|
24
|
-
**File paths (for <files_to_read> blocks):** `state_path`, `roadmap_path`, `requirements_path`, `context_path`, `research_path`, `verification_path`, `uat_path`. These are null if files don't exist.
|
|
34
|
+
**File paths (for <files_to_read> blocks):** `state_path`, `roadmap_path`, `requirements_path`, `context_path`, `research_path`, `verification_path`, `uat_path`, `reviews_path`. These are null if files don't exist.
|
|
25
35
|
|
|
26
36
|
**If `planning_exists` is false:** Error — run `/gsd-new-project` first.
|
|
27
37
|
|
|
28
38
|
## 2. Parse and Normalize Arguments
|
|
29
39
|
|
|
30
|
-
Extract from $ARGUMENTS: phase number (integer or decimal like `2.1`), flags (`--research`, `--skip-research`, `--gaps`, `--skip-verify`, `--prd <filepath
|
|
40
|
+
Extract from $ARGUMENTS: phase number (integer or decimal like `2.1`), flags (`--research`, `--skip-research`, `--gaps`, `--skip-verify`, `--prd <filepath>`, `--reviews`, `--text`).
|
|
41
|
+
|
|
42
|
+
Set `TEXT_MODE=true` if `--text` is present in $ARGUMENTS OR `text_mode` from init JSON is `true`. When `TEXT_MODE` is active, replace every `question` call with a plain-text numbered list and ask the user to type their choice number. This is required for OpenCode remote sessions (`/rc` mode) where TUI menus don't work through the OpenCode App.
|
|
31
43
|
|
|
32
44
|
Extract `--prd <filepath>` from $ARGUMENTS. If present, set PRD_FILE to the filepath.
|
|
33
45
|
|
|
@@ -40,6 +52,24 @@ mkdir -p ".planning/phases/${padded_phase}-${phase_slug}"
|
|
|
40
52
|
|
|
41
53
|
**Existing artifacts from init:** `has_research`, `has_plans`, `plan_count`.
|
|
42
54
|
|
|
55
|
+
## 2.5. Validate `--reviews` Prerequisite
|
|
56
|
+
|
|
57
|
+
**Skip if:** No `--reviews` flag.
|
|
58
|
+
|
|
59
|
+
**If `--reviews` AND `--gaps`:** Error — cannot combine `--reviews` with `--gaps`. These are conflicting modes.
|
|
60
|
+
|
|
61
|
+
**If `--reviews` AND `has_reviews` is false (no REVIEWS.md in phase dir):**
|
|
62
|
+
|
|
63
|
+
Error:
|
|
64
|
+
```
|
|
65
|
+
No REVIEWS.md found for Phase {N}. Run reviews first:
|
|
66
|
+
|
|
67
|
+
/gsd-review --phase {N}
|
|
68
|
+
|
|
69
|
+
Then re-run /gsd-plan-phase {N} --reviews
|
|
70
|
+
```
|
|
71
|
+
Exit workflow.
|
|
72
|
+
|
|
43
73
|
## 3. Validate Phase
|
|
44
74
|
|
|
45
75
|
```bash
|
|
@@ -77,6 +107,7 @@ Generating CONTEXT.md from requirements...
|
|
|
77
107
|
- Extract all requirements, user stories, acceptance criteria, and constraints from the PRD
|
|
78
108
|
- Map each to a locked decision (everything in the PRD is treated as a locked decision)
|
|
79
109
|
- Identify any areas the PRD doesn't cover and mark as "OpenCode's Discretion"
|
|
110
|
+
- **Extract canonical refs** from ROADMAP.md for this phase, plus any specs/ADRs referenced in the PRD — expand to full file paths (MANDATORY)
|
|
80
111
|
- Create CONTEXT.md in the phase directory
|
|
81
112
|
|
|
82
113
|
4. write CONTEXT.md:
|
|
@@ -106,6 +137,21 @@ Generating CONTEXT.md from requirements...
|
|
|
106
137
|
|
|
107
138
|
</decisions>
|
|
108
139
|
|
|
140
|
+
<canonical_refs>
|
|
141
|
+
## Canonical References
|
|
142
|
+
|
|
143
|
+
**Downstream agents MUST read these before planning or implementing.**
|
|
144
|
+
|
|
145
|
+
[MANDATORY. Extract from ROADMAP.md and any docs referenced in the PRD.
|
|
146
|
+
Use full relative paths. Group by topic area.]
|
|
147
|
+
|
|
148
|
+
### [Topic area]
|
|
149
|
+
- `path/to/spec-or-adr.md` — [What it decides/defines]
|
|
150
|
+
|
|
151
|
+
[If no external specs: "No external specs — requirements fully captured in decisions above"]
|
|
152
|
+
|
|
153
|
+
</canonical_refs>
|
|
154
|
+
|
|
109
155
|
<specifics>
|
|
110
156
|
## Specific Ideas
|
|
111
157
|
|
|
@@ -146,24 +192,86 @@ If `context_path` is not null, display: `Using phase context from: ${context_pat
|
|
|
146
192
|
|
|
147
193
|
**If `context_path` is null (no CONTEXT.md exists):**
|
|
148
194
|
|
|
149
|
-
|
|
195
|
+
read discuss mode for context gate label:
|
|
196
|
+
```bash
|
|
197
|
+
DISCUSS_MODE=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-get workflow.discuss_mode 2>/dev/null || echo "discuss")
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
If `TEXT_MODE` is true, present as a plain-text numbered list:
|
|
201
|
+
```
|
|
202
|
+
No CONTEXT.md found for Phase {X}. Plans will use research and requirements only — your design preferences won't be included.
|
|
203
|
+
|
|
204
|
+
1. Continue without context — Plan using research + requirements only
|
|
205
|
+
[If DISCUSS_MODE is "assumptions":]
|
|
206
|
+
2. Gather context (assumptions mode) — Analyze codebase and surface assumptions before planning
|
|
207
|
+
[If DISCUSS_MODE is "discuss" or unset:]
|
|
208
|
+
2. Run discuss-phase first — Capture design decisions before planning
|
|
209
|
+
|
|
210
|
+
Enter number:
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
Otherwise use question:
|
|
150
214
|
- header: "No context"
|
|
151
215
|
- question: "No CONTEXT.md found for Phase {X}. Plans will use research and requirements only — your design preferences won't be included. Continue or capture context first?"
|
|
152
216
|
- options:
|
|
153
217
|
- "Continue without context" — Plan using research + requirements only
|
|
218
|
+
If `DISCUSS_MODE` is `"assumptions"`:
|
|
219
|
+
- "Gather context (assumptions mode)" — Analyze codebase and surface assumptions before planning
|
|
220
|
+
If `DISCUSS_MODE` is `"discuss"` (or unset):
|
|
154
221
|
- "Run discuss-phase first" — Capture design decisions before planning
|
|
155
222
|
|
|
156
223
|
If "Continue without context": Proceed to step 5.
|
|
157
|
-
If "Run discuss-phase first":
|
|
224
|
+
If "Run discuss-phase first":
|
|
225
|
+
**IMPORTANT:** Do NOT invoke discuss-phase as a nested skill/task call — question
|
|
226
|
+
does not work correctly in nested subcontexts (#1009). Instead, display the command
|
|
227
|
+
and exit so the user runs it as a top-level command:
|
|
228
|
+
```
|
|
229
|
+
Run this command first, then re-run /gsd-plan-phase {X} ${GSD_WS}:
|
|
230
|
+
|
|
231
|
+
/gsd-discuss-phase {X} ${GSD_WS}
|
|
232
|
+
```
|
|
233
|
+
**Exit the plan-phase workflow. Do not continue.**
|
|
158
234
|
|
|
159
235
|
## 5. Handle Research
|
|
160
236
|
|
|
161
|
-
**Skip if:** `--gaps` flag
|
|
237
|
+
**Skip if:** `--gaps` flag or `--skip-research` flag or `--reviews` flag.
|
|
162
238
|
|
|
163
239
|
**If `has_research` is true (from init) AND no `--research` flag:** Use existing, skip to step 6.
|
|
164
240
|
|
|
165
241
|
**If RESEARCH.md missing OR `--research` flag:**
|
|
166
242
|
|
|
243
|
+
**If no explicit flag (`--research` or `--skip-research`) and not `--auto`:**
|
|
244
|
+
Ask the user whether to research, with a contextual recommendation based on the phase:
|
|
245
|
+
|
|
246
|
+
If `TEXT_MODE` is true, present as a plain-text numbered list:
|
|
247
|
+
```
|
|
248
|
+
Research before planning Phase {X}: {phase_name}?
|
|
249
|
+
|
|
250
|
+
1. Research first (Recommended) — Investigate domain, patterns, and dependencies before planning. Best for new features, unfamiliar integrations, or architectural changes.
|
|
251
|
+
2. Skip research — Plan directly from context and requirements. Best for bug fixes, simple refactors, or well-understood tasks.
|
|
252
|
+
|
|
253
|
+
Enter number:
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Otherwise use question:
|
|
257
|
+
```
|
|
258
|
+
question([
|
|
259
|
+
{
|
|
260
|
+
question: "Research before planning Phase {X}: {phase_name}?",
|
|
261
|
+
header: "Research",
|
|
262
|
+
multiSelect: false,
|
|
263
|
+
options: [
|
|
264
|
+
{ label: "Research first (Recommended)", description: "Investigate domain, patterns, and dependencies before planning. Best for new features, unfamiliar integrations, or architectural changes." },
|
|
265
|
+
{ label: "Skip research", description: "Plan directly from context and requirements. Best for bug fixes, simple refactors, or well-understood tasks." }
|
|
266
|
+
]
|
|
267
|
+
}
|
|
268
|
+
])
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
If user selects "Skip research": skip to step 6.
|
|
272
|
+
|
|
273
|
+
**If `--auto` and `research_enabled` is false:** Skip research silently (preserves automated behavior).
|
|
274
|
+
|
|
167
275
|
Display banner:
|
|
168
276
|
```
|
|
169
277
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
@@ -176,7 +284,7 @@ Display banner:
|
|
|
176
284
|
### Spawn gsd-phase-researcher
|
|
177
285
|
|
|
178
286
|
```bash
|
|
179
|
-
PHASE_DESC=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}"
|
|
287
|
+
PHASE_DESC=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}" --pick section)
|
|
180
288
|
```
|
|
181
289
|
|
|
182
290
|
Research prompt:
|
|
@@ -193,6 +301,8 @@ Answer: "What do I need to know to PLAN this phase well?"
|
|
|
193
301
|
- {state_path} (Project decisions and history)
|
|
194
302
|
</files_to_read>
|
|
195
303
|
|
|
304
|
+
${AGENT_SKILLS_RESEARCHER}
|
|
305
|
+
|
|
196
306
|
<additional_context>
|
|
197
307
|
**Phase description:** {phase_description}
|
|
198
308
|
**Phase requirement IDs (MUST address):** {phase_req_ids}
|
|
@@ -222,10 +332,19 @@ task(
|
|
|
222
332
|
|
|
223
333
|
## 5.5. Create Validation Strategy
|
|
224
334
|
|
|
225
|
-
|
|
335
|
+
Skip if `nyquist_validation_enabled` is false OR `research_enabled` is false.
|
|
336
|
+
|
|
337
|
+
If `research_enabled` is false and `nyquist_validation_enabled` is true: warn "Nyquist validation enabled but research disabled — VALIDATION.md cannot be created without RESEARCH.md. Plans will lack validation requirements (Dimension 8)." Continue to step 6.
|
|
338
|
+
|
|
339
|
+
**But Nyquist is not applicable for this run** when all of the following are true:
|
|
340
|
+
- `research_enabled` is false
|
|
341
|
+
- `has_research` is false
|
|
342
|
+
- no `--research` flag was provided
|
|
343
|
+
|
|
344
|
+
In that case: **skip validation-strategy creation entirely**. Do **not** expect `RESEARCH.md` or `VALIDATION.md` for this run, and continue to Step 6.
|
|
226
345
|
|
|
227
346
|
```bash
|
|
228
|
-
grep -l "## Validation Architecture" "${PHASE_DIR}"/*-RESEARCH.md 2>/dev/null
|
|
347
|
+
grep -l "## Validation Architecture" "${PHASE_DIR}"/*-RESEARCH.md 2>/dev/null || true
|
|
229
348
|
```
|
|
230
349
|
|
|
231
350
|
**If found:**
|
|
@@ -237,43 +356,106 @@ grep -l "## Validation Architecture" "${PHASE_DIR}"/*-RESEARCH.md 2>/dev/null
|
|
|
237
356
|
test -f "${PHASE_DIR}/${PADDED_PHASE}-VALIDATION.md" && echo "VALIDATION_CREATED=true" || echo "VALIDATION_CREATED=false"
|
|
238
357
|
```
|
|
239
358
|
5. If `VALIDATION_CREATED=false`: STOP — do not proceed to Step 6
|
|
240
|
-
6. If `commit_docs`: `commit
|
|
359
|
+
6. If `commit_docs`: `commit "docs(phase-${PHASE}): add validation strategy"`
|
|
241
360
|
|
|
242
361
|
**If not found:** Warn and continue — plans may fail Dimension 8.
|
|
243
362
|
|
|
363
|
+
## 5.6. UI Design Contract Gate
|
|
364
|
+
|
|
365
|
+
> Skip if `workflow.ui_phase` is explicitly `false` AND `workflow.ui_safety_gate` is explicitly `false` in `.planning/config.json`. If keys are absent, treat as enabled.
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
UI_PHASE_CFG=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-get workflow.ui_phase 2>/dev/null || echo "true")
|
|
369
|
+
UI_GATE_CFG=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-get workflow.ui_safety_gate 2>/dev/null || echo "true")
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
**If both are `false`:** Skip to step 6.
|
|
373
|
+
|
|
374
|
+
Check if phase has frontend indicators:
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
PHASE_SECTION=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" roadmap get-phase "${PHASE}" 2>/dev/null)
|
|
378
|
+
echo "$PHASE_SECTION" | grep -iE "UI|interface|frontend|component|layout|page|screen|view|form|dashboard|widget" > /dev/null 2>&1
|
|
379
|
+
HAS_UI=$?
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
**If `HAS_UI` is 0 (frontend indicators found):**
|
|
383
|
+
|
|
384
|
+
Check for existing UI-SPEC:
|
|
385
|
+
```bash
|
|
386
|
+
UI_SPEC_FILE=$(ls "${PHASE_DIR}"/*-UI-SPEC.md 2>/dev/null | head -1)
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
**If UI-SPEC.md found:** Set `UI_SPEC_PATH=$UI_SPEC_FILE`. Display: `Using UI design contract: ${UI_SPEC_PATH}`
|
|
390
|
+
|
|
391
|
+
**If UI-SPEC.md missing AND `UI_GATE_CFG` is `true`:**
|
|
392
|
+
|
|
393
|
+
If `TEXT_MODE` is true, present as a plain-text numbered list:
|
|
394
|
+
```
|
|
395
|
+
Phase {N} has frontend indicators but no UI-SPEC.md. Generate a design contract before planning?
|
|
396
|
+
|
|
397
|
+
1. Generate UI-SPEC first — Run /gsd-ui-phase {N} then re-run /gsd-plan-phase {N}
|
|
398
|
+
2. Continue without UI-SPEC
|
|
399
|
+
3. Not a frontend phase
|
|
400
|
+
|
|
401
|
+
Enter number:
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
Otherwise use question:
|
|
405
|
+
- header: "UI Design Contract"
|
|
406
|
+
- question: "Phase {N} has frontend indicators but no UI-SPEC.md. Generate a design contract before planning?"
|
|
407
|
+
- options:
|
|
408
|
+
- "Generate UI-SPEC first" → Display: "Run `/gsd-ui-phase {N} ${GSD_WS}` then re-run `/gsd-plan-phase {N} ${GSD_WS}`". Exit workflow.
|
|
409
|
+
- "Continue without UI-SPEC" → Continue to step 6.
|
|
410
|
+
- "Not a frontend phase" → Continue to step 6.
|
|
411
|
+
|
|
412
|
+
**If `HAS_UI` is 1 (no frontend indicators):** Skip silently to step 6.
|
|
413
|
+
|
|
244
414
|
## 6. Check Existing Plans
|
|
245
415
|
|
|
246
416
|
```bash
|
|
247
|
-
ls "${PHASE_DIR}"/*-PLAN.md 2>/dev/null
|
|
417
|
+
ls "${PHASE_DIR}"/*-PLAN.md 2>/dev/null || true
|
|
248
418
|
```
|
|
249
419
|
|
|
250
|
-
**If exists:**
|
|
420
|
+
**If exists AND `--reviews` flag:** Skip prompt — go straight to replanning (the purpose of `--reviews` is to replan with review feedback).
|
|
421
|
+
|
|
422
|
+
**If exists AND no `--reviews` flag:** Offer: 1) Add more plans, 2) View existing, 3) Replan from scratch.
|
|
251
423
|
|
|
252
424
|
## 7. Use Context Paths from INIT
|
|
253
425
|
|
|
254
426
|
Extract from INIT JSON:
|
|
255
427
|
|
|
256
428
|
```bash
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
429
|
+
_gsd_field() { node -e "const o=JSON.parse(process.argv[1]); const v=o[process.argv[2]]; process.stdout.write(v==null?'':String(v))" "$1" "$2"; }
|
|
430
|
+
STATE_PATH=$(_gsd_field "$INIT" state_path)
|
|
431
|
+
ROADMAP_PATH=$(_gsd_field "$INIT" roadmap_path)
|
|
432
|
+
REQUIREMENTS_PATH=$(_gsd_field "$INIT" requirements_path)
|
|
433
|
+
RESEARCH_PATH=$(_gsd_field "$INIT" research_path)
|
|
434
|
+
VERIFICATION_PATH=$(_gsd_field "$INIT" verification_path)
|
|
435
|
+
UAT_PATH=$(_gsd_field "$INIT" uat_path)
|
|
436
|
+
CONTEXT_PATH=$(_gsd_field "$INIT" context_path)
|
|
437
|
+
REVIEWS_PATH=$(_gsd_field "$INIT" reviews_path)
|
|
264
438
|
```
|
|
265
439
|
|
|
266
440
|
## 7.5. Verify Nyquist Artifacts
|
|
267
441
|
|
|
268
|
-
Skip if `nyquist_validation_enabled` is false.
|
|
442
|
+
Skip if `nyquist_validation_enabled` is false OR `research_enabled` is false.
|
|
443
|
+
|
|
444
|
+
Also skip if all of the following are true:
|
|
445
|
+
- `research_enabled` is false
|
|
446
|
+
- `has_research` is false
|
|
447
|
+
- no `--research` flag was provided
|
|
448
|
+
|
|
449
|
+
In that no-research path, Nyquist artifacts are **not required** for this run.
|
|
269
450
|
|
|
270
451
|
```bash
|
|
271
452
|
VALIDATION_EXISTS=$(ls "${PHASE_DIR}"/*-VALIDATION.md 2>/dev/null | head -1)
|
|
272
453
|
```
|
|
273
454
|
|
|
274
|
-
If missing and Nyquist enabled — ask user:
|
|
275
|
-
1. Re-run: `/gsd-plan-phase {PHASE} --research`
|
|
276
|
-
2. Disable Nyquist
|
|
455
|
+
If missing and Nyquist is still enabled/applicable — ask user:
|
|
456
|
+
1. Re-run: `/gsd-plan-phase {PHASE} --research ${GSD_WS}`
|
|
457
|
+
2. Disable Nyquist with the exact command:
|
|
458
|
+
`node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-set workflow.nyquist_validation false`
|
|
277
459
|
3. Continue anyway (plans fail Dimension 8)
|
|
278
460
|
|
|
279
461
|
Proceed to Step 8 only if user selects 2 or 3.
|
|
@@ -294,7 +476,7 @@ Planner prompt:
|
|
|
294
476
|
```markdown
|
|
295
477
|
<planning_context>
|
|
296
478
|
**Phase:** {phase_number}
|
|
297
|
-
**Mode:** {standard | gap_closure}
|
|
479
|
+
**Mode:** {standard | gap_closure | reviews}
|
|
298
480
|
|
|
299
481
|
<files_to_read>
|
|
300
482
|
- {state_path} (Project State)
|
|
@@ -304,8 +486,12 @@ Planner prompt:
|
|
|
304
486
|
- {research_path} (Technical Research)
|
|
305
487
|
- {verification_path} (Verification Gaps - if --gaps)
|
|
306
488
|
- {uat_path} (UAT Gaps - if --gaps)
|
|
489
|
+
- {reviews_path} (Cross-AI Review Feedback - if --reviews)
|
|
490
|
+
- {UI_SPEC_PATH} (UI Design Contract — visual/interaction specs, if exists)
|
|
307
491
|
</files_to_read>
|
|
308
492
|
|
|
493
|
+
${AGENT_SKILLS_PLANNER}
|
|
494
|
+
|
|
309
495
|
**Phase requirement IDs (every ID MUST appear in a plan's `requirements` field):** {phase_req_ids}
|
|
310
496
|
|
|
311
497
|
**Project instructions:** read ./AGENTS.md if exists — follow project-specific guidelines
|
|
@@ -315,15 +501,47 @@ Planner prompt:
|
|
|
315
501
|
<downstream_consumer>
|
|
316
502
|
Output consumed by /gsd-execute-phase. Plans need:
|
|
317
503
|
- Frontmatter (wave, depends_on, files_modified, autonomous)
|
|
318
|
-
- Tasks in XML format
|
|
504
|
+
- Tasks in XML format with read_first and acceptance_criteria fields (MANDATORY on every task)
|
|
319
505
|
- Verification criteria
|
|
320
506
|
- must_haves for goal-backward verification
|
|
321
507
|
</downstream_consumer>
|
|
322
508
|
|
|
509
|
+
<deep_work_rules>
|
|
510
|
+
## Anti-Shallow Execution Rules (MANDATORY)
|
|
511
|
+
|
|
512
|
+
Every task MUST include these fields — they are NOT optional:
|
|
513
|
+
|
|
514
|
+
1. **`<read_first>`** — Files the executor MUST read before touching anything. Always include:
|
|
515
|
+
- The file being modified (so executor sees current state, not assumptions)
|
|
516
|
+
- Any "source of truth" file referenced in CONTEXT.md (reference implementations, existing patterns, config files, schemas)
|
|
517
|
+
- Any file whose patterns, signatures, types, or conventions must be replicated or respected
|
|
518
|
+
|
|
519
|
+
2. **`<acceptance_criteria>`** — Verifiable conditions that prove the task was done correctly. Rules:
|
|
520
|
+
- Every criterion must be checkable with grep, file read, test command, or CLI output
|
|
521
|
+
- NEVER use subjective language ("looks correct", "properly configured", "consistent with")
|
|
522
|
+
- ALWAYS include exact strings, patterns, values, or command outputs that must be present
|
|
523
|
+
- Examples:
|
|
524
|
+
- Code: `auth.py contains def verify_token(` / `test_auth.py exits 0`
|
|
525
|
+
- Config: `.env.example contains DATABASE_URL=` / `Dockerfile contains HEALTHCHECK`
|
|
526
|
+
- Docs: `README.md contains '## Installation'` / `API.md lists all endpoints`
|
|
527
|
+
- Infra: `deploy.yml has rollback step` / `docker-compose.yml has healthcheck for db`
|
|
528
|
+
|
|
529
|
+
3. **`<action>`** — Must include CONCRETE values, not references. Rules:
|
|
530
|
+
- NEVER say "align X with Y", "match X to Y", "update to be consistent" without specifying the exact target state
|
|
531
|
+
- ALWAYS include the actual values: config keys, function signatures, SQL statements, class names, import paths, env vars, etc.
|
|
532
|
+
- If CONTEXT.md has a comparison table or expected values, copy them into the action verbatim
|
|
533
|
+
- The executor should be able to complete the task from the action text alone, without needing to read CONTEXT.md or reference files (read_first is for verification, not discovery)
|
|
534
|
+
|
|
535
|
+
**Why this matters:** Executor agents work from the plan text. Vague instructions like "update the config to match production" produce shallow one-line changes. Concrete instructions like "add DATABASE_URL=postgresql://... , set POOL_SIZE=20, add REDIS_URL=redis://..." produce complete work. The cost of verbose plans is far less than the cost of re-doing shallow execution.
|
|
536
|
+
</deep_work_rules>
|
|
537
|
+
|
|
323
538
|
<quality_gate>
|
|
324
539
|
- [ ] PLAN.md files created in phase directory
|
|
325
540
|
- [ ] Each plan has valid frontmatter
|
|
326
541
|
- [ ] Tasks are specific and actionable
|
|
542
|
+
- [ ] Every task has `<read_first>` with at least the file being modified
|
|
543
|
+
- [ ] Every task has `<acceptance_criteria>` with grep-verifiable conditions
|
|
544
|
+
- [ ] Every `<action>` contains concrete values (no "align X with Y" without specifying what)
|
|
327
545
|
- [ ] Dependencies correctly identified
|
|
328
546
|
- [ ] Waves assigned for parallel execution
|
|
329
547
|
- [ ] must_haves derived from phase goal
|
|
@@ -371,6 +589,8 @@ Checker prompt:
|
|
|
371
589
|
- {research_path} (Technical Research — includes Validation Architecture)
|
|
372
590
|
</files_to_read>
|
|
373
591
|
|
|
592
|
+
${AGENT_SKILLS_CHECKER}
|
|
593
|
+
|
|
374
594
|
**Phase requirement IDs (MUST ALL be covered):** {phase_req_ids}
|
|
375
595
|
|
|
376
596
|
**Project instructions:** read ./AGENTS.md if exists — verify plans honor project guidelines
|
|
@@ -417,6 +637,8 @@ Revision prompt:
|
|
|
417
637
|
- {context_path} (USER DECISIONS from /gsd-discuss-phase)
|
|
418
638
|
</files_to_read>
|
|
419
639
|
|
|
640
|
+
${AGENT_SKILLS_PLANNER}
|
|
641
|
+
|
|
420
642
|
**Checker issues:** {structured_issues_from_checker}
|
|
421
643
|
</revision_context>
|
|
422
644
|
|
|
@@ -444,11 +666,62 @@ Display: `Max iterations reached. {N} issues remain:` + issue list
|
|
|
444
666
|
|
|
445
667
|
Offer: 1) Force proceed, 2) Provide guidance and retry, 3) Abandon
|
|
446
668
|
|
|
447
|
-
## 13.
|
|
669
|
+
## 13. Requirements Coverage Gate
|
|
670
|
+
|
|
671
|
+
After plans pass the checker (or checker is skipped), verify that all phase requirements are covered by at least one plan.
|
|
672
|
+
|
|
673
|
+
**Skip if:** `phase_req_ids` is null or TBD (no requirements mapped to this phase).
|
|
674
|
+
|
|
675
|
+
**Step 1: Extract requirement IDs claimed by plans**
|
|
676
|
+
```bash
|
|
677
|
+
# Collect all requirement IDs from plan frontmatter
|
|
678
|
+
PLAN_REQS=$(grep -h "requirements_addressed\|requirements:" ${PHASE_DIR}/*-PLAN.md 2>/dev/null | tr -d '[]' | tr ',' '\n' | sed 's/^[[:space:]]*//' | sort -u)
|
|
679
|
+
```
|
|
680
|
+
|
|
681
|
+
**Step 2: Compare against phase requirements from ROADMAP**
|
|
682
|
+
|
|
683
|
+
For each REQ-ID in `phase_req_ids`:
|
|
684
|
+
- If REQ-ID appears in `PLAN_REQS` → covered ✓
|
|
685
|
+
- If REQ-ID does NOT appear in any plan → uncovered ✗
|
|
686
|
+
|
|
687
|
+
**Step 3: Check CONTEXT.md features against plan objectives**
|
|
688
|
+
|
|
689
|
+
read CONTEXT.md `<decisions>` section. Extract feature/capability names. Check each against plan `<objective>` blocks. Features not mentioned in any plan objective → potentially dropped.
|
|
690
|
+
|
|
691
|
+
**Step 4: Report**
|
|
692
|
+
|
|
693
|
+
If all requirements covered and no dropped features:
|
|
694
|
+
```
|
|
695
|
+
✓ Requirements coverage: {N}/{N} REQ-IDs covered by plans
|
|
696
|
+
```
|
|
697
|
+
→ Proceed to step 14.
|
|
698
|
+
|
|
699
|
+
If gaps found:
|
|
700
|
+
```
|
|
701
|
+
## ⚠ Requirements Coverage Gap
|
|
702
|
+
|
|
703
|
+
{M} of {N} phase requirements are not assigned to any plan:
|
|
704
|
+
|
|
705
|
+
| REQ-ID | Description | Plans |
|
|
706
|
+
|--------|-------------|-------|
|
|
707
|
+
| {id} | {from REQUIREMENTS.md} | None |
|
|
708
|
+
|
|
709
|
+
{K} CONTEXT.md features not found in plan objectives:
|
|
710
|
+
- {feature_name} — described in CONTEXT.md but no plan covers it
|
|
711
|
+
|
|
712
|
+
Options:
|
|
713
|
+
1. Re-plan to include missing requirements (recommended)
|
|
714
|
+
2. Move uncovered requirements to next phase
|
|
715
|
+
3. Proceed anyway — accept coverage gaps
|
|
716
|
+
```
|
|
717
|
+
|
|
718
|
+
If `TEXT_MODE` is true, present as a plain-text numbered list (options already shown in the block above). Otherwise use question to present the options.
|
|
719
|
+
|
|
720
|
+
## 14. Present Final Status
|
|
448
721
|
|
|
449
722
|
Route to `<offer_next>` OR `auto_advance` depending on flags/config.
|
|
450
723
|
|
|
451
|
-
##
|
|
724
|
+
## 15. Auto-Advance Check
|
|
452
725
|
|
|
453
726
|
Check for auto-advance trigger:
|
|
454
727
|
|
|
@@ -478,7 +751,7 @@ Plans ready. Launching execute-phase...
|
|
|
478
751
|
|
|
479
752
|
Launch execute-phase using the skill tool to avoid nested task sessions (which cause runtime freezes due to deep agent nesting):
|
|
480
753
|
```
|
|
481
|
-
skill(skill="gsd-execute-phase", args="${PHASE} --auto --no-transition")
|
|
754
|
+
skill(skill="gsd-execute-phase", args="${PHASE} --auto --no-transition ${GSD_WS}")
|
|
482
755
|
```
|
|
483
756
|
|
|
484
757
|
The `--no-transition` flag tells execute-phase to return status after verification instead of chaining further. This keeps the auto-advance chain flat — each phase runs at the same nesting level rather than spawning deeper task agents.
|
|
@@ -492,14 +765,14 @@ The `--no-transition` flag tells execute-phase to return status after verificati
|
|
|
492
765
|
|
|
493
766
|
Auto-advance pipeline finished.
|
|
494
767
|
|
|
495
|
-
Next: /gsd-discuss-phase ${NEXT_PHASE} --auto
|
|
768
|
+
Next: /gsd-discuss-phase ${NEXT_PHASE} --auto ${GSD_WS}
|
|
496
769
|
```
|
|
497
770
|
- **GAPS FOUND / VERIFICATION FAILED** → Display result, stop chain:
|
|
498
771
|
```
|
|
499
772
|
Auto-advance stopped: Execution needs review.
|
|
500
773
|
|
|
501
774
|
Review the output above and continue manually:
|
|
502
|
-
/gsd-execute-phase ${PHASE}
|
|
775
|
+
/gsd-execute-phase ${PHASE} ${GSD_WS}
|
|
503
776
|
```
|
|
504
777
|
|
|
505
778
|
**If neither `--auto` nor config enabled:**
|
|
@@ -530,7 +803,7 @@ Verification: {Passed | Passed with override | Skipped}
|
|
|
530
803
|
|
|
531
804
|
**Execute Phase {X}** — run all {N} plans
|
|
532
805
|
|
|
533
|
-
/gsd-execute-phase {X}
|
|
806
|
+
/gsd-execute-phase {X} ${GSD_WS}
|
|
534
807
|
|
|
535
808
|
*/new first → fresh context window*
|
|
536
809
|
|
|
@@ -539,10 +812,36 @@ Verification: {Passed | Passed with override | Skipped}
|
|
|
539
812
|
**Also available:**
|
|
540
813
|
- cat .planning/phases/{phase-dir}/*-PLAN.md — review plans
|
|
541
814
|
- /gsd-plan-phase {X} --research — re-research first
|
|
815
|
+
- /gsd-review --phase {X} --all — peer review plans with external AIs
|
|
816
|
+
- /gsd-plan-phase {X} --reviews — replan incorporating review feedback
|
|
542
817
|
|
|
543
818
|
───────────────────────────────────────────────────────────────
|
|
544
819
|
</offer_next>
|
|
545
820
|
|
|
821
|
+
<windows_troubleshooting>
|
|
822
|
+
**Windows users:** If plan-phase freezes during agent spawning (common on Windows due to
|
|
823
|
+
stdio deadlocks with MCP servers — see OpenCode issue anthropics/OpenCode-code#28126):
|
|
824
|
+
|
|
825
|
+
1. **Force-kill:** Close the terminal (Ctrl+C may not work)
|
|
826
|
+
2. **Clean up orphaned processes:**
|
|
827
|
+
```powershell
|
|
828
|
+
# Kill orphaned node processes from stale MCP servers
|
|
829
|
+
Get-Process node -ErrorAction SilentlyContinue | Where-Object {$_.StartTime -lt (Get-Date).AddHours(-1)} | Stop-Process -Force
|
|
830
|
+
```
|
|
831
|
+
3. **Clean up stale task directories:**
|
|
832
|
+
```powershell
|
|
833
|
+
# Remove stale subagent task dirs (OpenCode never cleans these on crash)
|
|
834
|
+
Remove-Item -Recurse -Force "$env:USERPROFILE\.OpenCode\tasks\*" -ErrorAction SilentlyContinue
|
|
835
|
+
```
|
|
836
|
+
4. **Reduce MCP server count:** Temporarily disable non-essential MCP servers in settings.json
|
|
837
|
+
5. **Retry:** Restart OpenCode and run `/gsd-plan-phase` again
|
|
838
|
+
|
|
839
|
+
If freezes persist, try `--skip-research` to reduce the agent chain from 3 to 2 agents:
|
|
840
|
+
```
|
|
841
|
+
/gsd-plan-phase N --skip-research
|
|
842
|
+
```
|
|
843
|
+
</windows_troubleshooting>
|
|
844
|
+
|
|
546
845
|
<success_criteria>
|
|
547
846
|
- [ ] .planning/ directory validated
|
|
548
847
|
- [ ] Phase validated against roadmap
|