gsd-opencode 1.20.4 → 1.22.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/agents/gsd-codebase-mapper.md +10 -1
  2. package/agents/gsd-debugger.md +67 -10
  3. package/agents/gsd-executor.md +37 -16
  4. package/agents/gsd-integration-checker.md +3 -0
  5. package/agents/gsd-nyquist-auditor.md +179 -0
  6. package/agents/gsd-phase-researcher.md +29 -34
  7. package/agents/gsd-plan-checker.md +43 -78
  8. package/agents/gsd-planner.md +140 -24
  9. package/agents/gsd-project-researcher.md +12 -1
  10. package/agents/gsd-research-synthesizer.md +14 -3
  11. package/agents/gsd-roadmapper.md +26 -15
  12. package/agents/gsd-verifier.md +30 -6
  13. package/bin/dm/lib/constants.js +6 -1
  14. package/bin/dm/src/services/file-ops.js +14 -1
  15. package/commands/gsd/gsd-add-phase.md +6 -6
  16. package/commands/gsd/gsd-add-tests.md +41 -0
  17. package/commands/gsd/gsd-add-todo.md +7 -7
  18. package/commands/gsd/gsd-audit-milestone.md +9 -9
  19. package/commands/gsd/gsd-check-profile.md +3 -3
  20. package/commands/gsd/gsd-check-todos.md +7 -7
  21. package/commands/gsd/gsd-cleanup.md +2 -2
  22. package/commands/gsd/gsd-complete-milestone.md +6 -6
  23. package/commands/gsd/gsd-debug.md +11 -7
  24. package/commands/gsd/gsd-discuss-phase.md +26 -19
  25. package/commands/gsd/gsd-execute-phase.md +13 -13
  26. package/commands/gsd/gsd-health.md +7 -7
  27. package/commands/gsd/gsd-help.md +2 -2
  28. package/commands/gsd/gsd-insert-phase.md +6 -6
  29. package/commands/gsd/gsd-join-discord.md +1 -1
  30. package/commands/gsd/gsd-list-phase-assumptions.md +6 -6
  31. package/commands/gsd/gsd-map-codebase.md +8 -8
  32. package/commands/gsd/gsd-new-milestone.md +12 -12
  33. package/commands/gsd/gsd-new-project.md +12 -12
  34. package/commands/gsd/gsd-pause-work.md +6 -6
  35. package/commands/gsd/gsd-plan-milestone-gaps.md +9 -9
  36. package/commands/gsd/gsd-plan-phase.md +14 -13
  37. package/commands/gsd/gsd-progress.md +8 -8
  38. package/commands/gsd/gsd-quick.md +17 -13
  39. package/commands/gsd/gsd-reapply-patches.md +20 -9
  40. package/commands/gsd/gsd-remove-phase.md +7 -7
  41. package/commands/gsd/gsd-research-phase.md +12 -11
  42. package/commands/gsd/gsd-resume-work.md +8 -8
  43. package/commands/gsd/gsd-set-profile.md +6 -6
  44. package/commands/gsd/gsd-settings.md +7 -7
  45. package/commands/gsd/gsd-update.md +5 -5
  46. package/commands/gsd/gsd-validate-phase.md +35 -0
  47. package/commands/gsd/gsd-verify-work.md +11 -11
  48. package/get-shit-done/bin/gsd-tools.cjs +45 -6
  49. package/get-shit-done/bin/lib/commands.cjs +11 -19
  50. package/get-shit-done/bin/lib/config.cjs +8 -1
  51. package/get-shit-done/bin/lib/core.cjs +131 -16
  52. package/get-shit-done/bin/lib/init.cjs +28 -12
  53. package/get-shit-done/bin/lib/milestone.cjs +34 -8
  54. package/get-shit-done/bin/lib/phase.cjs +74 -50
  55. package/get-shit-done/bin/lib/roadmap.cjs +7 -7
  56. package/get-shit-done/bin/lib/state.cjs +294 -63
  57. package/get-shit-done/bin/lib/template.cjs +3 -3
  58. package/get-shit-done/bin/lib/verify.cjs +56 -8
  59. package/get-shit-done/references/checkpoints.md +1 -1
  60. package/get-shit-done/references/decimal-phase-calculation.md +6 -6
  61. package/get-shit-done/references/git-integration.md +3 -3
  62. package/get-shit-done/references/git-planning-commit.md +2 -2
  63. package/get-shit-done/references/model-profile-resolution.md +1 -1
  64. package/get-shit-done/references/model-profiles.md +1 -0
  65. package/get-shit-done/references/phase-argument-parsing.md +4 -4
  66. package/get-shit-done/references/planning-config.md +10 -6
  67. package/get-shit-done/references/questioning.md +17 -0
  68. package/get-shit-done/references/verification-patterns.md +1 -1
  69. package/get-shit-done/templates/DEBUG.md +7 -2
  70. package/get-shit-done/templates/VALIDATION.md +18 -46
  71. package/get-shit-done/templates/codebase/structure.md +3 -3
  72. package/get-shit-done/templates/config.json +2 -2
  73. package/get-shit-done/templates/context.md +14 -0
  74. package/get-shit-done/templates/phase-prompt.md +10 -10
  75. package/get-shit-done/templates/retrospective.md +54 -0
  76. package/get-shit-done/templates/roadmap.md +1 -1
  77. package/get-shit-done/workflows/add-phase.md +3 -2
  78. package/get-shit-done/workflows/add-tests.md +351 -0
  79. package/get-shit-done/workflows/add-todo.md +4 -3
  80. package/get-shit-done/workflows/audit-milestone.md +40 -5
  81. package/get-shit-done/workflows/check-todos.md +3 -2
  82. package/get-shit-done/workflows/cleanup.md +1 -1
  83. package/get-shit-done/workflows/complete-milestone.md +69 -5
  84. package/get-shit-done/workflows/diagnose-issues.md +2 -2
  85. package/get-shit-done/workflows/discovery-phase.md +6 -6
  86. package/get-shit-done/workflows/discuss-phase.md +194 -58
  87. package/get-shit-done/workflows/execute-phase.md +29 -23
  88. package/get-shit-done/workflows/execute-plan.md +22 -18
  89. package/get-shit-done/workflows/health.md +5 -2
  90. package/get-shit-done/workflows/help.md +4 -1
  91. package/get-shit-done/workflows/insert-phase.md +3 -2
  92. package/get-shit-done/workflows/map-codebase.md +3 -2
  93. package/get-shit-done/workflows/new-milestone.md +12 -10
  94. package/get-shit-done/workflows/new-project.md +44 -49
  95. package/get-shit-done/workflows/pause-work.md +2 -2
  96. package/get-shit-done/workflows/plan-milestone-gaps.md +3 -3
  97. package/get-shit-done/workflows/plan-phase.md +155 -73
  98. package/get-shit-done/workflows/progress.md +8 -7
  99. package/get-shit-done/workflows/quick.md +158 -10
  100. package/get-shit-done/workflows/remove-phase.md +5 -4
  101. package/get-shit-done/workflows/research-phase.md +5 -4
  102. package/get-shit-done/workflows/resume-project.md +3 -2
  103. package/get-shit-done/workflows/set-profile.md +3 -2
  104. package/get-shit-done/workflows/settings.md +6 -6
  105. package/get-shit-done/workflows/transition.md +5 -5
  106. package/get-shit-done/workflows/update.md +45 -19
  107. package/get-shit-done/workflows/validate-phase.md +167 -0
  108. package/get-shit-done/workflows/verify-phase.md +10 -9
  109. package/get-shit-done/workflows/verify-work.md +18 -4
  110. 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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs init execute-phase "${PHASE_ARG}")
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs phase-plan-index "${PHASE_NUMBER}")
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
- @~/.config/opencode/get-shit-done/workflows/execute-plan.md
114
- @~/.config/opencode/get-shit-done/templates/summary.md
115
- @~/.config/opencode/get-shit-done/references/checkpoints.md
116
- @~/.config/opencode/get-shit-done/references/tdd.md
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
- AUTO_CFG=$(node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false")
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs find-phase "${PARENT_PHASE}" --raw)
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 ~/.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
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs phase complete "${PHASE_NUMBER}")
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 ~/.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
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 `workflow.auto_advance` from config:
417
+ 2. read both the chain flag and user preference (chain flag already synced in init step):
413
418
  ```bash
414
- AUTO_CFG=$(node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false")
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 `~/.config/opencode/get-shit-done/workflows/transition.md`, passing through the `--auto` flag so it propagates to the next phase invocation.
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
- @~/.config/opencode/get-shit-done/references/git-integration.md
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs init execute-phase "${PHASE}")
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs phases list --type summaries --raw
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 `~/.config/opencode/get-shit-done/references/tdd.md` for structure.
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 ~/.config/opencode/get-shit-done/references/checkpoints.md for details.
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 `~/.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.
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 `~/.config/opencode/get-shit-done/templates/summary.md`.
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs state advance-plan
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs state update-progress
341
+ node "$HOME/.config/opencode/get-shit-done/bin/gsd-tools.cjs" state update-progress
339
342
 
340
343
  # Record execution metrics
341
- node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs state record-metric \
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
- node ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs state add-decision \
353
- --phase "${PHASE}" --summary "${DECISION_TEXT}" --rationale "${RATIONALE}"
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs state add-blocker "Blocker description"
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs state record-session \
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs roadmap update-plan-progress "${PHASE}"
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs requirements mark-complete ${REQ_IDS}
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 ~/.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
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs commit "" --files .planning/codebase/*.md --amend
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs validate health $REPAIR_FLAG
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs validate health
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/custom)
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs init phase-op "${after_phase}")
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs phase insert "${after_phase}" "${description}")
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs init map-codebase)
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs commit "docs: map existing codebase" --files .planning/codebase/*.md
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
- - Use question to explore features, priorities, constraints, scope
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 ~/.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
+ 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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs init new-milestone)
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs config-set workflow.research true
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs config-set workflow.research false
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: ~/.config/opencode/get-shit-done/templates/research-project/{FILE}
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: ~/.config/opencode/get-shit-done/templates/research-project/SUMMARY.md
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 ~/.config/opencode/get-shit-done/bin/gsd-tools.cjs commit "docs: define milestone v[X.Y] requirements" --files .planning/REQUIREMENTS.md
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 ~/.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
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