@undeemed/get-shit-done-codex 1.20.3 → 1.20.7
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/README.md +13 -3
- package/agents/gsd-codebase-mapper.md +3 -0
- package/agents/gsd-debugger.md +3 -0
- package/agents/gsd-executor.md +52 -2
- package/agents/gsd-integration-checker.md +20 -0
- package/agents/gsd-phase-researcher.md +96 -4
- package/agents/gsd-plan-checker.md +125 -3
- package/agents/gsd-planner.md +38 -3
- package/agents/gsd-project-researcher.md +3 -0
- package/agents/gsd-research-synthesizer.md +3 -0
- package/agents/gsd-roadmapper.md +3 -0
- package/agents/gsd-verifier.md +25 -8
- package/commands/gsd/add-phase.md +6 -2
- package/commands/gsd/add-todo.md +6 -1
- package/commands/gsd/audit-milestone.md +1 -7
- package/commands/gsd/check-todos.md +6 -2
- package/commands/gsd/debug.md +3 -1
- package/commands/gsd/discuss-phase.md +1 -5
- package/commands/gsd/execute-phase.md +1 -2
- package/commands/gsd/insert-phase.md +1 -2
- package/commands/gsd/list-phase-assumptions.md +1 -5
- package/commands/gsd/new-milestone.md +1 -8
- package/commands/gsd/pause-work.md +4 -1
- package/commands/gsd/plan-milestone-gaps.md +1 -7
- package/commands/gsd/quick.md +2 -1
- package/commands/gsd/remove-phase.md +1 -2
- package/commands/gsd/research-phase.md +17 -15
- package/commands/gsd/verify-work.md +1 -2
- package/get-shit-done/bin/gsd-tools.cjs +168 -4858
- package/get-shit-done/bin/lib/commands.cjs +556 -0
- package/get-shit-done/bin/lib/config.cjs +162 -0
- package/get-shit-done/bin/lib/core.cjs +398 -0
- package/get-shit-done/bin/lib/frontmatter.cjs +299 -0
- package/get-shit-done/bin/lib/init.cjs +694 -0
- package/get-shit-done/bin/lib/milestone.cjs +215 -0
- package/get-shit-done/bin/lib/phase.cjs +873 -0
- package/get-shit-done/bin/lib/roadmap.cjs +298 -0
- package/get-shit-done/bin/lib/state.cjs +490 -0
- package/get-shit-done/bin/lib/template.cjs +222 -0
- package/get-shit-done/bin/lib/verify.cjs +772 -0
- package/get-shit-done/references/checkpoints.md +1 -0
- package/get-shit-done/templates/VALIDATION.md +104 -0
- package/get-shit-done/templates/config.json +2 -1
- package/get-shit-done/templates/phase-prompt.md +2 -0
- package/get-shit-done/templates/roadmap.md +1 -1
- package/get-shit-done/templates/summary.md +2 -0
- package/get-shit-done/workflows/audit-milestone.md +63 -8
- package/get-shit-done/workflows/complete-milestone.md +26 -0
- package/get-shit-done/workflows/diagnose-issues.md +1 -1
- package/get-shit-done/workflows/discuss-phase.md +68 -13
- package/get-shit-done/workflows/execute-phase.md +54 -9
- package/get-shit-done/workflows/execute-plan.md +17 -13
- package/get-shit-done/workflows/map-codebase.md +32 -44
- package/get-shit-done/workflows/new-milestone.md +16 -7
- package/get-shit-done/workflows/new-project.md +34 -31
- package/get-shit-done/workflows/plan-milestone-gaps.md +23 -5
- package/get-shit-done/workflows/plan-phase.md +106 -76
- package/get-shit-done/workflows/progress.md +14 -26
- package/get-shit-done/workflows/quick.md +24 -15
- package/get-shit-done/workflows/research-phase.md +10 -11
- package/get-shit-done/workflows/settings.md +16 -3
- package/get-shit-done/workflows/transition.md +5 -0
- package/get-shit-done/workflows/verify-work.md +11 -12
- package/hooks/dist/gsd-context-monitor.js +122 -0
- package/hooks/dist/gsd-statusline.js +17 -0
- package/package.json +2 -2
- package/scripts/build-hooks.js +1 -0
- package/get-shit-done/bin/gsd-tools.test.cjs +0 -2273
|
@@ -8,6 +8,7 @@ Plans execute autonomously. Checkpoints formalize interaction points where human
|
|
|
8
8
|
2. **Codex sets up the verification environment** - Start dev servers, seed databases, configure env vars
|
|
9
9
|
3. **User only does what requires human judgment** - Visual checks, UX evaluation, "does this feel right?"
|
|
10
10
|
4. **Secrets come from user, automation comes from Codex** - Ask for API keys, then Codex uses them via CLI
|
|
11
|
+
5. **Auto-mode bypasses verification/decision checkpoints** — When `workflow.auto_advance` is true in config: human-verify auto-approves, decision auto-selects first option, human-action still stops (auth gates cannot be automated)
|
|
11
12
|
</overview>
|
|
12
13
|
|
|
13
14
|
<checkpoint_types>
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
---
|
|
2
|
+
phase: {N}
|
|
3
|
+
slug: {phase-slug}
|
|
4
|
+
status: draft
|
|
5
|
+
nyquist_compliant: false
|
|
6
|
+
wave_0_complete: false
|
|
7
|
+
created: {date}
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Phase {N} — Validation Strategy
|
|
11
|
+
|
|
12
|
+
> Generated by `gsd-phase-researcher` during `/gsd:plan-phase {N}`.
|
|
13
|
+
> Updated by `gsd-plan-checker` after plan approval.
|
|
14
|
+
> Governs feedback sampling during `/gsd:execute-phase {N}`.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Test Infrastructure
|
|
19
|
+
|
|
20
|
+
| Property | Value |
|
|
21
|
+
|----------|-------|
|
|
22
|
+
| **Framework** | {pytest 7.x / jest 29.x / vitest / go test / other} |
|
|
23
|
+
| **Config file** | {path/to/pytest.ini or "none — Wave 0 installs"} |
|
|
24
|
+
| **Quick run command** | `{e.g., pytest -x --tb=short}` |
|
|
25
|
+
| **Full suite command** | `{e.g., pytest tests/ --tb=short}` |
|
|
26
|
+
| **Estimated runtime** | ~{N} seconds |
|
|
27
|
+
| **CI pipeline** | {.github/workflows/test.yml — exists / needs creation} |
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Nyquist Sampling Rate
|
|
32
|
+
|
|
33
|
+
> The minimum feedback frequency required to reliably catch errors in this phase.
|
|
34
|
+
|
|
35
|
+
- **After every task commit:** Run `{quick run command}`
|
|
36
|
+
- **After every plan wave:** Run `{full suite command}`
|
|
37
|
+
- **Before `/gsd:verify-work`:** Full suite must be green
|
|
38
|
+
- **Maximum acceptable task feedback latency:** {N} seconds
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Per-Task Verification Map
|
|
43
|
+
|
|
44
|
+
| Task ID | Plan | Wave | Requirement | Test Type | Automated Command | File Exists | Status |
|
|
45
|
+
|---------|------|------|-------------|-----------|-------------------|-------------|--------|
|
|
46
|
+
| {N}-01-01 | 01 | 1 | REQ-{XX} | unit | `pytest tests/test_{module}.py::test_{name} -x` | ✅ / ❌ W0 | ⬜ pending |
|
|
47
|
+
| {N}-01-02 | 01 | 1 | REQ-{XX} | integration | `pytest tests/test_{flow}.py -x` | ✅ / ❌ W0 | ⬜ pending |
|
|
48
|
+
| {N}-02-01 | 02 | 2 | REQ-{XX} | smoke | `curl -s {endpoint} \| grep {expected}` | ✅ N/A | ⬜ pending |
|
|
49
|
+
|
|
50
|
+
*Status values: ⬜ pending · ✅ green · ❌ red · ⚠️ flaky*
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Wave 0 Requirements
|
|
55
|
+
|
|
56
|
+
> Test scaffolding committed BEFORE any implementation task. Executor runs Wave 0 first.
|
|
57
|
+
|
|
58
|
+
- [ ] `{tests/test_file.py}` — stubs for REQ-{XX}, REQ-{XX}
|
|
59
|
+
- [ ] `{tests/conftest.py}` — shared fixtures
|
|
60
|
+
- [ ] `{framework install}` — if no framework detected
|
|
61
|
+
|
|
62
|
+
*If none required: "Existing infrastructure covers all phase requirements — no Wave 0 test tasks needed."*
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## Manual-Only Verifications
|
|
67
|
+
|
|
68
|
+
> Behaviors that genuinely cannot be automated, with justification.
|
|
69
|
+
> These are surfaced during `/gsd:verify-work` UAT.
|
|
70
|
+
|
|
71
|
+
| Behavior | Requirement | Why Manual | Test Instructions |
|
|
72
|
+
|----------|-------------|------------|-------------------|
|
|
73
|
+
| {behavior} | REQ-{XX} | {reason: visual, third-party auth, physical device...} | {step-by-step} |
|
|
74
|
+
|
|
75
|
+
*If none: "All phase behaviors have automated verification coverage."*
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Validation Sign-Off
|
|
80
|
+
|
|
81
|
+
Updated by `gsd-plan-checker` when plans are approved:
|
|
82
|
+
|
|
83
|
+
- [ ] All tasks have `<automated>` verify commands or Wave 0 dependencies
|
|
84
|
+
- [ ] No 3 consecutive implementation tasks without automated verify (sampling continuity)
|
|
85
|
+
- [ ] Wave 0 test files cover all MISSING references
|
|
86
|
+
- [ ] No watch-mode flags in any automated command
|
|
87
|
+
- [ ] Feedback latency per task: < {N}s ✅
|
|
88
|
+
- [ ] `nyquist_compliant: true` set in frontmatter
|
|
89
|
+
|
|
90
|
+
**Plan-checker approval:** {pending / approved on YYYY-MM-DD}
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Execution Tracking
|
|
95
|
+
|
|
96
|
+
Updated during `/gsd:execute-phase {N}`:
|
|
97
|
+
|
|
98
|
+
| Wave | Tasks | Tests Run | Pass | Fail | Sampling Status |
|
|
99
|
+
|------|-------|-----------|------|------|-----------------|
|
|
100
|
+
| 0 | {N} | — | — | — | scaffold |
|
|
101
|
+
| 1 | {N} | {command} | {N} | {N} | ✅ sampled |
|
|
102
|
+
| 2 | {N} | {command} | {N} | {N} | ✅ sampled |
|
|
103
|
+
|
|
104
|
+
**Phase validation complete:** {pending / YYYY-MM-DD HH:MM}
|
|
@@ -20,6 +20,7 @@ wave: N # Execution wave (1, 2, 3...). Pre-computed at plan
|
|
|
20
20
|
depends_on: [] # Plan IDs this plan requires (e.g., ["01-01"]).
|
|
21
21
|
files_modified: [] # Files this plan modifies.
|
|
22
22
|
autonomous: true # false if plan has checkpoints requiring user interaction
|
|
23
|
+
requirements: [] # REQUIRED — Requirement IDs from ROADMAP this plan addresses. MUST NOT be empty.
|
|
23
24
|
user_setup: [] # Human-required setup Codex cannot automate (see below)
|
|
24
25
|
|
|
25
26
|
# Goal-backward verification (derived during planning, verified after execution)
|
|
@@ -129,6 +130,7 @@ After completion, create `.planning/phases/XX-name/{phase}-{plan}-SUMMARY.md`
|
|
|
129
130
|
| `depends_on` | Yes | Array of plan IDs this plan requires. |
|
|
130
131
|
| `files_modified` | Yes | Files this plan touches. |
|
|
131
132
|
| `autonomous` | Yes | `true` if no checkpoints, `false` if has checkpoints |
|
|
133
|
+
| `requirements` | Yes | **MUST** list requirement IDs from ROADMAP. Every roadmap requirement MUST appear in at least one plan. |
|
|
132
134
|
| `user_setup` | No | Array of human-required setup items (external services) |
|
|
133
135
|
| `must_haves` | Yes | Goal-backward verification criteria (see below) |
|
|
134
136
|
|
|
@@ -29,7 +29,7 @@ Decimal phases appear between their surrounding integers in numeric order.
|
|
|
29
29
|
### Phase 1: [Name]
|
|
30
30
|
**Goal**: [What this phase delivers]
|
|
31
31
|
**Depends on**: Nothing (first phase)
|
|
32
|
-
**Requirements**: [REQ-01, REQ-02, REQ-03]
|
|
32
|
+
**Requirements**: [REQ-01, REQ-02, REQ-03] <!-- brackets optional, parser handles both formats -->
|
|
33
33
|
**Success Criteria** (what must be TRUE):
|
|
34
34
|
1. [Observable behavior from user perspective]
|
|
35
35
|
2. [Observable behavior from user perspective]
|
|
@@ -38,6 +38,8 @@ patterns-established:
|
|
|
38
38
|
- "Pattern 1: description"
|
|
39
39
|
- "Pattern 2: description"
|
|
40
40
|
|
|
41
|
+
requirements-completed: [] # REQUIRED — Copy ALL requirement IDs from this plan's `requirements` frontmatter field.
|
|
42
|
+
|
|
41
43
|
# Metrics
|
|
42
44
|
duration: Xmin
|
|
43
45
|
completed: YYYY-MM-DD
|
|
@@ -57,6 +57,8 @@ If a phase is missing VERIFICATION.md, flag it as "unverified phase" — this is
|
|
|
57
57
|
|
|
58
58
|
With phase context collected:
|
|
59
59
|
|
|
60
|
+
Extract `MILESTONE_REQ_IDS` from REQUIREMENTS.md traceability table — all REQ-IDs assigned to phases in this milestone.
|
|
61
|
+
|
|
60
62
|
```
|
|
61
63
|
Task(
|
|
62
64
|
prompt="Check cross-phase integration and E2E flows.
|
|
@@ -65,6 +67,11 @@ Phases: {phase_dirs}
|
|
|
65
67
|
Phase exports: {from SUMMARYs}
|
|
66
68
|
API routes: {routes created}
|
|
67
69
|
|
|
70
|
+
Milestone Requirements:
|
|
71
|
+
{MILESTONE_REQ_IDS — list each REQ-ID with description and assigned phase}
|
|
72
|
+
|
|
73
|
+
MUST map each integration finding to affected requirement IDs where applicable.
|
|
74
|
+
|
|
68
75
|
Verify cross-phase wiring and E2E user flows.",
|
|
69
76
|
subagent_type="gsd-integration-checker",
|
|
70
77
|
model="{integration_checker_model}"
|
|
@@ -77,12 +84,48 @@ Combine:
|
|
|
77
84
|
- Phase-level gaps and tech debt (from step 2)
|
|
78
85
|
- Integration checker's report (wiring gaps, broken flows)
|
|
79
86
|
|
|
80
|
-
## 5. Check Requirements Coverage
|
|
87
|
+
## 5. Check Requirements Coverage (3-Source Cross-Reference)
|
|
88
|
+
|
|
89
|
+
MUST cross-reference three independent sources for each requirement:
|
|
90
|
+
|
|
91
|
+
### 5a. Parse REQUIREMENTS.md Traceability Table
|
|
92
|
+
|
|
93
|
+
Extract all REQ-IDs mapped to milestone phases from the traceability table:
|
|
94
|
+
- Requirement ID, description, assigned phase, current status, checked-off state (`[x]` vs `[ ]`)
|
|
95
|
+
|
|
96
|
+
### 5b. Parse Phase VERIFICATION.md Requirements Tables
|
|
97
|
+
|
|
98
|
+
For each phase's VERIFICATION.md, extract the expanded requirements table:
|
|
99
|
+
- Requirement | Source Plan | Description | Status | Evidence
|
|
100
|
+
- Map each entry back to its REQ-ID
|
|
101
|
+
|
|
102
|
+
### 5c. Extract SUMMARY.md Frontmatter Cross-Check
|
|
103
|
+
|
|
104
|
+
For each phase's SUMMARY.md, extract `requirements-completed` from YAML frontmatter:
|
|
105
|
+
```bash
|
|
106
|
+
for summary in .planning/phases/*-*/*-SUMMARY.md; do
|
|
107
|
+
node ~/.codex/get-shit-done/bin/gsd-tools.cjs summary-extract "$summary" --fields requirements_completed | jq -r '.requirements_completed'
|
|
108
|
+
done
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 5d. Status Determination Matrix
|
|
112
|
+
|
|
113
|
+
For each REQ-ID, determine status using all three sources:
|
|
114
|
+
|
|
115
|
+
| VERIFICATION.md Status | SUMMARY Frontmatter | REQUIREMENTS.md | → Final Status |
|
|
116
|
+
|------------------------|---------------------|-----------------|----------------|
|
|
117
|
+
| passed | listed | `[x]` | **satisfied** |
|
|
118
|
+
| passed | listed | `[ ]` | **satisfied** (update checkbox) |
|
|
119
|
+
| passed | missing | any | **partial** (verify manually) |
|
|
120
|
+
| gaps_found | any | any | **unsatisfied** |
|
|
121
|
+
| missing | listed | any | **partial** (verification gap) |
|
|
122
|
+
| missing | missing | any | **unsatisfied** |
|
|
123
|
+
|
|
124
|
+
### 5e. FAIL Gate and Orphan Detection
|
|
125
|
+
|
|
126
|
+
**REQUIRED:** Any `unsatisfied` requirement MUST force `gaps_found` status on the milestone audit.
|
|
81
127
|
|
|
82
|
-
|
|
83
|
-
- Find owning phase
|
|
84
|
-
- Check phase verification status
|
|
85
|
-
- Determine: satisfied | partial | unsatisfied
|
|
128
|
+
**Orphan detection:** Requirements present in REQUIREMENTS.md traceability table but absent from ALL phase VERIFICATION.md files MUST be flagged as orphaned. Orphaned requirements are treated as `unsatisfied` — they were assigned but never verified by any phase.
|
|
86
129
|
|
|
87
130
|
## 6. Aggregate into v{version}-MILESTONE-AUDIT.md
|
|
88
131
|
|
|
@@ -99,7 +142,14 @@ scores:
|
|
|
99
142
|
integration: N/M
|
|
100
143
|
flows: N/M
|
|
101
144
|
gaps: # Critical blockers
|
|
102
|
-
requirements:
|
|
145
|
+
requirements:
|
|
146
|
+
- id: "{REQ-ID}"
|
|
147
|
+
status: "unsatisfied | partial | orphaned"
|
|
148
|
+
phase: "{assigned phase}"
|
|
149
|
+
claimed_by_plans: ["{plan files that reference this requirement}"]
|
|
150
|
+
completed_by_plans: ["{plan files whose SUMMARY marks it complete}"]
|
|
151
|
+
verification_status: "passed | gaps_found | missing | orphaned"
|
|
152
|
+
evidence: "{specific evidence or lack thereof}"
|
|
103
153
|
integration: [...]
|
|
104
154
|
flows: [...]
|
|
105
155
|
tech_debt: # Non-critical, deferred
|
|
@@ -235,8 +285,13 @@ All requirements met. No critical blockers. Accumulated tech debt needs review.
|
|
|
235
285
|
<success_criteria>
|
|
236
286
|
- [ ] Milestone scope identified
|
|
237
287
|
- [ ] All phase VERIFICATION.md files read
|
|
288
|
+
- [ ] SUMMARY.md `requirements-completed` frontmatter extracted for each phase
|
|
289
|
+
- [ ] REQUIREMENTS.md traceability table parsed for all milestone REQ-IDs
|
|
290
|
+
- [ ] 3-source cross-reference completed (VERIFICATION + SUMMARY + traceability)
|
|
291
|
+
- [ ] Orphaned requirements detected (in traceability but absent from all VERIFICATIONs)
|
|
238
292
|
- [ ] Tech debt and deferred gaps aggregated
|
|
239
|
-
- [ ] Integration checker spawned
|
|
240
|
-
- [ ] v{version}-MILESTONE-AUDIT.md created
|
|
293
|
+
- [ ] Integration checker spawned with milestone requirement IDs
|
|
294
|
+
- [ ] v{version}-MILESTONE-AUDIT.md created with structured requirement gap objects
|
|
295
|
+
- [ ] FAIL gate enforced — any unsatisfied requirement forces gaps_found status
|
|
241
296
|
- [ ] Results presented with actionable next steps
|
|
242
297
|
</success_criteria>
|
|
@@ -48,6 +48,12 @@ This returns all phases with plan/summary counts and disk status. Use this to ve
|
|
|
48
48
|
- All phases complete (all plans have summaries)? Check `disk_status === 'complete'` for each.
|
|
49
49
|
- `progress_percent` should be 100%.
|
|
50
50
|
|
|
51
|
+
**Requirements completion check (REQUIRED before presenting):**
|
|
52
|
+
|
|
53
|
+
Parse REQUIREMENTS.md traceability table:
|
|
54
|
+
- Count total v1 requirements vs checked-off (`[x]`) requirements
|
|
55
|
+
- Identify any non-Complete rows in the traceability table
|
|
56
|
+
|
|
51
57
|
Present:
|
|
52
58
|
|
|
53
59
|
```
|
|
@@ -60,7 +66,24 @@ Includes:
|
|
|
60
66
|
- Phase 4: Polish (1/1 plan complete)
|
|
61
67
|
|
|
62
68
|
Total: {phase_count} phases, {total_plans} plans, all complete
|
|
69
|
+
Requirements: {N}/{M} v1 requirements checked off
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
**If requirements incomplete** (N < M):
|
|
73
|
+
|
|
63
74
|
```
|
|
75
|
+
⚠ Unchecked Requirements:
|
|
76
|
+
|
|
77
|
+
- [ ] {REQ-ID}: {description} (Phase {X})
|
|
78
|
+
- [ ] {REQ-ID}: {description} (Phase {Y})
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
MUST present 3 options:
|
|
82
|
+
1. **Proceed anyway** — mark milestone complete with known gaps
|
|
83
|
+
2. **Run audit first** — `/gsd:audit-milestone` to assess gap severity
|
|
84
|
+
3. **Abort** — return to development
|
|
85
|
+
|
|
86
|
+
If user selects "Proceed anyway": note incomplete requirements in MILESTONES.md under `### Known Gaps` with REQ-IDs and descriptions.
|
|
64
87
|
|
|
65
88
|
<config-check>
|
|
66
89
|
|
|
@@ -669,6 +692,9 @@ Milestone completion is successful when:
|
|
|
669
692
|
- [ ] STATE.md updated with fresh project reference
|
|
670
693
|
- [ ] Git tag created (v[X.Y])
|
|
671
694
|
- [ ] Milestone commit made (includes archive files and deletion)
|
|
695
|
+
- [ ] Requirements completion checked against REQUIREMENTS.md traceability table
|
|
696
|
+
- [ ] Incomplete requirements surfaced with proceed/audit/abort options
|
|
697
|
+
- [ ] Known gaps recorded in MILESTONES.md if user proceeded with incomplete requirements
|
|
672
698
|
- [ ] User knows next step (/gsd:new-milestone)
|
|
673
699
|
|
|
674
700
|
</success_criteria>
|
|
@@ -79,7 +79,7 @@ For each gap, fill the debug-subagent-prompt template and spawn:
|
|
|
79
79
|
|
|
80
80
|
```
|
|
81
81
|
Task(
|
|
82
|
-
prompt=filled_debug_subagent_prompt,
|
|
82
|
+
prompt=filled_debug_subagent_prompt + "\n\n<files_to_read>\n- {phase_dir}/{phase_num}-UAT.md\n- .planning/STATE.md\n</files_to_read>",
|
|
83
83
|
subagent_type="general-purpose",
|
|
84
84
|
description="Debug: {truth_short}"
|
|
85
85
|
)
|
|
@@ -206,9 +206,10 @@ We'll clarify HOW to implement this.
|
|
|
206
206
|
**Then use AskUserQuestion (multiSelect: true):**
|
|
207
207
|
- header: "Discuss"
|
|
208
208
|
- question: "Which areas do you want to discuss for [phase name]?"
|
|
209
|
-
- options: Generate 3-4 phase-specific gray areas, each
|
|
209
|
+
- options: Generate 3-4 phase-specific gray areas, each with:
|
|
210
210
|
- "[Specific area]" (label) — concrete, not generic
|
|
211
211
|
- [1-2 questions this covers] (description)
|
|
212
|
+
- **Highlight the recommended choice with brief explanation why**
|
|
212
213
|
|
|
213
214
|
**Do NOT include a "skip" or "you decide" option.** User ran this command to discuss — give them real choices.
|
|
214
215
|
|
|
@@ -258,7 +259,7 @@ Ask 4 questions per area before offering to continue or move on. Each answer oft
|
|
|
258
259
|
2. **Ask 4 questions using AskUserQuestion:**
|
|
259
260
|
- header: "[Area]" (max 12 chars — abbreviate if needed)
|
|
260
261
|
- question: Specific decision for this area
|
|
261
|
-
- options: 2-3 concrete choices (AskUserQuestion adds "Other" automatically)
|
|
262
|
+
- options: 2-3 concrete choices (AskUserQuestion adds "Other" automatically), with the recommended choice highlighted and brief explanation why
|
|
262
263
|
- Include "You decide" as an option when reasonable — captures Codex discretion
|
|
263
264
|
|
|
264
265
|
3. **After 4 questions, check:**
|
|
@@ -270,10 +271,17 @@ Ask 4 questions per area before offering to continue or move on. Each answer oft
|
|
|
270
271
|
If "Next area" → proceed to next selected area
|
|
271
272
|
If "Other" (free text) → interpret intent: continuation phrases ("chat more", "keep going", "yes", "more") map to "More questions"; advancement phrases ("done", "move on", "next", "skip") map to "Next area". If ambiguous, ask: "Continue with more questions about [area], or move to the next area?"
|
|
272
273
|
|
|
273
|
-
4. **After all areas complete:**
|
|
274
|
-
-
|
|
275
|
-
-
|
|
276
|
-
|
|
274
|
+
4. **After all initially-selected areas complete:**
|
|
275
|
+
- Summarize what was captured from the discussion so far
|
|
276
|
+
- AskUserQuestion:
|
|
277
|
+
- header: "Done"
|
|
278
|
+
- question: "We've discussed [list areas]. Which gray areas remain unclear?"
|
|
279
|
+
- options: "Explore more gray areas" / "I'm ready for context"
|
|
280
|
+
- If "Explore more gray areas":
|
|
281
|
+
- Identify 2-4 additional gray areas based on what was learned
|
|
282
|
+
- Return to present_gray_areas logic with these new areas
|
|
283
|
+
- Loop: discuss new areas, then prompt again
|
|
284
|
+
- If "I'm ready for context": Proceed to write_context
|
|
277
285
|
|
|
278
286
|
**Question design:**
|
|
279
287
|
- Options should be concrete, not abstract ("Cards" not "Option A")
|
|
@@ -436,6 +444,11 @@ Check for auto-advance trigger:
|
|
|
436
444
|
AUTO_CFG=$(node ~/.codex/get-shit-done/bin/gsd-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false")
|
|
437
445
|
```
|
|
438
446
|
|
|
447
|
+
**If `--auto` flag present AND `AUTO_CFG` is not true:** Persist auto-advance to config (handles direct `--auto` usage without new-project):
|
|
448
|
+
```bash
|
|
449
|
+
node ~/.codex/get-shit-done/bin/gsd-tools.cjs config-set workflow.auto_advance true
|
|
450
|
+
```
|
|
451
|
+
|
|
439
452
|
**If `--auto` flag present OR `AUTO_CFG` is true:**
|
|
440
453
|
|
|
441
454
|
Display banner:
|
|
@@ -447,23 +460,65 @@ Display banner:
|
|
|
447
460
|
Context captured. Spawning plan-phase...
|
|
448
461
|
```
|
|
449
462
|
|
|
450
|
-
Spawn plan-phase as Task:
|
|
463
|
+
Spawn plan-phase as Task with direct workflow file reference (do NOT use Skill tool — Skills don't resolve inside Task subagents):
|
|
451
464
|
```
|
|
452
465
|
Task(
|
|
453
|
-
prompt="
|
|
466
|
+
prompt="
|
|
467
|
+
<objective>
|
|
468
|
+
You are the plan-phase orchestrator. Create executable plans for Phase ${PHASE}: ${PHASE_NAME}, then auto-advance to execution.
|
|
469
|
+
</objective>
|
|
470
|
+
|
|
471
|
+
<execution_context>
|
|
472
|
+
@~/.codex/get-shit-done/workflows/plan-phase.md
|
|
473
|
+
@~/.codex/get-shit-done/references/ui-brand.md
|
|
474
|
+
@~/.codex/get-shit-done/references/model-profile-resolution.md
|
|
475
|
+
</execution_context>
|
|
476
|
+
|
|
477
|
+
<arguments>
|
|
478
|
+
PHASE=${PHASE}
|
|
479
|
+
ARGUMENTS='${PHASE} --auto'
|
|
480
|
+
</arguments>
|
|
481
|
+
|
|
482
|
+
<instructions>
|
|
483
|
+
1. Read plan-phase.md from execution_context for your complete workflow
|
|
484
|
+
2. Follow ALL steps: initialize, validate, load context, research, plan, verify, auto-advance
|
|
485
|
+
3. When spawning agents (gsd-phase-researcher, gsd-planner, gsd-plan-checker), use Task with specified subagent_type and model
|
|
486
|
+
4. For step 14 (auto-advance to execute): spawn execute-phase as a Task with DIRECT file reference — tell it to read execute-phase.md. Include @file refs to execute-phase.md, checkpoints.md, tdd.md, model-profile-resolution.md. Pass --no-transition flag so execute-phase returns results instead of chaining further.
|
|
487
|
+
5. Do NOT use the Skill tool or /gsd: commands. Read workflow .md files directly.
|
|
488
|
+
6. Return: PHASE COMPLETE (full pipeline success), PLANNING COMPLETE (planning done but execute failed/skipped), PLANNING INCONCLUSIVE, or GAPS FOUND
|
|
489
|
+
</instructions>
|
|
490
|
+
",
|
|
454
491
|
subagent_type="general-purpose",
|
|
455
492
|
description="Plan Phase ${PHASE}"
|
|
456
493
|
)
|
|
457
494
|
```
|
|
458
495
|
|
|
459
496
|
**Handle plan-phase return:**
|
|
460
|
-
- **
|
|
461
|
-
- **PLANNING INCONCLUSIVE / CHECKPOINT** → Display result, stop chain:
|
|
497
|
+
- **PHASE COMPLETE** → Full chain succeeded. Display:
|
|
462
498
|
```
|
|
463
|
-
|
|
499
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
500
|
+
GSD ► PHASE ${PHASE} COMPLETE
|
|
501
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
502
|
+
|
|
503
|
+
Auto-advance pipeline finished: discuss → plan → execute
|
|
464
504
|
|
|
465
|
-
|
|
466
|
-
|
|
505
|
+
Next: /gsd:discuss-phase ${NEXT_PHASE} --auto
|
|
506
|
+
<sub>/clear first → fresh context window</sub>
|
|
507
|
+
```
|
|
508
|
+
- **PLANNING COMPLETE** → Planning done, execution didn't complete:
|
|
509
|
+
```
|
|
510
|
+
Auto-advance partial: Planning complete, execution did not finish.
|
|
511
|
+
Continue: /gsd:execute-phase ${PHASE}
|
|
512
|
+
```
|
|
513
|
+
- **PLANNING INCONCLUSIVE / CHECKPOINT** → Stop chain:
|
|
514
|
+
```
|
|
515
|
+
Auto-advance stopped: Planning needs input.
|
|
516
|
+
Continue: /gsd:plan-phase ${PHASE}
|
|
517
|
+
```
|
|
518
|
+
- **GAPS FOUND** → Stop chain:
|
|
519
|
+
```
|
|
520
|
+
Auto-advance stopped: Gaps found during execution.
|
|
521
|
+
Continue: /gsd:plan-phase ${PHASE} --gaps
|
|
467
522
|
```
|
|
468
523
|
|
|
469
524
|
**If neither `--auto` nor config enabled:**
|
|
@@ -106,7 +106,7 @@ Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`
|
|
|
106
106
|
prompt="
|
|
107
107
|
<objective>
|
|
108
108
|
Execute plan {plan_number} of phase {phase_number}-{phase_name}.
|
|
109
|
-
Commit each task atomically. Create SUMMARY.md. Update STATE.md.
|
|
109
|
+
Commit each task atomically. Create SUMMARY.md. Update STATE.md and ROADMAP.md.
|
|
110
110
|
</objective>
|
|
111
111
|
|
|
112
112
|
<execution_context>
|
|
@@ -118,9 +118,11 @@ Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`
|
|
|
118
118
|
|
|
119
119
|
<files_to_read>
|
|
120
120
|
Read these files at execution start using the Read tool:
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
121
|
+
- {phase_dir}/{plan_file} (Plan)
|
|
122
|
+
- .planning/STATE.md (State)
|
|
123
|
+
- .planning/config.json (Config, if exists)
|
|
124
|
+
- ./CODEX.md (Project instructions, if exists — follow project-specific guidelines and coding conventions)
|
|
125
|
+
- .agents/skills/ (Project skills, if exists — list skills, read SKILL.md for each, follow relevant rules during implementation)
|
|
124
126
|
</files_to_read>
|
|
125
127
|
|
|
126
128
|
<success_criteria>
|
|
@@ -128,6 +130,7 @@ Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`
|
|
|
128
130
|
- [ ] Each task committed individually
|
|
129
131
|
- [ ] SUMMARY.md created in plan directory
|
|
130
132
|
- [ ] STATE.md updated with position and decisions
|
|
133
|
+
- [ ] ROADMAP.md updated with plan progress (via `roadmap update-plan-progress`)
|
|
131
134
|
</success_criteria>
|
|
132
135
|
"
|
|
133
136
|
)
|
|
@@ -162,7 +165,7 @@ Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`
|
|
|
162
165
|
|
|
163
166
|
5. **Handle failures:**
|
|
164
167
|
|
|
165
|
-
**Known Codex
|
|
168
|
+
**Known Codex Code bug (classifyHandoffIfNeeded):** If an agent reports "failed" with error containing `classifyHandoffIfNeeded is not defined`, this is a Codex Code runtime bug — not a GSD or agent issue. The error fires in the completion handler AFTER all tool calls finish. In this case: run the same spot-checks as step 4 (SUMMARY.md exists, git commits present, no Self-Check: FAILED). If spot-checks PASS → treat as **successful**. If spot-checks FAIL → treat as real failure below.
|
|
166
169
|
|
|
167
170
|
For real failures: report which plan failed → ask "Continue?" or "Stop?" → if continue, dependent plans may also fail. If stop, partial completion report.
|
|
168
171
|
|
|
@@ -174,7 +177,19 @@ Execute each wave in sequence. Within a wave: parallel if `PARALLELIZATION=true`
|
|
|
174
177
|
<step name="checkpoint_handling">
|
|
175
178
|
Plans with `autonomous: false` require user interaction.
|
|
176
179
|
|
|
177
|
-
**
|
|
180
|
+
**Auto-mode checkpoint handling:**
|
|
181
|
+
|
|
182
|
+
Read auto-advance config:
|
|
183
|
+
```bash
|
|
184
|
+
AUTO_CFG=$(node ~/.codex/get-shit-done/bin/gsd-tools.cjs config-get workflow.auto_advance 2>/dev/null || echo "false")
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
When executor returns a checkpoint AND `AUTO_CFG` is `"true"`:
|
|
188
|
+
- **human-verify** → Auto-spawn continuation agent with `{user_response}` = `"approved"`. Log `⚡ Auto-approved checkpoint`.
|
|
189
|
+
- **decision** → Auto-spawn continuation agent with `{user_response}` = first option from checkpoint details. Log `⚡ Auto-selected: [option]`.
|
|
190
|
+
- **human-action** → Present to user (existing behavior below). Auth gates cannot be automated.
|
|
191
|
+
|
|
192
|
+
**Standard flow (not auto-mode, or human-action type):**
|
|
178
193
|
|
|
179
194
|
1. Spawn agent for checkpoint plan
|
|
180
195
|
2. Agent runs until checkpoint task or auth gate → returns structured state
|
|
@@ -279,12 +294,19 @@ node ~/.codex/get-shit-done/bin/gsd-tools.cjs commit "docs(phase-${PARENT_PHASE}
|
|
|
279
294
|
<step name="verify_phase_goal">
|
|
280
295
|
Verify phase achieved its GOAL, not just completed tasks.
|
|
281
296
|
|
|
297
|
+
```bash
|
|
298
|
+
PHASE_REQ_IDS=$(node ~/.codex/get-shit-done/bin/gsd-tools.cjs roadmap get-phase "${PHASE_NUMBER}" | jq -r '.section' | grep -i "Requirements:" | sed 's/.*Requirements:\*\*\s*//' | sed 's/[\[\]]//g')
|
|
299
|
+
```
|
|
300
|
+
|
|
282
301
|
```
|
|
283
302
|
Task(
|
|
284
303
|
prompt="Verify phase {phase_number} goal achievement.
|
|
285
304
|
Phase directory: {phase_dir}
|
|
286
305
|
Phase goal: {goal from ROADMAP.md}
|
|
287
|
-
|
|
306
|
+
Phase requirement IDs: {phase_req_ids}
|
|
307
|
+
Check must_haves against actual codebase.
|
|
308
|
+
Cross-reference requirement IDs from PLAN frontmatter against REQUIREMENTS.md — every ID MUST be accounted for.
|
|
309
|
+
Create VERIFICATION.md.",
|
|
288
310
|
subagent_type="gsd-verifier",
|
|
289
311
|
model="{verifier_model}"
|
|
290
312
|
)
|
|
@@ -353,7 +375,7 @@ The CLI handles:
|
|
|
353
375
|
Extract from result: `next_phase`, `next_phase_name`, `is_last_phase`.
|
|
354
376
|
|
|
355
377
|
```bash
|
|
356
|
-
node ~/.codex/get-shit-done/bin/gsd-tools.cjs commit "docs(phase-{X}): complete phase execution" --files .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md
|
|
378
|
+
node ~/.codex/get-shit-done/bin/gsd-tools.cjs commit "docs(phase-{X}): complete phase execution" --files .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md {phase_dir}/*-VERIFICATION.md
|
|
357
379
|
```
|
|
358
380
|
</step>
|
|
359
381
|
|
|
@@ -361,6 +383,29 @@ node ~/.codex/get-shit-done/bin/gsd-tools.cjs commit "docs(phase-{X}): complete
|
|
|
361
383
|
|
|
362
384
|
**Exception:** If `gaps_found`, the `verify_phase_goal` step already presents the gap-closure path (`/gsd:plan-phase {X} --gaps`). No additional routing needed — skip auto-advance.
|
|
363
385
|
|
|
386
|
+
**No-transition check (spawned by auto-advance chain):**
|
|
387
|
+
|
|
388
|
+
Parse `--no-transition` flag from $ARGUMENTS.
|
|
389
|
+
|
|
390
|
+
**If `--no-transition` flag present:**
|
|
391
|
+
|
|
392
|
+
Execute-phase was spawned by plan-phase's auto-advance. Do NOT run transition.md.
|
|
393
|
+
After verification passes and roadmap is updated, return completion status to parent:
|
|
394
|
+
|
|
395
|
+
```
|
|
396
|
+
## PHASE COMPLETE
|
|
397
|
+
|
|
398
|
+
Phase: ${PHASE_NUMBER} - ${PHASE_NAME}
|
|
399
|
+
Plans: ${completed_count}/${total_count}
|
|
400
|
+
Verification: {Passed | Gaps Found}
|
|
401
|
+
|
|
402
|
+
[Include aggregate_results output]
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
STOP. Do not proceed to auto-advance or transition.
|
|
406
|
+
|
|
407
|
+
**If `--no-transition` flag is NOT present:**
|
|
408
|
+
|
|
364
409
|
**Auto-advance detection:**
|
|
365
410
|
|
|
366
411
|
1. Parse `--auto` flag from $ARGUMENTS
|
|
@@ -394,7 +439,7 @@ Orchestrator: ~10-15% context. Subagents: fresh 200k each. No polling (Task bloc
|
|
|
394
439
|
</context_efficiency>
|
|
395
440
|
|
|
396
441
|
<failure_handling>
|
|
397
|
-
- **classifyHandoffIfNeeded false failure:** Agent reports "failed" but error is `classifyHandoffIfNeeded is not defined` → Codex
|
|
442
|
+
- **classifyHandoffIfNeeded false failure:** Agent reports "failed" but error is `classifyHandoffIfNeeded is not defined` → Codex Code bug, not GSD. Spot-check (SUMMARY exists, commits present) → if pass, treat as success
|
|
398
443
|
- **Agent fails mid-plan:** Missing SUMMARY.md → report, ask user how to proceed
|
|
399
444
|
- **Dependency chain breaks:** Wave 1 fails → Wave 2 dependents likely fail → user chooses attempt or skip
|
|
400
445
|
- **All agents in wave fail:** Systemic issue → stop, report for investigation
|
|
@@ -12,19 +12,13 @@ Read config.json for planning behavior settings.
|
|
|
12
12
|
<process>
|
|
13
13
|
|
|
14
14
|
<step name="init_context" priority="first">
|
|
15
|
-
Load execution context (
|
|
15
|
+
Load execution context (paths only to minimize orchestrator context):
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
INIT=$(node ~/.codex/get-shit-done/bin/gsd-tools.cjs init execute-phase "${PHASE}"
|
|
18
|
+
INIT=$(node ~/.codex/get-shit-done/bin/gsd-tools.cjs init execute-phase "${PHASE}")
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
Extract from init JSON: `executor_model`, `commit_docs`, `phase_dir`, `phase_number`, `plans`, `summaries`, `incomplete_plans`.
|
|
22
|
-
|
|
23
|
-
**File contents (from --include):** `state_content`, `config_content`. Access with:
|
|
24
|
-
```bash
|
|
25
|
-
STATE_CONTENT=$(echo "$INIT" | jq -r '.state_content // empty')
|
|
26
|
-
CONFIG_CONTENT=$(echo "$INIT" | jq -r '.config_content // empty')
|
|
27
|
-
```
|
|
21
|
+
Extract from init JSON: `executor_model`, `commit_docs`, `phase_dir`, `phase_number`, `plans`, `summaries`, `incomplete_plans`, `state_path`, `config_path`.
|
|
28
22
|
|
|
29
23
|
If `.planning/` missing: error.
|
|
30
24
|
</step>
|
|
@@ -40,7 +34,7 @@ Find first PLAN without matching SUMMARY. Decimal phases supported (`01.1-hotfix
|
|
|
40
34
|
|
|
41
35
|
```bash
|
|
42
36
|
PHASE=$(echo "$PLAN_PATH" | grep -oE '[0-9]+(\.[0-9]+)?-[0-9]+')
|
|
43
|
-
#
|
|
37
|
+
# config settings can be fetched via gsd-tools config-get if needed
|
|
44
38
|
```
|
|
45
39
|
|
|
46
40
|
<if mode="yolo">
|
|
@@ -112,7 +106,7 @@ Pattern B only (verify-only checkpoints). Skip for A/C.
|
|
|
112
106
|
- Check `git log --oneline --all --grep="{phase}-{plan}"` returns ≥1 commit
|
|
113
107
|
- Append `## Self-Check: PASSED` or `## Self-Check: FAILED` to SUMMARY
|
|
114
108
|
|
|
115
|
-
**Known Codex
|
|
109
|
+
**Known Codex Code bug (classifyHandoffIfNeeded):** If any segment agent reports "failed" with `classifyHandoffIfNeeded is not defined`, this is a Codex Code runtime bug — not a real failure. Run spot-checks; if they pass, treat as successful.
|
|
116
110
|
|
|
117
111
|
|
|
118
112
|
|
|
@@ -322,7 +316,7 @@ If user_setup exists: create `{phase}-USER-SETUP.md` using template `~/.codex/ge
|
|
|
322
316
|
<step name="create_summary">
|
|
323
317
|
Create `{phase}-{plan}-SUMMARY.md` at `.planning/phases/XX-name/`. Use `~/.codex/get-shit-done/templates/summary.md`.
|
|
324
318
|
|
|
325
|
-
**Frontmatter:** phase, plan, subsystem, tags | requires/provides/affects | tech-stack.added/patterns | key-files.created/modified | key-decisions | duration ($DURATION), completed ($PLAN_END_TIME date).
|
|
319
|
+
**Frontmatter:** phase, plan, subsystem, tags | requires/provides/affects | tech-stack.added/patterns | key-files.created/modified | key-decisions | requirements-completed (**MUST** copy `requirements` array from PLAN.md frontmatter verbatim) | duration ($DURATION), completed ($PLAN_END_TIME date).
|
|
326
320
|
|
|
327
321
|
Title: `# Phase [X] Plan [Y]: [Name] Summary`
|
|
328
322
|
|
|
@@ -386,11 +380,21 @@ node ~/.codex/get-shit-done/bin/gsd-tools.cjs roadmap update-plan-progress "${PH
|
|
|
386
380
|
Counts PLAN vs SUMMARY files on disk. Updates progress table row with correct count and status (`In Progress` or `Complete` with date).
|
|
387
381
|
</step>
|
|
388
382
|
|
|
383
|
+
<step name="update_requirements">
|
|
384
|
+
Mark completed requirements from the PLAN.md frontmatter `requirements:` field:
|
|
385
|
+
|
|
386
|
+
```bash
|
|
387
|
+
node ~/.codex/get-shit-done/bin/gsd-tools.cjs requirements mark-complete ${REQ_IDS}
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
Extract requirement IDs from the plan's frontmatter (e.g., `requirements: [AUTH-01, AUTH-02]`). If no requirements field, skip.
|
|
391
|
+
</step>
|
|
392
|
+
|
|
389
393
|
<step name="git_commit_metadata">
|
|
390
394
|
Task code already committed per-task. Commit plan metadata:
|
|
391
395
|
|
|
392
396
|
```bash
|
|
393
|
-
node ~/.codex/get-shit-done/bin/gsd-tools.cjs commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md
|
|
397
|
+
node ~/.codex/get-shit-done/bin/gsd-tools.cjs commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md
|
|
394
398
|
```
|
|
395
399
|
</step>
|
|
396
400
|
|