@therocketcode/gsd-core 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (568) hide show
  1. package/.claude-plugin/plugin.json +23 -0
  2. package/GEMINI.md +53 -0
  3. package/LICENSE +21 -0
  4. package/README.ja-JP.md +125 -0
  5. package/README.ko-KR.md +125 -0
  6. package/README.md +144 -0
  7. package/README.pt-BR.md +125 -0
  8. package/README.zh-CN.md +125 -0
  9. package/agents/gsd-advisor-researcher.md +108 -0
  10. package/agents/gsd-ai-researcher.md +114 -0
  11. package/agents/gsd-assumptions-analyzer.md +105 -0
  12. package/agents/gsd-code-fixer.md +668 -0
  13. package/agents/gsd-code-reviewer.md +387 -0
  14. package/agents/gsd-codebase-mapper.md +853 -0
  15. package/agents/gsd-debug-session-manager.md +314 -0
  16. package/agents/gsd-debugger.md +1452 -0
  17. package/agents/gsd-doc-classifier.md +168 -0
  18. package/agents/gsd-doc-synthesizer.md +204 -0
  19. package/agents/gsd-doc-verifier.md +217 -0
  20. package/agents/gsd-doc-writer.md +616 -0
  21. package/agents/gsd-domain-researcher.md +147 -0
  22. package/agents/gsd-eval-auditor.md +191 -0
  23. package/agents/gsd-eval-planner.md +154 -0
  24. package/agents/gsd-executor.md +785 -0
  25. package/agents/gsd-framework-selector.md +160 -0
  26. package/agents/gsd-integration-checker.md +470 -0
  27. package/agents/gsd-intel-updater.md +342 -0
  28. package/agents/gsd-nyquist-auditor.md +203 -0
  29. package/agents/gsd-pattern-mapper.md +335 -0
  30. package/agents/gsd-phase-researcher.md +867 -0
  31. package/agents/gsd-plan-checker.md +978 -0
  32. package/agents/gsd-planner.md +1204 -0
  33. package/agents/gsd-project-researcher.md +611 -0
  34. package/agents/gsd-research-synthesizer.md +259 -0
  35. package/agents/gsd-roadmapper.md +688 -0
  36. package/agents/gsd-security-auditor.md +155 -0
  37. package/agents/gsd-ui-auditor.md +495 -0
  38. package/agents/gsd-ui-checker.md +309 -0
  39. package/agents/gsd-ui-researcher.md +374 -0
  40. package/agents/gsd-user-profiler.md +171 -0
  41. package/agents/gsd-verifier.md +923 -0
  42. package/assets/gsd-logo-2000-transparent.png +0 -0
  43. package/assets/gsd-logo-2000-transparent.svg +17 -0
  44. package/assets/gsd-logo-2000.png +0 -0
  45. package/assets/gsd-logo-2000.svg +21 -0
  46. package/assets/terminal.svg +68 -0
  47. package/bin/install.js +12726 -0
  48. package/bin/lib/ui-safety-gate.cjs +107 -0
  49. package/commands/gsd/add-tests.md +42 -0
  50. package/commands/gsd/ai-integration-phase.md +37 -0
  51. package/commands/gsd/audit-fix.md +34 -0
  52. package/commands/gsd/audit-milestone.md +37 -0
  53. package/commands/gsd/audit-uat.md +24 -0
  54. package/commands/gsd/autonomous.md +48 -0
  55. package/commands/gsd/capture.md +62 -0
  56. package/commands/gsd/cleanup.md +24 -0
  57. package/commands/gsd/code-review.md +59 -0
  58. package/commands/gsd/complete-milestone.md +143 -0
  59. package/commands/gsd/config.md +56 -0
  60. package/commands/gsd/debug.md +52 -0
  61. package/commands/gsd/discover-product.md +65 -0
  62. package/commands/gsd/discuss-phase.md +77 -0
  63. package/commands/gsd/docs-update.md +49 -0
  64. package/commands/gsd/eval-review.md +33 -0
  65. package/commands/gsd/execute-phase.md +66 -0
  66. package/commands/gsd/explore.md +27 -0
  67. package/commands/gsd/extract-learnings.md +23 -0
  68. package/commands/gsd/fast.md +31 -0
  69. package/commands/gsd/forensics.md +57 -0
  70. package/commands/gsd/graphify.md +204 -0
  71. package/commands/gsd/health.md +31 -0
  72. package/commands/gsd/help.md +28 -0
  73. package/commands/gsd/import.md +45 -0
  74. package/commands/gsd/inbox.md +39 -0
  75. package/commands/gsd/ingest-docs.md +42 -0
  76. package/commands/gsd/manager.md +45 -0
  77. package/commands/gsd/map-codebase.md +83 -0
  78. package/commands/gsd/milestone-summary.md +51 -0
  79. package/commands/gsd/model-domain.md +65 -0
  80. package/commands/gsd/mvp-phase.md +45 -0
  81. package/commands/gsd/new-milestone.md +45 -0
  82. package/commands/gsd/new-project.md +47 -0
  83. package/commands/gsd/ns-context.md +23 -0
  84. package/commands/gsd/ns-ideate.md +24 -0
  85. package/commands/gsd/ns-manage.md +29 -0
  86. package/commands/gsd/ns-project.md +22 -0
  87. package/commands/gsd/ns-review.md +26 -0
  88. package/commands/gsd/ns-workflow.md +28 -0
  89. package/commands/gsd/pause-work.md +43 -0
  90. package/commands/gsd/phase.md +56 -0
  91. package/commands/gsd/plan-phase.md +64 -0
  92. package/commands/gsd/plan-review-convergence.md +59 -0
  93. package/commands/gsd/pr-branch.md +26 -0
  94. package/commands/gsd/profile-user.md +46 -0
  95. package/commands/gsd/progress.md +48 -0
  96. package/commands/gsd/quick.md +174 -0
  97. package/commands/gsd/recommend-architecture.md +64 -0
  98. package/commands/gsd/resume-work.md +30 -0
  99. package/commands/gsd/review-backlog.md +63 -0
  100. package/commands/gsd/review.md +42 -0
  101. package/commands/gsd/secure-phase.md +36 -0
  102. package/commands/gsd/settings.md +29 -0
  103. package/commands/gsd/ship.md +24 -0
  104. package/commands/gsd/sketch.md +60 -0
  105. package/commands/gsd/spec-phase.md +63 -0
  106. package/commands/gsd/spike.md +57 -0
  107. package/commands/gsd/stats.md +20 -0
  108. package/commands/gsd/surface.md +155 -0
  109. package/commands/gsd/testing-strategy.md +65 -0
  110. package/commands/gsd/thread.md +24 -0
  111. package/commands/gsd/ui-phase.md +35 -0
  112. package/commands/gsd/ui-review.md +33 -0
  113. package/commands/gsd/ultraplan-phase.md +34 -0
  114. package/commands/gsd/undo.md +35 -0
  115. package/commands/gsd/update.md +49 -0
  116. package/commands/gsd/validate-phase.md +36 -0
  117. package/commands/gsd/verify-work.md +39 -0
  118. package/commands/gsd/workspace.md +52 -0
  119. package/commands/gsd/workstreams.md +70 -0
  120. package/gemini-extension.json +6 -0
  121. package/gsd-core/bin/check-latest-version.cjs +161 -0
  122. package/gsd-core/bin/gsd-tools.cjs +1928 -0
  123. package/gsd-core/bin/lib/active-workstream-store.cjs +291 -0
  124. package/gsd-core/bin/lib/adr-parser.cjs +399 -0
  125. package/gsd-core/bin/lib/agent-command-router.cjs +68 -0
  126. package/gsd-core/bin/lib/artifacts.cjs +51 -0
  127. package/gsd-core/bin/lib/audit.cjs +743 -0
  128. package/gsd-core/bin/lib/check-command-router.cjs +343 -0
  129. package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
  130. package/gsd-core/bin/lib/cli-exit.cjs +42 -0
  131. package/gsd-core/bin/lib/clock.cjs +95 -0
  132. package/gsd-core/bin/lib/clusters.cjs +132 -0
  133. package/gsd-core/bin/lib/code-review-flags.cjs +59 -0
  134. package/gsd-core/bin/lib/command-aliases.cjs +809 -0
  135. package/gsd-core/bin/lib/command-arg-projection.cjs +55 -0
  136. package/gsd-core/bin/lib/command-routing-hub.cjs +300 -0
  137. package/gsd-core/bin/lib/commands.cjs +1203 -0
  138. package/gsd-core/bin/lib/config-schema.cjs +29 -0
  139. package/gsd-core/bin/lib/config-types.cjs +19 -0
  140. package/gsd-core/bin/lib/config.cjs +738 -0
  141. package/gsd-core/bin/lib/configuration.cjs +239 -0
  142. package/gsd-core/bin/lib/context-utilization.cjs +48 -0
  143. package/gsd-core/bin/lib/core.cjs +2051 -0
  144. package/gsd-core/bin/lib/decisions.cjs +118 -0
  145. package/gsd-core/bin/lib/docs.cjs +252 -0
  146. package/gsd-core/bin/lib/drift.cjs +364 -0
  147. package/gsd-core/bin/lib/fallow-runner.cjs +115 -0
  148. package/gsd-core/bin/lib/frontmatter.cjs +442 -0
  149. package/gsd-core/bin/lib/gap-checker.cjs +257 -0
  150. package/gsd-core/bin/lib/graphify.cjs +496 -0
  151. package/gsd-core/bin/lib/gsd2-import.cjs +456 -0
  152. package/gsd-core/bin/lib/init-command-router.cjs +62 -0
  153. package/gsd-core/bin/lib/init.cjs +1815 -0
  154. package/gsd-core/bin/lib/install-profiles.cjs +584 -0
  155. package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
  156. package/gsd-core/bin/lib/installer-migration-report.cjs +350 -0
  157. package/gsd-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +218 -0
  158. package/gsd-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
  159. package/gsd-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
  160. package/gsd-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
  161. package/gsd-core/bin/lib/installer-migrations.cjs +823 -0
  162. package/gsd-core/bin/lib/intel.cjs +590 -0
  163. package/gsd-core/bin/lib/learnings.cjs +270 -0
  164. package/gsd-core/bin/lib/legacy-cleanup.cjs +253 -0
  165. package/gsd-core/bin/lib/milestone.cjs +373 -0
  166. package/gsd-core/bin/lib/model-catalog.cjs +154 -0
  167. package/gsd-core/bin/lib/model-profiles.cjs +24 -0
  168. package/gsd-core/bin/lib/observability/event.cjs +51 -0
  169. package/gsd-core/bin/lib/observability/logger.cjs +146 -0
  170. package/gsd-core/bin/lib/observability/redaction.cjs +48 -0
  171. package/gsd-core/bin/lib/package-identity.cjs +35 -0
  172. package/gsd-core/bin/lib/package-legitimacy.cjs +368 -0
  173. package/gsd-core/bin/lib/phase-command-router.cjs +189 -0
  174. package/gsd-core/bin/lib/phase-lifecycle.cjs +74 -0
  175. package/gsd-core/bin/lib/phase.cjs +1307 -0
  176. package/gsd-core/bin/lib/phases-command-router.cjs +43 -0
  177. package/gsd-core/bin/lib/plan-scan.cjs +91 -0
  178. package/gsd-core/bin/lib/planning-workspace.cjs +245 -0
  179. package/gsd-core/bin/lib/profile-output.cjs +1120 -0
  180. package/gsd-core/bin/lib/profile-pipeline.cjs +517 -0
  181. package/gsd-core/bin/lib/project-root.cjs +119 -0
  182. package/gsd-core/bin/lib/prompt-budget.cjs +305 -0
  183. package/gsd-core/bin/lib/research-provider.cjs +137 -0
  184. package/gsd-core/bin/lib/research-store.cjs +167 -0
  185. package/gsd-core/bin/lib/review-reviewer-selection.cjs +121 -0
  186. package/gsd-core/bin/lib/roadmap-command-router.cjs +166 -0
  187. package/gsd-core/bin/lib/roadmap-upgrade.cjs +476 -0
  188. package/gsd-core/bin/lib/roadmap.cjs +600 -0
  189. package/gsd-core/bin/lib/runtime-artifact-layout.cjs +312 -0
  190. package/gsd-core/bin/lib/runtime-config-adapter-registry.cjs +56 -0
  191. package/gsd-core/bin/lib/runtime-homes.cjs +190 -0
  192. package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
  193. package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
  194. package/gsd-core/bin/lib/schema-detect.cjs +159 -0
  195. package/gsd-core/bin/lib/secrets.cjs +34 -0
  196. package/gsd-core/bin/lib/security.cjs +480 -0
  197. package/gsd-core/bin/lib/semver-compare.cjs +42 -0
  198. package/gsd-core/bin/lib/shell-command-projection.cjs +533 -0
  199. package/gsd-core/bin/lib/state-command-router.cjs +160 -0
  200. package/gsd-core/bin/lib/state-document.cjs +259 -0
  201. package/gsd-core/bin/lib/state.cjs +2010 -0
  202. package/gsd-core/bin/lib/surface.cjs +449 -0
  203. package/gsd-core/bin/lib/task-command-router.cjs +85 -0
  204. package/gsd-core/bin/lib/template.cjs +237 -0
  205. package/gsd-core/bin/lib/uat.cjs +297 -0
  206. package/gsd-core/bin/lib/ui-safety-gate.cjs +98 -0
  207. package/gsd-core/bin/lib/update-context.cjs +218 -0
  208. package/gsd-core/bin/lib/validate-command-router.cjs +91 -0
  209. package/gsd-core/bin/lib/validate.cjs +112 -0
  210. package/gsd-core/bin/lib/verification-command-router.cjs +31 -0
  211. package/gsd-core/bin/lib/verification.cjs +193 -0
  212. package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
  213. package/gsd-core/bin/lib/verify.cjs +1451 -0
  214. package/gsd-core/bin/lib/workstream-inventory-builder.cjs +81 -0
  215. package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
  216. package/gsd-core/bin/lib/workstream-name-policy.cjs +91 -0
  217. package/gsd-core/bin/lib/workstream.cjs +380 -0
  218. package/gsd-core/bin/lib/worktree-base-ref.cjs +325 -0
  219. package/gsd-core/bin/lib/worktree-safety.cjs +943 -0
  220. package/gsd-core/bin/shared/config-defaults.manifest.json +98 -0
  221. package/gsd-core/bin/shared/config-schema.manifest.json +192 -0
  222. package/gsd-core/bin/shared/model-catalog.json +149 -0
  223. package/gsd-core/bin/shared/runtime-aliases.manifest.json +75 -0
  224. package/gsd-core/bin/verify-reapply-patches.cjs +349 -0
  225. package/gsd-core/contexts/dev.md +21 -0
  226. package/gsd-core/contexts/research.md +22 -0
  227. package/gsd-core/contexts/review.md +23 -0
  228. package/gsd-core/references/agent-contracts.md +79 -0
  229. package/gsd-core/references/ai-evals.md +156 -0
  230. package/gsd-core/references/ai-frameworks.md +186 -0
  231. package/gsd-core/references/architecture-decision.md +74 -0
  232. package/gsd-core/references/artifact-types.md +131 -0
  233. package/gsd-core/references/auth-in-tests.md +91 -0
  234. package/gsd-core/references/autonomous-smart-discuss.md +277 -0
  235. package/gsd-core/references/checkpoints.md +814 -0
  236. package/gsd-core/references/common-bug-patterns.md +114 -0
  237. package/gsd-core/references/context-budget.md +85 -0
  238. package/gsd-core/references/continuation-format.md +253 -0
  239. package/gsd-core/references/db-test-isolation.md +54 -0
  240. package/gsd-core/references/debugger-philosophy.md +76 -0
  241. package/gsd-core/references/decimal-phase-calculation.md +64 -0
  242. package/gsd-core/references/doc-conflict-engine.md +91 -0
  243. package/gsd-core/references/domain-modeling.md +80 -0
  244. package/gsd-core/references/domain-probes.md +125 -0
  245. package/gsd-core/references/e2e-tiering.md +35 -0
  246. package/gsd-core/references/execute-mvp-tdd.md +81 -0
  247. package/gsd-core/references/executor-examples.md +110 -0
  248. package/gsd-core/references/few-shot-examples/plan-checker.md +73 -0
  249. package/gsd-core/references/few-shot-examples/verifier.md +109 -0
  250. package/gsd-core/references/flaky-test-checklist.md +22 -0
  251. package/gsd-core/references/gate-prompts.md +100 -0
  252. package/gsd-core/references/gates.md +70 -0
  253. package/gsd-core/references/git-integration.md +298 -0
  254. package/gsd-core/references/git-planning-commit.md +40 -0
  255. package/gsd-core/references/ios-scaffold.md +123 -0
  256. package/gsd-core/references/mandatory-initial-read.md +2 -0
  257. package/gsd-core/references/model-profile-resolution.md +38 -0
  258. package/gsd-core/references/model-profiles.md +245 -0
  259. package/gsd-core/references/mvp-concepts.md +49 -0
  260. package/gsd-core/references/phase-argument-parsing.md +61 -0
  261. package/gsd-core/references/planner-antipatterns.md +89 -0
  262. package/gsd-core/references/planner-chunked.md +49 -0
  263. package/gsd-core/references/planner-gap-closure.md +62 -0
  264. package/gsd-core/references/planner-graphify-auto-update.md +67 -0
  265. package/gsd-core/references/planner-human-verify-mode.md +57 -0
  266. package/gsd-core/references/planner-interface-context.md +62 -0
  267. package/gsd-core/references/planner-load-graph-context.md +36 -0
  268. package/gsd-core/references/planner-mvp-mode.md +53 -0
  269. package/gsd-core/references/planner-reviews.md +39 -0
  270. package/gsd-core/references/planner-revision.md +87 -0
  271. package/gsd-core/references/planner-source-audit.md +73 -0
  272. package/gsd-core/references/planning-config.md +473 -0
  273. package/gsd-core/references/product-discovery.md +49 -0
  274. package/gsd-core/references/project-skills-discovery.md +19 -0
  275. package/gsd-core/references/questioning.md +162 -0
  276. package/gsd-core/references/realistic-test-data.md +44 -0
  277. package/gsd-core/references/research-documentation-lookup.md +29 -0
  278. package/gsd-core/references/research-philosophy.md +29 -0
  279. package/gsd-core/references/research-verification-protocol.md +27 -0
  280. package/gsd-core/references/revision-loop.md +97 -0
  281. package/gsd-core/references/scout-codebase.md +51 -0
  282. package/gsd-core/references/skeleton-template.md +48 -0
  283. package/gsd-core/references/sketch-interactivity.md +41 -0
  284. package/gsd-core/references/sketch-theme-system.md +94 -0
  285. package/gsd-core/references/sketch-tooling.md +45 -0
  286. package/gsd-core/references/sketch-variant-patterns.md +81 -0
  287. package/gsd-core/references/spidr-splitting.md +69 -0
  288. package/gsd-core/references/tdd.md +330 -0
  289. package/gsd-core/references/test-containers.md +55 -0
  290. package/gsd-core/references/test-strategy.md +75 -0
  291. package/gsd-core/references/thinking-models-debug.md +44 -0
  292. package/gsd-core/references/thinking-models-execution.md +50 -0
  293. package/gsd-core/references/thinking-models-planning.md +62 -0
  294. package/gsd-core/references/thinking-models-research.md +50 -0
  295. package/gsd-core/references/thinking-models-verification.md +55 -0
  296. package/gsd-core/references/thinking-partner.md +96 -0
  297. package/gsd-core/references/ui-brand.md +162 -0
  298. package/gsd-core/references/universal-anti-patterns.md +63 -0
  299. package/gsd-core/references/user-profiling.md +681 -0
  300. package/gsd-core/references/user-story-template.md +58 -0
  301. package/gsd-core/references/verification-overrides.md +227 -0
  302. package/gsd-core/references/verification-patterns.md +612 -0
  303. package/gsd-core/references/verify-mvp-mode.md +85 -0
  304. package/gsd-core/references/workstream-flag.md +111 -0
  305. package/gsd-core/references/worktree-branch-check.md +38 -0
  306. package/gsd-core/references/worktree-path-safety.md +67 -0
  307. package/gsd-core/templates/AI-SPEC.md +246 -0
  308. package/gsd-core/templates/DEBUG.md +169 -0
  309. package/gsd-core/templates/README.md +77 -0
  310. package/gsd-core/templates/SECURITY.md +61 -0
  311. package/gsd-core/templates/UAT.md +265 -0
  312. package/gsd-core/templates/UI-SPEC.md +100 -0
  313. package/gsd-core/templates/VALIDATION.md +76 -0
  314. package/gsd-core/templates/adr.md +58 -0
  315. package/gsd-core/templates/claude-md.md +145 -0
  316. package/gsd-core/templates/codebase/architecture.md +255 -0
  317. package/gsd-core/templates/codebase/concerns.md +310 -0
  318. package/gsd-core/templates/codebase/conventions.md +307 -0
  319. package/gsd-core/templates/codebase/integrations.md +280 -0
  320. package/gsd-core/templates/codebase/stack.md +186 -0
  321. package/gsd-core/templates/codebase/structure.md +285 -0
  322. package/gsd-core/templates/codebase/testing.md +480 -0
  323. package/gsd-core/templates/config.json +62 -0
  324. package/gsd-core/templates/context.md +352 -0
  325. package/gsd-core/templates/continue-here.md +78 -0
  326. package/gsd-core/templates/copilot-instructions.md +7 -0
  327. package/gsd-core/templates/debug-subagent-prompt.md +91 -0
  328. package/gsd-core/templates/dev-preferences.md +21 -0
  329. package/gsd-core/templates/discovery.md +146 -0
  330. package/gsd-core/templates/discussion-log.md +63 -0
  331. package/gsd-core/templates/domain-model.md +54 -0
  332. package/gsd-core/templates/milestone-archive.md +123 -0
  333. package/gsd-core/templates/milestone.md +115 -0
  334. package/gsd-core/templates/phase-prompt.md +610 -0
  335. package/gsd-core/templates/planner-subagent-prompt.md +117 -0
  336. package/gsd-core/templates/product-brief.md +55 -0
  337. package/gsd-core/templates/project.md +186 -0
  338. package/gsd-core/templates/requirements.md +231 -0
  339. package/gsd-core/templates/research-project/ARCHITECTURE.md +204 -0
  340. package/gsd-core/templates/research-project/FEATURES.md +147 -0
  341. package/gsd-core/templates/research-project/PITFALLS.md +200 -0
  342. package/gsd-core/templates/research-project/STACK.md +120 -0
  343. package/gsd-core/templates/research-project/SUMMARY.md +170 -0
  344. package/gsd-core/templates/research.md +592 -0
  345. package/gsd-core/templates/retrospective.md +54 -0
  346. package/gsd-core/templates/roadmap.md +202 -0
  347. package/gsd-core/templates/spec.md +307 -0
  348. package/gsd-core/templates/state.md +195 -0
  349. package/gsd-core/templates/summary-complex.md +59 -0
  350. package/gsd-core/templates/summary-minimal.md +41 -0
  351. package/gsd-core/templates/summary-standard.md +48 -0
  352. package/gsd-core/templates/summary.md +248 -0
  353. package/gsd-core/templates/test-strategy.md +50 -0
  354. package/gsd-core/templates/user-profile.md +146 -0
  355. package/gsd-core/templates/user-setup.md +311 -0
  356. package/gsd-core/templates/verification-report.md +322 -0
  357. package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
  358. package/gsd-core/workflows/add-backlog.md +91 -0
  359. package/gsd-core/workflows/add-phase.md +113 -0
  360. package/gsd-core/workflows/add-tests.md +355 -0
  361. package/gsd-core/workflows/add-todo.md +161 -0
  362. package/gsd-core/workflows/ai-integration-phase.md +295 -0
  363. package/gsd-core/workflows/analyze-dependencies.md +96 -0
  364. package/gsd-core/workflows/audit-fix.md +178 -0
  365. package/gsd-core/workflows/audit-milestone.md +360 -0
  366. package/gsd-core/workflows/audit-uat.md +110 -0
  367. package/gsd-core/workflows/autonomous.md +797 -0
  368. package/gsd-core/workflows/check-todos.md +180 -0
  369. package/gsd-core/workflows/cleanup.md +195 -0
  370. package/gsd-core/workflows/code-review-fix.md +502 -0
  371. package/gsd-core/workflows/code-review.md +658 -0
  372. package/gsd-core/workflows/complete-milestone.md +855 -0
  373. package/gsd-core/workflows/debug.md +237 -0
  374. package/gsd-core/workflows/diagnose-issues.md +245 -0
  375. package/gsd-core/workflows/discover-product.md +112 -0
  376. package/gsd-core/workflows/discovery-phase.md +291 -0
  377. package/gsd-core/workflows/discuss-phase/modes/advisor.md +176 -0
  378. package/gsd-core/workflows/discuss-phase/modes/all.md +28 -0
  379. package/gsd-core/workflows/discuss-phase/modes/analyze.md +44 -0
  380. package/gsd-core/workflows/discuss-phase/modes/auto.md +57 -0
  381. package/gsd-core/workflows/discuss-phase/modes/batch.md +52 -0
  382. package/gsd-core/workflows/discuss-phase/modes/chain.md +98 -0
  383. package/gsd-core/workflows/discuss-phase/modes/default.md +141 -0
  384. package/gsd-core/workflows/discuss-phase/modes/power.md +44 -0
  385. package/gsd-core/workflows/discuss-phase/modes/text.md +55 -0
  386. package/gsd-core/workflows/discuss-phase/templates/checkpoint.json +18 -0
  387. package/gsd-core/workflows/discuss-phase/templates/context.md +136 -0
  388. package/gsd-core/workflows/discuss-phase/templates/discussion-log.md +50 -0
  389. package/gsd-core/workflows/discuss-phase-assumptions.md +675 -0
  390. package/gsd-core/workflows/discuss-phase-power.md +291 -0
  391. package/gsd-core/workflows/discuss-phase.md +499 -0
  392. package/gsd-core/workflows/do.md +111 -0
  393. package/gsd-core/workflows/docs-update.md +1176 -0
  394. package/gsd-core/workflows/edit-phase.md +295 -0
  395. package/gsd-core/workflows/eval-review.md +156 -0
  396. package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +95 -0
  397. package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
  398. package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +117 -0
  399. package/gsd-core/workflows/execute-phase.md +1752 -0
  400. package/gsd-core/workflows/execute-plan.md +526 -0
  401. package/gsd-core/workflows/explore.md +146 -0
  402. package/gsd-core/workflows/extract-learnings.md +243 -0
  403. package/gsd-core/workflows/fast.md +124 -0
  404. package/gsd-core/workflows/forensics.md +279 -0
  405. package/gsd-core/workflows/graduation.md +196 -0
  406. package/gsd-core/workflows/health.md +224 -0
  407. package/gsd-core/workflows/help/modes/brief.md +22 -0
  408. package/gsd-core/workflows/help/modes/default.md +50 -0
  409. package/gsd-core/workflows/help/modes/full.md +789 -0
  410. package/gsd-core/workflows/help/modes/topic.md +74 -0
  411. package/gsd-core/workflows/help.md +24 -0
  412. package/gsd-core/workflows/import.md +256 -0
  413. package/gsd-core/workflows/inbox.md +387 -0
  414. package/gsd-core/workflows/ingest-docs.md +340 -0
  415. package/gsd-core/workflows/insert-phase.md +152 -0
  416. package/gsd-core/workflows/list-phase-assumptions.md +178 -0
  417. package/gsd-core/workflows/list-workspaces.md +57 -0
  418. package/gsd-core/workflows/manager.md +393 -0
  419. package/gsd-core/workflows/map-codebase.md +446 -0
  420. package/gsd-core/workflows/milestone-summary.md +224 -0
  421. package/gsd-core/workflows/model-domain.md +162 -0
  422. package/gsd-core/workflows/mvp-phase.md +222 -0
  423. package/gsd-core/workflows/new-milestone.md +635 -0
  424. package/gsd-core/workflows/new-project.md +1555 -0
  425. package/gsd-core/workflows/new-workspace.md +240 -0
  426. package/gsd-core/workflows/next.md +299 -0
  427. package/gsd-core/workflows/node-repair.md +92 -0
  428. package/gsd-core/workflows/note.md +158 -0
  429. package/gsd-core/workflows/pause-work.md +244 -0
  430. package/gsd-core/workflows/plan-milestone-gaps.md +281 -0
  431. package/gsd-core/workflows/plan-phase.md +1814 -0
  432. package/gsd-core/workflows/plan-review-convergence.md +346 -0
  433. package/gsd-core/workflows/plant-seed.md +230 -0
  434. package/gsd-core/workflows/pr-branch.md +157 -0
  435. package/gsd-core/workflows/profile-user.md +453 -0
  436. package/gsd-core/workflows/progress.md +699 -0
  437. package/gsd-core/workflows/quick.md +1017 -0
  438. package/gsd-core/workflows/reapply-patches.md +426 -0
  439. package/gsd-core/workflows/recommend-architecture.md +135 -0
  440. package/gsd-core/workflows/remove-phase.md +156 -0
  441. package/gsd-core/workflows/remove-workspace.md +108 -0
  442. package/gsd-core/workflows/resume-project.md +332 -0
  443. package/gsd-core/workflows/review.md +748 -0
  444. package/gsd-core/workflows/scan.md +107 -0
  445. package/gsd-core/workflows/secure-phase.md +182 -0
  446. package/gsd-core/workflows/session-report.md +146 -0
  447. package/gsd-core/workflows/settings-advanced.md +810 -0
  448. package/gsd-core/workflows/settings-integrations.md +312 -0
  449. package/gsd-core/workflows/settings.md +566 -0
  450. package/gsd-core/workflows/ship.md +405 -0
  451. package/gsd-core/workflows/sketch-wrap-up.md +286 -0
  452. package/gsd-core/workflows/sketch.md +361 -0
  453. package/gsd-core/workflows/spec-phase.md +263 -0
  454. package/gsd-core/workflows/spike-wrap-up.md +307 -0
  455. package/gsd-core/workflows/spike.md +453 -0
  456. package/gsd-core/workflows/stats.md +80 -0
  457. package/gsd-core/workflows/sync-skills.md +182 -0
  458. package/gsd-core/workflows/testing-strategy.md +122 -0
  459. package/gsd-core/workflows/thread.md +222 -0
  460. package/gsd-core/workflows/transition.md +694 -0
  461. package/gsd-core/workflows/ui-phase.md +328 -0
  462. package/gsd-core/workflows/ui-review.md +193 -0
  463. package/gsd-core/workflows/ultraplan-phase.md +199 -0
  464. package/gsd-core/workflows/undo.md +314 -0
  465. package/gsd-core/workflows/update.md +496 -0
  466. package/gsd-core/workflows/validate-phase.md +181 -0
  467. package/gsd-core/workflows/verify-phase.md +544 -0
  468. package/gsd-core/workflows/verify-work.md +781 -0
  469. package/hooks/dist/gsd-check-update-worker.js +108 -0
  470. package/hooks/dist/gsd-check-update.js +66 -0
  471. package/hooks/dist/gsd-config-reload.js +133 -0
  472. package/hooks/dist/gsd-context-monitor.js +195 -0
  473. package/hooks/dist/gsd-cursor-post-tool.js +75 -0
  474. package/hooks/dist/gsd-cursor-session-start.js +52 -0
  475. package/hooks/dist/gsd-graphify-update.sh +158 -0
  476. package/hooks/dist/gsd-phase-boundary.sh +47 -0
  477. package/hooks/dist/gsd-prompt-guard.js +97 -0
  478. package/hooks/dist/gsd-read-guard.js +101 -0
  479. package/hooks/dist/gsd-read-injection-scanner.js +203 -0
  480. package/hooks/dist/gsd-session-state.sh +59 -0
  481. package/hooks/dist/gsd-statusline.js +566 -0
  482. package/hooks/dist/gsd-update-banner.js +138 -0
  483. package/hooks/dist/gsd-validate-commit.sh +57 -0
  484. package/hooks/dist/gsd-workflow-guard.js +167 -0
  485. package/hooks/dist/gsd-worktree-path-guard.js +169 -0
  486. package/hooks/dist/lib/git-cmd.js +150 -0
  487. package/hooks/dist/lib/gsd-graphify-rebuild.sh +65 -0
  488. package/hooks/dist/managed-hooks-registry.cjs +38 -0
  489. package/hooks/gsd-check-update-worker.js +108 -0
  490. package/hooks/gsd-check-update.js +66 -0
  491. package/hooks/gsd-config-reload.js +133 -0
  492. package/hooks/gsd-context-monitor.js +195 -0
  493. package/hooks/gsd-cursor-post-tool.js +75 -0
  494. package/hooks/gsd-cursor-session-start.js +52 -0
  495. package/hooks/gsd-graphify-update.sh +158 -0
  496. package/hooks/gsd-phase-boundary.sh +47 -0
  497. package/hooks/gsd-prompt-guard.js +97 -0
  498. package/hooks/gsd-read-guard.js +101 -0
  499. package/hooks/gsd-read-injection-scanner.js +203 -0
  500. package/hooks/gsd-session-state.sh +59 -0
  501. package/hooks/gsd-statusline.js +566 -0
  502. package/hooks/gsd-update-banner.js +138 -0
  503. package/hooks/gsd-validate-commit.sh +57 -0
  504. package/hooks/gsd-workflow-guard.js +167 -0
  505. package/hooks/gsd-worktree-path-guard.js +169 -0
  506. package/hooks/hooks.json +69 -0
  507. package/hooks/lib/git-cmd.js +150 -0
  508. package/hooks/lib/gsd-graphify-rebuild.sh +65 -0
  509. package/hooks/managed-hooks-registry.cjs +38 -0
  510. package/package.json +115 -0
  511. package/scripts/affected-tests-lib.cjs +542 -0
  512. package/scripts/audit-workflow-script-paths.cjs +73 -0
  513. package/scripts/base64-scan.sh +351 -0
  514. package/scripts/build-hooks.js +247 -0
  515. package/scripts/changeset/README.md +129 -0
  516. package/scripts/changeset/cli.cjs +590 -0
  517. package/scripts/changeset/github-release-notes.cjs +199 -0
  518. package/scripts/changeset/lint.cjs +111 -0
  519. package/scripts/changeset/new.cjs +137 -0
  520. package/scripts/changeset/parse.cjs +114 -0
  521. package/scripts/changeset/render.cjs +34 -0
  522. package/scripts/changeset/serialize.cjs +130 -0
  523. package/scripts/check-alias-drift.cjs +114 -0
  524. package/scripts/check-env.cjs +312 -0
  525. package/scripts/check-npm-integrity.cjs +215 -0
  526. package/scripts/ci-guard-runner.cjs +22 -0
  527. package/scripts/ci-prepare-test-scope.cjs +51 -0
  528. package/scripts/ci-rebase-check.cjs +86 -0
  529. package/scripts/ci-test-scope.cjs +431 -0
  530. package/scripts/command-contract-helpers.cjs +64 -0
  531. package/scripts/diff-touches-shipped-paths.cjs +155 -0
  532. package/scripts/fix-slash-commands.cjs +147 -0
  533. package/scripts/gen-inventory-manifest.cjs +115 -0
  534. package/scripts/gen-research-agents.cjs +276 -0
  535. package/scripts/generate-package-identity.cjs +125 -0
  536. package/scripts/issue-dedupe.cjs +278 -0
  537. package/scripts/lib/allowlist-ratchet.cjs +136 -0
  538. package/scripts/lib/cli-exit.cjs +56 -0
  539. package/scripts/lint-command-contract.cjs +114 -0
  540. package/scripts/lint-descriptions.cjs +87 -0
  541. package/scripts/lint-docs-required.cjs +222 -0
  542. package/scripts/lint-legacy-dir-name.cjs +160 -0
  543. package/scripts/lint-package-identity-drift.cjs +141 -0
  544. package/scripts/lint-pr-check-project-dir.cjs +99 -0
  545. package/scripts/lint-shell-command-projection-drift.cjs +62 -0
  546. package/scripts/lint-skill-deps.cjs +185 -0
  547. package/scripts/lint-test-file-count.allowlist.json +135 -0
  548. package/scripts/lint-test-file-count.cjs +246 -0
  549. package/scripts/mutation-matrix.cjs +222 -0
  550. package/scripts/pr-template-policy.cjs +268 -0
  551. package/scripts/prompt-injection-scan.sh +207 -0
  552. package/scripts/release-notes/discord-release-summary.cjs +373 -0
  553. package/scripts/release-notes/format-github-release-notes.cjs +261 -0
  554. package/scripts/release-tarball-smoke.cjs +629 -0
  555. package/scripts/research-profiles.cjs +149 -0
  556. package/scripts/run-affected-tests.cjs +7 -0
  557. package/scripts/run-cross-platform-tests.cjs +67 -0
  558. package/scripts/run-tests.cjs +315 -0
  559. package/scripts/secret-scan-lint.sh +231 -0
  560. package/scripts/secret-scan.sh +358 -0
  561. package/scripts/setup-branch-protection.sh +236 -0
  562. package/scripts/strip-prose-atrefs.cjs +106 -0
  563. package/scripts/sync-manifest-versions.cjs +119 -0
  564. package/scripts/sync-rulesets.sh +34 -0
  565. package/scripts/sync-runtime-launcher.cjs +399 -0
  566. package/scripts/test-failure-reasons.cjs +34 -0
  567. package/scripts/verify-npm-publish.cjs +240 -0
  568. package/scripts/workflow-policy.cjs +450 -0
@@ -0,0 +1,1017 @@
1
+ <purpose>
2
+ Execute small, ad-hoc tasks with GSD guarantees (atomic commits, STATE.md tracking). Quick mode spawns gsd-planner (quick mode) + gsd-executor(s), tracks tasks in `.planning/quick/`, and updates STATE.md's "Quick Tasks Completed" table.
3
+
4
+ With `--full` flag: enables the complete quality pipeline — discussion + research + plan-checking + verification. One flag for everything.
5
+
6
+ With `--validate` flag: enables plan-checking (max 2 iterations) and post-execution verification only. Use when you want quality guarantees without discussion or research.
7
+
8
+ With `--discuss` flag: lightweight discussion phase before planning. Surfaces assumptions, clarifies gray areas, captures decisions in CONTEXT.md so the planner treats them as locked.
9
+
10
+ With `--research` flag: spawns a focused research agent before planning. Investigates implementation approaches, library options, and pitfalls. Use when you're unsure how to approach a task.
11
+
12
+ Granular flags are composable: `--discuss --research --validate` gives the same result as `--full`.
13
+ </purpose>
14
+
15
+ <required_reading>
16
+ Read all files referenced by the invoking prompt's execution_context before starting.
17
+ </required_reading>
18
+
19
+ <available_agent_types>
20
+ Valid GSD subagent types (use exact names — do not fall back to 'general-purpose'):
21
+ - gsd-phase-researcher — Researches technical approaches for a phase
22
+ - gsd-planner — Creates detailed plans from phase scope
23
+ - gsd-plan-checker — Reviews plan quality before execution
24
+ - gsd-executor — Executes plan tasks, commits, creates SUMMARY.md
25
+ - gsd-verifier — Verifies phase completion, checks quality gates
26
+ - gsd-code-reviewer — Reviews source files for bugs, security issues, and code quality
27
+ </available_agent_types>
28
+
29
+ <process>
30
+ **Step 1: Parse arguments and get task description**
31
+
32
+ Parse `$ARGUMENTS` for:
33
+ - `--full` flag → store `$FULL_MODE=true`, `$DISCUSS_MODE=true`, `$RESEARCH_MODE=true`, `$VALIDATE_MODE=true`
34
+ - `--validate` flag → store `$VALIDATE_MODE=true`
35
+ - `--discuss` flag → store `$DISCUSS_MODE=true`
36
+ - `--research` flag → store `$RESEARCH_MODE=true`
37
+ - Remaining text → use as `$DESCRIPTION` if non-empty
38
+
39
+ After parsing, normalize: if `$DISCUSS_MODE` and `$RESEARCH_MODE` and `$VALIDATE_MODE` are all true, set `$FULL_MODE=true`. This ensures `--discuss --research --validate` is treated identically to `--full`.
40
+
41
+ If `$DESCRIPTION` is empty after parsing, prompt user interactively:
42
+
43
+
44
+ **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.
45
+
46
+ ```
47
+ AskUserQuestion(
48
+ header: "Quick Task",
49
+ question: "What do you want to do?",
50
+ followUp: null
51
+ )
52
+ ```
53
+
54
+ Store response as `$DESCRIPTION`.
55
+
56
+ If still empty, re-prompt: "Please provide a task description."
57
+
58
+ Display banner based on active flags:
59
+
60
+ If `$FULL_MODE` (all phases enabled — `--full` or all granular flags):
61
+ ```
62
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
63
+ GSD ► QUICK TASK (FULL)
64
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
65
+
66
+ ◆ Discussion + research + plan checking + verification enabled
67
+ ```
68
+
69
+ If `$DISCUSS_MODE` and `$VALIDATE_MODE` (no research):
70
+ ```
71
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
72
+ GSD ► QUICK TASK (DISCUSS + VALIDATE)
73
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
74
+
75
+ ◆ Discussion + plan checking + verification enabled
76
+ ```
77
+
78
+ If `$DISCUSS_MODE` and `$RESEARCH_MODE` (no validate):
79
+ ```
80
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
81
+ GSD ► QUICK TASK (DISCUSS + RESEARCH)
82
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
83
+
84
+ ◆ Discussion + research enabled
85
+ ```
86
+
87
+ If `$RESEARCH_MODE` and `$VALIDATE_MODE` (no discuss):
88
+ ```
89
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
90
+ GSD ► QUICK TASK (RESEARCH + VALIDATE)
91
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
92
+
93
+ ◆ Research + plan checking + verification enabled
94
+ ```
95
+
96
+ If `$DISCUSS_MODE` only:
97
+ ```
98
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
99
+ GSD ► QUICK TASK (DISCUSS)
100
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
101
+
102
+ ◆ Discussion phase enabled — surfacing gray areas before planning
103
+ ```
104
+
105
+ If `$RESEARCH_MODE` only:
106
+ ```
107
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
108
+ GSD ► QUICK TASK (RESEARCH)
109
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
110
+
111
+ ◆ Research phase enabled — investigating approaches before planning
112
+ ```
113
+
114
+ If `$VALIDATE_MODE` only:
115
+ ```
116
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
117
+ GSD ► QUICK TASK (VALIDATE)
118
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
119
+
120
+ ◆ Plan checking + verification enabled
121
+ ```
122
+
123
+ ---
124
+
125
+ **Step 2: Initialize**
126
+
127
+ ```bash
128
+ _GSD_SHIM_NAME="gsd-tools.cjs"; _GSD_RUNTIME_ROOT="${RUNTIME_DIR:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"; GSD_TOOLS="${_GSD_RUNTIME_ROOT}/gsd-core/bin/${_GSD_SHIM_NAME}"; if [ -f "$GSD_TOOLS" ]; then gsd_run() { node "$GSD_TOOLS" "$@"; }; elif [ -f "${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="${_GSD_RUNTIME_ROOT}/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; elif command -v gsd-tools >/dev/null 2>&1; then GSD_TOOLS="$(command -v gsd-tools)"; gsd_run() { "$GSD_TOOLS" "$@"; }; elif [ -f "$HOME/.claude/gsd-core/bin/${_GSD_SHIM_NAME}" ]; then GSD_TOOLS="$HOME/.claude/gsd-core/bin/${_GSD_SHIM_NAME}"; gsd_run() { node "$GSD_TOOLS" "$@"; }; else echo "ERROR: gsd-tools.cjs not found at $GSD_TOOLS and gsd-tools is not on PATH. Run: npx -y @therocketcode/gsd-core@latest --claude --local" >&2; exit 1; fi
129
+ INIT=$(gsd_run query init.quick "$DESCRIPTION")
130
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
131
+ AGENT_SKILLS_PLANNER=$(gsd_run query agent-skills gsd-planner)
132
+ AGENT_SKILLS_EXECUTOR=$(gsd_run query agent-skills gsd-executor)
133
+ AGENT_SKILLS_CHECKER=$(gsd_run query agent-skills gsd-plan-checker)
134
+ AGENT_SKILLS_VERIFIER=$(gsd_run query agent-skills gsd-verifier)
135
+ ```
136
+
137
+ Parse JSON for: `planner_model`, `executor_model`, `checker_model`, `verifier_model`, `commit_docs`, `branch_name`, `quick_id`, `slug`, `date`, `timestamp`, `quick_dir`, `task_dir`, `roadmap_exists`, `planning_exists`.
138
+
139
+ ```bash
140
+ USE_WORKTREES=$(gsd_run query config-get workflow.use_worktrees 2>/dev/null || echo "true")
141
+ ```
142
+
143
+ If `USE_WORKTREES` is not `"false"`, run a startup orphan sweep before spawning any executors. This reaps locked worktrees whose lock-owner process is dead, whose branch is merged into the default branch, and whose lock file mtime is older than 5 minutes. Running it at startup prevents accumulation of orphaned worktrees from prior sessions that exited without cleanup (#3707).
144
+
145
+ ```bash
146
+ if [ "$USE_WORKTREES" != "false" ]; then
147
+ gsd_run query worktree.reap-orphans 2>/dev/null || true
148
+ fi
149
+ ```
150
+
151
+ If the project uses git submodules, worktree isolation is unsafe **only when the quick task touches a submodule path**. The previous behavior unconditionally disabled worktree isolation whenever `.gitmodules` existed, which penalised every quick task in a submodule project even when the task was nowhere near a submodule. Parse submodule paths from `.gitmodules` so the executor can act on actual submodule paths rather than the mere file's existence:
152
+
153
+ ```bash
154
+ # Parse submodule paths from .gitmodules once (empty if no .gitmodules).
155
+ # SUBMODULE_PATHS is a newline-separated list of repo-relative paths used as
156
+ # a fail-loud commit-time guard inside the quick-task executor — if the
157
+ # executor stages any path that falls inside SUBMODULE_PATHS, it must abort
158
+ # the commit and surface the conflict rather than silently corrupting the
159
+ # submodule state.
160
+ if [ -f .gitmodules ]; then
161
+ SUBMODULE_PATHS=$(git config --file .gitmodules --get-regexp '^submodule\..*\.path$' 2>/dev/null | awk '{print $2}')
162
+ else
163
+ SUBMODULE_PATHS=""
164
+ fi
165
+ ```
166
+
167
+ Quick mode does not have a pre-declared `files_modified` list (the task is freeform), so use a fail-loud guard at commit time: when the executor stages files for the quick-task commit, if any staged path falls inside a `SUBMODULE_PATHS` entry, abort with a clear error explaining that worktree-isolated commits cannot safely span submodule boundaries — the user can re-run with `workflow.use_worktrees=false` to fall back to sequential execution on the main tree. If `SUBMODULE_PATHS` is empty (no `.gitmodules` in the repo), worktree isolation proceeds normally.
168
+
169
+ **If `roadmap_exists` is false:** Error — Quick mode requires an active project with ROADMAP.md. Run `/gsd:new-project` first.
170
+
171
+ Quick tasks can run mid-phase - validation only checks ROADMAP.md exists, not phase status.
172
+
173
+ ---
174
+
175
+ **Step 2.5: Handle quick-task branching**
176
+
177
+ **If `branch_name` is empty/null:** Skip and continue on the current branch.
178
+
179
+ **If `branch_name` is set:** Check out the quick-task branch before any planning commits.
180
+
181
+ The new branch must fork off the project's default branch (`origin/HEAD`), not
182
+ off whatever HEAD happens to be checked out — otherwise consecutive quick tasks
183
+ compound on top of each other and stay unpushed (#2916). If `$branch_name`
184
+ already exists locally, reuse it as-is so resumed work is not rebased.
185
+
186
+ ```bash
187
+ DEFAULT_BRANCH=$(git symbolic-ref --quiet --short refs/remotes/origin/HEAD 2>/dev/null | sed 's|^origin/||')
188
+ DEFAULT_BRANCH=${DEFAULT_BRANCH:-main}
189
+
190
+ if git show-ref --verify --quiet "refs/heads/$branch_name"; then
191
+ git switch "$branch_name" \
192
+ || { echo "ERROR: Could not switch to existing quick-task branch '$branch_name'." >&2; exit 1; }
193
+ else
194
+ # Fetch the default branch so origin/$DEFAULT_BRANCH is current. If the fetch
195
+ # fails (offline, no remote, auth failure) AND we have no local copy of
196
+ # origin/$DEFAULT_BRANCH to fall back on, abort — creating the branch off
197
+ # arbitrary HEAD is exactly the bug #2916 fixed.
198
+ if ! git fetch --quiet origin "$DEFAULT_BRANCH"; then
199
+ if ! git show-ref --verify --quiet "refs/remotes/origin/$DEFAULT_BRANCH"; then
200
+ echo "ERROR: Could not fetch origin/$DEFAULT_BRANCH and no local copy exists. Refusing to create '$branch_name' off the current HEAD (#2916). Resolve the remote/network issue and retry." >&2
201
+ exit 1
202
+ fi
203
+ echo "WARNING: git fetch origin $DEFAULT_BRANCH failed; using the local copy of origin/$DEFAULT_BRANCH as base." >&2
204
+ fi
205
+
206
+ if [ -n "$(git status --porcelain)" ]; then
207
+ echo "WARNING: Uncommitted changes present. Carrying them onto the new quick-task branch — they will be branched off origin/$DEFAULT_BRANCH (not the previous-task HEAD)."
208
+ else
209
+ # Best-effort: fast-forward the local default branch so subsequent local
210
+ # work sees the latest tip. Failure here is non-fatal because we always
211
+ # create the new branch directly from origin/$DEFAULT_BRANCH below.
212
+ git switch --quiet "$DEFAULT_BRANCH" 2>/dev/null \
213
+ && git merge --ff-only --quiet "origin/$DEFAULT_BRANCH" 2>/dev/null \
214
+ || true
215
+ fi
216
+
217
+ # Pin the new branch to origin/$DEFAULT_BRANCH so the start point is
218
+ # deterministic regardless of which branch we are currently on (#2916).
219
+ # On success HEAD is exactly at origin/$DEFAULT_BRANCH, so a post-creation
220
+ # merge-base / "ahead-of" guard would be unreachable — the explicit base
221
+ # argument here is the single source of correctness for #2916.
222
+ git checkout -b "$branch_name" "origin/$DEFAULT_BRANCH" \
223
+ || { echo "ERROR: Could not create '$branch_name' from origin/$DEFAULT_BRANCH (#2916)." >&2; exit 1; }
224
+ fi
225
+ ```
226
+
227
+ All quick-task commits for this run stay on that branch. User handles merge/rebase afterward.
228
+
229
+ ---
230
+
231
+ **Step 3: Create task directory**
232
+
233
+ ```bash
234
+ mkdir -p "${task_dir}"
235
+ ```
236
+
237
+ ---
238
+
239
+ **Step 4: Create quick task directory**
240
+
241
+ Create the directory for this quick task:
242
+
243
+ ```bash
244
+ QUICK_DIR=".planning/quick/${quick_id}-${slug}"
245
+ mkdir -p "$QUICK_DIR"
246
+ ```
247
+
248
+ Report to user:
249
+ ```
250
+ Creating quick task ${quick_id}: ${DESCRIPTION}
251
+ Directory: ${QUICK_DIR}
252
+ ```
253
+
254
+ Store `$QUICK_DIR` for use in orchestration.
255
+
256
+ ---
257
+
258
+ **Step 4.5: Discussion phase (only when `$DISCUSS_MODE`)**
259
+
260
+ Skip this step entirely if NOT `$DISCUSS_MODE`.
261
+
262
+ Display banner:
263
+ ```
264
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
265
+ GSD ► DISCUSSING QUICK TASK
266
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
267
+
268
+ ◆ Surfacing gray areas for: ${DESCRIPTION}
269
+ ```
270
+
271
+ **4.5a. Identify gray areas**
272
+
273
+ Analyze `$DESCRIPTION` to identify 2-4 gray areas — implementation decisions that would change the outcome and that the user should weigh in on.
274
+
275
+ Use the domain-aware heuristic to generate phase-specific (not generic) gray areas:
276
+ - Something users **SEE** → layout, density, interactions, states
277
+ - Something users **CALL** → responses, errors, auth, versioning
278
+ - Something users **RUN** → output format, flags, modes, error handling
279
+ - Something users **READ** → structure, tone, depth, flow
280
+ - Something being **ORGANIZED** → criteria, grouping, naming, exceptions
281
+
282
+ Each gray area should be a concrete decision point, not a vague category. Example: "Loading behavior" not "UX".
283
+
284
+ **4.5b. Present gray areas**
285
+
286
+ ```
287
+ AskUserQuestion(
288
+ header: "Gray Areas",
289
+ question: "Which areas need clarification before planning?",
290
+ options: [
291
+ { label: "${area_1}", description: "${why_it_matters_1}" },
292
+ { label: "${area_2}", description: "${why_it_matters_2}" },
293
+ { label: "${area_3}", description: "${why_it_matters_3}" },
294
+ { label: "All clear", description: "Skip discussion — I know what I want" }
295
+ ],
296
+ multiSelect: true
297
+ )
298
+ ```
299
+
300
+ If user selects "All clear" → skip to Step 5 (no CONTEXT.md written).
301
+
302
+ **4.5c. Discuss selected areas**
303
+
304
+ For each selected area, ask 1-2 focused questions via AskUserQuestion:
305
+
306
+ ```
307
+ AskUserQuestion(
308
+ header: "${area_name}",
309
+ question: "${specific_question_about_this_area}",
310
+ options: [
311
+ { label: "${concrete_choice_1}", description: "${what_this_means}" },
312
+ { label: "${concrete_choice_2}", description: "${what_this_means}" },
313
+ { label: "${concrete_choice_3}", description: "${what_this_means}" },
314
+ { label: "You decide", description: "Claude's discretion" }
315
+ ],
316
+ multiSelect: false
317
+ )
318
+ ```
319
+
320
+ Rules:
321
+ - Options must be concrete choices, not abstract categories
322
+ - Highlight recommended choice where you have a clear opinion
323
+ - If user selects "Other" with freeform text, switch to plain text follow-up (per questioning.md freeform rule)
324
+ - If user selects "You decide", capture as Claude's Discretion in CONTEXT.md
325
+ - Max 2 questions per area — this is lightweight, not a deep dive
326
+
327
+ Collect all decisions into `$DECISIONS`.
328
+
329
+ **4.5d. Write CONTEXT.md**
330
+
331
+ Write `${QUICK_DIR}/${quick_id}-CONTEXT.md` using the standard context template structure:
332
+
333
+ ```markdown
334
+ # Quick Task ${quick_id}: ${DESCRIPTION} - Context
335
+
336
+ **Gathered:** ${date}
337
+ **Status:** Ready for planning
338
+
339
+ <domain>
340
+ ## Task Boundary
341
+
342
+ ${DESCRIPTION}
343
+
344
+ </domain>
345
+
346
+ <decisions>
347
+ ## Implementation Decisions
348
+
349
+ ### ${area_1_name}
350
+ - ${decision_from_discussion}
351
+
352
+ ### ${area_2_name}
353
+ - ${decision_from_discussion}
354
+
355
+ ### Claude's Discretion
356
+ ${areas_where_user_said_you_decide_or_areas_not_discussed}
357
+
358
+ </decisions>
359
+
360
+ <specifics>
361
+ ## Specific Ideas
362
+
363
+ ${any_specific_references_or_examples_from_discussion}
364
+
365
+ [If none: "No specific requirements — open to standard approaches"]
366
+
367
+ </specifics>
368
+
369
+ <canonical_refs>
370
+ ## Canonical References
371
+
372
+ ${any_specs_adrs_or_docs_referenced_during_discussion}
373
+
374
+ [If none: "No external specs — requirements fully captured in decisions above"]
375
+
376
+ </canonical_refs>
377
+ ```
378
+
379
+ Note: Quick task CONTEXT.md omits `<code_context>` and `<deferred>` sections (no codebase scouting, no phase scope to defer to). Keep it lean. The `<canonical_refs>` section is included when external docs were referenced — omit it only if no external docs apply.
380
+
381
+ Report: `Context captured: ${QUICK_DIR}/${quick_id}-CONTEXT.md`
382
+
383
+ ---
384
+
385
+ **Step 4.75: Research phase (only when `$RESEARCH_MODE`)**
386
+
387
+ Skip this step entirely if NOT `$RESEARCH_MODE`.
388
+
389
+ Display banner:
390
+ ```
391
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
392
+ GSD ► RESEARCHING QUICK TASK
393
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
394
+
395
+ ◆ Investigating approaches for: ${DESCRIPTION} (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
396
+ ```
397
+
398
+ Spawn a single focused researcher (not 4 parallel researchers like full phases — quick tasks need targeted research, not broad domain surveys):
399
+
400
+ ```
401
+ Agent(
402
+ prompt="
403
+ <research_context>
404
+
405
+ **Mode:** quick-task
406
+ **Task:** ${DESCRIPTION}
407
+ **Output:** ${QUICK_DIR}/${quick_id}-RESEARCH.md
408
+
409
+ <files_to_read>
410
+ - .planning/STATE.md (Project state — what's already built)
411
+ - .planning/PROJECT.md (Project context)
412
+ - ./CLAUDE.md (if exists — project-specific guidelines)
413
+ ${DISCUSS_MODE ? '- ' + QUICK_DIR + '/' + quick_id + '-CONTEXT.md (User decisions — research should align with these)' : ''}
414
+ </files_to_read>
415
+
416
+ ${AGENT_SKILLS_PLANNER}
417
+
418
+ </research_context>
419
+
420
+ <focus>
421
+ This is a quick task, not a full phase. Research should be concise and targeted:
422
+ 1. Best libraries/patterns for this specific task
423
+ 2. Common pitfalls and how to avoid them
424
+ 3. Integration points with existing codebase
425
+ 4. Any constraints or gotchas worth knowing before planning
426
+
427
+ Do NOT produce a full domain survey. Target 1-2 pages of actionable findings.
428
+ </focus>
429
+
430
+ <output>
431
+ Write research to: ${QUICK_DIR}/${quick_id}-RESEARCH.md
432
+ Use standard research format but keep it lean — skip sections that don't apply.
433
+ Return: ## RESEARCH COMPLETE with file path
434
+ </output>
435
+ ",
436
+ subagent_type="gsd-phase-researcher",
437
+ model="{planner_model}",
438
+ description="Research: ${DESCRIPTION}"
439
+ )
440
+ ```
441
+
442
+ > **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.
443
+
444
+ After researcher returns:
445
+ 1. Verify research exists at `${QUICK_DIR}/${quick_id}-RESEARCH.md`
446
+ 2. Report: "Research complete: ${QUICK_DIR}/${quick_id}-RESEARCH.md"
447
+
448
+ If research file not found, warn but continue: "Research agent did not produce output — proceeding to planning without research."
449
+
450
+ ---
451
+
452
+ **Step 5: Spawn planner (quick mode)**
453
+
454
+ **If `$VALIDATE_MODE`:** Use `quick-full` mode with stricter constraints.
455
+
456
+ **If NOT `$VALIDATE_MODE`:** Use standard `quick` mode.
457
+
458
+ Display: `◆ Spawning planner... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)`
459
+
460
+ ```
461
+ Agent(
462
+ prompt="
463
+ <planning_context>
464
+
465
+ **Mode:** ${VALIDATE_MODE ? 'quick-full' : 'quick'}
466
+ **Directory:** ${QUICK_DIR}
467
+ **Description:** ${DESCRIPTION}
468
+
469
+ <files_to_read>
470
+ - .planning/STATE.md (Project State)
471
+ - ./CLAUDE.md (if exists — follow project-specific guidelines)
472
+ ${DISCUSS_MODE ? '- ' + QUICK_DIR + '/' + quick_id + '-CONTEXT.md (User decisions — locked, do not revisit)' : ''}
473
+ ${RESEARCH_MODE ? '- ' + QUICK_DIR + '/' + quick_id + '-RESEARCH.md (Research findings — use to inform implementation choices)' : ''}
474
+ </files_to_read>
475
+
476
+ ${AGENT_SKILLS_PLANNER}
477
+
478
+ **Project skills:** Check .claude/skills/ or .agents/skills/ directory (if either exists) — read SKILL.md files, plans should account for project skill rules
479
+
480
+ </planning_context>
481
+
482
+ <constraints>
483
+ - Create a SINGLE plan with 1-3 focused tasks
484
+ - Quick tasks should be atomic and self-contained
485
+ ${RESEARCH_MODE ? '- Research findings are available — use them to inform library/pattern choices' : '- No research phase'}
486
+ ${VALIDATE_MODE ? '- Target ~40% context usage (structured for verification)' : '- Target ~30% context usage (simple, focused)'}
487
+ ${VALIDATE_MODE ? '- MUST generate `must_haves` in plan frontmatter (truths, artifacts, key_links)' : ''}
488
+ ${VALIDATE_MODE ? '- Each task MUST have `files`, `action`, `verify`, `done` fields' : ''}
489
+ </constraints>
490
+
491
+ <output>
492
+ Write plan to: ${QUICK_DIR}/${quick_id}-PLAN.md
493
+ Return: ## PLANNING COMPLETE with plan path
494
+ </output>
495
+ ",
496
+ subagent_type="gsd-planner",
497
+ model="{planner_model}",
498
+ description="Quick plan: ${DESCRIPTION}"
499
+ )
500
+ ```
501
+
502
+ > **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.
503
+
504
+ After planner returns:
505
+ 1. Verify plan exists at `${QUICK_DIR}/${quick_id}-PLAN.md`
506
+ 2. Extract plan count (typically 1 for quick tasks)
507
+ 3. Report: "Plan created: ${QUICK_DIR}/${quick_id}-PLAN.md"
508
+
509
+ If plan not found, error: "Planner failed to create ${quick_id}-PLAN.md"
510
+
511
+ ---
512
+
513
+ **Step 5.5: Plan-checker loop (only when `$VALIDATE_MODE`)**
514
+
515
+ Skip this step entirely if NOT `$VALIDATE_MODE`.
516
+
517
+ Display banner:
518
+ ```
519
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
520
+ GSD ► CHECKING PLAN
521
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
522
+
523
+ ◆ Spawning plan checker... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
524
+ ```
525
+
526
+ Checker prompt:
527
+
528
+ ```markdown
529
+ <verification_context>
530
+ **Mode:** quick-full
531
+ **Task Description:** ${DESCRIPTION}
532
+
533
+ <files_to_read>
534
+ - ${QUICK_DIR}/${quick_id}-PLAN.md (Plan to verify)
535
+ </files_to_read>
536
+
537
+ ${AGENT_SKILLS_CHECKER}
538
+
539
+ **Scope:** This is a quick task, not a full phase. Skip checks that require a ROADMAP phase goal.
540
+ </verification_context>
541
+
542
+ <check_dimensions>
543
+ - Requirement coverage: Does the plan address the task description?
544
+ - Task completeness: Do tasks have files, action, verify, done fields?
545
+ - Key links: Are referenced files real?
546
+ - Scope sanity: Is this appropriately sized for a quick task (1-3 tasks)?
547
+ - must_haves derivation: Are must_haves traceable to the task description?
548
+
549
+ Skip: cross-plan deps (single plan), ROADMAP alignment
550
+ ${DISCUSS_MODE ? '- Context compliance: Does the plan honor locked decisions from CONTEXT.md?' : '- Skip: context compliance (no CONTEXT.md)'}
551
+ </check_dimensions>
552
+
553
+ <expected_output>
554
+ - ## VERIFICATION PASSED — all checks pass
555
+ - ## ISSUES FOUND — structured issue list
556
+ </expected_output>
557
+ ```
558
+
559
+ ```
560
+ Agent(
561
+ prompt=checker_prompt,
562
+ subagent_type="gsd-plan-checker",
563
+ model="{checker_model}",
564
+ description="Check quick plan: ${DESCRIPTION}"
565
+ )
566
+ ```
567
+
568
+ > **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.
569
+
570
+ **Handle checker return:**
571
+
572
+ - **`## VERIFICATION PASSED`:** Display confirmation, proceed to step 6.
573
+ - **`## ISSUES FOUND`:** Display issues, check iteration count, enter revision loop.
574
+
575
+ **Revision loop (max 2 iterations):**
576
+
577
+ Track `iteration_count` (starts at 1 after initial plan + check).
578
+
579
+ **If iteration_count < 2:**
580
+
581
+ Display: `Sending back to planner for revision... (iteration ${N}/2)`
582
+
583
+ Revision prompt:
584
+
585
+ ```markdown
586
+ <revision_context>
587
+ **Mode:** quick-full (revision)
588
+
589
+ <files_to_read>
590
+ - ${QUICK_DIR}/${quick_id}-PLAN.md (Existing plan)
591
+ </files_to_read>
592
+
593
+ ${AGENT_SKILLS_PLANNER}
594
+
595
+ **Checker issues:** ${structured_issues_from_checker}
596
+
597
+ </revision_context>
598
+
599
+ <instructions>
600
+ Make targeted updates to address checker issues.
601
+ Do NOT replan from scratch unless issues are fundamental.
602
+ Return what changed.
603
+ </instructions>
604
+ ```
605
+
606
+ ```
607
+ Agent(
608
+ prompt=revision_prompt,
609
+ subagent_type="gsd-planner",
610
+ model="{planner_model}",
611
+ description="Revise quick plan: ${DESCRIPTION}"
612
+ )
613
+ ```
614
+
615
+ > **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.
616
+
617
+ After planner returns → spawn checker again, increment iteration_count.
618
+
619
+ **If iteration_count >= 2:**
620
+
621
+ Display: `Max iterations reached. ${N} issues remain:` + issue list
622
+
623
+ Offer: 1) Force proceed, 2) Abort
624
+
625
+ ---
626
+
627
+ **Step 5.6: Pre-dispatch plan commit (worktree mode only)**
628
+
629
+ When `USE_WORKTREES !== "false"`, commit PLAN.md to the current branch **before** spawning the executor. This ensures the worktree inherits PLAN.md at its branch HEAD so the executor can read it via a worktree-rooted path — avoiding the main-repo path priming that triggers CC #36182 path-resolution drift.
630
+
631
+ Skip this step entirely if `USE_WORKTREES === "false"` (non-worktree mode: PLAN.md is committed in Step 8 as usual).
632
+
633
+ ```bash
634
+ if [ "${USE_WORKTREES}" != "false" ]; then
635
+ COMMIT_DOCS=$(gsd_run query config-get commit_docs 2>/dev/null || echo "true")
636
+ if [ "$COMMIT_DOCS" != "false" ]; then
637
+ git add "${QUICK_DIR}/${quick_id}-PLAN.md"
638
+ # No-op skip if nothing actually staged (idempotent re-runs).
639
+ if git diff --cached --quiet -- "${QUICK_DIR}/${quick_id}-PLAN.md"; then
640
+ echo "ℹ Pre-dispatch PLAN.md commit skipped (no staged changes)"
641
+ else
642
+ # Run hooks normally (#2924). If a project opts out via
643
+ # workflow.worktree_skip_hooks=true, honor that opt-in only.
644
+ SKIP_HOOKS=$(gsd_run query config-get workflow.worktree_skip_hooks 2>/dev/null || echo "false")
645
+ if [ "$SKIP_HOOKS" = "true" ]; then
646
+ git commit --no-verify -m "docs(${quick_id}): pre-dispatch plan for ${DESCRIPTION}" -- "${QUICK_DIR}/${quick_id}-PLAN.md" \
647
+ || { echo "ERROR: pre-dispatch PLAN.md commit failed (--no-verify path). Aborting before executor dispatch." >&2; exit 1; }
648
+ else
649
+ git commit -m "docs(${quick_id}): pre-dispatch plan for ${DESCRIPTION}" -- "${QUICK_DIR}/${quick_id}-PLAN.md" \
650
+ || { echo "ERROR: pre-dispatch PLAN.md commit failed — likely a pre-commit hook failure. Fix the hook output above (or set workflow.worktree_skip_hooks=true to bypass) and re-run." >&2; exit 1; }
651
+ fi
652
+ fi
653
+ fi
654
+ fi
655
+ ```
656
+
657
+ ---
658
+
659
+ **Step 6: Spawn executor**
660
+
661
+ Capture current HEAD before spawning (used for worktree branch check):
662
+ ```bash
663
+ EXPECTED_BASE=$(git rev-parse HEAD)
664
+ if [ "${USE_WORKTREES:-true}" != "false" ]; then
665
+ QUICK_WORKTREE_MANIFEST=$(mktemp "${TMPDIR:-/tmp}/gsd-quick-worktree-XXXXXX.json")
666
+ printf '{"worktrees":[]}\n' > "$QUICK_WORKTREE_MANIFEST"
667
+ export QUICK_WORKTREE_MANIFEST
668
+ fi
669
+ ```
670
+
671
+ Spawn gsd-executor with plan reference:
672
+
673
+ ```
674
+ Agent(
675
+ prompt="
676
+ Execute quick task ${quick_id}.
677
+
678
+ ${USE_WORKTREES !== "false" ? `
679
+ <worktree_branch_check>
680
+ ORCHESTRATOR build-time embed (NOT a sub-agent runtime step): before this dispatch, read \`gsd-core/references/worktree-branch-check.md\`, substitute \`{EXPECTED_BASE}\` with the base SHA captured above (${EXPECTED_BASE}), and replace this note with that fragment's \`<worktree_branch_check>\` block so the dispatched prompt carries the runnable guard verbatim — do not pass this instruction through in its place.
681
+ </worktree_branch_check>
682
+ ` : ''}
683
+
684
+ <files_to_read>
685
+ - ${QUICK_DIR}/${quick_id}-PLAN.md (Plan)
686
+ - .planning/STATE.md (Project state)
687
+ - ./CLAUDE.md (Project instructions, if exists)
688
+ - .claude/skills/ or .agents/skills/ (Project skills, if either exists — list skills, read SKILL.md for each, follow relevant rules during implementation)
689
+ </files_to_read>
690
+
691
+ ${AGENT_SKILLS_EXECUTOR}
692
+
693
+ <submodule_commit_guard>
694
+ SUBMODULE_PATHS for this project: ${SUBMODULE_PATHS}
695
+
696
+ If SUBMODULE_PATHS is non-empty, you MUST run this fail-loud guard immediately
697
+ before EVERY git commit you create during this quick task (after \`git add\`,
698
+ before \`git commit\`). Quick mode does not have a pre-declared files_modified
699
+ list, so the guard runs at commit time:
700
+
701
+ \`\`\`bash
702
+ SUBMODULE_PATHS=\"${SUBMODULE_PATHS}\"
703
+ if [ -n \"\$SUBMODULE_PATHS\" ]; then
704
+ STAGED=\$(git diff --cached --name-only)
705
+ for sm_raw in \$SUBMODULE_PATHS; do
706
+ sm=\"\${sm_raw#./}\"
707
+ sm=\"\${sm%/}\"
708
+ [ -z \"\$sm\" ] && continue
709
+ for f_raw in \$STAGED; do
710
+ f=\"\${f_raw#./}\"
711
+ f=\"\${f%/}\"
712
+ case \"\$f\" in
713
+ \"\$sm\"|\"\$sm\"/*)
714
+ echo \"ABORT: staged path \$f_raw falls inside submodule \$sm — worktree-isolated commits cannot safely span submodule boundaries. Re-run with workflow.use_worktrees=false.\" >&2
715
+ exit 1 ;;
716
+ esac
717
+ done
718
+ done
719
+ fi
720
+ \`\`\`
721
+
722
+ If the guard aborts, do NOT attempt the commit, do NOT remove the staged files,
723
+ and do NOT continue subsequent tasks. Surface the abort message in your
724
+ SUMMARY.md and stop — the user must rerun with worktrees disabled.
725
+ </submodule_commit_guard>
726
+
727
+ <constraints>
728
+ - Execute all tasks in the plan
729
+ - Commit each task atomically (code changes only)
730
+ - Run the <submodule_commit_guard> bash block before every \`git commit\` if SUBMODULE_PATHS is non-empty
731
+ - Create summary at: ${QUICK_DIR}/${quick_id}-SUMMARY.md
732
+ - Do NOT commit docs artifacts (SUMMARY.md, STATE.md, PLAN.md) — the orchestrator handles the docs commit in Step 8
733
+ - Do NOT update ROADMAP.md (quick tasks are separate from planned phases)
734
+ </constraints>
735
+ ",
736
+ subagent_type="gsd-executor",
737
+ model="{executor_model}",
738
+ ${USE_WORKTREES !== "false" ? 'isolation="worktree",' : ''}
739
+ description="Execute: ${DESCRIPTION}"
740
+ )
741
+ ```
742
+
743
+ > **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.
744
+
745
+ If the executor ran with `isolation="worktree"`, append its returned `{agent_id, worktree_path, branch, expected_base}` metadata to `QUICK_WORKTREE_MANIFEST` before cleanup. If any field is unavailable, stop and ask for recovery; do not discover global worktrees.
746
+
747
+ After executor returns:
748
+ 1. **Worktree cleanup:** If the executor ran with `isolation="worktree"`, merge the worktree branch back and clean up:
749
+ ```bash
750
+ QUICK_WORKTREE_MANIFEST=${QUICK_WORKTREE_MANIFEST:-$WAVE_WORKTREE_MANIFEST}
751
+ [ -n "${QUICK_WORKTREE_MANIFEST:-}" ] && [ -f "$QUICK_WORKTREE_MANIFEST" ] || {
752
+ echo "BLOCKED: missing QUICK_WORKTREE_MANIFEST; refusing broad worktree cleanup (#3384)." >&2
753
+ exit 1
754
+ }
755
+
756
+ # Prefer the bounded cleanup helper. It verifies branch identity, expected
757
+ # base, deletion diffs, merge result, and worktree removal before branch
758
+ # deletion. If it blocks, resolve the reported manifest entry and rerun.
759
+ # Fail closed: SDK refusal (safety guard #3174/#3384) must surface — do not swallow exit 1.
760
+ gsd_run query worktree.cleanup-wave --manifest "$QUICK_WORKTREE_MANIFEST" || exit 1
761
+ ```
762
+ If `workflow.use_worktrees` is `false`, skip this step.
763
+ 2. Verify summary exists at `${QUICK_DIR}/${quick_id}-SUMMARY.md`
764
+ 3. Extract commit hash from executor output
765
+ 4. Report completion status
766
+
767
+ **Known Claude Code bug (classifyHandoffIfNeeded):** If executor reports "failed" with error `classifyHandoffIfNeeded is not defined`, this is a Claude Code runtime bug — not a real failure. Check if summary file exists and git log shows commits. If so, treat as successful.
768
+
769
+ If summary not found, error: "Executor failed to create ${quick_id}-SUMMARY.md"
770
+
771
+ Note: For quick tasks producing multiple plans (rare), spawn executors in parallel waves per execute-phase patterns.
772
+
773
+ ---
774
+
775
+ **Step 6.25: Code review (auto)**
776
+
777
+ Skip this step entirely if `$FULL_MODE` is false.
778
+
779
+ **Config gate:**
780
+ ```bash
781
+ CODE_REVIEW_ENABLED=$(gsd_run query config-get workflow.code_review 2>/dev/null || echo "true")
782
+ ```
783
+ If `"false"`, skip with message "Code review skipped (workflow.code_review=false)".
784
+
785
+ **Scope files from executor's commits:**
786
+ ```bash
787
+ # Find the diff base: last commit before quick task started
788
+ # Use git log to find commits referencing the quick task id, then take the parent of the oldest
789
+ QUICK_COMMITS=$(git log --oneline --format="%H" --grep="${quick_id}" 2>/dev/null)
790
+ if [ -n "$QUICK_COMMITS" ]; then
791
+ DIFF_BASE=$(echo "$QUICK_COMMITS" | tail -1)^
792
+ # Verify parent exists (guard against first commit in repo)
793
+ git rev-parse "${DIFF_BASE}" >/dev/null 2>&1 || DIFF_BASE=$(echo "$QUICK_COMMITS" | tail -1)
794
+ else
795
+ # No commits found for this quick task — skip review
796
+ DIFF_BASE=""
797
+ fi
798
+
799
+ if [ -n "$DIFF_BASE" ]; then
800
+ CHANGED_FILES=$(git diff --name-only "${DIFF_BASE}..HEAD" -- . ':!.planning' 2>/dev/null | tr '\n' ' ')
801
+ else
802
+ CHANGED_FILES=""
803
+ fi
804
+ ```
805
+
806
+ If `CHANGED_FILES` is empty, skip with "No source files changed — skipping code review."
807
+
808
+ **Invoke review:**
809
+ ```
810
+ Agent(
811
+ prompt="Review these files for bugs, security issues, and code quality.
812
+ Files: ${CHANGED_FILES}
813
+ Output: ${QUICK_DIR}/${quick_id}-REVIEW.md
814
+ Depth: quick",
815
+ subagent_type="gsd-code-reviewer",
816
+ model="{executor_model}"
817
+ )
818
+ ```
819
+
820
+ > **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.
821
+
822
+ If review produces findings, display advisory message. **Error handling:** Failures are non-blocking — catch and proceed.
823
+
824
+ ---
825
+
826
+ **Step 6.5: Verification (only when `$VALIDATE_MODE`)**
827
+
828
+ Skip this step entirely if NOT `$VALIDATE_MODE`.
829
+
830
+ Display banner:
831
+ ```
832
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
833
+ GSD ► VERIFYING RESULTS
834
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
835
+
836
+ ◆ Spawning verifier... (runs in a subagent — no output until it returns, ~1–5 min; expected, not a freeze)
837
+ ```
838
+
839
+ ```
840
+ Agent(
841
+ prompt="Verify quick task goal achievement.
842
+ Task directory: ${QUICK_DIR}
843
+ Task goal: ${DESCRIPTION}
844
+
845
+ <files_to_read>
846
+ - ${QUICK_DIR}/${quick_id}-PLAN.md (Plan)
847
+ </files_to_read>
848
+
849
+ ${AGENT_SKILLS_VERIFIER}
850
+
851
+ Check must_haves against actual codebase. Create VERIFICATION.md at ${QUICK_DIR}/${quick_id}-VERIFICATION.md.",
852
+ subagent_type="gsd-verifier",
853
+ model="{verifier_model}",
854
+ description="Verify: ${DESCRIPTION}"
855
+ )
856
+ ```
857
+
858
+ > **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.
859
+
860
+ Read verification status:
861
+ ```bash
862
+ grep "^status:" "${QUICK_DIR}/${quick_id}-VERIFICATION.md" | cut -d: -f2 | tr -d ' '
863
+ ```
864
+
865
+ Store as `$VERIFICATION_STATUS`.
866
+
867
+ | Status | Action |
868
+ |--------|--------|
869
+ | `passed` | Store `$VERIFICATION_STATUS = "Verified"`, continue to step 7 |
870
+ | `human_needed` | Display items needing manual check, store `$VERIFICATION_STATUS = "Needs Review"`, continue |
871
+ | `gaps_found` | Display gap summary, offer: 1) Re-run executor to fix gaps, 2) Accept as-is. Store `$VERIFICATION_STATUS = "Gaps"` |
872
+
873
+ ---
874
+
875
+ **Step 7: Update STATE.md**
876
+
877
+ Update STATE.md with quick task completion record.
878
+
879
+ **7a. Check if "Quick Tasks Completed" section exists:**
880
+
881
+ Read STATE.md and check for `### Quick Tasks Completed` section.
882
+
883
+ **7b. If section doesn't exist, create it:**
884
+
885
+ Insert after `### Blockers/Concerns` section:
886
+
887
+ **If `$VALIDATE_MODE`:**
888
+ ```markdown
889
+ ### Quick Tasks Completed
890
+
891
+ | # | Description | Date | Commit | Status | Directory |
892
+ |---|-------------|------|--------|--------|-----------|
893
+ ```
894
+
895
+ **If NOT `$VALIDATE_MODE`:**
896
+ ```markdown
897
+ ### Quick Tasks Completed
898
+
899
+ | # | Description | Date | Commit | Directory |
900
+ |---|-------------|------|--------|-----------|
901
+ ```
902
+
903
+ **Note:** If the table already exists, match its existing column format. If adding `--validate` (or `--full`) to a project that already has quick tasks without a Status column, add the Status column to the header and separator rows, and leave Status empty for the new row's predecessors.
904
+
905
+ **7c. Append new row to table:**
906
+
907
+ Use `date` from init:
908
+
909
+ **If `$VALIDATE_MODE` (or table has Status column):**
910
+ ```markdown
911
+ | ${quick_id} | ${DESCRIPTION} | ${date} | ${commit_hash} | ${VERIFICATION_STATUS} | [${quick_id}-${slug}](./quick/${quick_id}-${slug}/) |
912
+ ```
913
+
914
+ **If NOT `$VALIDATE_MODE` (and table has no Status column):**
915
+ ```markdown
916
+ | ${quick_id} | ${DESCRIPTION} | ${date} | ${commit_hash} | [${quick_id}-${slug}](./quick/${quick_id}-${slug}/) |
917
+ ```
918
+
919
+ **7d. Update "Last activity" line:**
920
+
921
+ Use `date` from init:
922
+ ```
923
+ Last activity: ${date} - Completed quick task ${quick_id}: ${DESCRIPTION}
924
+ ```
925
+
926
+ Use Edit tool to make these changes atomically
927
+
928
+ ---
929
+
930
+ **Step 8: Final commit and completion**
931
+
932
+ Stage and commit quick task artifacts. This step MUST always run — even if the executor already committed some files (e.g. when running without worktree isolation). The `gsd-tools.cjs query commit` command (or legacy `gsd-tools.cjs` commit) handles already-committed files gracefully.
933
+
934
+ Build file list:
935
+ - `${QUICK_DIR}/${quick_id}-PLAN.md`
936
+ - `${QUICK_DIR}/${quick_id}-SUMMARY.md`
937
+ - `.planning/STATE.md`
938
+ - If `$DISCUSS_MODE` and context file exists: `${QUICK_DIR}/${quick_id}-CONTEXT.md`
939
+ - If `$RESEARCH_MODE` and research file exists: `${QUICK_DIR}/${quick_id}-RESEARCH.md`
940
+ - If `$VALIDATE_MODE` and verification file exists: `${QUICK_DIR}/${quick_id}-VERIFICATION.md`
941
+ - If `${QUICK_DIR}/${quick_id}-deferred-items.md` exists: `${QUICK_DIR}/${quick_id}-deferred-items.md`
942
+
943
+ ```bash
944
+ # Explicitly stage all artifacts before commit — PLAN.md may be untracked
945
+ # if the executor ran without worktree isolation and committed docs early
946
+ # Filter .planning/ files from staging if commit_docs is disabled (#1783)
947
+ COMMIT_DOCS=$(gsd_run query config-get commit_docs 2>/dev/null || echo "true")
948
+ if [ "$COMMIT_DOCS" = "false" ]; then
949
+ file_list_filtered=$(echo "${file_list}" | tr ' ' '\n' | grep -v '^\.planning/' | tr '\n' ' ')
950
+ git add ${file_list_filtered} 2>/dev/null
951
+ else
952
+ git add ${file_list} 2>/dev/null
953
+ fi
954
+ gsd_run query commit "docs(quick-${quick_id}): ${DESCRIPTION}" --files ${file_list}
955
+ ```
956
+
957
+ Get final commit hash:
958
+ ```bash
959
+ commit_hash=$(git rev-parse --short HEAD)
960
+ ```
961
+
962
+ Display completion output:
963
+
964
+ **If `$VALIDATE_MODE`:**
965
+ ```
966
+ ---
967
+
968
+ GSD > QUICK TASK COMPLETE (VALIDATED)
969
+
970
+ Quick Task ${quick_id}: ${DESCRIPTION}
971
+
972
+ ${RESEARCH_MODE ? 'Research: ' + QUICK_DIR + '/' + quick_id + '-RESEARCH.md' : ''}
973
+ Summary: ${QUICK_DIR}/${quick_id}-SUMMARY.md
974
+ Verification: ${QUICK_DIR}/${quick_id}-VERIFICATION.md (${VERIFICATION_STATUS})
975
+ Commit: ${commit_hash}
976
+
977
+ ---
978
+
979
+ Ready for next task: /gsd:quick ${GSD_WS}
980
+ ```
981
+
982
+ **If NOT `$VALIDATE_MODE`:**
983
+ ```
984
+ ---
985
+
986
+ GSD > QUICK TASK COMPLETE
987
+
988
+ Quick Task ${quick_id}: ${DESCRIPTION}
989
+
990
+ ${RESEARCH_MODE ? 'Research: ' + QUICK_DIR + '/' + quick_id + '-RESEARCH.md' : ''}
991
+ Summary: ${QUICK_DIR}/${quick_id}-SUMMARY.md
992
+ Commit: ${commit_hash}
993
+
994
+ ---
995
+
996
+ Ready for next task: /gsd:quick ${GSD_WS}
997
+ ```
998
+
999
+ </process>
1000
+
1001
+ <success_criteria>
1002
+ - [ ] ROADMAP.md validation passes
1003
+ - [ ] User provides task description
1004
+ - [ ] `--full`, `--validate`, `--discuss`, and `--research` flags parsed from arguments when present
1005
+ - [ ] `--full` sets all booleans (`$FULL_MODE`, `$DISCUSS_MODE`, `$RESEARCH_MODE`, `$VALIDATE_MODE`)
1006
+ - [ ] Slug generated (lowercase, hyphens, max 40 chars)
1007
+ - [ ] Quick ID generated (YYMMDD-xxx format, 2s Base36 precision)
1008
+ - [ ] Directory created at `.planning/quick/YYMMDD-xxx-slug/`
1009
+ - [ ] (--discuss) Gray areas identified and presented, decisions captured in `${quick_id}-CONTEXT.md`
1010
+ - [ ] (--research) Research agent spawned, `${quick_id}-RESEARCH.md` created
1011
+ - [ ] `${quick_id}-PLAN.md` created by planner (honors CONTEXT.md decisions when --discuss, uses RESEARCH.md findings when --research)
1012
+ - [ ] (--validate) Plan checker validates plan, revision loop capped at 2
1013
+ - [ ] `${quick_id}-SUMMARY.md` created by executor
1014
+ - [ ] (--validate) `${quick_id}-VERIFICATION.md` created by verifier
1015
+ - [ ] STATE.md updated with quick task row (Status column when --validate)
1016
+ - [ ] Artifacts committed
1017
+ </success_criteria>