gsd-opencode 1.33.2 → 1.35.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 +23 -0
- package/agents/gsd-ai-researcher.md +142 -0
- package/agents/gsd-code-fixer.md +523 -0
- package/agents/gsd-code-reviewer.md +361 -0
- package/agents/gsd-debugger.md +14 -1
- package/agents/gsd-domain-researcher.md +162 -0
- package/agents/gsd-eval-auditor.md +170 -0
- package/agents/gsd-eval-planner.md +161 -0
- package/agents/gsd-executor.md +70 -7
- package/agents/gsd-framework-selector.md +167 -0
- package/agents/gsd-intel-updater.md +320 -0
- package/agents/gsd-phase-researcher.md +26 -0
- package/agents/gsd-plan-checker.md +12 -0
- package/agents/gsd-planner.md +16 -6
- package/agents/gsd-project-researcher.md +23 -0
- package/agents/gsd-ui-researcher.md +23 -0
- package/agents/gsd-verifier.md +55 -1
- package/commands/gsd/gsd-add-backlog.md +1 -1
- package/commands/gsd/gsd-add-phase.md +1 -1
- package/commands/gsd/gsd-add-todo.md +1 -1
- package/commands/gsd/gsd-ai-integration-phase.md +36 -0
- package/commands/gsd/gsd-audit-fix.md +33 -0
- package/commands/gsd/gsd-autonomous.md +1 -0
- package/commands/gsd/gsd-check-todos.md +1 -1
- package/commands/gsd/gsd-code-review-fix.md +52 -0
- package/commands/gsd/gsd-code-review.md +55 -0
- package/commands/gsd/gsd-complete-milestone.md +1 -1
- package/commands/gsd/gsd-debug.md +1 -1
- package/commands/gsd/gsd-eval-review.md +32 -0
- package/commands/gsd/gsd-explore.md +27 -0
- package/commands/gsd/gsd-from-gsd2.md +45 -0
- package/commands/gsd/gsd-health.md +1 -1
- package/commands/gsd/gsd-import.md +36 -0
- package/commands/gsd/gsd-insert-phase.md +1 -1
- package/commands/gsd/gsd-intel.md +183 -0
- package/commands/gsd/gsd-manager.md +1 -1
- package/commands/gsd/gsd-next.md +2 -0
- package/commands/gsd/gsd-reapply-patches.md +58 -3
- package/commands/gsd/gsd-remove-phase.md +1 -1
- package/commands/gsd/gsd-review.md +4 -2
- package/commands/gsd/gsd-scan.md +26 -0
- package/commands/gsd/gsd-set-profile.md +1 -1
- package/commands/gsd/gsd-thread.md +1 -1
- package/commands/gsd/gsd-undo.md +34 -0
- package/commands/gsd/gsd-workstreams.md +6 -6
- package/get-shit-done/bin/gsd-tools.cjs +143 -5
- package/get-shit-done/bin/lib/commands.cjs +10 -2
- package/get-shit-done/bin/lib/config.cjs +71 -37
- package/get-shit-done/bin/lib/core.cjs +70 -8
- package/get-shit-done/bin/lib/gsd2-import.cjs +511 -0
- package/get-shit-done/bin/lib/init.cjs +20 -6
- package/get-shit-done/bin/lib/intel.cjs +660 -0
- package/get-shit-done/bin/lib/learnings.cjs +378 -0
- package/get-shit-done/bin/lib/milestone.cjs +25 -15
- package/get-shit-done/bin/lib/model-profiles.cjs +17 -17
- package/get-shit-done/bin/lib/phase.cjs +148 -112
- package/get-shit-done/bin/lib/roadmap.cjs +12 -5
- package/get-shit-done/bin/lib/security.cjs +119 -0
- package/get-shit-done/bin/lib/state.cjs +283 -221
- package/get-shit-done/bin/lib/template.cjs +8 -4
- package/get-shit-done/bin/lib/verify.cjs +42 -5
- package/get-shit-done/references/ai-evals.md +156 -0
- package/get-shit-done/references/ai-frameworks.md +186 -0
- package/get-shit-done/references/common-bug-patterns.md +114 -0
- package/get-shit-done/references/few-shot-examples/plan-checker.md +73 -0
- package/get-shit-done/references/few-shot-examples/verifier.md +109 -0
- package/get-shit-done/references/gates.md +70 -0
- package/get-shit-done/references/ios-scaffold.md +123 -0
- package/get-shit-done/references/model-profile-resolution.md +6 -7
- package/get-shit-done/references/model-profiles.md +20 -14
- package/get-shit-done/references/planning-config.md +237 -0
- package/get-shit-done/references/thinking-models-debug.md +44 -0
- package/get-shit-done/references/thinking-models-execution.md +50 -0
- package/get-shit-done/references/thinking-models-planning.md +62 -0
- package/get-shit-done/references/thinking-models-research.md +50 -0
- package/get-shit-done/references/thinking-models-verification.md +55 -0
- package/get-shit-done/references/thinking-partner.md +96 -0
- package/get-shit-done/references/universal-anti-patterns.md +6 -1
- package/get-shit-done/references/verification-overrides.md +227 -0
- package/get-shit-done/templates/AI-SPEC.md +246 -0
- package/get-shit-done/workflows/add-tests.md +3 -0
- package/get-shit-done/workflows/add-todo.md +2 -0
- package/get-shit-done/workflows/ai-integration-phase.md +284 -0
- package/get-shit-done/workflows/audit-fix.md +154 -0
- package/get-shit-done/workflows/autonomous.md +33 -2
- package/get-shit-done/workflows/check-todos.md +2 -0
- package/get-shit-done/workflows/cleanup.md +2 -0
- package/get-shit-done/workflows/code-review-fix.md +497 -0
- package/get-shit-done/workflows/code-review.md +515 -0
- package/get-shit-done/workflows/complete-milestone.md +40 -15
- package/get-shit-done/workflows/diagnose-issues.md +1 -1
- package/get-shit-done/workflows/discovery-phase.md +3 -1
- package/get-shit-done/workflows/discuss-phase-assumptions.md +1 -1
- package/get-shit-done/workflows/discuss-phase.md +21 -7
- package/get-shit-done/workflows/do.md +2 -0
- package/get-shit-done/workflows/docs-update.md +2 -0
- package/get-shit-done/workflows/eval-review.md +155 -0
- package/get-shit-done/workflows/execute-phase.md +307 -57
- package/get-shit-done/workflows/execute-plan.md +64 -93
- package/get-shit-done/workflows/explore.md +136 -0
- package/get-shit-done/workflows/help.md +1 -1
- package/get-shit-done/workflows/import.md +273 -0
- package/get-shit-done/workflows/inbox.md +387 -0
- package/get-shit-done/workflows/manager.md +4 -10
- package/get-shit-done/workflows/new-milestone.md +3 -1
- package/get-shit-done/workflows/new-project.md +2 -0
- package/get-shit-done/workflows/new-workspace.md +2 -0
- package/get-shit-done/workflows/next.md +56 -0
- package/get-shit-done/workflows/note.md +2 -0
- package/get-shit-done/workflows/plan-phase.md +97 -17
- package/get-shit-done/workflows/plant-seed.md +3 -0
- package/get-shit-done/workflows/pr-branch.md +41 -13
- package/get-shit-done/workflows/profile-user.md +4 -2
- package/get-shit-done/workflows/quick.md +99 -4
- package/get-shit-done/workflows/remove-workspace.md +2 -0
- package/get-shit-done/workflows/review.md +53 -6
- package/get-shit-done/workflows/scan.md +98 -0
- package/get-shit-done/workflows/secure-phase.md +2 -0
- package/get-shit-done/workflows/settings.md +18 -3
- package/get-shit-done/workflows/ship.md +3 -0
- package/get-shit-done/workflows/ui-phase.md +10 -2
- package/get-shit-done/workflows/ui-review.md +2 -0
- package/get-shit-done/workflows/undo.md +314 -0
- package/get-shit-done/workflows/update.md +2 -0
- package/get-shit-done/workflows/validate-phase.md +2 -0
- package/get-shit-done/workflows/verify-phase.md +83 -0
- package/get-shit-done/workflows/verify-work.md +12 -1
- package/package.json +1 -1
- package/skills/gsd-code-review/SKILL.md +48 -0
- package/skills/gsd-code-review-fix/SKILL.md +44 -0
|
@@ -72,7 +72,7 @@ grep -n "type=\"checkpoint" .planning/phases/XX-name/{phase}-{plan}-PLAN.md
|
|
|
72
72
|
| Verify-only | B (segmented) | Segments between checkpoints. After none/human-verify → SUBAGENT. After decision/human-action → MAIN |
|
|
73
73
|
| Decision | C (main) | Execute entirely in main context |
|
|
74
74
|
|
|
75
|
-
**Pattern A:** init_agent_tracking → capture `EXPECTED_BASE=$(git rev-parse HEAD)` → spawn task(subagent_type="gsd-executor", model=executor_model) with prompt: execute plan at [path], autonomous, all tasks + SUMMARY + commit, follow deviation/auth rules, report: plan name, tasks, SUMMARY path, commit hash → track agent_id → wait → update tracking → report. **Include `isolation="worktree"` only if `workflow.use_worktrees` is not `false`** (read via `config-get workflow.use_worktrees`). **When using `isolation="worktree"`, include a `<worktree_branch_check>` block in the prompt** instructing the executor to run `git merge-base HEAD {EXPECTED_BASE}` and, if the result differs from `{EXPECTED_BASE}`, reset the branch
|
|
75
|
+
**Pattern A:** init_agent_tracking → capture `EXPECTED_BASE=$(git rev-parse HEAD)` → spawn task(subagent_type="gsd-executor", model=executor_model) with prompt: execute plan at [path], autonomous, all tasks + SUMMARY + commit, follow deviation/auth rules, report: plan name, tasks, SUMMARY path, commit hash → track agent_id → wait → update tracking → report. **Include `isolation="worktree"` only if `workflow.use_worktrees` is not `false`** (read via `config-get workflow.use_worktrees`). **When using `isolation="worktree"`, include a `<worktree_branch_check>` block in the prompt** instructing the executor to run `git merge-base HEAD {EXPECTED_BASE}` and, if the result differs from `{EXPECTED_BASE}`, hard-reset the branch with `git reset --hard {EXPECTED_BASE}` before starting work (safe — runs before any agent work), then verify with `[ "$(git rev-parse HEAD)" != "{EXPECTED_BASE}" ] && exit 1`. This corrects a known issue where `EnterWorktree` creates branches from `main` instead of the feature branch HEAD (affects all platforms).
|
|
76
76
|
|
|
77
77
|
**Pattern B:** Execute segment-by-segment. Autonomous segments: spawn subagent for assigned tasks only (no SUMMARY/commit). Checkpoints: main context. After all segments: aggregate, create SUMMARY, commit. See segment_execution.
|
|
78
78
|
|
|
@@ -110,6 +110,8 @@ Pattern B only (verify-only checkpoints). Skip for A/C.
|
|
|
110
110
|
3. After ALL segments: aggregate files/deviations/decisions → create SUMMARY.md → commit → self-check:
|
|
111
111
|
- Verify key-files.created exist on disk with `[ -f ]`
|
|
112
112
|
- Check `git log --oneline --all --grep="{phase}-{plan}"` returns ≥1 commit
|
|
113
|
+
- Re-run ALL `<acceptance_criteria>` from every task — if any fail, fix before finalizing SUMMARY
|
|
114
|
+
- Re-run the plan-level `<verification>` commands — log results in SUMMARY
|
|
113
115
|
- Append `## Self-Check: PASSED` or `## Self-Check: FAILED` to SUMMARY
|
|
114
116
|
|
|
115
117
|
**Known OpenCode bug (classifyHandoffIfNeeded):** If any segment agent reports "failed" with `classifyHandoffIfNeeded is not defined`, this is a OpenCode runtime bug — not a real failure. Run spot-checks; if they pass, treat as successful.
|
|
@@ -133,6 +135,8 @@ This IS the execution instructions. Follow exactly. If plan references CONTEXT.m
|
|
|
133
135
|
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" phases list --type summaries --raw
|
|
134
136
|
# Extract the second-to-last summary from the JSON result
|
|
135
137
|
```
|
|
138
|
+
|
|
139
|
+
**Text mode (`workflow.text_mode: true` in config or `--text` flag):** 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 non-OpenCode runtimes (OpenAI Codex, Gemini CLI, etc.) where `question` is not available.
|
|
136
140
|
If previous SUMMARY has unresolved "Issues Encountered" or "Next Phase Readiness" blockers: question(header="Previous Issues", options: "Proceed anyway" | "Address first" | "Review previous").
|
|
137
141
|
</step>
|
|
138
142
|
|
|
@@ -145,7 +149,13 @@ Deviations are normal — handle via rules below.
|
|
|
145
149
|
- **MANDATORY read_first gate:** If the task has a `<read_first>` field, you MUST read every listed file BEFORE making any edits. This is not optional. Do not skip files because you "already know" what's in them — read them. The read_first files establish ground truth for the task.
|
|
146
150
|
- `type="auto"`: if `tdd="true"` → TDD execution. Implement with deviation rules + auth gates. Verify done criteria. Commit (see task_commit). Track hash for Summary.
|
|
147
151
|
- `type="checkpoint:*"`: STOP → checkpoint_protocol → wait for user → continue only after confirmation.
|
|
148
|
-
- **
|
|
152
|
+
- **HARD GATE — acceptance_criteria verification:** After completing each task, if it has `<acceptance_criteria>`, you MUST run a verification loop before proceeding:
|
|
153
|
+
1. For each criterion: execute the grep, file check, or CLI command that proves it passes
|
|
154
|
+
2. Log each result as PASS or FAIL with the command output
|
|
155
|
+
3. If ANY criterion fails: fix the implementation immediately, then re-run ALL criteria
|
|
156
|
+
4. Repeat until all criteria pass — you are BLOCKED from starting the next task until this gate clears
|
|
157
|
+
5. If a criterion cannot be satisfied after 2 fix attempts, log it as a deviation with reason — do NOT silently skip it
|
|
158
|
+
This is not advisory. A task with failing acceptance criteria is an incomplete task.
|
|
149
159
|
3. Run `<verification>` checks
|
|
150
160
|
4. Confirm `<success_criteria>` met
|
|
151
161
|
5. Document deviations in Summary
|
|
@@ -178,32 +188,12 @@ Auth errors during execution are NOT failures — they're expected interaction p
|
|
|
178
188
|
|
|
179
189
|
## Deviation Rules
|
|
180
190
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
| **3: Blocking** | Prevents completion: missing deps, wrong types, broken imports, missing env/config/files, circular deps | Fix blocker → verify proceeds → track `[Rule 3 - Blocking]` | Auto |
|
|
188
|
-
| **4: Architectural** | Structural change: new DB table, schema change, new service, switching libs, breaking API, new infra | STOP → present decision (below) → track `[Rule 4 - Architectural]` | Ask user |
|
|
189
|
-
|
|
190
|
-
**Rule 4 format:**
|
|
191
|
-
```
|
|
192
|
-
⚠️ Architectural Decision Needed
|
|
193
|
-
|
|
194
|
-
Current task: [task name]
|
|
195
|
-
Discovery: [what prompted this]
|
|
196
|
-
Proposed change: [modification]
|
|
197
|
-
Why needed: [rationale]
|
|
198
|
-
Impact: [what this affects]
|
|
199
|
-
Alternatives: [other approaches]
|
|
200
|
-
|
|
201
|
-
Proceed with proposed change? (yes / different approach / defer)
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
**Priority:** Rule 4 (STOP) > Rules 1-3 (auto) > unsure → Rule 4
|
|
205
|
-
**Edge cases:** missing validation → R2 | null crash → R1 | new table → R4 | new column → R1/2
|
|
206
|
-
**Heuristic:** Affects correctness/security/completion? → R1-3. Maybe? → R4.
|
|
191
|
+
Apply deviation rules from the gsd-executor agent definition (single source of truth):
|
|
192
|
+
- **Rules 1-3** (bugs, missing critical, blockers): auto-fix, test, verify, track as deviations
|
|
193
|
+
- **Rule 4** (architectural changes): STOP, present decision to user, await approval
|
|
194
|
+
- **Scope boundary**: do not auto-fix pre-existing issues unrelated to current task
|
|
195
|
+
- **Fix attempt limit**: max 3 retries per deviation before escalating
|
|
196
|
+
- **Priority**: Rule 4 (STOP) > Rules 1-3 (auto) > unsure → Rule 4
|
|
207
197
|
|
|
208
198
|
</deviation_rules>
|
|
209
199
|
|
|
@@ -256,59 +246,13 @@ If a commit is BLOCKED by a hook:
|
|
|
256
246
|
<task_commit>
|
|
257
247
|
## task Commit Protocol
|
|
258
248
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
git add src/types/user.ts
|
|
267
|
-
```
|
|
268
|
-
|
|
269
|
-
**3. Commit type:**
|
|
270
|
-
|
|
271
|
-
| Type | When | Example |
|
|
272
|
-
|------|------|---------|
|
|
273
|
-
| `feat` | New functionality | feat(08-02): create user registration endpoint |
|
|
274
|
-
| `fix` | Bug fix | fix(08-02): correct email validation regex |
|
|
275
|
-
| `test` | Test-only (TDD RED) | test(08-02): add failing test for password hashing |
|
|
276
|
-
| `refactor` | No behavior change (TDD REFACTOR) | refactor(08-02): extract validation to helper |
|
|
277
|
-
| `perf` | Performance | perf(08-02): add database index |
|
|
278
|
-
| `docs` | Documentation | docs(08-02): add API docs |
|
|
279
|
-
| `style` | Formatting | style(08-02): format auth module |
|
|
280
|
-
| `chore` | Config/deps | chore(08-02): add bcrypt dependency |
|
|
281
|
-
|
|
282
|
-
**4. Format:** `{type}({phase}-{plan}): {description}` with bullet points for key changes.
|
|
283
|
-
|
|
284
|
-
<sub_repos_commit_flow>
|
|
285
|
-
**Sub-repos mode:** If `sub_repos` is configured (non-empty array from init context), use `commit-to-subrepo` instead of standard git commit. This routes files to their correct sub-repo based on path prefix.
|
|
286
|
-
|
|
287
|
-
```bash
|
|
288
|
-
node $HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs commit-to-subrepo "{type}({phase}-{plan}): {description}" --files file1 file2 ...
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
The command groups files by sub-repo prefix and commits atomically to each. Returns JSON: `{ committed: true, repos: { "backend": { hash: "abc", files: [...] }, ... } }`.
|
|
292
|
-
|
|
293
|
-
Record hashes from each repo in the response for SUMMARY tracking.
|
|
294
|
-
|
|
295
|
-
**If `sub_repos` is empty or not set:** Use standard git commit flow below.
|
|
296
|
-
</sub_repos_commit_flow>
|
|
297
|
-
|
|
298
|
-
**5. Record hash:**
|
|
299
|
-
```bash
|
|
300
|
-
TASK_COMMIT=$(git rev-parse --short HEAD)
|
|
301
|
-
TASK_COMMITS+=("task ${TASK_NUM}: ${TASK_COMMIT}")
|
|
302
|
-
```
|
|
303
|
-
|
|
304
|
-
**6. Check for untracked generated files:**
|
|
305
|
-
```bash
|
|
306
|
-
git status --short | grep '^??'
|
|
307
|
-
```
|
|
308
|
-
If new untracked files appeared after running scripts or tools, decide for each:
|
|
309
|
-
- **Commit it** — if it's a source file, config, or intentional artifact
|
|
310
|
-
- **Add to .gitignore** — if it's a generated/runtime output (build artifacts, `.env` files, cache files, compiled output)
|
|
311
|
-
- Do NOT leave generated files untracked
|
|
249
|
+
Follow the task commit protocol from the gsd-executor agent definition (single source of truth):
|
|
250
|
+
- Stage files individually (NEVER `git add .` or `git add -A`)
|
|
251
|
+
- Format: `{type}({phase}-{plan}): {concise description}` with bullet points for key changes
|
|
252
|
+
- Types: feat, fix, test, refactor, perf, docs, style, chore
|
|
253
|
+
- Sub-repos: use `commit-to-subrepo` when `sub_repos` is configured
|
|
254
|
+
- Record commit hash for SUMMARY tracking
|
|
255
|
+
- Check for untracked generated files after each commit
|
|
312
256
|
|
|
313
257
|
</task_commit>
|
|
314
258
|
|
|
@@ -396,19 +340,29 @@ Next: more plans → "Ready for {next-plan}" | last → "Phase complete, ready f
|
|
|
396
340
|
</step>
|
|
397
341
|
|
|
398
342
|
<step name="update_current_position">
|
|
343
|
+
**Skip this step if running in parallel mode** (the orchestrator in execute-phase.md
|
|
344
|
+
handles STATE.md/ROADMAP.md updates centrally after merging worktrees to avoid
|
|
345
|
+
merge conflicts).
|
|
346
|
+
|
|
399
347
|
Update STATE.md using gsd-tools:
|
|
400
348
|
|
|
401
349
|
```bash
|
|
402
|
-
#
|
|
403
|
-
|
|
350
|
+
# Auto-detect parallel mode: .git is a file in worktrees, a directory in main repo
|
|
351
|
+
IS_WORKTREE=$([ -f .git ] && echo "true" || echo "false")
|
|
352
|
+
|
|
353
|
+
# Skip in parallel mode — orchestrator handles STATE.md centrally
|
|
354
|
+
if [ "$IS_WORKTREE" != "true" ]; then
|
|
355
|
+
# Advance plan counter (handles last-plan edge case)
|
|
356
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state advance-plan
|
|
404
357
|
|
|
405
|
-
# Recalculate progress bar from disk state
|
|
406
|
-
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state update-progress
|
|
358
|
+
# Recalculate progress bar from disk state
|
|
359
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state update-progress
|
|
407
360
|
|
|
408
|
-
# Record execution metrics
|
|
409
|
-
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state record-metric \
|
|
410
|
-
|
|
411
|
-
|
|
361
|
+
# Record execution metrics
|
|
362
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state record-metric \
|
|
363
|
+
--phase "${PHASE}" --plan "${PLAN}" --duration "${DURATION}" \
|
|
364
|
+
--tasks "${TASK_COUNT}" --files "${FILE_COUNT}"
|
|
365
|
+
fi
|
|
412
366
|
```
|
|
413
367
|
</step>
|
|
414
368
|
|
|
@@ -443,8 +397,17 @@ If SUMMARY "Issues Encountered" ≠ "None": yolo → log and continue. Interacti
|
|
|
443
397
|
</step>
|
|
444
398
|
|
|
445
399
|
<step name="update_roadmap">
|
|
400
|
+
**Skip this step if running in parallel mode** (the orchestrator handles ROADMAP.md
|
|
401
|
+
updates centrally after merging worktrees).
|
|
402
|
+
|
|
446
403
|
```bash
|
|
447
|
-
|
|
404
|
+
# Auto-detect parallel mode: .git is a file in worktrees, a directory in main repo
|
|
405
|
+
IS_WORKTREE=$([ -f .git ] && echo "true" || echo "false")
|
|
406
|
+
|
|
407
|
+
# Skip in parallel mode — orchestrator handles ROADMAP.md centrally
|
|
408
|
+
if [ "$IS_WORKTREE" != "true" ]; then
|
|
409
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" roadmap update-plan-progress "${PHASE}"
|
|
410
|
+
fi
|
|
448
411
|
```
|
|
449
412
|
Counts PLAN vs SUMMARY files on disk. Updates progress table row with correct count and status (`In Progress` or `Complete` with date).
|
|
450
413
|
</step>
|
|
@@ -463,7 +426,15 @@ Extract requirement IDs from the plan's frontmatter (e.g., `requirements: [AUTH-
|
|
|
463
426
|
task code already committed per-task. Commit plan metadata:
|
|
464
427
|
|
|
465
428
|
```bash
|
|
466
|
-
|
|
429
|
+
# Auto-detect parallel mode: .git is a file in worktrees, a directory in main repo
|
|
430
|
+
IS_WORKTREE=$([ -f .git ] && echo "true" || echo "false")
|
|
431
|
+
|
|
432
|
+
# In parallel mode: exclude STATE.md and ROADMAP.md (orchestrator commits these)
|
|
433
|
+
if [ "$IS_WORKTREE" = "true" ]; then
|
|
434
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/REQUIREMENTS.md
|
|
435
|
+
else
|
|
436
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md
|
|
437
|
+
fi
|
|
467
438
|
```
|
|
468
439
|
</step>
|
|
469
440
|
|
|
@@ -507,8 +478,8 @@ All routes: `/new` first for fresh context.
|
|
|
507
478
|
- All verifications pass
|
|
508
479
|
- USER-SETUP.md generated if user_setup in frontmatter
|
|
509
480
|
- SUMMARY.md created with substantive content
|
|
510
|
-
- STATE.md updated (position, decisions, issues, session)
|
|
511
|
-
- ROADMAP.md updated
|
|
481
|
+
- STATE.md updated (position, decisions, issues, session) — unless parallel mode (orchestrator handles)
|
|
482
|
+
- ROADMAP.md updated — unless parallel mode (orchestrator handles)
|
|
512
483
|
- If codebase map exists: map updated with execution changes (or skipped if no significant changes)
|
|
513
484
|
- If USER-SETUP.md created: prominently surfaced in completion output
|
|
514
485
|
</success_criteria>
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
<objective>
|
|
2
|
+
Socratic ideation workflow. Guides the developer through exploring an idea via probing questions,
|
|
3
|
+
offers mid-conversation research when useful, then routes crystallized outputs to GSD artifacts.
|
|
4
|
+
</objective>
|
|
5
|
+
|
|
6
|
+
<required_reading>
|
|
7
|
+
read all files referenced by the invoking prompt's execution_context before starting.
|
|
8
|
+
|
|
9
|
+
@$HOME/.config/opencode/get-shit-done/references/questioning.md
|
|
10
|
+
@$HOME/.config/opencode/get-shit-done/references/domain-probes.md
|
|
11
|
+
</required_reading>
|
|
12
|
+
|
|
13
|
+
<available_agent_types>
|
|
14
|
+
Valid GSD subagent types (use exact names — do not fall back to 'general'):
|
|
15
|
+
- gsd-phase-researcher — Researches specific questions and returns concise findings
|
|
16
|
+
</available_agent_types>
|
|
17
|
+
|
|
18
|
+
<process>
|
|
19
|
+
|
|
20
|
+
## Step 1: Open the conversation
|
|
21
|
+
|
|
22
|
+
If a topic was provided, acknowledge it and begin exploring:
|
|
23
|
+
```
|
|
24
|
+
## Explore: {topic}
|
|
25
|
+
|
|
26
|
+
Let's think through this together. I'll ask questions to help clarify the idea
|
|
27
|
+
before we commit to any artifacts.
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
If no topic, ask:
|
|
31
|
+
```
|
|
32
|
+
## Explore
|
|
33
|
+
|
|
34
|
+
What's on your mind? This could be a feature idea, an architectural question,
|
|
35
|
+
a problem you're trying to solve, or something you're not sure about yet.
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Step 2: Socratic conversation (2-5 exchanges)
|
|
39
|
+
|
|
40
|
+
Guide the conversation using principles from `questioning.md` and `domain-probes.md`:
|
|
41
|
+
|
|
42
|
+
- Ask **one question at a time** (never a list of questions)
|
|
43
|
+
- Questions should probe: constraints, tradeoffs, users, scope, dependencies, risks
|
|
44
|
+
- Use domain-specific probes contextually when the topic touches a known domain
|
|
45
|
+
- Listen for signals: "or" / "versus" / "tradeoff" indicate competing priorities worth exploring
|
|
46
|
+
- Reflect back what you hear to confirm understanding before moving forward
|
|
47
|
+
|
|
48
|
+
**Conversation should feel natural, not formulaic.** Avoid rigid sequences. Follow the developer's energy — if they're excited about one aspect, go deeper there.
|
|
49
|
+
|
|
50
|
+
## Step 3: Mid-conversation research offer (after 2-3 exchanges)
|
|
51
|
+
|
|
52
|
+
If the conversation surfaces factual questions, technology comparisons, or unknowns that research could resolve, offer:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
This touches on [specific question]. Want me to do a quick research pass before we continue?
|
|
56
|
+
This would take ~30 seconds and might surface useful context.
|
|
57
|
+
|
|
58
|
+
[Yes, research this] / [No, let's keep exploring]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
If yes, spawn a research agent:
|
|
62
|
+
```
|
|
63
|
+
@gsd-phase-researcher "Quick research: {specific_question}. Return 3-5 key findings, no more than 200 words."
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Share findings and continue the conversation.
|
|
67
|
+
|
|
68
|
+
If the topic doesn't warrant research, skip this step entirely. **Don't force it.**
|
|
69
|
+
|
|
70
|
+
## Step 4: Crystallize outputs (after 3-6 exchanges)
|
|
71
|
+
|
|
72
|
+
When the conversation reaches natural conclusions or the developer signals readiness, propose outputs. Analyze the conversation to identify what was discussed and suggest **up to 4 outputs** from:
|
|
73
|
+
|
|
74
|
+
| Type | Destination | When to suggest |
|
|
75
|
+
|------|-------------|-----------------|
|
|
76
|
+
| Note | `.planning/notes/{slug}.md` | Observations, context, decisions worth remembering |
|
|
77
|
+
| Todo | `.planning/todos/pending/{slug}.md` | Concrete actionable tasks identified |
|
|
78
|
+
| Seed | `.planning/seeds/{slug}.md` | Forward-looking ideas with trigger conditions |
|
|
79
|
+
| Research question | `.planning/research/questions.md` (append) | Open questions that need deeper investigation |
|
|
80
|
+
| Requirement | `REQUIREMENTS.md` (append) | Clear requirements that emerged from discussion |
|
|
81
|
+
| New phase | `ROADMAP.md` (append) | Scope large enough to warrant its own phase |
|
|
82
|
+
|
|
83
|
+
Present suggestions:
|
|
84
|
+
```
|
|
85
|
+
Based on our conversation, I'd suggest capturing:
|
|
86
|
+
|
|
87
|
+
1. **Note:** "Authentication strategy decisions" — your reasoning about JWT vs sessions
|
|
88
|
+
2. **Todo:** "Evaluate Passport.js vs custom middleware" — the comparison you want to do
|
|
89
|
+
3. **Seed:** "OAuth2 provider support" — trigger: when user management phase starts
|
|
90
|
+
|
|
91
|
+
Create these? You can select specific ones or modify them.
|
|
92
|
+
|
|
93
|
+
[Create all] / [Let me pick] / [Skip — just exploring]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**Never write artifacts without explicit user selection.**
|
|
97
|
+
|
|
98
|
+
## Step 5: write selected outputs
|
|
99
|
+
|
|
100
|
+
For each selected output, write the file:
|
|
101
|
+
|
|
102
|
+
- **Notes:** Create `.planning/notes/{slug}.md` with frontmatter (title, date, context)
|
|
103
|
+
- **Todos:** Create `.planning/todos/pending/{slug}.md` with frontmatter (title, date, priority)
|
|
104
|
+
- **Seeds:** Create `.planning/seeds/{slug}.md` with frontmatter (title, trigger_condition, planted_date)
|
|
105
|
+
- **Research questions:** Append to `.planning/research/questions.md`
|
|
106
|
+
- **Requirements:** Append to `.planning/REQUIREMENTS.md` with next available REQ ID
|
|
107
|
+
- **Phases:** Use existing `/gsd-add-phase` command via command
|
|
108
|
+
|
|
109
|
+
Commit if `commit_docs` is enabled:
|
|
110
|
+
```bash
|
|
111
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs: capture exploration — {topic_slug}" --files {file_list}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Step 6: Close
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
## Exploration Complete
|
|
118
|
+
|
|
119
|
+
**Topic:** {topic}
|
|
120
|
+
**Outputs:** {count} artifact(s) created
|
|
121
|
+
{list of created files}
|
|
122
|
+
|
|
123
|
+
Continue exploring with `/gsd-explore` or start working with `/gsd-next`.
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
</process>
|
|
127
|
+
|
|
128
|
+
<success_criteria>
|
|
129
|
+
- [ ] Socratic conversation follows questioning.md principles
|
|
130
|
+
- [ ] Questions asked one at a time, not in batches
|
|
131
|
+
- [ ] Research offered contextually (not forced)
|
|
132
|
+
- [ ] Up to 4 outputs proposed from conversation
|
|
133
|
+
- [ ] User explicitly selects which outputs to create
|
|
134
|
+
- [ ] Files written to correct destinations
|
|
135
|
+
- [ ] Commit respects commit_docs config
|
|
136
|
+
</success_criteria>
|
|
@@ -345,7 +345,7 @@ Usage: `/gsd-ship 4` or `/gsd-ship 4 --draft`
|
|
|
345
345
|
|
|
346
346
|
---
|
|
347
347
|
|
|
348
|
-
**`/gsd-review --phase N [--gemini] [--OpenCode] [--codex] [--coderabbit] [--all]`**
|
|
348
|
+
**`/gsd-review --phase N [--gemini] [--OpenCode] [--codex] [--coderabbit] [--opencode] [--qwen] [--cursor] [--all]`**
|
|
349
349
|
Cross-AI peer review — invoke external AI CLIs to independently review phase plans.
|
|
350
350
|
|
|
351
351
|
- Detects available CLIs (gemini, OpenCode, codex, coderabbit)
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
# Import Workflow
|
|
2
|
+
|
|
3
|
+
External plan ingestion with conflict detection and agent delegation.
|
|
4
|
+
|
|
5
|
+
- **--from**: Import external plan → conflict detection → write PLAN.md → validate via gsd-plan-checker
|
|
6
|
+
|
|
7
|
+
Future: `--prd` mode (PRD extraction into PROJECT.md + REQUIREMENTS.md + ROADMAP.md) is planned for a follow-up PR.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
<step name="banner">
|
|
12
|
+
|
|
13
|
+
Display the stage banner:
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
17
|
+
GSD ► IMPORT
|
|
18
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
</step>
|
|
22
|
+
|
|
23
|
+
<step name="parse_arguments">
|
|
24
|
+
|
|
25
|
+
Parse `$ARGUMENTS` to determine the execution mode:
|
|
26
|
+
|
|
27
|
+
- If `--from` is present: extract FILEPATH (the next token after `--from`), set MODE=plan
|
|
28
|
+
- If `--prd` is present: display message that `--prd` is not yet implemented and exit:
|
|
29
|
+
```
|
|
30
|
+
GSD > --prd mode is planned for a future release. Use --from to import plan files.
|
|
31
|
+
```
|
|
32
|
+
- If neither flag is found: display usage and exit:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Usage: /gsd-import --from <path>
|
|
36
|
+
|
|
37
|
+
--from <path> Import an external plan file into GSD format
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Validate the file path:**
|
|
41
|
+
|
|
42
|
+
Verify the path does not contain traversal sequences and the file exists:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
case "{FILEPATH}" in
|
|
46
|
+
*..* ) echo "SECURITY_ERROR: path contains traversal sequence"; exit 1 ;;
|
|
47
|
+
esac
|
|
48
|
+
test -f "{FILEPATH}" || echo "FILE_NOT_FOUND"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
If FILE_NOT_FOUND: display error and exit:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
╔══════════════════════════════════════════════════════════════╗
|
|
55
|
+
║ ERROR ║
|
|
56
|
+
╚══════════════════════════════════════════════════════════════╝
|
|
57
|
+
|
|
58
|
+
File not found: {FILEPATH}
|
|
59
|
+
|
|
60
|
+
**To fix:** Verify the file path and try again.
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
</step>
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Path A: MODE=plan (--from)
|
|
68
|
+
|
|
69
|
+
<step name="plan_load_context">
|
|
70
|
+
|
|
71
|
+
Load project context for conflict detection:
|
|
72
|
+
|
|
73
|
+
1. read `.planning/ROADMAP.md` — extract phase structure, phase numbers, dependencies
|
|
74
|
+
2. read `.planning/PROJECT.md` — extract project constraints, tech stack, scope boundaries.
|
|
75
|
+
**If PROJECT.md does not exist:** skip constraint checks that rely on it and display:
|
|
76
|
+
```
|
|
77
|
+
GSD > Note: No PROJECT.md found. Conflict checks against project constraints will be skipped.
|
|
78
|
+
```
|
|
79
|
+
3. read `.planning/REQUIREMENTS.md` — extract existing requirements for overlap and contradiction checks.
|
|
80
|
+
**If REQUIREMENTS.md does not exist:** skip requirement conflict checks and continue.
|
|
81
|
+
4. glob for all CONTEXT.md files across phase directories:
|
|
82
|
+
```bash
|
|
83
|
+
find .planning/phases/ -name "*-CONTEXT.md" -o -name "CONTEXT.md" 2>/dev/null
|
|
84
|
+
```
|
|
85
|
+
read each CONTEXT.md found — extract locked decisions (any decision in a `<decisions>` block)
|
|
86
|
+
|
|
87
|
+
Store loaded context for conflict detection in the next step.
|
|
88
|
+
|
|
89
|
+
</step>
|
|
90
|
+
|
|
91
|
+
<step name="plan_read_input">
|
|
92
|
+
|
|
93
|
+
read the imported file at FILEPATH.
|
|
94
|
+
|
|
95
|
+
Determine the format:
|
|
96
|
+
- **GSD PLAN.md format**: Has YAML frontmatter with `phase:`, `plan:`, `type:` fields
|
|
97
|
+
- **Freeform document**: Any other format (markdown spec, design doc, task list, etc.)
|
|
98
|
+
|
|
99
|
+
Extract from the imported content:
|
|
100
|
+
- **Phase target**: Which phase this plan belongs to (from frontmatter or inferred from content)
|
|
101
|
+
- **Plan objectives**: What the plan aims to accomplish
|
|
102
|
+
- **Tasks listed**: Individual work items described in the plan
|
|
103
|
+
- **Files modified**: Any files mentioned as targets
|
|
104
|
+
- **Dependencies**: Any referenced prerequisites
|
|
105
|
+
|
|
106
|
+
</step>
|
|
107
|
+
|
|
108
|
+
<step name="plan_conflict_detection">
|
|
109
|
+
|
|
110
|
+
Run conflict checks against the loaded project context. Output as a plain-text conflict report using [BLOCKER], [WARNING], and [INFO] labels. Do NOT use markdown tables (no `|---|` format).
|
|
111
|
+
|
|
112
|
+
### BLOCKER checks (any one prevents import):
|
|
113
|
+
|
|
114
|
+
- Plan targets a phase number that does not exist in ROADMAP.md → [BLOCKER]
|
|
115
|
+
- Plan specifies a tech stack that contradicts PROJECT.md constraints → [BLOCKER]
|
|
116
|
+
- Plan contradicts a locked decision in any CONTEXT.md `<decisions>` block → [BLOCKER]
|
|
117
|
+
- Plan contradicts an existing requirement in REQUIREMENTS.md → [BLOCKER]
|
|
118
|
+
|
|
119
|
+
### WARNING checks (user confirmation required):
|
|
120
|
+
|
|
121
|
+
- Plan partially overlaps existing requirement coverage in REQUIREMENTS.md → [WARNING]
|
|
122
|
+
- Plan has `depends_on` referencing plans that are not yet complete → [WARNING]
|
|
123
|
+
- Plan modifies files that overlap with existing incomplete plans → [WARNING]
|
|
124
|
+
- Plan phase number conflicts with existing phase numbering in ROADMAP.md → [WARNING]
|
|
125
|
+
|
|
126
|
+
### INFO checks (informational, no action needed):
|
|
127
|
+
|
|
128
|
+
- Plan uses a library not currently in the project tech stack → [INFO]
|
|
129
|
+
- Plan adds a new phase to the ROADMAP.md structure → [INFO]
|
|
130
|
+
|
|
131
|
+
Display the full Conflict Detection Report:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
## Conflict Detection Report
|
|
135
|
+
|
|
136
|
+
### BLOCKERS ({N})
|
|
137
|
+
|
|
138
|
+
[BLOCKER] {Short title}
|
|
139
|
+
Found: {what the imported plan says}
|
|
140
|
+
Expected: {what project context requires}
|
|
141
|
+
→ {Specific action to resolve}
|
|
142
|
+
|
|
143
|
+
### WARNINGS ({N})
|
|
144
|
+
|
|
145
|
+
[WARNING] {Short title}
|
|
146
|
+
Found: {what was detected}
|
|
147
|
+
Impact: {what could go wrong}
|
|
148
|
+
→ {Suggested action}
|
|
149
|
+
|
|
150
|
+
### INFO ({N})
|
|
151
|
+
|
|
152
|
+
[INFO] {Short title}
|
|
153
|
+
Note: {relevant information}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
**If any [BLOCKER] exists:**
|
|
157
|
+
|
|
158
|
+
Display:
|
|
159
|
+
```
|
|
160
|
+
GSD > BLOCKED: {N} blockers must be resolved before import can proceed.
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Exit WITHOUT writing any files. This is the safety gate — no PLAN.md is written when blockers exist.
|
|
164
|
+
|
|
165
|
+
**If only WARNINGS and/or INFO (no blockers):**
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
**Text mode (`workflow.text_mode: true` in config or `--text` flag):** 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 non-OpenCode runtimes (OpenAI Codex, Gemini CLI, etc.) where `question` is not available.
|
|
169
|
+
Ask via question using the approve-revise-abort pattern:
|
|
170
|
+
- question: "Review the warnings above. Proceed with import?"
|
|
171
|
+
- header: "Approve?"
|
|
172
|
+
- options: Approve | Abort
|
|
173
|
+
|
|
174
|
+
If user selects "Abort": exit cleanly with message "Import cancelled."
|
|
175
|
+
|
|
176
|
+
</step>
|
|
177
|
+
|
|
178
|
+
<step name="plan_convert">
|
|
179
|
+
|
|
180
|
+
Convert the imported content to GSD PLAN.md format.
|
|
181
|
+
|
|
182
|
+
Ensure the PLAN.md has all required frontmatter fields:
|
|
183
|
+
```yaml
|
|
184
|
+
---
|
|
185
|
+
phase: "{NN}-{slug}"
|
|
186
|
+
plan: "{NN}-{MM}"
|
|
187
|
+
type: "feature|refactor|config|test|docs"
|
|
188
|
+
wave: 1
|
|
189
|
+
depends_on: []
|
|
190
|
+
files_modified: []
|
|
191
|
+
autonomous: true
|
|
192
|
+
must_haves:
|
|
193
|
+
truths: []
|
|
194
|
+
artifacts: []
|
|
195
|
+
---
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
**Reject PBR naming conventions in source content:**
|
|
199
|
+
If the imported plan references PBR plan naming (e.g., `PLAN-01.md`, `plan-01.md`), rename all references to GSD `{NN}-{MM}-PLAN.md` convention during conversion.
|
|
200
|
+
|
|
201
|
+
Apply GSD naming convention for the output filename:
|
|
202
|
+
- Format: `{NN}-{MM}-PLAN.md` (e.g., `04-01-PLAN.md`)
|
|
203
|
+
- NEVER use `PLAN-01.md`, `plan-01.md`, or any other format
|
|
204
|
+
- NN = phase number (zero-padded), MM = plan number within the phase (zero-padded)
|
|
205
|
+
|
|
206
|
+
Determine the target directory:
|
|
207
|
+
```
|
|
208
|
+
.planning/phases/{NN}-{slug}/
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
If the directory does not exist, create it:
|
|
212
|
+
```bash
|
|
213
|
+
mkdir -p ".planning/phases/{NN}-{slug}/"
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
write the PLAN.md file to the target directory.
|
|
217
|
+
|
|
218
|
+
</step>
|
|
219
|
+
|
|
220
|
+
<step name="plan_validate">
|
|
221
|
+
|
|
222
|
+
Delegate validation to gsd-plan-checker:
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
@gsd-plan-checker "Validate: .planning/phases/{phase}/{plan}-PLAN.md — check frontmatter completeness, task structure, and GSD conventions. Report any issues."
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
If the checker returns errors:
|
|
229
|
+
- Display the errors to the user
|
|
230
|
+
- Ask the user to resolve issues before the plan is considered imported
|
|
231
|
+
- Do not delete the written file — the user can fix and re-validate manually
|
|
232
|
+
|
|
233
|
+
If the checker returns clean:
|
|
234
|
+
- Display: "Plan validation passed"
|
|
235
|
+
|
|
236
|
+
</step>
|
|
237
|
+
|
|
238
|
+
<step name="plan_finalize">
|
|
239
|
+
|
|
240
|
+
Update `.planning/ROADMAP.md` to reflect the new plan:
|
|
241
|
+
- Add the plan to the Plans list under the correct phase section
|
|
242
|
+
- Include the plan name and description
|
|
243
|
+
|
|
244
|
+
Update `.planning/STATE.md` if appropriate (e.g., increment total plan count).
|
|
245
|
+
|
|
246
|
+
Commit the imported plan and updated files:
|
|
247
|
+
```bash
|
|
248
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs({phase}): import plan from {basename FILEPATH}" --files .planning/phases/{phase}/{plan}-PLAN.md .planning/ROADMAP.md
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
Display completion:
|
|
252
|
+
```
|
|
253
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
254
|
+
GSD ► IMPORT COMPLETE
|
|
255
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
Show: plan filename written, phase directory, validation result, next steps.
|
|
259
|
+
|
|
260
|
+
</step>
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Anti-Patterns
|
|
265
|
+
|
|
266
|
+
Do NOT:
|
|
267
|
+
- Use markdown tables (`|---|`) in the conflict detection report — use plain-text [BLOCKER]/[WARNING]/[INFO] labels
|
|
268
|
+
- write PLAN.md files as `PLAN-01.md` or `plan-01.md` — always use `{NN}-{MM}-PLAN.md`
|
|
269
|
+
- Use `pbr:plan-checker` or `pbr:planner` — use `gsd-plan-checker` and `gsd-planner`
|
|
270
|
+
- write `.planning/.active-skill` — this is a PBR pattern with no GSD equivalent
|
|
271
|
+
- Reference `pbr-tools`, `pbr:`, or `PLAN-BUILD-RUN` anywhere
|
|
272
|
+
- write any PLAN.md file when blockers exist — the safety gate must hold
|
|
273
|
+
- Skip path validation on the --from file argument
|