@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.
Files changed (68) hide show
  1. package/README.md +13 -3
  2. package/agents/gsd-codebase-mapper.md +3 -0
  3. package/agents/gsd-debugger.md +3 -0
  4. package/agents/gsd-executor.md +52 -2
  5. package/agents/gsd-integration-checker.md +20 -0
  6. package/agents/gsd-phase-researcher.md +96 -4
  7. package/agents/gsd-plan-checker.md +125 -3
  8. package/agents/gsd-planner.md +38 -3
  9. package/agents/gsd-project-researcher.md +3 -0
  10. package/agents/gsd-research-synthesizer.md +3 -0
  11. package/agents/gsd-roadmapper.md +3 -0
  12. package/agents/gsd-verifier.md +25 -8
  13. package/commands/gsd/add-phase.md +6 -2
  14. package/commands/gsd/add-todo.md +6 -1
  15. package/commands/gsd/audit-milestone.md +1 -7
  16. package/commands/gsd/check-todos.md +6 -2
  17. package/commands/gsd/debug.md +3 -1
  18. package/commands/gsd/discuss-phase.md +1 -5
  19. package/commands/gsd/execute-phase.md +1 -2
  20. package/commands/gsd/insert-phase.md +1 -2
  21. package/commands/gsd/list-phase-assumptions.md +1 -5
  22. package/commands/gsd/new-milestone.md +1 -8
  23. package/commands/gsd/pause-work.md +4 -1
  24. package/commands/gsd/plan-milestone-gaps.md +1 -7
  25. package/commands/gsd/quick.md +2 -1
  26. package/commands/gsd/remove-phase.md +1 -2
  27. package/commands/gsd/research-phase.md +17 -15
  28. package/commands/gsd/verify-work.md +1 -2
  29. package/get-shit-done/bin/gsd-tools.cjs +168 -4858
  30. package/get-shit-done/bin/lib/commands.cjs +556 -0
  31. package/get-shit-done/bin/lib/config.cjs +162 -0
  32. package/get-shit-done/bin/lib/core.cjs +398 -0
  33. package/get-shit-done/bin/lib/frontmatter.cjs +299 -0
  34. package/get-shit-done/bin/lib/init.cjs +694 -0
  35. package/get-shit-done/bin/lib/milestone.cjs +215 -0
  36. package/get-shit-done/bin/lib/phase.cjs +873 -0
  37. package/get-shit-done/bin/lib/roadmap.cjs +298 -0
  38. package/get-shit-done/bin/lib/state.cjs +490 -0
  39. package/get-shit-done/bin/lib/template.cjs +222 -0
  40. package/get-shit-done/bin/lib/verify.cjs +772 -0
  41. package/get-shit-done/references/checkpoints.md +1 -0
  42. package/get-shit-done/templates/VALIDATION.md +104 -0
  43. package/get-shit-done/templates/config.json +2 -1
  44. package/get-shit-done/templates/phase-prompt.md +2 -0
  45. package/get-shit-done/templates/roadmap.md +1 -1
  46. package/get-shit-done/templates/summary.md +2 -0
  47. package/get-shit-done/workflows/audit-milestone.md +63 -8
  48. package/get-shit-done/workflows/complete-milestone.md +26 -0
  49. package/get-shit-done/workflows/diagnose-issues.md +1 -1
  50. package/get-shit-done/workflows/discuss-phase.md +68 -13
  51. package/get-shit-done/workflows/execute-phase.md +54 -9
  52. package/get-shit-done/workflows/execute-plan.md +17 -13
  53. package/get-shit-done/workflows/map-codebase.md +32 -44
  54. package/get-shit-done/workflows/new-milestone.md +16 -7
  55. package/get-shit-done/workflows/new-project.md +34 -31
  56. package/get-shit-done/workflows/plan-milestone-gaps.md +23 -5
  57. package/get-shit-done/workflows/plan-phase.md +106 -76
  58. package/get-shit-done/workflows/progress.md +14 -26
  59. package/get-shit-done/workflows/quick.md +24 -15
  60. package/get-shit-done/workflows/research-phase.md +10 -11
  61. package/get-shit-done/workflows/settings.md +16 -3
  62. package/get-shit-done/workflows/transition.md +5 -0
  63. package/get-shit-done/workflows/verify-work.md +11 -12
  64. package/hooks/dist/gsd-context-monitor.js +122 -0
  65. package/hooks/dist/gsd-statusline.js +17 -0
  66. package/package.json +2 -2
  67. package/scripts/build-hooks.js +1 -0
  68. 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}
@@ -5,7 +5,8 @@
5
5
  "research": true,
6
6
  "plan_check": true,
7
7
  "verifier": true,
8
- "auto_advance": false
8
+ "auto_advance": false,
9
+ "nyquist_validation": false
9
10
  },
10
11
  "planning": {
11
12
  "commit_docs": true,
@@ -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
- For each requirement in REQUIREMENTS.md mapped to this milestone:
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 for cross-phase wiring
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 formatted as:
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
- - header: "Done"
275
- - question: "That covers [list areas]. Ready to create context?"
276
- - options: "Create context" / "Revisit an area"
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="Run /gsd:plan-phase ${PHASE} --auto",
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
- - **PLANNING COMPLETE** → Plan-phase handles chaining to execute-phase (via its own auto_advance step)
461
- - **PLANNING INCONCLUSIVE / CHECKPOINT** → Display result, stop chain:
497
+ - **PHASE COMPLETE** → Full chain succeeded. Display:
462
498
  ```
463
- Auto-advance stopped: Planning needs input.
499
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
500
+ GSD ► PHASE ${PHASE} COMPLETE
501
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
502
+
503
+ Auto-advance pipeline finished: discuss → plan → execute
464
504
 
465
- Review the output above and continue manually:
466
- /gsd:plan-phase ${PHASE}
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
- - Plan: {phase_dir}/{plan_file}
122
- - State: .planning/STATE.md
123
- - Config: .planning/config.json (if exists)
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 CLI bug (classifyHandoffIfNeeded):** If an agent reports "failed" with error containing `classifyHandoffIfNeeded is not defined`, this is a Codex CLI 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.
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
- **Flow:**
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
- Check must_haves against actual codebase. Create VERIFICATION.md.",
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 .planning/phases/{phase_dir}/*-VERIFICATION.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 CLI bug, not GSD. Spot-check (SUMMARY exists, commits present) → if pass, treat as success
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 (uses `init execute-phase` for full context, including file contents):
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}" --include state,config)
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
- # config_content already loaded via --include config in init_context
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 CLI bug (classifyHandoffIfNeeded):** If any segment agent reports "failed" with `classifyHandoffIfNeeded is not defined`, this is a Codex CLI runtime bug — not a real failure. Run spot-checks; if they pass, treat as successful.
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