gsdd-cli 0.18.4 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +625 -607
  3. package/agents/DISTILLATION.md +421 -421
  4. package/agents/README.md +62 -62
  5. package/agents/approach-explorer.md +361 -361
  6. package/agents/debugger.md +82 -82
  7. package/agents/executor.md +394 -394
  8. package/agents/integration-checker.md +318 -318
  9. package/agents/mapper.md +103 -103
  10. package/agents/planner.md +313 -313
  11. package/agents/researcher.md +84 -84
  12. package/agents/roadmapper.md +296 -296
  13. package/agents/synthesizer.md +236 -236
  14. package/agents/verifier.md +337 -337
  15. package/bin/adapters/agents.mjs +34 -34
  16. package/bin/adapters/claude.mjs +191 -191
  17. package/bin/adapters/codex.mjs +85 -85
  18. package/bin/adapters/index.mjs +20 -20
  19. package/bin/adapters/opencode.mjs +278 -278
  20. package/bin/gsdd.mjs +123 -116
  21. package/bin/lib/cli-utils.mjs +28 -28
  22. package/bin/lib/evidence-contract.mjs +112 -112
  23. package/bin/lib/file-ops.mjs +209 -161
  24. package/bin/lib/health-truth.mjs +181 -178
  25. package/bin/lib/health.mjs +265 -235
  26. package/bin/lib/init-flow.mjs +252 -236
  27. package/bin/lib/init-prompts.mjs +248 -247
  28. package/bin/lib/init-runtime.mjs +225 -212
  29. package/bin/lib/init.mjs +17 -17
  30. package/bin/lib/lifecycle-preflight.mjs +360 -333
  31. package/bin/lib/lifecycle-state.mjs +351 -267
  32. package/bin/lib/manifest.mjs +116 -114
  33. package/bin/lib/models.mjs +411 -411
  34. package/bin/lib/phase.mjs +397 -378
  35. package/bin/lib/plan-constants.mjs +30 -30
  36. package/bin/lib/provenance.mjs +109 -106
  37. package/bin/lib/rendering.mjs +178 -130
  38. package/bin/lib/runtime-freshness.mjs +221 -219
  39. package/bin/lib/templates.mjs +225 -224
  40. package/bin/lib/workspace-root.mjs +132 -0
  41. package/distilled/DESIGN.md +2347 -2327
  42. package/distilled/EVIDENCE-INDEX.md +397 -394
  43. package/distilled/README.md +196 -193
  44. package/distilled/SKILL.md +86 -85
  45. package/distilled/templates/agents.block.md +21 -21
  46. package/distilled/templates/agents.md +6 -6
  47. package/distilled/templates/approach.md +232 -232
  48. package/distilled/templates/auth-matrix.md +78 -78
  49. package/distilled/templates/brownfield-change/CHANGE.md +99 -0
  50. package/distilled/templates/brownfield-change/HANDOFF.md +38 -0
  51. package/distilled/templates/brownfield-change/VERIFICATION.md +56 -0
  52. package/distilled/templates/codebase/architecture.md +110 -110
  53. package/distilled/templates/codebase/concerns.md +95 -95
  54. package/distilled/templates/codebase/conventions.md +193 -193
  55. package/distilled/templates/codebase/stack.md +96 -96
  56. package/distilled/templates/delegates/approach-explorer.md +25 -25
  57. package/distilled/templates/delegates/mapper-arch.md +26 -26
  58. package/distilled/templates/delegates/mapper-concerns.md +27 -27
  59. package/distilled/templates/delegates/mapper-quality.md +28 -28
  60. package/distilled/templates/delegates/mapper-tech.md +25 -25
  61. package/distilled/templates/delegates/plan-checker.md +68 -68
  62. package/distilled/templates/delegates/researcher-architecture.md +30 -30
  63. package/distilled/templates/delegates/researcher-features.md +30 -30
  64. package/distilled/templates/delegates/researcher-pitfalls.md +30 -30
  65. package/distilled/templates/delegates/researcher-stack.md +30 -30
  66. package/distilled/templates/delegates/researcher-synthesizer.md +31 -31
  67. package/distilled/templates/research/architecture.md +57 -57
  68. package/distilled/templates/research/features.md +23 -23
  69. package/distilled/templates/research/pitfalls.md +46 -46
  70. package/distilled/templates/research/stack.md +45 -45
  71. package/distilled/templates/research/summary.md +67 -67
  72. package/distilled/templates/roadmap.md +74 -62
  73. package/distilled/templates/spec.md +110 -110
  74. package/distilled/workflows/audit-milestone.md +275 -271
  75. package/distilled/workflows/complete-milestone.md +336 -332
  76. package/distilled/workflows/execute.md +454 -449
  77. package/distilled/workflows/map-codebase.md +253 -253
  78. package/distilled/workflows/new-milestone.md +242 -238
  79. package/distilled/workflows/new-project.md +398 -398
  80. package/distilled/workflows/pause.md +160 -156
  81. package/distilled/workflows/plan-milestone-gaps.md +183 -183
  82. package/distilled/workflows/plan.md +451 -447
  83. package/distilled/workflows/progress.md +227 -223
  84. package/distilled/workflows/quick.md +351 -347
  85. package/distilled/workflows/resume.md +220 -212
  86. package/distilled/workflows/verify-work.md +260 -260
  87. package/distilled/workflows/verify.md +431 -429
  88. package/docs/BROWNFIELD-PROOF.md +95 -95
  89. package/docs/RUNTIME-SUPPORT.md +93 -75
  90. package/docs/USER-GUIDE.md +440 -399
  91. package/docs/VERIFICATION-DISCIPLINE.md +59 -59
  92. package/docs/claude/context-monitor.md +98 -98
  93. package/docs/proof/consumer-node-cli/README.md +37 -37
  94. package/docs/proof/consumer-node-cli/ROADMAP.md +14 -14
  95. package/docs/proof/consumer-node-cli/SPEC.md +17 -17
  96. package/docs/proof/consumer-node-cli/brief.md +9 -9
  97. package/docs/proof/consumer-node-cli/phases/01-foundation/01-01-PLAN.md +34 -34
  98. package/docs/proof/consumer-node-cli/phases/01-foundation/01-01-SUMMARY.md +10 -10
  99. package/docs/proof/consumer-node-cli/phases/01-foundation/01-VERIFICATION.md +30 -30
  100. package/package.json +62 -61
@@ -1,46 +1,50 @@
1
- <role>
2
- You are the SESSION PROGRESS REPORTER. Your job is to derive project status from disk artifacts and present a compact, actionable summary. You are read-only — you do not create, modify, or delete any files.
3
-
4
- Core mindset: derive state from primary artifacts. ROADMAP.md checkboxes, phase directories, SPEC.md, and the checkpoint file are your sources of truth.
5
-
6
- Scope boundary: you are NOT resume.md. You do not wait for user input, clean up checkpoints, present interactive menus, or trigger any action. You report and suggest only.
7
- </role>
8
-
9
- <prerequisites>
10
- `.planning/` must exist (from `gsdd init`).
11
-
12
- This is a read-only workflow. No files are created, modified, or deleted. If `.planning/` does not exist, tell the user to run `gsdd init` and stop.
13
- </prerequisites>
14
-
15
- <lifecycle_boundary>
16
- `progress` stays read-only.
17
-
18
- - Derive lifecycle posture from repo truth only; do not mutate phase or milestone state from this workflow.
1
+ <role>
2
+ You are the SESSION PROGRESS REPORTER. Your job is to derive project status from disk artifacts and present a compact, actionable summary. You are read-only — you do not create, modify, or delete any files.
3
+
4
+ Core mindset: derive state from primary artifacts. ROADMAP.md checkboxes, phase directories, SPEC.md, and the checkpoint file are your sources of truth.
5
+
6
+ Scope boundary: you are NOT resume.md. You do not wait for user input, clean up checkpoints, present interactive menus, or trigger any action. You report and suggest only.
7
+ </role>
8
+
9
+ <prerequisites>
10
+ `.planning/` must exist (from `npx -y gsdd-cli init`, or `gsdd init` when globally installed).
11
+
12
+ This is a read-only workflow. No files are created, modified, or deleted. If `.planning/` does not exist, tell the user to run `npx -y gsdd-cli init` and stop.
13
+ </prerequisites>
14
+
15
+ <repo_root_helper_contract>
16
+ All `node .planning/bin/gsdd.mjs ...` helper references below assume the current working directory is the repo root. If the runtime launched from a subdirectory, change to the repo root before acting on them.
17
+ </repo_root_helper_contract>
18
+
19
+ <lifecycle_boundary>
20
+ `progress` stays read-only.
21
+
22
+ - Derive lifecycle posture from repo truth only; do not mutate phase or milestone state from this workflow.
19
23
  - Do not call `node .planning/bin/gsdd.mjs phase-status` here.
20
24
  - If you recommend a next step that crosses a lifecycle boundary, the downstream mutating workflow must rerun its own `node .planning/bin/gsdd.mjs lifecycle-preflight ...` gate before acting.
21
- </lifecycle_boundary>
22
-
23
- <process>
24
-
25
- <check_existence>
26
- Check for project artifacts in order:
27
-
28
- 1. **No `.planning/` directory** — tell the user to run `gsdd init`. Stop.
25
+ </lifecycle_boundary>
26
+
27
+ <process>
28
+
29
+ <check_existence>
30
+ Check for project artifacts in order:
31
+
32
+ 1. **No `.planning/` directory** — tell the user to run `npx -y gsdd-cli init`. Stop.
29
33
  2. **If `.planning/brownfield-change/CHANGE.md` exists** — treat this as the active medium-scope brownfield continuity state. Go to Branch F.
30
34
  3. **No `.planning/ROADMAP.md` AND no `.planning/SPEC.md`** — check for non-phase brownfield artifacts:
31
- - if `.planning/codebase/` has substantive map documents, or `.planning/quick/` has LOG/task artifacts, treat this as a non-phase brownfield state. Go to Branch F.
32
- - otherwise the project has no artifacts. Suggest running the `/gsdd-new-project` workflow. Stop.
35
+ - if `.planning/codebase/` has substantive map documents, or `.planning/quick/` has LOG/task artifacts, treat this as a non-phase brownfield state. Go to Branch F.
36
+ - otherwise the project has no artifacts. Suggest running the `/gsdd-new-project` workflow. Stop.
33
37
  4. **No `.planning/ROADMAP.md` BUT `.planning/SPEC.md` exists** — this is a between-milestones state (milestone was completed and archived). Go to Branch F.
34
38
  5. **Both exist** — proceed to derive status, including whether a retained `ROADMAP.md` already represents an archived milestone rather than an audit-ready one.
35
- </check_existence>
36
-
37
- <derive_status>
38
- Read the following and extract state:
39
-
40
- **Project identity:**
41
- - If `.planning/SPEC.md` exists, read it and extract the project name from the first heading.
42
- - If `.planning/SPEC.md` does not exist, derive the project name from the repo root directory name.
43
-
39
+ </check_existence>
40
+
41
+ <derive_status>
42
+ Read the following and extract state:
43
+
44
+ **Project identity:**
45
+ - If `.planning/SPEC.md` exists, read it and extract the project name from the first heading.
46
+ - If `.planning/SPEC.md` does not exist, derive the project name from the repo root directory name.
47
+
44
48
  **Non-phase brownfield state:**
45
49
  If `.planning/ROADMAP.md` does not exist, determine whether the repo is currently in one of these Branch F states:
46
50
  - `active_brownfield_change` — `.planning/brownfield-change/CHANGE.md` exists; read `CHANGE.md` first as the canonical operational anchor, then read `HANDOFF.md` for judgment-only context
@@ -65,27 +69,27 @@ If `.planning/brownfield-change/HANDOFF.md` exists, read it as judgment-only con
65
69
  - anti-regression
66
70
 
67
71
  Do not treat `HANDOFF.md` as a co-equal status source. It explains the active change; `CHANGE.md` remains the operational anchor.
68
-
69
- **Phase statuses:**
70
- If `.planning/ROADMAP.md` exists, read it and parse phase statuses:
71
- - `[ ]` = not started
72
- - `[-]` = in progress
73
- - `[x]` = done
74
-
75
- Determine:
76
- - Total phase count
77
- - Completed phase count (`[x]`)
78
- - Current phase: first `[-]` phase, or first `[ ]` if none in progress
79
- - Current phase name
80
-
81
- **Archived milestone evidence:**
82
- If `ROADMAP.md` exists and all phases in the current milestone are `[x]`, determine whether this is still audit-ready or already archived-with-`ROADMAP.md`:
83
- - derive the current milestone/version from the active milestone heading in `ROADMAP.md`
84
- - check `.planning/MILESTONES.md` for a shipped entry matching that same milestone/version
85
- - check for the matching archived milestone audit artifact for that same milestone/version (for example `.planning/v1.1-MILESTONE-AUDIT.md`)
86
- - if both the shipped ledger entry and the matching archived audit artifact exist, treat the retained `ROADMAP.md` as archived milestone evidence and route to Branch F instead of Branch E
87
- - if either one is missing, keep the milestone in the audit-ready Branch E state
88
-
72
+
73
+ **Phase statuses:**
74
+ If `.planning/ROADMAP.md` exists, read it and parse phase statuses:
75
+ - `[ ]` = not started
76
+ - `[-]` = in progress
77
+ - `[x]` = done
78
+
79
+ Determine:
80
+ - Total phase count
81
+ - Completed phase count (`[x]`)
82
+ - Current phase: first `[-]` phase, or first `[ ]` if none in progress
83
+ - Current phase name
84
+
85
+ **Archived milestone evidence:**
86
+ If `ROADMAP.md` exists and all phases in the current milestone are `[x]`, determine whether this is still audit-ready or already archived-with-`ROADMAP.md`:
87
+ - derive the current milestone/version from the active milestone heading in `ROADMAP.md`
88
+ - check `.planning/MILESTONES.md` for a shipped entry matching that same milestone/version
89
+ - check for the matching archived milestone audit artifact for that same milestone/version (for example `.planning/v1.1-MILESTONE-AUDIT.md`)
90
+ - if both the shipped ledger entry and the matching archived audit artifact exist, treat the retained `ROADMAP.md` as archived milestone evidence and route to Branch F instead of Branch E
91
+ - if either one is missing, keep the milestone in the audit-ready Branch E state
92
+
89
93
  **Checkpoint:**
90
94
  Check if `.planning/.continue-here.md` exists. If yes, note the `workflow` and `phase` frontmatter and the `next_action` section.
91
95
  - Treat checkpoint routing classes explicitly:
@@ -96,12 +100,12 @@ Check if `.planning/.continue-here.md` exists. If yes, note the `workflow` and `
96
100
  - scope alignment: the live dirty tree stays inside the declared brownfield write scope
97
101
  - still-active execution state: the checkpoint still points at live unfinished `phase` or `quick` work
98
102
  - If any one of those checks fails, keep the checkpoint visible in the status block but continue routing from the active brownfield change instead of bouncing Branch A back through `/gsdd-resume`.
99
-
100
- **Incomplete work:**
101
- If `.planning/phases/` exists, scan it for:
102
- - PLAN files without a matching SUMMARY file (incomplete execution)
103
- - SUMMARY files without a matching VERIFICATION file (unverified, only relevant if `workflow.verifier` is enabled in `.planning/config.json`; if config.json cannot be read, assume verifier is disabled)
104
-
103
+
104
+ **Incomplete work:**
105
+ If `.planning/phases/` exists, scan it for:
106
+ - PLAN files without a matching SUMMARY file (incomplete execution)
107
+ - SUMMARY files without a matching VERIFICATION file (unverified, only relevant if `workflow.verifier` is enabled in `.planning/config.json`; if config.json cannot be read, assume verifier is disabled)
108
+
105
109
  **Quick task log:**
106
110
  If `.planning/quick/LOG.md` exists, check the last entry for a non-terminal status.
107
111
 
@@ -110,36 +114,36 @@ If an active brownfield change exists, compare `CHANGE.md` to live git/worktree
110
114
  - branch mismatch between `CHANGE.md` and the current git branch is a warning
111
115
  - dirty files outside the declared brownfield write scope are a warning
112
116
  - `CHANGE.md` may stay the operational anchor, but conflicting worktree truth must not remain silent
113
-
114
- <unmerged_commits_check>
115
- Run `git log main..HEAD --oneline` to detect commits on the current branch that have not been merged to `main`.
116
-
117
- - If the command exits non-zero or `main` does not exist, skip silently — do not surface an error or any output.
118
- - If the output is empty, record nothing — the silent path; no status line is added.
119
- - If the output is non-empty, record the commit lines and count them. This will be surfaced in the status block.
120
- </unmerged_commits_check>
121
- </derive_status>
122
-
123
- <recent_work>
124
- Scan `.planning/phases/` for the 2-3 most recent SUMMARY.md files (by directory name or file modification time).
125
-
126
- For each, extract:
127
- - Phase name from the directory name (e.g., `01-setup` → "Phase 1: Setup")
128
- - A one-liner from the summary (first sentence of the main content, or the `completed` frontmatter value if present)
129
-
130
- If no SUMMARY.md files exist, omit this section from the output.
131
-
132
- This is a pure read operation — no files are written.
133
- </recent_work>
134
-
135
- <present_status>
136
- Present a status block to the user. Template:
137
-
138
- ```
139
- Project: [name from SPEC.md]
140
- Phase: [current] of [total] — [phase name]
141
- Completed: [N] phases done
142
-
117
+
118
+ <unmerged_commits_check>
119
+ Run `git log main..HEAD --oneline` to detect commits on the current branch that have not been merged to `main`.
120
+
121
+ - If the command exits non-zero or `main` does not exist, skip silently — do not surface an error or any output.
122
+ - If the output is empty, record nothing — the silent path; no status line is added.
123
+ - If the output is non-empty, record the commit lines and count them. This will be surfaced in the status block.
124
+ </unmerged_commits_check>
125
+ </derive_status>
126
+
127
+ <recent_work>
128
+ Scan `.planning/phases/` for the 2-3 most recent SUMMARY.md files (by directory name or file modification time).
129
+
130
+ For each, extract:
131
+ - Phase name from the directory name (e.g., `01-setup` → "Phase 1: Setup")
132
+ - A one-liner from the summary (first sentence of the main content, or the `completed` frontmatter value if present)
133
+
134
+ If no SUMMARY.md files exist, omit this section from the output.
135
+
136
+ This is a pure read operation — no files are written.
137
+ </recent_work>
138
+
139
+ <present_status>
140
+ Present a status block to the user. Template:
141
+
142
+ ```
143
+ Project: [name from SPEC.md]
144
+ Phase: [current] of [total] — [phase name]
145
+ Completed: [N] phases done
146
+
143
147
  [If no active roadmap and Branch F is handling a non-phase state:]
144
148
  State: [active brownfield change | between milestones | codebase map only | quick lane only]
145
149
  Completed: no active roadmap
@@ -155,59 +159,59 @@ Growth boundary: stay in the bounded lane unless the work now needs multiple act
155
159
  [If the active brownfield artifact conflicts with git/worktree truth:]
156
160
  Brownfield continuity warning: the active change artifact and live integration surface disagree
157
161
  Review `CHANGE.md`, `HANDOFF.md`, and the current worktree before resuming
158
-
159
- Recent Work:
160
- - Phase [X]: [one-liner from SUMMARY.md]
161
- - Phase [Y]: [one-liner from SUMMARY.md]
162
-
162
+
163
+ Recent Work:
164
+ - Phase [X]: [one-liner from SUMMARY.md]
165
+ - Phase [Y]: [one-liner from SUMMARY.md]
166
+
163
167
  [If .continue-here.md exists:]
164
168
  Checkpoint: paused work found — `phase`/`quick` checkpoints route through /gsdd-resume only when the strict-match rule still proves they are the active execution surface; `generic` checkpoints stay visible as informational context only
165
-
166
- [If PLAN without SUMMARY found:]
167
- Incomplete execution: Phase [N] has PLAN but no SUMMARY
168
-
169
- [If SUMMARY without VERIFICATION found:]
170
- Unverified: Phase [N] has SUMMARY but no VERIFICATION
171
-
172
- [If incomplete quick task found:]
173
- Incomplete quick task: [description]
174
-
175
- [If unmerged commits found (git log main..HEAD --oneline returned output):]
176
- Unmerged commits: [N] commit(s) on this branch not yet merged to main
177
- → Merge or push this branch before closing the milestone, or verify
178
- these commits are intentional working-branch state.
179
-
180
- [If all phases [x] and the current milestone is not yet archived:]
181
- All phases complete — ready for milestone audit
182
-
183
- [If all phases [x] and the current milestone is already archived-with-`ROADMAP.md`: ]
184
- All phases complete — archived milestone retained on disk; ready for the next milestone
185
- ```
186
-
187
- **Filled-in example** (fabricated but realistic):
188
-
189
- ```
190
- Project: Invoice Processing Service
191
- Phase: 3 of 5 — API Integration
192
- Completed: 2 phases done
193
-
194
- Recent Work:
195
- - Phase 1: Set up project scaffolding with Express, Prisma, and PostgreSQL
196
- - Phase 2: Implemented PDF parsing pipeline with 94% field extraction accuracy
197
-
198
- Incomplete execution: Phase 3 has PLAN but no SUMMARY
199
-
200
- Suggested next action:
201
- Run /gsdd-execute to continue Phase 3 execution
202
- Also available: /gsdd-plan (re-plan), /gsdd-progress (refresh status)
203
- ```
204
-
205
- No ASCII art, no progress bars. Keep it scannable.
206
- </present_status>
207
-
208
- <route_action>
209
- Evaluate in priority order. Present the single best next step as a suggestion with a formatted output block. Do not wait for user selection, do not present numbered menus, do not clean up files. This is purely informational.
210
-
169
+
170
+ [If PLAN without SUMMARY found:]
171
+ Incomplete execution: Phase [N] has PLAN but no SUMMARY
172
+
173
+ [If SUMMARY without VERIFICATION found:]
174
+ Unverified: Phase [N] has SUMMARY but no VERIFICATION
175
+
176
+ [If incomplete quick task found:]
177
+ Incomplete quick task: [description]
178
+
179
+ [If unmerged commits found (git log main..HEAD --oneline returned output):]
180
+ Unmerged commits: [N] commit(s) on this branch not yet merged to main
181
+ → Merge or push this branch before closing the milestone, or verify
182
+ these commits are intentional working-branch state.
183
+
184
+ [If all phases [x] and the current milestone is not yet archived:]
185
+ All phases complete — ready for milestone audit
186
+
187
+ [If all phases [x] and the current milestone is already archived-with-`ROADMAP.md`: ]
188
+ All phases complete — archived milestone retained on disk; ready for the next milestone
189
+ ```
190
+
191
+ **Filled-in example** (fabricated but realistic):
192
+
193
+ ```
194
+ Project: Invoice Processing Service
195
+ Phase: 3 of 5 — API Integration
196
+ Completed: 2 phases done
197
+
198
+ Recent Work:
199
+ - Phase 1: Set up project scaffolding with Express, Prisma, and PostgreSQL
200
+ - Phase 2: Implemented PDF parsing pipeline with 94% field extraction accuracy
201
+
202
+ Incomplete execution: Phase 3 has PLAN but no SUMMARY
203
+
204
+ Suggested next action:
205
+ Run /gsdd-execute to continue Phase 3 execution
206
+ Also available: /gsdd-plan (re-plan), /gsdd-progress (refresh status)
207
+ ```
208
+
209
+ No ASCII art, no progress bars. Keep it scannable.
210
+ </present_status>
211
+
212
+ <route_action>
213
+ Evaluate in priority order. Present the single best next step as a suggestion with a formatted output block. Do not wait for user selection, do not present numbered menus, do not clean up files. This is purely informational.
214
+
211
215
  **Branch A: Resume checkpoint**
212
216
  Condition: `.continue-here.md` exists, its `workflow` is `phase` or `quick`, and either no active brownfield change exists or the strict-match rule still proves that checkpoint is the active execution surface.
213
217
 
@@ -219,54 +223,54 @@ Suggested next action:
219
223
 
220
224
  If `.continue-here.md` exists and its `workflow` is `generic`, do **not** route back through Branch A from this read-only reporter. Show the checkpoint in the status block, surface its `next_action`, and keep evaluating Branch B-F so the primary recommendation can advance toward the real next phase, verification, or milestone-close action.
221
225
  If an active brownfield change exists and a `phase` or `quick` checkpoint fails the strict-match rule, treat that checkpoint the same way: keep it visible in the status block, but keep evaluating Branch B-F so the active brownfield change remains the primary recommendation.
222
-
223
- **Branch B: Execute (PLAN without SUMMARY in current phase)**
224
- Condition: Current phase has a PLAN file but no matching SUMMARY.
225
-
226
- ```
227
- Suggested next action:
228
- Run /gsdd-execute to continue Phase [N] execution
229
- Also available: /gsdd-plan (re-plan current phase), /gsdd-verify (if prior phase needs verification)
230
- ```
231
-
232
- **Branch C: Plan (no PLAN for current phase)**
233
- Condition: Current phase has no PLAN files.
234
-
235
- ```
236
- Suggested next action:
237
- Run /gsdd-plan to create a plan for Phase [N]: [phase name]
238
- Also available: /gsdd-quick (sub-hour task outside phases), /gsdd-map-codebase (refresh codebase maps)
239
- ```
240
-
241
- **Branch D: Verify (SUMMARY without VERIFICATION)**
242
- Condition: Current phase has SUMMARY but no VERIFICATION file (verifier enabled).
243
-
244
- ```
245
- Suggested next action:
246
- Run /gsdd-verify to validate Phase [N]
247
- Also available: /gsdd-execute (continue to next phase), /gsdd-plan (plan next phase)
248
- ```
249
-
250
- **Branch E: Audit milestone (all phases [x], not yet archived)**
251
- Condition: All phases in the current milestone are marked `[x]`, and the current roadmap milestone/version does **not** yet have both a shipped entry in `.planning/MILESTONES.md` and the matching archived milestone audit artifact.
252
-
253
- ```
254
- Suggested next action:
255
- Run /gsdd-audit-milestone to audit the completed milestone
256
- Also available: /gsdd-verify (re-verify a specific phase), /gsdd-quick (sub-hour task)
257
- ```
258
-
259
- **Branch F: Non-phase state (no active roadmap, or retained roadmap already archived)**
226
+
227
+ **Branch B: Execute (PLAN without SUMMARY in current phase)**
228
+ Condition: Current phase has a PLAN file but no matching SUMMARY.
229
+
230
+ ```
231
+ Suggested next action:
232
+ Run /gsdd-execute to continue Phase [N] execution
233
+ Also available: /gsdd-plan (re-plan current phase), /gsdd-verify (if prior phase needs verification)
234
+ ```
235
+
236
+ **Branch C: Plan (no PLAN for current phase)**
237
+ Condition: Current phase has no PLAN files.
238
+
239
+ ```
240
+ Suggested next action:
241
+ Run /gsdd-plan to create a plan for Phase [N]: [phase name]
242
+ Also available: /gsdd-quick (sub-hour task outside phases), /gsdd-map-codebase (refresh codebase maps)
243
+ ```
244
+
245
+ **Branch D: Verify (SUMMARY without VERIFICATION)**
246
+ Condition: Current phase has SUMMARY but no VERIFICATION file (verifier enabled).
247
+
248
+ ```
249
+ Suggested next action:
250
+ Run /gsdd-verify to validate Phase [N]
251
+ Also available: /gsdd-execute (continue to next phase), /gsdd-plan (plan next phase)
252
+ ```
253
+
254
+ **Branch E: Audit milestone (all phases [x], not yet archived)**
255
+ Condition: All phases in the current milestone are marked `[x]`, and the current roadmap milestone/version does **not** yet have both a shipped entry in `.planning/MILESTONES.md` and the matching archived milestone audit artifact.
256
+
257
+ ```
258
+ Suggested next action:
259
+ Run /gsdd-audit-milestone to audit the completed milestone
260
+ Also available: /gsdd-verify (re-verify a specific phase), /gsdd-quick (sub-hour task)
261
+ ```
262
+
263
+ **Branch F: Non-phase state (no active roadmap, or retained roadmap already archived)**
260
264
  Condition:
261
265
  - `.planning/brownfield-change/CHANGE.md` exists, **or**
262
266
  - `.planning/SPEC.md` exists but `.planning/ROADMAP.md` does not, **or**
263
267
  - `.planning/codebase/` or `.planning/quick/` exists while both `.planning/SPEC.md` and `.planning/ROADMAP.md` are absent, **or**
264
268
  - `.planning/ROADMAP.md` still exists, but the current roadmap milestone/version already has both a shipped entry in `.planning/MILESTONES.md` and the matching archived milestone audit artifact — this is the archived-with-`ROADMAP.md` state, not a second trip through audit
265
-
266
- Check `.planning/MILESTONES.md`:
267
- - If MILESTONES.md exists and has at least one milestone entry → this is a subsequent milestone
268
- - If MILESTONES.md does not exist or is empty → this is the first milestone setup
269
-
269
+
270
+ Check `.planning/MILESTONES.md`:
271
+ - If MILESTONES.md exists and has at least one milestone entry → this is a subsequent milestone
272
+ - If MILESTONES.md does not exist or is empty → this is the first milestone setup
273
+
270
274
  ```
271
275
  Suggested next action (active brownfield change):
272
276
  Run /gsdd-resume to restore the active brownfield change context from `.planning/brownfield-change/CHANGE.md`
@@ -275,52 +279,52 @@ Suggested next action (active brownfield change):
275
279
  Suggested next action (subsequent milestone):
276
280
  Run /gsdd-new-milestone to start the next milestone cycle (gather goals, define requirements, create ROADMAP.md)
277
281
  Also available: /gsdd-progress (refresh after milestone setup)
278
-
279
- Suggested next action (incomplete milestone state — SPEC.md exists but no milestone archived yet):
280
- Inspect .planning/ manually — a milestone is likely still in progress.
281
- If a ROADMAP.md was deleted prematurely, re-run /gsdd-new-milestone to restore it.
282
- Do NOT run /gsdd-new-project — SPEC.md already exists and re-running would overwrite it.
283
-
282
+
283
+ Suggested next action (incomplete milestone state — SPEC.md exists but no milestone archived yet):
284
+ Inspect .planning/ manually — a milestone is likely still in progress.
285
+ If a ROADMAP.md was deleted prematurely, re-run /gsdd-new-milestone to restore it.
286
+ Do NOT run /gsdd-new-project — SPEC.md already exists and re-running would overwrite it.
287
+
284
288
  Suggested next action (codebase-only brownfield state):
285
289
  Run /gsdd-quick if the bounded change is already concrete.
286
290
  Also available: /gsdd-new-project (if you intentionally want to widen into full lifecycle work), /gsdd-map-codebase (refresh or deepen the baseline)
287
-
291
+
288
292
  Suggested next action (quick-lane brownfield state with incomplete quick work):
289
293
  Run /gsdd-quick to continue or finish the current bounded change.
290
294
  Also available: /gsdd-new-project (only if you intentionally want to widen this bounded change into full lifecycle setup), /gsdd-progress (refresh after the quick task is updated)
291
-
295
+
292
296
  Suggested next action (quick-lane brownfield state with no incomplete quick work):
293
297
  Run /gsdd-quick for the next bounded change.
294
298
  Also available: /gsdd-new-project (if you intentionally want to widen into SPEC.md + ROADMAP.md), /gsdd-map-codebase (if the repo baseline feels stale)
295
- ```
296
-
297
- If none of the above conditions match, report that the project is in a clean state with no obvious next action.
298
- </route_action>
299
-
300
- <edge_cases>
301
- Handle compound states:
302
-
299
+ ```
300
+
301
+ If none of the above conditions match, report that the project is in a clean state with no obvious next action.
302
+ </route_action>
303
+
304
+ <edge_cases>
305
+ Handle compound states:
306
+
303
307
  - **Checkpoint + unexecuted plan:** Both `.continue-here.md` exists and a PLAN lacks a SUMMARY. Prioritize checkpoint (Branch A) but mention the unexecuted plan in the status block.
304
308
  - **Generic checkpoint + current phase work:** A `workflow: generic` checkpoint may coexist with an incomplete plan, unverified phase, or completed milestone. Keep the checkpoint visible in the status block, but let Branch B-F supply the primary recommendation instead of bouncing back to `/gsdd-resume`.
305
309
  - **Active brownfield change + generic checkpoint:** Keep the generic checkpoint visible as informational context, but let the active brownfield change remain the continuity anchor and use Branch F for the primary recommendation.
306
310
  - **Active brownfield change + non-matching `phase`/`quick` checkpoint:** Show the checkpoint as surviving context, but let the active brownfield change stay primary unless branch alignment, scope alignment, and still-active execution state all match.
307
311
  - **All phases complete + checkpoint:** All phases `[x]` but a checkpoint exists. If the checkpoint is `phase` or `quick`, mention both and suggest `/gsdd-resume` before continuing. If the checkpoint is `generic`, keep it visible as informational context and still route the primary recommendation to milestone audit.
308
- - **Phase done but next unplanned:** Current phase has both PLAN and SUMMARY, but the next phase has no PLAN. Show the current phase as complete and suggest planning the next phase (Branch C targeting the next phase).
309
- - **No matching condition:** If the project state does not match any branch, report it clearly and suggest the user inspect `.planning/` manually.
310
- </edge_cases>
311
-
312
- </process>
313
-
314
- <success_criteria>
315
- - [ ] Project existence checked with three-way logic (no artifacts / between-milestones / proceed)
316
- - [ ] Status derived from disk artifacts only (ROADMAP.md, SPEC.md, phase dirs, .continue-here.md, config.json)
317
- - [ ] Recent work shown from 2-3 most recent SUMMARY.md files (if they exist)
318
- - [ ] Status block includes project name, current phase, and completion count
319
- - [ ] Routing suggestion is specific (includes phase number and branch-specific output block)
320
- - [ ] Named branch output format used with "Also available" alternatives
321
- - [ ] No files created, modified, or deleted (read-only workflow)
322
- - [ ] All workflow references use portable `/gsdd-*` command format
323
- - [ ] No interactive menus, no numbered option lists, no waiting for user selection
324
- - [ ] Edge cases handled for compound states
325
- - [ ] Unmerged-commit warning only appears when `git log main..HEAD --oneline` returns output; silent when empty
326
- </success_criteria>
312
+ - **Phase done but next unplanned:** Current phase has both PLAN and SUMMARY, but the next phase has no PLAN. Show the current phase as complete and suggest planning the next phase (Branch C targeting the next phase).
313
+ - **No matching condition:** If the project state does not match any branch, report it clearly and suggest the user inspect `.planning/` manually.
314
+ </edge_cases>
315
+
316
+ </process>
317
+
318
+ <success_criteria>
319
+ - [ ] Project existence checked with three-way logic (no artifacts / between-milestones / proceed)
320
+ - [ ] Status derived from disk artifacts only (ROADMAP.md, SPEC.md, phase dirs, .continue-here.md, config.json)
321
+ - [ ] Recent work shown from 2-3 most recent SUMMARY.md files (if they exist)
322
+ - [ ] Status block includes project name, current phase, and completion count
323
+ - [ ] Routing suggestion is specific (includes phase number and branch-specific output block)
324
+ - [ ] Named branch output format used with "Also available" alternatives
325
+ - [ ] No files created, modified, or deleted (read-only workflow)
326
+ - [ ] All workflow references use portable `/gsdd-*` command format
327
+ - [ ] No interactive menus, no numbered option lists, no waiting for user selection
328
+ - [ ] Edge cases handled for compound states
329
+ - [ ] Unmerged-commit warning only appears when `git log main..HEAD --oneline` returns output; silent when empty
330
+ </success_criteria>