@therocketcode/gsd-core 1.4.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 (568) hide show
  1. package/.claude-plugin/plugin.json +23 -0
  2. package/GEMINI.md +53 -0
  3. package/LICENSE +21 -0
  4. package/README.ja-JP.md +125 -0
  5. package/README.ko-KR.md +125 -0
  6. package/README.md +144 -0
  7. package/README.pt-BR.md +125 -0
  8. package/README.zh-CN.md +125 -0
  9. package/agents/gsd-advisor-researcher.md +108 -0
  10. package/agents/gsd-ai-researcher.md +114 -0
  11. package/agents/gsd-assumptions-analyzer.md +105 -0
  12. package/agents/gsd-code-fixer.md +668 -0
  13. package/agents/gsd-code-reviewer.md +387 -0
  14. package/agents/gsd-codebase-mapper.md +853 -0
  15. package/agents/gsd-debug-session-manager.md +314 -0
  16. package/agents/gsd-debugger.md +1452 -0
  17. package/agents/gsd-doc-classifier.md +168 -0
  18. package/agents/gsd-doc-synthesizer.md +204 -0
  19. package/agents/gsd-doc-verifier.md +217 -0
  20. package/agents/gsd-doc-writer.md +616 -0
  21. package/agents/gsd-domain-researcher.md +147 -0
  22. package/agents/gsd-eval-auditor.md +191 -0
  23. package/agents/gsd-eval-planner.md +154 -0
  24. package/agents/gsd-executor.md +785 -0
  25. package/agents/gsd-framework-selector.md +160 -0
  26. package/agents/gsd-integration-checker.md +470 -0
  27. package/agents/gsd-intel-updater.md +342 -0
  28. package/agents/gsd-nyquist-auditor.md +203 -0
  29. package/agents/gsd-pattern-mapper.md +335 -0
  30. package/agents/gsd-phase-researcher.md +867 -0
  31. package/agents/gsd-plan-checker.md +978 -0
  32. package/agents/gsd-planner.md +1204 -0
  33. package/agents/gsd-project-researcher.md +611 -0
  34. package/agents/gsd-research-synthesizer.md +259 -0
  35. package/agents/gsd-roadmapper.md +688 -0
  36. package/agents/gsd-security-auditor.md +155 -0
  37. package/agents/gsd-ui-auditor.md +495 -0
  38. package/agents/gsd-ui-checker.md +309 -0
  39. package/agents/gsd-ui-researcher.md +374 -0
  40. package/agents/gsd-user-profiler.md +171 -0
  41. package/agents/gsd-verifier.md +923 -0
  42. package/assets/gsd-logo-2000-transparent.png +0 -0
  43. package/assets/gsd-logo-2000-transparent.svg +17 -0
  44. package/assets/gsd-logo-2000.png +0 -0
  45. package/assets/gsd-logo-2000.svg +21 -0
  46. package/assets/terminal.svg +68 -0
  47. package/bin/install.js +12726 -0
  48. package/bin/lib/ui-safety-gate.cjs +107 -0
  49. package/commands/gsd/add-tests.md +42 -0
  50. package/commands/gsd/ai-integration-phase.md +37 -0
  51. package/commands/gsd/audit-fix.md +34 -0
  52. package/commands/gsd/audit-milestone.md +37 -0
  53. package/commands/gsd/audit-uat.md +24 -0
  54. package/commands/gsd/autonomous.md +48 -0
  55. package/commands/gsd/capture.md +62 -0
  56. package/commands/gsd/cleanup.md +24 -0
  57. package/commands/gsd/code-review.md +59 -0
  58. package/commands/gsd/complete-milestone.md +143 -0
  59. package/commands/gsd/config.md +56 -0
  60. package/commands/gsd/debug.md +52 -0
  61. package/commands/gsd/discover-product.md +65 -0
  62. package/commands/gsd/discuss-phase.md +77 -0
  63. package/commands/gsd/docs-update.md +49 -0
  64. package/commands/gsd/eval-review.md +33 -0
  65. package/commands/gsd/execute-phase.md +66 -0
  66. package/commands/gsd/explore.md +27 -0
  67. package/commands/gsd/extract-learnings.md +23 -0
  68. package/commands/gsd/fast.md +31 -0
  69. package/commands/gsd/forensics.md +57 -0
  70. package/commands/gsd/graphify.md +204 -0
  71. package/commands/gsd/health.md +31 -0
  72. package/commands/gsd/help.md +28 -0
  73. package/commands/gsd/import.md +45 -0
  74. package/commands/gsd/inbox.md +39 -0
  75. package/commands/gsd/ingest-docs.md +42 -0
  76. package/commands/gsd/manager.md +45 -0
  77. package/commands/gsd/map-codebase.md +83 -0
  78. package/commands/gsd/milestone-summary.md +51 -0
  79. package/commands/gsd/model-domain.md +65 -0
  80. package/commands/gsd/mvp-phase.md +45 -0
  81. package/commands/gsd/new-milestone.md +45 -0
  82. package/commands/gsd/new-project.md +47 -0
  83. package/commands/gsd/ns-context.md +23 -0
  84. package/commands/gsd/ns-ideate.md +24 -0
  85. package/commands/gsd/ns-manage.md +29 -0
  86. package/commands/gsd/ns-project.md +22 -0
  87. package/commands/gsd/ns-review.md +26 -0
  88. package/commands/gsd/ns-workflow.md +28 -0
  89. package/commands/gsd/pause-work.md +43 -0
  90. package/commands/gsd/phase.md +56 -0
  91. package/commands/gsd/plan-phase.md +64 -0
  92. package/commands/gsd/plan-review-convergence.md +59 -0
  93. package/commands/gsd/pr-branch.md +26 -0
  94. package/commands/gsd/profile-user.md +46 -0
  95. package/commands/gsd/progress.md +48 -0
  96. package/commands/gsd/quick.md +174 -0
  97. package/commands/gsd/recommend-architecture.md +64 -0
  98. package/commands/gsd/resume-work.md +30 -0
  99. package/commands/gsd/review-backlog.md +63 -0
  100. package/commands/gsd/review.md +42 -0
  101. package/commands/gsd/secure-phase.md +36 -0
  102. package/commands/gsd/settings.md +29 -0
  103. package/commands/gsd/ship.md +24 -0
  104. package/commands/gsd/sketch.md +60 -0
  105. package/commands/gsd/spec-phase.md +63 -0
  106. package/commands/gsd/spike.md +57 -0
  107. package/commands/gsd/stats.md +20 -0
  108. package/commands/gsd/surface.md +155 -0
  109. package/commands/gsd/testing-strategy.md +65 -0
  110. package/commands/gsd/thread.md +24 -0
  111. package/commands/gsd/ui-phase.md +35 -0
  112. package/commands/gsd/ui-review.md +33 -0
  113. package/commands/gsd/ultraplan-phase.md +34 -0
  114. package/commands/gsd/undo.md +35 -0
  115. package/commands/gsd/update.md +49 -0
  116. package/commands/gsd/validate-phase.md +36 -0
  117. package/commands/gsd/verify-work.md +39 -0
  118. package/commands/gsd/workspace.md +52 -0
  119. package/commands/gsd/workstreams.md +70 -0
  120. package/gemini-extension.json +6 -0
  121. package/gsd-core/bin/check-latest-version.cjs +161 -0
  122. package/gsd-core/bin/gsd-tools.cjs +1928 -0
  123. package/gsd-core/bin/lib/active-workstream-store.cjs +291 -0
  124. package/gsd-core/bin/lib/adr-parser.cjs +399 -0
  125. package/gsd-core/bin/lib/agent-command-router.cjs +68 -0
  126. package/gsd-core/bin/lib/artifacts.cjs +51 -0
  127. package/gsd-core/bin/lib/audit.cjs +743 -0
  128. package/gsd-core/bin/lib/check-command-router.cjs +343 -0
  129. package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
  130. package/gsd-core/bin/lib/cli-exit.cjs +42 -0
  131. package/gsd-core/bin/lib/clock.cjs +95 -0
  132. package/gsd-core/bin/lib/clusters.cjs +132 -0
  133. package/gsd-core/bin/lib/code-review-flags.cjs +59 -0
  134. package/gsd-core/bin/lib/command-aliases.cjs +809 -0
  135. package/gsd-core/bin/lib/command-arg-projection.cjs +55 -0
  136. package/gsd-core/bin/lib/command-routing-hub.cjs +300 -0
  137. package/gsd-core/bin/lib/commands.cjs +1203 -0
  138. package/gsd-core/bin/lib/config-schema.cjs +29 -0
  139. package/gsd-core/bin/lib/config-types.cjs +19 -0
  140. package/gsd-core/bin/lib/config.cjs +738 -0
  141. package/gsd-core/bin/lib/configuration.cjs +239 -0
  142. package/gsd-core/bin/lib/context-utilization.cjs +48 -0
  143. package/gsd-core/bin/lib/core.cjs +2051 -0
  144. package/gsd-core/bin/lib/decisions.cjs +118 -0
  145. package/gsd-core/bin/lib/docs.cjs +252 -0
  146. package/gsd-core/bin/lib/drift.cjs +364 -0
  147. package/gsd-core/bin/lib/fallow-runner.cjs +115 -0
  148. package/gsd-core/bin/lib/frontmatter.cjs +442 -0
  149. package/gsd-core/bin/lib/gap-checker.cjs +257 -0
  150. package/gsd-core/bin/lib/graphify.cjs +496 -0
  151. package/gsd-core/bin/lib/gsd2-import.cjs +456 -0
  152. package/gsd-core/bin/lib/init-command-router.cjs +62 -0
  153. package/gsd-core/bin/lib/init.cjs +1815 -0
  154. package/gsd-core/bin/lib/install-profiles.cjs +584 -0
  155. package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
  156. package/gsd-core/bin/lib/installer-migration-report.cjs +350 -0
  157. package/gsd-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +218 -0
  158. package/gsd-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
  159. package/gsd-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
  160. package/gsd-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
  161. package/gsd-core/bin/lib/installer-migrations.cjs +823 -0
  162. package/gsd-core/bin/lib/intel.cjs +590 -0
  163. package/gsd-core/bin/lib/learnings.cjs +270 -0
  164. package/gsd-core/bin/lib/legacy-cleanup.cjs +253 -0
  165. package/gsd-core/bin/lib/milestone.cjs +373 -0
  166. package/gsd-core/bin/lib/model-catalog.cjs +154 -0
  167. package/gsd-core/bin/lib/model-profiles.cjs +24 -0
  168. package/gsd-core/bin/lib/observability/event.cjs +51 -0
  169. package/gsd-core/bin/lib/observability/logger.cjs +146 -0
  170. package/gsd-core/bin/lib/observability/redaction.cjs +48 -0
  171. package/gsd-core/bin/lib/package-identity.cjs +35 -0
  172. package/gsd-core/bin/lib/package-legitimacy.cjs +368 -0
  173. package/gsd-core/bin/lib/phase-command-router.cjs +189 -0
  174. package/gsd-core/bin/lib/phase-lifecycle.cjs +74 -0
  175. package/gsd-core/bin/lib/phase.cjs +1307 -0
  176. package/gsd-core/bin/lib/phases-command-router.cjs +43 -0
  177. package/gsd-core/bin/lib/plan-scan.cjs +91 -0
  178. package/gsd-core/bin/lib/planning-workspace.cjs +245 -0
  179. package/gsd-core/bin/lib/profile-output.cjs +1120 -0
  180. package/gsd-core/bin/lib/profile-pipeline.cjs +517 -0
  181. package/gsd-core/bin/lib/project-root.cjs +119 -0
  182. package/gsd-core/bin/lib/prompt-budget.cjs +305 -0
  183. package/gsd-core/bin/lib/research-provider.cjs +137 -0
  184. package/gsd-core/bin/lib/research-store.cjs +167 -0
  185. package/gsd-core/bin/lib/review-reviewer-selection.cjs +121 -0
  186. package/gsd-core/bin/lib/roadmap-command-router.cjs +166 -0
  187. package/gsd-core/bin/lib/roadmap-upgrade.cjs +476 -0
  188. package/gsd-core/bin/lib/roadmap.cjs +600 -0
  189. package/gsd-core/bin/lib/runtime-artifact-layout.cjs +312 -0
  190. package/gsd-core/bin/lib/runtime-config-adapter-registry.cjs +56 -0
  191. package/gsd-core/bin/lib/runtime-homes.cjs +190 -0
  192. package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
  193. package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
  194. package/gsd-core/bin/lib/schema-detect.cjs +159 -0
  195. package/gsd-core/bin/lib/secrets.cjs +34 -0
  196. package/gsd-core/bin/lib/security.cjs +480 -0
  197. package/gsd-core/bin/lib/semver-compare.cjs +42 -0
  198. package/gsd-core/bin/lib/shell-command-projection.cjs +533 -0
  199. package/gsd-core/bin/lib/state-command-router.cjs +160 -0
  200. package/gsd-core/bin/lib/state-document.cjs +259 -0
  201. package/gsd-core/bin/lib/state.cjs +2010 -0
  202. package/gsd-core/bin/lib/surface.cjs +449 -0
  203. package/gsd-core/bin/lib/task-command-router.cjs +85 -0
  204. package/gsd-core/bin/lib/template.cjs +237 -0
  205. package/gsd-core/bin/lib/uat.cjs +297 -0
  206. package/gsd-core/bin/lib/ui-safety-gate.cjs +98 -0
  207. package/gsd-core/bin/lib/update-context.cjs +218 -0
  208. package/gsd-core/bin/lib/validate-command-router.cjs +91 -0
  209. package/gsd-core/bin/lib/validate.cjs +112 -0
  210. package/gsd-core/bin/lib/verification-command-router.cjs +31 -0
  211. package/gsd-core/bin/lib/verification.cjs +193 -0
  212. package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
  213. package/gsd-core/bin/lib/verify.cjs +1451 -0
  214. package/gsd-core/bin/lib/workstream-inventory-builder.cjs +81 -0
  215. package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
  216. package/gsd-core/bin/lib/workstream-name-policy.cjs +91 -0
  217. package/gsd-core/bin/lib/workstream.cjs +380 -0
  218. package/gsd-core/bin/lib/worktree-base-ref.cjs +325 -0
  219. package/gsd-core/bin/lib/worktree-safety.cjs +943 -0
  220. package/gsd-core/bin/shared/config-defaults.manifest.json +98 -0
  221. package/gsd-core/bin/shared/config-schema.manifest.json +192 -0
  222. package/gsd-core/bin/shared/model-catalog.json +149 -0
  223. package/gsd-core/bin/shared/runtime-aliases.manifest.json +75 -0
  224. package/gsd-core/bin/verify-reapply-patches.cjs +349 -0
  225. package/gsd-core/contexts/dev.md +21 -0
  226. package/gsd-core/contexts/research.md +22 -0
  227. package/gsd-core/contexts/review.md +23 -0
  228. package/gsd-core/references/agent-contracts.md +79 -0
  229. package/gsd-core/references/ai-evals.md +156 -0
  230. package/gsd-core/references/ai-frameworks.md +186 -0
  231. package/gsd-core/references/architecture-decision.md +74 -0
  232. package/gsd-core/references/artifact-types.md +131 -0
  233. package/gsd-core/references/auth-in-tests.md +91 -0
  234. package/gsd-core/references/autonomous-smart-discuss.md +277 -0
  235. package/gsd-core/references/checkpoints.md +814 -0
  236. package/gsd-core/references/common-bug-patterns.md +114 -0
  237. package/gsd-core/references/context-budget.md +85 -0
  238. package/gsd-core/references/continuation-format.md +253 -0
  239. package/gsd-core/references/db-test-isolation.md +54 -0
  240. package/gsd-core/references/debugger-philosophy.md +76 -0
  241. package/gsd-core/references/decimal-phase-calculation.md +64 -0
  242. package/gsd-core/references/doc-conflict-engine.md +91 -0
  243. package/gsd-core/references/domain-modeling.md +80 -0
  244. package/gsd-core/references/domain-probes.md +125 -0
  245. package/gsd-core/references/e2e-tiering.md +35 -0
  246. package/gsd-core/references/execute-mvp-tdd.md +81 -0
  247. package/gsd-core/references/executor-examples.md +110 -0
  248. package/gsd-core/references/few-shot-examples/plan-checker.md +73 -0
  249. package/gsd-core/references/few-shot-examples/verifier.md +109 -0
  250. package/gsd-core/references/flaky-test-checklist.md +22 -0
  251. package/gsd-core/references/gate-prompts.md +100 -0
  252. package/gsd-core/references/gates.md +70 -0
  253. package/gsd-core/references/git-integration.md +298 -0
  254. package/gsd-core/references/git-planning-commit.md +40 -0
  255. package/gsd-core/references/ios-scaffold.md +123 -0
  256. package/gsd-core/references/mandatory-initial-read.md +2 -0
  257. package/gsd-core/references/model-profile-resolution.md +38 -0
  258. package/gsd-core/references/model-profiles.md +245 -0
  259. package/gsd-core/references/mvp-concepts.md +49 -0
  260. package/gsd-core/references/phase-argument-parsing.md +61 -0
  261. package/gsd-core/references/planner-antipatterns.md +89 -0
  262. package/gsd-core/references/planner-chunked.md +49 -0
  263. package/gsd-core/references/planner-gap-closure.md +62 -0
  264. package/gsd-core/references/planner-graphify-auto-update.md +67 -0
  265. package/gsd-core/references/planner-human-verify-mode.md +57 -0
  266. package/gsd-core/references/planner-interface-context.md +62 -0
  267. package/gsd-core/references/planner-load-graph-context.md +36 -0
  268. package/gsd-core/references/planner-mvp-mode.md +53 -0
  269. package/gsd-core/references/planner-reviews.md +39 -0
  270. package/gsd-core/references/planner-revision.md +87 -0
  271. package/gsd-core/references/planner-source-audit.md +73 -0
  272. package/gsd-core/references/planning-config.md +473 -0
  273. package/gsd-core/references/product-discovery.md +49 -0
  274. package/gsd-core/references/project-skills-discovery.md +19 -0
  275. package/gsd-core/references/questioning.md +162 -0
  276. package/gsd-core/references/realistic-test-data.md +44 -0
  277. package/gsd-core/references/research-documentation-lookup.md +29 -0
  278. package/gsd-core/references/research-philosophy.md +29 -0
  279. package/gsd-core/references/research-verification-protocol.md +27 -0
  280. package/gsd-core/references/revision-loop.md +97 -0
  281. package/gsd-core/references/scout-codebase.md +51 -0
  282. package/gsd-core/references/skeleton-template.md +48 -0
  283. package/gsd-core/references/sketch-interactivity.md +41 -0
  284. package/gsd-core/references/sketch-theme-system.md +94 -0
  285. package/gsd-core/references/sketch-tooling.md +45 -0
  286. package/gsd-core/references/sketch-variant-patterns.md +81 -0
  287. package/gsd-core/references/spidr-splitting.md +69 -0
  288. package/gsd-core/references/tdd.md +330 -0
  289. package/gsd-core/references/test-containers.md +55 -0
  290. package/gsd-core/references/test-strategy.md +75 -0
  291. package/gsd-core/references/thinking-models-debug.md +44 -0
  292. package/gsd-core/references/thinking-models-execution.md +50 -0
  293. package/gsd-core/references/thinking-models-planning.md +62 -0
  294. package/gsd-core/references/thinking-models-research.md +50 -0
  295. package/gsd-core/references/thinking-models-verification.md +55 -0
  296. package/gsd-core/references/thinking-partner.md +96 -0
  297. package/gsd-core/references/ui-brand.md +162 -0
  298. package/gsd-core/references/universal-anti-patterns.md +63 -0
  299. package/gsd-core/references/user-profiling.md +681 -0
  300. package/gsd-core/references/user-story-template.md +58 -0
  301. package/gsd-core/references/verification-overrides.md +227 -0
  302. package/gsd-core/references/verification-patterns.md +612 -0
  303. package/gsd-core/references/verify-mvp-mode.md +85 -0
  304. package/gsd-core/references/workstream-flag.md +111 -0
  305. package/gsd-core/references/worktree-branch-check.md +38 -0
  306. package/gsd-core/references/worktree-path-safety.md +67 -0
  307. package/gsd-core/templates/AI-SPEC.md +246 -0
  308. package/gsd-core/templates/DEBUG.md +169 -0
  309. package/gsd-core/templates/README.md +77 -0
  310. package/gsd-core/templates/SECURITY.md +61 -0
  311. package/gsd-core/templates/UAT.md +265 -0
  312. package/gsd-core/templates/UI-SPEC.md +100 -0
  313. package/gsd-core/templates/VALIDATION.md +76 -0
  314. package/gsd-core/templates/adr.md +58 -0
  315. package/gsd-core/templates/claude-md.md +145 -0
  316. package/gsd-core/templates/codebase/architecture.md +255 -0
  317. package/gsd-core/templates/codebase/concerns.md +310 -0
  318. package/gsd-core/templates/codebase/conventions.md +307 -0
  319. package/gsd-core/templates/codebase/integrations.md +280 -0
  320. package/gsd-core/templates/codebase/stack.md +186 -0
  321. package/gsd-core/templates/codebase/structure.md +285 -0
  322. package/gsd-core/templates/codebase/testing.md +480 -0
  323. package/gsd-core/templates/config.json +62 -0
  324. package/gsd-core/templates/context.md +352 -0
  325. package/gsd-core/templates/continue-here.md +78 -0
  326. package/gsd-core/templates/copilot-instructions.md +7 -0
  327. package/gsd-core/templates/debug-subagent-prompt.md +91 -0
  328. package/gsd-core/templates/dev-preferences.md +21 -0
  329. package/gsd-core/templates/discovery.md +146 -0
  330. package/gsd-core/templates/discussion-log.md +63 -0
  331. package/gsd-core/templates/domain-model.md +54 -0
  332. package/gsd-core/templates/milestone-archive.md +123 -0
  333. package/gsd-core/templates/milestone.md +115 -0
  334. package/gsd-core/templates/phase-prompt.md +610 -0
  335. package/gsd-core/templates/planner-subagent-prompt.md +117 -0
  336. package/gsd-core/templates/product-brief.md +55 -0
  337. package/gsd-core/templates/project.md +186 -0
  338. package/gsd-core/templates/requirements.md +231 -0
  339. package/gsd-core/templates/research-project/ARCHITECTURE.md +204 -0
  340. package/gsd-core/templates/research-project/FEATURES.md +147 -0
  341. package/gsd-core/templates/research-project/PITFALLS.md +200 -0
  342. package/gsd-core/templates/research-project/STACK.md +120 -0
  343. package/gsd-core/templates/research-project/SUMMARY.md +170 -0
  344. package/gsd-core/templates/research.md +592 -0
  345. package/gsd-core/templates/retrospective.md +54 -0
  346. package/gsd-core/templates/roadmap.md +202 -0
  347. package/gsd-core/templates/spec.md +307 -0
  348. package/gsd-core/templates/state.md +195 -0
  349. package/gsd-core/templates/summary-complex.md +59 -0
  350. package/gsd-core/templates/summary-minimal.md +41 -0
  351. package/gsd-core/templates/summary-standard.md +48 -0
  352. package/gsd-core/templates/summary.md +248 -0
  353. package/gsd-core/templates/test-strategy.md +50 -0
  354. package/gsd-core/templates/user-profile.md +146 -0
  355. package/gsd-core/templates/user-setup.md +311 -0
  356. package/gsd-core/templates/verification-report.md +322 -0
  357. package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
  358. package/gsd-core/workflows/add-backlog.md +91 -0
  359. package/gsd-core/workflows/add-phase.md +113 -0
  360. package/gsd-core/workflows/add-tests.md +355 -0
  361. package/gsd-core/workflows/add-todo.md +161 -0
  362. package/gsd-core/workflows/ai-integration-phase.md +295 -0
  363. package/gsd-core/workflows/analyze-dependencies.md +96 -0
  364. package/gsd-core/workflows/audit-fix.md +178 -0
  365. package/gsd-core/workflows/audit-milestone.md +360 -0
  366. package/gsd-core/workflows/audit-uat.md +110 -0
  367. package/gsd-core/workflows/autonomous.md +797 -0
  368. package/gsd-core/workflows/check-todos.md +180 -0
  369. package/gsd-core/workflows/cleanup.md +195 -0
  370. package/gsd-core/workflows/code-review-fix.md +502 -0
  371. package/gsd-core/workflows/code-review.md +658 -0
  372. package/gsd-core/workflows/complete-milestone.md +855 -0
  373. package/gsd-core/workflows/debug.md +237 -0
  374. package/gsd-core/workflows/diagnose-issues.md +245 -0
  375. package/gsd-core/workflows/discover-product.md +112 -0
  376. package/gsd-core/workflows/discovery-phase.md +291 -0
  377. package/gsd-core/workflows/discuss-phase/modes/advisor.md +176 -0
  378. package/gsd-core/workflows/discuss-phase/modes/all.md +28 -0
  379. package/gsd-core/workflows/discuss-phase/modes/analyze.md +44 -0
  380. package/gsd-core/workflows/discuss-phase/modes/auto.md +57 -0
  381. package/gsd-core/workflows/discuss-phase/modes/batch.md +52 -0
  382. package/gsd-core/workflows/discuss-phase/modes/chain.md +98 -0
  383. package/gsd-core/workflows/discuss-phase/modes/default.md +141 -0
  384. package/gsd-core/workflows/discuss-phase/modes/power.md +44 -0
  385. package/gsd-core/workflows/discuss-phase/modes/text.md +55 -0
  386. package/gsd-core/workflows/discuss-phase/templates/checkpoint.json +18 -0
  387. package/gsd-core/workflows/discuss-phase/templates/context.md +136 -0
  388. package/gsd-core/workflows/discuss-phase/templates/discussion-log.md +50 -0
  389. package/gsd-core/workflows/discuss-phase-assumptions.md +675 -0
  390. package/gsd-core/workflows/discuss-phase-power.md +291 -0
  391. package/gsd-core/workflows/discuss-phase.md +499 -0
  392. package/gsd-core/workflows/do.md +111 -0
  393. package/gsd-core/workflows/docs-update.md +1176 -0
  394. package/gsd-core/workflows/edit-phase.md +295 -0
  395. package/gsd-core/workflows/eval-review.md +156 -0
  396. package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +95 -0
  397. package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
  398. package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +117 -0
  399. package/gsd-core/workflows/execute-phase.md +1752 -0
  400. package/gsd-core/workflows/execute-plan.md +526 -0
  401. package/gsd-core/workflows/explore.md +146 -0
  402. package/gsd-core/workflows/extract-learnings.md +243 -0
  403. package/gsd-core/workflows/fast.md +124 -0
  404. package/gsd-core/workflows/forensics.md +279 -0
  405. package/gsd-core/workflows/graduation.md +196 -0
  406. package/gsd-core/workflows/health.md +224 -0
  407. package/gsd-core/workflows/help/modes/brief.md +22 -0
  408. package/gsd-core/workflows/help/modes/default.md +50 -0
  409. package/gsd-core/workflows/help/modes/full.md +789 -0
  410. package/gsd-core/workflows/help/modes/topic.md +74 -0
  411. package/gsd-core/workflows/help.md +24 -0
  412. package/gsd-core/workflows/import.md +256 -0
  413. package/gsd-core/workflows/inbox.md +387 -0
  414. package/gsd-core/workflows/ingest-docs.md +340 -0
  415. package/gsd-core/workflows/insert-phase.md +152 -0
  416. package/gsd-core/workflows/list-phase-assumptions.md +178 -0
  417. package/gsd-core/workflows/list-workspaces.md +57 -0
  418. package/gsd-core/workflows/manager.md +393 -0
  419. package/gsd-core/workflows/map-codebase.md +446 -0
  420. package/gsd-core/workflows/milestone-summary.md +224 -0
  421. package/gsd-core/workflows/model-domain.md +162 -0
  422. package/gsd-core/workflows/mvp-phase.md +222 -0
  423. package/gsd-core/workflows/new-milestone.md +635 -0
  424. package/gsd-core/workflows/new-project.md +1555 -0
  425. package/gsd-core/workflows/new-workspace.md +240 -0
  426. package/gsd-core/workflows/next.md +299 -0
  427. package/gsd-core/workflows/node-repair.md +92 -0
  428. package/gsd-core/workflows/note.md +158 -0
  429. package/gsd-core/workflows/pause-work.md +244 -0
  430. package/gsd-core/workflows/plan-milestone-gaps.md +281 -0
  431. package/gsd-core/workflows/plan-phase.md +1814 -0
  432. package/gsd-core/workflows/plan-review-convergence.md +346 -0
  433. package/gsd-core/workflows/plant-seed.md +230 -0
  434. package/gsd-core/workflows/pr-branch.md +157 -0
  435. package/gsd-core/workflows/profile-user.md +453 -0
  436. package/gsd-core/workflows/progress.md +699 -0
  437. package/gsd-core/workflows/quick.md +1017 -0
  438. package/gsd-core/workflows/reapply-patches.md +426 -0
  439. package/gsd-core/workflows/recommend-architecture.md +135 -0
  440. package/gsd-core/workflows/remove-phase.md +156 -0
  441. package/gsd-core/workflows/remove-workspace.md +108 -0
  442. package/gsd-core/workflows/resume-project.md +332 -0
  443. package/gsd-core/workflows/review.md +748 -0
  444. package/gsd-core/workflows/scan.md +107 -0
  445. package/gsd-core/workflows/secure-phase.md +182 -0
  446. package/gsd-core/workflows/session-report.md +146 -0
  447. package/gsd-core/workflows/settings-advanced.md +810 -0
  448. package/gsd-core/workflows/settings-integrations.md +312 -0
  449. package/gsd-core/workflows/settings.md +566 -0
  450. package/gsd-core/workflows/ship.md +405 -0
  451. package/gsd-core/workflows/sketch-wrap-up.md +286 -0
  452. package/gsd-core/workflows/sketch.md +361 -0
  453. package/gsd-core/workflows/spec-phase.md +263 -0
  454. package/gsd-core/workflows/spike-wrap-up.md +307 -0
  455. package/gsd-core/workflows/spike.md +453 -0
  456. package/gsd-core/workflows/stats.md +80 -0
  457. package/gsd-core/workflows/sync-skills.md +182 -0
  458. package/gsd-core/workflows/testing-strategy.md +122 -0
  459. package/gsd-core/workflows/thread.md +222 -0
  460. package/gsd-core/workflows/transition.md +694 -0
  461. package/gsd-core/workflows/ui-phase.md +328 -0
  462. package/gsd-core/workflows/ui-review.md +193 -0
  463. package/gsd-core/workflows/ultraplan-phase.md +199 -0
  464. package/gsd-core/workflows/undo.md +314 -0
  465. package/gsd-core/workflows/update.md +496 -0
  466. package/gsd-core/workflows/validate-phase.md +181 -0
  467. package/gsd-core/workflows/verify-phase.md +544 -0
  468. package/gsd-core/workflows/verify-work.md +781 -0
  469. package/hooks/dist/gsd-check-update-worker.js +108 -0
  470. package/hooks/dist/gsd-check-update.js +66 -0
  471. package/hooks/dist/gsd-config-reload.js +133 -0
  472. package/hooks/dist/gsd-context-monitor.js +195 -0
  473. package/hooks/dist/gsd-cursor-post-tool.js +75 -0
  474. package/hooks/dist/gsd-cursor-session-start.js +52 -0
  475. package/hooks/dist/gsd-graphify-update.sh +158 -0
  476. package/hooks/dist/gsd-phase-boundary.sh +47 -0
  477. package/hooks/dist/gsd-prompt-guard.js +97 -0
  478. package/hooks/dist/gsd-read-guard.js +101 -0
  479. package/hooks/dist/gsd-read-injection-scanner.js +203 -0
  480. package/hooks/dist/gsd-session-state.sh +59 -0
  481. package/hooks/dist/gsd-statusline.js +566 -0
  482. package/hooks/dist/gsd-update-banner.js +138 -0
  483. package/hooks/dist/gsd-validate-commit.sh +57 -0
  484. package/hooks/dist/gsd-workflow-guard.js +167 -0
  485. package/hooks/dist/gsd-worktree-path-guard.js +169 -0
  486. package/hooks/dist/lib/git-cmd.js +150 -0
  487. package/hooks/dist/lib/gsd-graphify-rebuild.sh +65 -0
  488. package/hooks/dist/managed-hooks-registry.cjs +38 -0
  489. package/hooks/gsd-check-update-worker.js +108 -0
  490. package/hooks/gsd-check-update.js +66 -0
  491. package/hooks/gsd-config-reload.js +133 -0
  492. package/hooks/gsd-context-monitor.js +195 -0
  493. package/hooks/gsd-cursor-post-tool.js +75 -0
  494. package/hooks/gsd-cursor-session-start.js +52 -0
  495. package/hooks/gsd-graphify-update.sh +158 -0
  496. package/hooks/gsd-phase-boundary.sh +47 -0
  497. package/hooks/gsd-prompt-guard.js +97 -0
  498. package/hooks/gsd-read-guard.js +101 -0
  499. package/hooks/gsd-read-injection-scanner.js +203 -0
  500. package/hooks/gsd-session-state.sh +59 -0
  501. package/hooks/gsd-statusline.js +566 -0
  502. package/hooks/gsd-update-banner.js +138 -0
  503. package/hooks/gsd-validate-commit.sh +57 -0
  504. package/hooks/gsd-workflow-guard.js +167 -0
  505. package/hooks/gsd-worktree-path-guard.js +169 -0
  506. package/hooks/hooks.json +69 -0
  507. package/hooks/lib/git-cmd.js +150 -0
  508. package/hooks/lib/gsd-graphify-rebuild.sh +65 -0
  509. package/hooks/managed-hooks-registry.cjs +38 -0
  510. package/package.json +115 -0
  511. package/scripts/affected-tests-lib.cjs +542 -0
  512. package/scripts/audit-workflow-script-paths.cjs +73 -0
  513. package/scripts/base64-scan.sh +351 -0
  514. package/scripts/build-hooks.js +247 -0
  515. package/scripts/changeset/README.md +129 -0
  516. package/scripts/changeset/cli.cjs +590 -0
  517. package/scripts/changeset/github-release-notes.cjs +199 -0
  518. package/scripts/changeset/lint.cjs +111 -0
  519. package/scripts/changeset/new.cjs +137 -0
  520. package/scripts/changeset/parse.cjs +114 -0
  521. package/scripts/changeset/render.cjs +34 -0
  522. package/scripts/changeset/serialize.cjs +130 -0
  523. package/scripts/check-alias-drift.cjs +114 -0
  524. package/scripts/check-env.cjs +312 -0
  525. package/scripts/check-npm-integrity.cjs +215 -0
  526. package/scripts/ci-guard-runner.cjs +22 -0
  527. package/scripts/ci-prepare-test-scope.cjs +51 -0
  528. package/scripts/ci-rebase-check.cjs +86 -0
  529. package/scripts/ci-test-scope.cjs +431 -0
  530. package/scripts/command-contract-helpers.cjs +64 -0
  531. package/scripts/diff-touches-shipped-paths.cjs +155 -0
  532. package/scripts/fix-slash-commands.cjs +147 -0
  533. package/scripts/gen-inventory-manifest.cjs +115 -0
  534. package/scripts/gen-research-agents.cjs +276 -0
  535. package/scripts/generate-package-identity.cjs +125 -0
  536. package/scripts/issue-dedupe.cjs +278 -0
  537. package/scripts/lib/allowlist-ratchet.cjs +136 -0
  538. package/scripts/lib/cli-exit.cjs +56 -0
  539. package/scripts/lint-command-contract.cjs +114 -0
  540. package/scripts/lint-descriptions.cjs +87 -0
  541. package/scripts/lint-docs-required.cjs +222 -0
  542. package/scripts/lint-legacy-dir-name.cjs +160 -0
  543. package/scripts/lint-package-identity-drift.cjs +141 -0
  544. package/scripts/lint-pr-check-project-dir.cjs +99 -0
  545. package/scripts/lint-shell-command-projection-drift.cjs +62 -0
  546. package/scripts/lint-skill-deps.cjs +185 -0
  547. package/scripts/lint-test-file-count.allowlist.json +135 -0
  548. package/scripts/lint-test-file-count.cjs +246 -0
  549. package/scripts/mutation-matrix.cjs +222 -0
  550. package/scripts/pr-template-policy.cjs +268 -0
  551. package/scripts/prompt-injection-scan.sh +207 -0
  552. package/scripts/release-notes/discord-release-summary.cjs +373 -0
  553. package/scripts/release-notes/format-github-release-notes.cjs +261 -0
  554. package/scripts/release-tarball-smoke.cjs +629 -0
  555. package/scripts/research-profiles.cjs +149 -0
  556. package/scripts/run-affected-tests.cjs +7 -0
  557. package/scripts/run-cross-platform-tests.cjs +67 -0
  558. package/scripts/run-tests.cjs +315 -0
  559. package/scripts/secret-scan-lint.sh +231 -0
  560. package/scripts/secret-scan.sh +358 -0
  561. package/scripts/setup-branch-protection.sh +236 -0
  562. package/scripts/strip-prose-atrefs.cjs +106 -0
  563. package/scripts/sync-manifest-versions.cjs +119 -0
  564. package/scripts/sync-rulesets.sh +34 -0
  565. package/scripts/sync-runtime-launcher.cjs +399 -0
  566. package/scripts/test-failure-reasons.cjs +34 -0
  567. package/scripts/verify-npm-publish.cjs +240 -0
  568. package/scripts/workflow-policy.cjs +450 -0
@@ -0,0 +1,405 @@
1
+ <purpose>
2
+ Create a pull request from completed phase/milestone work, generate a rich PR body from planning artifacts, optionally run code review, and prepare for merge. Closes the plan → execute → verify → ship loop.
3
+ </purpose>
4
+
5
+ <required_reading>
6
+ Read all files referenced by the invoking prompt's execution_context before starting.
7
+ </required_reading>
8
+
9
+ <process>
10
+
11
+ <step name="initialize">
12
+ Parse arguments and load project state:
13
+
14
+ ```bash
15
+ _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "$HOME/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="$HOME/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @therocketcode/gsd-core@latest --claude --local" >&2; exit 1; fi
16
+ INIT=$(gsd_run query init.phase-op "${PHASE_ARG}")
17
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
18
+ ```
19
+
20
+ Parse from init JSON: `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `padded_phase`, `commit_docs`.
21
+
22
+ Also load config for branching strategy:
23
+ ```bash
24
+ CONFIG=$(gsd_run query state.load)
25
+ ```
26
+
27
+ Extract: `branching_strategy`, `branch_name`.
28
+
29
+ Detect base branch for PRs and merges:
30
+ ```bash
31
+ BASE_BRANCH=$(gsd_run query config-get git.base_branch 2>/dev/null || echo "")
32
+ if [ -z "$BASE_BRANCH" ] || [ "$BASE_BRANCH" = "null" ]; then
33
+ BASE_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|^refs/remotes/origin/||')
34
+ BASE_BRANCH="${BASE_BRANCH:-main}"
35
+ fi
36
+ ```
37
+ </step>
38
+
39
+ <step name="preflight_checks">
40
+ Verify the work is ready to ship:
41
+
42
+ 1. **Verification passed?**
43
+ ```bash
44
+ VERIFICATION=$(gsd_run query verification.status "${PHASE_DIR}" 2>/dev/null)
45
+ STATUS=$(printf '%s' "$VERIFICATION" | jq -r '.status' 2>/dev/null || echo "")
46
+ NEXT_ACTION=$(printf '%s' "$VERIFICATION" | jq -r '.next_action' 2>/dev/null || echo "")
47
+ NEXT_COMMAND=$(printf '%s' "$VERIFICATION" | jq -r '.next_command' 2>/dev/null || echo "")
48
+ ```
49
+ Only `passed` may ship. If `$STATUS` is `passed`, verification is complete — continue to the next preflight check. Any other value (including `gaps_found`, `human_needed`, `missing`, and `unknown`) blocks with `PHASE_VERIFICATION_INCOMPLETE`: present `$NEXT_ACTION` to the user and, when `$NEXT_COMMAND` is non-empty, show it as the command to run next. The query already handles missing files and unexpected values, so no per-status arm is needed.
50
+
51
+ 2. **Clean working tree?**
52
+ ```bash
53
+ git status --short
54
+ ```
55
+ If uncommitted changes exist: ask user to commit or stash first.
56
+
57
+ 3. **On correct branch?**
58
+ ```bash
59
+ CURRENT_BRANCH=$(git branch --show-current)
60
+ ```
61
+ If on `${BASE_BRANCH}`: warn — should be on a feature branch.
62
+ If branching_strategy is `none`: offer to create a branch now.
63
+
64
+ 4. **Remote configured?**
65
+ ```bash
66
+ git remote -v | head -2
67
+ ```
68
+ Detect `origin` remote. If no remote: error — can't create PR.
69
+
70
+ 5. **`gh` CLI available?**
71
+ ```bash
72
+ which gh && gh auth status 2>&1
73
+ ```
74
+ If `gh` not found or not authenticated: provide setup instructions and exit.
75
+ </step>
76
+
77
+ <step name="push_branch">
78
+ Push the current branch to remote:
79
+
80
+ ```bash
81
+ git push origin ${CURRENT_BRANCH} 2>&1
82
+ ```
83
+
84
+ If push fails (e.g., no upstream): set upstream:
85
+ ```bash
86
+ git push --set-upstream origin ${CURRENT_BRANCH} 2>&1
87
+ ```
88
+
89
+ Report: "Pushed `{branch}` to origin ({commit_count} commits ahead of ${BASE_BRANCH})"
90
+ </step>
91
+
92
+ <step name="generate_pr_body">
93
+ Auto-generate a rich PR body from planning artifacts:
94
+
95
+ **1. Title:**
96
+ ```
97
+ Phase {phase_number}: {phase_name}
98
+ ```
99
+ Or for milestone: `Milestone {version}: {name}`
100
+
101
+ **2. Summary section:**
102
+ Read ROADMAP.md for phase goal. Read VERIFICATION.md for verification status.
103
+
104
+ ```markdown
105
+ ## Summary
106
+
107
+ **Phase {N}: {Name}**
108
+ **Goal:** {goal from ROADMAP.md}
109
+ **Status:** Verified ✓
110
+
111
+ {One paragraph synthesized from SUMMARY.md files — what was built}
112
+ ```
113
+
114
+ **3. Changes section:**
115
+ For each SUMMARY.md in the phase directory:
116
+ ```markdown
117
+ ## Changes
118
+
119
+ ### Plan {plan_id}: {plan_name}
120
+ {one_liner from SUMMARY.md frontmatter}
121
+
122
+ **Key files:**
123
+ {key-files.created and key-files.modified from SUMMARY.md frontmatter}
124
+ ```
125
+
126
+ **4. Requirements section:**
127
+ ```markdown
128
+ ## Requirements Addressed
129
+
130
+ {REQ-IDs from plan frontmatter, linked to REQUIREMENTS.md descriptions}
131
+ ```
132
+
133
+ **5. Testing section:**
134
+ ```markdown
135
+ ## Verification
136
+
137
+ - [x] Automated verification: {pass/fail from VERIFICATION.md}
138
+ - {human verification items from VERIFICATION.md, if any}
139
+ ```
140
+
141
+ **6. Decisions section:**
142
+ ```markdown
143
+ ## Key Decisions
144
+
145
+ {Decisions from STATE.md accumulated context relevant to this phase}
146
+ ```
147
+
148
+ **7. Configured project sections:**
149
+ Read append-only project-specific PRD/PR body sections from config:
150
+
151
+ ```bash
152
+ CUSTOM_PR_SECTIONS=$(gsd_run query config-get ship.pr_body_sections --default '[]' 2>/dev/null || echo '[]')
153
+ ```
154
+
155
+ `ship.pr_body_sections` is an onboarding-time extension point for teams that need extra PRD-style sections such as `User Stories & Acceptance Criteria`, `Risks & Dependencies`, `Success Metrics`, `Release Criteria`, or `Stakeholder Review & Approval`.
156
+
157
+ Use these sections for lean/agile PRD material that should travel with the PR without making the core `/gsd:ship` body configurable:
158
+
159
+ - User stories and acceptance criteria that explain the functional increment from the user's point of view.
160
+ - Definition of Done or release criteria that make the completion standard explicit.
161
+ - Risks, dependencies, stakeholder review, and traceability notes needed by regulated or approval-heavy projects.
162
+
163
+ Rules:
164
+
165
+ - Treat configured sections as append-only. They are rendered after `Key Decisions` and cannot replace, remove, or reorder the required core sections: `Summary`, `Changes`, `Requirements Addressed`, `Verification`, and `Key Decisions`.
166
+ - Each entry must have `heading` plus at least one of `source`, `template`, or `fallback`.
167
+ - `enabled` defaults to `true`; when `enabled` is `false`, skip the section without warning. This lets onboarding seed optional sections that a project can enable later.
168
+ - `source` is a fallback chain of planning artifact headings: `PLAN.md ## Risks || VERIFICATION.md ## Manual Checks`. Allowed artifacts are `ROADMAP.md`, `PLAN.md`, `SUMMARY.md`, `VERIFICATION.md`, `STATE.md`, `REQUIREMENTS.md`, and `CONTEXT.md`.
169
+ - `template` is literal Markdown with a closed token namespace only: `{phase_number}`, `{phase_name}`, `{phase_dir}`, `{base_branch}`, `{padded_phase}`.
170
+ - `fallback` is literal Markdown used when `source` finds no content and no `template` is present.
171
+ - Omit sections whose final rendered body is empty after trimming.
172
+
173
+ Example configured sections:
174
+
175
+ ```json
176
+ [
177
+ {
178
+ "heading": "User Stories & Acceptance Criteria",
179
+ "enabled": true,
180
+ "source": "REQUIREMENTS.md ## User Stories || REQUIREMENTS.md ## Acceptance Criteria",
181
+ "fallback": "- Acceptance criteria are covered by the linked requirements and verification evidence."
182
+ },
183
+ {
184
+ "heading": "Risks & Dependencies",
185
+ "enabled": true,
186
+ "source": "PLAN.md ## Risks || PLAN.md ## Dependencies",
187
+ "fallback": "- No known high-risk rollout dependencies."
188
+ },
189
+ {
190
+ "heading": "Stakeholder Review & Approval",
191
+ "enabled": false,
192
+ "template": "- Product owner approval pending for {phase_name}."
193
+ }
194
+ ]
195
+ ```
196
+
197
+ **8. TDD Audit section:**
198
+
199
+ Reconstruct the per-commit TDD gate trail before squash-merge discards it. Walk the PR branch's own commits (merges excluded) and read each commit's `gate_status:` trailer with Git's native trailer machinery — never a raw `%B` grep, which would also match the string written in prose:
200
+
201
+ ```bash
202
+ # Anchor on the merge-base so a stale local ${BASE_BRANCH} ref cannot over-count.
203
+ RANGE_BASE=$(git merge-base "${BASE_BRANCH}" HEAD)
204
+ git log "${RANGE_BASE}..HEAD" --no-merges --reverse \
205
+ --format='%H%x1f%s%x1f%(trailers:key=gate_status,valueonly,separator=%x2c)%x1e'
206
+ ```
207
+
208
+ Records are separated by `\x1e`; the fields inside each are `\x1f`-separated — `<sha>`, `<subject>`, `<gate_status value>`.
209
+
210
+ Pair commits by their conventional-commit type (the `type:` prefix of the subject):
211
+
212
+ - A `test:` commit is the RED row. Pair it with the next following **implementation** commit — a `feat:` or `fix:` — as its **Impl commit** (the GREEN step), skipping over any intervening `refactor:`, `docs:`, or `chore:` commits so they are never mistaken for the GREEN step.
213
+ - A `refactor:`, `docs:`, or `chore:` commit that is not consumed as an Impl pairing is a standalone row with Impl commit `—`.
214
+ - A `feat:`/`fix:` commit with no preceding unpaired `test:` is a standalone row.
215
+
216
+ Surface each commit's `gate_status:` value, normalized to exactly one of `skill`, `fallback`, `exempt`, or `missing` — never the raw trailer text. A commit whose trailer is absent, whose value is none of the first three, or which carries more than one `gate_status:` trailer (ambiguous) is counted as **missing** and still listed. This section is informational; it never blocks the ship.
217
+
218
+ Harden every table cell against injection, not just subjects: escape `|` as `\|` and strip `\r`/`\n` from both commit subjects and the rendered `gate_status` value. Prefer NUL (`-z` / `%x00`) record separation, and reject any record whose fields contain the `\x1f`/`\x1e` delimiters, so an adversarial commit message cannot corrupt record or field boundaries.
219
+
220
+ ```markdown
221
+ ## TDD Audit
222
+
223
+ | Test commit | Impl commit | gate_status |
224
+ |---|---|---|
225
+ | `a1b2c3d` test: failing parser test | `e4f5g6h` feat: implement parser | skill |
226
+ | `i7j8k9l` test: failing export test | `m0n1o2p` feat: implement export | fallback |
227
+ | `q3r4s5t` refactor: extract helper | — | exempt |
228
+
229
+ Aggregate: 2 skill, 1 fallback, 1 exempt — 0 missing.
230
+ ```
231
+
232
+ This `## TDD Audit` section is the final body section — it renders after the configured `pr_body_sections`, immediately before the aggregate trailer — so the frozen core sections and the append-only configured sections both keep their existing order.
233
+
234
+ **9. Aggregate gate_status trailer (final line):**
235
+
236
+ After every other section — including any configured `pr_body_sections` — emit the audit aggregate as a single Git trailer on the **final line** of the PR body, preceded by a blank line so it parses as a valid trailer:
237
+
238
+ ```
239
+ gate_status: skill=2, fallback=1, exempt=1, missing=0
240
+ ```
241
+
242
+ Use the exact key order `skill=`, `fallback=`, `exempt=`, `missing=` so downstream tooling parses it stably. Keeping it last means a GitHub squash-merge that defaults its commit message to the PR description carries the aggregate into `${BASE_BRANCH}`, preserving the audit footprint in `git log` after the PR branch is deleted. (Best-effort: it depends on the repo's squash-message default; the in-body `## TDD Audit` section is the source of truth regardless.)
243
+ </step>
244
+
245
+ <step name="create_pr">
246
+ Create the PR using the generated body. Write the body to a temp file first so large generated PRD sections do not hit shell argument limits:
247
+
248
+ ```bash
249
+ PR_BODY_FILE=$(mktemp "${TMPDIR:-/tmp}/gsd-pr-body.XXXXXX.md")
250
+ trap 'rm -f "${PR_BODY_FILE:-}"' EXIT
251
+ printf '%s\n' "${PR_BODY}" > "${PR_BODY_FILE}"
252
+
253
+ gh pr create \
254
+ --title "Phase ${PHASE_NUMBER}: ${PHASE_NAME}" \
255
+ --body-file "${PR_BODY_FILE}" \
256
+ --base "${BASE_BRANCH}"
257
+ ```
258
+
259
+ If `--draft` flag was passed: add `--draft`.
260
+
261
+ Report: "PR #{number} created: {url}"
262
+ </step>
263
+
264
+ <step name="optional_review">
265
+
266
+ **External code review command (automated sub-step):**
267
+
268
+ Before prompting the user, check if an external review command is configured:
269
+
270
+ ```bash
271
+ REVIEW_CMD=$(gsd_run query config-get workflow.code_review_command 2>/dev/null | jq -r '.' 2>/dev/null || echo "")
272
+ ```
273
+
274
+ If `REVIEW_CMD` is non-empty and not `"null"`, run the external review:
275
+
276
+ 1. **Generate diff and stats:**
277
+ ```bash
278
+ DIFF=$(git diff ${BASE_BRANCH}...HEAD)
279
+ DIFF_STATS=$(git diff --stat ${BASE_BRANCH}...HEAD)
280
+ ```
281
+
282
+ 2. **Load phase context from STATE.md:**
283
+ ```bash
284
+ STATE_STATUS=$(gsd_run query state.load 2>/dev/null | head -20)
285
+ ```
286
+
287
+ 3. **Build review prompt and pipe to command via stdin:**
288
+ Construct a review prompt containing the diff, diff stats, and phase context, then pipe it to the configured command:
289
+ ```bash
290
+ REVIEW_PROMPT="You are reviewing a pull request.\n\nDiff stats:\n${DIFF_STATS}\n\nPhase context:\n${STATE_STATUS}\n\nFull diff:\n${DIFF}\n\nRespond with JSON: { \"verdict\": \"APPROVED\" or \"REVISE\", \"confidence\": 0-100, \"summary\": \"...\", \"issues\": [{\"severity\": \"...\", \"file\": \"...\", \"line_range\": \"...\", \"description\": \"...\", \"suggestion\": \"...\"}] }"
291
+ REVIEW_OUTPUT=$(echo "${REVIEW_PROMPT}" | timeout 120 ${REVIEW_CMD} 2>/tmp/gsd-review-stderr.log)
292
+ REVIEW_EXIT=$?
293
+ ```
294
+
295
+ 4. **Handle timeout (120s) and failure:**
296
+ If `REVIEW_EXIT` is non-zero or the command times out:
297
+ ```bash
298
+ if [ $REVIEW_EXIT -ne 0 ]; then
299
+ REVIEW_STDERR=$(cat /tmp/gsd-review-stderr.log 2>/dev/null)
300
+ echo "WARNING: External review command failed (exit ${REVIEW_EXIT}). stderr: ${REVIEW_STDERR}"
301
+ echo "Continuing with manual review flow..."
302
+ fi
303
+ ```
304
+ On failure, warn with stderr output and fall through to the manual review flow below.
305
+
306
+ 5. **Parse JSON result:**
307
+ If the command succeeded, parse the JSON output and report the verdict:
308
+ ```bash
309
+ # Parse verdict and summary from REVIEW_OUTPUT JSON
310
+ VERDICT=$(echo "${REVIEW_OUTPUT}" | node -e "
311
+ let d=''; process.stdin.on('data',c=>d+=c); process.stdin.on('end',()=>{
312
+ try { const r=JSON.parse(d); console.log(r.verdict); }
313
+ catch(e) { console.log('INVALID_JSON'); }
314
+ });
315
+ ")
316
+ ```
317
+ - If `verdict` is `"APPROVED"`: report approval with confidence and summary.
318
+ - If `verdict` is `"REVISE"`: report issues found, list each issue with severity, file, line_range, description, and suggestion.
319
+ - If JSON is invalid (`INVALID_JSON`): warn "External review returned invalid JSON" with stderr and continue.
320
+
321
+ Regardless of the external review result, fall through to the manual review options below.
322
+
323
+ ---
324
+
325
+ **Manual review options:**
326
+
327
+ Ask if user wants to trigger a code review:
328
+
329
+
330
+ **Text mode (`workflow.text_mode: true` in config or `--text` flag):** Set `TEXT_MODE=true` if `--text` is present in `$ARGUMENTS` OR `text_mode` from init JSON is `true`. When TEXT_MODE is active, replace every `AskUserQuestion` call with a plain-text numbered list and ask the user to type their choice number. This is required for non-Claude runtimes (OpenAI Codex, Gemini CLI, etc.) where `AskUserQuestion` is not available.
331
+
332
+ ```
333
+ AskUserQuestion:
334
+ question: "PR created. Run a code review before merge?"
335
+ options:
336
+ - label: "Skip review"
337
+ description: "PR is ready — merge when CI passes"
338
+ - label: "Self-review"
339
+ description: "I'll review the diff in the PR myself"
340
+ - label: "Request review"
341
+ description: "Request review from a teammate"
342
+ ```
343
+
344
+ **If "Request review":**
345
+ ```bash
346
+ gh pr edit ${PR_NUMBER} --add-reviewer "${REVIEWER}"
347
+ ```
348
+
349
+ **If "Self-review":**
350
+ Report the PR URL and suggest: "Review the diff at {url}/files"
351
+ </step>
352
+
353
+ <step name="track_shipping">
354
+ Update STATE.md to reflect the shipping action:
355
+
356
+ ```bash
357
+ gsd_run query state.update "Last Activity" "$(date +%Y-%m-%d)"
358
+ gsd_run query state.update "Status" "Phase ${PHASE_NUMBER} shipped — PR #${PR_NUMBER}"
359
+ ```
360
+
361
+ If `commit_docs` is true:
362
+ ```bash
363
+ gsd_run query commit "docs(${padded_phase}): ship phase ${PHASE_NUMBER} — PR #${PR_NUMBER}" --files .planning/STATE.md
364
+ ```
365
+ </step>
366
+
367
+ <step name="report">
368
+ ```
369
+ ───────────────────────────────────────────────────────────────
370
+
371
+ ## ✓ Phase {X}: {Name} — Shipped
372
+
373
+ PR: #{number} ({url})
374
+ Branch: {branch} → ${BASE_BRANCH}
375
+ Commits: {count}
376
+ Verification: ✓ Passed
377
+ Requirements: {N} REQ-IDs addressed
378
+
379
+ Next steps:
380
+ - Review/approve PR
381
+ - Merge when CI passes
382
+ - /gsd:complete-milestone (if last phase in milestone)
383
+ - /gsd:progress (to see what's next)
384
+
385
+ ───────────────────────────────────────────────────────────────
386
+ ```
387
+ </step>
388
+
389
+ </process>
390
+
391
+ <offer_next>
392
+ After shipping:
393
+
394
+ - /gsd:complete-milestone — if all phases in milestone are done
395
+ - /gsd:progress — see overall project state
396
+ - /gsd:execute-phase {next} — continue to next phase
397
+ </offer_next>
398
+
399
+ <success_criteria>
400
+ - [ ] Preflight checks passed (verification, clean tree, branch, remote, gh)
401
+ - [ ] Branch pushed to remote
402
+ - [ ] PR created with rich auto-generated body
403
+ - [ ] STATE.md updated with shipping status
404
+ - [ ] User knows PR number and next steps
405
+ </success_criteria>
@@ -0,0 +1,286 @@
1
+ <purpose>
2
+ Curate sketch design findings and package them into a persistent project skill for future
3
+ UI implementation. Reads from `.planning/sketches/`, writes skill to `./.claude/skills/sketch-findings-[project]/`
4
+ (project-local) and summary to `.planning/sketches/WRAP-UP-SUMMARY.md`.
5
+ Companion to `/gsd:sketch`.
6
+ </purpose>
7
+
8
+ <required_reading>
9
+ Read all files referenced by the invoking prompt's execution_context before starting.
10
+ </required_reading>
11
+
12
+ <process>
13
+
14
+ <step name="banner">
15
+ ```
16
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
17
+ GSD ► SKETCH WRAP-UP
18
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
19
+ ```
20
+ </step>
21
+
22
+ <step name="gather">
23
+ ## Gather Sketch Inventory
24
+
25
+ 1. Read `.planning/sketches/MANIFEST.md` for the design direction and reference points
26
+ 2. Glob `.planning/sketches/*/README.md` and parse YAML frontmatter from each
27
+ 3. Check if `./.claude/skills/sketch-findings-*/SKILL.md` exists for this project
28
+ - If yes: read its `processed_sketches` list and filter those out
29
+ - If no: all sketches are candidates
30
+
31
+ If no unprocessed sketches exist:
32
+ ```
33
+ No unprocessed sketches found in `.planning/sketches/`.
34
+ Run `/gsd:sketch` first to create design explorations.
35
+ ```
36
+ Exit.
37
+
38
+ Check `commit_docs` config:
39
+ ```bash
40
+ _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "$HOME/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="$HOME/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @therocketcode/gsd-core@latest --claude --local" >&2; exit 1; fi
41
+ COMMIT_DOCS=$(gsd_run query config-get commit_docs 2>/dev/null || echo "true")
42
+ ```
43
+ </step>
44
+
45
+ <step name="curate">
46
+ ## Curate Sketches One-at-a-Time
47
+
48
+ Present each unprocessed sketch in ascending order. For each sketch, show:
49
+
50
+ - **Sketch number and name**
51
+ - **Design question:** from frontmatter
52
+ - **Winner:** which variant was selected (if any)
53
+ - **Tags:** from frontmatter
54
+ - **Key decisions:** summarize what was decided visually
55
+
56
+ Then ask the user:
57
+
58
+ ╔══════════════════════════════════════════════════════════════╗
59
+ ║ CHECKPOINT: Decision Required ║
60
+ ╚══════════════════════════════════════════════════════════════╝
61
+
62
+ Sketch {NNN}: {name} — Winner: Variant {X}
63
+
64
+ {key design decisions summary}
65
+
66
+ ──────────────────────────────────────────────────────────────
67
+ → Include / Exclude / Partial / Let me look at it
68
+ ──────────────────────────────────────────────────────────────
69
+
70
+ **If "Let me look at it":**
71
+ 1. Provide: `open .planning/sketches/NNN-name/index.html`
72
+ 2. Remind them which variant won and what to look for
73
+ 3. After they've looked, return to the include/exclude/partial decision
74
+
75
+ **If "Partial":**
76
+ Ask what specifically to include or exclude from this sketch's decisions.
77
+ </step>
78
+
79
+ <step name="group">
80
+ ## Auto-Group by Design Area
81
+
82
+ After all sketches are curated:
83
+
84
+ 1. Read all included sketches' tags, names, and content
85
+ 2. Propose design-area groupings, e.g.:
86
+ - "**Layout & Navigation** — sketches 001, 004"
87
+ - "**Form Controls** — sketches 002, 005"
88
+ - "**Color & Typography** — sketches 003"
89
+ 3. Present the grouping for approval — user may merge, split, rename, or rearrange
90
+
91
+ Each group becomes one reference file in the generated skill.
92
+ </step>
93
+
94
+ <step name="skill_name">
95
+ ## Determine Output Skill Name
96
+
97
+ Derive from the project directory name: `./.claude/skills/sketch-findings-[project-dir-name]/`
98
+
99
+ If a skill already exists at that path (append mode), update in place.
100
+ </step>
101
+
102
+ <step name="copy_sources">
103
+ ## Copy Source Files
104
+
105
+ For each included sketch:
106
+
107
+ 1. Copy the winning variant's HTML file (or the full index.html with all variants) into `sources/NNN-sketch-name/`
108
+ 2. Copy the winning theme.css into `sources/themes/`
109
+ 3. Exclude node_modules, build artifacts, .DS_Store
110
+ </step>
111
+
112
+ <step name="synthesize">
113
+ ## Synthesize Reference Files
114
+
115
+ For each design-area group, write a reference file at `references/[design-area-name].md`:
116
+
117
+ ```markdown
118
+ # [Design Area Name]
119
+
120
+ ## Design Decisions
121
+ [For each validated decision: what was chosen, why it won over alternatives, the key visual properties (colors, spacing, border radius, typography)]
122
+
123
+ ## CSS Patterns
124
+ [Key CSS snippets from winning variants — layout structures, component patterns, animation patterns. Extracted and cleaned up for reference.]
125
+
126
+ ## HTML Structures
127
+ [Key HTML patterns from winning variants — page layout, component markup, navigation structures.]
128
+
129
+ ## What to Avoid
130
+ [Design directions that were tried and rejected. Why they didn't work.]
131
+
132
+ ## Origin
133
+ Synthesized from sketches: NNN, NNN
134
+ Source files available in: sources/NNN-sketch-name/
135
+ ```
136
+ </step>
137
+
138
+ <step name="write_skill">
139
+ ## Write SKILL.md
140
+
141
+ Create (or update) the generated skill's SKILL.md:
142
+
143
+ ```markdown
144
+ ---
145
+ name: sketch-findings-[project-dir-name]
146
+ description: Validated design decisions, CSS patterns, and visual direction from sketch experiments. Auto-loaded during UI implementation on [project-dir-name].
147
+ ---
148
+
149
+ <context>
150
+ ## Project: [project-dir-name]
151
+
152
+ [Design direction paragraph from MANIFEST.md]
153
+ [Reference points mentioned during intake]
154
+
155
+ Sketch sessions wrapped: [date(s)]
156
+ </context>
157
+
158
+ <design_direction>
159
+ ## Overall Direction
160
+
161
+ [Summary of the validated visual direction: palette, typography, spacing system, layout approach, interaction patterns]
162
+ </design_direction>
163
+
164
+ <findings_index>
165
+ ## Design Areas
166
+
167
+ | Area | Reference | Key Decision |
168
+ |------|-----------|--------------|
169
+ | [Name] | references/[name].md | [One-line summary] |
170
+
171
+ ## Theme
172
+
173
+ The winning theme file is at `sources/themes/default.css`.
174
+
175
+ ## Source Files
176
+
177
+ Original sketch HTML files are preserved in `sources/` for complete reference.
178
+ </findings_index>
179
+
180
+ <metadata>
181
+ ## Processed Sketches
182
+
183
+ [List of sketch numbers wrapped up]
184
+
185
+ - 001-sketch-name
186
+ - 002-sketch-name
187
+ </metadata>
188
+ ```
189
+ </step>
190
+
191
+ <step name="write_summary">
192
+ ## Write Planning Summary
193
+
194
+ Write `.planning/sketches/WRAP-UP-SUMMARY.md` for project history:
195
+
196
+ ```markdown
197
+ # Sketch Wrap-Up Summary
198
+
199
+ **Date:** [date]
200
+ **Sketches processed:** [count]
201
+ **Design areas:** [list]
202
+ **Skill output:** `./.claude/skills/sketch-findings-[project]/`
203
+
204
+ ## Included Sketches
205
+ | # | Name | Winner | Design Area |
206
+ |---|------|--------|-------------|
207
+
208
+ ## Excluded Sketches
209
+ | # | Name | Reason |
210
+ |---|------|--------|
211
+
212
+ ## Design Direction
213
+ [consolidated design direction summary]
214
+
215
+ ## Key Decisions
216
+ [layout, palette, typography, spacing, interaction patterns]
217
+ ```
218
+ </step>
219
+
220
+ <step name="update_claude_md">
221
+ ## Update Project CLAUDE.md
222
+
223
+ Add an auto-load routing line:
224
+
225
+ ```
226
+ - **Sketch findings for [project]** (design decisions, CSS patterns, visual direction) → `Skill("sketch-findings-[project-dir-name]")`
227
+ ```
228
+
229
+ If this routing line already exists (append mode), leave it as-is.
230
+ </step>
231
+
232
+ <step name="commit">
233
+ Commit all artifacts (if `COMMIT_DOCS` is true):
234
+
235
+ ```bash
236
+ gsd_run query commit "docs(sketch-wrap-up): package [N] sketch findings into project skill" --files .planning/sketches/WRAP-UP-SUMMARY.md
237
+ ```
238
+ </step>
239
+
240
+ <step name="report">
241
+ ```
242
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
243
+ GSD ► SKETCH WRAP-UP COMPLETE ✓
244
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
245
+
246
+ **Curated:** {N} sketches ({included} included, {excluded} excluded)
247
+ **Design areas:** {list}
248
+ **Skill:** `./.claude/skills/sketch-findings-[project]/`
249
+ **Summary:** `.planning/sketches/WRAP-UP-SUMMARY.md`
250
+ **CLAUDE.md:** routing line added
251
+
252
+ The sketch-findings skill will auto-load when building the UI.
253
+ ```
254
+
255
+ ───────────────────────────────────────────────────────────────
256
+
257
+ ## ▶ Next Up
258
+
259
+ **Explore frontier sketches** — see what else is worth sketching based on what we've explored
260
+
261
+ `/gsd:sketch` (run with no argument — its frontier mode analyzes the sketch landscape and proposes consistency and frontier sketches)
262
+
263
+ ───────────────────────────────────────────────────────────────
264
+
265
+ **Also available:**
266
+ - `/gsd:plan-phase` — start building the real UI
267
+ - `/gsd:ui-phase` — generate a UI design contract for a frontend phase
268
+ - `/gsd:sketch [idea]` — sketch a specific new design area
269
+ - `/gsd:explore` — continue exploring
270
+
271
+ ───────────────────────────────────────────────────────────────
272
+ </step>
273
+
274
+ </process>
275
+
276
+ <success_criteria>
277
+ - [ ] Every unprocessed sketch presented for individual curation
278
+ - [ ] Design-area grouping proposed and approved
279
+ - [ ] Sketch-findings skill exists at `./.claude/skills/` with SKILL.md, references/, sources/
280
+ - [ ] Winning theme.css copied into skill sources
281
+ - [ ] Reference files contain design decisions, CSS patterns, HTML structures, anti-patterns
282
+ - [ ] `.planning/sketches/WRAP-UP-SUMMARY.md` written for project history
283
+ - [ ] Project CLAUDE.md has auto-load routing line
284
+ - [ ] Summary presented
285
+ - [ ] Next-step options presented (including frontier sketch exploration via `/gsd:sketch`)
286
+ </success_criteria>