gsd-opencode 1.20.4 → 1.22.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-codebase-mapper.md +9 -1
- package/agents/gsd-debugger.md +66 -10
- package/agents/gsd-executor.md +36 -16
- package/agents/gsd-integration-checker.md +2 -0
- package/agents/gsd-nyquist-auditor.md +178 -0
- package/agents/gsd-phase-researcher.md +28 -34
- package/agents/gsd-plan-checker.md +42 -78
- package/agents/gsd-planner.md +139 -24
- package/agents/gsd-project-researcher.md +11 -1
- package/agents/gsd-research-synthesizer.md +13 -3
- package/agents/gsd-roadmapper.md +25 -15
- package/agents/gsd-verifier.md +29 -6
- package/bin/dm/lib/constants.js +6 -1
- package/bin/dm/src/services/file-ops.js +14 -1
- package/commands/gsd/gsd-add-phase.md +6 -6
- package/commands/gsd/gsd-add-tests.md +41 -0
- package/commands/gsd/gsd-add-todo.md +7 -7
- package/commands/gsd/gsd-audit-milestone.md +9 -9
- package/commands/gsd/gsd-check-profile.md +3 -3
- package/commands/gsd/gsd-check-todos.md +7 -7
- package/commands/gsd/gsd-cleanup.md +2 -2
- package/commands/gsd/gsd-complete-milestone.md +6 -6
- package/commands/gsd/gsd-debug.md +11 -7
- package/commands/gsd/gsd-discuss-phase.md +26 -19
- package/commands/gsd/gsd-execute-phase.md +13 -13
- package/commands/gsd/gsd-health.md +7 -7
- package/commands/gsd/gsd-help.md +2 -2
- package/commands/gsd/gsd-insert-phase.md +6 -6
- package/commands/gsd/gsd-join-discord.md +1 -1
- package/commands/gsd/gsd-list-phase-assumptions.md +6 -6
- package/commands/gsd/gsd-map-codebase.md +8 -8
- package/commands/gsd/gsd-new-milestone.md +12 -12
- package/commands/gsd/gsd-new-project.md +12 -12
- package/commands/gsd/gsd-pause-work.md +6 -6
- package/commands/gsd/gsd-plan-milestone-gaps.md +9 -9
- package/commands/gsd/gsd-plan-phase.md +14 -13
- package/commands/gsd/gsd-progress.md +8 -8
- package/commands/gsd/gsd-quick.md +17 -13
- package/commands/gsd/gsd-reapply-patches.md +19 -11
- package/commands/gsd/gsd-remove-phase.md +7 -7
- package/commands/gsd/gsd-research-phase.md +12 -11
- package/commands/gsd/gsd-resume-work.md +8 -8
- package/commands/gsd/gsd-set-profile.md +6 -6
- package/commands/gsd/gsd-settings.md +7 -7
- package/commands/gsd/gsd-update.md +5 -5
- package/commands/gsd/gsd-validate-phase.md +35 -0
- package/commands/gsd/gsd-verify-work.md +11 -11
- package/get-shit-done/bin/gsd-tools.cjs +45 -6
- package/get-shit-done/bin/lib/commands.cjs +11 -19
- package/get-shit-done/bin/lib/config.cjs +8 -1
- package/get-shit-done/bin/lib/core.cjs +131 -16
- package/get-shit-done/bin/lib/init.cjs +28 -12
- package/get-shit-done/bin/lib/milestone.cjs +34 -8
- package/get-shit-done/bin/lib/phase.cjs +74 -50
- package/get-shit-done/bin/lib/roadmap.cjs +7 -7
- package/get-shit-done/bin/lib/state.cjs +294 -63
- package/get-shit-done/bin/lib/template.cjs +3 -3
- package/get-shit-done/bin/lib/verify.cjs +56 -8
- package/get-shit-done/references/checkpoints.md +1 -1
- package/get-shit-done/references/decimal-phase-calculation.md +6 -6
- package/get-shit-done/references/git-integration.md +3 -3
- package/get-shit-done/references/git-planning-commit.md +2 -2
- package/get-shit-done/references/model-profile-resolution.md +1 -1
- package/get-shit-done/references/model-profiles.md +1 -0
- package/get-shit-done/references/phase-argument-parsing.md +4 -4
- package/get-shit-done/references/planning-config.md +10 -6
- package/get-shit-done/references/questioning.md +17 -0
- package/get-shit-done/references/verification-patterns.md +1 -1
- package/get-shit-done/templates/DEBUG.md +7 -2
- package/get-shit-done/templates/VALIDATION.md +18 -46
- package/get-shit-done/templates/codebase/structure.md +3 -3
- package/get-shit-done/templates/config.json +2 -2
- package/get-shit-done/templates/context.md +14 -0
- package/get-shit-done/templates/phase-prompt.md +10 -10
- package/get-shit-done/templates/retrospective.md +54 -0
- package/get-shit-done/templates/roadmap.md +1 -1
- package/get-shit-done/workflows/add-phase.md +3 -2
- package/get-shit-done/workflows/add-tests.md +351 -0
- package/get-shit-done/workflows/add-todo.md +4 -3
- package/get-shit-done/workflows/audit-milestone.md +40 -5
- package/get-shit-done/workflows/check-todos.md +3 -2
- package/get-shit-done/workflows/cleanup.md +1 -1
- package/get-shit-done/workflows/complete-milestone.md +69 -5
- package/get-shit-done/workflows/diagnose-issues.md +2 -2
- package/get-shit-done/workflows/discovery-phase.md +6 -6
- package/get-shit-done/workflows/discuss-phase.md +194 -58
- package/get-shit-done/workflows/execute-phase.md +29 -23
- package/get-shit-done/workflows/execute-plan.md +22 -18
- package/get-shit-done/workflows/health.md +5 -2
- package/get-shit-done/workflows/help.md +4 -1
- package/get-shit-done/workflows/insert-phase.md +3 -2
- package/get-shit-done/workflows/map-codebase.md +3 -2
- package/get-shit-done/workflows/new-milestone.md +12 -10
- package/get-shit-done/workflows/new-project.md +44 -49
- package/get-shit-done/workflows/pause-work.md +2 -2
- package/get-shit-done/workflows/plan-milestone-gaps.md +3 -3
- package/get-shit-done/workflows/plan-phase.md +155 -73
- package/get-shit-done/workflows/progress.md +8 -7
- package/get-shit-done/workflows/quick.md +158 -10
- package/get-shit-done/workflows/remove-phase.md +5 -4
- package/get-shit-done/workflows/research-phase.md +5 -4
- package/get-shit-done/workflows/resume-project.md +3 -2
- package/get-shit-done/workflows/set-profile.md +3 -2
- package/get-shit-done/workflows/settings.md +6 -6
- package/get-shit-done/workflows/transition.md +5 -5
- package/get-shit-done/workflows/update.md +45 -19
- package/get-shit-done/workflows/validate-phase.md +167 -0
- package/get-shit-done/workflows/verify-phase.md +10 -9
- package/get-shit-done/workflows/verify-work.md +18 -4
- package/package.json +1 -1
|
@@ -16,16 +16,24 @@ read STATE.md before any operation to load project context.
|
|
|
16
16
|
Load all context in one call:
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
|
-
INIT=$(node
|
|
19
|
+
INIT=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" init execute-phase "${PHASE_ARG}")
|
|
20
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
20
21
|
```
|
|
21
22
|
|
|
22
|
-
Parse JSON for: `executor_model`, `verifier_model`, `commit_docs`, `parallelization`, `branching_strategy`, `branch_name`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `plans`, `incomplete_plans`, `plan_count`, `incomplete_count`, `state_exists`, `roadmap_exists`.
|
|
23
|
+
Parse JSON for: `executor_model`, `verifier_model`, `commit_docs`, `parallelization`, `branching_strategy`, `branch_name`, `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `plans`, `incomplete_plans`, `plan_count`, `incomplete_count`, `state_exists`, `roadmap_exists`, `phase_req_ids`.
|
|
23
24
|
|
|
24
25
|
**If `phase_found` is false:** Error — phase directory not found.
|
|
25
26
|
**If `plan_count` is 0:** Error — no plans found in phase.
|
|
26
27
|
**If `state_exists` is false but `.planning/` exists:** Offer reconstruct or continue.
|
|
27
28
|
|
|
28
29
|
When `parallelization` is false, plans within a wave execute sequentially.
|
|
30
|
+
|
|
31
|
+
**Sync chain flag with intent** — if user invoked manually (no `--auto`), clear the ephemeral chain flag from any previous interrupted `--auto` chain. This does NOT touch `workflow.auto_advance` (the user's persistent settings preference). Must happen before any config reads (checkpoint handling also reads auto-advance flags):
|
|
32
|
+
```bash
|
|
33
|
+
if [[ ! "$ARGUMENTS" =~ --auto ]]; then
|
|
34
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-set workflow._auto_chain_active false 2>/dev/null
|
|
35
|
+
fi
|
|
36
|
+
```
|
|
29
37
|
</step>
|
|
30
38
|
|
|
31
39
|
<step name="handle_branching">
|
|
@@ -51,7 +59,7 @@ Report: "Found {plan_count} plans in {phase_dir} ({incomplete_count} incomplete)
|
|
|
51
59
|
Load plan inventory with wave grouping in one call:
|
|
52
60
|
|
|
53
61
|
```bash
|
|
54
|
-
PLAN_INDEX=$(node
|
|
62
|
+
PLAN_INDEX=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" phase-plan-index "${PHASE_NUMBER}")
|
|
55
63
|
```
|
|
56
64
|
|
|
57
65
|
Parse JSON for: `phase`, `plans[]` (each with `id`, `wave`, `autonomous`, `objective`, `files_modified`, `task_count`, `has_summary`), `waves` (map of wave number → plan IDs), `incomplete`, `has_checkpoints`.
|
|
@@ -110,10 +118,10 @@ Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`
|
|
|
110
118
|
</objective>
|
|
111
119
|
|
|
112
120
|
<execution_context>
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
121
|
+
@$HOME/.config/opencode/get-shit-done/workflows/execute-plan.md
|
|
122
|
+
@$HOME/.config/opencode/get-shit-done/templates/summary.md
|
|
123
|
+
@$HOME/.config/opencode/get-shit-done/references/checkpoints.md
|
|
124
|
+
@$HOME/.config/opencode/get-shit-done/references/tdd.md
|
|
117
125
|
</execution_context>
|
|
118
126
|
|
|
119
127
|
<files_to_read>
|
|
@@ -122,7 +130,7 @@ Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`
|
|
|
122
130
|
- .planning/STATE.md (State)
|
|
123
131
|
- .planning/config.json (Config, if exists)
|
|
124
132
|
- ./AGENTS.md (Project instructions, if exists — follow project-specific guidelines and coding conventions)
|
|
125
|
-
- .agents/skills/ (Project skills, if exists — list skills, read SKILL.md for each, follow relevant rules during implementation)
|
|
133
|
+
- .OpenCode/skills/ or .agents/skills/ (Project skills, if either exists — list skills, read SKILL.md for each, follow relevant rules during implementation)
|
|
126
134
|
</files_to_read>
|
|
127
135
|
|
|
128
136
|
<success_criteria>
|
|
@@ -179,12 +187,13 @@ Plans with `autonomous: false` require user interaction.
|
|
|
179
187
|
|
|
180
188
|
**Auto-mode checkpoint handling:**
|
|
181
189
|
|
|
182
|
-
read auto-advance config:
|
|
190
|
+
read auto-advance config (chain flag + user preference):
|
|
183
191
|
```bash
|
|
184
|
-
|
|
192
|
+
AUTO_CHAIN=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-get workflow._auto_chain_active 2>/dev/null || echo "false")
|
|
193
|
+
AUTO_CFG=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-get workflow.auto_advance 2>/dev/null || echo "false")
|
|
185
194
|
```
|
|
186
195
|
|
|
187
|
-
When executor returns a checkpoint AND `AUTO_CFG` is `"true"
|
|
196
|
+
When executor returns a checkpoint AND (`AUTO_CHAIN` is `"true"` OR `AUTO_CFG` is `"true"`):
|
|
188
197
|
- **human-verify** → Auto-spawn continuation agent with `{user_response}` = `"approved"`. Log `⚡ Auto-approved checkpoint`.
|
|
189
198
|
- **decision** → Auto-spawn continuation agent with `{user_response}` = first option from checkpoint details. Log `⚡ Auto-selected: [option]`.
|
|
190
199
|
- **human-action** → Present to user (existing behavior below). Auth gates cannot be automated.
|
|
@@ -256,7 +265,7 @@ fi
|
|
|
256
265
|
|
|
257
266
|
**2. Find parent UAT file:**
|
|
258
267
|
```bash
|
|
259
|
-
PARENT_INFO=$(node
|
|
268
|
+
PARENT_INFO=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" find-phase "${PARENT_PHASE}" --raw)
|
|
260
269
|
# Extract directory from PARENT_INFO JSON, then find UAT file in that directory
|
|
261
270
|
```
|
|
262
271
|
|
|
@@ -287,17 +296,13 @@ mv .planning/debug/{slug}.md .planning/debug/resolved/
|
|
|
287
296
|
|
|
288
297
|
**6. Commit updated artifacts:**
|
|
289
298
|
```bash
|
|
290
|
-
node
|
|
299
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs(phase-${PARENT_PHASE}): resolve UAT gaps and debug sessions after ${PHASE_NUMBER} gap closure" --files .planning/phases/*${PARENT_PHASE}*/*-UAT.md .planning/debug/resolved/*.md
|
|
291
300
|
```
|
|
292
301
|
</step>
|
|
293
302
|
|
|
294
303
|
<step name="verify_phase_goal">
|
|
295
304
|
Verify phase achieved its GOAL, not just completed tasks.
|
|
296
305
|
|
|
297
|
-
```bash
|
|
298
|
-
PHASE_REQ_IDS=$(node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "${PHASE_NUMBER}" | jq -r '.section' | grep -i "Requirements:" | sed 's/.*Requirements:\*\*\s*//' | sed 's/[\[\]]//g')
|
|
299
|
-
```
|
|
300
|
-
|
|
301
306
|
```
|
|
302
307
|
task(
|
|
303
308
|
prompt="Verify phase {phase_number} goal achievement.
|
|
@@ -362,7 +367,7 @@ Gap closure cycle: `/gsd-plan-phase {X} --gaps` reads VERIFICATION.md → create
|
|
|
362
367
|
**Mark phase complete and update all tracking files:**
|
|
363
368
|
|
|
364
369
|
```bash
|
|
365
|
-
COMPLETION=$(node
|
|
370
|
+
COMPLETION=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" phase complete "${PHASE_NUMBER}")
|
|
366
371
|
```
|
|
367
372
|
|
|
368
373
|
The CLI handles:
|
|
@@ -375,7 +380,7 @@ The CLI handles:
|
|
|
375
380
|
Extract from result: `next_phase`, `next_phase_name`, `is_last_phase`.
|
|
376
381
|
|
|
377
382
|
```bash
|
|
378
|
-
node
|
|
383
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs(phase-{X}): complete phase execution" --files .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md {phase_dir}/*-VERIFICATION.md
|
|
379
384
|
```
|
|
380
385
|
</step>
|
|
381
386
|
|
|
@@ -409,12 +414,13 @@ STOP. Do not proceed to auto-advance or transition.
|
|
|
409
414
|
**Auto-advance detection:**
|
|
410
415
|
|
|
411
416
|
1. Parse `--auto` flag from $ARGUMENTS
|
|
412
|
-
2. read
|
|
417
|
+
2. read both the chain flag and user preference (chain flag already synced in init step):
|
|
413
418
|
```bash
|
|
414
|
-
|
|
419
|
+
AUTO_CHAIN=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-get workflow._auto_chain_active 2>/dev/null || echo "false")
|
|
420
|
+
AUTO_CFG=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-get workflow.auto_advance 2>/dev/null || echo "false")
|
|
415
421
|
```
|
|
416
422
|
|
|
417
|
-
**If `--auto` flag present OR `AUTO_CFG` is true (AND verification passed with no gaps):**
|
|
423
|
+
**If `--auto` flag present OR `AUTO_CHAIN` is true OR `AUTO_CFG` is true (AND verification passed with no gaps):**
|
|
418
424
|
|
|
419
425
|
```
|
|
420
426
|
╔══════════════════════════════════════════╗
|
|
@@ -425,7 +431,7 @@ STOP. Do not proceed to auto-advance or transition.
|
|
|
425
431
|
|
|
426
432
|
Execute the transition workflow inline (do NOT use task — orchestrator context is ~10-15%, transition needs phase completion data already in context):
|
|
427
433
|
|
|
428
|
-
read and follow
|
|
434
|
+
read and follow `$HOME/.config/opencode/get-shit-done/workflows/transition.md`, passing through the `--auto` flag so it propagates to the next phase invocation.
|
|
429
435
|
|
|
430
436
|
**If neither `--auto` nor `AUTO_CFG` is true:**
|
|
431
437
|
|
|
@@ -6,7 +6,7 @@ Execute a phase prompt (PLAN.md) and create the outcome summary (SUMMARY.md).
|
|
|
6
6
|
read STATE.md before any operation to load project context.
|
|
7
7
|
read config.json for planning behavior settings.
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
@$HOME/.config/opencode/get-shit-done/references/git-integration.md
|
|
10
10
|
</required_reading>
|
|
11
11
|
|
|
12
12
|
<process>
|
|
@@ -15,7 +15,8 @@ read config.json for planning behavior settings.
|
|
|
15
15
|
Load execution context (paths only to minimize orchestrator context):
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
INIT=$(node
|
|
18
|
+
INIT=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" init execute-phase "${PHASE}")
|
|
19
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
19
20
|
```
|
|
20
21
|
|
|
21
22
|
Extract from init JSON: `executor_model`, `commit_docs`, `phase_dir`, `phase_number`, `plans`, `summaries`, `incomplete_plans`, `state_path`, `config_path`.
|
|
@@ -118,11 +119,13 @@ Pattern B only (verify-only checkpoints). Skip for A/C.
|
|
|
118
119
|
cat .planning/phases/XX-name/{phase}-{plan}-PLAN.md
|
|
119
120
|
```
|
|
120
121
|
This IS the execution instructions. Follow exactly. If plan references CONTEXT.md: honor user's vision throughout.
|
|
122
|
+
|
|
123
|
+
**If plan contains `<interfaces>` block:** These are pre-extracted type definitions and contracts. Use them directly — do NOT re-read the source files to discover types. The planner already extracted what you need.
|
|
121
124
|
</step>
|
|
122
125
|
|
|
123
126
|
<step name="previous_phase_check">
|
|
124
127
|
```bash
|
|
125
|
-
node
|
|
128
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" phases list --type summaries --raw
|
|
126
129
|
# Extract the second-to-last summary from the JSON result
|
|
127
130
|
```
|
|
128
131
|
If previous SUMMARY has unresolved "Issues Encountered" or "Next Phase Readiness" blockers: question(header="Previous Issues", options: "Proceed anyway" | "Address first" | "Review previous").
|
|
@@ -220,7 +223,7 @@ For `type: tdd` plans — RED-GREEN-REFACTOR:
|
|
|
220
223
|
|
|
221
224
|
Errors: RED doesn't fail → investigate test/existing feature. GREEN doesn't pass → debug, iterate. REFACTOR breaks → undo.
|
|
222
225
|
|
|
223
|
-
See
|
|
226
|
+
See `$HOME/.config/opencode/get-shit-done/references/tdd.md` for structure.
|
|
224
227
|
</tdd_plan_execution>
|
|
225
228
|
|
|
226
229
|
<task_commit>
|
|
@@ -272,7 +275,7 @@ Display: `CHECKPOINT: [Type]` box → Progress {X}/{Y} → task name → type-sp
|
|
|
272
275
|
|
|
273
276
|
After response: verify if specified. Pass → continue. Fail → inform, wait. WAIT for user — do NOT hallucinate completion.
|
|
274
277
|
|
|
275
|
-
See
|
|
278
|
+
See $HOME/.config/opencode/get-shit-done/references/checkpoints.md for details.
|
|
276
279
|
</step>
|
|
277
280
|
|
|
278
281
|
<step name="checkpoint_return_for_orchestrator">
|
|
@@ -310,11 +313,11 @@ fi
|
|
|
310
313
|
grep -A 50 "^user_setup:" .planning/phases/XX-name/{phase}-{plan}-PLAN.md | head -50
|
|
311
314
|
```
|
|
312
315
|
|
|
313
|
-
If user_setup exists: create `{phase}-USER-SETUP.md` using template
|
|
316
|
+
If user_setup exists: create `{phase}-USER-SETUP.md` using template `$HOME/.config/opencode/get-shit-done/templates/user-setup.md`. Per service: env vars table, account setup checklist, dashboard config, local dev notes, verification commands. Status "Incomplete". Set `USER_SETUP_CREATED=true`. If empty/missing: skip.
|
|
314
317
|
</step>
|
|
315
318
|
|
|
316
319
|
<step name="create_summary">
|
|
317
|
-
Create `{phase}-{plan}-SUMMARY.md` at `.planning/phases/XX-name/`. Use
|
|
320
|
+
Create `{phase}-{plan}-SUMMARY.md` at `.planning/phases/XX-name/`. Use `$HOME/.config/opencode/get-shit-done/templates/summary.md`.
|
|
318
321
|
|
|
319
322
|
**Frontmatter:** phase, plan, subsystem, tags | requires/provides/affects | tech-stack.added/patterns | key-files.created/modified | key-decisions | requirements-completed (**MUST** copy `requirements` array from PLAN.md frontmatter verbatim) | duration ($DURATION), completed ($PLAN_END_TIME date).
|
|
320
323
|
|
|
@@ -332,13 +335,13 @@ Update STATE.md using gsd-tools:
|
|
|
332
335
|
|
|
333
336
|
```bash
|
|
334
337
|
# Advance plan counter (handles last-plan edge case)
|
|
335
|
-
node
|
|
338
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state advance-plan
|
|
336
339
|
|
|
337
340
|
# Recalculate progress bar from disk state
|
|
338
|
-
node
|
|
341
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state update-progress
|
|
339
342
|
|
|
340
343
|
# Record execution metrics
|
|
341
|
-
node
|
|
344
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state record-metric \
|
|
342
345
|
--phase "${PHASE}" --plan "${PLAN}" --duration "${DURATION}" \
|
|
343
346
|
--tasks "${TASK_COUNT}" --files "${FILE_COUNT}"
|
|
344
347
|
```
|
|
@@ -349,11 +352,12 @@ From SUMMARY: Extract decisions and add to STATE.md:
|
|
|
349
352
|
|
|
350
353
|
```bash
|
|
351
354
|
# Add each decision from SUMMARY key-decisions
|
|
352
|
-
|
|
353
|
-
|
|
355
|
+
# Prefer file inputs for shell-safe text (preserves `$`, `*`, etc. exactly)
|
|
356
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state add-decision \
|
|
357
|
+
--phase "${PHASE}" --summary-file "${DECISION_TEXT_FILE}" --rationale-file "${RATIONALE_FILE}"
|
|
354
358
|
|
|
355
359
|
# Add blockers if any found
|
|
356
|
-
node
|
|
360
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state add-blocker --text-file "${BLOCKER_TEXT_FILE}"
|
|
357
361
|
```
|
|
358
362
|
</step>
|
|
359
363
|
|
|
@@ -361,7 +365,7 @@ node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs state add-blocker "Block
|
|
|
361
365
|
Update session info using gsd-tools:
|
|
362
366
|
|
|
363
367
|
```bash
|
|
364
|
-
node
|
|
368
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state record-session \
|
|
365
369
|
--stopped-at "Completed ${PHASE}-${PLAN}-PLAN.md" \
|
|
366
370
|
--resume-file "None"
|
|
367
371
|
```
|
|
@@ -375,7 +379,7 @@ If SUMMARY "Issues Encountered" ≠ "None": yolo → log and continue. Interacti
|
|
|
375
379
|
|
|
376
380
|
<step name="update_roadmap">
|
|
377
381
|
```bash
|
|
378
|
-
node
|
|
382
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" roadmap update-plan-progress "${PHASE}"
|
|
379
383
|
```
|
|
380
384
|
Counts PLAN vs SUMMARY files on disk. Updates progress table row with correct count and status (`In Progress` or `Complete` with date).
|
|
381
385
|
</step>
|
|
@@ -384,7 +388,7 @@ Counts PLAN vs SUMMARY files on disk. Updates progress table row with correct co
|
|
|
384
388
|
Mark completed requirements from the PLAN.md frontmatter `requirements:` field:
|
|
385
389
|
|
|
386
390
|
```bash
|
|
387
|
-
node
|
|
391
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" requirements mark-complete ${REQ_IDS}
|
|
388
392
|
```
|
|
389
393
|
|
|
390
394
|
Extract requirement IDs from the plan's frontmatter (e.g., `requirements: [AUTH-01, AUTH-02]`). If no requirements field, skip.
|
|
@@ -394,7 +398,7 @@ Extract requirement IDs from the plan's frontmatter (e.g., `requirements: [AUTH-
|
|
|
394
398
|
task code already committed per-task. Commit plan metadata:
|
|
395
399
|
|
|
396
400
|
```bash
|
|
397
|
-
node
|
|
401
|
+
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
|
|
398
402
|
```
|
|
399
403
|
</step>
|
|
400
404
|
|
|
@@ -409,7 +413,7 @@ git diff --name-only ${FIRST_TASK}^..HEAD 2>/dev/null
|
|
|
409
413
|
Update only structural changes: new src/ dir → STRUCTURE.md | deps → STACK.md | file pattern → CONVENTIONS.md | API client → INTEGRATIONS.md | config → STACK.md | renamed → update paths. Skip code-only/bugfix/content changes.
|
|
410
414
|
|
|
411
415
|
```bash
|
|
412
|
-
node
|
|
416
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "" --files .planning/codebase/*.md --amend
|
|
413
417
|
```
|
|
414
418
|
</step>
|
|
415
419
|
|
|
@@ -25,7 +25,7 @@ fi
|
|
|
25
25
|
**Run health validation:**
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
node
|
|
28
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" validate health $REPAIR_FLAG
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
Parse JSON output:
|
|
@@ -112,7 +112,7 @@ If yes, re-run with --repair flag and display results.
|
|
|
112
112
|
Re-run health check without --repair to confirm issues are resolved:
|
|
113
113
|
|
|
114
114
|
```bash
|
|
115
|
-
node
|
|
115
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" validate health
|
|
116
116
|
```
|
|
117
117
|
|
|
118
118
|
Report final status.
|
|
@@ -136,6 +136,8 @@ Report final status.
|
|
|
136
136
|
| W005 | warning | Phase directory naming mismatch | No |
|
|
137
137
|
| W006 | warning | Phase in ROADMAP but no directory | No |
|
|
138
138
|
| W007 | warning | Phase on disk but not in ROADMAP | No |
|
|
139
|
+
| W008 | warning | config.json: workflow.nyquist_validation absent (defaults to enabled but agents may skip) | Yes |
|
|
140
|
+
| W009 | warning | Phase has Validation Architecture in RESEARCH.md but no VALIDATION.md | No |
|
|
139
141
|
| I001 | info | Plan without SUMMARY (may be in progress) | No |
|
|
140
142
|
|
|
141
143
|
</error_codes>
|
|
@@ -147,6 +149,7 @@ Report final status.
|
|
|
147
149
|
| createConfig | Create config.json with defaults | None |
|
|
148
150
|
| resetConfig | Delete + recreate config.json | Loses custom settings |
|
|
149
151
|
| regenerateState | Create STATE.md from ROADMAP structure | Loses session history |
|
|
152
|
+
| addNyquistKey | Add workflow.nyquist_validation: true to config.json | None — matches existing default |
|
|
150
153
|
|
|
151
154
|
**Not repairable (too risky):**
|
|
152
155
|
- PROJECT.md, ROADMAP.md content
|
|
@@ -99,6 +99,8 @@ Create detailed execution plan for a specific phase.
|
|
|
99
99
|
Usage: `/gsd-plan-phase 1`
|
|
100
100
|
Result: Creates `.planning/phases/01-foundation/01-01-PLAN.md`
|
|
101
101
|
|
|
102
|
+
**PRD Express Path:** Pass `--prd path/to/requirements.md` to skip discuss-phase entirely. Your PRD becomes locked decisions in CONTEXT.md. Useful when you already have clear acceptance criteria.
|
|
103
|
+
|
|
102
104
|
### Execution
|
|
103
105
|
|
|
104
106
|
**`/gsd-execute-phase <phase-number>`**
|
|
@@ -296,7 +298,7 @@ Usage: `/gsd-plan-milestone-gaps`
|
|
|
296
298
|
Configure workflow toggles and model profile interactively.
|
|
297
299
|
|
|
298
300
|
- Toggle researcher, plan checker, verifier agents
|
|
299
|
-
- Select model profile (simple/smart/
|
|
301
|
+
- Select model profile (simple/smart/genius)
|
|
300
302
|
- Updates `.planning/config.json`
|
|
301
303
|
|
|
302
304
|
Usage: `/gsd-settings`
|
|
@@ -351,6 +353,7 @@ Usage: `/gsd-join-discord`
|
|
|
351
353
|
├── PROJECT.md # Project vision
|
|
352
354
|
├── ROADMAP.md # Current phase breakdown
|
|
353
355
|
├── STATE.md # Project memory & context
|
|
356
|
+
├── RETROSPECTIVE.md # Living retrospective (updated per milestone)
|
|
354
357
|
├── config.json # Workflow mode & gates
|
|
355
358
|
├── todos/ # Captured ideas and tasks
|
|
356
359
|
│ ├── pending/ # Todos waiting to be worked on
|
|
@@ -34,7 +34,8 @@ Validate first argument is an integer.
|
|
|
34
34
|
Load phase operation context:
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
INIT=$(node
|
|
37
|
+
INIT=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" init phase-op "${after_phase}")
|
|
38
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
38
39
|
```
|
|
39
40
|
|
|
40
41
|
Check `roadmap_exists` from init JSON. If false:
|
|
@@ -48,7 +49,7 @@ Exit.
|
|
|
48
49
|
**Delegate the phase insertion to gsd-tools:**
|
|
49
50
|
|
|
50
51
|
```bash
|
|
51
|
-
RESULT=$(node
|
|
52
|
+
RESULT=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" phase insert "${after_phase}" "${description}")
|
|
52
53
|
```
|
|
53
54
|
|
|
54
55
|
The CLI handles:
|
|
@@ -26,7 +26,8 @@ Documents are reference material for OpenCode when planning/executing. Always in
|
|
|
26
26
|
Load codebase mapping context:
|
|
27
27
|
|
|
28
28
|
```bash
|
|
29
|
-
INIT=$(node
|
|
29
|
+
INIT=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" init map-codebase)
|
|
30
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
30
31
|
```
|
|
31
32
|
|
|
32
33
|
Extract from init JSON: `mapper_model`, `commit_docs`, `codebase_dir`, `existing_maps`, `has_maps`, `codebase_dir_exists`.
|
|
@@ -250,7 +251,7 @@ Continue to commit_codebase_map.
|
|
|
250
251
|
Commit the codebase map:
|
|
251
252
|
|
|
252
253
|
```bash
|
|
253
|
-
node
|
|
254
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs: map existing codebase" --files .planning/codebase/*.md
|
|
254
255
|
```
|
|
255
256
|
|
|
256
257
|
Continue to offer_next.
|
|
@@ -27,8 +27,9 @@ read all files referenced by the invoking prompt's execution_context before star
|
|
|
27
27
|
|
|
28
28
|
**If no context file:**
|
|
29
29
|
- Present what shipped in last milestone
|
|
30
|
-
- Ask: "What do you want to build next?"
|
|
31
|
-
-
|
|
30
|
+
- Ask inline (freeform, NOT question): "What do you want to build next?"
|
|
31
|
+
- Wait for their response, then use question to probe specifics
|
|
32
|
+
- If user selects "Other" at any point to provide freeform input, ask follow-up as plain text — not another question
|
|
32
33
|
|
|
33
34
|
## 3. Determine Milestone Version
|
|
34
35
|
|
|
@@ -71,13 +72,14 @@ Keep Accumulated Context section from previous milestone.
|
|
|
71
72
|
Delete MILESTONE-CONTEXT.md if exists (consumed).
|
|
72
73
|
|
|
73
74
|
```bash
|
|
74
|
-
node
|
|
75
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs: start milestone v[X.Y] [Name]" --files .planning/PROJECT.md .planning/STATE.md
|
|
75
76
|
```
|
|
76
77
|
|
|
77
78
|
## 7. Load Context and Resolve Models
|
|
78
79
|
|
|
79
80
|
```bash
|
|
80
|
-
INIT=$(node
|
|
81
|
+
INIT=$(node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" init new-milestone)
|
|
82
|
+
if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
|
|
81
83
|
```
|
|
82
84
|
|
|
83
85
|
Extract from init JSON: `researcher_model`, `synthesizer_model`, `roadmapper_model`, `commit_docs`, `research_enabled`, `current_milestone`, `project_exists`, `roadmap_exists`.
|
|
@@ -92,10 +94,10 @@ question: "Research the domain ecosystem for new features before defining requir
|
|
|
92
94
|
|
|
93
95
|
```bash
|
|
94
96
|
# If "Research first": persist true
|
|
95
|
-
node
|
|
97
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-set workflow.research true
|
|
96
98
|
|
|
97
99
|
# If "Skip research": persist false
|
|
98
|
-
node
|
|
100
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" config-set workflow.research false
|
|
99
101
|
```
|
|
100
102
|
|
|
101
103
|
**If "Research first":**
|
|
@@ -138,7 +140,7 @@ Focus ONLY on what's needed for the NEW features.
|
|
|
138
140
|
|
|
139
141
|
<output>
|
|
140
142
|
write to: .planning/research/{FILE}
|
|
141
|
-
Use template:
|
|
143
|
+
Use template: $HOME/.config/opencode/get-shit-done/templates/research-project/{FILE}
|
|
142
144
|
</output>
|
|
143
145
|
", subagent_type="gsd-project-researcher", model="{researcher_model}", description="{DIMENSION} research")
|
|
144
146
|
```
|
|
@@ -167,7 +169,7 @@ Synthesize research outputs into SUMMARY.md.
|
|
|
167
169
|
</files_to_read>
|
|
168
170
|
|
|
169
171
|
write to: .planning/research/SUMMARY.md
|
|
170
|
-
Use template:
|
|
172
|
+
Use template: $HOME/.config/opencode/get-shit-done/templates/research-project/SUMMARY.md
|
|
171
173
|
Commit after writing.
|
|
172
174
|
", subagent_type="gsd-research-synthesizer", model="{synthesizer_model}", description="Synthesize research")
|
|
173
175
|
```
|
|
@@ -253,7 +255,7 @@ If "adjust": Return to scoping.
|
|
|
253
255
|
|
|
254
256
|
**Commit requirements:**
|
|
255
257
|
```bash
|
|
256
|
-
node
|
|
258
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs: define milestone v[X.Y] requirements" --files .planning/REQUIREMENTS.md
|
|
257
259
|
```
|
|
258
260
|
|
|
259
261
|
## 10. Create Roadmap
|
|
@@ -330,7 +332,7 @@ Success criteria:
|
|
|
330
332
|
|
|
331
333
|
**Commit roadmap** (after approval):
|
|
332
334
|
```bash
|
|
333
|
-
node
|
|
335
|
+
node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" commit "docs: create milestone v[X.Y] roadmap ([N] phases)" --files .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md
|
|
334
336
|
```
|
|
335
337
|
|
|
336
338
|
## 11. Done
|