gsd-opencode 1.22.0 → 1.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/agents/gsd-advisor-researcher.md +112 -0
  2. package/agents/gsd-assumptions-analyzer.md +110 -0
  3. package/agents/gsd-codebase-mapper.md +1 -2
  4. package/agents/gsd-debugger.md +119 -2
  5. package/agents/gsd-executor.md +25 -4
  6. package/agents/gsd-integration-checker.md +1 -2
  7. package/agents/gsd-nyquist-auditor.md +1 -2
  8. package/agents/gsd-phase-researcher.md +151 -5
  9. package/agents/gsd-plan-checker.md +71 -5
  10. package/agents/gsd-planner.md +50 -4
  11. package/agents/gsd-project-researcher.md +29 -3
  12. package/agents/gsd-research-synthesizer.md +1 -2
  13. package/agents/gsd-roadmapper.md +30 -2
  14. package/agents/gsd-ui-auditor.md +445 -0
  15. package/agents/gsd-ui-checker.md +305 -0
  16. package/agents/gsd-ui-researcher.md +368 -0
  17. package/agents/gsd-user-profiler.md +173 -0
  18. package/agents/gsd-verifier.md +124 -4
  19. package/commands/gsd/gsd-add-backlog.md +76 -0
  20. package/commands/gsd/gsd-audit-uat.md +24 -0
  21. package/commands/gsd/gsd-autonomous.md +41 -0
  22. package/commands/gsd/gsd-debug.md +5 -0
  23. package/commands/gsd/gsd-discuss-phase.md +10 -36
  24. package/commands/gsd/gsd-do.md +30 -0
  25. package/commands/gsd/gsd-execute-phase.md +20 -2
  26. package/commands/gsd/gsd-fast.md +30 -0
  27. package/commands/gsd/gsd-forensics.md +56 -0
  28. package/commands/gsd/gsd-list-workspaces.md +19 -0
  29. package/commands/gsd/gsd-manager.md +39 -0
  30. package/commands/gsd/gsd-milestone-summary.md +51 -0
  31. package/commands/gsd/gsd-new-workspace.md +44 -0
  32. package/commands/gsd/gsd-next.md +24 -0
  33. package/commands/gsd/gsd-note.md +34 -0
  34. package/commands/gsd/gsd-plan-phase.md +3 -1
  35. package/commands/gsd/gsd-plant-seed.md +28 -0
  36. package/commands/gsd/gsd-pr-branch.md +25 -0
  37. package/commands/gsd/gsd-profile-user.md +46 -0
  38. package/commands/gsd/gsd-quick.md +4 -2
  39. package/commands/gsd/gsd-reapply-patches.md +10 -6
  40. package/commands/gsd/gsd-remove-workspace.md +26 -0
  41. package/commands/gsd/gsd-research-phase.md +5 -0
  42. package/commands/gsd/gsd-resume-work.md +1 -1
  43. package/commands/gsd/gsd-review-backlog.md +61 -0
  44. package/commands/gsd/gsd-review.md +37 -0
  45. package/commands/gsd/gsd-session-report.md +19 -0
  46. package/commands/gsd/gsd-set-profile.md +24 -23
  47. package/commands/gsd/gsd-ship.md +23 -0
  48. package/commands/gsd/gsd-stats.md +18 -0
  49. package/commands/gsd/gsd-thread.md +127 -0
  50. package/commands/gsd/gsd-ui-phase.md +34 -0
  51. package/commands/gsd/gsd-ui-review.md +32 -0
  52. package/commands/gsd/gsd-workstreams.md +66 -0
  53. package/get-shit-done/bin/gsd-tools.cjs +410 -84
  54. package/get-shit-done/bin/lib/commands.cjs +429 -18
  55. package/get-shit-done/bin/lib/config.cjs +318 -45
  56. package/get-shit-done/bin/lib/core.cjs +822 -84
  57. package/get-shit-done/bin/lib/frontmatter.cjs +78 -41
  58. package/get-shit-done/bin/lib/init.cjs +836 -104
  59. package/get-shit-done/bin/lib/milestone.cjs +44 -33
  60. package/get-shit-done/bin/lib/model-profiles.cjs +68 -0
  61. package/get-shit-done/bin/lib/phase.cjs +293 -306
  62. package/get-shit-done/bin/lib/profile-output.cjs +952 -0
  63. package/get-shit-done/bin/lib/profile-pipeline.cjs +539 -0
  64. package/get-shit-done/bin/lib/roadmap.cjs +55 -24
  65. package/get-shit-done/bin/lib/security.cjs +382 -0
  66. package/get-shit-done/bin/lib/state.cjs +363 -53
  67. package/get-shit-done/bin/lib/template.cjs +2 -2
  68. package/get-shit-done/bin/lib/uat.cjs +282 -0
  69. package/get-shit-done/bin/lib/verify.cjs +104 -36
  70. package/get-shit-done/bin/lib/workstream.cjs +491 -0
  71. package/get-shit-done/references/checkpoints.md +12 -10
  72. package/get-shit-done/references/decimal-phase-calculation.md +2 -3
  73. package/get-shit-done/references/git-integration.md +47 -0
  74. package/get-shit-done/references/model-profile-resolution.md +2 -0
  75. package/get-shit-done/references/model-profiles.md +62 -16
  76. package/get-shit-done/references/phase-argument-parsing.md +2 -2
  77. package/get-shit-done/references/planning-config.md +3 -1
  78. package/get-shit-done/references/user-profiling.md +681 -0
  79. package/get-shit-done/references/workstream-flag.md +58 -0
  80. package/get-shit-done/templates/UAT.md +21 -3
  81. package/get-shit-done/templates/UI-SPEC.md +100 -0
  82. package/get-shit-done/templates/claude-md.md +122 -0
  83. package/get-shit-done/templates/config.json +10 -3
  84. package/get-shit-done/templates/context.md +61 -6
  85. package/get-shit-done/templates/dev-preferences.md +21 -0
  86. package/get-shit-done/templates/discussion-log.md +63 -0
  87. package/get-shit-done/templates/phase-prompt.md +46 -5
  88. package/get-shit-done/templates/project.md +2 -0
  89. package/get-shit-done/templates/state.md +2 -2
  90. package/get-shit-done/templates/user-profile.md +146 -0
  91. package/get-shit-done/workflows/add-phase.md +2 -2
  92. package/get-shit-done/workflows/add-tests.md +4 -4
  93. package/get-shit-done/workflows/add-todo.md +3 -3
  94. package/get-shit-done/workflows/audit-milestone.md +13 -5
  95. package/get-shit-done/workflows/audit-uat.md +109 -0
  96. package/get-shit-done/workflows/autonomous.md +891 -0
  97. package/get-shit-done/workflows/check-todos.md +2 -2
  98. package/get-shit-done/workflows/cleanup.md +4 -4
  99. package/get-shit-done/workflows/complete-milestone.md +9 -6
  100. package/get-shit-done/workflows/diagnose-issues.md +15 -3
  101. package/get-shit-done/workflows/discovery-phase.md +2 -2
  102. package/get-shit-done/workflows/discuss-phase-assumptions.md +653 -0
  103. package/get-shit-done/workflows/discuss-phase.md +411 -38
  104. package/get-shit-done/workflows/do.md +104 -0
  105. package/get-shit-done/workflows/execute-phase.md +405 -18
  106. package/get-shit-done/workflows/execute-plan.md +77 -12
  107. package/get-shit-done/workflows/fast.md +105 -0
  108. package/get-shit-done/workflows/forensics.md +265 -0
  109. package/get-shit-done/workflows/health.md +28 -6
  110. package/get-shit-done/workflows/help.md +124 -7
  111. package/get-shit-done/workflows/insert-phase.md +2 -2
  112. package/get-shit-done/workflows/list-phase-assumptions.md +2 -2
  113. package/get-shit-done/workflows/list-workspaces.md +56 -0
  114. package/get-shit-done/workflows/manager.md +362 -0
  115. package/get-shit-done/workflows/map-codebase.md +74 -13
  116. package/get-shit-done/workflows/milestone-summary.md +223 -0
  117. package/get-shit-done/workflows/new-milestone.md +120 -18
  118. package/get-shit-done/workflows/new-project.md +178 -39
  119. package/get-shit-done/workflows/new-workspace.md +237 -0
  120. package/get-shit-done/workflows/next.md +97 -0
  121. package/get-shit-done/workflows/node-repair.md +92 -0
  122. package/get-shit-done/workflows/note.md +156 -0
  123. package/get-shit-done/workflows/pause-work.md +62 -8
  124. package/get-shit-done/workflows/plan-milestone-gaps.md +4 -5
  125. package/get-shit-done/workflows/plan-phase.md +332 -33
  126. package/get-shit-done/workflows/plant-seed.md +169 -0
  127. package/get-shit-done/workflows/pr-branch.md +129 -0
  128. package/get-shit-done/workflows/profile-user.md +450 -0
  129. package/get-shit-done/workflows/progress.md +145 -20
  130. package/get-shit-done/workflows/quick.md +205 -49
  131. package/get-shit-done/workflows/remove-phase.md +2 -2
  132. package/get-shit-done/workflows/remove-workspace.md +90 -0
  133. package/get-shit-done/workflows/research-phase.md +11 -3
  134. package/get-shit-done/workflows/resume-project.md +35 -16
  135. package/get-shit-done/workflows/review.md +228 -0
  136. package/get-shit-done/workflows/session-report.md +146 -0
  137. package/get-shit-done/workflows/set-profile.md +2 -2
  138. package/get-shit-done/workflows/settings.md +80 -11
  139. package/get-shit-done/workflows/ship.md +228 -0
  140. package/get-shit-done/workflows/stats.md +60 -0
  141. package/get-shit-done/workflows/transition.md +147 -20
  142. package/get-shit-done/workflows/ui-phase.md +302 -0
  143. package/get-shit-done/workflows/ui-review.md +165 -0
  144. package/get-shit-done/workflows/update.md +108 -25
  145. package/get-shit-done/workflows/validate-phase.md +15 -8
  146. package/get-shit-done/workflows/verify-phase.md +16 -5
  147. package/get-shit-done/workflows/verify-work.md +72 -18
  148. package/package.json +1 -1
  149. package/skills/gsd-audit-milestone/SKILL.md +29 -0
  150. package/skills/gsd-cleanup/SKILL.md +19 -0
  151. package/skills/gsd-complete-milestone/SKILL.md +131 -0
  152. package/skills/gsd-discuss-phase/SKILL.md +54 -0
  153. package/skills/gsd-execute-phase/SKILL.md +49 -0
  154. package/skills/gsd-plan-phase/SKILL.md +37 -0
  155. package/skills/gsd-ui-phase/SKILL.md +24 -0
  156. package/skills/gsd-ui-review/SKILL.md +24 -0
  157. package/skills/gsd-verify-work/SKILL.md +30 -0
@@ -0,0 +1,58 @@
1
+ # Workstream Flag (`--ws`)
2
+
3
+ ## Overview
4
+
5
+ The `--ws <name>` flag scopes GSD operations to a specific workstream, enabling
6
+ parallel milestone work by multiple OpenCode instances on the same codebase.
7
+
8
+ ## Resolution Priority
9
+
10
+ 1. `--ws <name>` flag (explicit, highest priority)
11
+ 2. `GSD_WORKSTREAM` environment variable (per-instance)
12
+ 3. `.planning/active-workstream` file (shared, last-writer-wins)
13
+ 4. `null` — flat mode (no workstreams)
14
+
15
+ ## Routing Propagation
16
+
17
+ All workflow routing commands include `${GSD_WS}` which:
18
+ - Expands to `--ws <name>` when a workstream is active
19
+ - Expands to empty string in flat mode (backward compatible)
20
+
21
+ This ensures workstream scope chains automatically through the workflow:
22
+ `new-milestone → discuss-phase → plan-phase → execute-phase → transition`
23
+
24
+ ## Directory Structure
25
+
26
+ ```
27
+ .planning/
28
+ ├── PROJECT.md # Shared
29
+ ├── config.json # Shared
30
+ ├── milestones/ # Shared
31
+ ├── codebase/ # Shared
32
+ ├── active-workstream # Points to current ws
33
+ └── workstreams/
34
+ ├── feature-a/ # Workstream A
35
+ │ ├── STATE.md
36
+ │ ├── ROADMAP.md
37
+ │ ├── REQUIREMENTS.md
38
+ │ └── phases/
39
+ └── feature-b/ # Workstream B
40
+ ├── STATE.md
41
+ ├── ROADMAP.md
42
+ ├── REQUIREMENTS.md
43
+ └── phases/
44
+ ```
45
+
46
+ ## CLI Usage
47
+
48
+ ```bash
49
+ # All gsd-tools commands accept --ws
50
+ node gsd-tools.cjs state json --ws feature-a
51
+ node gsd-tools.cjs find-phase 3 --ws feature-b
52
+
53
+ # Workstream CRUD
54
+ node gsd-tools.cjs workstream create <name>
55
+ node gsd-tools.cjs workstream list
56
+ node gsd-tools.cjs workstream status <name>
57
+ node gsd-tools.cjs workstream complete <name>
58
+ ```
@@ -8,7 +8,7 @@ Template for `.planning/phases/XX-name/{phase_num}-UAT.md` — persistent UAT se
8
8
 
9
9
  ```markdown
10
10
  ---
11
- status: testing | complete | diagnosed
11
+ status: testing | partial | complete | diagnosed
12
12
  phase: XX-name
13
13
  source: [list of SUMMARY.md files tested]
14
14
  started: [ISO timestamp]
@@ -45,6 +45,12 @@ expected: [observable behavior]
45
45
  result: skipped
46
46
  reason: [why skipped]
47
47
 
48
+ ### 5. [Test Name]
49
+ expected: [observable behavior]
50
+ result: blocked
51
+ blocked_by: server | physical-device | release-build | third-party | prior-phase
52
+ reason: [why blocked]
53
+
48
54
  ...
49
55
 
50
56
  ## Summary
@@ -54,6 +60,7 @@ passed: [N]
54
60
  issues: [N]
55
61
  pending: [N]
56
62
  skipped: [N]
63
+ blocked: [N]
57
64
 
58
65
  ## Gaps
59
66
 
@@ -74,7 +81,7 @@ skipped: [N]
74
81
  <section_rules>
75
82
 
76
83
  **Frontmatter:**
77
- - `status`: OVERWRITE - "testing" or "complete"
84
+ - `status`: OVERWRITE - "testing", "partial", or "complete"
78
85
  - `phase`: IMMUTABLE - set on creation
79
86
  - `source`: IMMUTABLE - SUMMARY files being tested
80
87
  - `started`: IMMUTABLE - set on creation
@@ -87,9 +94,10 @@ skipped: [N]
87
94
 
88
95
  **Tests:**
89
96
  - Each test: OVERWRITE result field when user responds
90
- - `result` values: [pending], pass, issue, skipped
97
+ - `result` values: [pending], pass, issue, skipped, blocked
91
98
  - If issue: add `reported` (verbatim) and `severity` (inferred)
92
99
  - If skipped: add `reason` if provided
100
+ - If blocked: add `blocked_by` (tag) and `reason` (if provided)
93
101
 
94
102
  **Summary:**
95
103
  - OVERWRITE counts after each response
@@ -156,6 +164,16 @@ skipped: [N]
156
164
  - Commit file
157
165
  - Present summary with next steps
158
166
 
167
+ **Partial completion:**
168
+ - status → "partial" (if pending, blocked, or unresolved skipped tests remain)
169
+ - Current Test → "[testing paused — {N} items outstanding]"
170
+ - Commit file
171
+ - Present summary with outstanding items highlighted
172
+
173
+ **Resuming partial session:**
174
+ - `/gsd-verify-work {phase}` picks up from first pending/blocked test
175
+ - When all items resolved, status advances to "complete"
176
+
159
177
  **Resume after /new:**
160
178
  1. read frontmatter → know phase and status
161
179
  2. read Current Test → know where we are
@@ -0,0 +1,100 @@
1
+ ---
2
+ phase: {N}
3
+ slug: {phase-slug}
4
+ status: draft
5
+ shadcn_initialized: false
6
+ preset: none
7
+ created: {date}
8
+ ---
9
+
10
+ # Phase {N} — UI Design Contract
11
+
12
+ > Visual and interaction contract for frontend phases. Generated by gsd-ui-researcher, verified by gsd-ui-checker.
13
+
14
+ ---
15
+
16
+ ## Design System
17
+
18
+ | Property | Value |
19
+ |----------|-------|
20
+ | Tool | {shadcn / none} |
21
+ | Preset | {preset string or "not applicable"} |
22
+ | Component library | {radix / base-ui / none} |
23
+ | Icon library | {library} |
24
+ | Font | {font} |
25
+
26
+ ---
27
+
28
+ ## Spacing Scale
29
+
30
+ Declared values (must be multiples of 4):
31
+
32
+ | Token | Value | Usage |
33
+ |-------|-------|-------|
34
+ | xs | 4px | Icon gaps, inline padding |
35
+ | sm | 8px | Compact element spacing |
36
+ | md | 16px | Default element spacing |
37
+ | lg | 24px | Section padding |
38
+ | xl | 32px | Layout gaps |
39
+ | 2xl | 48px | Major section breaks |
40
+ | 3xl | 64px | Page-level spacing |
41
+
42
+ Exceptions: {list any, or "none"}
43
+
44
+ ---
45
+
46
+ ## Typography
47
+
48
+ | Role | Size | Weight | Line Height |
49
+ |------|------|--------|-------------|
50
+ | Body | {px} | {weight} | {ratio} |
51
+ | Label | {px} | {weight} | {ratio} |
52
+ | Heading | {px} | {weight} | {ratio} |
53
+ | Display | {px} | {weight} | {ratio} |
54
+
55
+ ---
56
+
57
+ ## Color
58
+
59
+ | Role | Value | Usage |
60
+ |------|-------|-------|
61
+ | Dominant (60%) | {hex} | Background, surfaces |
62
+ | Secondary (30%) | {hex} | Cards, sidebar, nav |
63
+ | Accent (10%) | {hex} | {list specific elements only} |
64
+ | Destructive | {hex} | Destructive actions only |
65
+
66
+ Accent reserved for: {explicit list — never "all interactive elements"}
67
+
68
+ ---
69
+
70
+ ## Copywriting Contract
71
+
72
+ | Element | Copy |
73
+ |---------|------|
74
+ | Primary CTA | {specific verb + noun} |
75
+ | Empty state heading | {copy} |
76
+ | Empty state body | {copy + next step} |
77
+ | Error state | {problem + solution path} |
78
+ | Destructive confirmation | {action name}: {confirmation copy} |
79
+
80
+ ---
81
+
82
+ ## Registry Safety
83
+
84
+ | Registry | Blocks Used | Safety Gate |
85
+ |----------|-------------|-------------|
86
+ | shadcn official | {list} | not required |
87
+ | {third-party name} | {list} | shadcn view + diff required |
88
+
89
+ ---
90
+
91
+ ## Checker Sign-Off
92
+
93
+ - [ ] Dimension 1 Copywriting: PASS
94
+ - [ ] Dimension 2 Visuals: PASS
95
+ - [ ] Dimension 3 Color: PASS
96
+ - [ ] Dimension 4 Typography: PASS
97
+ - [ ] Dimension 5 Spacing: PASS
98
+ - [ ] Dimension 6 Registry Safety: PASS
99
+
100
+ **Approval:** {pending / approved YYYY-MM-DD}
@@ -0,0 +1,122 @@
1
+ # AGENTS.md Template
2
+
3
+ Template for project-root `AGENTS.md` — auto-generated by `gsd-tools generate-OpenCode-md`.
4
+
5
+ Contains 6 marker-bounded sections. Each section is independently updatable.
6
+ The `generate-OpenCode-md` subcommand manages 5 sections (project, stack, conventions, architecture, workflow enforcement).
7
+ The profile section is managed exclusively by `generate-OpenCode-profile`.
8
+
9
+ ---
10
+
11
+ ## Section Templates
12
+
13
+ ### Project Section
14
+ ```
15
+ <!-- GSD:project-start source:PROJECT.md -->
16
+ ## Project
17
+
18
+ {{project_content}}
19
+ <!-- GSD:project-end -->
20
+ ```
21
+
22
+ **Fallback text:**
23
+ ```
24
+ Project not yet initialized. Run /gsd-new-project to set up.
25
+ ```
26
+
27
+ ### Stack Section
28
+ ```
29
+ <!-- GSD:stack-start source:STACK.md -->
30
+ ## Technology Stack
31
+
32
+ {{stack_content}}
33
+ <!-- GSD:stack-end -->
34
+ ```
35
+
36
+ **Fallback text:**
37
+ ```
38
+ Technology stack not yet documented. Will populate after codebase mapping or first phase.
39
+ ```
40
+
41
+ ### Conventions Section
42
+ ```
43
+ <!-- GSD:conventions-start source:CONVENTIONS.md -->
44
+ ## Conventions
45
+
46
+ {{conventions_content}}
47
+ <!-- GSD:conventions-end -->
48
+ ```
49
+
50
+ **Fallback text:**
51
+ ```
52
+ Conventions not yet established. Will populate as patterns emerge during development.
53
+ ```
54
+
55
+ ### Architecture Section
56
+ ```
57
+ <!-- GSD:architecture-start source:ARCHITECTURE.md -->
58
+ ## Architecture
59
+
60
+ {{architecture_content}}
61
+ <!-- GSD:architecture-end -->
62
+ ```
63
+
64
+ **Fallback text:**
65
+ ```
66
+ Architecture not yet mapped. Follow existing patterns found in the codebase.
67
+ ```
68
+
69
+ ### Workflow Enforcement Section
70
+ ```
71
+ <!-- GSD:workflow-start source:GSD defaults -->
72
+ ## GSD Workflow Enforcement
73
+
74
+ Before using edit, write, or other file-changing tools, start work through a GSD command so planning artifacts and execution context stay in sync.
75
+
76
+ Use these entry points:
77
+ - `/gsd-quick` for small fixes, doc updates, and ad-hoc tasks
78
+ - `/gsd-debug` for investigation and bug fixing
79
+ - `/gsd-execute-phase` for planned phase work
80
+
81
+ Do not make direct repo edits outside a GSD workflow unless the user explicitly asks to bypass it.
82
+ <!-- GSD:workflow-end -->
83
+ ```
84
+
85
+ ### Profile Section (Placeholder Only)
86
+ ```
87
+ <!-- GSD:profile-start -->
88
+ ## Developer Profile
89
+
90
+ > Profile not yet configured. Run `/gsd-profile-user` to generate your developer profile.
91
+ > This section is managed by `generate-OpenCode-profile` — do not edit manually.
92
+ <!-- GSD:profile-end -->
93
+ ```
94
+
95
+ **Note:** This section is NOT managed by `generate-OpenCode-md`. It is managed exclusively
96
+ by `generate-OpenCode-profile`. The placeholder above is only used when creating a new
97
+ AGENTS.md file and no profile section exists yet.
98
+
99
+ ---
100
+
101
+ ## Section Ordering
102
+
103
+ 1. **Project** — Identity and purpose (what this project is)
104
+ 2. **Stack** — Technology choices (what tools are used)
105
+ 3. **Conventions** — Code patterns and rules (how code is written)
106
+ 4. **Architecture** — System structure (how components fit together)
107
+ 5. **Workflow Enforcement** — Default GSD entry points for file-changing work
108
+ 6. **Profile** — Developer behavioral preferences (how to interact)
109
+
110
+ ## Marker Format
111
+
112
+ - Start: `<!-- GSD:{name}-start source:{file} -->`
113
+ - End: `<!-- GSD:{name}-end -->`
114
+ - Source attribute enables targeted updates when source files change
115
+ - Partial match on start marker (without closing `-->`) for detection
116
+
117
+ ## Fallback Behavior
118
+
119
+ When a source file is missing, fallback text provides OpenCode-actionable guidance:
120
+ - Guides OpenCode's behavior in the absence of data
121
+ - Not placeholder ads or "missing" notices
122
+ - Each fallback tells OpenCode what to do, not just what's absent
@@ -6,11 +6,14 @@
6
6
  "plan_check": true,
7
7
  "verifier": true,
8
8
  "auto_advance": false,
9
- "nyquist_validation": true
9
+ "nyquist_validation": true,
10
+ "discuss_mode": "discuss",
11
+ "research_before_questions": false
10
12
  },
11
13
  "planning": {
12
14
  "commit_docs": true,
13
- "search_gitignored": false
15
+ "search_gitignored": false,
16
+ "sub_repos": []
14
17
  },
15
18
  "parallelization": {
16
19
  "enabled": true,
@@ -33,5 +36,9 @@
33
36
  "safety": {
34
37
  "always_confirm_destructive": true,
35
38
  "always_confirm_external_services": true
36
- }
39
+ },
40
+ "hooks": {
41
+ "context_warnings": true
42
+ },
43
+ "agent_skills": {}
37
44
  }
@@ -31,14 +31,14 @@ Template for `.planning/phases/XX-name/{phase_num}-CONTEXT.md` - captures implem
31
31
  ## Implementation Decisions
32
32
 
33
33
  ### [Area 1 that was discussed]
34
- - [Specific decision made]
35
- - [Another decision if applicable]
34
+ - **D-01:** [Specific decision made]
35
+ - **D-02:** [Another decision if applicable]
36
36
 
37
37
  ### [Area 2 that was discussed]
38
- - [Specific decision made]
38
+ - **D-03:** [Specific decision made]
39
39
 
40
40
  ### [Area 3 that was discussed]
41
- - [Specific decision made]
41
+ - **D-04:** [Specific decision made]
42
42
 
43
43
  ### OpenCode's Discretion
44
44
  [Areas where user explicitly said "you decide" — OpenCode has flexibility here during planning/implementation]
@@ -54,6 +54,24 @@ Template for `.planning/phases/XX-name/{phase_num}-CONTEXT.md` - captures implem
54
54
 
55
55
  </specifics>
56
56
 
57
+ <canonical_refs>
58
+ ## Canonical References
59
+
60
+ **Downstream agents MUST read these before planning or implementing.**
61
+
62
+ [List every spec, ADR, feature doc, or design doc that defines requirements or constraints for this phase. Use full relative paths so agents can read them directly. Group by topic area when the phase has multiple concerns.]
63
+
64
+ ### [Topic area 1]
65
+ - `path/to/spec-or-adr.md` — [What this doc decides/defines that's relevant]
66
+ - `path/to/doc.md` §N — [Specific section and what it covers]
67
+
68
+ ### [Topic area 2]
69
+ - `path/to/feature-doc.md` — [What capability this defines]
70
+
71
+ [If the project has no external specs: "No external specs — requirements are fully captured in decisions above"]
72
+
73
+ </canonical_refs>
74
+
57
75
  <code_context>
58
76
  ## Existing Code Insights
59
77
 
@@ -124,6 +142,18 @@ Display posts from followed users in a scrollable feed. Users can view posts and
124
142
 
125
143
  </decisions>
126
144
 
145
+ <canonical_refs>
146
+ ## Canonical References
147
+
148
+ ### Feed display
149
+ - `docs/features/social-feed.md` — Feed requirements, post card fields, engagement display rules
150
+ - `docs/decisions/adr-012-infinite-scroll.md` — Scroll strategy decision, virtualization requirements
151
+
152
+ ### Empty states
153
+ - `docs/design/empty-states.md` — Empty state patterns, illustration guidelines
154
+
155
+ </canonical_refs>
156
+
127
157
  <specifics>
128
158
  ## Specific Ideas
129
159
 
@@ -186,6 +216,15 @@ CLI command to backup database to local file or S3. Supports full and incrementa
186
216
 
187
217
  </decisions>
188
218
 
219
+ <canonical_refs>
220
+ ## Canonical References
221
+
222
+ ### Backup CLI
223
+ - `docs/features/backup-restore.md` — Backup requirements, supported backends, encryption spec
224
+ - `docs/decisions/adr-007-cli-conventions.md` — Flag naming, exit codes, output format standards
225
+
226
+ </canonical_refs>
227
+
189
228
  <specifics>
190
229
  ## Specific Ideas
191
230
 
@@ -248,6 +287,15 @@ Organize existing photo library into structured folders. Handle duplicates and a
248
287
 
249
288
  </decisions>
250
289
 
290
+ <canonical_refs>
291
+ ## Canonical References
292
+
293
+ ### Organization rules
294
+ - `docs/features/photo-organization.md` — Grouping rules, duplicate policy, naming spec
295
+ - `docs/decisions/adr-003-exif-handling.md` — EXIF extraction strategy, fallback for missing metadata
296
+
297
+ </canonical_refs>
298
+
251
299
  <specifics>
252
300
  ## Specific Ideas
253
301
 
@@ -291,7 +339,14 @@ The output should answer: "What does the researcher need to investigate? What ch
291
339
 
292
340
  **After creation:**
293
341
  - File lives in phase directory: `.planning/phases/XX-name/{phase_num}-CONTEXT.md`
294
- - `gsd-phase-researcher` uses decisions to focus investigation
295
- - `gsd-planner` uses decisions + research to create executable tasks
342
+ - `gsd-phase-researcher` uses decisions to focus investigation AND reads canonical_refs to know WHAT docs to study
343
+ - `gsd-planner` uses decisions + research to create executable tasks AND reads canonical_refs to verify alignment
296
344
  - Downstream agents should NOT need to ask the user again about captured decisions
345
+
346
+ **CRITICAL — Canonical references:**
347
+ - The `<canonical_refs>` section is MANDATORY. Every CONTEXT.md must have one.
348
+ - If your project has external specs, ADRs, or design docs, list them with full relative paths grouped by topic
349
+ - If ROADMAP.md lists `Canonical refs:` per phase, extract and expand those
350
+ - Inline mentions like "see ADR-019" scattered in decisions are useless to downstream agents — they need full paths and section references in a dedicated section they can find
351
+ - If no external specs exist, say so explicitly — don't silently omit the section
297
352
  </guidelines>
@@ -0,0 +1,21 @@
1
+ ---
2
+ description: Load developer preferences into this session
3
+ ---
4
+
5
+ # Developer Preferences
6
+
7
+ > Generated by GSD on {{generated_at}} from {{data_source}}.
8
+ > Run `/gsd-profile-user --refresh` to regenerate.
9
+
10
+ ## Behavioral Directives
11
+
12
+ Follow these directives when working with this developer. Higher confidence
13
+ directives should be applied directly. Lower confidence directives should be
14
+ tried with hedging ("Based on your profile, I'll try X -- let me know if
15
+ that's off").
16
+
17
+ {{behavioral_directives}}
18
+
19
+ ## Stack Preferences
20
+
21
+ {{stack_preferences}}
@@ -0,0 +1,63 @@
1
+ # Discussion Log Template
2
+
3
+ Template for `.planning/phases/XX-name/{phase_num}-DISCUSSION-LOG.md` — audit trail of discuss-phase Q&A sessions.
4
+
5
+ **Purpose:** Software audit trail for decision-making. Captures all options considered, not just the selected one. Separate from CONTEXT.md which is the implementation artifact consumed by downstream agents.
6
+
7
+ **NOT for LLM consumption.** This file should never be referenced in `<files_to_read>` blocks or agent prompts.
8
+
9
+ ## Format
10
+
11
+ ```markdown
12
+ # Phase [X]: [Name] - Discussion Log
13
+
14
+ > **Audit trail only.** Do not use as input to planning, research, or execution agents.
15
+ > Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.
16
+
17
+ **Date:** [ISO date]
18
+ **Phase:** [phase number]-[phase name]
19
+ **Areas discussed:** [comma-separated list]
20
+
21
+ ---
22
+
23
+ ## [Area 1 Name]
24
+
25
+ | Option | Description | Selected |
26
+ |--------|-------------|----------|
27
+ | [Option 1] | [Brief description] | |
28
+ | [Option 2] | [Brief description] | ✓ |
29
+ | [Option 3] | [Brief description] | |
30
+
31
+ **User's choice:** [Selected option or verbatim free-text response]
32
+ **Notes:** [Any clarifications or rationale provided during discussion]
33
+
34
+ ---
35
+
36
+ ## [Area 2 Name]
37
+
38
+ ...
39
+
40
+ ---
41
+
42
+ ## OpenCode's Discretion
43
+
44
+ [Areas delegated to OpenCode's judgment — list what was deferred and why]
45
+
46
+ ## Deferred Ideas
47
+
48
+ [Ideas mentioned but not in scope for this phase]
49
+
50
+ ---
51
+
52
+ *Phase: XX-name*
53
+ *Discussion log generated: [date]*
54
+ ```
55
+
56
+ ## Rules
57
+
58
+ - Generated automatically at end of every discuss-phase session
59
+ - Includes ALL options considered, not just the selected one
60
+ - Includes user's freeform notes and clarifications
61
+ - Clearly marked as audit-only, not an implementation artifact
62
+ - Does NOT interfere with CONTEXT.md generation or downstream agent behavior
63
+ - Committed alongside CONTEXT.md in the same git commit
@@ -63,21 +63,29 @@ Output: [What artifacts will be created]
63
63
  <task type="auto">
64
64
  <name>task 1: [Action-oriented name]</name>
65
65
  <files>path/to/file.ext, another/file.ext</files>
66
- <action>[Specific implementation - what to do, how to do it, what to avoid and WHY]</action>
66
+ <read_first>path/to/reference.ext, path/to/source-of-truth.ext</read_first>
67
+ <action>[Specific implementation - what to do, how to do it, what to avoid and WHY. Include CONCRETE values: exact identifiers, parameters, expected outputs, file paths, command arguments. Never say "align X with Y" without specifying the exact target state.]</action>
67
68
  <verify>[Command or check to prove it worked]</verify>
69
+ <acceptance_criteria>
70
+ - [grep-verifiable condition: "file.ext contains 'exact string'"]
71
+ - [Measurable condition: "output.ext uses 'expected-value', NOT 'wrong-value'"]
72
+ </acceptance_criteria>
68
73
  <done>[Measurable acceptance criteria]</done>
69
74
  </task>
70
75
 
71
76
  <task type="auto">
72
77
  <name>task 2: [Action-oriented name]</name>
73
78
  <files>path/to/file.ext</files>
74
- <action>[Specific implementation]</action>
79
+ <read_first>path/to/reference.ext</read_first>
80
+ <action>[Specific implementation with concrete values]</action>
75
81
  <verify>[Command or check]</verify>
82
+ <acceptance_criteria>
83
+ - [grep-verifiable condition]
84
+ </acceptance_criteria>
76
85
  <done>[Acceptance criteria]</done>
77
86
  </task>
78
87
 
79
88
  <!-- For checkpoint task examples and patterns, see @$HOME/.config/opencode/get-shit-done/references/checkpoints.md -->
80
- <!-- Key rule: OpenCode starts dev server BEFORE human-verify checkpoints. User only visits URLs. -->
81
89
 
82
90
  <task type="checkpoint:decision" gate="blocking">
83
91
  <decision>[What needs deciding]</decision>
@@ -333,7 +341,7 @@ Output: User model, API endpoints, and UI components.
333
341
  <name>task 2: Create User API endpoints</name>
334
342
  <files>src/features/user/api.ts</files>
335
343
  <action>GET /users (list), GET /users/:id (single), POST /users (create). Use User type from model.</action>
336
- <verify>curl tests pass for all endpoints</verify>
344
+ <verify>fetch tests pass for all endpoints</verify>
337
345
  <done>All CRUD operations work</done>
338
346
  </task>
339
347
  </tasks>
@@ -399,7 +407,7 @@ Output: Working dashboard component.
399
407
  <task type="auto">
400
408
  <name>Start dev server</name>
401
409
  <action>Run `npm run dev` in background, wait for ready</action>
402
- <verify>curl localhost:3000 returns 200</verify>
410
+ <verify>fetch http://localhost:3000 returns 200</verify>
403
411
  </task>
404
412
 
405
413
  <task type="checkpoint:human-verify" gate="blocking">
@@ -456,6 +464,39 @@ files_modified: [...]
456
464
  </task>
457
465
  ```
458
466
 
467
+ **Bad: Missing read_first (executor modifies files it hasn't read)**
468
+ ```xml
469
+ <task type="auto">
470
+ <name>Update database config</name>
471
+ <files>src/config/database.ts</files>
472
+ <!-- No read_first! Executor doesn't know current state or conventions -->
473
+ <action>Update the database config to match production settings</action>
474
+ </task>
475
+ ```
476
+
477
+ **Bad: Vague acceptance criteria (not verifiable)**
478
+ ```xml
479
+ <acceptance_criteria>
480
+ - Config is properly set up
481
+ - Database connection works correctly
482
+ </acceptance_criteria>
483
+ ```
484
+
485
+ **Good: Concrete with read_first + verifiable criteria**
486
+ ```xml
487
+ <task type="auto">
488
+ <name>Update database config for connection pooling</name>
489
+ <files>src/config/database.ts</files>
490
+ <read_first>src/config/database.ts, .env.example, docker-compose.yml</read_first>
491
+ <action>Add pool configuration: min=2, max=20, idleTimeoutMs=30000. Add SSL config: rejectUnauthorized=true when NODE_ENV=production. Add .env.example entry: DATABASE_POOL_MAX=20.</action>
492
+ <acceptance_criteria>
493
+ - database.ts contains "max: 20" and "idleTimeoutMillis: 30000"
494
+ - database.ts contains SSL conditional on NODE_ENV
495
+ - .env.example contains DATABASE_POOL_MAX
496
+ </acceptance_criteria>
497
+ </task>
498
+ ```
499
+
459
500
  ---
460
501
 
461
502
  ## Guidelines
@@ -127,6 +127,8 @@ Common types: Tech stack, Timeline, Budget, Dependencies, Compatibility, Perform
127
127
  <evolution>
128
128
 
129
129
  PROJECT.md evolves throughout the project lifecycle.
130
+ These rules are embedded in the generated PROJECT.md (## Evolution section)
131
+ and implemented by workflows/transition.md and workflows/complete-milestone.md.
130
132
 
131
133
  **After each phase transition:**
132
134
  1. Requirements invalidated? → Move to Out of Scope with reason
@@ -73,7 +73,7 @@ Stopped at: [Description of last completed action]
73
73
  Resume file: [Path to .continue-here*.md if exists, otherwise "None"]
74
74
  ```
75
75
 
76
- <purpose>
76
+ <objective>
77
77
 
78
78
  STATE.md is the project's short-term memory spanning all phases and sessions.
79
79
 
@@ -85,7 +85,7 @@ STATE.md is the project's short-term memory spanning all phases and sessions.
85
85
  - Contains digest of accumulated context
86
86
  - Enables instant session restoration
87
87
 
88
- </purpose>
88
+ </objective>
89
89
 
90
90
  <lifecycle>
91
91