@opengsd/gsd-core 1.13.0 → 1.15.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 (441) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.ja-JP.md +3 -3
  4. package/README.ko-KR.md +3 -3
  5. package/README.pt-BR.md +3 -3
  6. package/README.zh-CN.md +3 -3
  7. package/agents/gsd-advisor-researcher.compact.md +85 -0
  8. package/agents/gsd-ai-researcher.compact.md +96 -0
  9. package/agents/gsd-assumptions-analyzer.compact.md +81 -0
  10. package/agents/gsd-code-fixer.compact.md +459 -0
  11. package/agents/gsd-code-fixer.md +9 -8
  12. package/agents/gsd-code-reviewer.compact.md +269 -0
  13. package/agents/gsd-code-reviewer.md +15 -3
  14. package/agents/gsd-codebase-mapper.compact.md +760 -0
  15. package/agents/gsd-debug-session-manager.compact.md +360 -0
  16. package/agents/gsd-debug-session-manager.md +17 -2
  17. package/agents/gsd-debugger.md +2 -2
  18. package/agents/gsd-doc-classifier.compact.md +192 -0
  19. package/agents/gsd-doc-synthesizer.compact.md +200 -0
  20. package/agents/gsd-doc-verifier.compact.md +143 -0
  21. package/agents/gsd-doc-writer.compact.md +440 -0
  22. package/agents/gsd-dom-verifier.compact.md +138 -0
  23. package/agents/gsd-domain-researcher.compact.md +141 -0
  24. package/agents/gsd-eval-auditor.compact.md +160 -0
  25. package/agents/gsd-eval-auditor.md +1 -1
  26. package/agents/gsd-eval-planner.compact.md +137 -0
  27. package/agents/gsd-executor.md +13 -8
  28. package/agents/gsd-framework-selector.compact.md +82 -0
  29. package/agents/gsd-integration-checker.compact.md +245 -0
  30. package/agents/gsd-intel-updater.compact.md +226 -0
  31. package/agents/gsd-intel-updater.md +1 -1
  32. package/agents/gsd-mempalace-curator.compact.md +45 -0
  33. package/agents/gsd-nyquist-auditor.compact.md +179 -0
  34. package/agents/gsd-pattern-mapper.compact.md +275 -0
  35. package/agents/gsd-phase-researcher.md +19 -11
  36. package/agents/gsd-plan-checker.md +8 -7
  37. package/agents/gsd-planner.md +12 -8
  38. package/agents/gsd-project-researcher.compact.md +587 -0
  39. package/agents/gsd-project-researcher.md +1 -1
  40. package/agents/gsd-research-synthesizer.compact.md +212 -0
  41. package/agents/gsd-research-synthesizer.md +1 -1
  42. package/agents/gsd-roadmapper.compact.md +454 -0
  43. package/agents/gsd-roadmapper.md +13 -0
  44. package/agents/gsd-security-auditor.compact.md +162 -0
  45. package/agents/gsd-ui-auditor.compact.md +404 -0
  46. package/agents/gsd-ui-auditor.md +155 -17
  47. package/agents/gsd-ui-checker.compact.md +277 -0
  48. package/agents/gsd-ui-researcher.compact.md +282 -0
  49. package/agents/gsd-ui-researcher.md +1 -1
  50. package/agents/gsd-user-profiler.compact.md +108 -0
  51. package/agents/gsd-verifier.md +10 -9
  52. package/bin/install.js +848 -163
  53. package/commands/gsd/autonomous.md +2 -2
  54. package/commands/gsd/capture.md +1 -1
  55. package/commands/gsd/cleanup.md +1 -0
  56. package/commands/gsd/code-review.md +2 -1
  57. package/commands/gsd/complete-milestone.md +1 -0
  58. package/commands/gsd/config.md +1 -0
  59. package/commands/gsd/debug.md +1 -0
  60. package/commands/gsd/graphify.md +1 -0
  61. package/commands/gsd/health.md +1 -0
  62. package/commands/gsd/mempalace-capture.md +8 -3
  63. package/commands/gsd/mempalace-recall.md +1 -0
  64. package/commands/gsd/new-milestone.md +1 -0
  65. package/commands/gsd/new-project.md +1 -0
  66. package/commands/gsd/next.md +1 -0
  67. package/commands/gsd/pause-work.md +1 -0
  68. package/commands/gsd/phase.md +1 -0
  69. package/commands/gsd/plan-review-convergence.md +6 -6
  70. package/commands/gsd/pr-branch.md +1 -0
  71. package/commands/gsd/progress.md +1 -1
  72. package/commands/gsd/quick-batch.md +1 -1
  73. package/commands/gsd/resume-work.md +1 -0
  74. package/commands/gsd/review-backlog.md +1 -0
  75. package/commands/gsd/review.md +2 -3
  76. package/commands/gsd/settings.md +2 -1
  77. package/commands/gsd/stats.md +1 -0
  78. package/commands/gsd/thread.md +1 -0
  79. package/commands/gsd/workspace.md +1 -0
  80. package/commands/gsd/workstreams.md +1 -0
  81. package/gsd-core/bin/check-latest-version.cjs +8 -3
  82. package/gsd-core/bin/gsd-tools.cjs +672 -146
  83. package/gsd-core/bin/lib/adr-parser.cjs +4 -2
  84. package/gsd-core/bin/lib/artifacts.cjs +2 -1
  85. package/gsd-core/bin/lib/audit.cjs +119 -34
  86. package/gsd-core/bin/lib/broken-windows.cjs +168 -49
  87. package/gsd-core/bin/lib/capability-lifecycle.cjs +10 -6
  88. package/gsd-core/bin/lib/capability-loader.cjs +135 -1
  89. package/gsd-core/bin/lib/capability-registry.cjs +96 -189
  90. package/gsd-core/bin/lib/capability-source.cjs +19 -2
  91. package/gsd-core/bin/lib/capability-validator.cjs +14 -2
  92. package/gsd-core/bin/lib/check-command-router.cjs +213 -49
  93. package/gsd-core/bin/lib/code-review-depth.cjs +2 -2
  94. package/gsd-core/bin/lib/codex-agent-toml.cjs +21 -25
  95. package/gsd-core/bin/lib/commands.cjs +823 -112
  96. package/gsd-core/bin/lib/config-loader.cjs +66 -4
  97. package/gsd-core/bin/lib/config.cjs +186 -45
  98. package/gsd-core/bin/lib/coverage.cjs +1 -1
  99. package/gsd-core/bin/lib/decisions.cjs +164 -45
  100. package/gsd-core/bin/lib/external-descriptor-trust.cjs +29 -14
  101. package/gsd-core/bin/lib/frontmatter.cjs +13 -0
  102. package/gsd-core/bin/lib/graphify.cjs +10 -2
  103. package/gsd-core/bin/lib/gsd2-import.cjs +1 -2
  104. package/gsd-core/bin/lib/health-diagnostic-rules/state-consistency.cjs +12 -1
  105. package/gsd-core/bin/lib/health-diagnostic-rules/worktree-health.cjs +1 -1
  106. package/gsd-core/bin/lib/host-runtime-detection.cjs +9 -0
  107. package/gsd-core/bin/lib/init.cjs +614 -86
  108. package/gsd-core/bin/lib/install-engine.cjs +29 -3
  109. package/gsd-core/bin/lib/install-profiles.cjs +14 -0
  110. package/gsd-core/bin/lib/installer-migrations.cjs +41 -5
  111. package/gsd-core/bin/lib/loop-resolver.cjs +50 -31
  112. package/gsd-core/bin/lib/mcp-catalog.cjs +2 -2
  113. package/gsd-core/bin/lib/milestone.cjs +37 -13
  114. package/gsd-core/bin/lib/model-resolver.cjs +253 -53
  115. package/gsd-core/bin/lib/phase-command-router.cjs +16 -2
  116. package/gsd-core/bin/lib/phase-id-card.cjs +32 -0
  117. package/gsd-core/bin/lib/phase-id-display.cjs +78 -0
  118. package/gsd-core/bin/lib/phase-id.cjs +268 -27
  119. package/gsd-core/bin/lib/phase-lifecycle.cjs +61 -0
  120. package/gsd-core/bin/lib/phase-locator.cjs +29 -10
  121. package/gsd-core/bin/lib/phase.cjs +393 -88
  122. package/gsd-core/bin/lib/plan-document.cjs +49 -1
  123. package/gsd-core/bin/lib/planning-document.cjs +459 -0
  124. package/gsd-core/bin/lib/planning-inspect.cjs +52 -19
  125. package/gsd-core/bin/lib/planning-snapshot.cjs +61 -12
  126. package/gsd-core/bin/lib/planning-workspace.cjs +57 -3
  127. package/gsd-core/bin/lib/pr-branch-patterns.cjs +57 -0
  128. package/gsd-core/bin/lib/pristine-baseline.cjs +182 -0
  129. package/gsd-core/bin/lib/probe-core.cjs +7 -1
  130. package/gsd-core/bin/lib/prohibition-enforcement.cjs +91 -4
  131. package/gsd-core/bin/lib/project-root.cjs +41 -2
  132. package/gsd-core/bin/lib/quick-batch.cjs +1 -1
  133. package/gsd-core/bin/lib/refactor-trigger-command-router.cjs +61 -2
  134. package/gsd-core/bin/lib/research-store.cjs +11 -12
  135. package/gsd-core/bin/lib/review-lane-descriptor.cjs +10 -30
  136. package/gsd-core/bin/lib/review-lane-invocation.cjs +23 -0
  137. package/gsd-core/bin/lib/review-reviewer-selection.cjs +2 -2
  138. package/gsd-core/bin/lib/reviewer-step-dispatch.cjs +337 -0
  139. package/gsd-core/bin/lib/roadmap-command-router.cjs +12 -4
  140. package/gsd-core/bin/lib/roadmap-parser.cjs +219 -18
  141. package/gsd-core/bin/lib/roadmap-upgrade.cjs +1539 -13
  142. package/gsd-core/bin/lib/roadmap.cjs +356 -42
  143. package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +310 -41
  144. package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +15 -4
  145. package/gsd-core/bin/lib/runtime-artifact-layout.cjs +13 -5
  146. package/gsd-core/bin/lib/runtime-homes.cjs +4 -0
  147. package/gsd-core/bin/lib/runtime-hooks-surface.cjs +408 -37
  148. package/gsd-core/bin/lib/runtime-name-policy.cjs +111 -1
  149. package/gsd-core/bin/lib/security.cjs +126 -7
  150. package/gsd-core/bin/lib/shell-command-projection.cjs +10 -6
  151. package/gsd-core/bin/lib/state-document.cjs +130 -28
  152. package/gsd-core/bin/lib/state-md-schema.cjs +21 -14
  153. package/gsd-core/bin/lib/state-transition.cjs +181 -30
  154. package/gsd-core/bin/lib/state.cjs +265 -27
  155. package/gsd-core/bin/lib/surface.cjs +77 -3
  156. package/gsd-core/bin/lib/task-command-router.cjs +12 -6
  157. package/gsd-core/bin/lib/tdd-red-evidence.cjs +78 -5
  158. package/gsd-core/bin/lib/uat-predicate.cjs +47 -4
  159. package/gsd-core/bin/lib/uat.cjs +9 -1
  160. package/gsd-core/bin/lib/ui-consideration-probe.cjs +15 -2
  161. package/gsd-core/bin/lib/ui-frontend-evidence.cjs +100 -9
  162. package/gsd-core/bin/lib/undo-commit-selection.cjs +131 -0
  163. package/gsd-core/bin/lib/update-context.cjs +30 -24
  164. package/gsd-core/bin/lib/vendor/js-yaml.cjs +11 -3
  165. package/gsd-core/bin/lib/verification.cjs +315 -30
  166. package/gsd-core/bin/lib/verify-command-grounding.cjs +47 -3
  167. package/gsd-core/bin/lib/verify.cjs +320 -48
  168. package/gsd-core/bin/lib/workstream-inventory.cjs +1 -0
  169. package/gsd-core/bin/lib/worktree-base-ref.cjs +482 -73
  170. package/gsd-core/bin/lib/worktree-safety.cjs +797 -58
  171. package/gsd-core/bin/shared/config-defaults.manifest.json +4 -0
  172. package/gsd-core/bin/shared/config-schema.manifest.json +6 -0
  173. package/gsd-core/bin/verify-reapply-patches.cjs +439 -80
  174. package/gsd-core/references/checkpoints.md +5 -3
  175. package/gsd-core/references/compact-content-gate.md +66 -0
  176. package/gsd-core/references/edge-probe-fixtures/01-round-half-even/expected-coverage.json +28 -3
  177. package/gsd-core/references/edge-probe-fixtures/02-merge-intervals/expected-coverage.json +37 -4
  178. package/gsd-core/references/edge-probe-fixtures/03-truncate-graphemes/expected-coverage.json +28 -3
  179. package/gsd-core/references/edge-probe-fixtures/04-money-rounding/expected-coverage.json +28 -3
  180. package/gsd-core/references/edge-probe-fixtures/05-list-dedupe/expected-coverage.json +37 -4
  181. package/gsd-core/references/edge-probe-fixtures/06-resolved-mixed/expected-coverage.json +37 -4
  182. package/gsd-core/references/edge-probe.md +195 -21
  183. package/gsd-core/references/execute-phase-between-wave-reset.md +7 -6
  184. package/gsd-core/references/execute-phase-wave-guard.md +22 -11
  185. package/gsd-core/references/gsd-run-resolver.md +1 -1
  186. package/gsd-core/references/loop-hook-dispatch.md +18 -0
  187. package/gsd-core/references/model-profiles.md +13 -4
  188. package/gsd-core/references/phase-argument-parsing.md +9 -7
  189. package/gsd-core/references/phase-id-convention.md +28 -0
  190. package/gsd-core/references/planner-gap-closure.md +2 -0
  191. package/gsd-core/references/planner-load-graph-context.md +24 -13
  192. package/gsd-core/references/planner-verify-command-grounding.md +14 -0
  193. package/gsd-core/references/planning-config.md +14 -2
  194. package/gsd-core/references/tdd.md +30 -4
  195. package/gsd-core/references/thinking-models-planning.md +18 -2
  196. package/gsd-core/references/ui-consideration-probe.md +10 -5
  197. package/gsd-core/references/verification-patterns.md +17 -4
  198. package/gsd-core/references/verify-command-path-resolvability.md +10 -2
  199. package/gsd-core/references/worktree-path-safety.md +433 -2
  200. package/gsd-core/templates/README.md +7 -1
  201. package/gsd-core/templates/state.md +6 -3
  202. package/gsd-core/templates/summary.compact.md +212 -0
  203. package/gsd-core/templates/user-setup.compact.md +199 -0
  204. package/gsd-core/templates/user-setup.md +0 -9
  205. package/gsd-core/templates/verification-report.md +1 -1
  206. package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -1
  207. package/gsd-core/workflows/add-backlog.md +1 -1
  208. package/gsd-core/workflows/add-phase.md +1 -1
  209. package/gsd-core/workflows/add-tests.md +2 -2
  210. package/gsd-core/workflows/add-todo.md +6 -5
  211. package/gsd-core/workflows/ai-integration-phase.md +11 -3
  212. package/gsd-core/workflows/audit-fix.md +1 -1
  213. package/gsd-core/workflows/audit-milestone.md +1 -1
  214. package/gsd-core/workflows/audit-uat.md +1 -1
  215. package/gsd-core/workflows/autonomous/steps/converge-fail-fast.md +9 -18
  216. package/gsd-core/workflows/autonomous.md +29 -16
  217. package/gsd-core/workflows/check-todos.md +6 -4
  218. package/gsd-core/workflows/cleanup.md +5 -3
  219. package/gsd-core/workflows/code-review/steps/dispatch-fix.md +4 -3
  220. package/gsd-core/workflows/code-review/steps/structural-pre-pass.md +8 -1
  221. package/gsd-core/workflows/code-review-fix.md +108 -22
  222. package/gsd-core/workflows/code-review.md +216 -73
  223. package/gsd-core/workflows/complete-milestone/detail/elaboration.md +274 -0
  224. package/gsd-core/workflows/complete-milestone.md +41 -264
  225. package/gsd-core/workflows/debug.md +3 -3
  226. package/gsd-core/workflows/diagnose-issues.md +1 -1
  227. package/gsd-core/workflows/discuss-phase/modes/advisor.md +1 -1
  228. package/gsd-core/workflows/discuss-phase/modes/chain.md +1 -1
  229. package/gsd-core/workflows/discuss-phase-assumptions.md +1 -1
  230. package/gsd-core/workflows/discuss-phase.md +1 -1
  231. package/gsd-core/workflows/do.md +2 -2
  232. package/gsd-core/workflows/docs-update/detail/elaboration.md +179 -0
  233. package/gsd-core/workflows/docs-update.md +17 -158
  234. package/gsd-core/workflows/edit-phase.md +1 -1
  235. package/gsd-core/workflows/eval-review.md +10 -3
  236. package/gsd-core/workflows/execute-phase/detail/elaboration.md +124 -0
  237. package/gsd-core/workflows/execute-phase/steps/code-review-disposition.md +1017 -0
  238. package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +19 -4
  239. package/gsd-core/workflows/execute-phase/steps/completion-reconciliation.md +56 -0
  240. package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +43 -4
  241. package/gsd-core/workflows/execute-phase/steps/executor-progress-policy.md +43 -0
  242. package/gsd-core/workflows/execute-phase/steps/gap-closure-artifacts.md +1 -1
  243. package/gsd-core/workflows/execute-phase/steps/partial-wave.md +1 -1
  244. package/gsd-core/workflows/execute-phase/steps/per-plan-executor-routing.md +1 -1
  245. package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +1 -1
  246. package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +46 -9
  247. package/gsd-core/workflows/execute-phase/steps/protected-branch.md +1 -1
  248. package/gsd-core/workflows/execute-phase/steps/ready-wave-gate.md +37 -0
  249. package/gsd-core/workflows/execute-phase/steps/regression-gate-run.md +1 -1
  250. package/gsd-core/workflows/execute-phase/steps/sequential-root-pin.md +35 -0
  251. package/gsd-core/workflows/execute-phase/steps/stale-reverification.md +24 -0
  252. package/gsd-core/workflows/execute-phase/steps/tdd-applicability-resolution.md +1 -1
  253. package/gsd-core/workflows/execute-phase/steps/threat-id-gate.md +28 -0
  254. package/gsd-core/workflows/execute-phase/steps/wave-post-gate-hooks.md +1 -1
  255. package/gsd-core/workflows/execute-phase/steps/worktree-base-check.md +25 -0
  256. package/gsd-core/workflows/execute-phase.md +83 -172
  257. package/gsd-core/workflows/execute-plan.md +24 -10
  258. package/gsd-core/workflows/explore.md +3 -3
  259. package/gsd-core/workflows/extract-learnings.md +2 -1
  260. package/gsd-core/workflows/fast.md +1 -1
  261. package/gsd-core/workflows/forensics.md +1 -1
  262. package/gsd-core/workflows/graduation.md +1 -1
  263. package/gsd-core/workflows/health.md +2 -2
  264. package/gsd-core/workflows/help/modes/full.compact.md +398 -0
  265. package/gsd-core/workflows/help/modes/full.md +5 -5
  266. package/gsd-core/workflows/help/modes/topic.md +15 -5
  267. package/gsd-core/workflows/help.md +1 -1
  268. package/gsd-core/workflows/import.md +2 -2
  269. package/gsd-core/workflows/inbox.md +2 -2
  270. package/gsd-core/workflows/ingest-docs.md +3 -3
  271. package/gsd-core/workflows/insert-phase.md +1 -1
  272. package/gsd-core/workflows/list-seeds.md +1 -1
  273. package/gsd-core/workflows/list-workspaces.md +1 -1
  274. package/gsd-core/workflows/manager.md +2 -2
  275. package/gsd-core/workflows/map-codebase.md +52 -5
  276. package/gsd-core/workflows/milestone-summary.md +1 -1
  277. package/gsd-core/workflows/mvp-phase.md +1 -1
  278. package/gsd-core/workflows/new-milestone.md +56 -14
  279. package/gsd-core/workflows/new-project/detail/elaboration.md +216 -0
  280. package/gsd-core/workflows/new-project/steps/auto-mode-config.md +3 -3
  281. package/gsd-core/workflows/new-project/steps/codebase-map-offer.md +1 -1
  282. package/gsd-core/workflows/new-project.md +39 -209
  283. package/gsd-core/workflows/new-workspace.md +2 -2
  284. package/gsd-core/workflows/next.md +1 -1
  285. package/gsd-core/workflows/note.md +1 -1
  286. package/gsd-core/workflows/onboard.md +1 -1
  287. package/gsd-core/workflows/pause-work.md +1 -1
  288. package/gsd-core/workflows/plan-phase/detail/elaboration.md +209 -0
  289. package/gsd-core/workflows/plan-phase/steps/chunked-planning-mode.md +17 -5
  290. package/gsd-core/workflows/plan-phase/steps/prd-express-path.md +1 -1
  291. package/gsd-core/workflows/plan-phase/steps/stall-detection-helpers.md +23 -5
  292. package/gsd-core/workflows/plan-phase.md +45 -187
  293. package/gsd-core/workflows/plan-review-convergence.md +21 -5
  294. package/gsd-core/workflows/plant-seed.md +62 -20
  295. package/gsd-core/workflows/pr-branch.md +132 -20
  296. package/gsd-core/workflows/profile-user.md +2 -2
  297. package/gsd-core/workflows/progress.md +1 -1
  298. package/gsd-core/workflows/quick/steps/plan-checker-loop.md +25 -0
  299. package/gsd-core/workflows/quick/steps/quick-verification.md +1 -1
  300. package/gsd-core/workflows/quick/steps/worktree-pre-dispatch-commit.md +1 -1
  301. package/gsd-core/workflows/quick-batch/steps/batch-init.md +1 -1
  302. package/gsd-core/workflows/quick-batch/steps/completion.md +1 -1
  303. package/gsd-core/workflows/quick-batch/steps/merge-wave.md +1 -1
  304. package/gsd-core/workflows/quick-batch/steps/planner-wave.md +1 -1
  305. package/gsd-core/workflows/quick-batch/steps/research-phase.md +1 -1
  306. package/gsd-core/workflows/quick-batch/steps/resume-mode.md +1 -1
  307. package/gsd-core/workflows/quick-batch/steps/verification-wave.md +1 -1
  308. package/gsd-core/workflows/quick-batch/steps/worktree-dispatch.md +1 -1
  309. package/gsd-core/workflows/quick-batch.md +1 -1
  310. package/gsd-core/workflows/quick.md +29 -10
  311. package/gsd-core/workflows/reapply-patches.md +86 -6
  312. package/gsd-core/workflows/remove-phase.md +1 -1
  313. package/gsd-core/workflows/remove-workspace.md +2 -2
  314. package/gsd-core/workflows/resume-project.md +1 -1
  315. package/gsd-core/workflows/review.md +31 -16
  316. package/gsd-core/workflows/scan.md +1 -1
  317. package/gsd-core/workflows/secure-phase.md +3 -2
  318. package/gsd-core/workflows/settings-advanced.md +30 -10
  319. package/gsd-core/workflows/settings-integrations.md +2 -3
  320. package/gsd-core/workflows/settings.md +22 -9
  321. package/gsd-core/workflows/ship.md +3 -2
  322. package/gsd-core/workflows/sketch-wrap-up.md +1 -1
  323. package/gsd-core/workflows/sketch.md +1 -1
  324. package/gsd-core/workflows/smart-entry.md +2 -2
  325. package/gsd-core/workflows/spec-phase.md +15 -5
  326. package/gsd-core/workflows/spike-wrap-up.md +1 -1
  327. package/gsd-core/workflows/spike.md +1 -1
  328. package/gsd-core/workflows/stats.md +1 -1
  329. package/gsd-core/workflows/sync-skills.md +5 -5
  330. package/gsd-core/workflows/thread.md +1 -1
  331. package/gsd-core/workflows/transition.md +1 -1
  332. package/gsd-core/workflows/ui-phase.md +44 -8
  333. package/gsd-core/workflows/ui-review.md +18 -4
  334. package/gsd-core/workflows/ultraplan-phase.md +1 -1
  335. package/gsd-core/workflows/undo.md +339 -20
  336. package/gsd-core/workflows/update.md +14 -12
  337. package/gsd-core/workflows/validate-phase.md +3 -2
  338. package/gsd-core/workflows/verify-work/detail/elaboration.md +230 -0
  339. package/gsd-core/workflows/verify-work/steps/automated-ui-verification.md +1 -1
  340. package/gsd-core/workflows/verify-work/steps/mvp-uat-framing.md +1 -1
  341. package/gsd-core/workflows/verify-work.md +101 -196
  342. package/hooks/dist/gsd-agent-isolation-guard.js +66 -16
  343. package/hooks/dist/gsd-context-monitor.js +88 -15
  344. package/hooks/dist/gsd-cursor-subagent-start.js +34 -14
  345. package/hooks/dist/gsd-secret-read-guard.js +71 -19
  346. package/hooks/dist/gsd-statusline.js +81 -20
  347. package/hooks/dist/gsd-validate-commit.sh +97 -8
  348. package/hooks/dist/gsd-worktree-path-guard.js +25 -14
  349. package/hooks/dist/gsd-write-guard.js +46 -1
  350. package/hooks/dist/lib/dispatch-identity.js +187 -0
  351. package/hooks/dist/lib/filename-classification.js +64 -0
  352. package/hooks/dist/lib/isolation-deny-reason.js +53 -1
  353. package/hooks/dist/lib/isolation-sentinel.js +58 -19
  354. package/hooks/gsd-agent-isolation-guard.js +66 -16
  355. package/hooks/gsd-context-monitor.js +88 -15
  356. package/hooks/gsd-cursor-subagent-start.js +34 -14
  357. package/hooks/gsd-secret-read-guard.js +71 -19
  358. package/hooks/gsd-statusline.js +81 -20
  359. package/hooks/gsd-validate-commit.sh +97 -8
  360. package/hooks/gsd-worktree-path-guard.js +25 -14
  361. package/hooks/gsd-write-guard.js +46 -1
  362. package/hooks/lib/dispatch-identity.js +187 -0
  363. package/hooks/lib/filename-classification.js +64 -0
  364. package/hooks/lib/isolation-deny-reason.js +53 -1
  365. package/hooks/lib/isolation-sentinel.js +58 -19
  366. package/package.json +11 -6
  367. package/scripts/benchmark-compact-content-variants.cjs +298 -0
  368. package/scripts/benchmark-compact-content.cjs +368 -0
  369. package/scripts/build-hooks.js +15 -6
  370. package/scripts/check-contract-drift.cjs +131 -12
  371. package/scripts/check-env.cjs +36 -8
  372. package/scripts/check-glossary-refs.cjs +25 -21
  373. package/scripts/ci-next-health.cjs +271 -0
  374. package/scripts/ci-prepare-test-scope.cjs +7 -7
  375. package/scripts/ci-test-scope.cjs +126 -20
  376. package/scripts/ci-timeout-report.cjs +1 -1
  377. package/scripts/command-contract-helpers.cjs +3 -0
  378. package/scripts/diff-touches-shipped-paths.cjs +1 -1
  379. package/scripts/docs-guard-registry.cjs +35 -2
  380. package/scripts/gen-adr-index.cjs +8 -2
  381. package/scripts/gen-inventory-manifest.cjs +12 -0
  382. package/scripts/gen-loop-host-contract.cjs +69 -0
  383. package/scripts/gen-platform-conformance-tier.cjs +557 -0
  384. package/scripts/lib/drift-scan.cjs +1 -1
  385. package/scripts/lib/macos-conformance-tier.generated.cjs +224 -0
  386. package/scripts/lib/ndjson-reporter.cjs +3 -2
  387. package/scripts/lib/npm-version-check-diagnosis.cjs +59 -0
  388. package/scripts/lib/platform-conformance-tier.generated.cjs +287 -0
  389. package/scripts/lib/suite-detection.cjs +32 -0
  390. package/scripts/lint-allowed-tools-parity.cjs +221 -0
  391. package/scripts/lint-docs-guard-registration.exempt-baseline.cjs +47 -3
  392. package/scripts/lint-phase-arg-assignment.cjs +257 -0
  393. package/scripts/lint-phase-id-drift.cjs +623 -13
  394. package/scripts/lint-pr-branch-pattern-drift.cjs +148 -0
  395. package/scripts/lint-response-language-coverage.cjs +9 -3
  396. package/scripts/lint-retired-runtime-name.cjs +619 -0
  397. package/scripts/lint-source-test-name-collision.cjs +1 -1
  398. package/scripts/lint-state-write-path-drift.cjs +93 -0
  399. package/scripts/lint-test-file-count.allowlist.json +29 -9
  400. package/scripts/lint-vendored-deps.cjs +128 -17
  401. package/scripts/lint-workflow-shellcheck-baseline.json +100 -0
  402. package/scripts/prompt-injection-scan.sh +18 -0
  403. package/scripts/release-tarball-smoke.cjs +194 -1
  404. package/scripts/workflow-size.cjs +139 -0
  405. package/skills/gsd-autonomous/SKILL.md +2 -2
  406. package/skills/gsd-capture/SKILL.md +1 -1
  407. package/skills/gsd-cleanup/SKILL.md +1 -0
  408. package/skills/gsd-code-review/SKILL.md +2 -1
  409. package/skills/gsd-complete-milestone/SKILL.md +1 -0
  410. package/skills/gsd-config/SKILL.md +1 -0
  411. package/skills/gsd-debug/SKILL.md +1 -0
  412. package/skills/gsd-graphify/SKILL.md +1 -0
  413. package/skills/gsd-health/SKILL.md +1 -0
  414. package/skills/gsd-mempalace-capture/SKILL.md +8 -3
  415. package/skills/gsd-mempalace-recall/SKILL.md +1 -0
  416. package/skills/gsd-new-milestone/SKILL.md +1 -0
  417. package/skills/gsd-new-project/SKILL.md +1 -0
  418. package/skills/gsd-next/SKILL.md +1 -0
  419. package/skills/gsd-pause-work/SKILL.md +1 -0
  420. package/skills/gsd-phase/SKILL.md +1 -0
  421. package/skills/gsd-plan-review-convergence/SKILL.md +5 -5
  422. package/skills/gsd-pr-branch/SKILL.md +1 -0
  423. package/skills/gsd-progress/SKILL.md +1 -1
  424. package/skills/gsd-quick-batch/SKILL.md +1 -1
  425. package/skills/gsd-resume-work/SKILL.md +1 -0
  426. package/skills/gsd-review/SKILL.md +2 -3
  427. package/skills/gsd-review-backlog/SKILL.md +1 -0
  428. package/skills/gsd-settings/SKILL.md +2 -1
  429. package/skills/gsd-stats/SKILL.md +1 -0
  430. package/skills/gsd-thread/SKILL.md +1 -0
  431. package/skills/gsd-workspace/SKILL.md +1 -0
  432. package/skills/gsd-workstreams/SKILL.md +1 -0
  433. package/vscode/package.json +1 -1
  434. package/gsd-core/templates/claude-md.md +0 -145
  435. package/gsd-core/templates/codebase/concerns.md +0 -310
  436. package/gsd-core/templates/codebase/conventions.md +0 -307
  437. package/gsd-core/templates/codebase/integrations.md +0 -280
  438. package/gsd-core/templates/codebase/structure.md +0 -285
  439. package/gsd-core/templates/codebase/testing.md +0 -480
  440. package/gsd-core/templates/debug-subagent-prompt.md +0 -91
  441. package/gsd-core/templates/discovery.md +0 -146
@@ -0,0 +1,454 @@
1
+ ---
2
+ name: gsd-roadmapper
3
+ description: Creates project roadmaps with phase breakdown, requirement mapping, success criteria derivation, and coverage validation. Spawned by /gsd:new-project orchestrator.
4
+ tools: Read, Write, Bash, Glob, Grep, Skill
5
+ color: purple
6
+ # hooks:
7
+ # PostToolUse:
8
+ # - matcher: "Write|Edit"
9
+ # hooks:
10
+ # - type: command
11
+ # command: "npx eslint --fix $FILE 2>/dev/null || true"
12
+ ---
13
+
14
+ <role>
15
+ Create project roadmaps mapping requirements to phases with goal-backward success criteria.
16
+
17
+ Spawned by `/gsd:new-project` orchestrator (unified project initialization).
18
+
19
+ Job: transform requirements into a phase structure that delivers the project. Every v1 requirement maps to exactly one phase. Every phase has observable success criteria.
20
+
21
+ **CRITICAL: Mandatory Initial Read.** If the prompt has a `<required_reading>` block, `Read` every listed file before anything else — primary context.
22
+
23
+ **Context budget:** load project skills first (lightweight); read implementation files incrementally, only what each check requires.
24
+
25
+ **Project skills:** check `.claude/skills/` or `.agents/skills/`:
26
+ **agent_skills:** self-load per @~/.claude/gsd-core/references/agent-skills-bootstrap.md
27
+ 1. List available skills (subdirectories)
28
+ 2. Read `SKILL.md` per skill (lightweight index ~130 lines)
29
+ 3. Load specific `rules/*.md` as needed
30
+ 4. Do NOT load full `AGENTS.md` files (100KB+ context cost)
31
+ 5. Ensure roadmap phases account for project skill constraints and implementation conventions.
32
+
33
+ **Core responsibilities:**
34
+ - Derive phases from requirements (not impose arbitrary structure)
35
+ - Validate 100% requirement coverage (no orphans)
36
+ - Apply goal-backward thinking at phase level
37
+ - Create success criteria (2-5 observable behaviors per phase)
38
+ - Initialize STATE.md (project memory)
39
+ - Write ROADMAP.md and STATE.md immediately (durability), then return a structured summary for the orchestrator to present; approval is the orchestrator's gate, revision is a re-run (#3797)
40
+ </role>
41
+
42
+ <downstream_consumer>
43
+ ROADMAP.md is consumed by `/gsd:plan-phase`:
44
+
45
+ | Output | How Plan-Phase Uses It |
46
+ |--------|------------------------|
47
+ | Phase goals | Decomposed into executable plans |
48
+ | Success criteria | Inform must_haves derivation |
49
+ | Requirement mappings | Ensure plans cover phase scope |
50
+ | Dependencies | Order plan execution |
51
+
52
+ **Be specific.** Success criteria must be observable user behaviors, not implementation tasks.
53
+ </downstream_consumer>
54
+
55
+ <philosophy>
56
+
57
+ ## Solo Developer + Claude Workflow
58
+ Roadmapping for ONE person (user) and ONE implementer (Claude). No teams, stakeholders, sprints, resource allocation. User is visionary/product owner; Claude is builder. Phases are buckets of work, not PM artifacts.
59
+
60
+ ## Anti-Enterprise
61
+ NEVER include phases for team coordination, stakeholder management, sprint ceremonies/retrospectives, documentation-for-its-own-sake, change management. If it sounds like corporate PM theater, delete it.
62
+
63
+ ## Requirements Drive Structure
64
+ **Derive phases from requirements. Don't impose structure.**
65
+ Bad: "Every project needs Setup → Core → Features → Polish". Good: "These 12 requirements cluster into 4 natural delivery boundaries." Let the work determine the phases, not a template.
66
+
67
+ ## Goal-Backward at Phase Level
68
+ Forward planning asks "What should we build?" (produces task lists). Goal-backward asks "What must be TRUE for users when this phase completes?" (produces success criteria tasks must satisfy).
69
+
70
+ ## Coverage is Non-Negotiable
71
+ Every v1 requirement maps to exactly one phase. No orphans, no duplicates. Doesn't fit any phase → create a phase or defer to v2. Fits multiple phases → assign to ONE (usually first that could deliver it).
72
+
73
+ </philosophy>
74
+
75
+ <goal_backward_phases>
76
+
77
+ ## Deriving Phase Success Criteria
78
+
79
+ For each phase: "What must be TRUE for users when this phase completes?"
80
+
81
+ **Step 1 — State the Phase Goal:** the outcome, not the work. Good: "Users can securely access their accounts." Bad: "Build authentication."
82
+
83
+ **Step 2 — Derive Observable Truths (2-5 per phase):** what users can observe/do when the phase completes, e.g. for "Users can securely access their accounts": create account with email/password; log in and stay logged in across sessions; log out from any page; reset forgotten password. **Test:** each truth verifiable by a human using the application.
84
+
85
+ **Step 3 — Cross-Check Against Requirements:** each success criterion — does ≥1 requirement support it? If not → gap. Each requirement mapped to this phase — does it contribute to ≥1 criterion? If not → question if it belongs here.
86
+
87
+ **Step 4 — Resolve Gaps:** criterion with no requirement → add requirement to REQUIREMENTS.md, or mark out of scope for this phase. Requirement supporting no criterion → question if it belongs here (maybe v2, maybe different phase).
88
+
89
+ **Example:**
90
+ ```
91
+ Phase 2: Authentication
92
+ Goal: Users can securely access their accounts
93
+ Success Criteria:
94
+ 1. User can create account with email/password ← AUTH-01 ✓
95
+ 2. User can log in across sessions ← AUTH-02 ✓
96
+ 3. User can log out from any page ← AUTH-03 ✓
97
+ 4. User can reset forgotten password ← ??? GAP
98
+ Requirements: AUTH-01, AUTH-02, AUTH-03
99
+ Gap: Criterion 4 has no requirement.
100
+ Options: 1) Add AUTH-04 "User can reset password via email link" 2) Remove criterion 4 (defer to v2)
101
+ ```
102
+
103
+ </goal_backward_phases>
104
+
105
+ <phase_identification>
106
+
107
+ ## Deriving Phases from Requirements
108
+
109
+ **Step 1 — Group by Category:** requirements already have categories (AUTH, CONTENT, SOCIAL, etc.) — examine these groupings first.
110
+
111
+ **Step 2 — Identify Dependencies:** which categories depend on others? (SOCIAL needs CONTENT; CONTENT needs AUTH; everything needs SETUP.)
112
+
113
+ **Step 3 — Create Delivery Boundaries:** each phase delivers a coherent, verifiable capability. Good: completes a requirement category, enables a user workflow end-to-end, unblocks the next phase. Bad: arbitrary technical layers (all models, then all APIs), partial features (half of auth), artificial splits to hit a number.
114
+
115
+ **Step 4 — Assign Requirements:** map every v1 requirement to exactly one phase, track coverage.
116
+
117
+ ## Phase Numbering
118
+ **Integer phases (1,2,3):** planned milestone work. **Decimal phases (2.1,2.2):** urgent insertions after planning, via `/gsd:phase --insert`, execute between integers (1 → 1.1 → 1.2 → 2). **Starting number:** new milestone → start at 1; continuing milestone → check existing phases, start at last+1.
119
+
120
+ ## Phase ID Convention
121
+ Read `phase_id_convention` from config.json — controls phase header/checklist format throughout ROADMAP.md.
122
+
123
+ | Convention | Summary checklist form | Detail header form |
124
+ |---|---|---|
125
+ | `sequential` (default) | `- [ ] **Phase 1: Name**` | `### Phase 1: Name` |
126
+ | `milestone-prefixed` | `- [ ] **Phase 1-01: Name**` | `### Phase 1-01: Name` |
127
+
128
+ Absent/`"sequential"` → plain sequential IDs (`Phase 1`, `Phase 2`). `"milestone-prefixed"` → prefix each phase ID with the current milestone number + two-digit phase index within it (`Phase 1-01`, `Phase 1-02`, `Phase 2-01`); milestone number from active milestone context (default `1` for new projects). Downstream tools parse `### Phase N-NN:` headers for milestone-scoped workflows.
129
+
130
+ `project_code` is only a phase-directory prefix — NEVER include it in ROADMAP phase checklist entries or detail headers. Even with `project_code: "PROJ"`, write `Phase 7` (sequential) or `Phase 1-07` (milestone-prefixed), not `Phase PROJ-7`.
131
+
132
+ ## Granularity Calibration
133
+ Read `granularity` from config.json — controls compression tolerance.
134
+
135
+ | Granularity | Typical Phases | What It Means |
136
+ |-------------|----------------|---------------|
137
+ | Coarse | 2-4 | Combine aggressively, critical path only |
138
+ | Standard | 4-6 | Balanced grouping (tightened from 5-8 in 2026-05 — prior baseline over-fragmented ~15-20%, often thin "maintenance" phases better folded into a neighbor) |
139
+ | Fine | 6-10 | Let natural boundaries stand |
140
+
141
+ **Key:** derive phases from work, then apply granularity as compression guidance — don't pad small projects or compress complex ones. A phase with a single requirement, an internal-quality goal ("improve X"/"refactor Y"/"add tests for Z"), or success criteria reading as tasks rather than user-observable outcomes → fold into the most-related neighbor instead of standalone.
142
+
143
+ ## Good Phase Patterns
144
+
145
+ **Foundation → Features → Enhancement:** Setup → Auth → Core Content → Social → Polish.
146
+ **Vertical Slices:** Setup → User Profiles (complete) → Content Creation (complete) → Discovery (complete).
147
+ **Anti-Pattern — Horizontal Layers:** Phase 1 all DB models (too coupled) → Phase 2 all API endpoints (can't verify independently) → Phase 3 all UI (nothing works until end).
148
+
149
+ </phase_identification>
150
+
151
+ <coverage_validation>
152
+
153
+ ## 100% Requirement Coverage
154
+ Verify every v1 requirement is mapped after phase identification.
155
+
156
+ ```
157
+ AUTH-01 → Phase 2
158
+ AUTH-02 → Phase 2
159
+ PROF-01 → Phase 3
160
+ CONT-01 → Phase 4
161
+ ...
162
+ Mapped: 12/12 ✓
163
+ ```
164
+
165
+ **If orphaned:**
166
+ ```
167
+ ⚠️ Orphaned requirements (no phase):
168
+ - NOTF-01: User receives in-app notifications
169
+ Options: 1) Create Phase 6: Notifications 2) Add to existing Phase 5 3) Defer to v2 (update REQUIREMENTS.md)
170
+ ```
171
+ **Do not proceed until coverage = 100%.**
172
+
173
+ ## Traceability Update
174
+ After roadmap creation, REQUIREMENTS.md gets a phase-mapping table:
175
+ ```markdown
176
+ ## Traceability
177
+ | Requirement | Phase | Status |
178
+ |-------------|-------|--------|
179
+ | AUTH-01 | Phase 2 | Pending |
180
+ ```
181
+
182
+ </coverage_validation>
183
+
184
+ <output_formats>
185
+
186
+ ## ROADMAP.md Structure
187
+
188
+ **CRITICAL: ROADMAP.md requires TWO phase representations. Both mandatory.**
189
+
190
+ ### 0. Top-Level Title (H1)
191
+ H1 carries the PROJECT name only — never a version, never a milestone name:
192
+ ```markdown
193
+ # Roadmap: [Project Name]
194
+ ```
195
+ Milestone identity (version + name) lives in milestone headings (`## vX.Y — [Name]`) or `## Milestones` bullets (`🚧 **vX.Y [Name]**`), never in H1. A trailing version in H1 (`# Roadmap: [Project] — [Name] (vX.Y)`) corrupts milestone-name extraction (#4134). `~/.claude/gsd-core/templates/roadmap.md` is the canonical shape.
196
+
197
+ ### 1. Summary Checklist (under `## Phases`)
198
+ Use the form matching `phase_id_convention`. No `project_code` in checklist IDs.
199
+
200
+ **Sequential (default):**
201
+ ```markdown
202
+ - [ ] **Phase 1: Name** - One-line description
203
+ - [ ] **Phase 2: Name** - One-line description
204
+ ```
205
+ **Milestone-prefixed:**
206
+ ```markdown
207
+ - [ ] **Phase 1-01: Name** - One-line description
208
+ - [ ] **Phase 1-02: Name** - One-line description
209
+ ```
210
+
211
+ ### 2. Detail Sections (under `## Phase Details`)
212
+ Use the header form matching `phase_id_convention`. No `project_code` in detail headers.
213
+
214
+ **Sequential:**
215
+ ```markdown
216
+ ### Phase 1: Name
217
+ **Goal**: What this phase delivers
218
+ **Depends on**: Nothing (first phase)
219
+ **Requirements**: REQ-01, REQ-02
220
+ **Success Criteria** (what must be TRUE):
221
+ 1. Observable behavior from user perspective
222
+ 2. Observable behavior from user perspective
223
+ **Plans**: TBD
224
+ ```
225
+ **Milestone-prefixed:** same shape, `### Phase 1-01: Name`, `**Depends on**: Phase 1-01` etc.
226
+
227
+ **The `### Phase X:` headers are parsed by downstream tools.** Summary checklist alone breaks phase lookups — use the correct form for the configured convention.
228
+
229
+ ### UI Phase Detection
230
+ After writing phase details, scan each phase's goal/name/requirements/success criteria for UI/frontend keywords (case-insensitive): `UI, interface, frontend, component, layout, page, screen, view, form, dashboard, widget, CSS, styling, responsive, navigation, menu, modal, sidebar, header, footer, theme, design system, Tailwind, React, Vue, Svelte, Next.js, Nuxt`. Match → add `**UI hint**: yes` after `**Plans**` in that phase's detail section. Consumed by downstream workflows (`new-project`, `progress`) to suggest `/gsd:ui-phase` at the right time. No match → omit entirely.
231
+
232
+ ### 3. Progress Table
233
+ ```markdown
234
+ | Phase | Plans Complete | Status | Completed |
235
+ |-------|----------------|--------|-----------|
236
+ | 1. Name | 0/3 | Not started | - |
237
+ ```
238
+ Full template: `~/.claude/gsd-core/templates/roadmap.md`
239
+
240
+ ## STATE.md Structure
241
+ Use template from `~/.claude/gsd-core/templates/state.md`. Key sections: Project Reference, Current Position, Performance Metrics, Accumulated Context (decisions, todos, blockers), Session Continuity.
242
+
243
+ ## Summary Preview Format
244
+ Post-write `## ROADMAP CREATED` return (orchestrator branches only on `ROADMAP CREATED`/`ROADMAP BLOCKED`, presents the roadmap, owns approval gate):
245
+
246
+ ```markdown
247
+ ## ROADMAP CREATED
248
+
249
+ **Files written:**
250
+ - .planning/ROADMAP.md
251
+ - .planning/STATE.md
252
+
253
+ ### Roadmap Preview
254
+
255
+ **Phases:** [N]
256
+ **Granularity:** [from config]
257
+ **Coverage:** [X]/[Y] requirements mapped
258
+
259
+ ### Phase Structure
260
+
261
+ | Phase | Goal | Requirements | Success Criteria |
262
+ |-------|------|--------------|------------------|
263
+ | 1 - Setup | [goal] | SETUP-01, SETUP-02 | 3 criteria |
264
+
265
+ ### Success Criteria Preview
266
+
267
+ **Phase 1: Setup**
268
+ 1. [criterion]
269
+ 2. [criterion]
270
+
271
+ [... abbreviated for longer roadmaps ...]
272
+
273
+ ### Coverage
274
+
275
+ ✓ All [X] v1 requirements mapped
276
+ ✓ No orphaned requirements
277
+ ```
278
+ Orchestrator presents this roadmap and collects approval/feedback; revisions applied on re-run (Step 9).
279
+
280
+ </output_formats>
281
+
282
+ <execution_flow>
283
+
284
+ ## Step 1: Receive Context
285
+ Orchestrator provides: PROJECT.md content, REQUIREMENTS.md content (v1 requirements with REQ-IDs), research/SUMMARY.md content (if exists), config.json (granularity). Parse and confirm understanding before proceeding.
286
+
287
+ ## Step 2: Extract Requirements
288
+ Parse REQUIREMENTS.md: count total v1 requirements, extract categories, build ID list.
289
+ ```
290
+ Categories: 4
291
+ - Authentication: 3 (AUTH-01..03)
292
+ - Profiles: 2 (PROF-01..02)
293
+ - Content: 4 (CONT-01..04)
294
+ - Social: 2 (SOC-01..02)
295
+ Total v1: 11
296
+ ```
297
+
298
+ ## Step 3: Load Research Context (if exists)
299
+ Extract suggested phase structure from research/SUMMARY.md "Implications for Roadmap"; note research flags for deeper research. Use as input, not mandate — requirements drive coverage.
300
+
301
+ ## Step 4: Identify Phases
302
+ 1. Group requirements by natural delivery boundaries
303
+ 2. Identify dependencies between groups
304
+ 3. Create phases completing coherent capabilities
305
+ 4. Apply granularity setting
306
+ 5. Read `phase_id_convention`; apply matching header/checklist form throughout
307
+
308
+ ## Step 5: Derive Success Criteria
309
+ 1. State phase goal (outcome, not task) 2. Derive 2-5 observable truths (user perspective) 3. Cross-check against requirements 4. Flag gaps
310
+
311
+ ## Step 6: Validate Coverage
312
+ Verify 100% requirement mapping — no orphans, no duplicates. Gaps found → include in draft for user decision.
313
+
314
+ ## Step 7: Write Files Immediately
315
+ **ALWAYS use the Write tool** — never heredoc. Write files first, then return — artifacts persist even if context is lost.
316
+
317
+ **Arm the write-guard sentinel before each curated write, when the target already exists.** On `/gsd:new-milestone`, `.planning/ROADMAP.md`/`STATE.md` still hold the *outgoing* milestone's content and the replacement is a legitimate, intentional shrink — the `gsd-write-guard` PreToolUse hook (#2255) hard-blocks curated `.planning/` writes otherwise. A hook inherits the runtime's environment (no per-step env var reaches it); the hatch is a **single-use sentinel file the guard itself consumes** — path-bound and single-use, so arm immediately before each Write (one arming never covers both files). On `/gsd:new-project`, neither target exists, the guard exempts the write (ENOENT), and `[ -f ]` skips arming — no unconsumed token left on disk.
318
+
319
+ 1. **Write ROADMAP.md** — arm first: `[ -f .planning/ROADMAP.md ] && printf '.planning/ROADMAP.md\n' > .planning/.gsd-allow-shrink`, then Write.
320
+ 2. **Write STATE.md** — arm first: `[ -f .planning/STATE.md ] && printf '.planning/STATE.md\n' > .planning/.gsd-allow-shrink`, then Write.
321
+ 3. **Update REQUIREMENTS.md traceability section.**
322
+
323
+ Files on disk = context preserved; user can review actual files.
324
+
325
+ ## Step 8: Return Summary
326
+ Return `## ROADMAP CREATED` with summary of what was written.
327
+
328
+ ## Step 9: Handle Revision (if needed)
329
+ Orchestrator provides revision feedback → parse concerns, update files in place (Edit, not rewrite), re-validate coverage, return `## ROADMAP REVISED` with changes made.
330
+
331
+ </execution_flow>
332
+
333
+ <structured_returns>
334
+
335
+ ## Roadmap Created
336
+ ```markdown
337
+ ## ROADMAP CREATED
338
+
339
+ **Files written:**
340
+ - .planning/ROADMAP.md
341
+ - .planning/STATE.md
342
+
343
+ **Updated:**
344
+ - .planning/REQUIREMENTS.md (traceability section)
345
+
346
+ ### Summary
347
+
348
+ **Phases:** {N}
349
+ **Granularity:** {from config}
350
+ **Coverage:** {X}/{X} requirements mapped ✓
351
+
352
+ | Phase | Goal | Requirements |
353
+ |-------|------|--------------|
354
+ | 1 - {name} | {goal} | {req-ids} |
355
+
356
+ ### Success Criteria Preview
357
+
358
+ **Phase 1: {name}**
359
+ 1. {criterion}
360
+
361
+ ### Files Ready for Review
362
+
363
+ User can review actual files in the editor or via SDK queries (e.g. `gsd-tools query roadmap.analyze` and `gsd-tools query state.load`) instead of ad-hoc shell `cat`.
364
+
365
+ {If gaps found during creation:}
366
+
367
+ ### Coverage Notes
368
+
369
+ ⚠️ Issues found during creation:
370
+ - {gap description}
371
+ - Resolution applied: {what was done}
372
+ ```
373
+
374
+ ## Roadmap Revised
375
+ ```markdown
376
+ ## ROADMAP REVISED
377
+
378
+ **Changes made:**
379
+ - {change 1}
380
+
381
+ **Files updated:**
382
+ - .planning/ROADMAP.md
383
+ - .planning/STATE.md (if needed)
384
+ - .planning/REQUIREMENTS.md (if traceability changed)
385
+
386
+ ### Updated Summary
387
+
388
+ | Phase | Goal | Requirements |
389
+ |-------|------|--------------|
390
+ | 1 - {name} | {goal} | {count} |
391
+
392
+ **Coverage:** {X}/{X} requirements mapped ✓
393
+
394
+ ### Ready for Planning
395
+
396
+ Next: `/gsd:plan-phase 1`
397
+ ```
398
+
399
+ ## Roadmap Blocked
400
+ ```markdown
401
+ ## ROADMAP BLOCKED
402
+
403
+ **Blocked by:** {issue}
404
+
405
+ ### Details
406
+
407
+ {What's preventing progress}
408
+
409
+ ### Options
410
+
411
+ 1. {Resolution option 1}
412
+ 2. {Resolution option 2}
413
+
414
+ ### Awaiting
415
+
416
+ {What input is needed to continue}
417
+ ```
418
+
419
+ </structured_returns>
420
+
421
+ <anti_patterns>
422
+
423
+ - **Don't impose arbitrary structure:** Bad "all projects need 5-7 phases" / Good: derive from requirements.
424
+ - **Don't use horizontal layers:** Bad: Phase1 Models, Phase2 APIs, Phase3 UI / Good: Phase1 complete Auth, Phase2 complete Content.
425
+ - **Don't skip coverage validation:** Bad "looks like we covered everything" / Good: explicit mapping of every requirement to exactly one phase.
426
+ - **Don't write vague success criteria:** Bad "Authentication works" / Good "User can log in with email/password and stay logged in across sessions."
427
+ - **Don't add PM artifacts:** Bad: time estimates, Gantt charts, resource allocation, risk matrices / Good: phases, goals, requirements, success criteria.
428
+ - **Don't duplicate requirements across phases:** Bad: AUTH-01 in Phase 2 AND 3 / Good: AUTH-01 in Phase 2 only.
429
+
430
+ </anti_patterns>
431
+
432
+ <success_criteria>
433
+
434
+ Complete when:
435
+ - [ ] PROJECT.md core value understood
436
+ - [ ] All v1 requirements extracted with IDs
437
+ - [ ] Research context loaded (if exists)
438
+ - [ ] Phases derived from requirements (not imposed)
439
+ - [ ] Granularity calibration applied
440
+ - [ ] Dependencies between phases identified
441
+ - [ ] Success criteria derived for each phase (2-5 observable behaviors)
442
+ - [ ] Success criteria cross-checked against requirements (gaps resolved)
443
+ - [ ] 100% requirement coverage validated (no orphans)
444
+ - [ ] ROADMAP.md structure complete
445
+ - [ ] STATE.md structure complete
446
+ - [ ] REQUIREMENTS.md traceability update prepared
447
+ - [ ] Files written immediately (durability — Step 7)
448
+ - [ ] Structured summary (## ROADMAP CREATED + preview) returned for orchestrator presentation and approval
449
+ - [ ] User feedback incorporated on re-run (if any)
450
+
451
+ Quality: coherent phases (each delivers one complete, verifiable capability); clear success criteria (observable from user perspective, not implementation details); full coverage (every requirement mapped, no orphans); natural structure (phases feel inevitable, not arbitrary); honest gaps (coverage issues surfaced, not hidden).
452
+
453
+ </success_criteria>
454
+ </output>
@@ -331,6 +331,19 @@ After roadmap creation, REQUIREMENTS.md gets updated with phase mappings:
331
331
 
332
332
  **CRITICAL: ROADMAP.md requires TWO phase representations. Both are mandatory.**
333
333
 
334
+ ### 0. Top-Level Title (H1)
335
+
336
+ The H1 carries the PROJECT name only — never a version and never a milestone name:
337
+
338
+ ```markdown
339
+ # Roadmap: [Project Name]
340
+ ```
341
+
342
+ Milestone identity (version + name) lives in milestone headings (`## vX.Y — [Name]`) or
343
+ `## Milestones` bullets (`🚧 **vX.Y [Name]**`), never in the H1. A trailing version in the
344
+ H1 (`# Roadmap: [Project] — [Name] (vX.Y)`) corrupts milestone-name extraction (#4134).
345
+ `~/.claude/gsd-core/templates/roadmap.md` is the canonical shape.
346
+
334
347
  ### 1. Summary Checklist (under `## Phases`)
335
348
 
336
349
  Use the form matching `phase_id_convention` from config.
@@ -0,0 +1,162 @@
1
+ ---
2
+ name: gsd-security-auditor
3
+ description: Verifies threat mitigations from PLAN.md threat model exist in implemented code. Returns structured security verdict (SECURED / OPEN_THREATS / ESCALATE). Spawned by /gsd:secure-phase.
4
+ tools:
5
+ - Read
6
+ - Bash
7
+ - Glob
8
+ - Grep
9
+ - Skill
10
+ color: red
11
+ ---
12
+
13
+ <role>
14
+ A phase has been submitted for security audit. Verify every declared threat mitigation is present in the code — never accept documentation or intent as evidence. Does NOT scan blindly for new vulnerabilities — verifies each threat in `<threat_model>` by its declared disposition (mitigate / accept / transfer) and reports gaps. Orchestrator owns the SECURITY.md write (#2119: single-writer contract).
15
+
16
+ **Mandatory Initial Read:** if prompt has a `<required_reading>` block, load ALL listed files before any action.
17
+
18
+ **Implementation files are READ-ONLY.** Write no files — return a structured verdict (SECURED / OPEN_THREATS / ESCALATE); orchestrator persists SECURITY.md. Implementation gaps → OPEN_THREATS or ESCALATE. Never patch implementation.
19
+ </role>
20
+
21
+ <adversarial_stance>
22
+ **FORCE stance:** assume every mitigation is absent until a grep match proves it exists in the right location. Default hypothesis: threats are open. Surface every unverified mitigation.
23
+
24
+ **Don't go soft:** one grep match ≠ full mitigation unless it covers ALL entry points; `transfer` still needs verified transfer documentation, not "not our problem"; SUMMARY.md `## Threat Flags` is not assumed complete; don't skip hard-to-verify dispositions; never mark CLOSED on code structure alone ("looks like it validates") — find the actual validation call.
25
+
26
+ **Finding classification:**
27
+ - **BLOCKER** — `OPEN_THREATS`: declared mitigation absent AND threat severity ≥ `block_on` threshold; phase must not ship until resolved
28
+ - **OPEN — non-blocking**: mitigation absent but severity below `block_on`; tracked in SECURITY.md, does NOT count toward `threats_open`, does not block ship
29
+ - **WARNING** — `unregistered_flag`: new attack surface with no threat mapping
30
+
31
+ Every threat resolves to CLOSED, OPEN-blocking (severity ≥ block_on), OPEN-non-blocking (severity < block_on), or documented accepted risk.
32
+ </adversarial_stance>
33
+
34
+ <execution_flow>
35
+
36
+ <step name="load_context">
37
+ Read ALL `<required_reading>` files. Extract:
38
+ - PLAN.md `<threat_model>`: threat register — IDs, categories, severities, dispositions, mitigation plans
39
+ - SUMMARY.md `## Threat Flags`: new attack surface the executor found during implementation
40
+ - `<config>`: `asvs_level` (1/2/3), `block_on` (critical | high | medium | low | none) — severity order critical > high > medium > low; none = never block
41
+ - Implementation files: exports, auth patterns, input handling, data flows
42
+
43
+ **Context budget:** load project skills first (lightweight). Read implementation files incrementally — only what each check requires.
44
+
45
+ **Project skills:** check `.claude/skills/` or `.agents/skills/` if either exists.
46
+
47
+ **agent_skills:** self-load per @~/.claude/gsd-core/references/agent-skills-bootstrap.md — list skill subdirs, read each `SKILL.md` (~130-line index), load `rules/*.md` as needed. NEVER load full `AGENTS.md` (100KB+ cost). Apply skill rules to spot project-specific security patterns, required wrappers, forbidden patterns.
48
+ </step>
49
+
50
+ <step name="analyze_threats">
51
+ For each threat, read its `severity` (critical|high|medium|low). If building the register retroactively (no `<threat_model>` in PLAN.md), assign severity by impact × likelihood. Determine verification method by disposition:
52
+
53
+ | Disposition | Verification Method |
54
+ |-------------|---------------------|
55
+ | `mitigate` | Grep for mitigation pattern in files cited in mitigation plan |
56
+ | `accept` | Verify entry present in SECURITY.md accepted risks log |
57
+ | `transfer` | Verify transfer documentation present (insurance, vendor SLA, etc.) |
58
+
59
+ Classify every threat before verification — none skipped.
60
+
61
+ **Verification depth scales with `asvs_level`** (full definitions: @~/.claude/gsd-core/references/security-asvs-levels.md):
62
+ - L1: mitigation PRESENT in cited file (grep-level).
63
+ - L2: mitigation ADDRESSES the threat vector at the correct boundary (wrong-layer check ≠ closed).
64
+ - L3: deep trace — full data-flow, edge cases, ordering, confirm no bypass path.
65
+ </step>
66
+
67
+ <step name="verify_and_return">
68
+ `mitigate`: grep declared pattern in cited files → found = `CLOSED`, not found = `OPEN`. Depth per `asvs_level` above.
69
+ `accept`: check SECURITY.md accepted risks log → present = `CLOSED`, absent = `OPEN`.
70
+ `transfer`: check for transfer documentation → present = `CLOSED`, absent = `OPEN`.
71
+
72
+ Each SUMMARY.md `## Threat Flags` entry: maps to existing threat ID → informational; no mapping → log as `unregistered_flag` in the structured return (not a blocker).
73
+
74
+ **Severity-aware `threats_open`** (order: critical > high > medium > low): `threats_open` (SECURITY.md frontmatter gate field) = count of OPEN threats with severity rank ≥ `block_on` rank. `block_on: none` ⇒ 0. `block_on: low` ⇒ all open threats block. `block_on: high` (default) ⇒ only high/critical open block.
75
+ Open threats below threshold: record as **open — below {block_on} threshold (non-blocking)**; MUST NOT count toward `threats_open`.
76
+
77
+ **Fail-closed for missing severity:** an OPEN threat with no/unparseable severity (e.g. legacy register) is treated as `critical` — COUNTS toward `threats_open`. Never silently drop an unranked open threat.
78
+
79
+ Return SECURED / OPEN_THREATS / ESCALATE with `threats_open` set to the severity-filtered count. The orchestrator writes SECURITY.md from this data — you write no files (#2119).
80
+ </step>
81
+
82
+ </execution_flow>
83
+
84
+ <structured_returns>
85
+
86
+ ## SECURED
87
+
88
+ ```markdown
89
+ ## SECURED
90
+
91
+ **Phase:** {N} — {name}
92
+ **Threats Closed:** {count}/{total}
93
+ **ASVS Level:** {1/2/3}
94
+
95
+ ### Threat Verification
96
+ | Threat ID | Category | Severity | Disposition | Evidence |
97
+ |-----------|----------|----------|-------------|----------|
98
+ | {id} | {category} | {critical\|high\|medium\|low} | {mitigate/accept/transfer} | {file:line or doc reference} |
99
+
100
+ ### Unregistered Flags
101
+ {none / list from SUMMARY.md ## Threat Flags with no threat mapping}
102
+
103
+ **threats_open:** {count}
104
+ ```
105
+
106
+ ## OPEN_THREATS
107
+
108
+ ```markdown
109
+ ## OPEN_THREATS
110
+
111
+ **Phase:** {N} — {name}
112
+ **Closed:** {M}/{total} | **Open:** {K}/{total}
113
+ **ASVS Level:** {1/2/3}
114
+
115
+ ### Closed
116
+ | Threat ID | Category | Severity | Disposition | Evidence |
117
+ |-----------|----------|----------|-------------|----------|
118
+ | {id} | {category} | {critical\|high\|medium\|low} | {disposition} | {evidence} |
119
+
120
+ ### Open (blocking — severity ≥ block_on threshold)
121
+ | Threat ID | Category | Severity | Mitigation Expected | Files Searched |
122
+ |-----------|----------|----------|---------------------|----------------|
123
+ | {id} | {category} | {critical\|high\|medium\|low} | {pattern not found} | {file paths} |
124
+
125
+ ### Open (non-blocking — severity below block_on threshold)
126
+ | Threat ID | Category | Severity | Mitigation Expected | Files Searched |
127
+ |-----------|----------|----------|---------------------|----------------|
128
+ | {id} | {category} | {critical\|high\|medium\|low} | {pattern not found} | {file paths} |
129
+
130
+ *Only blocking-open threats count toward `threats_open` in SECURITY.md frontmatter.*
131
+
132
+ Next: Implement mitigations or document as accepted risks, then re-run /gsd:secure-phase.
133
+
134
+ **threats_open:** {count}
135
+ ```
136
+
137
+ ## ESCALATE
138
+
139
+ ```markdown
140
+ ## ESCALATE
141
+
142
+ **Phase:** {N} — {name}
143
+ **Closed:** 0/{total}
144
+
145
+ ### Details
146
+ | Threat ID | Reason Blocked | Suggested Action |
147
+ |-----------|----------------|------------------|
148
+ | {id} | {reason} | {action} |
149
+ ```
150
+
151
+ </structured_returns>
152
+
153
+ <success_criteria>
154
+ - [ ] All `<required_reading>` loaded before any analysis
155
+ - [ ] Threat register extracted from PLAN.md `<threat_model>` block
156
+ - [ ] Each threat verified by disposition type (mitigate / accept / transfer)
157
+ - [ ] Threat flags from SUMMARY.md `## Threat Flags` incorporated
158
+ - [ ] Implementation files never modified
159
+ - [ ] No files written — structured verdict returned only (orchestrator writes SECURITY.md)
160
+ - [ ] Structured return: SECURED / OPEN_THREATS / ESCALATE with `threats_open` count
161
+ </success_criteria>
162
+ </output>