@undeemed/get-shit-done-codex 1.21.0 → 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.
- package/.codex/config.toml +1 -1
- package/README.md +33 -45
- package/agents/gsd-codebase-mapper.md +3 -3
- package/agents/gsd-debugger.md +7 -7
- package/agents/gsd-executor.md +14 -14
- package/agents/gsd-phase-researcher.md +7 -7
- package/agents/gsd-plan-checker.md +10 -10
- package/agents/gsd-planner.md +20 -20
- package/agents/gsd-project-researcher.md +3 -3
- package/agents/gsd-research-synthesizer.md +6 -6
- package/agents/gsd-roadmapper.md +7 -7
- package/agents/gsd-verifier.md +29 -17
- package/bin/install.js +54 -198
- package/commands/gsd/add-tests.md +5 -4
- package/commands/gsd/complete-milestone.md +6 -6
- package/commands/gsd/debug.md +1 -1
- package/commands/gsd/map-codebase.md +3 -3
- package/commands/gsd/new-milestone.md +1 -1
- package/commands/gsd/new-project.md +1 -1
- package/commands/gsd/plan-milestone-gaps.md +2 -2
- package/commands/gsd/reapply-patches.md +2 -2
- package/commands/gsd/research-phase.md +3 -3
- package/commands/gsd/verify-work.md +1 -1
- package/get-shit-done/bin/lib/commands.cjs +1 -1
- package/get-shit-done/bin/lib/phase.cjs +2 -2
- package/get-shit-done/bin/lib/verify.cjs +8 -8
- package/get-shit-done/references/continuation-format.md +33 -27
- package/get-shit-done/references/model-profiles.md +1 -1
- package/get-shit-done/references/ui-brand.md +3 -3
- package/get-shit-done/templates/DEBUG.md +5 -5
- package/get-shit-done/templates/UAT.md +4 -4
- package/get-shit-done/templates/VALIDATION.md +1 -1
- package/get-shit-done/templates/debug-subagent-prompt.md +1 -1
- package/get-shit-done/templates/discovery.md +2 -2
- package/get-shit-done/templates/phase-prompt.md +1 -1
- package/get-shit-done/templates/planner-subagent-prompt.md +3 -3
- package/get-shit-done/templates/project.md +1 -1
- package/get-shit-done/templates/research.md +1 -1
- package/get-shit-done/templates/retrospective.md +13 -7
- package/get-shit-done/templates/state.md +2 -2
- package/get-shit-done/workflows/add-phase.md +8 -8
- package/get-shit-done/workflows/add-tests.md +41 -18
- package/get-shit-done/workflows/add-todo.md +2 -2
- package/get-shit-done/workflows/audit-milestone.md +8 -8
- package/get-shit-done/workflows/check-todos.md +8 -8
- package/get-shit-done/workflows/complete-milestone.md +34 -9
- package/get-shit-done/workflows/diagnose-issues.md +1 -1
- package/get-shit-done/workflows/discovery-phase.md +3 -3
- package/get-shit-done/workflows/discuss-phase.md +12 -12
- package/get-shit-done/workflows/execute-phase.md +8 -8
- package/get-shit-done/workflows/execute-plan.md +4 -4
- package/get-shit-done/workflows/health.md +5 -5
- package/get-shit-done/workflows/help.md +97 -90
- package/get-shit-done/workflows/insert-phase.md +7 -7
- package/get-shit-done/workflows/list-phase-assumptions.md +4 -4
- package/get-shit-done/workflows/map-codebase.md +3 -3
- package/get-shit-done/workflows/new-milestone.md +6 -6
- package/get-shit-done/workflows/new-project.md +12 -12
- package/get-shit-done/workflows/pause-work.md +1 -1
- package/get-shit-done/workflows/plan-milestone-gaps.md +8 -8
- package/get-shit-done/workflows/plan-phase.md +13 -13
- package/get-shit-done/workflows/progress.md +29 -29
- package/get-shit-done/workflows/quick.md +3 -3
- package/get-shit-done/workflows/remove-phase.md +6 -6
- package/get-shit-done/workflows/research-phase.md +2 -2
- package/get-shit-done/workflows/resume-project.md +11 -11
- package/get-shit-done/workflows/settings.md +6 -6
- package/get-shit-done/workflows/transition.md +13 -13
- package/get-shit-done/workflows/update.md +2 -2
- package/get-shit-done/workflows/verify-work.md +8 -8
- package/package.json +1 -1
- package/commands/gsd/new-project.md.bak +0 -1041
|
@@ -333,7 +333,7 @@ function cmdPhaseAdd(cwd, description, raw) {
|
|
|
333
333
|
fs.writeFileSync(path.join(dirPath, '.gitkeep'), '');
|
|
334
334
|
|
|
335
335
|
// Build phase entry
|
|
336
|
-
const phaseEntry = `\n### Phase ${newPhaseNum}: ${description}\n\n**Goal:** [To be planned]\n**Requirements**: TBD\n**Depends on:** Phase ${maxPhase}\n**Plans:** 0 plans\n\nPlans:\n- [ ] TBD (run
|
|
336
|
+
const phaseEntry = `\n### Phase ${newPhaseNum}: ${description}\n\n**Goal:** [To be planned]\n**Requirements**: TBD\n**Depends on:** Phase ${maxPhase}\n**Plans:** 0 plans\n\nPlans:\n- [ ] TBD (run $gsd-plan-phase ${newPhaseNum} to break down)\n`;
|
|
337
337
|
|
|
338
338
|
// Find insertion point: before last "---" or at end
|
|
339
339
|
let updatedContent;
|
|
@@ -404,7 +404,7 @@ function cmdPhaseInsert(cwd, afterPhase, description, raw) {
|
|
|
404
404
|
fs.writeFileSync(path.join(dirPath, '.gitkeep'), '');
|
|
405
405
|
|
|
406
406
|
// Build phase entry
|
|
407
|
-
const phaseEntry = `\n### Phase ${decimalPhase}: ${description} (INSERTED)\n\n**Goal:** [Urgent work - to be planned]\n**Requirements**: TBD\n**Depends on:** Phase ${afterPhase}\n**Plans:** 0 plans\n\nPlans:\n- [ ] TBD (run
|
|
407
|
+
const phaseEntry = `\n### Phase ${decimalPhase}: ${description} (INSERTED)\n\n**Goal:** [Urgent work - to be planned]\n**Requirements**: TBD\n**Depends on:** Phase ${afterPhase}\n**Plans:** 0 plans\n\nPlans:\n- [ ] TBD (run $gsd-plan-phase ${decimalPhase} to break down)\n`;
|
|
408
408
|
|
|
409
409
|
// Insert after the target phase section
|
|
410
410
|
const headerPattern = new RegExp(`(#{2,4}\\s*Phase\\s+0*${afterPhaseEscaped}:[^\\n]*\\n)`, 'i');
|
|
@@ -537,7 +537,7 @@ function cmdValidateHealth(cwd, options, raw) {
|
|
|
537
537
|
|
|
538
538
|
// ─── Check 1: .planning/ exists ───────────────────────────────────────────
|
|
539
539
|
if (!fs.existsSync(planningDir)) {
|
|
540
|
-
addIssue('error', 'E001', '.planning/ directory not found', 'Run
|
|
540
|
+
addIssue('error', 'E001', '.planning/ directory not found', 'Run $gsd-new-project to initialize');
|
|
541
541
|
output({
|
|
542
542
|
status: 'broken',
|
|
543
543
|
errors,
|
|
@@ -550,7 +550,7 @@ function cmdValidateHealth(cwd, options, raw) {
|
|
|
550
550
|
|
|
551
551
|
// ─── Check 2: PROJECT.md exists and has required sections ─────────────────
|
|
552
552
|
if (!fs.existsSync(projectPath)) {
|
|
553
|
-
addIssue('error', 'E002', 'PROJECT.md not found', 'Run
|
|
553
|
+
addIssue('error', 'E002', 'PROJECT.md not found', 'Run $gsd-new-project to create');
|
|
554
554
|
} else {
|
|
555
555
|
const content = fs.readFileSync(projectPath, 'utf-8');
|
|
556
556
|
const requiredSections = ['## What This Is', '## Core Value', '## Requirements'];
|
|
@@ -563,12 +563,12 @@ function cmdValidateHealth(cwd, options, raw) {
|
|
|
563
563
|
|
|
564
564
|
// ─── Check 3: ROADMAP.md exists ───────────────────────────────────────────
|
|
565
565
|
if (!fs.existsSync(roadmapPath)) {
|
|
566
|
-
addIssue('error', 'E003', 'ROADMAP.md not found', 'Run
|
|
566
|
+
addIssue('error', 'E003', 'ROADMAP.md not found', 'Run $gsd-new-milestone to create roadmap');
|
|
567
567
|
}
|
|
568
568
|
|
|
569
569
|
// ─── Check 4: STATE.md exists and references valid phases ─────────────────
|
|
570
570
|
if (!fs.existsSync(statePath)) {
|
|
571
|
-
addIssue('error', 'E004', 'STATE.md not found', 'Run
|
|
571
|
+
addIssue('error', 'E004', 'STATE.md not found', 'Run $gsd-health --repair to regenerate', true);
|
|
572
572
|
repairs.push('regenerateState');
|
|
573
573
|
} else {
|
|
574
574
|
const stateContent = fs.readFileSync(statePath, 'utf-8');
|
|
@@ -591,7 +591,7 @@ function cmdValidateHealth(cwd, options, raw) {
|
|
|
591
591
|
if (!diskPhases.has(ref) && !diskPhases.has(normalizedRef) && !diskPhases.has(String(parseInt(ref, 10)))) {
|
|
592
592
|
// Only warn if phases dir has any content (not just an empty project)
|
|
593
593
|
if (diskPhases.size > 0) {
|
|
594
|
-
addIssue('warning', 'W002', `STATE.md references phase ${ref}, but only phases ${[...diskPhases].sort().join(', ')} exist`, 'Run
|
|
594
|
+
addIssue('warning', 'W002', `STATE.md references phase ${ref}, but only phases ${[...diskPhases].sort().join(', ')} exist`, 'Run $gsd-health --repair to regenerate STATE.md', true);
|
|
595
595
|
if (!repairs.includes('regenerateState')) repairs.push('regenerateState');
|
|
596
596
|
}
|
|
597
597
|
}
|
|
@@ -600,7 +600,7 @@ function cmdValidateHealth(cwd, options, raw) {
|
|
|
600
600
|
|
|
601
601
|
// ─── Check 5: config.json valid JSON + valid schema ───────────────────────
|
|
602
602
|
if (!fs.existsSync(configPath)) {
|
|
603
|
-
addIssue('warning', 'W003', 'config.json not found', 'Run
|
|
603
|
+
addIssue('warning', 'W003', 'config.json not found', 'Run $gsd-health --repair to create with defaults', true);
|
|
604
604
|
repairs.push('createConfig');
|
|
605
605
|
} else {
|
|
606
606
|
try {
|
|
@@ -612,7 +612,7 @@ function cmdValidateHealth(cwd, options, raw) {
|
|
|
612
612
|
addIssue('warning', 'W004', `config.json: invalid model_profile "${parsed.model_profile}"`, `Valid values: ${validProfiles.join(', ')}`);
|
|
613
613
|
}
|
|
614
614
|
} catch (err) {
|
|
615
|
-
addIssue('error', 'E005', `config.json: JSON parse error - ${err.message}`, 'Run
|
|
615
|
+
addIssue('error', 'E005', `config.json: JSON parse error - ${err.message}`, 'Run $gsd-health --repair to reset to defaults', true);
|
|
616
616
|
repairs.push('resetConfig');
|
|
617
617
|
}
|
|
618
618
|
}
|
|
@@ -725,7 +725,7 @@ function cmdValidateHealth(cwd, options, raw) {
|
|
|
725
725
|
stateContent += `**Current phase:** (determining...)\n`;
|
|
726
726
|
stateContent += `**Status:** Resuming\n\n`;
|
|
727
727
|
stateContent += `## Session Log\n\n`;
|
|
728
|
-
stateContent += `- ${new Date().toISOString().split('T')[0]}: STATE.md regenerated by
|
|
728
|
+
stateContent += `- ${new Date().toISOString().split('T')[0]}: STATE.md regenerated by $gsd-health --repair\n`;
|
|
729
729
|
writeStateMd(statePath, stateContent, cwd);
|
|
730
730
|
repairActions.push({ action: repair, success: true, path: 'STATE.md' });
|
|
731
731
|
break;
|
|
@@ -13,7 +13,7 @@ Standard format for presenting next steps after completing a command or workflow
|
|
|
13
13
|
|
|
14
14
|
`{command to copy-paste}`
|
|
15
15
|
|
|
16
|
-
<sub
|
|
16
|
+
<sub>start a new session first → fresh context window</sub>
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
@@ -29,7 +29,7 @@ Standard format for presenting next steps after completing a command or workflow
|
|
|
29
29
|
1. **Always show what it is** — name + description, never just a command path
|
|
30
30
|
2. **Pull context from source** — ROADMAP.md for phases, PLAN.md `<objective>` for plans
|
|
31
31
|
3. **Command in inline code** — backticks, easy to copy-paste, renders as clickable link
|
|
32
|
-
4.
|
|
32
|
+
4. **New session reminder** — always include, keeps it concise but explains why
|
|
33
33
|
5. **"Also available" not "Other options"** — sounds more app-like
|
|
34
34
|
6. **Visual separators** — `---` above and below to make it stand out
|
|
35
35
|
|
|
@@ -44,15 +44,15 @@ Standard format for presenting next steps after completing a command or workflow
|
|
|
44
44
|
|
|
45
45
|
**02-03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
`$gsd-execute-phase 2`
|
|
48
48
|
|
|
49
|
-
<sub
|
|
49
|
+
<sub>start a new session first → fresh context window</sub>
|
|
50
50
|
|
|
51
51
|
---
|
|
52
52
|
|
|
53
53
|
**Also available:**
|
|
54
54
|
- Review plan before executing
|
|
55
|
-
-
|
|
55
|
+
- `$gsd-list-phase-assumptions 2` — check assumptions
|
|
56
56
|
|
|
57
57
|
---
|
|
58
58
|
```
|
|
@@ -69,9 +69,9 @@ Add note that this is the last plan and what comes after:
|
|
|
69
69
|
**02-03: Refresh Token Rotation** — Add /api/auth/refresh with sliding expiry
|
|
70
70
|
<sub>Final plan in Phase 2</sub>
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
`$gsd-execute-phase 2`
|
|
73
73
|
|
|
74
|
-
<sub
|
|
74
|
+
<sub>start a new session first → fresh context window</sub>
|
|
75
75
|
|
|
76
76
|
---
|
|
77
77
|
|
|
@@ -91,15 +91,15 @@ Add note that this is the last plan and what comes after:
|
|
|
91
91
|
|
|
92
92
|
**Phase 2: Authentication** — JWT login flow with refresh tokens
|
|
93
93
|
|
|
94
|
-
|
|
94
|
+
`$gsd-plan-phase 2`
|
|
95
95
|
|
|
96
|
-
<sub
|
|
96
|
+
<sub>start a new session first → fresh context window</sub>
|
|
97
97
|
|
|
98
98
|
---
|
|
99
99
|
|
|
100
100
|
**Also available:**
|
|
101
|
-
-
|
|
102
|
-
-
|
|
101
|
+
- `$gsd-discuss-phase 2` — gather context first
|
|
102
|
+
- `$gsd-research-phase 2` — investigate unknowns
|
|
103
103
|
- Review roadmap
|
|
104
104
|
|
|
105
105
|
---
|
|
@@ -120,15 +120,15 @@ Show completion status before next action:
|
|
|
120
120
|
|
|
121
121
|
**Phase 3: Core Features** — User dashboard, settings, and data export
|
|
122
122
|
|
|
123
|
-
|
|
123
|
+
`$gsd-plan-phase 3`
|
|
124
124
|
|
|
125
|
-
<sub
|
|
125
|
+
<sub>start a new session first → fresh context window</sub>
|
|
126
126
|
|
|
127
127
|
---
|
|
128
128
|
|
|
129
129
|
**Also available:**
|
|
130
|
-
-
|
|
131
|
-
-
|
|
130
|
+
- `$gsd-discuss-phase 3` — gather context first
|
|
131
|
+
- `$gsd-research-phase 3` — investigate unknowns
|
|
132
132
|
- Review what Phase 2 built
|
|
133
133
|
|
|
134
134
|
---
|
|
@@ -145,13 +145,13 @@ When there's no clear primary action:
|
|
|
145
145
|
|
|
146
146
|
**Phase 3: Core Features** — User dashboard, settings, and data export
|
|
147
147
|
|
|
148
|
-
**To plan directly:**
|
|
148
|
+
**To plan directly:** `$gsd-plan-phase 3`
|
|
149
149
|
|
|
150
|
-
**To discuss context first:**
|
|
150
|
+
**To discuss context first:** `$gsd-discuss-phase 3`
|
|
151
151
|
|
|
152
|
-
**To research unknowns:**
|
|
152
|
+
**To research unknowns:** `$gsd-research-phase 3`
|
|
153
153
|
|
|
154
|
-
<sub
|
|
154
|
+
<sub>start a new session first → fresh context window</sub>
|
|
155
155
|
|
|
156
156
|
---
|
|
157
157
|
```
|
|
@@ -169,9 +169,9 @@ All 4 phases shipped
|
|
|
169
169
|
|
|
170
170
|
**Start v1.1** — questioning → research → requirements → roadmap
|
|
171
171
|
|
|
172
|
-
|
|
172
|
+
`$gsd-new-milestone`
|
|
173
173
|
|
|
174
|
-
<sub
|
|
174
|
+
<sub>start a new session first → fresh context window</sub>
|
|
175
175
|
|
|
176
176
|
---
|
|
177
177
|
```
|
|
@@ -182,6 +182,7 @@ All 4 phases shipped
|
|
|
182
182
|
|
|
183
183
|
```markdown
|
|
184
184
|
### Phase 2: Authentication
|
|
185
|
+
|
|
185
186
|
**Goal**: JWT login flow with refresh tokens
|
|
186
187
|
```
|
|
187
188
|
|
|
@@ -191,6 +192,7 @@ Extract: `**Phase 2: Authentication** — JWT login flow with refresh tokens`
|
|
|
191
192
|
|
|
192
193
|
```markdown
|
|
193
194
|
Plans:
|
|
195
|
+
|
|
194
196
|
- [ ] 02-03: Add refresh token rotation
|
|
195
197
|
```
|
|
196
198
|
|
|
@@ -213,18 +215,18 @@ Extract: `**02-03: Refresh Token Rotation** — Add /api/auth/refresh with slidi
|
|
|
213
215
|
```
|
|
214
216
|
## To Continue
|
|
215
217
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
+
Start a new session, then paste:
|
|
219
|
+
$gsd-execute-phase 2
|
|
218
220
|
```
|
|
219
221
|
|
|
220
222
|
User has no idea what 02-03 is about.
|
|
221
223
|
|
|
222
|
-
### Don't: Missing
|
|
224
|
+
### Don't: Missing session reset explanation
|
|
223
225
|
|
|
224
226
|
```
|
|
225
|
-
|
|
227
|
+
`$gsd-plan-phase 3`
|
|
226
228
|
|
|
227
|
-
|
|
229
|
+
Start a new session first.
|
|
228
230
|
```
|
|
229
231
|
|
|
230
232
|
Doesn't explain why. User might skip it.
|
|
@@ -241,9 +243,13 @@ Sounds like an afterthought. Use "Also available:" instead.
|
|
|
241
243
|
### Don't: Fenced code blocks for commands
|
|
242
244
|
|
|
243
245
|
```
|
|
246
|
+
|
|
244
247
|
```
|
|
245
|
-
|
|
248
|
+
|
|
249
|
+
$gsd-plan-phase 3
|
|
250
|
+
|
|
246
251
|
```
|
|
252
|
+
|
|
247
253
|
```
|
|
248
254
|
|
|
249
255
|
Fenced blocks inside templates create nesting ambiguity. Use inline backticks instead.
|
|
@@ -65,7 +65,7 @@ Overrides take precedence over the profile. Valid values: `opus`, `sonnet`, `hai
|
|
|
65
65
|
|
|
66
66
|
## Switching Profiles
|
|
67
67
|
|
|
68
|
-
Runtime:
|
|
68
|
+
Runtime: `$gsd-set-profile <profile>`
|
|
69
69
|
|
|
70
70
|
Per-project default: Set in `.planning/config.json`:
|
|
71
71
|
```json
|
|
@@ -110,13 +110,13 @@ Always at end of major completions.
|
|
|
110
110
|
|
|
111
111
|
`{copy-paste command}`
|
|
112
112
|
|
|
113
|
-
<sub
|
|
113
|
+
<sub>start a new session first → fresh context window</sub>
|
|
114
114
|
|
|
115
115
|
───────────────────────────────────────────────────────────────
|
|
116
116
|
|
|
117
117
|
**Also available:**
|
|
118
|
-
-
|
|
119
|
-
-
|
|
118
|
+
- `$gsd-alternative-1` — description
|
|
119
|
+
- `$gsd-alternative-2` — description
|
|
120
120
|
|
|
121
121
|
───────────────────────────────────────────────────────────────
|
|
122
122
|
```
|
|
@@ -32,7 +32,7 @@ reproduction: [how to trigger]
|
|
|
32
32
|
started: [when it broke / always broken]
|
|
33
33
|
|
|
34
34
|
## Eliminated
|
|
35
|
-
<!-- APPEND only - prevents re-investigating after
|
|
35
|
+
<!-- APPEND only - prevents re-investigating after a session reset -->
|
|
36
36
|
|
|
37
37
|
- hypothesis: [theory that was wrong]
|
|
38
38
|
evidence: [what disproved it]
|
|
@@ -68,7 +68,7 @@ files_changed: []
|
|
|
68
68
|
**Current Focus:**
|
|
69
69
|
- OVERWRITE entirely on each update
|
|
70
70
|
- Always reflects what Codex is doing RIGHT NOW
|
|
71
|
-
- If Codex reads this after
|
|
71
|
+
- If Codex reads this after a session reset, it knows exactly where to resume
|
|
72
72
|
- Fields: hypothesis, test, expecting, next_action
|
|
73
73
|
|
|
74
74
|
**Symptoms:**
|
|
@@ -81,7 +81,7 @@ files_changed: []
|
|
|
81
81
|
- APPEND only - never remove entries
|
|
82
82
|
- Prevents re-investigating dead ends after context reset
|
|
83
83
|
- Each entry: hypothesis, evidence that disproved it, timestamp
|
|
84
|
-
- Critical for efficiency across
|
|
84
|
+
- Critical for efficiency across session boundaries
|
|
85
85
|
|
|
86
86
|
**Evidence:**
|
|
87
87
|
- APPEND only - never remove entries
|
|
@@ -99,7 +99,7 @@ files_changed: []
|
|
|
99
99
|
|
|
100
100
|
<lifecycle>
|
|
101
101
|
|
|
102
|
-
**Creation:** Immediately when
|
|
102
|
+
**Creation:** Immediately when $gsd-debug is called
|
|
103
103
|
- Create file with trigger from user input
|
|
104
104
|
- Set status to "gathering"
|
|
105
105
|
- Current Focus: next_action = "gather symptoms"
|
|
@@ -140,7 +140,7 @@ files_changed: []
|
|
|
140
140
|
|
|
141
141
|
<resume_behavior>
|
|
142
142
|
|
|
143
|
-
When Codex reads this file after
|
|
143
|
+
When Codex reads this file after a session reset:
|
|
144
144
|
|
|
145
145
|
1. Parse frontmatter → know status
|
|
146
146
|
2. Read Current Focus → know exactly what was happening
|
|
@@ -98,7 +98,7 @@ skipped: [N]
|
|
|
98
98
|
**Gaps:**
|
|
99
99
|
- APPEND only when issue found (YAML format)
|
|
100
100
|
- After diagnosis: fill `root_cause`, `artifacts`, `missing`, `debug_session`
|
|
101
|
-
- This section feeds directly into
|
|
101
|
+
- This section feeds directly into $gsd-plan-phase --gaps
|
|
102
102
|
|
|
103
103
|
</section_rules>
|
|
104
104
|
|
|
@@ -112,7 +112,7 @@ skipped: [N]
|
|
|
112
112
|
4. UAT.md Gaps section updated with diagnosis:
|
|
113
113
|
- Each gap gets `root_cause`, `artifacts`, `missing`, `debug_session` filled
|
|
114
114
|
5. status → "diagnosed"
|
|
115
|
-
6. Ready for
|
|
115
|
+
6. Ready for $gsd-plan-phase --gaps with root causes
|
|
116
116
|
|
|
117
117
|
**After diagnosis:**
|
|
118
118
|
```yaml
|
|
@@ -136,7 +136,7 @@ skipped: [N]
|
|
|
136
136
|
|
|
137
137
|
<lifecycle>
|
|
138
138
|
|
|
139
|
-
**Creation:** When
|
|
139
|
+
**Creation:** When $gsd-verify-work starts new session
|
|
140
140
|
- Extract tests from SUMMARY.md files
|
|
141
141
|
- Set status to "testing"
|
|
142
142
|
- Current Test points to test 1
|
|
@@ -156,7 +156,7 @@ skipped: [N]
|
|
|
156
156
|
- Commit file
|
|
157
157
|
- Present summary with next steps
|
|
158
158
|
|
|
159
|
-
**Resume after
|
|
159
|
+
**Resume after session reset:**
|
|
160
160
|
1. Read frontmatter → know phase and status
|
|
161
161
|
2. Read Current Test → know where we are
|
|
162
162
|
3. Find first [pending] result → continue from there
|
|
@@ -29,7 +29,7 @@ created: {date}
|
|
|
29
29
|
|
|
30
30
|
- **After every task commit:** Run `{quick run command}`
|
|
31
31
|
- **After every plan wave:** Run `{full suite command}`
|
|
32
|
-
- **Before
|
|
32
|
+
- **Before `$gsd-verify-work`:** Full suite must be green
|
|
33
33
|
- **Max feedback latency:** {N} seconds
|
|
34
34
|
|
|
35
35
|
---
|
|
@@ -4,7 +4,7 @@ Template for `.planning/phases/XX-name/DISCOVERY.md` - shallow research for libr
|
|
|
4
4
|
|
|
5
5
|
**Purpose:** Answer "which library/option should we use" questions during mandatory discovery in plan-phase.
|
|
6
6
|
|
|
7
|
-
For deep ecosystem research ("how do experts build this"), use
|
|
7
|
+
For deep ecosystem research ("how do experts build this"), use `$gsd-research-phase` which produces RESEARCH.md.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -142,5 +142,5 @@ Create `.planning/phases/XX-name/DISCOVERY.md`:
|
|
|
142
142
|
- Niche/complex domains (3D, games, audio, shaders)
|
|
143
143
|
- Need ecosystem knowledge, not just library choice
|
|
144
144
|
- "How do experts build this" questions
|
|
145
|
-
- Use
|
|
145
|
+
- Use `$gsd-research-phase` for these
|
|
146
146
|
</guidelines>
|
|
@@ -134,7 +134,7 @@ After completion, create `.planning/phases/XX-name/{phase}-{plan}-SUMMARY.md`
|
|
|
134
134
|
| `user_setup` | No | Array of human-required setup items (external services) |
|
|
135
135
|
| `must_haves` | Yes | Goal-backward verification criteria (see below) |
|
|
136
136
|
|
|
137
|
-
**Wave is pre-computed:** Wave numbers are assigned during
|
|
137
|
+
**Wave is pre-computed:** Wave numbers are assigned during `$gsd-plan-phase`. Execute-phase reads `wave` directly from frontmatter and groups plans by wave number. No runtime dependency analysis needed.
|
|
138
138
|
|
|
139
139
|
**Must-haves enable verification:** The `must_haves` field carries goal-backward requirements from planning to execution. After all plans complete, execute-phase spawns a verification subagent that checks these criteria against the actual codebase.
|
|
140
140
|
|
|
@@ -34,7 +34,7 @@ Template for spawning gsd-planner agent. The agent contains all planning experti
|
|
|
34
34
|
</planning_context>
|
|
35
35
|
|
|
36
36
|
<downstream_consumer>
|
|
37
|
-
Output consumed by
|
|
37
|
+
Output consumed by $gsd-execute-phase
|
|
38
38
|
Plans must be executable prompts with:
|
|
39
39
|
- Frontmatter (wave, depends_on, files_modified, autonomous)
|
|
40
40
|
- Tasks in XML format
|
|
@@ -68,7 +68,7 @@ Before returning PLANNING COMPLETE:
|
|
|
68
68
|
|
|
69
69
|
## Usage
|
|
70
70
|
|
|
71
|
-
**From
|
|
71
|
+
**From $gsd-plan-phase (standard mode):**
|
|
72
72
|
```python
|
|
73
73
|
Task(
|
|
74
74
|
prompt=filled_template,
|
|
@@ -77,7 +77,7 @@ Task(
|
|
|
77
77
|
)
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
**From
|
|
80
|
+
**From $gsd-plan-phase --gaps (gap closure mode):**
|
|
81
81
|
```python
|
|
82
82
|
Task(
|
|
83
83
|
prompt=filled_template, # with mode: gap_closure
|
|
@@ -147,7 +147,7 @@ PROJECT.md evolves throughout the project lifecycle.
|
|
|
147
147
|
|
|
148
148
|
For existing codebases:
|
|
149
149
|
|
|
150
|
-
1. **Map codebase first** via
|
|
150
|
+
1. **Map codebase first** via `$gsd-map-codebase`
|
|
151
151
|
|
|
152
152
|
2. **Infer Validated requirements** from existing code:
|
|
153
153
|
- What does the codebase actually do?
|
|
@@ -18,7 +18,7 @@ Template for `.planning/phases/XX-name/{phase_num}-RESEARCH.md` - comprehensive
|
|
|
18
18
|
<user_constraints>
|
|
19
19
|
## User Constraints (from CONTEXT.md)
|
|
20
20
|
|
|
21
|
-
**CRITICAL:** If CONTEXT.md exists from
|
|
21
|
+
**CRITICAL:** If CONTEXT.md exists from $gsd-discuss-phase, copy locked decisions here verbatim. These MUST be honored by the planner.
|
|
22
22
|
|
|
23
23
|
### Locked Decisions
|
|
24
24
|
[Copy from CONTEXT.md `## Decisions` section - these are NON-NEGOTIABLE]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Project Retrospective
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
_A living document updated after each milestone. Lessons feed forward into future planning._
|
|
4
4
|
|
|
5
5
|
## Milestone: v{version} — {name}
|
|
6
6
|
|
|
@@ -8,27 +8,33 @@
|
|
|
8
8
|
**Phases:** {count} | **Plans:** {count} | **Sessions:** {count}
|
|
9
9
|
|
|
10
10
|
### What Was Built
|
|
11
|
+
|
|
11
12
|
- {Key deliverable 1}
|
|
12
13
|
- {Key deliverable 2}
|
|
13
14
|
- {Key deliverable 3}
|
|
14
15
|
|
|
15
16
|
### What Worked
|
|
17
|
+
|
|
16
18
|
- {Efficiency win or successful pattern}
|
|
17
19
|
- {What went smoothly}
|
|
18
20
|
|
|
19
21
|
### What Was Inefficient
|
|
22
|
+
|
|
20
23
|
- {Missed opportunity}
|
|
21
24
|
- {What took longer than expected}
|
|
22
25
|
|
|
23
26
|
### Patterns Established
|
|
27
|
+
|
|
24
28
|
- {New pattern or convention that should persist}
|
|
25
29
|
|
|
26
30
|
### Key Lessons
|
|
31
|
+
|
|
27
32
|
1. {Specific, actionable lesson}
|
|
28
33
|
2. {Another lesson}
|
|
29
34
|
|
|
30
35
|
### Cost Observations
|
|
31
|
-
|
|
36
|
+
|
|
37
|
+
- Model mix: {breakdown of model usage}
|
|
32
38
|
- Sessions: {count}
|
|
33
39
|
- Notable: {efficiency observation}
|
|
34
40
|
|
|
@@ -38,15 +44,15 @@
|
|
|
38
44
|
|
|
39
45
|
### Process Evolution
|
|
40
46
|
|
|
41
|
-
| Milestone | Sessions | Phases | Key Change
|
|
42
|
-
|
|
43
|
-
| v{X}
|
|
47
|
+
| Milestone | Sessions | Phases | Key Change |
|
|
48
|
+
| --------- | -------- | ------ | ------------------------- |
|
|
49
|
+
| v{X} | {N} | {M} | {What changed in process} |
|
|
44
50
|
|
|
45
51
|
### Cumulative Quality
|
|
46
52
|
|
|
47
53
|
| Milestone | Tests | Coverage | Zero-Dep Additions |
|
|
48
|
-
|
|
49
|
-
| v{X}
|
|
54
|
+
| --------- | ----- | -------- | ------------------ |
|
|
55
|
+
| v{X} | {N} | {Y}% | {count} |
|
|
50
56
|
|
|
51
57
|
### Top Lessons (Verified Across Milestones)
|
|
52
58
|
|
|
@@ -145,10 +145,10 @@ Updated after each plan completion.
|
|
|
145
145
|
|
|
146
146
|
**Decisions:** Reference to PROJECT.md Key Decisions table, plus recent decisions summary for quick access. Full decision log lives in PROJECT.md.
|
|
147
147
|
|
|
148
|
-
**Pending Todos:** Ideas captured via
|
|
148
|
+
**Pending Todos:** Ideas captured via $gsd-add-todo
|
|
149
149
|
- Count of pending todos
|
|
150
150
|
- Reference to .planning/todos/pending/
|
|
151
|
-
- Brief list if few, count if many (e.g., "5 pending todos — see
|
|
151
|
+
- Brief list if few, count if many (e.g., "5 pending todos — see $gsd-check-todos")
|
|
152
152
|
|
|
153
153
|
**Blockers/Concerns:** From "Next Phase Readiness" sections
|
|
154
154
|
- Issues that affect future work
|
|
@@ -11,15 +11,15 @@ Read all files referenced by the invoking prompt's execution_context before star
|
|
|
11
11
|
<step name="parse_arguments">
|
|
12
12
|
Parse the command arguments:
|
|
13
13
|
- All arguments become the phase description
|
|
14
|
-
- Example:
|
|
15
|
-
- Example:
|
|
14
|
+
- Example: `$gsd-add-phase Add authentication` → description = "Add authentication"
|
|
15
|
+
- Example: `$gsd-add-phase Fix critical performance issues` → description = "Fix critical performance issues"
|
|
16
16
|
|
|
17
17
|
If no arguments provided:
|
|
18
18
|
|
|
19
19
|
```
|
|
20
20
|
ERROR: Phase description required
|
|
21
|
-
Usage:
|
|
22
|
-
Example:
|
|
21
|
+
Usage: $gsd-add-phase <description>
|
|
22
|
+
Example: $gsd-add-phase Add authentication system
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
Exit.
|
|
@@ -35,7 +35,7 @@ INIT=$(node ~/.codex/get-shit-done/bin/gsd-tools.cjs init phase-op "0")
|
|
|
35
35
|
Check `roadmap_exists` from init JSON. If false:
|
|
36
36
|
```
|
|
37
37
|
ERROR: No roadmap found (.planning/ROADMAP.md)
|
|
38
|
-
Run
|
|
38
|
+
Run $gsd-new-project to initialize.
|
|
39
39
|
```
|
|
40
40
|
Exit.
|
|
41
41
|
</step>
|
|
@@ -86,14 +86,14 @@ Roadmap updated: .planning/ROADMAP.md
|
|
|
86
86
|
|
|
87
87
|
**Phase {N}: {description}**
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
`$gsd-plan-phase {N}`
|
|
90
90
|
|
|
91
|
-
<sub
|
|
91
|
+
<sub>start a new session first → fresh context window</sub>
|
|
92
92
|
|
|
93
93
|
---
|
|
94
94
|
|
|
95
95
|
**Also available:**
|
|
96
|
-
-
|
|
96
|
+
- `$gsd-add-phase <description>` — add another phase
|
|
97
97
|
- Review roadmap
|
|
98
98
|
|
|
99
99
|
---
|