@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,295 @@
1
+ <purpose>
2
+ Edit any field of an existing phase in ROADMAP.md in place. The phase number and position are always preserved. Guarded against in-progress and completed phases unless --force is passed. Validates depends_on references before writing. Shows a diff and requests confirmation before writing.
3
+ </purpose>
4
+
5
+ <required_reading>
6
+ Read all files referenced by the invoking prompt's execution_context before starting.
7
+ </required_reading>
8
+
9
+ <process>
10
+
11
+ <step name="parse_arguments">
12
+ Parse the command arguments:
13
+ - First argument: phase number to edit (integer or decimal)
14
+ - Optional flag: --force (allow editing in_progress/completed phases)
15
+
16
+ Examples:
17
+ `/gsd-edit-phase 5` → phase = 5, force = false
18
+ `/gsd-edit-phase 5 --force` → phase = 5, force = true
19
+ `/gsd-edit-phase 12.1` → phase = 12.1, force = false
20
+
21
+ If no argument provided:
22
+
23
+ ```
24
+ ERROR: Phase number required
25
+ Usage: /gsd-edit-phase <phase-number> [--force]
26
+ Example: /gsd-edit-phase 5
27
+ Example: /gsd-edit-phase 5 --force
28
+ ```
29
+
30
+ Exit.
31
+ </step>
32
+
33
+ <step name="init_context">
34
+ Load phase operation context:
35
+
36
+ ```bash
37
+ _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
38
+ INIT=$(gsd_run query init.phase-op "${target}")
39
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
40
+ ```
41
+
42
+ Check `roadmap_exists` from init JSON. If false:
43
+ ```
44
+ ERROR: No roadmap found (.planning/ROADMAP.md)
45
+ Run /gsd:new-project to initialize.
46
+ ```
47
+ Exit.
48
+ </step>
49
+
50
+ <step name="load_phase">
51
+ Read the current phase section from ROADMAP.md:
52
+
53
+ ```bash
54
+ PHASE_DATA=$(gsd_run query roadmap get-phase "${target}")
55
+ ```
56
+
57
+ Parse the JSON result. If `found` is false:
58
+
59
+ ```
60
+ ERROR: Phase {target} not found in ROADMAP.md
61
+
62
+ Available phases can be seen with /gsd:progress.
63
+ ```
64
+
65
+ Exit.
66
+
67
+ Extract from the result:
68
+ - `phase_name` — the phase title
69
+ - `goal` — the phase goal/description
70
+ - `success_criteria` — array of criteria
71
+ - `section` — full raw section text (preserves depends_on, requirements, plans, etc.)
72
+
73
+ Also parse the full section text to extract additional fields not in the SDK result:
74
+ - `depends_on` — from `**Depends on:** ...` or `**Depends on**: ...` line
75
+ - `requirements` — from `**Requirements:** ...` block if present
76
+ </step>
77
+
78
+ <step name="check_phase_status">
79
+ Determine the phase status from disk. Compare against STATE.md current phase:
80
+
81
+ ```bash
82
+ ANALYZE=$(gsd_run query roadmap analyze)
83
+ ```
84
+
85
+ Find the phase entry in the `phases` array. Extract `disk_status`.
86
+
87
+ Map disk_status to a user-friendly status:
88
+ - `complete` → status = `completed`
89
+ - `planned` or `partial` → status = `in_progress`
90
+ - `empty`, `no_directory`, `discussed`, `researched` → status = `future`
91
+
92
+ If status is `in_progress` or `completed` AND `--force` was NOT passed:
93
+
94
+ ```
95
+ ERROR: Cannot edit Phase {target} — status is {status}
96
+
97
+ Editing an in-progress or completed phase may invalidate executed plans.
98
+
99
+ To edit anyway, run:
100
+ /gsd-edit-phase {target} --force
101
+ ```
102
+
103
+ Exit.
104
+
105
+ If `--force` was passed and status is `in_progress` or `completed`, continue with a warning printed to the user:
106
+
107
+ ```
108
+ WARNING: Editing Phase {target} which is {status}. Proceeding due to --force.
109
+ ```
110
+ </step>
111
+
112
+ <step name="present_current_values">
113
+ Display the current phase fields clearly:
114
+
115
+ ```
116
+ Current values for Phase {target}: {phase_name}
117
+
118
+ Title: {phase_name}
119
+ Goal: {goal}
120
+ Depends on: {depends_on or "(none)"}
121
+ Requirements: {requirements or "(none)"}
122
+ Success Criteria:
123
+ 1. {criterion_1}
124
+ 2. {criterion_2}
125
+ ...
126
+ ```
127
+
128
+ Then ask the user what they want to change:
129
+
130
+ ```
131
+ What would you like to do?
132
+
133
+ [1] Edit specific fields (title, goal, depends_on, requirements, success_criteria)
134
+ [2] Regenerate all fields from a clarified intent
135
+ [3] Cancel
136
+
137
+ Enter choice (1, 2, or 3):
138
+ ```
139
+
140
+ Wait for user input.
141
+ </step>
142
+
143
+ <step name="collect_edits">
144
+
145
+ **If user chose [3] Cancel:** Exit cleanly.
146
+
147
+ **If user chose [1] Edit specific fields:**
148
+
149
+ Ask which fields to edit. For each field the user wants to change, prompt for the new value. Only fields the user explicitly answers become updates; empty answers preserve the existing value.
150
+
151
+ ```
152
+ Which fields do you want to update? (comma-separated or "all")
153
+ Options: title, goal, depends_on, requirements, success_criteria
154
+ ```
155
+
156
+ For each selected field, ask:
157
+
158
+ ```
159
+ New value for {field} [current: {current_value}]:
160
+ ```
161
+
162
+ Build an `updates` map of {field → new_value} for non-empty answers.
163
+
164
+ **If user chose [2] Regenerate all from clarified intent:**
165
+
166
+ Ask the user:
167
+
168
+ ```
169
+ Describe the revised intent for Phase {target} (replace the current description):
170
+ ```
171
+
172
+ Wait for user input. Use the clarified intent to rewrite all fields:
173
+ - Generate a clear, concise `title` from the intent
174
+ - Write a complete `goal` statement
175
+ - Produce updated `requirements` if the original had them
176
+ - Generate `success_criteria` (3-5 measurable criteria)
177
+ - Preserve `depends_on` unless the user explicitly mentioned changing it
178
+ </step>
179
+
180
+ <step name="validate_depends_on">
181
+ If `depends_on` is being updated (or preserved as non-empty), validate that every referenced phase number exists in ROADMAP.md:
182
+
183
+ ```bash
184
+ ALL_PHASES=$(gsd_run query roadmap analyze)
185
+ ```
186
+
187
+ Parse the `phases` array to get all valid phase numbers.
188
+
189
+ For each phase number referenced in `depends_on`:
190
+ - Normalize it (strip whitespace, "Phase" prefix if present)
191
+ - Check it is in the valid phase numbers set
192
+ - It must not reference itself (phase {target})
193
+
194
+ If any reference is invalid:
195
+
196
+ ```
197
+ ERROR: depends_on references invalid phase(s): {bad_refs}
198
+
199
+ Valid phase numbers: {valid_list}
200
+
201
+ Fix the depends_on field and try again.
202
+ ```
203
+
204
+ Exit (do not write).
205
+ </step>
206
+
207
+ <step name="show_diff_and_confirm">
208
+ Build the updated phase section by applying the changes to the original `section` text:
209
+
210
+ - For `title`: replace the heading text after `Phase {N}:`
211
+ - For `goal`: replace the `**Goal:**` line value
212
+ - For `depends_on`: replace or add the `**Depends on:**` line
213
+ - For `requirements`: replace or add the requirements block
214
+ - For `success_criteria`: replace the numbered list under `**Success Criteria**:`
215
+ - For full regeneration: rebuild the entire section from the new field values
216
+
217
+ Show a unified-style diff of old vs. new:
218
+
219
+ ```
220
+ Proposed changes to Phase {target}:
221
+
222
+ --- current
223
+ +++ updated
224
+ @@ ...
225
+ - **Goal:** {old_goal}
226
+ + **Goal:** {new_goal}
227
+ ...
228
+
229
+ Apply these changes? (y/n):
230
+ ```
231
+
232
+ Wait for confirmation. If the user says `n`, exit without writing.
233
+ </step>
234
+
235
+ <step name="write_updated_phase">
236
+ Write the updated phase back in place in ROADMAP.md.
237
+
238
+ Read the full ROADMAP.md content, locate the phase section by its header (`## Phase {N}:` or `### Phase {N}:`), and replace exactly the old section text with the new section text. All content before and after the section (including other phases, milestone headers, and the summary checklist) must be left unchanged.
239
+
240
+ After writing ROADMAP.md, update STATE.md Roadmap Evolution:
241
+
242
+ ```bash
243
+ gsd_run query state.add-roadmap-evolution \
244
+ --phase {target} \
245
+ --action edited \
246
+ --note "edited fields: {changed_field_list}"
247
+ ```
248
+ </step>
249
+
250
+ <step name="completion">
251
+ Present completion summary:
252
+
253
+ ```
254
+ Phase {target} updated in ROADMAP.md.
255
+
256
+ Fields changed: {changed_field_list}
257
+
258
+ ---
259
+
260
+ ## What's Next
261
+
262
+ - `/gsd:progress` — view updated roadmap
263
+ - `/gsd:plan-phase {target}` — re-plan this phase (if needed)
264
+ - `/gsd:discuss-phase {target}` — discuss implementation approach
265
+
266
+ ---
267
+ ```
268
+ </step>
269
+
270
+ </process>
271
+
272
+ <anti_patterns>
273
+ - Don't renumber the phase — number and position must be preserved exactly
274
+ - Don't modify other phases when editing one
275
+ - Don't skip depends_on validation (invalid references block writes)
276
+ - Don't write without showing a diff and getting confirmation
277
+ - Don't edit in_progress/completed phases without --force
278
+ - Don't use raw Write on ROADMAP.md without reading it first; always replace section in place
279
+ - Don't modify the phase directory structure — only ROADMAP.md changes
280
+ - Don't commit the change — that's the user's decision
281
+ </anti_patterns>
282
+
283
+ <success_criteria>
284
+ Edit-phase is complete when:
285
+
286
+ - [ ] Phase {target} found and loaded from ROADMAP.md
287
+ - [ ] Status check performed; in_progress/completed blocked without --force
288
+ - [ ] Current values presented to user
289
+ - [ ] User chose edit mode (specific fields or full regeneration)
290
+ - [ ] depends_on references validated; invalid references blocked
291
+ - [ ] Diff shown and confirmed by user
292
+ - [ ] Updated phase written back in place; number, position, and status preserved
293
+ - [ ] STATE.md Roadmap Evolution updated
294
+ - [ ] User informed of next steps
295
+ </success_criteria>
@@ -0,0 +1,156 @@
1
+ <purpose>
2
+ Retroactive audit of an implemented AI phase's evaluation coverage. Standalone command that works on any GSD-managed AI phase. Produces a scored EVAL-REVIEW.md with gap analysis and remediation plan.
3
+
4
+ Use after /gsd:execute-phase to verify that the evaluation strategy from AI-SPEC.md was actually implemented. Mirrors the pattern of /gsd:ui-review and /gsd:validate-phase.
5
+ </purpose>
6
+
7
+ <required_reading>
8
+ @~/.claude/get-shit-done/references/ai-evals.md
9
+ </required_reading>
10
+
11
+ <process>
12
+
13
+ ## 0. Initialize
14
+
15
+ ```bash
16
+ _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
17
+ INIT=$(gsd_run query init.phase-op "${PHASE_ARG}")
18
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
19
+ ```
20
+
21
+ Parse: `phase_dir`, `phase_number`, `phase_name`, `phase_slug`, `padded_phase`, `commit_docs`.
22
+
23
+ ```bash
24
+ AUDITOR_MODEL=$(gsd_run query resolve-model gsd-eval-auditor 2>/dev/null | jq -r '.model' 2>/dev/null || true)
25
+ ```
26
+
27
+ Display banner:
28
+ ```
29
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
30
+ GSD ► EVAL AUDIT — PHASE {N}: {name}
31
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
32
+ ```
33
+
34
+ ## 1. Detect Input State
35
+
36
+ ```bash
37
+ SUMMARY_FILES=$(ls "${PHASE_DIR}"/*-SUMMARY.md 2>/dev/null)
38
+ AI_SPEC_FILE=$(ls "${PHASE_DIR}"/*-AI-SPEC.md 2>/dev/null | head -1)
39
+ EVAL_REVIEW_FILE=$(ls "${PHASE_DIR}"/*-EVAL-REVIEW.md 2>/dev/null | head -1)
40
+ ```
41
+
42
+ **State A** — AI-SPEC.md + SUMMARY.md exist: Full audit against spec
43
+ **State B** — SUMMARY.md exists, no AI-SPEC.md: Audit against general best practices
44
+ **State C** — No SUMMARY.md: Exit — "Phase {N} not executed. Run /gsd:execute-phase {N} first."
45
+
46
+
47
+ **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.
48
+ **If `EVAL_REVIEW_FILE` non-empty:** Use AskUserQuestion:
49
+ - header: "Existing Eval Review"
50
+ - question: "EVAL-REVIEW.md already exists for Phase {N}."
51
+ - options:
52
+ - "Re-audit — run fresh audit"
53
+ - "View — display current review and exit"
54
+
55
+ If "View": display file, exit.
56
+ If "Re-audit": continue.
57
+
58
+ **If State B (no AI-SPEC.md):** Warn:
59
+ ```
60
+ No AI-SPEC.md found for Phase {N}.
61
+ Audit will evaluate against general AI eval best practices rather than a phase-specific plan.
62
+ Consider running /gsd:ai-integration-phase {N} before implementation next time.
63
+ ```
64
+ Continue (non-blocking).
65
+
66
+ ## 2. Gather Context Paths
67
+
68
+ Build file list for auditor:
69
+ - AI-SPEC.md (if exists — the planned eval strategy)
70
+ - All SUMMARY.md files in phase dir
71
+ - All PLAN.md files in phase dir
72
+
73
+ ## 3. Spawn gsd-eval-auditor
74
+
75
+ ```
76
+ ◆ Spawning eval auditor...
77
+ ```
78
+
79
+ Build prompt:
80
+
81
+ ```markdown
82
+ Read ~/.claude/agents/gsd-eval-auditor.md for instructions.
83
+
84
+ <objective>
85
+ Conduct evaluation coverage audit of Phase {phase_number}: {phase_name}
86
+ {If AI-SPEC exists: "Audit against AI-SPEC.md evaluation plan."}
87
+ {If no AI-SPEC: "Audit against general AI eval best practices."}
88
+ </objective>
89
+
90
+ <files_to_read>
91
+ - {summary_paths}
92
+ - {plan_paths}
93
+ - {ai_spec_path if exists}
94
+ </files_to_read>
95
+
96
+ <input>
97
+ ai_spec_path: {ai_spec_path or "none"}
98
+ phase_dir: {phase_dir}
99
+ phase_number: {phase_number}
100
+ phase_name: {phase_name}
101
+ padded_phase: {padded_phase}
102
+ state: {A or B}
103
+ </input>
104
+ ```
105
+
106
+ Spawn as Task with model `AUDITOR_MODEL`.
107
+
108
+ ## 4. Parse Auditor Result
109
+
110
+ Read the written EVAL-REVIEW.md. Extract:
111
+ - `overall_score`
112
+ - `verdict` (PRODUCTION READY | NEEDS WORK | SIGNIFICANT GAPS | NOT IMPLEMENTED)
113
+ - `critical_gap_count`
114
+
115
+ ## 5. Display Summary
116
+
117
+ ```
118
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
119
+ GSD ► EVAL AUDIT COMPLETE — PHASE {N}: {name}
120
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
121
+
122
+ ◆ Score: {overall_score}/100
123
+ ◆ Verdict: {verdict}
124
+ ◆ Critical Gaps: {critical_gap_count}
125
+ ◆ Output: {eval_review_path}
126
+
127
+ {If PRODUCTION READY:}
128
+ Next step: /gsd:plan-phase (next phase) or deploy
129
+
130
+ {If NEEDS WORK:}
131
+ Address critical gaps in EVAL-REVIEW.md, then re-run /gsd:eval-review {N}
132
+
133
+ {If SIGNIFICANT GAPS or NOT IMPLEMENTED:}
134
+ Review AI-SPEC.md evaluation plan. Critical eval dimensions are not implemented.
135
+ Do not deploy until gaps are addressed.
136
+ ```
137
+
138
+ ## 6. Commit
139
+
140
+ **If `commit_docs` is true:**
141
+ ```bash
142
+ git add "${EVAL_REVIEW_FILE}"
143
+ git commit -m "docs({phase_slug}): add EVAL-REVIEW.md — score {overall_score}/100 ({verdict})"
144
+ ```
145
+
146
+ </process>
147
+
148
+ <success_criteria>
149
+ - [ ] Phase execution state detected correctly
150
+ - [ ] AI-SPEC.md presence handled (with or without)
151
+ - [ ] gsd-eval-auditor spawned with correct context
152
+ - [ ] EVAL-REVIEW.md written (by auditor)
153
+ - [ ] Score and verdict displayed to user
154
+ - [ ] Appropriate next steps surfaced based on verdict
155
+ - [ ] Committed if commit_docs enabled
156
+ </success_criteria>
@@ -0,0 +1,82 @@
1
+ # Step: codebase_drift_gate
2
+
3
+ Post-execution structural drift detection (#2003). Runs after the last wave
4
+ commits, before verification. **Non-blocking by contract:** any internal
5
+ error here MUST fall through and continue to `verify_phase_goal`. The phase
6
+ is never failed by this gate.
7
+
8
+ ```bash
9
+ DRIFT=$(gsd-tools verify codebase-drift 2>/dev/null || echo '{"skipped":true,"reason":"sdk-failed"}')
10
+ ```
11
+
12
+ Parse JSON for: `skipped`, `reason`, `action_required`, `directive`,
13
+ `spawn_mapper`, `affected_paths`, `elements`, `threshold`, `action`,
14
+ `last_mapped_commit`, `message`.
15
+
16
+ **If `skipped` is true (no STRUCTURE.md, missing git, or any internal error):**
17
+ Log one line — `Codebase drift check skipped: {reason}` — and continue to
18
+ `verify_phase_goal`. Do NOT prompt the user. Do NOT block.
19
+
20
+ **If `action_required` is false:** Continue silently to `verify_phase_goal`.
21
+
22
+ **If `action_required` is true AND `directive` is `warn`:**
23
+ Print the `message` field verbatim. The format is:
24
+
25
+ ```text
26
+ Codebase drift detected: {N} structural element(s) since last mapping.
27
+
28
+ New directories:
29
+ - {path}
30
+ New barrel exports:
31
+ - {path}
32
+ New migrations:
33
+ - {path}
34
+ New route modules:
35
+ - {path}
36
+
37
+ Run /gsd:map-codebase --paths {affected_paths} to refresh planning context.
38
+ ```
39
+
40
+ Then continue to `verify_phase_goal`. Do NOT block. Do NOT spawn anything.
41
+
42
+ **If `action_required` is true AND `directive` is `auto-remap`:**
43
+
44
+ First load the mapper agent's skill bundle (the executor's `AGENT_SKILLS`
45
+ from step `init_context` is for `gsd-executor`, not the mapper):
46
+
47
+ ```bash
48
+ _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
49
+ AGENT_SKILLS_MAPPER=$(gsd_run query agent-skills gsd-codebase-mapper)
50
+ ```
51
+
52
+ Then spawn `gsd-codebase-mapper` agents with the `--paths` hint:
53
+
54
+ ```text
55
+ Agent(
56
+ subagent_type="gsd-codebase-mapper",
57
+ description="Incremental codebase remap (drift)",
58
+ prompt="Focus: arch
59
+ Today's date: {date}
60
+ --paths {affected_paths joined by comma}
61
+
62
+ Refresh STRUCTURE.md and ARCHITECTURE.md scoped to the listed paths only.
63
+ Stamp last_mapped_commit in each document's frontmatter.
64
+ ${AGENT_SKILLS_MAPPER}"
65
+ )
66
+ ```
67
+
68
+ > **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.
69
+
70
+ If the spawn fails or the agent reports an error: log `Codebase drift
71
+ auto-remap failed: {reason}` and continue to `verify_phase_goal`. The phase
72
+ is NOT failed by a remap failure.
73
+
74
+ If the remap succeeds: log `Codebase drift auto-remap completed for paths:
75
+ {affected_paths}` and continue to `verify_phase_goal`.
76
+
77
+ The two relevant config keys (continue on error / failure if either is invalid):
78
+ - `workflow.drift_threshold` (integer, default 3) — minimum drift elements before action
79
+ - `workflow.drift_action` — `warn` (default) or `auto-remap`
80
+
81
+ This step is fully non-blocking — it never fails the phase, and any
82
+ exception path returns control to `verify_phase_goal`.
@@ -0,0 +1,94 @@
1
+ # Per-plan worktree decision (#2772)
2
+
3
+ Run this for **each plan in the current wave** before its `Agent()` dispatch. The output `USE_WORKTREES_FOR_PLAN` gates the dispatch branch (worktree mode vs sequential mode) for that plan only — other plans in the same wave can still take the worktree path.
4
+
5
+ `SUBMODULE_PATHS` is computed once in the `initialize` step (parsed from `.gitmodules`).
6
+
7
+ `PLAN_FILES` is the whitespace-separated list of paths the plan declared it will touch, extracted from the `phase-plan-index` JSON loaded in `discover_and_group_plans`:
8
+
9
+ ```bash
10
+ # plan_json is the JSON object for this plan from PLAN_INDEX.plans[]
11
+ # files_modified is an array of strings (repo-relative paths or globs)
12
+ PLAN_FILES=$(jq -r '.files_modified // [] | join(" ")' <<<"$plan_json")
13
+ plan_id=$(jq -r '.id' <<<"$plan_json")
14
+ ```
15
+
16
+ Then run the per-plan gate:
17
+
18
+ ```bash
19
+ USE_WORKTREES_FOR_PLAN="$USE_WORKTREES"
20
+
21
+ if [ -n "$SUBMODULE_PATHS" ] && [ "$USE_WORKTREES_FOR_PLAN" != "false" ]; then
22
+ if [ -z "$PLAN_FILES" ]; then
23
+ # Fallback: planned paths are unknown/unparseable — fall back to the safe
24
+ # behavior (disable worktree isolation for this plan) and log why.
25
+ echo "[worktree] Plan ${plan_id}: files_modified missing/unparseable — disabling worktree isolation as a safety fallback (submodule project)"
26
+ USE_WORKTREES_FOR_PLAN=false
27
+ else
28
+ # Compute intersection with glob-safe normalization. Both sides are
29
+ # normalized (strip leading "./", strip trailing "/") and matched
30
+ # bidirectionally so a globby planned path like "vendor/**/*.c" still
31
+ # matches submodule "vendor/foo", and "./vendor/foo/bar.c" matches
32
+ # submodule "vendor/foo".
33
+ INTERSECT=""
34
+ set -f # disable globbing while iterating literal patterns
35
+ for sm_raw in $SUBMODULE_PATHS; do
36
+ # Normalize submodule path: strip ./ prefix and trailing /
37
+ sm="${sm_raw#./}"
38
+ sm="${sm%/}"
39
+ [ -z "$sm" ] && continue
40
+ for pf_raw in $PLAN_FILES; do
41
+ # Normalize planned path the same way
42
+ pf="${pf_raw#./}"
43
+ pf="${pf%/}"
44
+ [ -z "$pf" ] && continue
45
+ matched=0
46
+ # Direction 1: planned path is the submodule or lies inside it
47
+ case "$pf" in
48
+ "$sm"|"$sm"/*) matched=1 ;;
49
+ esac
50
+ # Direction 2: submodule lies inside the planned path (e.g. plan
51
+ # declares "vendor" or a glob expanding to a directory containing
52
+ # the submodule).
53
+ if [ "$matched" -eq 0 ]; then
54
+ case "$sm" in
55
+ "$pf"|"$pf"/*) matched=1 ;;
56
+ esac
57
+ fi
58
+ # Direction 3: planned path uses a glob — strip glob wildcards
59
+ # and check whether the resulting prefix overlaps the submodule
60
+ # path in either direction.
61
+ if [ "$matched" -eq 0 ]; then
62
+ case "$pf" in
63
+ *'*'*|*'?'*|*'['*)
64
+ # Take the literal prefix before the first glob metachar.
65
+ prefix="${pf%%[*?[]*}"
66
+ prefix="${prefix%/}"
67
+ if [ -n "$prefix" ]; then
68
+ case "$sm" in
69
+ "$prefix"|"$prefix"/*) matched=1 ;;
70
+ esac
71
+ if [ "$matched" -eq 0 ]; then
72
+ case "$prefix" in
73
+ "$sm"|"$sm"/*) matched=1 ;;
74
+ esac
75
+ fi
76
+ fi
77
+ ;;
78
+ esac
79
+ fi
80
+ if [ "$matched" -eq 1 ]; then
81
+ INTERSECT="$INTERSECT $pf_raw"
82
+ fi
83
+ done
84
+ done
85
+ set +f
86
+ if [ -n "$INTERSECT" ]; then
87
+ echo "[worktree] Plan ${plan_id}: planned paths intersect submodule paths (${INTERSECT# }) — disabling worktree isolation for this plan"
88
+ USE_WORKTREES_FOR_PLAN=false
89
+ fi
90
+ fi
91
+ fi
92
+ ```
93
+
94
+ After running this for the plan, the dispatch branches in `execute_waves` step 3 MUST gate on `USE_WORKTREES_FOR_PLAN` for the current plan, not on the project-level `USE_WORKTREES`. Track which plans in this wave actually used worktrees (append `plan_id` to a `WAVE_WORKTREE_PLANS` accumulator when `USE_WORKTREES_FOR_PLAN != false`) — the post-wave cleanup step (5.5) uses this to decide whether worktree-merge cleanup is needed at all.