@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,526 @@
1
+ <purpose>
2
+ Execute a phase prompt (PLAN.md) and create the outcome summary (SUMMARY.md).
3
+ </purpose>
4
+
5
+ <required_reading>
6
+ Read STATE.md before any operation to load project context.
7
+ Read config.json for planning behavior settings.
8
+
9
+ @~/.claude/get-shit-done/references/git-integration.md
10
+ </required_reading>
11
+
12
+ <atomic_close_out_invariant>
13
+ For each executed plan, the only complete close-out order is:
14
+ `production-code commit(s) -> SUMMARY commit -> STATE/ROADMAP update`.
15
+
16
+ The only legal half-state is mid-production-commits while the executor is still
17
+ actively working. Once production commits for a plan exist, returning without a
18
+ committed SUMMARY.md is an illegal partial-plan state. The next execute-phase
19
+ resume must detect that condition before dispatching another executor.
20
+ </atomic_close_out_invariant>
21
+
22
+ <available_agent_types>
23
+ Valid GSD subagent types (use exact names — do not fall back to 'general-purpose'):
24
+ - gsd-executor — Executes plan tasks, commits, creates SUMMARY.md
25
+ </available_agent_types>
26
+
27
+ <process>
28
+
29
+ <step name="init_context" priority="first">
30
+ Load execution context (paths only to minimize orchestrator context):
31
+
32
+ ```bash
33
+ _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
34
+ INIT=$(gsd_run query init.execute-phase "${PHASE}")
35
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
36
+ ```
37
+
38
+ Extract from init JSON: `executor_model`, `commit_docs`, `sub_repos`, `phase_dir`, `phase_number`, `plans`, `summaries`, `incomplete_plans`, `state_path`, `config_path`.
39
+
40
+ If `.planning/` missing: error.
41
+ </step>
42
+
43
+ <step name="identify_plan">
44
+ ```bash
45
+ # Use plans/summaries from INIT JSON, or list files
46
+ (ls .planning/phases/XX-name/*-PLAN.md 2>/dev/null || true) | sort
47
+ (ls .planning/phases/XX-name/*-SUMMARY.md 2>/dev/null || true) | sort
48
+ ```
49
+
50
+ Find first PLAN without matching SUMMARY. Decimal phases supported (`01.1-hotfix/`):
51
+
52
+ ```bash
53
+ PHASE=$(echo "$PLAN_PATH" | grep -oE '[0-9]+(\.[0-9]+)?-[0-9]+')
54
+ # config settings can be fetched via gsd-tools.cjs query config-get if needed
55
+ ```
56
+
57
+ <if mode="yolo">
58
+ Auto-approve: `⚡ Execute {phase}-{plan}-PLAN.md [Plan X of Y for Phase Z]` → parse_segments.
59
+ </if>
60
+
61
+ <if mode="interactive" OR="custom with gates.execute_next_plan true">
62
+ Present plan identification, wait for confirmation.
63
+ </if>
64
+ </step>
65
+
66
+ <step name="record_start_time">
67
+ ```bash
68
+ PLAN_START_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
69
+ PLAN_START_EPOCH=$(date +%s)
70
+ ```
71
+ </step>
72
+
73
+ <step name="parse_segments">
74
+ ```bash
75
+ # Count tasks — match <task tag at any indentation level
76
+ TASK_COUNT=$(grep -cE '^\s*<task[[:space:]>]' .planning/phases/XX-name/{phase}-{plan}-PLAN.md 2>/dev/null || echo "0")
77
+ INLINE_THRESHOLD=$(gsd_run query config-get workflow.inline_plan_threshold 2>/dev/null || echo "2")
78
+ grep -n "type=\"checkpoint" .planning/phases/XX-name/{phase}-{plan}-PLAN.md
79
+ ```
80
+
81
+ **Primary routing: task count threshold (#1979)**
82
+
83
+ If `INLINE_THRESHOLD > 0` AND `TASK_COUNT <= INLINE_THRESHOLD`: Use Pattern C (inline) regardless of checkpoint type. Small plans execute faster inline — avoids ~14K token subagent spawn overhead and preserves prompt cache. Configure threshold via `workflow.inline_plan_threshold` (default: 2, set to `0` to always spawn subagents).
84
+
85
+ Otherwise: Apply checkpoint-based routing below.
86
+
87
+ **Checkpoint-based routing (plans with > threshold tasks):**
88
+
89
+ | Checkpoints | Pattern | Execution |
90
+ |-------------|---------|-----------|
91
+ | None | A (autonomous) | Single subagent: full plan + SUMMARY + commit |
92
+ | Verify-only | B (segmented) | Segments between checkpoints. After none/human-verify → SUBAGENT. After decision/human-action → MAIN |
93
+ | Decision | C (main) | Execute entirely in main context |
94
+
95
+ **Pattern A:** init_agent_tracking → capture `EXPECTED_BASE=$(git rev-parse HEAD)` → spawn Agent(subagent_type="gsd-executor", model=executor_model) with prompt: execute plan at [path], autonomous, all tasks + SUMMARY + commit, follow deviation/auth rules, report: plan name, tasks, SUMMARY path, commit hash → track agent_id → wait → update tracking → report. **Include `isolation="worktree"` only if `workflow.use_worktrees` is not `false`** (read via `config-get workflow.use_worktrees`). **When using `isolation="worktree"`, include a `<worktree_branch_check>` block in the prompt** instructing the executor to: (1) FIRST assert `git symbolic-ref HEAD` resolves to a per-agent branch (NOT a protected ref like `main`/`master`/`develop`/`trunk`/`release/*`) and HALT with a blocker if not — never self-recover via `git update-ref refs/heads/<protected>` (#2924); (2) only after that assertion passes, run `git merge-base HEAD {EXPECTED_BASE}` and, if the result differs from `{EXPECTED_BASE}`, hard-reset the branch with `git reset --hard {EXPECTED_BASE}` before starting work, then verify with `[ "$(git rev-parse HEAD)" != "{EXPECTED_BASE}" ] && exit 1`. The HEAD assertion (Step 1) MUST run before any reset/checkout. This corrects a known issue where `EnterWorktree` creates branches from `main` instead of the feature branch HEAD (affects all platforms — #2015) and prevents the destructive HEAD-on-master self-recovery path (#2924).
96
+
97
+ **Pattern B:** Execute segment-by-segment. Autonomous segments: spawn subagent for assigned tasks only (no SUMMARY/commit). Checkpoints: main context. After all segments: aggregate, create SUMMARY, commit. See segment_execution.
98
+
99
+ **Pattern C:** Execute in main using standard flow (step name="execute").
100
+
101
+ Fresh context per subagent preserves peak quality. Main context stays lean.
102
+ </step>
103
+
104
+ <step name="init_agent_tracking">
105
+ ```bash
106
+ if [ ! -f .planning/agent-history.json ]; then
107
+ echo '{"version":"1.0","max_entries":50,"entries":[]}' > .planning/agent-history.json
108
+ fi
109
+ rm -f .planning/current-agent-id.txt
110
+ if [ -f .planning/current-agent-id.txt ]; then
111
+ INTERRUPTED_ID=$(cat .planning/current-agent-id.txt)
112
+ echo "Found interrupted agent: $INTERRUPTED_ID"
113
+ fi
114
+ ```
115
+
116
+ If interrupted: ask user to resume (Task `resume` parameter) or start fresh.
117
+
118
+ **Tracking protocol:** On spawn: write agent_id to `current-agent-id.txt`, append to agent-history.json: `{"agent_id":"[id]","task_description":"[desc]","phase":"[phase]","plan":"[plan]","segment":[num|null],"timestamp":"[ISO]","status":"spawned","completion_timestamp":null}`. On completion: status → "completed", set completion_timestamp, delete current-agent-id.txt. Prune: if entries > max_entries, remove oldest "completed" (never "spawned").
119
+
120
+ Run for Pattern A/B before spawning. Pattern C: skip.
121
+ </step>
122
+
123
+ <step name="segment_execution">
124
+ Pattern B only (verify-only checkpoints). Skip for A/C.
125
+
126
+ 1. Parse segment map: checkpoint locations and types
127
+ 2. Per segment:
128
+ - Subagent route: spawn gsd-executor for assigned tasks only. Prompt: task range, plan path, read full plan for context, execute assigned tasks, track deviations, NO SUMMARY/commit. Track via agent protocol.
129
+ - Main route: execute tasks using standard flow (step name="execute")
130
+ 3. **Critical ordering — write and commit SUMMARY.md as one atomic block.** Do NOT
131
+ emit narrative output between the Write tool call and the commit tool call.
132
+ Truncation at this boundary is a known failure mode (see #2070 rescue logic in
133
+ execute-phase.md step 5.5).
134
+
135
+ After ALL segments: aggregate files/deviations/decisions → create SUMMARY.md → self-check:
136
+ - Verify key-files.created exist on disk with `[ -f ]`
137
+ - Check `git log --oneline --all --grep="{phase}-{plan}"` returns ≥1 commit
138
+ - Re-run ALL `<acceptance_criteria>` from every task — if any fail, fix before finalizing SUMMARY
139
+ - Re-run the plan-level `<verification>` commands — log results in SUMMARY
140
+ - Append `## Self-Check: PASSED` or `## Self-Check: FAILED` to SUMMARY
141
+ Then commit (no narrative between Write and commit).
142
+
143
+ **Known Claude Code bug (classifyHandoffIfNeeded):** If any segment agent reports "failed" with `classifyHandoffIfNeeded is not defined`, this is a Claude Code runtime bug — not a real failure. Run spot-checks; if they pass, treat as successful.
144
+
145
+
146
+
147
+
148
+ </step>
149
+
150
+ <step name="load_prompt">
151
+ ```bash
152
+ cat .planning/phases/XX-name/{phase}-{plan}-PLAN.md
153
+ ```
154
+ This IS the execution instructions. Follow exactly. If plan references CONTEXT.md: honor user's vision throughout.
155
+
156
+ **If plan contains `<interfaces>` block:** These are pre-extracted type definitions and contracts. Use them directly — do NOT re-read the source files to discover types. The planner already extracted what you need.
157
+ </step>
158
+
159
+ <step name="previous_phase_check">
160
+ ```bash
161
+ gsd_run query phases.list --type summaries --raw
162
+ # Extract the second-to-last summary from the JSON result
163
+ ```
164
+
165
+ **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.
166
+ If previous SUMMARY has unresolved "Issues Encountered" or "Next Phase Readiness" blockers: AskUserQuestion(header="Previous Issues", options: "Proceed anyway" | "Address first" | "Review previous").
167
+ </step>
168
+
169
+ <step name="execute">
170
+ Deviations are normal — handle via rules below.
171
+
172
+ 1. Read @context files from prompt
173
+ 2. **MCP tools:** If CLAUDE.md or project instructions reference MCP tools (e.g. jCodeMunch for code navigation), prefer them over Grep/Glob when available. Fall back to Grep/Glob if MCP tools are not accessible.
174
+ 3. Per task:
175
+ - **MANDATORY read_first gate:** If the task has a `<read_first>` field, you MUST read every listed file BEFORE making any edits. This is not optional. Do not skip files because you "already know" what's in them — read them. The read_first files establish ground truth for the task.
176
+ - `type="auto"`: if `tdd="true"` → TDD execution. Implement with deviation rules + auth gates. Verify done criteria. Commit (see task_commit). Track hash for Summary.
177
+ - `type="checkpoint:*"`: STOP → checkpoint_protocol → wait for user → continue only after confirmation.
178
+ - **HARD GATE — acceptance_criteria verification:** After completing each task, if it has `<acceptance_criteria>`, you MUST run a verification loop before proceeding:
179
+ 1. For each criterion: execute the grep, file check, or CLI command that proves it passes
180
+ 2. Log each result as PASS or FAIL with the command output
181
+ 3. If ANY criterion fails: fix the implementation immediately, then re-run ALL criteria
182
+ 4. Repeat until all criteria pass — you are BLOCKED from starting the next task until this gate clears
183
+ 5. If a criterion cannot be satisfied after 2 fix attempts, log it as a deviation with reason — do NOT silently skip it
184
+ This is not advisory. A task with failing acceptance criteria is an incomplete task.
185
+ 3. Run `<verification>` checks
186
+ 4. Confirm `<success_criteria>` met
187
+ 5. Document deviations in Summary
188
+ </step>
189
+
190
+ <authentication_gates>
191
+
192
+ ## Authentication Gates
193
+
194
+ Auth errors during execution are NOT failures — they're expected interaction points.
195
+
196
+ **Indicators:** "Not authenticated", "Unauthorized", 401/403, "Please run {tool} login", "Set {ENV_VAR}"
197
+
198
+ **Protocol:**
199
+ 1. Recognize auth gate (not a bug)
200
+ 2. STOP task execution
201
+ 3. Create dynamic checkpoint:human-action with exact auth steps
202
+ 4. Wait for user to authenticate
203
+ 5. Verify credentials work
204
+ 6. Retry original task
205
+ 7. Continue normally
206
+
207
+ **Example:** `vercel --yes` → "Not authenticated" → checkpoint asking user to `vercel login` → verify with `vercel whoami` → retry deploy → continue
208
+
209
+ **In Summary:** Document as normal flow under "## Authentication Gates", not as deviations.
210
+
211
+ </authentication_gates>
212
+
213
+ <deviation_rules>
214
+
215
+ ## Deviation Rules
216
+
217
+ Apply deviation rules from the gsd-executor agent definition (single source of truth):
218
+ - **Rules 1-3** (bugs, missing critical, blockers): auto-fix, test, verify, track as deviations
219
+ - **Rule 4** (architectural changes): STOP, present decision to user, await approval
220
+ - **Scope boundary**: do not auto-fix pre-existing issues unrelated to current task
221
+ - **Fix attempt limit**: max 3 retries per deviation before escalating
222
+ - **Priority**: Rule 4 (STOP) > Rules 1-3 (auto) > unsure → Rule 4
223
+
224
+ </deviation_rules>
225
+
226
+ <deviation_documentation>
227
+
228
+ ## Documenting Deviations
229
+
230
+ Summary MUST include deviations section. None? → `## Deviations from Plan\n\nNone - plan executed exactly as written.`
231
+
232
+ Per deviation: **[Rule N - Category] Title** — Found during: Task X | Issue | Fix | Files modified | Verification | Commit hash
233
+
234
+ End with: **Total deviations:** N auto-fixed (breakdown). **Impact:** assessment.
235
+
236
+ </deviation_documentation>
237
+
238
+ <tdd_plan_execution>
239
+ ## TDD Execution
240
+
241
+ For `type: tdd` plans — RED-GREEN-REFACTOR:
242
+
243
+ 1. **Infrastructure** (first TDD plan only): detect project, install framework, config, verify empty suite
244
+ 2. **RED:** Read `<behavior>` → failing test(s) → run (MUST fail) → commit: `test({phase}-{plan}): add failing test for [feature]`
245
+ 3. **GREEN:** Read `<implementation>` → minimal code → run (MUST pass) → commit: `feat({phase}-{plan}): implement [feature]`
246
+ 4. **REFACTOR:** Clean up → tests MUST pass → commit: `refactor({phase}-{plan}): clean up [feature]`
247
+
248
+ Errors: RED doesn't fail → investigate test/existing feature. GREEN doesn't pass → debug, iterate. REFACTOR breaks → undo.
249
+
250
+ See `~/.claude/get-shit-done/references/tdd.md` for structure.
251
+ </tdd_plan_execution>
252
+
253
+ <precommit_failure_handling>
254
+ ## Pre-commit Hook Failure Handling
255
+
256
+ Your commits may trigger pre-commit hooks. Auto-fix hooks handle themselves transparently — files get fixed and re-staged automatically.
257
+
258
+ **If running as a parallel executor agent (spawned by execute-phase):**
259
+ Run commits normally — let pre-commit hooks run. Do NOT use `--no-verify` by default
260
+ (#2924). Hooks should run so issues surface at the introducing commit, and silent
261
+ bypass violates project CLAUDE.md guidance. If a project explicitly opts out via
262
+ `workflow.worktree_skip_hooks=true`, the orchestrator will surface that flag in the
263
+ prompt; absent that signal, hooks run normally. If a hook fails, follow the
264
+ sequential-mode handling below.
265
+
266
+ **If running as the sole executor (sequential mode):**
267
+ If a commit is BLOCKED by a hook:
268
+
269
+ 1. The `git commit` command fails with hook error output
270
+ 2. Read the error — it tells you exactly which hook and what failed
271
+ 3. Fix the issue (type error, lint violation, secret leak, etc.)
272
+ 4. `git add` the fixed files
273
+ 5. Retry the commit
274
+ 6. Budget 1-2 retry cycles per commit
275
+ </precommit_failure_handling>
276
+
277
+ <task_commit>
278
+ ## Task Commit Protocol
279
+
280
+ Canonical per-task commit rules live in **`agents/gsd-executor.md`** (`<task_commit_protocol>`). Follow that section for staging, `{type}({phase}-{plan})` messages, `commit-to-subrepo` when `sub_repos` is set, post-commit checks, and untracked-file handling — do not duplicate or paraphrase the full protocol here (single source of truth).
281
+
282
+ **Orchestrator note:** After each task, the spawned executor reports commit hashes; this workflow does not re-specify commit semantics beyond pointing at the executor.
283
+
284
+ </task_commit>
285
+
286
+ <step name="checkpoint_protocol">
287
+ On `type="checkpoint:*"`: automate everything possible first. Checkpoints are for verification/decisions only.
288
+
289
+ Display: `CHECKPOINT: [Type]` box → Progress {X}/{Y} → Task name → type-specific content → `YOUR ACTION: [signal]`
290
+
291
+ | Type | Content | Resume signal |
292
+ |------|---------|---------------|
293
+ | human-verify (90%) | What was built + verification steps (commands/URLs) | "approved" or describe issues |
294
+ | decision (9%) | Decision needed + context + options with pros/cons | "Select: option-id" |
295
+ | human-action (1%) | What was automated + ONE manual step + verification plan | "done" |
296
+
297
+ After response: verify if specified. Pass → continue. Fail → inform, wait. WAIT for user — do NOT hallucinate completion.
298
+
299
+ See ~/.claude/get-shit-done/references/checkpoints.md for details.
300
+ </step>
301
+
302
+ <step name="checkpoint_return_for_orchestrator">
303
+ When spawned via Task and hitting checkpoint: return structured state (cannot interact with user directly).
304
+
305
+ **Required return:** 1) Completed Tasks table (hashes + files) 2) Current Task (what's blocking) 3) Checkpoint Details (user-facing content) 4) Awaiting (what's needed from user)
306
+
307
+ Orchestrator parses → presents to user → spawns fresh continuation with your completed tasks state. You will NOT be resumed. In main context: use checkpoint_protocol above.
308
+ </step>
309
+
310
+ <step name="verification_failure_gate">
311
+ If verification fails:
312
+
313
+ **Check if node repair is enabled** (default: on):
314
+ ```bash
315
+ NODE_REPAIR=$(gsd_run query config-get workflow.node_repair 2>/dev/null || echo "true")
316
+ ```
317
+
318
+ If `NODE_REPAIR` is `true`: invoke `@./.claude/get-shit-done/workflows/node-repair.md` with:
319
+ - FAILED_TASK: task number, name, done-criteria
320
+ - ERROR: expected vs actual result
321
+ - PLAN_CONTEXT: adjacent task names + phase goal
322
+ - REPAIR_BUDGET: `workflow.node_repair_budget` from config (default: 2)
323
+
324
+ Node repair will attempt RETRY, DECOMPOSE, or PRUNE autonomously. Only reaches this gate again if repair budget is exhausted (ESCALATE).
325
+
326
+ If `NODE_REPAIR` is `false` OR repair returns ESCALATE: STOP. Present: "Verification failed for Task [X]: [name]. Expected: [criteria]. Actual: [result]. Repair attempted: [summary of what was tried]." Options: Retry | Skip (mark incomplete) | Stop (investigate). If skipped → SUMMARY "Issues Encountered".
327
+ </step>
328
+
329
+ <step name="record_completion_time">
330
+ ```bash
331
+ PLAN_END_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
332
+ PLAN_END_EPOCH=$(date +%s)
333
+
334
+ DURATION_SEC=$(( PLAN_END_EPOCH - PLAN_START_EPOCH ))
335
+ DURATION_MIN=$(( DURATION_SEC / 60 ))
336
+
337
+ if [[ $DURATION_MIN -ge 60 ]]; then
338
+ HRS=$(( DURATION_MIN / 60 ))
339
+ MIN=$(( DURATION_MIN % 60 ))
340
+ DURATION="${HRS}h ${MIN}m"
341
+ else
342
+ DURATION="${DURATION_MIN} min"
343
+ fi
344
+ ```
345
+ </step>
346
+
347
+ <step name="generate_user_setup">
348
+ ```bash
349
+ grep -A 50 "^user_setup:" .planning/phases/XX-name/{phase}-{plan}-PLAN.md | head -50
350
+ ```
351
+
352
+ If user_setup exists: create `{phase}-USER-SETUP.md` using template `~/.claude/get-shit-done/templates/user-setup.md`. Per service: env vars table, account setup checklist, dashboard config, local dev notes, verification commands. Status "Incomplete". Set `USER_SETUP_CREATED=true`. If empty/missing: skip.
353
+ </step>
354
+
355
+ <step name="create_summary">
356
+ **Critical ordering — write and commit SUMMARY.md as one atomic block.** Do NOT
357
+ emit narrative output between the Write tool call and the commit tool call.
358
+ Truncation at this boundary is a known failure mode (see #2070 rescue logic in
359
+ execute-phase.md step 5.5).
360
+
361
+ Create `{phase}-{plan}-SUMMARY.md` at `.planning/phases/XX-name/`. Use `~/.claude/get-shit-done/templates/summary.md`.
362
+
363
+ **Frontmatter:** phase, plan, subsystem, tags | requires/provides/affects | tech-stack.added/patterns | key-files.created/modified | key-decisions | requirements-completed (**MUST** copy `requirements` array from PLAN.md frontmatter verbatim) | duration ($DURATION), completed ($PLAN_END_TIME date).
364
+
365
+ Title: `# Phase [X] Plan [Y]: [Name] Summary`
366
+
367
+ One-liner SUBSTANTIVE: "JWT auth with refresh rotation using jose library" not "Authentication implemented"
368
+
369
+ Include: duration, start/end times, task count, file count.
370
+
371
+ Next: more plans → "Ready for {next-plan}" | last → "Phase complete, ready for next step".
372
+ </step>
373
+
374
+ <step name="update_current_position">
375
+ **Skip this step if running in parallel mode** (the orchestrator in execute-phase.md
376
+ handles STATE.md/ROADMAP.md updates centrally after merging worktrees to avoid
377
+ merge conflicts).
378
+
379
+ Update STATE.md using gsd-tools.cjs query (or legacy gsd-tools) state mutations:
380
+
381
+ ```bash
382
+ # Auto-detect parallel mode: .git is a file in worktrees, a directory in main repo
383
+ IS_WORKTREE=$([ -f .git ] && echo "true" || echo "false")
384
+
385
+ # Skip in parallel mode — orchestrator handles STATE.md centrally
386
+ if [ "$IS_WORKTREE" != "true" ]; then
387
+ # Advance plan counter (handles last-plan edge case)
388
+ gsd_run query state.advance-plan
389
+
390
+ # Recalculate progress bar from disk state
391
+ gsd_run query state.update-progress
392
+
393
+ # Record execution metrics
394
+ gsd_run query state.record-metric \
395
+ --phase "${PHASE}" --plan "${PLAN}" --duration "${DURATION}" \
396
+ --tasks "${TASK_COUNT}" --files "${FILE_COUNT}"
397
+ fi
398
+ ```
399
+ </step>
400
+
401
+ <step name="extract_decisions_and_issues">
402
+ From SUMMARY: Extract decisions and add to STATE.md:
403
+
404
+ ```bash
405
+ # Add each decision from SUMMARY key-decisions
406
+ # Prefer file inputs for shell-safe text (preserves `$`, `*`, etc. exactly)
407
+ gsd_run query state.add-decision \
408
+ --phase "${PHASE}" --summary-file "${DECISION_TEXT_FILE}" --rationale-file "${RATIONALE_FILE}"
409
+
410
+ # Add blockers if any found
411
+ gsd_run query state.add-blocker --text-file "${BLOCKER_TEXT_FILE}"
412
+ ```
413
+ </step>
414
+
415
+ <step name="update_session_continuity">
416
+ Update session info using gsd-tools.cjs query (or legacy gsd-tools):
417
+
418
+ ```bash
419
+ gsd_run query state.record-session \
420
+ --stopped-at "Completed ${PHASE}-${PLAN}-PLAN.md" \
421
+ --resume-file "None"
422
+ ```
423
+
424
+ Keep STATE.md under 150 lines.
425
+ </step>
426
+
427
+ <step name="issues_review_gate">
428
+ If SUMMARY "Issues Encountered" ≠ "None": yolo → log and continue. Interactive → present issues, wait for acknowledgment.
429
+ </step>
430
+
431
+ <step name="update_roadmap">
432
+ Run this step only when NOT executing inside a git worktree (i.e.
433
+ `use_worktrees: false`, the bug #2661 reproducer). In worktree mode each
434
+ worktree has its own ROADMAP.md, so per-plan writes here would diverge
435
+ across siblings; the orchestrator owns the post-merge sync centrally
436
+ (see execute-phase.md §5.7, single-writer contract from #1486 / dcb50396).
437
+
438
+ ```bash
439
+ # Auto-detect worktree mode: .git is a file in worktrees, a directory in main repo.
440
+ # This mirrors the use_worktrees config flag for the executing handler.
441
+ IS_WORKTREE=$([ -f .git ] && echo "true" || echo "false")
442
+
443
+ if [ "$IS_WORKTREE" != "true" ]; then
444
+ # use_worktrees: false → this handler is the sole post-plan sync point (#2661)
445
+ gsd_run query roadmap.update-plan-progress "${PHASE}"
446
+ fi
447
+ ```
448
+ Counts PLAN vs SUMMARY files on disk. Updates progress table row with correct count and status (`In Progress` or `Complete` with date).
449
+ </step>
450
+
451
+ <step name="update_requirements">
452
+ Mark completed requirements from the PLAN.md frontmatter `requirements:` field:
453
+
454
+ ```bash
455
+ gsd_run query requirements.mark-complete ${REQ_IDS}
456
+ ```
457
+
458
+ Extract requirement IDs from the plan's frontmatter (e.g., `requirements: [AUTH-01, AUTH-02]`). If no requirements field, skip.
459
+ </step>
460
+
461
+ <step name="git_commit_metadata">
462
+ **Critical ordering — write and commit SUMMARY.md as one atomic block.** Do NOT
463
+ emit narrative output between the Write tool call and the commit tool call.
464
+ Truncation at this boundary is a known failure mode (see #2070 rescue logic in
465
+ execute-phase.md step 5.5).
466
+
467
+ Task code already committed per-task. Commit plan metadata:
468
+
469
+ ```bash
470
+ # Auto-detect parallel mode: .git is a file in worktrees, a directory in main repo
471
+ IS_WORKTREE=$([ -f .git ] && echo "true" || echo "false")
472
+
473
+ # In parallel mode: exclude STATE.md and ROADMAP.md (orchestrator commits these)
474
+ if [ "$IS_WORKTREE" = "true" ]; then
475
+ gsd_run query commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/REQUIREMENTS.md
476
+ else
477
+ gsd_run query commit "docs({phase}-{plan}): complete [plan-name] plan" --files .planning/phases/XX-name/{phase}-{plan}-SUMMARY.md .planning/STATE.md .planning/ROADMAP.md .planning/REQUIREMENTS.md
478
+ fi
479
+ ```
480
+ </step>
481
+
482
+ <step name="update_codebase_map">
483
+ If .planning/codebase/ doesn't exist: skip.
484
+
485
+ ```bash
486
+ FIRST_TASK=$(git log --oneline --grep="feat({phase}-{plan}):" --grep="fix({phase}-{plan}):" --grep="test({phase}-{plan}):" --reverse | head -1 | cut -d' ' -f1)
487
+ git diff --name-only ${FIRST_TASK}^..HEAD 2>/dev/null || true
488
+ ```
489
+
490
+ Update only structural changes: new src/ dir → STRUCTURE.md | deps → STACK.md | file pattern → CONVENTIONS.md | API client → INTEGRATIONS.md | config → STACK.md | renamed → update paths. Skip code-only/bugfix/content changes.
491
+
492
+ ```bash
493
+ gsd_run query commit "" --files .planning/codebase/*.md --amend
494
+ ```
495
+ </step>
496
+
497
+ <step name="offer_next">
498
+ If `USER_SETUP_CREATED=true`: display `⚠️ USER SETUP REQUIRED` with path + env/config tasks at TOP.
499
+
500
+ ```bash
501
+ (ls -1 .planning/phases/[current-phase-dir]/*-PLAN.md 2>/dev/null || true) | wc -l
502
+ (ls -1 .planning/phases/[current-phase-dir]/*-SUMMARY.md 2>/dev/null || true) | wc -l
503
+ ```
504
+
505
+ | Condition | Route | Action |
506
+ |-----------|-------|--------|
507
+ | summaries < plans | **A: More plans** | Find next PLAN without SUMMARY. Yolo: auto-continue. Interactive: show next plan, suggest `/gsd:execute-phase {phase}` + `/gsd:verify-work`. STOP here. |
508
+ | summaries = plans, current < highest phase | **B: Phase done** | Show completion, suggest `/gsd:plan-phase {Z+1}` + `/gsd:verify-work {Z}` + `/gsd:discuss-phase {Z+1}` |
509
+ | summaries = plans, current = highest phase | **C: Milestone done** | Show banner, suggest `/gsd:complete-milestone` + `/gsd:verify-work` + `/gsd-add-phase` |
510
+
511
+ All routes: `/clear` first for fresh context.
512
+ </step>
513
+
514
+ </process>
515
+
516
+ <success_criteria>
517
+
518
+ - All tasks from PLAN.md completed
519
+ - All verifications pass
520
+ - USER-SETUP.md generated if user_setup in frontmatter
521
+ - SUMMARY.md created with substantive content
522
+ - STATE.md updated (position, decisions, issues, session) — unless parallel mode (orchestrator handles)
523
+ - ROADMAP.md updated — unless parallel mode (orchestrator handles)
524
+ - If codebase map exists: map updated with execution changes (or skipped if no significant changes)
525
+ - If USER-SETUP.md created: prominently surfaced in completion output
526
+ </success_criteria>
@@ -0,0 +1,144 @@
1
+ <purpose>
2
+ Socratic ideation workflow. Guides the developer through exploring an idea via probing questions,
3
+ offers mid-conversation research when useful, then routes crystallized outputs to GSD artifacts.
4
+ </purpose>
5
+
6
+ <required_reading>
7
+ Read all files referenced by the invoking prompt's execution_context before starting.
8
+
9
+ @~/.claude/get-shit-done/references/questioning.md
10
+ @~/.claude/get-shit-done/references/domain-probes.md
11
+ </required_reading>
12
+
13
+ <available_agent_types>
14
+ Valid GSD subagent types (use exact names — do not fall back to 'general-purpose'):
15
+ - gsd-phase-researcher — Researches specific questions and returns concise findings
16
+ </available_agent_types>
17
+
18
+ <process>
19
+
20
+ ## Step 1: Open the conversation
21
+
22
+ If a topic was provided, acknowledge it and begin exploring:
23
+ ```
24
+ ## Explore: {topic}
25
+
26
+ Let's think through this together. I'll ask questions to help clarify the idea
27
+ before we commit to any artifacts.
28
+ ```
29
+
30
+ If no topic, ask:
31
+ ```
32
+ ## Explore
33
+
34
+ What's on your mind? This could be a feature idea, an architectural question,
35
+ a problem you're trying to solve, or something you're not sure about yet.
36
+ ```
37
+
38
+ ## Step 2: Socratic conversation (2-5 exchanges)
39
+
40
+ Guide the conversation using principles from `questioning.md` and `domain-probes.md`:
41
+
42
+ - Ask **one question at a time** (never a list of questions)
43
+ - Questions should probe: constraints, tradeoffs, users, scope, dependencies, risks
44
+ - Use domain-specific probes contextually when the topic touches a known domain
45
+ - Listen for signals: "or" / "versus" / "tradeoff" indicate competing priorities worth exploring
46
+ - Reflect back what you hear to confirm understanding before moving forward
47
+
48
+ **Conversation should feel natural, not formulaic.** Avoid rigid sequences. Follow the developer's energy — if they're excited about one aspect, go deeper there.
49
+
50
+ ## Step 3: Mid-conversation research offer (after 2-3 exchanges)
51
+
52
+ If the conversation surfaces factual questions, technology comparisons, or unknowns that research could resolve, offer:
53
+
54
+ ```
55
+ This touches on [specific question]. Want me to do a quick research pass before we continue?
56
+ This would take ~30 seconds and might surface useful context.
57
+
58
+ [Yes, research this] / [No, let's keep exploring]
59
+ ```
60
+
61
+ If yes, spawn a research agent:
62
+ ```
63
+ Agent(
64
+ prompt="Quick research: {specific_question}. Return 3-5 key findings, no more than 200 words.",
65
+ subagent_type="gsd-phase-researcher"
66
+ )
67
+ ```
68
+
69
+ > **ORCHESTRATOR RULE — CODEX RUNTIME**: After calling Agent() above, stop working on this task immediately. Do not read more files, edit code, or run tests related to this task while the subagent is active. Wait for the subagent to return its result. This prevents duplicate work, conflicting edits, and wasted context. Only resume when the subagent result is available.
70
+
71
+ Share findings and continue the conversation.
72
+
73
+ If the topic doesn't warrant research, skip this step entirely. **Don't force it.**
74
+
75
+ ## Step 4: Crystallize outputs (after 3-6 exchanges)
76
+
77
+ When the conversation reaches natural conclusions or the developer signals readiness, propose outputs. Analyze the conversation to identify what was discussed and suggest **up to 4 outputs** from:
78
+
79
+ | Type | Destination | When to suggest |
80
+ |------|-------------|-----------------|
81
+ | Note | `.planning/notes/{slug}.md` | Observations, context, decisions worth remembering |
82
+ | Todo | `.planning/todos/pending/{slug}.md` | Concrete actionable tasks identified |
83
+ | Seed | `.planning/seeds/{slug}.md` | Forward-looking ideas with trigger conditions |
84
+ | Research question | `.planning/research/questions.md` (append) | Open questions that need deeper investigation |
85
+ | Requirement | `REQUIREMENTS.md` (append) | Clear requirements that emerged from discussion |
86
+ | New phase | `ROADMAP.md` (append) | Scope large enough to warrant its own phase |
87
+ | Spike | `/gsd:spike` (invoke) | Feasibility uncertainty surfaced — "will this API work?", "can we do X?" |
88
+ | Sketch | `/gsd:sketch` (invoke) | Design direction unclear — "what should this look like?", "how should this feel?" |
89
+
90
+ Present suggestions:
91
+ ```
92
+ Based on our conversation, I'd suggest capturing:
93
+
94
+ 1. **Note:** "Authentication strategy decisions" — your reasoning about JWT vs sessions
95
+ 2. **Todo:** "Evaluate Passport.js vs custom middleware" — the comparison you want to do
96
+ 3. **Seed:** "OAuth2 provider support" — trigger: when user management phase starts
97
+
98
+ Create these? You can select specific ones or modify them.
99
+
100
+ [Create all] / [Let me pick] / [Skip — just exploring]
101
+ ```
102
+
103
+ **Never write artifacts without explicit user selection.**
104
+
105
+ ## Step 5: Write selected outputs
106
+
107
+ For each selected output, write the file:
108
+
109
+ - **Notes:** Create `.planning/notes/{slug}.md` with frontmatter (title, date, context)
110
+ - **Todos:** Create `.planning/todos/pending/{slug}.md` with frontmatter (title, date, priority)
111
+ - **Seeds:** Create `.planning/seeds/{slug}.md` with frontmatter (title, trigger_condition, planted_date)
112
+ - **Research questions:** Append to `.planning/research/questions.md`
113
+ - **Requirements:** Append to `.planning/REQUIREMENTS.md` with next available REQ ID
114
+ - **Phases:** Use existing `/gsd-add-phase` command via SlashCommand
115
+
116
+ Commit if `commit_docs` is enabled:
117
+ ```bash
118
+ _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
119
+ gsd_run query commit "docs: capture exploration — {topic_slug}" --files {file_list}
120
+ ```
121
+
122
+ ## Step 6: Close
123
+
124
+ ```
125
+ ## Exploration Complete
126
+
127
+ **Topic:** {topic}
128
+ **Outputs:** {count} artifact(s) created
129
+ {list of created files}
130
+
131
+ Continue exploring with `/gsd:explore` or start working with `/gsd:progress --next`.
132
+ ```
133
+
134
+ </process>
135
+
136
+ <success_criteria>
137
+ - [ ] Socratic conversation follows questioning.md principles
138
+ - [ ] Questions asked one at a time, not in batches
139
+ - [ ] Research offered contextually (not forced)
140
+ - [ ] Up to 4 outputs proposed from conversation
141
+ - [ ] User explicitly selects which outputs to create
142
+ - [ ] Files written to correct destinations
143
+ - [ ] Commit respects commit_docs config
144
+ </success_criteria>