gsd-opencode 1.22.1 → 1.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agents/gsd-advisor-researcher.md +112 -0
- package/agents/gsd-assumptions-analyzer.md +110 -0
- package/agents/gsd-codebase-mapper.md +0 -2
- package/agents/gsd-debugger.md +118 -2
- package/agents/gsd-executor.md +24 -4
- package/agents/gsd-integration-checker.md +0 -2
- package/agents/gsd-nyquist-auditor.md +0 -2
- package/agents/gsd-phase-researcher.md +150 -5
- package/agents/gsd-plan-checker.md +70 -5
- package/agents/gsd-planner.md +49 -4
- package/agents/gsd-project-researcher.md +28 -3
- package/agents/gsd-research-synthesizer.md +0 -2
- package/agents/gsd-roadmapper.md +29 -2
- package/agents/gsd-ui-auditor.md +445 -0
- package/agents/gsd-ui-checker.md +305 -0
- package/agents/gsd-ui-researcher.md +368 -0
- package/agents/gsd-user-profiler.md +173 -0
- package/agents/gsd-verifier.md +123 -4
- package/commands/gsd/gsd-add-backlog.md +76 -0
- package/commands/gsd/gsd-audit-uat.md +24 -0
- package/commands/gsd/gsd-autonomous.md +41 -0
- package/commands/gsd/gsd-debug.md +5 -0
- package/commands/gsd/gsd-discuss-phase.md +10 -36
- package/commands/gsd/gsd-do.md +30 -0
- package/commands/gsd/gsd-execute-phase.md +20 -2
- package/commands/gsd/gsd-fast.md +30 -0
- package/commands/gsd/gsd-forensics.md +56 -0
- package/commands/gsd/gsd-list-workspaces.md +19 -0
- package/commands/gsd/gsd-manager.md +39 -0
- package/commands/gsd/gsd-milestone-summary.md +51 -0
- package/commands/gsd/gsd-new-workspace.md +44 -0
- package/commands/gsd/gsd-next.md +24 -0
- package/commands/gsd/gsd-note.md +34 -0
- package/commands/gsd/gsd-plan-phase.md +3 -1
- package/commands/gsd/gsd-plant-seed.md +28 -0
- package/commands/gsd/gsd-pr-branch.md +25 -0
- package/commands/gsd/gsd-profile-user.md +46 -0
- package/commands/gsd/gsd-quick.md +4 -2
- package/commands/gsd/gsd-reapply-patches.md +9 -8
- package/commands/gsd/gsd-remove-workspace.md +26 -0
- package/commands/gsd/gsd-research-phase.md +5 -0
- package/commands/gsd/gsd-review-backlog.md +61 -0
- package/commands/gsd/gsd-review.md +37 -0
- package/commands/gsd/gsd-session-report.md +19 -0
- package/commands/gsd/gsd-set-profile.md +24 -23
- package/commands/gsd/gsd-ship.md +23 -0
- package/commands/gsd/gsd-stats.md +18 -0
- package/commands/gsd/gsd-thread.md +127 -0
- package/commands/gsd/gsd-ui-phase.md +34 -0
- package/commands/gsd/gsd-ui-review.md +32 -0
- package/commands/gsd/gsd-workstreams.md +66 -0
- package/get-shit-done/bin/gsd-tools.cjs +410 -84
- package/get-shit-done/bin/lib/commands.cjs +429 -18
- package/get-shit-done/bin/lib/config.cjs +318 -45
- package/get-shit-done/bin/lib/core.cjs +822 -84
- package/get-shit-done/bin/lib/frontmatter.cjs +78 -41
- package/get-shit-done/bin/lib/init.cjs +836 -104
- package/get-shit-done/bin/lib/milestone.cjs +44 -33
- package/get-shit-done/bin/lib/model-profiles.cjs +68 -0
- package/get-shit-done/bin/lib/phase.cjs +293 -306
- package/get-shit-done/bin/lib/profile-output.cjs +952 -0
- package/get-shit-done/bin/lib/profile-pipeline.cjs +539 -0
- package/get-shit-done/bin/lib/roadmap.cjs +55 -24
- package/get-shit-done/bin/lib/security.cjs +382 -0
- package/get-shit-done/bin/lib/state.cjs +363 -53
- package/get-shit-done/bin/lib/template.cjs +2 -2
- package/get-shit-done/bin/lib/uat.cjs +282 -0
- package/get-shit-done/bin/lib/verify.cjs +104 -36
- package/get-shit-done/bin/lib/workstream.cjs +491 -0
- package/get-shit-done/references/checkpoints.md +12 -10
- package/get-shit-done/references/decimal-phase-calculation.md +2 -3
- package/get-shit-done/references/git-integration.md +47 -0
- package/get-shit-done/references/model-profile-resolution.md +2 -0
- package/get-shit-done/references/model-profiles.md +62 -16
- package/get-shit-done/references/phase-argument-parsing.md +2 -2
- package/get-shit-done/references/planning-config.md +3 -1
- package/get-shit-done/references/user-profiling.md +681 -0
- package/get-shit-done/references/workstream-flag.md +58 -0
- package/get-shit-done/templates/UAT.md +21 -3
- package/get-shit-done/templates/UI-SPEC.md +100 -0
- package/get-shit-done/templates/claude-md.md +122 -0
- package/get-shit-done/templates/config.json +10 -3
- package/get-shit-done/templates/context.md +61 -6
- package/get-shit-done/templates/dev-preferences.md +21 -0
- package/get-shit-done/templates/discussion-log.md +63 -0
- package/get-shit-done/templates/phase-prompt.md +46 -5
- package/get-shit-done/templates/project.md +2 -0
- package/get-shit-done/templates/state.md +2 -2
- package/get-shit-done/templates/user-profile.md +146 -0
- package/get-shit-done/workflows/add-phase.md +2 -2
- package/get-shit-done/workflows/add-tests.md +4 -4
- package/get-shit-done/workflows/add-todo.md +3 -3
- package/get-shit-done/workflows/audit-milestone.md +13 -5
- package/get-shit-done/workflows/audit-uat.md +109 -0
- package/get-shit-done/workflows/autonomous.md +891 -0
- package/get-shit-done/workflows/check-todos.md +2 -2
- package/get-shit-done/workflows/cleanup.md +4 -4
- package/get-shit-done/workflows/complete-milestone.md +9 -6
- package/get-shit-done/workflows/diagnose-issues.md +15 -3
- package/get-shit-done/workflows/discovery-phase.md +3 -3
- package/get-shit-done/workflows/discuss-phase-assumptions.md +653 -0
- package/get-shit-done/workflows/discuss-phase.md +411 -38
- package/get-shit-done/workflows/do.md +104 -0
- package/get-shit-done/workflows/execute-phase.md +405 -18
- package/get-shit-done/workflows/execute-plan.md +77 -12
- package/get-shit-done/workflows/fast.md +105 -0
- package/get-shit-done/workflows/forensics.md +265 -0
- package/get-shit-done/workflows/health.md +28 -6
- package/get-shit-done/workflows/help.md +124 -7
- package/get-shit-done/workflows/insert-phase.md +2 -2
- package/get-shit-done/workflows/list-phase-assumptions.md +2 -2
- package/get-shit-done/workflows/list-workspaces.md +56 -0
- package/get-shit-done/workflows/manager.md +362 -0
- package/get-shit-done/workflows/map-codebase.md +74 -13
- package/get-shit-done/workflows/milestone-summary.md +223 -0
- package/get-shit-done/workflows/new-milestone.md +120 -18
- package/get-shit-done/workflows/new-project.md +178 -39
- package/get-shit-done/workflows/new-workspace.md +237 -0
- package/get-shit-done/workflows/next.md +97 -0
- package/get-shit-done/workflows/node-repair.md +92 -0
- package/get-shit-done/workflows/note.md +156 -0
- package/get-shit-done/workflows/pause-work.md +62 -8
- package/get-shit-done/workflows/plan-milestone-gaps.md +4 -5
- package/get-shit-done/workflows/plan-phase.md +332 -33
- package/get-shit-done/workflows/plant-seed.md +169 -0
- package/get-shit-done/workflows/pr-branch.md +129 -0
- package/get-shit-done/workflows/profile-user.md +450 -0
- package/get-shit-done/workflows/progress.md +145 -20
- package/get-shit-done/workflows/quick.md +205 -49
- package/get-shit-done/workflows/remove-phase.md +2 -2
- package/get-shit-done/workflows/remove-workspace.md +90 -0
- package/get-shit-done/workflows/research-phase.md +11 -3
- package/get-shit-done/workflows/resume-project.md +35 -16
- package/get-shit-done/workflows/review.md +228 -0
- package/get-shit-done/workflows/session-report.md +146 -0
- package/get-shit-done/workflows/set-profile.md +2 -2
- package/get-shit-done/workflows/settings.md +79 -10
- package/get-shit-done/workflows/ship.md +228 -0
- package/get-shit-done/workflows/stats.md +60 -0
- package/get-shit-done/workflows/transition.md +147 -20
- package/get-shit-done/workflows/ui-phase.md +302 -0
- package/get-shit-done/workflows/ui-review.md +165 -0
- package/get-shit-done/workflows/update.md +108 -25
- package/get-shit-done/workflows/validate-phase.md +15 -8
- package/get-shit-done/workflows/verify-phase.md +16 -5
- package/get-shit-done/workflows/verify-work.md +72 -18
- package/package.json +1 -1
- package/skills/gsd-audit-milestone/SKILL.md +29 -0
- package/skills/gsd-cleanup/SKILL.md +19 -0
- package/skills/gsd-complete-milestone/SKILL.md +131 -0
- package/skills/gsd-discuss-phase/SKILL.md +54 -0
- package/skills/gsd-execute-phase/SKILL.md +49 -0
- package/skills/gsd-plan-phase/SKILL.md +37 -0
- package/skills/gsd-ui-phase/SKILL.md +24 -0
- package/skills/gsd-ui-review/SKILL.md +24 -0
- package/skills/gsd-verify-work/SKILL.md +30 -0
|
@@ -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
|
-
<
|
|
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
|
-
<
|
|
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>
|
|
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>
|
|
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
|
-
<
|
|
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
|
-
</
|
|
88
|
+
</objective>
|
|
89
89
|
|
|
90
90
|
<lifecycle>
|
|
91
91
|
|