@opengsd/gsd-core 1.13.0 → 1.14.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 (257) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/agents/gsd-advisor-researcher.compact.md +85 -0
  4. package/agents/gsd-ai-researcher.compact.md +96 -0
  5. package/agents/gsd-assumptions-analyzer.compact.md +81 -0
  6. package/agents/gsd-code-fixer.compact.md +458 -0
  7. package/agents/gsd-code-fixer.md +5 -5
  8. package/agents/gsd-code-reviewer.compact.md +269 -0
  9. package/agents/gsd-code-reviewer.md +15 -3
  10. package/agents/gsd-codebase-mapper.compact.md +760 -0
  11. package/agents/gsd-debug-session-manager.compact.md +345 -0
  12. package/agents/gsd-doc-classifier.compact.md +192 -0
  13. package/agents/gsd-doc-synthesizer.compact.md +200 -0
  14. package/agents/gsd-doc-verifier.compact.md +143 -0
  15. package/agents/gsd-doc-writer.compact.md +440 -0
  16. package/agents/gsd-dom-verifier.compact.md +138 -0
  17. package/agents/gsd-domain-researcher.compact.md +141 -0
  18. package/agents/gsd-eval-auditor.compact.md +160 -0
  19. package/agents/gsd-eval-planner.compact.md +137 -0
  20. package/agents/gsd-framework-selector.compact.md +82 -0
  21. package/agents/gsd-integration-checker.compact.md +245 -0
  22. package/agents/gsd-intel-updater.compact.md +226 -0
  23. package/agents/gsd-mempalace-curator.compact.md +45 -0
  24. package/agents/gsd-nyquist-auditor.compact.md +179 -0
  25. package/agents/gsd-pattern-mapper.compact.md +275 -0
  26. package/agents/gsd-project-researcher.compact.md +587 -0
  27. package/agents/gsd-research-synthesizer.compact.md +212 -0
  28. package/agents/gsd-roadmapper.compact.md +454 -0
  29. package/agents/gsd-roadmapper.md +13 -0
  30. package/agents/gsd-security-auditor.compact.md +162 -0
  31. package/agents/gsd-ui-auditor.compact.md +404 -0
  32. package/agents/gsd-ui-checker.compact.md +277 -0
  33. package/agents/gsd-ui-researcher.compact.md +282 -0
  34. package/agents/gsd-user-profiler.compact.md +108 -0
  35. package/bin/install.js +206 -68
  36. package/commands/gsd/cleanup.md +1 -0
  37. package/commands/gsd/code-review.md +2 -1
  38. package/commands/gsd/complete-milestone.md +1 -0
  39. package/commands/gsd/config.md +1 -0
  40. package/commands/gsd/debug.md +1 -0
  41. package/commands/gsd/graphify.md +1 -0
  42. package/commands/gsd/health.md +1 -0
  43. package/commands/gsd/mempalace-capture.md +1 -0
  44. package/commands/gsd/mempalace-recall.md +1 -0
  45. package/commands/gsd/new-milestone.md +1 -0
  46. package/commands/gsd/new-project.md +1 -0
  47. package/commands/gsd/next.md +1 -0
  48. package/commands/gsd/pause-work.md +1 -0
  49. package/commands/gsd/phase.md +1 -0
  50. package/commands/gsd/pr-branch.md +1 -0
  51. package/commands/gsd/resume-work.md +1 -0
  52. package/commands/gsd/review-backlog.md +1 -0
  53. package/commands/gsd/settings.md +2 -1
  54. package/commands/gsd/stats.md +1 -0
  55. package/commands/gsd/thread.md +1 -0
  56. package/commands/gsd/workspace.md +1 -0
  57. package/commands/gsd/workstreams.md +1 -0
  58. package/gsd-core/bin/check-latest-version.cjs +8 -3
  59. package/gsd-core/bin/gsd-tools.cjs +338 -125
  60. package/gsd-core/bin/lib/adr-parser.cjs +1 -1
  61. package/gsd-core/bin/lib/artifacts.cjs +2 -1
  62. package/gsd-core/bin/lib/audit.cjs +39 -22
  63. package/gsd-core/bin/lib/broken-windows.cjs +168 -49
  64. package/gsd-core/bin/lib/capability-lifecycle.cjs +10 -6
  65. package/gsd-core/bin/lib/capability-loader.cjs +135 -1
  66. package/gsd-core/bin/lib/capability-registry.cjs +79 -67
  67. package/gsd-core/bin/lib/capability-source.cjs +19 -2
  68. package/gsd-core/bin/lib/capability-validator.cjs +14 -1
  69. package/gsd-core/bin/lib/check-command-router.cjs +113 -36
  70. package/gsd-core/bin/lib/code-review-depth.cjs +2 -2
  71. package/gsd-core/bin/lib/commands.cjs +650 -72
  72. package/gsd-core/bin/lib/config-loader.cjs +1 -0
  73. package/gsd-core/bin/lib/config.cjs +153 -38
  74. package/gsd-core/bin/lib/coverage.cjs +1 -1
  75. package/gsd-core/bin/lib/decisions.cjs +137 -34
  76. package/gsd-core/bin/lib/external-descriptor-trust.cjs +29 -14
  77. package/gsd-core/bin/lib/gsd2-import.cjs +1 -2
  78. package/gsd-core/bin/lib/health-diagnostic-rules/state-consistency.cjs +12 -1
  79. package/gsd-core/bin/lib/health-diagnostic-rules/worktree-health.cjs +1 -1
  80. package/gsd-core/bin/lib/init.cjs +409 -47
  81. package/gsd-core/bin/lib/install-engine.cjs +16 -3
  82. package/gsd-core/bin/lib/install-profiles.cjs +14 -0
  83. package/gsd-core/bin/lib/installer-migrations.cjs +33 -4
  84. package/gsd-core/bin/lib/loop-resolver.cjs +50 -31
  85. package/gsd-core/bin/lib/mcp-catalog.cjs +2 -2
  86. package/gsd-core/bin/lib/milestone.cjs +19 -8
  87. package/gsd-core/bin/lib/model-resolver.cjs +101 -10
  88. package/gsd-core/bin/lib/phase-command-router.cjs +7 -1
  89. package/gsd-core/bin/lib/phase-id.cjs +161 -22
  90. package/gsd-core/bin/lib/phase-lifecycle.cjs +61 -0
  91. package/gsd-core/bin/lib/phase.cjs +167 -63
  92. package/gsd-core/bin/lib/planning-inspect.cjs +34 -18
  93. package/gsd-core/bin/lib/planning-snapshot.cjs +61 -12
  94. package/gsd-core/bin/lib/planning-workspace.cjs +50 -1
  95. package/gsd-core/bin/lib/pristine-baseline.cjs +182 -0
  96. package/gsd-core/bin/lib/prohibition-enforcement.cjs +91 -4
  97. package/gsd-core/bin/lib/quick-batch.cjs +1 -1
  98. package/gsd-core/bin/lib/refactor-trigger-command-router.cjs +61 -2
  99. package/gsd-core/bin/lib/research-store.cjs +11 -12
  100. package/gsd-core/bin/lib/review-lane-invocation.cjs +23 -0
  101. package/gsd-core/bin/lib/reviewer-step-dispatch.cjs +337 -0
  102. package/gsd-core/bin/lib/roadmap-parser.cjs +56 -15
  103. package/gsd-core/bin/lib/roadmap.cjs +108 -14
  104. package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +27 -10
  105. package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +12 -3
  106. package/gsd-core/bin/lib/runtime-artifact-layout.cjs +13 -5
  107. package/gsd-core/bin/lib/runtime-hooks-surface.cjs +193 -4
  108. package/gsd-core/bin/lib/security.cjs +126 -7
  109. package/gsd-core/bin/lib/state-document.cjs +130 -28
  110. package/gsd-core/bin/lib/state-md-schema.cjs +21 -14
  111. package/gsd-core/bin/lib/state-transition.cjs +142 -28
  112. package/gsd-core/bin/lib/state.cjs +223 -27
  113. package/gsd-core/bin/lib/surface.cjs +60 -2
  114. package/gsd-core/bin/lib/task-command-router.cjs +12 -6
  115. package/gsd-core/bin/lib/uat.cjs +1 -1
  116. package/gsd-core/bin/lib/update-context.cjs +30 -24
  117. package/gsd-core/bin/lib/vendor/js-yaml.cjs +11 -3
  118. package/gsd-core/bin/lib/verification.cjs +47 -15
  119. package/gsd-core/bin/lib/verify-command-grounding.cjs +1 -1
  120. package/gsd-core/bin/lib/verify.cjs +188 -23
  121. package/gsd-core/bin/lib/workstream-inventory.cjs +1 -0
  122. package/gsd-core/bin/lib/worktree-safety.cjs +13 -7
  123. package/gsd-core/bin/shared/config-defaults.manifest.json +1 -0
  124. package/gsd-core/bin/shared/config-schema.manifest.json +5 -0
  125. package/gsd-core/bin/verify-reapply-patches.cjs +439 -80
  126. package/gsd-core/references/compact-content-gate.md +66 -0
  127. package/gsd-core/references/loop-hook-dispatch.md +18 -0
  128. package/gsd-core/references/model-profiles.md +12 -3
  129. package/gsd-core/references/planning-config.md +3 -0
  130. package/gsd-core/references/tdd.md +5 -2
  131. package/gsd-core/references/thinking-models-planning.md +18 -2
  132. package/gsd-core/references/verification-patterns.md +17 -4
  133. package/gsd-core/references/worktree-path-safety.md +112 -2
  134. package/gsd-core/templates/README.md +7 -1
  135. package/gsd-core/templates/state.md +6 -3
  136. package/gsd-core/templates/summary.compact.md +212 -0
  137. package/gsd-core/templates/user-setup.compact.md +199 -0
  138. package/gsd-core/templates/user-setup.md +0 -9
  139. package/gsd-core/workflows/add-todo.md +3 -2
  140. package/gsd-core/workflows/autonomous.md +13 -10
  141. package/gsd-core/workflows/check-todos.md +4 -2
  142. package/gsd-core/workflows/cleanup.md +3 -1
  143. package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +7 -0
  144. package/gsd-core/workflows/code-review-fix.md +3 -3
  145. package/gsd-core/workflows/code-review.md +156 -30
  146. package/gsd-core/workflows/complete-milestone/detail/elaboration.md +274 -0
  147. package/gsd-core/workflows/complete-milestone.md +39 -262
  148. package/gsd-core/workflows/docs-update/detail/elaboration.md +179 -0
  149. package/gsd-core/workflows/docs-update.md +14 -155
  150. package/gsd-core/workflows/execute-phase/detail/elaboration.md +124 -0
  151. package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +18 -3
  152. package/gsd-core/workflows/execute-phase/steps/completion-reconciliation.md +56 -0
  153. package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +7 -2
  154. package/gsd-core/workflows/execute-phase/steps/executor-progress-policy.md +43 -0
  155. package/gsd-core/workflows/execute-phase/steps/sequential-root-pin.md +35 -0
  156. package/gsd-core/workflows/execute-phase.md +53 -152
  157. package/gsd-core/workflows/execute-plan.md +20 -7
  158. package/gsd-core/workflows/help/modes/full.compact.md +398 -0
  159. package/gsd-core/workflows/help.md +1 -1
  160. package/gsd-core/workflows/map-codebase.md +50 -3
  161. package/gsd-core/workflows/new-milestone.md +54 -12
  162. package/gsd-core/workflows/new-project/detail/elaboration.md +216 -0
  163. package/gsd-core/workflows/new-project.md +32 -202
  164. package/gsd-core/workflows/plan-phase/detail/elaboration.md +209 -0
  165. package/gsd-core/workflows/plan-phase.md +22 -181
  166. package/gsd-core/workflows/pr-branch.md +19 -7
  167. package/gsd-core/workflows/quick.md +8 -1
  168. package/gsd-core/workflows/reapply-patches.md +77 -3
  169. package/gsd-core/workflows/settings.md +18 -5
  170. package/gsd-core/workflows/update.md +7 -5
  171. package/gsd-core/workflows/verify-work/detail/elaboration.md +230 -0
  172. package/gsd-core/workflows/verify-work.md +20 -180
  173. package/hooks/dist/gsd-agent-isolation-guard.js +42 -16
  174. package/hooks/dist/gsd-context-monitor.js +88 -15
  175. package/hooks/dist/gsd-cursor-subagent-start.js +34 -14
  176. package/hooks/dist/gsd-secret-read-guard.js +44 -18
  177. package/hooks/dist/gsd-statusline.js +11 -7
  178. package/hooks/dist/gsd-validate-commit.sh +34 -4
  179. package/hooks/dist/gsd-worktree-path-guard.js +25 -14
  180. package/hooks/dist/gsd-write-guard.js +46 -1
  181. package/hooks/dist/lib/dispatch-identity.js +187 -0
  182. package/hooks/dist/lib/filename-classification.js +64 -0
  183. package/hooks/dist/lib/isolation-deny-reason.js +53 -1
  184. package/hooks/dist/lib/isolation-sentinel.js +58 -19
  185. package/hooks/gsd-agent-isolation-guard.js +42 -16
  186. package/hooks/gsd-context-monitor.js +88 -15
  187. package/hooks/gsd-cursor-subagent-start.js +34 -14
  188. package/hooks/gsd-secret-read-guard.js +44 -18
  189. package/hooks/gsd-statusline.js +11 -7
  190. package/hooks/gsd-validate-commit.sh +34 -4
  191. package/hooks/gsd-worktree-path-guard.js +25 -14
  192. package/hooks/gsd-write-guard.js +46 -1
  193. package/hooks/lib/dispatch-identity.js +187 -0
  194. package/hooks/lib/filename-classification.js +64 -0
  195. package/hooks/lib/isolation-deny-reason.js +53 -1
  196. package/hooks/lib/isolation-sentinel.js +58 -19
  197. package/package.json +10 -6
  198. package/scripts/benchmark-compact-content-variants.cjs +298 -0
  199. package/scripts/benchmark-compact-content.cjs +368 -0
  200. package/scripts/check-contract-drift.cjs +4 -1
  201. package/scripts/check-env.cjs +36 -8
  202. package/scripts/check-glossary-refs.cjs +25 -21
  203. package/scripts/ci-next-health.cjs +271 -0
  204. package/scripts/ci-prepare-test-scope.cjs +7 -7
  205. package/scripts/ci-test-scope.cjs +126 -20
  206. package/scripts/ci-timeout-report.cjs +1 -1
  207. package/scripts/diff-touches-shipped-paths.cjs +1 -1
  208. package/scripts/docs-guard-registry.cjs +7 -2
  209. package/scripts/gen-adr-index.cjs +8 -2
  210. package/scripts/gen-inventory-manifest.cjs +12 -0
  211. package/scripts/gen-platform-conformance-tier.cjs +557 -0
  212. package/scripts/lib/drift-scan.cjs +1 -1
  213. package/scripts/lib/macos-conformance-tier.generated.cjs +210 -0
  214. package/scripts/lib/npm-version-check-diagnosis.cjs +59 -0
  215. package/scripts/lib/platform-conformance-tier.generated.cjs +276 -0
  216. package/scripts/lib/suite-detection.cjs +32 -0
  217. package/scripts/lint-allowed-tools-parity.cjs +221 -0
  218. package/scripts/lint-docs-guard-registration.exempt-baseline.cjs +19 -2
  219. package/scripts/lint-phase-id-drift.cjs +338 -13
  220. package/scripts/lint-response-language-coverage.cjs +9 -3
  221. package/scripts/lint-source-test-name-collision.cjs +1 -1
  222. package/scripts/lint-test-file-count.allowlist.json +1 -0
  223. package/scripts/lint-vendored-deps.cjs +128 -17
  224. package/scripts/lint-workflow-shellcheck-baseline.json +85 -0
  225. package/scripts/prompt-injection-scan.sh +14 -0
  226. package/scripts/workflow-size.cjs +139 -0
  227. package/skills/gsd-cleanup/SKILL.md +1 -0
  228. package/skills/gsd-code-review/SKILL.md +2 -1
  229. package/skills/gsd-complete-milestone/SKILL.md +1 -0
  230. package/skills/gsd-config/SKILL.md +1 -0
  231. package/skills/gsd-debug/SKILL.md +1 -0
  232. package/skills/gsd-graphify/SKILL.md +1 -0
  233. package/skills/gsd-health/SKILL.md +1 -0
  234. package/skills/gsd-mempalace-capture/SKILL.md +1 -0
  235. package/skills/gsd-mempalace-recall/SKILL.md +1 -0
  236. package/skills/gsd-new-milestone/SKILL.md +1 -0
  237. package/skills/gsd-new-project/SKILL.md +1 -0
  238. package/skills/gsd-next/SKILL.md +1 -0
  239. package/skills/gsd-pause-work/SKILL.md +1 -0
  240. package/skills/gsd-phase/SKILL.md +1 -0
  241. package/skills/gsd-pr-branch/SKILL.md +1 -0
  242. package/skills/gsd-resume-work/SKILL.md +1 -0
  243. package/skills/gsd-review-backlog/SKILL.md +1 -0
  244. package/skills/gsd-settings/SKILL.md +2 -1
  245. package/skills/gsd-stats/SKILL.md +1 -0
  246. package/skills/gsd-thread/SKILL.md +1 -0
  247. package/skills/gsd-workspace/SKILL.md +1 -0
  248. package/skills/gsd-workstreams/SKILL.md +1 -0
  249. package/vscode/package.json +1 -1
  250. package/gsd-core/templates/claude-md.md +0 -145
  251. package/gsd-core/templates/codebase/concerns.md +0 -310
  252. package/gsd-core/templates/codebase/conventions.md +0 -307
  253. package/gsd-core/templates/codebase/integrations.md +0 -280
  254. package/gsd-core/templates/codebase/structure.md +0 -285
  255. package/gsd-core/templates/codebase/testing.md +0 -480
  256. package/gsd-core/templates/debug-subagent-prompt.md +0 -91
  257. package/gsd-core/templates/discovery.md +0 -146
@@ -0,0 +1,398 @@
1
+ Apply response_language to all user-facing prose — narration between tool calls, status updates, progress notes, and findings included; preserve code, paths, and identifiers.
2
+
3
+ <purpose>
4
+ Display the complete GSD Core command reference. Output ONLY the reference content. Do NOT add project-specific analysis, git status, next-step suggestions, or any commentary beyond the reference.
5
+ </purpose>
6
+
7
+ <reference>
8
+ # GSD Core Command Reference
9
+
10
+ **GSD Core** (Git. Ship. Done.) creates hierarchical project plans optimized for solo agentic development with Claude Code.
11
+
12
+ ## Quick Start
13
+
14
+ 1. `/gsd:new-project` — Initialize project (research, requirements, roadmap)
15
+ 2. `/gsd:plan-phase 1` — Create detailed plan for first phase
16
+ 3. `/gsd:execute-phase 1` — Execute the phase
17
+
18
+ Not sure where to start? `/gsd:next` reads your project state and routes you to the right next action.
19
+
20
+ ### Smart Entry
21
+
22
+ **`/gsd:next`** — State-aware front door. Detects your situation via `gsd-tools smart-entry` (no-project, paused, blocked, planning, executing, needs-verify, idle, complete, …) and shows a menu with one recommended action. Launcher only; falls back to `/gsd:progress`.
23
+
24
+ Usage: `/gsd:next`
25
+
26
+ ## Staying Updated
27
+
28
+ ```bash
29
+ npx @opengsd/gsd-core@latest
30
+ ```
31
+
32
+ ## Core Workflow
33
+
34
+ ```text
35
+ /gsd:new-project → /gsd:plan-phase → /gsd:execute-phase → repeat
36
+ ```
37
+
38
+ ### Project Initialization
39
+
40
+ **`/gsd:new-project`** — Unified flow from idea to ready-for-planning: deep questioning, optional domain research (4 parallel researchers), requirements with v1/v2/out-of-scope scoping, roadmap with phase breakdown. Creates `.planning/`: `PROJECT.md`, `config.json`, `research/`, `REQUIREMENTS.md`, `ROADMAP.md`, `STATE.md`.
41
+
42
+ Usage: `/gsd:new-project`
43
+
44
+ **`/gsd:onboard [--fast] [--text]`** — Guides first-time onboarding for an existing codebase: detects brownfield state, routes through `/gsd:map-codebase` → `/gsd:ingest-docs` → `/gsd:new-project` in safe order, idempotent.
45
+
46
+ Usage: `/gsd:onboard`
47
+
48
+ **`/gsd:map-codebase [--fast] [--focus <area>] [--query <term>]`** — Maps an existing codebase with parallel Explore agents into `.planning/codebase/` (stack, architecture, structure, conventions, testing, integrations, concerns). `--fast` for rapid assessment, `--query` to search the intel index.
49
+
50
+ Usage: `/gsd:map-codebase`
51
+
52
+ ### Phase Planning
53
+
54
+ **`/gsd:discuss-phase <number> [--chain | --analyze | --power | --assumptions] [--batch[=N]]`** — Articulate your vision for a phase before planning; creates CONTEXT.md. `--chain` chained flow, `--analyze` assumption analysis, `--power` extended questions, `--assumptions` surfaces implementation assumptions non-interactively, `--batch` groups 2-5 questions per turn.
55
+
56
+ Usage: `/gsd:discuss-phase 2`
57
+ Usage: `/gsd:discuss-phase 2 --batch=3`
58
+
59
+ **`/gsd:plan-phase <number> [--research] [--skip-research] [--research-phase <N>] [--view] [--gaps] [--skip-verify] [--skip-ui] [--prd <file>] [--ingest <path-or-glob>] [--ingest-format <auto|nygard|madr|narrative>] [--reviews] [--text] [--bounce] [--skip-bounce] [--chunked] [--tdd] [--mvp] [--granularity <coarse|standard|fine>] [--no-tracer] [--no-reversibility-gates]`** — Creates `.planning/phases/XX-phase-name/XX-YY-PLAN.md` with concrete tasks, verification criteria, and success measures (multiple plans per phase supported).
60
+
61
+ Key flags: `--research-phase <N>` runs research only and writes `RESEARCH.md` then exits (replaces the deleted `gsd-research-phase`; `--research` forces refresh, `--view` prints existing without spawning). `--gaps` closes gaps from a prior plan-check. `--ingest`/`--ingest-format` pre-ingest external ADRs/PRDs/SPECs (see PRD Express Path). `--bounce`/`--skip-bounce` toggle the optional external refinement pass (`workflow.plan_bounce`). `--chunked` splits planning into short, individually-committed passes for crash resilience (`workflow.plan_chunked`), resumable. `--tdd` tests-before-code order. `--mvp` adds user story + Walking Skeleton (see `/gsd:mvp-phase`). `--granularity` overrides resolved plan granularity. `--no-tracer` opts out of tracer-first ordering. `--no-reversibility-gates` suppresses the one-way-door checkpoint for unattended runs.
62
+
63
+ Usage: `/gsd:plan-phase 1`
64
+ Result: Creates `.planning/phases/01-foundation/01-01-PLAN.md`
65
+
66
+ **PRD Express Path:** Pass `--prd path/to/requirements.md` to skip discuss-phase — your PRD becomes locked decisions in CONTEXT.md.
67
+
68
+ ### Execution
69
+
70
+ **`/gsd:execute-phase <phase-number> [--wave N] [--gaps-only] [--tdd]`** — Groups plans by wave (frontmatter), executes sequentially with parallel plans per wave via Task tool, verifies phase goal, updates REQUIREMENTS/ROADMAP/STATE. `--wave N` runs only wave N; `--gaps-only` re-runs verifier-flagged plans; `--tdd` enforces test-driven order.
71
+
72
+ Usage: `/gsd:execute-phase 5`
73
+ Usage: `/gsd:execute-phase 5 --wave 2`
74
+
75
+ ### Smart Router
76
+
77
+ **`/gsd:progress --do "<description>"`** — Routes freeform text to the best-matching GSD command; asks you to pick between top matches on ambiguity. Never does the work itself.
78
+
79
+ Usage: `/gsd:progress --do "fix the login button"`
80
+
81
+ ### Quick Mode
82
+
83
+ **`/gsd:quick [--full] [--validate] [--discuss] [--research]`** — Small ad-hoc tasks in `.planning/quick/` (updates STATE.md, not ROADMAP.md); spawns planner+executor only by default. `--full` = discuss+research+plan-check+verify; `--validate` = plan-check + post-execution verify; `--discuss`/`--research` add one step each; flags compose.
84
+
85
+ Usage: `/gsd:quick`
86
+ Result: Creates `.planning/quick/NNN-slug/PLAN.md`, `.planning/quick/NNN-slug/NNN-slug-SUMMARY.md`
87
+
88
+ ---
89
+
90
+ **`/gsd:quick-batch [--file <path>] [--jobs auto|N] [--validate] [--research] [--resume <batch-id>] [task list]`** — Batches several quick-shaped tasks (inline or `--file`); one coordinator plans/dispatches/merges. `--jobs` caps concurrency, `--resume` dispatches only eligible items; `--discuss`/`--full` are rejected.
91
+
92
+ Usage: `/gsd:quick-batch --jobs 3 --validate`
93
+ Result: Per-item artifacts under `.planning/quick/`; batch state in `.planning/quick-batches/<batch-id>/BATCH.json`
94
+
95
+ ---
96
+
97
+ **`/gsd:fast [description]`** — Trivial task inline, no subagent, no planning files: typo fixes, config changes, ≤3 file edits (redirects to `/gsd:quick` above that). Atomic commit, logs to STATE.md.
98
+
99
+ Usage: `/gsd:fast "fix the typo in README"`
100
+
101
+ ### Roadmap Management
102
+
103
+ **`/gsd:phase <description>`** — Appends a new phase (next sequential number) to ROADMAP.md.
104
+
105
+ Usage: `/gsd:phase "Add admin dashboard"`
106
+
107
+ **`/gsd:phase --insert <after> <description>`** — Inserts a decimal phase (e.g. 7.1) between existing phases for discovered mid-milestone work.
108
+
109
+ Usage: `/gsd:phase --insert 7 "Fix critical auth bug"`
110
+ Result: Creates Phase 7.1
111
+
112
+ **`/gsd:phase --remove <number>`** — Deletes a future (unstarted) phase and renumbers subsequent phases; git commit preserves history.
113
+
114
+ Usage: `/gsd:phase --remove 17`
115
+ Result: Phase 17 deleted, phases 18-20 become 17-19
116
+
117
+ **`/gsd:phase --edit <number> [--force]`** — Edits title/description/requirements/dependencies in place; `--force` allows editing already-started phases.
118
+
119
+ ### Milestone Management
120
+
121
+ **`/gsd:new-milestone <name>`** — Mirrors `/gsd:new-project`'s flow for brownfield (existing PROJECT.md): questioning, optional research, requirements, roadmap. `--reset-phase-numbers` restarts at Phase 1 (archives old dirs first); `--ws <name>` scopes to a workstream, skipping the shared PROJECT.md write.
122
+
123
+ Usage: `/gsd:new-milestone "v2.0 Features"`
124
+
125
+ **`/gsd:complete-milestone <version>`** — Archives to MILESTONES.md + milestones/ dir, tags the release, preps workspace for next version.
126
+
127
+ Usage: `/gsd:complete-milestone 1.0.0`
128
+
129
+ ### Progress Tracking
130
+
131
+ **`/gsd:progress [--next | --forensic | --do "<description>"]`** — Progress bar, SUMMARY recap, current position, key decisions, offers to execute/create next plan, detects 100% completion.
132
+
133
+ Modes: default (report+routing) · `--next` (auto-advance; `--force` bypasses safety gates) · `--next --auto` (chains steps until milestone completion or a blocking decision) · `--next --converge` (routes planning through `/gsd:plan-review-convergence`, requires `workflow.plan_review_convergence`; reviewer flags and `--max-cycles` forward) · `--forensic` (appends a 6-check integrity audit) · `--do "<text>"` (smart router, see above).
134
+
135
+ Usage: `/gsd:progress`
136
+ Usage: `/gsd:progress --next --auto`
137
+
138
+ ### Session Management
139
+
140
+ **`/gsd:resume-work`** — Reads STATE.md, shows position and recent progress, offers next actions.
141
+
142
+ Usage: `/gsd:resume-work`
143
+
144
+ **`/gsd:pause-work [--report]`** — Creates a `.continue-here` handoff, updates STATE.md's session-continuity section. `--report` also writes a post-session summary to `.planning/reports/`.
145
+
146
+ Usage: `/gsd:pause-work`
147
+
148
+ ### Debugging
149
+
150
+ **`/gsd:debug [issue description] [--diagnose]`** — Adaptive-question symptom gathering, `.planning/debug/[slug].md` tracking, scientific-method investigation, survives `/clear` (resume with no args), archives resolved issues. `--diagnose` runs a one-shot pass without a persistent session.
151
+
152
+ Usage: `/gsd:debug "login button doesn't work"`
153
+
154
+ ### Spiking & Sketching
155
+
156
+ **`/gsd:spike [idea] [--quick]`** — Decomposes into 2-5 risk-ordered Given/When/Then experiments, builds minimum code, captures VALIDATED/INVALIDATED/PARTIAL, saves to `.planning/spikes/` with MANIFEST.md. Works in any repo, no `/gsd:new-project` needed. `--quick` skips decomposition.
157
+
158
+ Usage: `/gsd:spike "can we stream LLM output over WebSockets?"`
159
+
160
+ **`/gsd:sketch [idea] [--quick]`** — Conversational mood intake, 2-3 tabbed HTML variants per sketch, shared CSS theme system, saves to `.planning/sketches/` with MANIFEST.md. `--quick` skips mood intake.
161
+
162
+ Usage: `/gsd:sketch "dashboard layout for the admin panel"`
163
+
164
+ **`/gsd:spike --wrap-up`** — Curates spikes one-at-a-time (include/exclude/partial/UAT), generates a project skill under `./.claude/skills/spike-findings-[project]/`, writes `.planning/spikes/WRAP-UP-SUMMARY.md`, adds a CLAUDE.md auto-load line.
165
+
166
+ Usage: `/gsd:spike --wrap-up`
167
+
168
+ **`/gsd:sketch --wrap-up`** — Same curation flow for sketches, generating `./.claude/skills/sketch-findings-[project]/` with design decisions/CSS/HTML structures.
169
+
170
+ Usage: `/gsd:sketch --wrap-up`
171
+
172
+ ### Capturing Ideas, Notes, and Todos
173
+
174
+ **`/gsd:capture [description]`** — Extracts context from conversation (or uses the given text), creates a todo in `.planning/todos/pending/`, infers area, checks duplicates, updates STATE.md count.
175
+
176
+ Usage: `/gsd:capture Add auth token refresh`
177
+
178
+ **`/gsd:capture --note <text>`** — Zero-friction timestamped note to `.planning/notes/` (or `~/.claude/notes/` globally). Subcommands: append (default), list, promote (note → todo). Works without a project.
179
+
180
+ Usage: `/gsd:capture --note refactor the hook system`
181
+ Usage: `/gsd:capture --note promote 3`
182
+
183
+ **`/gsd:capture --list [area]`** — Lists pending todos (optional area filter), loads full context for the one you pick, routes to work-now/add-to-phase/brainstorm, moves it to completed/ on start.
184
+
185
+ Usage: `/gsd:capture --list api`
186
+
187
+ **`/gsd:capture --list-seeds [status]`** — Read-only listing of captured seeds (ID, status, scope, trigger, title); optional status filter. Enrich via `/gsd:capture --seed --enrich SEED-NNN`.
188
+
189
+ Usage: `/gsd:capture --list-seeds dormant`
190
+
191
+ ### User Acceptance Testing
192
+
193
+ **`/gsd:verify-work [phase]`** — Extracts testable deliverables from SUMMARY.md, presents tests one at a time (yes/no), auto-diagnoses failures into fix plans, ready for re-execution.
194
+
195
+ Usage: `/gsd:verify-work 3`
196
+
197
+ ### Ship Work
198
+
199
+ **`/gsd:ship [phase]`** — Pushes branch, opens a PR with a body from SUMMARY/VERIFICATION/REQUIREMENTS, optionally requests review, updates STATE.md. Requires a verified phase and authenticated `gh`.
200
+
201
+ Usage: `/gsd:ship 4` or `/gsd:ship 4 --draft`
202
+
203
+ ---
204
+
205
+ **`/gsd:review --phase N [--gemini] [--claude] [--codex] [--coderabbit] [--opencode] [--qwen] [--cursor] [--agy] [--all]`** — Detects available external AI CLIs, each independently reviews the phase's plans with the same structured prompt (CodeRabbit reviews the live diff, up to ~5 min), produces REVIEWS.md with consensus. Feed back via `/gsd:plan-phase N --reviews`.
206
+
207
+ Usage: `/gsd:review --phase 3 --all`
208
+
209
+ ---
210
+
211
+ **`/gsd:pr-branch [target]`** — Classifies commits (code-only/planning-only/mixed), cherry-picks code onto a clean branch so reviewers see no `.planning/` artifacts.
212
+
213
+ Usage: `/gsd:pr-branch` or `/gsd:pr-branch main`
214
+
215
+ ---
216
+
217
+ **`/gsd:capture --seed [idea]`** — Captures a forward-looking idea with WHY/WHEN-to-surface trigger conditions; auto-surfaces during `/gsd:new-milestone` when triggers match.
218
+
219
+ Usage: `/gsd:capture --seed "add real-time notifications when we build the events system"`
220
+
221
+ **`/gsd:capture --backlog [description]`** — Adds an idea to the 999.x backlog without committing to the current milestone; promote later via `/gsd:review-backlog`.
222
+
223
+ Usage: `/gsd:capture --backlog "real-time notifications when events ship"`
224
+
225
+ ---
226
+
227
+ **`/gsd:audit-uat`** — Cross-phase audit of all outstanding UAT/verification items (pending, skipped, blocked, human_needed), cross-references the codebase for stale docs, produces a prioritized test plan. Run before a new milestone.
228
+
229
+ Usage: `/gsd:audit-uat`
230
+
231
+ ### Milestone Auditing
232
+
233
+ **`/gsd:audit-milestone [version]`** — Reads all phase VERIFICATION.md files, checks requirements coverage, spawns an integration checker for cross-phase wiring, creates MILESTONE-AUDIT.md.
234
+
235
+ Usage: `/gsd:audit-milestone`
236
+
237
+ ### Configuration
238
+
239
+ **`/gsd:settings`** — Interactively toggles researcher/plan-checker/verifier agents and the model profile (quality/balanced/budget/inherit); updates `.planning/config.json`.
240
+
241
+ Usage: `/gsd:settings`
242
+
243
+ **`/gsd:config [--profile <profile> | --advanced | --integrations]`** — `--profile` quick-switches model profile (`quality` = Opus everywhere but verification, `balanced` = Opus planning/Sonnet execution (default), `budget` = Sonnet writing/Haiku research-verification, `inherit` = current session model). `--advanced` = plan bounce, timeouts, branch templates, cross-AI execution. `--integrations` = third-party API keys, code-review CLI routing, agent-skill injection.
244
+
245
+ Usage: `/gsd:config --profile budget`
246
+
247
+ **`/gsd:surface [list|status|profile <name>|disable <cluster>|enable <cluster>|reset]`** — Toggles which skills are surfaced without reinstalling: `list`/`status` show enabled/disabled + token cost, `profile <name>` switches base profile (`core`/`standard`/`full`), `disable`/`enable` a cluster, `reset` returns to install-time profile.
248
+
249
+ Usage: `/gsd:surface profile standard`
250
+
251
+ ### Utility Commands
252
+
253
+ **`/gsd:cleanup`** — Dry-run then moves completed-milestone phase dirs from `.planning/phases/` to `.planning/milestones/v{X.Y}-phases/`.
254
+
255
+ Usage: `/gsd:cleanup`
256
+
257
+ **`/gsd:help [--brief | --full | <topic> | --brief <topic>]`** — `--brief` = ~10-line refresher; no flag = one-page newcomer tour; `--full` = this complete reference; `<topic>` = matching section only (e.g. `/gsd:help debug`); `--brief <topic>` = compact scoped lookup. Every topic output starts with a `**Topic:** \`<alias>\` → \`<heading>\` *(scope: full | compact)*` preamble. See `gsd-core/workflows/help/modes/topic.md` for the alias table.
258
+
259
+ Usage: `/gsd:help debug`
260
+ Usage: `/gsd:help --brief debug`
261
+
262
+ **`/gsd:update [--sync] [--reapply] [--next | --rc]`** — Shows installed-vs-latest, changelog since your version, breaking changes, confirms before installing. `--sync` syncs managed skills across runtime roots; `--reapply` reapplies local modifications post-update; `--next`/`--rc` installs from the `@next` RC dist-tag (ADR #660) instead of `@latest`.
263
+
264
+ Usage: `/gsd:update`
265
+
266
+ ## Additional Commands
267
+
268
+ Every command below is also a live `/gsd-*` slash command, grouped by purpose.
269
+
270
+ ### Discovery & Specification
271
+
272
+ - **`/gsd:explore`** — Socratic ideation and idea routing before committing to plans.
273
+ - **`/gsd:spec-phase <phase> [--auto] [--text]`** — Clarify WHAT a phase delivers with ambiguity scoring; produces SPEC.md before discuss-phase.
274
+ - **`/gsd:ai-integration-phase [phase]`** — Generate an AI-SPEC.md design contract for phases building AI systems.
275
+ - **`/gsd:ui-phase [phase]`** — Generate UI design contract (UI-SPEC.md) for frontend phases.
276
+ - **`/gsd:import --from <filepath> | --from-gsd2`** — Ingest external plans with conflict detection, or reverse-migrate a GSD-2 project to v1 format.
277
+ - **`/gsd:ingest-docs [path] [--mode new|merge] [--manifest <file>] [--resolve auto|interactive]`** — Bootstrap or merge `.planning/` from existing ADRs/PRDs/SPECs/docs.
278
+
279
+ ### Planning & Execution
280
+
281
+ - **`/gsd:mvp-phase <phase-number>`** — Plans a phase as a vertical MVP slice (user story + SPIDR splitting) before handoff to plan-phase; same end-state as `/gsd:plan-phase --mvp` with a guided intro.
282
+ - **`/gsd:ultraplan-phase [phase]`** — [BETA] Offload plan phase to Claude Code's ultraplan cloud; review in browser, import back.
283
+ - **`/gsd:plan-review-convergence <phase> [--gemini] [--claude] [--codex] [--coderabbit] [--opencode] [--qwen] [--cursor] [--agy/--antigravity] [--ollama] [--lm-studio] [--llama-cpp] [--kimi-code] [--all] [--text] [--ws <name>] [--max-cycles N]`** — Cross-AI convergence loop: replan with review feedback until no HIGH concerns remain (cloud and local-model reviewers).
284
+ - **`/gsd:autonomous [--from N] [--to N] [--only N] [--interactive] [--converge]`** — Runs all remaining phases unattended: discuss → plan → execute per phase; `--converge`/`--cross-ai` routes planning through convergence.
285
+
286
+ ### Quality, Review & Verification
287
+
288
+ - **`/gsd:code-review <phase> [--depth=quick|standard|deep] [--files file1,file2,...] [--fix [--all] [--auto]]`** — Reviews phase-changed source for bugs, security, quality.
289
+ - **`/gsd:secure-phase [phase]`** — Retroactively verifies threat mitigations for a completed phase.
290
+ - **`/gsd:validate-phase [phase]`** — Retroactively audits and fills Nyquist validation gaps.
291
+ - **`/gsd:ui-review [phase]`** — Retroactive 6-pillar visual audit of implemented frontend code.
292
+ - **`/gsd:eval-review [phase]`** — Audits an executed AI phase's evaluation coverage; produces EVAL-REVIEW.md.
293
+ - **`/gsd:audit-fix --source <audit-uat> [--severity medium|high|all] [--max N] [--dry-run]`** — Autonomous audit-to-fix: find, classify, fix, test, commit.
294
+ - **`/gsd:add-tests <phase> [additional instructions]`** — Generates tests for a completed phase from UAT criteria and implementation.
295
+
296
+ ### Diagnostics & Maintenance
297
+
298
+ - **`/gsd:health [--repair] [--context]`** — Diagnoses planning-directory health, optionally repairs.
299
+ - **`/gsd:forensics [problem description]`** — Post-mortem investigation for failed GSD workflows.
300
+ - **`/gsd:undo --last N | --phase NN | --plan NN-MM`** — Safe git revert using the phase manifest with dependency checks.
301
+ - **`/gsd:docs-update [--force] [--verify-only]`** — Generates/updates docs verified against the codebase.
302
+ - **`/gsd:extract-learnings <phase>`** — Extracts decisions, lessons, patterns, surprises from phase artifacts.
303
+
304
+ ### Knowledge & Context
305
+
306
+ - **`/gsd:graphify [build|query <term>|status|diff]`** — Builds/queries/inspects the project knowledge graph in `.planning/graphs/`.
307
+ - **`/gsd:mempalace-recall`** — Recalls prior decisions/patterns/surprises from MemPalace before planning.
308
+ - **`/gsd:mempalace-capture [artifact-type]`** — Files a phase artifact into MemPalace, mirrors decisions into its temporal KG.
309
+ - **`/gsd:thread [list [--open|--resolved] | close <slug> | status <slug> | name | description]`** — Manages persistent context threads across sessions.
310
+ - **`/gsd:profile-user [--questionnaire] [--refresh]`** — Generates a developer behavioral profile + Claude-discoverable artifacts.
311
+ - **`/gsd:stats`** — Project statistics: phases, plans, requirements, git metrics, timeline.
312
+
313
+ ### Workflow & Orchestration
314
+
315
+ - **`/gsd:manager [--analyze-deps]`** — Interactive command center for multiple phases from one terminal; `--analyze-deps` scans dependency relationships before parallel execution.
316
+ - **`/gsd:workspace [--new | --list | --remove] [name]`** — Creates/lists/removes isolated GSD workspace environments.
317
+ - **`/gsd:workstreams`** — List, create, switch, status, progress, complete, and resume parallel workstreams.
318
+ - **`/gsd:review-backlog`** — Reviews and promotes backlog items to the active milestone.
319
+ - **`/gsd:milestone-summary [version]`** — Comprehensive project summary from milestone artifacts, for onboarding/review.
320
+
321
+ ### Repository Integration
322
+
323
+ - **`/gsd:inbox [--issues] [--prs] [--label] [--close-incomplete] [--repo owner/repo]`** — Triages open GitHub issues/PRs against project templates and contribution guidelines.
324
+
325
+ ### Namespace Routers (model-facing meta-skills)
326
+
327
+ Six skills for two-stage hierarchical routing across 60+ skills; invoke directly to browse a category interactively:
328
+
329
+ - **`/gsd-context`** — Codebase intelligence (map, graphify, docs, learnings, mempalace).
330
+ - **`/gsd-ideate`** — Exploration/capture (explore, sketch, spike, spec, capture).
331
+ - **`/gsd-manage`** — Configuration/workspace (workstreams, thread, update, ship, inbox).
332
+ - **`/gsd-project`** — Project-lifecycle (milestones, audits, summary).
333
+ - **`/gsd-quality`** — Quality gates (code review, debug, audit, security, eval, ui).
334
+ - **`/gsd-workflow`** — Phase pipeline (discuss, plan, execute, verify, phase, progress).
335
+
336
+ ## Files & Structure
337
+
338
+ ```text
339
+ .planning/
340
+ ├── PROJECT.md # Project vision
341
+ ├── ROADMAP.md # Current phase breakdown
342
+ ├── STATE.md # Project memory & context
343
+ ├── RETROSPECTIVE.md # Living retrospective (updated per milestone)
344
+ ├── config.json # Workflow mode & gates
345
+ ├── todos/ # Captured ideas and tasks (pending/, completed/)
346
+ ├── spikes/ # Spike experiments — MANIFEST.md + NNN-name/ dirs
347
+ ├── sketches/ # Design sketches — MANIFEST.md, themes/, NNN-name/ dirs
348
+ ├── debug/ # Active debug sessions (resolved/ archive)
349
+ ├── milestones/ # Archived roadmap/requirements snapshots + v{X.Y}-phases/
350
+ ├── codebase/ # Codebase map (brownfield): STACK/ARCHITECTURE/STRUCTURE/
351
+ │ # CONVENTIONS/TESTING/INTEGRATIONS/CONCERNS.md
352
+ └── phases/ # 01-foundation/01-01-PLAN.md + -SUMMARY.md, etc.
353
+ ```
354
+
355
+ ## Workflow Modes
356
+
357
+ Set during `/gsd:new-project`, changeable anytime in `.planning/config.json`:
358
+
359
+ - **Interactive** — confirms each major decision, pauses at checkpoints, more guidance.
360
+ - **YOLO** — auto-approves most decisions, executes without confirmation, stops only for critical checkpoints.
361
+
362
+ ## Planning Configuration
363
+
364
+ `.planning/config.json`:
365
+
366
+ - **`planning.commit_docs`** (default `true`) — `false` keeps planning artifacts local-only (add `.planning/` to `.gitignore`); useful for OSS/client projects wanting private planning.
367
+ - **`planning.search_gitignored`** (default `false`) — `true` adds `--no-ignore` to broad ripgrep searches when `.planning/` is gitignored.
368
+
369
+ ```json
370
+ {
371
+ "planning": {
372
+ "commit_docs": false,
373
+ "search_gitignored": true
374
+ }
375
+ }
376
+ ```
377
+
378
+ ## Common Workflows
379
+
380
+ **New project:** `/gsd:new-project` → `/clear` → `/gsd:plan-phase 1` → `/clear` → `/gsd:execute-phase 1`
381
+
382
+ **Resuming:** `/gsd:progress`
383
+
384
+ **Urgent mid-milestone work:** `/gsd:phase --insert 5 "Critical security fix"` → `/gsd:plan-phase 5.1` → `/gsd:execute-phase 5.1`
385
+
386
+ **Completing a milestone:** `/gsd:complete-milestone 1.0.0` → `/clear` → `/gsd:new-milestone`
387
+
388
+ **Capturing ideas:** `/gsd:capture` (from context) · `/gsd:capture --note ...` (quick note) · `/gsd:capture --seed "..."` (forward-looking) · `/gsd:capture --list` (review)
389
+
390
+ **Debugging:** `/gsd:debug "symptom"` → (investigate, context fills) → `/clear` → `/gsd:debug` (resumes)
391
+
392
+ ## Getting Help
393
+
394
+ - Read `.planning/PROJECT.md` for project vision
395
+ - Read `.planning/STATE.md` for current context
396
+ - Check `.planning/ROADMAP.md` for phase status
397
+ - Run `/gsd:progress` to check where you're up to
398
+ </reference>
@@ -10,7 +10,7 @@ Display GSD command help at the tier the user asked for. Output ONLY the referen
10
10
  | When `$ARGUMENTS` is | Read |
11
11
  |---|---|
12
12
  | `--brief` (or `-b`) alone | `workflows/help/modes/brief.md` |
13
- | `--full` (or `-f`, `--all`) alone | `workflows/help/modes/full.md` |
13
+ | `--full` (or `-f`, `--all`) alone | `workflows/help/modes/full.md` (or its `workflows/help/modes/full.compact.md` variant per `gsd-core/references/compact-content-gate.md` §"Streams 1b and 4 — variant resolution") |
14
14
  | empty / unset | `workflows/help/modes/default.md` |
15
15
  | `--brief <topic>` (or `-b <topic>`) | `workflows/help/modes/topic.md` in compact scope (signature + one-line summary of the matched section) |
16
16
  | anything else — bare topic, `--full <topic>`, or topic with leading `--` | `workflows/help/modes/topic.md` in full scope (entire matched section) |
@@ -41,8 +41,9 @@ operates in **incremental-remap mode**:
41
41
  - Reject path values that contain `..`, start with `/`, or include shell
42
42
  metacharacters (`;`, `` ` ``, `$`, `&`, `|`, `<`, `>`). If all provided
43
43
  paths are invalid, fall back to a normal whole-repo run.
44
- - On write, each mapper stamps `last_mapped_commit: <HEAD sha>` into the YAML
45
- frontmatter of every document it produces (see `bin/lib/drift.cjs:writeMappedCommit`).
44
+ - The `last_mapped_commit` baseline is NOT the mapper's job. It is stamped
45
+ deterministically by the `stamp_codebase_map` step below, on every run,
46
+ incremental or full. See that step for why.
46
47
 
47
48
  **Explicit contract — propagate `--paths` through a single normalized
48
49
  variable.** Downstream steps (`spawn_agents`, `sequential_mapping`, and any
@@ -103,9 +104,21 @@ What's next?
103
104
  Wait for user response.
104
105
 
105
106
  If "Refresh": Delete .planning/codebase/, continue to create_structure
106
- If "Update": Ask which documents to update, continue to spawn_agents (filtered)
107
+ If "Update": Ask which documents to update, then record the selection for the
108
+ stamp step below and continue to spawn_agents (filtered):
109
+
110
+ ```bash
111
+ # Comma-separated filenames the user selected, e.g. "STACK.md,CONCERNS.md":
112
+ UPDATED_DOCS="<selected documents>"
113
+ ```
114
+
107
115
  If "Skip": Exit workflow
108
116
 
117
+ `UPDATED_DOCS` narrows `stamp_codebase_map`. Leave it empty on every other
118
+ path (Refresh, first run, `--paths`), which regenerate all seven documents.
119
+ An Update run does not touch the documents the user did not select, so
120
+ stamping those at HEAD would claim a freshness they do not have.
121
+
109
122
  **If doesn't exist:**
110
123
  Continue to create_structure.
111
124
  </step>
@@ -347,6 +360,40 @@ wc -l .planning/codebase/*.md
347
360
 
348
361
  If any documents missing or empty, note which agents may have failed.
349
362
 
363
+ Continue to stamp_codebase_map.
364
+ </step>
365
+
366
+ <step name="stamp_codebase_map">
367
+ Stamp the drift baseline into every document that was just written:
368
+
369
+ ```bash
370
+ gsd_run stamp-codebase-map ${UPDATED_DOCS:+--files "$UPDATED_DOCS"}
371
+ ```
372
+
373
+ This writes `last_mapped_commit: <HEAD sha>` and `last_mapped_at: <date>` into
374
+ the YAML frontmatter of each `.planning/codebase/*.md` that exists. It runs on
375
+ every mapping run, incremental (`--paths`) and full alike. `--files` narrows it
376
+ to the documents an Update run actually refreshed; `--paths` needs no narrowing
377
+ because all seven are regenerated, just scoped in content.
378
+
379
+ **Why this is a shell step and not an instruction to the mapper.** The stamp is
380
+ the only machine-readable freshness marker: the `verify codebase-drift` gate
381
+ reads it to decide what to diff HEAD against. The human-readable markers the
382
+ mapper writes (`**Analysis Date:**`, `<!-- refreshed: ... -->`) are restamped
383
+ unconditionally on an Update run, so a mapper that decides its work is already
384
+ done and rewrites only the dates still looks fresh to a human. Leaving the
385
+ machine-readable stamp to the same agent reproduces exactly the failure the
386
+ stamp exists to detect. A shell step cannot be skipped by a confident agent.
387
+
388
+ The command is non-blocking: it emits `skipped` with a `reason` outside a git
389
+ repo or when no documents exist. Report `stamped` and `commit` in the summary
390
+ if any entry in `failed` is non-empty; otherwise continue silently.
391
+
392
+ Run in this position, before `commit_codebase_map`, the stamp lands on
393
+ documents the mapper just wrote, so its markdown whitespace normalization is
394
+ folded into the same commit. Running `stamp-codebase-map` by hand against an
395
+ already-committed map reflows that map's whitespace as a side effect.
396
+
350
397
  Continue to scan_for_secrets.
351
398
  </step>
352
399
 
@@ -34,6 +34,10 @@ _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-pars
34
34
  GSD_WS=""
35
35
  echo "$ARGUMENTS" | grep -qE -- '--ws[[:space:]]+[A-Za-z0-9._-]+' && GSD_WS=$(echo "$ARGUMENTS" | grep -oE -- '--ws[[:space:]]+[A-Za-z0-9._-]+')
36
36
  MILESTONE_ARG=$(echo "$ARGUMENTS" | sed -E 's/--ws[[:space:]]+[A-Za-z0-9._-]+//g' | xargs)
37
+ # #4456: persist GSD_WS to a file so later steps' bash fences (each a
38
+ # separate shell) can forward it — the same cross-fence problem Step 5/6
39
+ # already solve for OUTGOING_MILESTONE via .gsd-outgoing-milestone.
40
+ printf '%s' "$GSD_WS" > .planning/.gsd-ws-arg 2>/dev/null || true
37
41
  RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --raw --default "" 2>/dev/null || echo "")
38
42
  # #2994: EARLY, section-manifest-only init.new-milestone call — needed here
39
43
  # (before Step 4) to gate the project-md-milestone-write section. This is
@@ -44,7 +48,11 @@ RESPONSE_LANGUAGE=$(gsd_run query config-get response_language --raw --default "
44
48
  # fields too early and corrupt the roadmapper's phase-numbering context.
45
49
  # init.new-milestone is a pure read (no mutation), so calling it twice is
46
50
  # safe; only `section_manifest` is consumed from this early call.
47
- INIT_EARLY=$(gsd_run query init.new-milestone)
51
+ # #4456: $GSD_WS forwarded (same fence as the parse above, no round-trip
52
+ # needed here) so the section manifest — and the shared PROJECT.md write
53
+ # guard it gates — reflects the EXPLICITLY requested workstream, not
54
+ # whatever ambient GSD_WORKSTREAM/session pointer happens to be active.
55
+ INIT_EARLY=$(gsd_run query init.new-milestone $GSD_WS)
48
56
  if [[ "$INIT_EARLY" == @file:* ]]; then INIT_EARLY=$(cat "${INIT_EARLY#@file:}"); fi
49
57
  ```
50
58
 
@@ -195,10 +203,11 @@ blockers, todos) is preserved across the switch — symmetric with
195
203
  `milestone.complete`.
196
204
 
197
205
  ```bash
198
- OUTGOING_MILESTONE=$(gsd_run query state.get milestone --raw 2>/dev/null || true)
206
+ GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
207
+ OUTGOING_MILESTONE=$(gsd_run query state.get milestone --raw $GSD_WS_ARG 2>/dev/null || true)
199
208
  printf '%s' "$OUTGOING_MILESTONE" > .planning/.gsd-outgoing-milestone 2>/dev/null || true
200
209
  echo "Outgoing milestone (phase history archives under THIS version in step 6): ${OUTGOING_MILESTONE:-<unknown>}"
201
- gsd_run query state.milestone-switch --milestone "v[X.Y]" --name "[Name]"
210
+ gsd_run query state.milestone-switch --milestone "v[X.Y]" --name "[Name]" $GSD_WS_ARG
202
211
  ```
203
212
 
204
213
  **Capture the outgoing version now.** The lines above read the *current* (previous) milestone
@@ -239,11 +248,12 @@ the captured value into the command, so untrusted STATE.md content cannot be re-
239
248
  shell:
240
249
 
241
250
  ```bash
251
+ GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
242
252
  OUTGOING_MILESTONE=$(cat .planning/.gsd-outgoing-milestone 2>/dev/null || true)
243
253
  if [ -n "$OUTGOING_MILESTONE" ]; then
244
- gsd_run query phases.clear --confirm --archive-version "$OUTGOING_MILESTONE"
254
+ gsd_run query phases.clear --confirm --archive-version "$OUTGOING_MILESTONE" $GSD_WS_ARG
245
255
  else
246
- gsd_run query phases.clear --confirm
256
+ gsd_run query phases.clear --confirm $GSD_WS_ARG
247
257
  fi
248
258
  rm -f .planning/.gsd-outgoing-milestone 2>/dev/null || true
249
259
  ```
@@ -258,31 +268,48 @@ Stage the phase archive move + source removal so they land in the same commit as
258
268
 
259
269
  ```bash
260
270
  COMMIT_DOCS=$(gsd_run query config-get commit_docs --raw 2>/dev/null || echo "true")
271
+ GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
272
+ INIT_STAGE=$(gsd_run query init.new-milestone $GSD_WS_ARG)
273
+ if [[ "$INIT_STAGE" == @file:* ]]; then INIT_STAGE=$(cat "${INIT_STAGE#@file:}"); fi
274
+ _gsd_field() { node -e "const o=JSON.parse(process.argv[1]); const v=o[process.argv[2]]; process.stdout.write(v==null?'':String(v))" "$1" "$2"; }
275
+ ARCHIVE_DIR=$(_gsd_field "$INIT_STAGE" archive_dir)
276
+ PHASES_DIR=$(_gsd_field "$INIT_STAGE" phases_dir)
261
277
  if [ "$COMMIT_DOCS" != "false" ]; then
262
- git add .planning/milestones/ .planning/phases/ 2>/dev/null || true
278
+ git add "$ARCHIVE_DIR/" "$PHASES_DIR/" 2>/dev/null || true
263
279
  fi
264
280
  ```
265
281
 
266
282
  When `commit_docs` is false, the archive move and phase removals are deliberately left unstaged here — not a bug — since Step 6's commit is skipped too.
267
283
 
268
- Stage PROJECT.md in both modes. Step 4's Part A guard — not this commit — is what protects the shared `## Current Milestone` heading (#2308): when a workstream is active Part A never writes it, so the only change PROJECT.md can carry here is Part B's idempotent `## Evolution` backfill, which must be committed rather than stranded as a dangling edit. Do NOT reintroduce a `[ -n "$GSD_WS" ]` branch around this commit: `GSD_WS` is set in Step 1's shell and each step's bash block runs in its own shell (the same reason Step 5 round-trips `OUTGOING_MILESTONE` through a file), so such a guard reads an unset variable, always takes the flat-mode branch, and only appears to work.
284
+ Stage PROJECT.md in both modes. Step 4's Part A guard — not this commit — is what protects the shared `## Current Milestone` heading (#2308): when a workstream is active Part A never writes it, so the only change PROJECT.md can carry here is Part B's idempotent `## Evolution` backfill, which must be committed rather than stranded as a dangling edit. Do NOT reintroduce a `[ -n "$GSD_WS" ]` branch around this commit: `GSD_WS` is set in Step 1's shell and each step's bash block runs in its own shell (the same reason Step 5 round-trips `OUTGOING_MILESTONE` through a file), so such a guard reads an unset variable, always takes the flat-mode branch, and only appears to work. STATE.md, unlike PROJECT.md, IS workstream-scoped (Step 5's switch just wrote the workstream's own copy) — resolved below via `init.new-milestone` rather than a literal `.planning/STATE.md`, which would commit the wrong (or a stale, unrelated) file under an active workstream.
269
285
 
270
286
  ```bash
271
- gsd_run query commit "docs: start milestone v[X.Y] [Name]" --files .planning/PROJECT.md .planning/STATE.md
287
+ GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
288
+ INIT_COMMIT=$(gsd_run query init.new-milestone $GSD_WS_ARG)
289
+ if [[ "$INIT_COMMIT" == @file:* ]]; then INIT_COMMIT=$(cat "${INIT_COMMIT#@file:}"); fi
290
+ _gsd_field() { node -e "const o=JSON.parse(process.argv[1]); const v=o[process.argv[2]]; process.stdout.write(v==null?'':String(v))" "$1" "$2"; }
291
+ STATE_PATH=$(_gsd_field "$INIT_COMMIT" state_path)
292
+ PROJECT_PATH=$(_gsd_field "$INIT_COMMIT" project_path)
293
+ gsd_run query commit "docs: start milestone v[X.Y] [Name]" --files "$PROJECT_PATH" "$STATE_PATH"
272
294
  ```
273
295
 
274
296
  ## 7. Load Context and Resolve Models
275
297
 
276
298
  ```bash
277
299
  RESET_PHASE_NUMBERS_PARAM=""; if [[ "$ARGUMENTS" =~ (^|[[:space:]])--reset-phase-numbers([[:space:]]|$) ]]; then RESET_PHASE_NUMBERS_PARAM="--reset-phase-numbers"; fi
278
- INIT=$(gsd_run query init.new-milestone $RESET_PHASE_NUMBERS_PARAM)
300
+ GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
301
+ INIT=$(gsd_run query init.new-milestone $RESET_PHASE_NUMBERS_PARAM $GSD_WS_ARG)
279
302
  if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
280
303
  AGENT_SKILLS_RESEARCHER=$(gsd_run query agent-skills gsd-project-researcher)
281
304
  AGENT_SKILLS_SYNTHESIZER=$(gsd_run query agent-skills gsd-research-synthesizer)
282
305
  AGENT_SKILLS_ROADMAPPER=$(gsd_run query agent-skills gsd-roadmapper)
283
306
  ```
307
+ <!-- #4456: .planning/.gsd-ws-arg is NOT cleaned up here — Steps 9 and 10
308
+ below still need to re-read it (each is its own shell) to resolve
309
+ REQUIREMENTS.md/ROADMAP.md/STATE.md correctly under a workstream. It is
310
+ removed in Step 10, its true last consumer. -->
284
311
 
285
- Extract from init JSON: `researcher_model`, `synthesizer_model`, `roadmapper_model`, `commit_docs`, `research_enabled`, `current_milestone`, `project_exists`, `roadmap_exists`, `latest_completed_milestone`, `phase_dir_count`, `phase_archive_path`, `agents_installed`, `missing_agents`, `project_path`, `roadmap_path`, `requirements_path`, `config_path`, `research_dir`, `milestones_path`.
312
+ Extract from init JSON: `researcher_model`, `synthesizer_model`, `roadmapper_model`, `commit_docs`, `research_enabled`, `current_milestone`, `project_exists`, `roadmap_exists`, `latest_completed_milestone`, `phase_dir_count`, `phase_archive_path`, `agents_installed`, `missing_agents`, `project_path`, `roadmap_path`, `requirements_path`, `config_path`, `research_dir`, `milestones_path`, `phases_dir`, `archive_dir`.
286
313
 
287
314
  **If `agents_installed` is false:** Display a warning before proceeding:
288
315
  ```
@@ -495,7 +522,12 @@ If "adjust": Return to scoping.
495
522
 
496
523
  **Commit requirements:**
497
524
  ```bash
498
- gsd_run query commit "docs: define milestone v[X.Y] requirements" --files .planning/REQUIREMENTS.md
525
+ GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
526
+ INIT_REQ=$(gsd_run query init.new-milestone $GSD_WS_ARG)
527
+ if [[ "$INIT_REQ" == @file:* ]]; then INIT_REQ=$(cat "${INIT_REQ#@file:}"); fi
528
+ _gsd_field() { node -e "const o=JSON.parse(process.argv[1]); const v=o[process.argv[2]]; process.stdout.write(v==null?'':String(v))" "$1" "$2"; }
529
+ REQUIREMENTS_PATH=$(_gsd_field "$INIT_REQ" requirements_path)
530
+ gsd_run query commit "docs: define milestone v[X.Y] requirements" --files "$REQUIREMENTS_PATH"
499
531
  ```
500
532
 
501
533
  ## 10. Create Roadmap
@@ -579,7 +611,17 @@ Success criteria:
579
611
 
580
612
  **Commit roadmap** (after approval):
581
613
  ```bash
582
- gsd_run query commit "docs: create milestone v[X.Y] roadmap ([N] phases)" --files .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md
614
+ GSD_WS_ARG=$(cat .planning/.gsd-ws-arg 2>/dev/null || true)
615
+ INIT_ROADMAP=$(gsd_run query init.new-milestone $GSD_WS_ARG)
616
+ if [[ "$INIT_ROADMAP" == @file:* ]]; then INIT_ROADMAP=$(cat "${INIT_ROADMAP#@file:}"); fi
617
+ _gsd_field() { node -e "const o=JSON.parse(process.argv[1]); const v=o[process.argv[2]]; process.stdout.write(v==null?'':String(v))" "$1" "$2"; }
618
+ ROADMAP_PATH=$(_gsd_field "$INIT_ROADMAP" roadmap_path)
619
+ STATE_PATH=$(_gsd_field "$INIT_ROADMAP" state_path)
620
+ REQUIREMENTS_PATH=$(_gsd_field "$INIT_ROADMAP" requirements_path)
621
+ gsd_run query commit "docs: create milestone v[X.Y] roadmap ([N] phases)" --files "$ROADMAP_PATH" "$STATE_PATH" "$REQUIREMENTS_PATH"
622
+ # #4456: true last consumer of the persisted --ws in this workflow — the
623
+ # round-trip file is no longer needed after this commit.
624
+ rm -f .planning/.gsd-ws-arg 2>/dev/null || true
583
625
  ```
584
626
 
585
627
  ## 10.5. Link Pending Todos to Roadmap Phases