@opengsd/gsd-core 1.2.0-rc.1

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 (503) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja-JP.md +870 -0
  3. package/README.ko-KR.md +861 -0
  4. package/README.md +301 -0
  5. package/README.pt-BR.md +492 -0
  6. package/README.zh-CN.md +842 -0
  7. package/agents/gsd-advisor-researcher.md +127 -0
  8. package/agents/gsd-ai-researcher.md +133 -0
  9. package/agents/gsd-assumptions-analyzer.md +105 -0
  10. package/agents/gsd-code-fixer.md +668 -0
  11. package/agents/gsd-code-reviewer.md +387 -0
  12. package/agents/gsd-codebase-mapper.md +853 -0
  13. package/agents/gsd-debug-session-manager.md +314 -0
  14. package/agents/gsd-debugger.md +1452 -0
  15. package/agents/gsd-doc-classifier.md +168 -0
  16. package/agents/gsd-doc-synthesizer.md +204 -0
  17. package/agents/gsd-doc-verifier.md +217 -0
  18. package/agents/gsd-doc-writer.md +615 -0
  19. package/agents/gsd-domain-researcher.md +153 -0
  20. package/agents/gsd-eval-auditor.md +191 -0
  21. package/agents/gsd-eval-planner.md +154 -0
  22. package/agents/gsd-executor.md +772 -0
  23. package/agents/gsd-framework-selector.md +160 -0
  24. package/agents/gsd-integration-checker.md +470 -0
  25. package/agents/gsd-intel-updater.md +342 -0
  26. package/agents/gsd-nyquist-auditor.md +203 -0
  27. package/agents/gsd-pattern-mapper.md +335 -0
  28. package/agents/gsd-phase-researcher.md +928 -0
  29. package/agents/gsd-plan-checker.md +978 -0
  30. package/agents/gsd-planner.md +1218 -0
  31. package/agents/gsd-project-researcher.md +677 -0
  32. package/agents/gsd-research-synthesizer.md +255 -0
  33. package/agents/gsd-roadmapper.md +688 -0
  34. package/agents/gsd-security-auditor.md +155 -0
  35. package/agents/gsd-ui-auditor.md +495 -0
  36. package/agents/gsd-ui-checker.md +309 -0
  37. package/agents/gsd-ui-researcher.md +380 -0
  38. package/agents/gsd-user-profiler.md +171 -0
  39. package/agents/gsd-verifier.md +917 -0
  40. package/bin/install.js +10936 -0
  41. package/bin/lib/ui-safety-gate.cjs +107 -0
  42. package/commands/gsd/add-tests.md +42 -0
  43. package/commands/gsd/ai-integration-phase.md +37 -0
  44. package/commands/gsd/audit-fix.md +34 -0
  45. package/commands/gsd/audit-milestone.md +37 -0
  46. package/commands/gsd/audit-uat.md +24 -0
  47. package/commands/gsd/autonomous.md +46 -0
  48. package/commands/gsd/capture.md +62 -0
  49. package/commands/gsd/cleanup.md +24 -0
  50. package/commands/gsd/code-review.md +59 -0
  51. package/commands/gsd/complete-milestone.md +143 -0
  52. package/commands/gsd/config.md +56 -0
  53. package/commands/gsd/debug.md +52 -0
  54. package/commands/gsd/discuss-phase.md +76 -0
  55. package/commands/gsd/docs-update.md +49 -0
  56. package/commands/gsd/eval-review.md +33 -0
  57. package/commands/gsd/execute-phase.md +64 -0
  58. package/commands/gsd/explore.md +27 -0
  59. package/commands/gsd/extract-learnings.md +23 -0
  60. package/commands/gsd/fast.md +31 -0
  61. package/commands/gsd/forensics.md +57 -0
  62. package/commands/gsd/graphify.md +199 -0
  63. package/commands/gsd/health.md +31 -0
  64. package/commands/gsd/help.md +28 -0
  65. package/commands/gsd/import.md +41 -0
  66. package/commands/gsd/inbox.md +39 -0
  67. package/commands/gsd/ingest-docs.md +42 -0
  68. package/commands/gsd/manager.md +45 -0
  69. package/commands/gsd/map-codebase.md +83 -0
  70. package/commands/gsd/milestone-summary.md +51 -0
  71. package/commands/gsd/mvp-phase.md +45 -0
  72. package/commands/gsd/new-milestone.md +45 -0
  73. package/commands/gsd/new-project.md +47 -0
  74. package/commands/gsd/ns-context.md +23 -0
  75. package/commands/gsd/ns-ideate.md +24 -0
  76. package/commands/gsd/ns-manage.md +29 -0
  77. package/commands/gsd/ns-project.md +22 -0
  78. package/commands/gsd/ns-review.md +26 -0
  79. package/commands/gsd/ns-workflow.md +28 -0
  80. package/commands/gsd/pause-work.md +43 -0
  81. package/commands/gsd/phase.md +56 -0
  82. package/commands/gsd/plan-phase.md +62 -0
  83. package/commands/gsd/plan-review-convergence.md +59 -0
  84. package/commands/gsd/pr-branch.md +26 -0
  85. package/commands/gsd/profile-user.md +46 -0
  86. package/commands/gsd/progress.md +47 -0
  87. package/commands/gsd/quick.md +174 -0
  88. package/commands/gsd/resume-work.md +30 -0
  89. package/commands/gsd/review-backlog.md +63 -0
  90. package/commands/gsd/review.md +41 -0
  91. package/commands/gsd/secure-phase.md +36 -0
  92. package/commands/gsd/settings.md +29 -0
  93. package/commands/gsd/ship.md +24 -0
  94. package/commands/gsd/sketch.md +60 -0
  95. package/commands/gsd/spec-phase.md +63 -0
  96. package/commands/gsd/spike.md +57 -0
  97. package/commands/gsd/stats.md +19 -0
  98. package/commands/gsd/surface.md +155 -0
  99. package/commands/gsd/thread.md +24 -0
  100. package/commands/gsd/ui-phase.md +35 -0
  101. package/commands/gsd/ui-review.md +33 -0
  102. package/commands/gsd/ultraplan-phase.md +34 -0
  103. package/commands/gsd/undo.md +35 -0
  104. package/commands/gsd/update.md +48 -0
  105. package/commands/gsd/validate-phase.md +36 -0
  106. package/commands/gsd/verify-work.md +39 -0
  107. package/commands/gsd/workspace.md +52 -0
  108. package/commands/gsd/workstreams.md +70 -0
  109. package/get-shit-done/bin/check-latest-version.cjs +106 -0
  110. package/get-shit-done/bin/gsd-tools.cjs +1676 -0
  111. package/get-shit-done/bin/lib/active-workstream-store.cjs +302 -0
  112. package/get-shit-done/bin/lib/adr-parser.cjs +394 -0
  113. package/get-shit-done/bin/lib/agent-command-router.cjs +65 -0
  114. package/get-shit-done/bin/lib/artifacts.cjs +53 -0
  115. package/get-shit-done/bin/lib/audit.cjs +755 -0
  116. package/get-shit-done/bin/lib/check-command-router.cjs +333 -0
  117. package/get-shit-done/bin/lib/cjs-command-router-adapter.cjs +118 -0
  118. package/get-shit-done/bin/lib/clock.cjs +96 -0
  119. package/get-shit-done/bin/lib/clusters.cjs +135 -0
  120. package/get-shit-done/bin/lib/code-review-flags.cjs +74 -0
  121. package/get-shit-done/bin/lib/command-aliases.cjs +815 -0
  122. package/get-shit-done/bin/lib/command-arg-projection.cjs +62 -0
  123. package/get-shit-done/bin/lib/command-routing-hub.cjs +388 -0
  124. package/get-shit-done/bin/lib/commands.cjs +1188 -0
  125. package/get-shit-done/bin/lib/config-schema.cjs +31 -0
  126. package/get-shit-done/bin/lib/config.cjs +728 -0
  127. package/get-shit-done/bin/lib/configuration.cjs +248 -0
  128. package/get-shit-done/bin/lib/context-utilization.cjs +47 -0
  129. package/get-shit-done/bin/lib/core.cjs +2121 -0
  130. package/get-shit-done/bin/lib/decisions.cjs +116 -0
  131. package/get-shit-done/bin/lib/docs.cjs +270 -0
  132. package/get-shit-done/bin/lib/drift.cjs +388 -0
  133. package/get-shit-done/bin/lib/fallow-runner.cjs +109 -0
  134. package/get-shit-done/bin/lib/frontmatter.cjs +389 -0
  135. package/get-shit-done/bin/lib/gap-checker.cjs +205 -0
  136. package/get-shit-done/bin/lib/graphify.cjs +592 -0
  137. package/get-shit-done/bin/lib/gsd2-import.cjs +514 -0
  138. package/get-shit-done/bin/lib/init-command-router.cjs +58 -0
  139. package/get-shit-done/bin/lib/init.cjs +2112 -0
  140. package/get-shit-done/bin/lib/install-profiles.cjs +603 -0
  141. package/get-shit-done/bin/lib/installer-migration-authoring.cjs +117 -0
  142. package/get-shit-done/bin/lib/installer-migration-report.cjs +354 -0
  143. package/get-shit-done/bin/lib/installer-migrations/000-first-time-baseline.cjs +220 -0
  144. package/get-shit-done/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +41 -0
  145. package/get-shit-done/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +80 -0
  146. package/get-shit-done/bin/lib/installer-migrations.cjs +778 -0
  147. package/get-shit-done/bin/lib/intel.cjs +708 -0
  148. package/get-shit-done/bin/lib/learnings.cjs +421 -0
  149. package/get-shit-done/bin/lib/milestone.cjs +314 -0
  150. package/get-shit-done/bin/lib/model-catalog.cjs +212 -0
  151. package/get-shit-done/bin/lib/model-profiles.cjs +31 -0
  152. package/get-shit-done/bin/lib/observability/event.cjs +82 -0
  153. package/get-shit-done/bin/lib/observability/logger.cjs +174 -0
  154. package/get-shit-done/bin/lib/observability/redaction.cjs +50 -0
  155. package/get-shit-done/bin/lib/package-identity.cjs +31 -0
  156. package/get-shit-done/bin/lib/phase-command-router.cjs +191 -0
  157. package/get-shit-done/bin/lib/phase-lifecycle.cjs +80 -0
  158. package/get-shit-done/bin/lib/phase.cjs +1607 -0
  159. package/get-shit-done/bin/lib/phases-command-router.cjs +39 -0
  160. package/get-shit-done/bin/lib/plan-scan.cjs +97 -0
  161. package/get-shit-done/bin/lib/planning-workspace.cjs +238 -0
  162. package/get-shit-done/bin/lib/profile-output.cjs +1141 -0
  163. package/get-shit-done/bin/lib/profile-pipeline.cjs +539 -0
  164. package/get-shit-done/bin/lib/project-root.cjs +112 -0
  165. package/get-shit-done/bin/lib/prompt-budget.cjs +399 -0
  166. package/get-shit-done/bin/lib/review-reviewer-selection.cjs +125 -0
  167. package/get-shit-done/bin/lib/roadmap-command-router.cjs +28 -0
  168. package/get-shit-done/bin/lib/roadmap.cjs +650 -0
  169. package/get-shit-done/bin/lib/runtime-artifact-layout.cjs +301 -0
  170. package/get-shit-done/bin/lib/runtime-homes.cjs +222 -0
  171. package/get-shit-done/bin/lib/runtime-name-policy.cjs +83 -0
  172. package/get-shit-done/bin/lib/runtime-slash.cjs +112 -0
  173. package/get-shit-done/bin/lib/schema-detect.cjs +165 -0
  174. package/get-shit-done/bin/lib/secrets.cjs +32 -0
  175. package/get-shit-done/bin/lib/security.cjs +600 -0
  176. package/get-shit-done/bin/lib/semver-compare.cjs +35 -0
  177. package/get-shit-done/bin/lib/shell-command-projection.cjs +500 -0
  178. package/get-shit-done/bin/lib/state-command-router.cjs +252 -0
  179. package/get-shit-done/bin/lib/state-document.cjs +263 -0
  180. package/get-shit-done/bin/lib/state.cjs +2038 -0
  181. package/get-shit-done/bin/lib/surface.cjs +470 -0
  182. package/get-shit-done/bin/lib/task-command-router.cjs +81 -0
  183. package/get-shit-done/bin/lib/template.cjs +228 -0
  184. package/get-shit-done/bin/lib/uat.cjs +289 -0
  185. package/get-shit-done/bin/lib/update-context.cjs +209 -0
  186. package/get-shit-done/bin/lib/validate-command-router.cjs +83 -0
  187. package/get-shit-done/bin/lib/validate.cjs +92 -0
  188. package/get-shit-done/bin/lib/verify-command-router.cjs +40 -0
  189. package/get-shit-done/bin/lib/verify.cjs +1511 -0
  190. package/get-shit-done/bin/lib/workstream-inventory-builder.cjs +74 -0
  191. package/get-shit-done/bin/lib/workstream-inventory.cjs +146 -0
  192. package/get-shit-done/bin/lib/workstream-name-policy.cjs +94 -0
  193. package/get-shit-done/bin/lib/workstream.cjs +389 -0
  194. package/get-shit-done/bin/lib/worktree-safety.cjs +985 -0
  195. package/get-shit-done/bin/shared/config-defaults.manifest.json +97 -0
  196. package/get-shit-done/bin/shared/config-schema.manifest.json +175 -0
  197. package/get-shit-done/bin/shared/model-catalog.json +122 -0
  198. package/get-shit-done/bin/shared/runtime-aliases.manifest.json +75 -0
  199. package/get-shit-done/bin/verify-reapply-patches.cjs +352 -0
  200. package/get-shit-done/contexts/dev.md +21 -0
  201. package/get-shit-done/contexts/research.md +22 -0
  202. package/get-shit-done/contexts/review.md +23 -0
  203. package/get-shit-done/references/agent-contracts.md +79 -0
  204. package/get-shit-done/references/ai-evals.md +156 -0
  205. package/get-shit-done/references/ai-frameworks.md +186 -0
  206. package/get-shit-done/references/artifact-types.md +131 -0
  207. package/get-shit-done/references/autonomous-smart-discuss.md +277 -0
  208. package/get-shit-done/references/checkpoints.md +814 -0
  209. package/get-shit-done/references/common-bug-patterns.md +114 -0
  210. package/get-shit-done/references/context-budget.md +85 -0
  211. package/get-shit-done/references/continuation-format.md +253 -0
  212. package/get-shit-done/references/debugger-philosophy.md +76 -0
  213. package/get-shit-done/references/decimal-phase-calculation.md +64 -0
  214. package/get-shit-done/references/doc-conflict-engine.md +91 -0
  215. package/get-shit-done/references/domain-probes.md +125 -0
  216. package/get-shit-done/references/execute-mvp-tdd.md +81 -0
  217. package/get-shit-done/references/executor-examples.md +110 -0
  218. package/get-shit-done/references/few-shot-examples/plan-checker.md +73 -0
  219. package/get-shit-done/references/few-shot-examples/verifier.md +109 -0
  220. package/get-shit-done/references/gate-prompts.md +100 -0
  221. package/get-shit-done/references/gates.md +70 -0
  222. package/get-shit-done/references/git-integration.md +298 -0
  223. package/get-shit-done/references/git-planning-commit.md +40 -0
  224. package/get-shit-done/references/ios-scaffold.md +123 -0
  225. package/get-shit-done/references/mandatory-initial-read.md +2 -0
  226. package/get-shit-done/references/model-profile-resolution.md +38 -0
  227. package/get-shit-done/references/model-profiles.md +245 -0
  228. package/get-shit-done/references/mvp-concepts.md +49 -0
  229. package/get-shit-done/references/phase-argument-parsing.md +61 -0
  230. package/get-shit-done/references/planner-antipatterns.md +89 -0
  231. package/get-shit-done/references/planner-chunked.md +49 -0
  232. package/get-shit-done/references/planner-gap-closure.md +62 -0
  233. package/get-shit-done/references/planner-graphify-auto-update.md +67 -0
  234. package/get-shit-done/references/planner-human-verify-mode.md +57 -0
  235. package/get-shit-done/references/planner-interface-context.md +62 -0
  236. package/get-shit-done/references/planner-mvp-mode.md +53 -0
  237. package/get-shit-done/references/planner-reviews.md +39 -0
  238. package/get-shit-done/references/planner-revision.md +87 -0
  239. package/get-shit-done/references/planner-source-audit.md +73 -0
  240. package/get-shit-done/references/planning-config.md +471 -0
  241. package/get-shit-done/references/project-skills-discovery.md +19 -0
  242. package/get-shit-done/references/questioning.md +162 -0
  243. package/get-shit-done/references/revision-loop.md +97 -0
  244. package/get-shit-done/references/scout-codebase.md +51 -0
  245. package/get-shit-done/references/skeleton-template.md +48 -0
  246. package/get-shit-done/references/sketch-interactivity.md +41 -0
  247. package/get-shit-done/references/sketch-theme-system.md +94 -0
  248. package/get-shit-done/references/sketch-tooling.md +45 -0
  249. package/get-shit-done/references/sketch-variant-patterns.md +81 -0
  250. package/get-shit-done/references/spidr-splitting.md +69 -0
  251. package/get-shit-done/references/tdd.md +330 -0
  252. package/get-shit-done/references/thinking-models-debug.md +44 -0
  253. package/get-shit-done/references/thinking-models-execution.md +50 -0
  254. package/get-shit-done/references/thinking-models-planning.md +62 -0
  255. package/get-shit-done/references/thinking-models-research.md +50 -0
  256. package/get-shit-done/references/thinking-models-verification.md +55 -0
  257. package/get-shit-done/references/thinking-partner.md +96 -0
  258. package/get-shit-done/references/ui-brand.md +160 -0
  259. package/get-shit-done/references/universal-anti-patterns.md +63 -0
  260. package/get-shit-done/references/user-profiling.md +681 -0
  261. package/get-shit-done/references/user-story-template.md +58 -0
  262. package/get-shit-done/references/verification-overrides.md +227 -0
  263. package/get-shit-done/references/verification-patterns.md +612 -0
  264. package/get-shit-done/references/verify-mvp-mode.md +85 -0
  265. package/get-shit-done/references/workstream-flag.md +111 -0
  266. package/get-shit-done/references/worktree-path-safety.md +89 -0
  267. package/get-shit-done/templates/AI-SPEC.md +246 -0
  268. package/get-shit-done/templates/DEBUG.md +169 -0
  269. package/get-shit-done/templates/README.md +77 -0
  270. package/get-shit-done/templates/SECURITY.md +61 -0
  271. package/get-shit-done/templates/UAT.md +265 -0
  272. package/get-shit-done/templates/UI-SPEC.md +100 -0
  273. package/get-shit-done/templates/VALIDATION.md +76 -0
  274. package/get-shit-done/templates/claude-md.md +145 -0
  275. package/get-shit-done/templates/codebase/architecture.md +255 -0
  276. package/get-shit-done/templates/codebase/concerns.md +310 -0
  277. package/get-shit-done/templates/codebase/conventions.md +307 -0
  278. package/get-shit-done/templates/codebase/integrations.md +280 -0
  279. package/get-shit-done/templates/codebase/stack.md +186 -0
  280. package/get-shit-done/templates/codebase/structure.md +285 -0
  281. package/get-shit-done/templates/codebase/testing.md +480 -0
  282. package/get-shit-done/templates/config.json +62 -0
  283. package/get-shit-done/templates/context.md +352 -0
  284. package/get-shit-done/templates/continue-here.md +78 -0
  285. package/get-shit-done/templates/copilot-instructions.md +7 -0
  286. package/get-shit-done/templates/debug-subagent-prompt.md +91 -0
  287. package/get-shit-done/templates/dev-preferences.md +21 -0
  288. package/get-shit-done/templates/discovery.md +146 -0
  289. package/get-shit-done/templates/discussion-log.md +63 -0
  290. package/get-shit-done/templates/milestone-archive.md +123 -0
  291. package/get-shit-done/templates/milestone.md +115 -0
  292. package/get-shit-done/templates/phase-prompt.md +610 -0
  293. package/get-shit-done/templates/planner-subagent-prompt.md +117 -0
  294. package/get-shit-done/templates/project.md +186 -0
  295. package/get-shit-done/templates/requirements.md +231 -0
  296. package/get-shit-done/templates/research-project/ARCHITECTURE.md +204 -0
  297. package/get-shit-done/templates/research-project/FEATURES.md +147 -0
  298. package/get-shit-done/templates/research-project/PITFALLS.md +200 -0
  299. package/get-shit-done/templates/research-project/STACK.md +120 -0
  300. package/get-shit-done/templates/research-project/SUMMARY.md +170 -0
  301. package/get-shit-done/templates/research.md +592 -0
  302. package/get-shit-done/templates/retrospective.md +54 -0
  303. package/get-shit-done/templates/roadmap.md +202 -0
  304. package/get-shit-done/templates/spec.md +307 -0
  305. package/get-shit-done/templates/state.md +195 -0
  306. package/get-shit-done/templates/summary-complex.md +59 -0
  307. package/get-shit-done/templates/summary-minimal.md +41 -0
  308. package/get-shit-done/templates/summary-standard.md +48 -0
  309. package/get-shit-done/templates/summary.md +248 -0
  310. package/get-shit-done/templates/user-profile.md +146 -0
  311. package/get-shit-done/templates/user-setup.md +311 -0
  312. package/get-shit-done/templates/verification-report.md +322 -0
  313. package/get-shit-done/workflows/_runtime-launcher.snippet.sh +1 -0
  314. package/get-shit-done/workflows/add-backlog.md +91 -0
  315. package/get-shit-done/workflows/add-phase.md +113 -0
  316. package/get-shit-done/workflows/add-tests.md +355 -0
  317. package/get-shit-done/workflows/add-todo.md +161 -0
  318. package/get-shit-done/workflows/ai-integration-phase.md +295 -0
  319. package/get-shit-done/workflows/analyze-dependencies.md +96 -0
  320. package/get-shit-done/workflows/audit-fix.md +178 -0
  321. package/get-shit-done/workflows/audit-milestone.md +358 -0
  322. package/get-shit-done/workflows/audit-uat.md +110 -0
  323. package/get-shit-done/workflows/autonomous.md +795 -0
  324. package/get-shit-done/workflows/check-todos.md +180 -0
  325. package/get-shit-done/workflows/cleanup.md +155 -0
  326. package/get-shit-done/workflows/code-review-fix.md +502 -0
  327. package/get-shit-done/workflows/code-review.md +656 -0
  328. package/get-shit-done/workflows/complete-milestone.md +855 -0
  329. package/get-shit-done/workflows/debug.md +232 -0
  330. package/get-shit-done/workflows/diagnose-issues.md +241 -0
  331. package/get-shit-done/workflows/discovery-phase.md +291 -0
  332. package/get-shit-done/workflows/discuss-phase/modes/advisor.md +176 -0
  333. package/get-shit-done/workflows/discuss-phase/modes/all.md +28 -0
  334. package/get-shit-done/workflows/discuss-phase/modes/analyze.md +44 -0
  335. package/get-shit-done/workflows/discuss-phase/modes/auto.md +57 -0
  336. package/get-shit-done/workflows/discuss-phase/modes/batch.md +52 -0
  337. package/get-shit-done/workflows/discuss-phase/modes/chain.md +98 -0
  338. package/get-shit-done/workflows/discuss-phase/modes/default.md +141 -0
  339. package/get-shit-done/workflows/discuss-phase/modes/power.md +44 -0
  340. package/get-shit-done/workflows/discuss-phase/modes/text.md +55 -0
  341. package/get-shit-done/workflows/discuss-phase/templates/checkpoint.json +18 -0
  342. package/get-shit-done/workflows/discuss-phase/templates/context.md +136 -0
  343. package/get-shit-done/workflows/discuss-phase/templates/discussion-log.md +50 -0
  344. package/get-shit-done/workflows/discuss-phase-assumptions.md +675 -0
  345. package/get-shit-done/workflows/discuss-phase-power.md +291 -0
  346. package/get-shit-done/workflows/discuss-phase.md +499 -0
  347. package/get-shit-done/workflows/do.md +111 -0
  348. package/get-shit-done/workflows/docs-update.md +1162 -0
  349. package/get-shit-done/workflows/edit-phase.md +295 -0
  350. package/get-shit-done/workflows/eval-review.md +156 -0
  351. package/get-shit-done/workflows/execute-phase/steps/codebase-drift-gate.md +82 -0
  352. package/get-shit-done/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
  353. package/get-shit-done/workflows/execute-phase/steps/post-merge-gate.md +117 -0
  354. package/get-shit-done/workflows/execute-phase.md +1709 -0
  355. package/get-shit-done/workflows/execute-plan.md +526 -0
  356. package/get-shit-done/workflows/explore.md +144 -0
  357. package/get-shit-done/workflows/extract-learnings.md +243 -0
  358. package/get-shit-done/workflows/fast.md +124 -0
  359. package/get-shit-done/workflows/forensics.md +279 -0
  360. package/get-shit-done/workflows/graduation.md +196 -0
  361. package/get-shit-done/workflows/health.md +224 -0
  362. package/get-shit-done/workflows/help/modes/brief.md +22 -0
  363. package/get-shit-done/workflows/help/modes/default.md +50 -0
  364. package/get-shit-done/workflows/help/modes/full.md +784 -0
  365. package/get-shit-done/workflows/help/modes/topic.md +74 -0
  366. package/get-shit-done/workflows/help.md +24 -0
  367. package/get-shit-done/workflows/import.md +254 -0
  368. package/get-shit-done/workflows/inbox.md +387 -0
  369. package/get-shit-done/workflows/ingest-docs.md +339 -0
  370. package/get-shit-done/workflows/insert-phase.md +152 -0
  371. package/get-shit-done/workflows/list-phase-assumptions.md +178 -0
  372. package/get-shit-done/workflows/list-workspaces.md +57 -0
  373. package/get-shit-done/workflows/manager.md +393 -0
  374. package/get-shit-done/workflows/map-codebase.md +444 -0
  375. package/get-shit-done/workflows/milestone-summary.md +224 -0
  376. package/get-shit-done/workflows/mvp-phase.md +222 -0
  377. package/get-shit-done/workflows/new-milestone.md +635 -0
  378. package/get-shit-done/workflows/new-project.md +1555 -0
  379. package/get-shit-done/workflows/new-workspace.md +240 -0
  380. package/get-shit-done/workflows/next.md +299 -0
  381. package/get-shit-done/workflows/node-repair.md +92 -0
  382. package/get-shit-done/workflows/note.md +158 -0
  383. package/get-shit-done/workflows/pause-work.md +244 -0
  384. package/get-shit-done/workflows/plan-milestone-gaps.md +281 -0
  385. package/get-shit-done/workflows/plan-phase.md +1809 -0
  386. package/get-shit-done/workflows/plan-review-convergence.md +346 -0
  387. package/get-shit-done/workflows/plant-seed.md +230 -0
  388. package/get-shit-done/workflows/pr-branch.md +157 -0
  389. package/get-shit-done/workflows/profile-user.md +453 -0
  390. package/get-shit-done/workflows/progress.md +699 -0
  391. package/get-shit-done/workflows/quick.md +1039 -0
  392. package/get-shit-done/workflows/reapply-patches.md +426 -0
  393. package/get-shit-done/workflows/remove-phase.md +156 -0
  394. package/get-shit-done/workflows/remove-workspace.md +108 -0
  395. package/get-shit-done/workflows/resume-project.md +332 -0
  396. package/get-shit-done/workflows/review.md +623 -0
  397. package/get-shit-done/workflows/scan.md +105 -0
  398. package/get-shit-done/workflows/secure-phase.md +180 -0
  399. package/get-shit-done/workflows/session-report.md +146 -0
  400. package/get-shit-done/workflows/settings-advanced.md +620 -0
  401. package/get-shit-done/workflows/settings-integrations.md +312 -0
  402. package/get-shit-done/workflows/settings.md +552 -0
  403. package/get-shit-done/workflows/ship.md +356 -0
  404. package/get-shit-done/workflows/sketch-wrap-up.md +286 -0
  405. package/get-shit-done/workflows/sketch.md +361 -0
  406. package/get-shit-done/workflows/spec-phase.md +262 -0
  407. package/get-shit-done/workflows/spike-wrap-up.md +307 -0
  408. package/get-shit-done/workflows/spike.md +453 -0
  409. package/get-shit-done/workflows/stats.md +80 -0
  410. package/get-shit-done/workflows/sync-skills.md +182 -0
  411. package/get-shit-done/workflows/thread.md +222 -0
  412. package/get-shit-done/workflows/transition.md +694 -0
  413. package/get-shit-done/workflows/ui-phase.md +328 -0
  414. package/get-shit-done/workflows/ui-review.md +193 -0
  415. package/get-shit-done/workflows/ultraplan-phase.md +199 -0
  416. package/get-shit-done/workflows/undo.md +314 -0
  417. package/get-shit-done/workflows/update.md +443 -0
  418. package/get-shit-done/workflows/validate-phase.md +179 -0
  419. package/get-shit-done/workflows/verify-phase.md +544 -0
  420. package/get-shit-done/workflows/verify-work.md +781 -0
  421. package/hooks/dist/gsd-check-update-worker.js +95 -0
  422. package/hooks/dist/gsd-check-update.js +64 -0
  423. package/hooks/dist/gsd-context-monitor.js +195 -0
  424. package/hooks/dist/gsd-graphify-update.sh +158 -0
  425. package/hooks/dist/gsd-phase-boundary.sh +47 -0
  426. package/hooks/dist/gsd-prompt-guard.js +97 -0
  427. package/hooks/dist/gsd-read-guard.js +101 -0
  428. package/hooks/dist/gsd-read-injection-scanner.js +203 -0
  429. package/hooks/dist/gsd-session-state.sh +59 -0
  430. package/hooks/dist/gsd-statusline.js +548 -0
  431. package/hooks/dist/gsd-update-banner.js +134 -0
  432. package/hooks/dist/gsd-validate-commit.sh +57 -0
  433. package/hooks/dist/gsd-workflow-guard.js +166 -0
  434. package/hooks/dist/lib/git-cmd.js +150 -0
  435. package/hooks/dist/lib/gsd-graphify-rebuild.sh +65 -0
  436. package/hooks/gsd-check-update-worker.js +95 -0
  437. package/hooks/gsd-check-update.js +64 -0
  438. package/hooks/gsd-context-monitor.js +195 -0
  439. package/hooks/gsd-graphify-update.sh +158 -0
  440. package/hooks/gsd-phase-boundary.sh +47 -0
  441. package/hooks/gsd-prompt-guard.js +97 -0
  442. package/hooks/gsd-read-guard.js +101 -0
  443. package/hooks/gsd-read-injection-scanner.js +203 -0
  444. package/hooks/gsd-session-state.sh +59 -0
  445. package/hooks/gsd-statusline.js +548 -0
  446. package/hooks/gsd-update-banner.js +134 -0
  447. package/hooks/gsd-validate-commit.sh +57 -0
  448. package/hooks/gsd-workflow-guard.js +166 -0
  449. package/hooks/lib/git-cmd.js +150 -0
  450. package/hooks/lib/gsd-graphify-rebuild.sh +65 -0
  451. package/hooks/managed-hooks-registry.cjs +34 -0
  452. package/package.json +102 -0
  453. package/scripts/affected-tests-lib.cjs +541 -0
  454. package/scripts/audit-workflow-script-paths.cjs +73 -0
  455. package/scripts/base64-scan.sh +339 -0
  456. package/scripts/build-hooks.js +236 -0
  457. package/scripts/changeset/README.md +129 -0
  458. package/scripts/changeset/cli.cjs +392 -0
  459. package/scripts/changeset/github-release-notes.cjs +199 -0
  460. package/scripts/changeset/lint.cjs +110 -0
  461. package/scripts/changeset/new.cjs +137 -0
  462. package/scripts/changeset/parse.cjs +114 -0
  463. package/scripts/changeset/render.cjs +34 -0
  464. package/scripts/changeset/serialize.cjs +130 -0
  465. package/scripts/check-alias-drift.cjs +108 -0
  466. package/scripts/check-env.cjs +302 -0
  467. package/scripts/check-npm-integrity.cjs +209 -0
  468. package/scripts/ci-guard-runner.cjs +16 -0
  469. package/scripts/ci-prepare-test-scope.cjs +46 -0
  470. package/scripts/ci-rebase-check.cjs +85 -0
  471. package/scripts/ci-test-scope.cjs +302 -0
  472. package/scripts/command-contract-helpers.cjs +64 -0
  473. package/scripts/diff-touches-shipped-paths.cjs +147 -0
  474. package/scripts/fix-slash-commands.cjs +147 -0
  475. package/scripts/gen-inventory-manifest.cjs +109 -0
  476. package/scripts/generate-package-identity.cjs +104 -0
  477. package/scripts/lint-command-contract.cjs +108 -0
  478. package/scripts/lint-descriptions.cjs +83 -0
  479. package/scripts/lint-docs-required.cjs +222 -0
  480. package/scripts/lint-no-source-grep-extras.cjs +81 -0
  481. package/scripts/lint-no-source-grep.cjs +174 -0
  482. package/scripts/lint-package-identity-drift.cjs +141 -0
  483. package/scripts/lint-pr-check-project-dir.cjs +98 -0
  484. package/scripts/lint-shared-module-handsync.cjs +388 -0
  485. package/scripts/lint-shell-command-projection-drift.cjs +57 -0
  486. package/scripts/lint-skill-deps.cjs +180 -0
  487. package/scripts/lint-test-file-count.allowlist.json +36 -0
  488. package/scripts/lint-test-file-count.cjs +190 -0
  489. package/scripts/pr-template-policy.cjs +268 -0
  490. package/scripts/prompt-injection-scan.sh +203 -0
  491. package/scripts/release-tarball-smoke.cjs +627 -0
  492. package/scripts/run-affected-tests.cjs +6 -0
  493. package/scripts/run-cross-platform-tests.cjs +63 -0
  494. package/scripts/run-tests.cjs +282 -0
  495. package/scripts/secret-scan-lint.sh +231 -0
  496. package/scripts/secret-scan.sh +358 -0
  497. package/scripts/setup-branch-protection.sh +236 -0
  498. package/scripts/shared-module-handsync-allowlist.json +183 -0
  499. package/scripts/strip-prose-atrefs.cjs +106 -0
  500. package/scripts/sync-rulesets.sh +34 -0
  501. package/scripts/sync-runtime-launcher.cjs +402 -0
  502. package/scripts/test-failure-reasons.cjs +34 -0
  503. package/scripts/workflow-policy.cjs +450 -0
@@ -0,0 +1,91 @@
1
+ # Add Backlog Item Workflow
2
+
3
+ Invoked by `/gsd:capture --backlog` (`commands/gsd/capture.md`).
4
+
5
+ Adds an idea to the ROADMAP.md backlog parking lot using 999.x numbering. Backlog items
6
+ are unsequenced ideas that aren't ready for active planning — they live outside the normal
7
+ phase sequence and accumulate context over time.
8
+
9
+ <process>
10
+
11
+ ## Step 1: Read ROADMAP.md
12
+
13
+ Check for existing backlog entries:
14
+
15
+ ```bash
16
+ cat .planning/ROADMAP.md
17
+ ```
18
+
19
+ ## Step 2: Find next backlog number
20
+
21
+ ```bash
22
+ _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}/get-shit-done/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/get-shit-done/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/get-shit-done/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/get-shit-done/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="$HOME/.claude/get-shit-done/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 @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi
23
+ NEXT=$(gsd_run query phase.next-decimal 999 --raw)
24
+ ```
25
+
26
+ If no 999.x phases exist yet, `phase.next-decimal` returns `999.1`. Sparse numbering
27
+ is fine (e.g. 999.1, 999.3) — always use `phase.next-decimal`, never guess.
28
+
29
+ ## Step 3: Write ROADMAP entry
30
+
31
+ **Write the ROADMAP entry BEFORE creating the directory.** Directory existence is a
32
+ reliable indicator that the phase is already registered, which prevents false duplicate
33
+ detection in any hook that checks for existing 999.x directories (#2280).
34
+
35
+ Add under a `## Backlog` section. If the section doesn't exist, create it at the end
36
+ of ROADMAP.md:
37
+
38
+ ```markdown
39
+ ## Backlog
40
+
41
+ ### Phase {NEXT}: {description} (BACKLOG)
42
+
43
+ **Goal:** [Captured for future planning]
44
+ **Requirements:** TBD
45
+ **Plans:** 0 plans
46
+
47
+ Plans:
48
+ - [ ] TBD (promote with /gsd:review-backlog when ready)
49
+ ```
50
+
51
+ ## Step 4: Create the phase directory
52
+
53
+ Apply the `project_code` prefix (if set in `.planning/config.json`) so the backlog directory name is consistent with all other phase-creation paths:
54
+
55
+ ```bash
56
+ SLUG=$(gsd_run query generate-slug "$ARGUMENTS" --raw)
57
+ PROJECT_CODE=$(gsd_run query config-get project_code --raw 2>/dev/null || echo "")
58
+ PREFIX=$([ -n "$PROJECT_CODE" ] && echo "${PROJECT_CODE}-" || echo "")
59
+ PHASE_DIR=".planning/phases/${PREFIX}${NEXT}-${SLUG}"
60
+ mkdir -p "${PHASE_DIR}"
61
+ touch "${PHASE_DIR}/.gitkeep"
62
+ ```
63
+
64
+ ## Step 5: Commit
65
+
66
+ ```bash
67
+ gsd_run query commit "docs: add backlog item ${NEXT} — ${ARGUMENTS}" --files .planning/ROADMAP.md "${PHASE_DIR}/.gitkeep"
68
+ ```
69
+
70
+ ## Step 6: Report
71
+
72
+ ```
73
+ ## 📋 Backlog Item Added
74
+
75
+ Phase {NEXT}: {description}
76
+ Directory: {PHASE_DIR}/
77
+
78
+ This item lives in the backlog parking lot.
79
+ Use /gsd:discuss-phase {NEXT} to explore it further.
80
+ Use /gsd:review-backlog to promote items to active milestone.
81
+ ```
82
+
83
+ </process>
84
+
85
+ <notes>
86
+ - 999.x numbering keeps backlog items out of the active phase sequence
87
+ - Phase directories are created immediately so /gsd:discuss-phase and /gsd:plan-phase work on them
88
+ - No `Depends on:` field — backlog items are unsequenced by definition
89
+ - Sparse numbering is fine (999.1, 999.3) — always uses next-decimal
90
+ - Promote backlog items to the active milestone with /gsd:review-backlog
91
+ </notes>
@@ -0,0 +1,113 @@
1
+ <purpose>
2
+ Add a new integer phase to the end of the current milestone in the roadmap. Automatically calculates next phase number, creates phase directory, and updates roadmap structure.
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="parse_arguments">
12
+ Parse the command arguments:
13
+ - All arguments become the phase description
14
+ - Example: `/gsd-add-phase Add authentication` → description = "Add authentication"
15
+ - Example: `/gsd-add-phase Fix critical performance issues` → description = "Fix critical performance issues"
16
+
17
+ If no arguments provided:
18
+
19
+ ```
20
+ ERROR: Phase description required
21
+ Usage: /gsd-add-phase <description>
22
+ Example: /gsd-add-phase Add authentication system
23
+ ```
24
+
25
+ Exit.
26
+ </step>
27
+
28
+ <step name="init_context">
29
+ Load phase operation context:
30
+
31
+ ```bash
32
+ _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}/get-shit-done/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/get-shit-done/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/get-shit-done/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/get-shit-done/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="$HOME/.claude/get-shit-done/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 @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi
33
+ INIT=$(gsd_run query init.phase-op "0")
34
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
35
+ ```
36
+
37
+ Check `roadmap_exists` from init JSON. If false:
38
+ ```
39
+ ERROR: No roadmap found (.planning/ROADMAP.md)
40
+ Run /gsd:new-project to initialize.
41
+ ```
42
+ Exit.
43
+ </step>
44
+
45
+ <step name="add_phase">
46
+ **Delegate the phase addition to `gsd-tools.cjs query phase.add`:**
47
+
48
+ ```bash
49
+ RESULT=$(gsd_run query phase.add "${description}")
50
+ ```
51
+
52
+ The CLI handles:
53
+ - Finding the highest existing integer phase number
54
+ - Calculating next phase number (max + 1)
55
+ - Generating slug from description
56
+ - Creating the phase directory (`.planning/phases/{NN}-{slug}/`)
57
+ - Inserting the phase entry into ROADMAP.md with Goal, Depends on, and Plans sections
58
+
59
+ Extract from result: `phase_number`, `padded`, `name`, `slug`, `directory`.
60
+ </step>
61
+
62
+ <step name="update_project_state">
63
+ Update STATE.md to reflect the new phase:
64
+
65
+ 1. Read `.planning/STATE.md`
66
+ 2. Under "## Accumulated Context" → "### Roadmap Evolution" add entry:
67
+ ```
68
+ - Phase {N} added: {description}
69
+ ```
70
+
71
+ If "Roadmap Evolution" section doesn't exist, create it.
72
+ </step>
73
+
74
+ <step name="completion">
75
+ Present completion summary:
76
+
77
+ ```
78
+ Phase {N} added to current milestone:
79
+ - Description: {description}
80
+ - Directory: .planning/phases/{phase-num}-{slug}/
81
+ - Status: Not planned yet
82
+
83
+ Roadmap updated: .planning/ROADMAP.md
84
+
85
+ ---
86
+
87
+ ## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
88
+
89
+ **Phase {N}: {description}**
90
+
91
+ `/clear` then:
92
+
93
+ `/gsd:plan-phase {N}`
94
+
95
+ ---
96
+
97
+ **Also available:**
98
+ - `/gsd-add-phase <description>` — add another phase
99
+ - Review roadmap
100
+
101
+ ---
102
+ ```
103
+ </step>
104
+
105
+ </process>
106
+
107
+ <success_criteria>
108
+ - [ ] `gsd-tools.cjs query phase.add` executed successfully
109
+ - [ ] Phase directory created
110
+ - [ ] Roadmap updated with new phase entry
111
+ - [ ] STATE.md updated with roadmap evolution note
112
+ - [ ] User informed of next steps
113
+ </success_criteria>
@@ -0,0 +1,355 @@
1
+ <purpose>
2
+ Generate unit and E2E tests for a completed phase based on its SUMMARY.md, CONTEXT.md, and implementation. Classifies each changed file into TDD (unit), E2E (browser), or Skip categories, presents a test plan for user approval, then generates tests following RED-GREEN conventions.
3
+
4
+ Users currently hand-craft `/gsd:quick` prompts for test generation after each phase. This workflow standardizes the process with proper classification, quality gates, and gap reporting.
5
+ </purpose>
6
+
7
+ <required_reading>
8
+ Read all files referenced by the invoking prompt's execution_context before starting.
9
+ </required_reading>
10
+
11
+ <process>
12
+
13
+ <step name="parse_arguments">
14
+ Parse `$ARGUMENTS` for:
15
+ - Phase number (integer, decimal, or letter-suffix) → store as `$PHASE_ARG`
16
+ - Remaining text after phase number → store as `$EXTRA_INSTRUCTIONS` (optional)
17
+
18
+ Example: `/gsd:add-tests 12 focus on edge cases` → `$PHASE_ARG=12`, `$EXTRA_INSTRUCTIONS="focus on edge cases"`
19
+
20
+ If no phase argument provided:
21
+
22
+ ```
23
+ ERROR: Phase number required
24
+ Usage: /gsd:add-tests <phase> [additional instructions]
25
+ Example: /gsd:add-tests 12
26
+ Example: /gsd:add-tests 12 focus on edge cases in the pricing module
27
+ ```
28
+
29
+ Exit.
30
+ </step>
31
+
32
+ <step name="init_context">
33
+ Load phase operation context:
34
+
35
+ ```bash
36
+ _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}/get-shit-done/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/get-shit-done/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/get-shit-done/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/get-shit-done/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="$HOME/.claude/get-shit-done/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 @opengsd/gsd-core@latest --claude --local" >&2; exit 1; fi
37
+ INIT=$(gsd_run query init.phase-op "${PHASE_ARG}")
38
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
39
+ ```
40
+
41
+ Extract from init JSON: `phase_dir`, `phase_number`, `phase_name`.
42
+
43
+ Verify the phase directory exists. If not:
44
+ ```
45
+ ERROR: Phase directory not found for phase ${PHASE_ARG}
46
+ Ensure the phase exists in .planning/phases/
47
+ ```
48
+ Exit.
49
+
50
+ Read the phase artifacts (in order of priority):
51
+ 1. `${phase_dir}/*-SUMMARY.md` — what was implemented, files changed
52
+ 2. `${phase_dir}/CONTEXT.md` — acceptance criteria, decisions
53
+ 3. `${phase_dir}/*-VERIFICATION.md` — user-verified scenarios (if UAT was done)
54
+
55
+ If no SUMMARY.md exists:
56
+ ```
57
+ ERROR: No SUMMARY.md found for phase ${PHASE_ARG}
58
+ This command works on completed phases. Run /gsd:execute-phase first.
59
+ ```
60
+ Exit.
61
+
62
+ Present banner:
63
+ ```
64
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
65
+ GSD ► ADD TESTS — Phase ${phase_number}: ${phase_name}
66
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
67
+ ```
68
+ </step>
69
+
70
+ <step name="analyze_implementation">
71
+ Extract the list of files modified by the phase from SUMMARY.md ("Files Changed" or equivalent section).
72
+
73
+ For each file, classify into one of three categories:
74
+
75
+ | Category | Criteria | Test Type |
76
+ |----------|----------|-----------|
77
+ | **TDD** | Pure functions where `expect(fn(input)).toBe(output)` is writable | Unit tests |
78
+ | **E2E** | UI behavior verifiable by browser automation | Playwright/E2E tests |
79
+ | **Skip** | Not meaningfully testable or already covered | None |
80
+
81
+ **TDD classification — apply when:**
82
+ - Business logic: calculations, pricing, tax rules, validation
83
+ - Data transformations: mapping, filtering, aggregation, formatting
84
+ - Parsers: CSV, JSON, XML, custom format parsing
85
+ - Validators: input validation, schema validation, business rules
86
+ - State machines: status transitions, workflow steps
87
+ - Utilities: string manipulation, date handling, number formatting
88
+
89
+ **E2E classification — apply when:**
90
+ - Keyboard shortcuts: key bindings, modifier keys, chord sequences
91
+ - Navigation: page transitions, routing, breadcrumbs, back/forward
92
+ - Form interactions: submit, validation errors, field focus, autocomplete
93
+ - Selection: row selection, multi-select, shift-click ranges
94
+ - Drag and drop: reordering, moving between containers
95
+ - Modal dialogs: open, close, confirm, cancel
96
+ - Data grids: sorting, filtering, inline editing, column resize
97
+
98
+ **Skip classification — apply when:**
99
+ - UI layout/styling: CSS classes, visual appearance, responsive breakpoints
100
+ - Configuration: config files, environment variables, feature flags
101
+ - Glue code: dependency injection setup, middleware registration, routing tables
102
+ - Migrations: database migrations, schema changes
103
+ - Simple CRUD: basic create/read/update/delete with no business logic
104
+ - Type definitions: records, DTOs, interfaces with no logic
105
+
106
+ Read each file to verify classification. Don't classify based on filename alone.
107
+ </step>
108
+
109
+ <step name="present_classification">
110
+ Present the classification to the user for confirmation before proceeding:
111
+
112
+
113
+ **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.
114
+
115
+ ```
116
+ AskUserQuestion(
117
+ header: "Test Classification",
118
+ question: |
119
+ ## Files classified for testing
120
+
121
+ ### TDD (Unit Tests) — {N} files
122
+ {list of files with brief reason}
123
+
124
+ ### E2E (Browser Tests) — {M} files
125
+ {list of files with brief reason}
126
+
127
+ ### Skip — {K} files
128
+ {list of files with brief reason}
129
+
130
+ {if $EXTRA_INSTRUCTIONS: "Additional instructions: ${EXTRA_INSTRUCTIONS}"}
131
+
132
+ How would you like to proceed?
133
+ options:
134
+ - "Approve and generate test plan"
135
+ - "Adjust classification (I'll specify changes)"
136
+ - "Cancel"
137
+ )
138
+ ```
139
+
140
+ If user selects "Adjust classification": apply their changes and re-present.
141
+ If user selects "Cancel": exit gracefully.
142
+ </step>
143
+
144
+ <step name="discover_test_structure">
145
+ Before generating the test plan, discover the project's existing test structure:
146
+
147
+ ```bash
148
+ # Find existing test directories
149
+ find . -type d -name "*test*" -o -name "*spec*" -o -name "*__tests__*" 2>/dev/null | head -20
150
+ # Find existing test files for convention matching
151
+ find . -type f \( -name "*.test.*" -o -name "*.spec.*" -o -name "*Tests.fs" -o -name "*Test.fs" \) 2>/dev/null | head -20
152
+ # Check for test runners
153
+ ls package.json *.sln 2>/dev/null || true
154
+ ```
155
+
156
+ Identify:
157
+ - Test directory structure (where unit tests live, where E2E tests live)
158
+ - Naming conventions (`.test.ts`, `.spec.ts`, `*Tests.fs`, etc.)
159
+ - Test runner commands (how to execute unit tests, how to execute E2E tests)
160
+ - Test framework (xUnit, NUnit, Jest, Playwright, etc.)
161
+
162
+ If test structure is ambiguous, ask the user:
163
+ ```
164
+ AskUserQuestion(
165
+ header: "Test Structure",
166
+ question: "I found multiple test locations. Where should I create tests?",
167
+ options: [list discovered locations]
168
+ )
169
+ ```
170
+ </step>
171
+
172
+ <step name="generate_test_plan">
173
+ For each approved file, create a detailed test plan.
174
+
175
+ **For TDD files**, plan tests following RED-GREEN-REFACTOR:
176
+ 1. Identify testable functions/methods in the file
177
+ 2. For each function: list input scenarios, expected outputs, edge cases
178
+ 3. Note: since code already exists, tests may pass immediately — that's OK, but verify they test the RIGHT behavior
179
+
180
+ **For E2E files**, plan tests following RED-GREEN gates:
181
+ 1. Identify user scenarios from CONTEXT.md/VERIFICATION.md
182
+ 2. For each scenario: describe the user action, expected outcome, assertions
183
+ 3. Note: RED gate means confirming the test would fail if the feature were broken
184
+
185
+ Present the complete test plan:
186
+
187
+ ```
188
+ AskUserQuestion(
189
+ header: "Test Plan",
190
+ question: |
191
+ ## Test Generation Plan
192
+
193
+ ### Unit Tests ({N} tests across {M} files)
194
+ {for each file: test file path, list of test cases}
195
+
196
+ ### E2E Tests ({P} tests across {Q} files)
197
+ {for each file: test file path, list of test scenarios}
198
+
199
+ ### Test Commands
200
+ - Unit: {discovered test command}
201
+ - E2E: {discovered e2e command}
202
+
203
+ Ready to generate?
204
+ options:
205
+ - "Generate all"
206
+ - "Cherry-pick (I'll specify which)"
207
+ - "Adjust plan"
208
+ )
209
+ ```
210
+
211
+ If "Cherry-pick": ask user which tests to include.
212
+ If "Adjust plan": apply changes and re-present.
213
+ </step>
214
+
215
+ <step name="execute_tdd_generation">
216
+ For each approved TDD test:
217
+
218
+ 1. **Create test file** following discovered project conventions (directory, naming, imports)
219
+
220
+ 2. **Write test** with clear arrange/act/assert structure:
221
+ ```
222
+ // Arrange — set up inputs and expected outputs
223
+ // Act — call the function under test
224
+ // Assert — verify the output matches expectations
225
+ ```
226
+
227
+ 3. **Run the test**:
228
+ ```bash
229
+ {discovered test command}
230
+ ```
231
+
232
+ 4. **Evaluate result:**
233
+ - **Test passes**: Good — the implementation satisfies the test. Verify the test checks meaningful behavior (not just that it compiles).
234
+ - **Test fails with assertion error**: This may be a genuine bug discovered by the test. Flag it:
235
+ ```
236
+ ⚠️ Potential bug found: {test name}
237
+ Expected: {expected}
238
+ Actual: {actual}
239
+ File: {implementation file}
240
+ ```
241
+ Do NOT fix the implementation — this is a test-generation command, not a fix command. Record the finding.
242
+ - **Test fails with error (import, syntax, etc.)**: This is a test error. Fix the test and re-run.
243
+ </step>
244
+
245
+ <step name="execute_e2e_generation">
246
+ For each approved E2E test:
247
+
248
+ 1. **Check for existing tests** covering the same scenario:
249
+ ```bash
250
+ grep -r "{scenario keyword}" {e2e test directory} 2>/dev/null || true
251
+ ```
252
+ If found, extend rather than duplicate.
253
+
254
+ 2. **Create test file** targeting the user scenario from CONTEXT.md/VERIFICATION.md
255
+
256
+ 3. **Run the E2E test**:
257
+ ```bash
258
+ {discovered e2e command}
259
+ ```
260
+
261
+ 4. **Evaluate result:**
262
+ - **GREEN (passes)**: Record success
263
+ - **RED (fails)**: Determine if it's a test issue or a genuine application bug. Flag bugs:
264
+ ```
265
+ ⚠️ E2E failure: {test name}
266
+ Scenario: {description}
267
+ Error: {error message}
268
+ ```
269
+ - **Cannot run**: Report blocker. Do NOT mark as complete.
270
+ ```
271
+ 🛑 E2E blocker: {reason tests cannot run}
272
+ ```
273
+
274
+ **No-skip rule:** If E2E tests cannot execute (missing dependencies, environment issues), report the blocker and mark the test as incomplete. Never mark success without actually running the test.
275
+ </step>
276
+
277
+ <step name="summary_and_commit">
278
+ Create a test coverage report and present to user:
279
+
280
+ ```
281
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
282
+ GSD ► TEST GENERATION COMPLETE
283
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
284
+
285
+ ## Results
286
+
287
+ | Category | Generated | Passing | Failing | Blocked |
288
+ |----------|-----------|---------|---------|---------|
289
+ | Unit | {N} | {n1} | {n2} | {n3} |
290
+ | E2E | {M} | {m1} | {m2} | {m3} |
291
+
292
+ ## Files Created/Modified
293
+ {list of test files with paths}
294
+
295
+ ## Coverage Gaps
296
+ {areas that couldn't be tested and why}
297
+
298
+ ## Bugs Discovered
299
+ {any assertion failures that indicate implementation bugs}
300
+ ```
301
+
302
+ Record test generation in project state:
303
+ ```bash
304
+ gsd_run query state-snapshot
305
+ ```
306
+
307
+ If there are passing tests to commit:
308
+
309
+ ```bash
310
+ git add {test files}
311
+ git commit -m "test(phase-${phase_number}): add unit and E2E tests from add-tests command"
312
+ ```
313
+
314
+ Present next steps:
315
+
316
+ ```
317
+ ---
318
+
319
+ ## ▶ Next Up — [${PROJECT_CODE}] ${PROJECT_TITLE}
320
+
321
+ {if bugs discovered:}
322
+ **Fix discovered bugs:** `/gsd:quick fix the {N} test failures discovered in phase ${phase_number}`
323
+
324
+ {if blocked tests:}
325
+ **Resolve test blockers:** {description of what's needed}
326
+
327
+ {otherwise:}
328
+ **All tests passing!** Phase ${phase_number} is fully tested.
329
+
330
+ ---
331
+
332
+ **Also available:**
333
+ - `/gsd:add-tests {next_phase}` — test another phase
334
+ - `/gsd:verify-work {phase_number}` — run UAT verification
335
+
336
+ ---
337
+ ```
338
+ </step>
339
+
340
+ </process>
341
+
342
+ <success_criteria>
343
+ - [ ] Phase artifacts loaded (SUMMARY.md, CONTEXT.md, optionally VERIFICATION.md)
344
+ - [ ] All changed files classified into TDD/E2E/Skip categories
345
+ - [ ] Classification presented to user and approved
346
+ - [ ] Project test structure discovered (directories, conventions, runners)
347
+ - [ ] Test plan presented to user and approved
348
+ - [ ] TDD tests generated with arrange/act/assert structure
349
+ - [ ] E2E tests generated targeting user scenarios
350
+ - [ ] All tests executed — no untested tests marked as passing
351
+ - [ ] Bugs discovered by tests flagged (not fixed)
352
+ - [ ] Test files committed with proper message
353
+ - [ ] Coverage gaps documented
354
+ - [ ] Next steps presented to user
355
+ </success_criteria>