@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,620 @@
1
+ <purpose>
2
+ Interactive configuration of GSD power-user knobs — plan bounce, node repair, subagent timeouts,
3
+ inline plan threshold, cross-AI execution, base branch, branch templates, response language,
4
+ context window, gitignored search, graphify build timeout, and runtime model tier overrides.
5
+
6
+ This is a companion to `/gsd:settings` — the common-case prompt there covers model profile,
7
+ research/plan_check/verifier toggles, branching strategy, UI/AI phase gates, and worktree
8
+ isolation. This advanced command covers everything else that is user-settable, grouped into
9
+ seven sections so each prompt batch stays cognitively scoped. Every answer pre-selects the
10
+ current value; numeric-input answers that are non-numeric are rejected and re-prompted.
11
+ </purpose>
12
+
13
+ <required_reading>
14
+ Read all files referenced by the invoking prompt's execution_context before starting.
15
+ </required_reading>
16
+
17
+ <process>
18
+
19
+ <step name="ensure_and_load_config">
20
+ Ensure config exists and resolve the workstream-aware config path (mirrors `settings.md`):
21
+
22
+ ```bash
23
+ _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
24
+ gsd_run query config-ensure-section
25
+ if [[ -z "${GSD_CONFIG_PATH:-}" ]]; then
26
+ if [[ -f .planning/active-workstream ]]; then
27
+ WS=$(tr -d '\n\r' < .planning/active-workstream)
28
+ GSD_CONFIG_PATH=".planning/workstreams/${WS}/config.json"
29
+ else
30
+ GSD_CONFIG_PATH=".planning/config.json"
31
+ fi
32
+ fi
33
+ ```
34
+
35
+ All subsequent reads and writes go through `$GSD_CONFIG_PATH`. Never hardcode
36
+ `.planning/config.json` — workstream installs must route to their own config file.
37
+ </step>
38
+
39
+ <step name="read_current">
40
+ ```bash
41
+ cat "$GSD_CONFIG_PATH"
42
+ ```
43
+
44
+ Parse the following current values. If a key is absent, fall back to the documented default
45
+ shown in parentheses:
46
+
47
+ Planning Tuning:
48
+ - `workflow.plan_bounce` (default: `false`)
49
+ - `workflow.plan_bounce_passes` (default: `2`)
50
+ - `workflow.plan_bounce_script` (default: `null`)
51
+ - `workflow.subagent_timeout` (default: `600`)
52
+ - `workflow.inline_plan_threshold` (default: `3`)
53
+
54
+ Execution Tuning:
55
+ - `workflow.node_repair` (default: `true`)
56
+ - `workflow.node_repair_budget` (default: `2`)
57
+ - `workflow.auto_prune_state` (default: `false`)
58
+
59
+ Discussion Tuning:
60
+ - `workflow.max_discuss_passes` (default: `3`)
61
+
62
+ Cross-AI Execution:
63
+ - `workflow.cross_ai_execution` (default: `false`)
64
+ - `workflow.cross_ai_command` (default: `null`)
65
+ - `workflow.cross_ai_timeout` (default: `300`)
66
+
67
+ Git Customization:
68
+ - `git.base_branch` (default: `main`)
69
+ - `git.phase_branch_template` (default: `gsd/phase-{phase}-{slug}`)
70
+ - `git.milestone_branch_template` (default: `gsd/{milestone}-{slug}`)
71
+
72
+ Runtime / Output:
73
+ - `response_language` (default: `null`)
74
+ - `context_window` (default: `200000`)
75
+ - `search_gitignored` (default: `false`)
76
+ - `graphify.build_timeout` (default: `300`)
77
+
78
+ Runtime Model Tiers:
79
+ - `runtime` (default: `null` — reads as `"claude"`)
80
+ - `model_profile_overrides.<runtime>.opus` (default: built-in for the runtime, or absent)
81
+ - `model_profile_overrides.<runtime>.sonnet` (default: built-in for the runtime, or absent)
82
+ - `model_profile_overrides.<runtime>.haiku` (default: built-in for the runtime, or absent)
83
+
84
+ Each field's **current value is pre-selected** in the prompt rendering below. When the
85
+ current value is absent from the config, render the documented default as the pre-selected
86
+ option so the user sees what the effective value is.
87
+ </step>
88
+
89
+ <step name="present_settings">
90
+
91
+ **Text mode (`workflow.text_mode: true` or `--text` flag):** Set `TEXT_MODE=true` if `--text` is
92
+ in `$ARGUMENTS` OR `text_mode` is true in config. When `TEXT_MODE=true`, replace every
93
+ `AskUserQuestion` call below with a plain-text numbered list and ask the user to type the
94
+ choice number or free-text value.
95
+
96
+ **Numeric-input validation.** For any numeric field (`*_passes`, `*_budget`, `*_timeout`,
97
+ `*_threshold`, `context_window`, `graphify.build_timeout`), if the user types a value that
98
+ is not a non-negative integer, the workflow MUST reject it, state which value was invalid,
99
+ and re-prompt that single field. The minimum accepted value is field-specific and is stated
100
+ in each field's prompt below — `workflow.plan_bounce_passes` and `workflow.max_discuss_passes`
101
+ require `>= 1`; all other numeric fields accept `>= 0`. An empty input means "keep current"
102
+ — the existing value is retained. Non-numeric input is never silently coerced.
103
+
104
+ **Free-text validation.** For branch template fields (`git.phase_branch_template`,
105
+ `git.milestone_branch_template`), if the user supplies a non-default value, it MUST be
106
+ non-empty and SHOULD contain at least one `{placeholder}`. A template missing placeholders
107
+ is rejected with a message explaining the available variables (`{phase}`, `{slug}`,
108
+ `{milestone}`) and re-prompted. An empty input means "keep current."
109
+
110
+ **Null-allowed fields.** For `response_language`, `workflow.plan_bounce_script`,
111
+ `workflow.cross_ai_command`: an empty input clears the field (`null`). A non-empty input is
112
+ stored verbatim as a string.
113
+
114
+ ---
115
+
116
+ ### Section 1 — Planning Tuning
117
+
118
+ ```text
119
+ AskUserQuestion([
120
+ {
121
+ question: "Run external plan-bounce validator against generated PLAN.md? (current: <value or false>)",
122
+ header: "Plan Bounce",
123
+ multiSelect: false,
124
+ options: [
125
+ { label: "No (default: false)", description: "Skip external plan validation." },
126
+ { label: "Yes", description: "Pipe each PLAN.md through `plan_bounce_script` and block on non-zero exit." }
127
+ ]
128
+ },
129
+ {
130
+ question: "How many plan-bounce passes? (current: <value or 2>)",
131
+ header: "Bounce Passes",
132
+ multiSelect: false,
133
+ options: [
134
+ { label: "Keep current", description: "Leave the existing value unchanged." },
135
+ { label: "Enter number", description: "Type an integer >= 1. Non-numeric input is rejected and re-prompted. Default: 2" }
136
+ ]
137
+ },
138
+ {
139
+ question: "Path to plan-bounce validation script? (current: <value or null>)",
140
+ header: "Bounce Script",
141
+ multiSelect: false,
142
+ options: [
143
+ { label: "Keep current", description: "Leave existing path unchanged." },
144
+ { label: "Clear (null)", description: "Unset the script path." },
145
+ { label: "Enter path", description: "Type an absolute or repo-relative path. Receives PLAN.md path as first argument." }
146
+ ]
147
+ },
148
+ {
149
+ question: "Subagent timeout (seconds)? (current: <value or 600>)",
150
+ header: "Subagent Timeout",
151
+ multiSelect: false,
152
+ options: [
153
+ { label: "Keep current", description: "Leave timeout unchanged." },
154
+ { label: "Enter seconds", description: "Integer number of seconds. Non-numeric rejected. Default: 600" }
155
+ ]
156
+ },
157
+ {
158
+ question: "Inline plan threshold — tasks allowed inline before splitting to PLAN.md? (current: <value or 3>)",
159
+ header: "Inline Plan Threshold",
160
+ multiSelect: false,
161
+ options: [
162
+ { label: "Keep current", description: "Leave threshold unchanged." },
163
+ { label: "Enter number", description: "Integer count. Non-numeric rejected. Default: 3" }
164
+ ]
165
+ }
166
+ ])
167
+ ```
168
+
169
+ ### Section 2 — Execution Tuning
170
+
171
+ ```text
172
+ AskUserQuestion([
173
+ {
174
+ question: "Enable autonomous node repair on verification failure? (current: <value or true>)",
175
+ header: "Node Repair",
176
+ multiSelect: false,
177
+ options: [
178
+ { label: "Yes (default: true)", description: "Executor retries failed tasks up to the repair budget." },
179
+ { label: "No", description: "Stop on first verification failure." }
180
+ ]
181
+ },
182
+ {
183
+ question: "Maximum node-repair attempts per failed task? (current: <value or 2>)",
184
+ header: "Repair Budget",
185
+ multiSelect: false,
186
+ options: [
187
+ { label: "Keep current", description: "Leave existing budget unchanged." },
188
+ { label: "Enter number", description: "Integer >= 0. Non-numeric rejected. Default: 2" }
189
+ ]
190
+ },
191
+ {
192
+ question: "Auto-prune stale STATE.md entries at phase boundaries? (current: <value or false>)",
193
+ header: "Auto Prune",
194
+ multiSelect: false,
195
+ options: [
196
+ { label: "No (default: false)", description: "Prompt before pruning." },
197
+ { label: "Yes", description: "Prune stale entries without prompting." }
198
+ ]
199
+ }
200
+ ])
201
+ ```
202
+
203
+ ### Section 3 — Discussion Tuning
204
+
205
+ ```text
206
+ AskUserQuestion([
207
+ {
208
+ question: "Maximum discuss-phase question rounds? (current: <value or 3>)",
209
+ header: "Max Discuss Passes",
210
+ multiSelect: false,
211
+ options: [
212
+ { label: "Keep current", description: "Leave existing value unchanged." },
213
+ { label: "Enter number", description: "Integer >= 1. Non-numeric rejected. Default: 3. Prevents infinite discussion loops in headless mode." }
214
+ ]
215
+ }
216
+ ])
217
+ ```
218
+
219
+ ### Section 4 — Cross-AI Execution
220
+
221
+ ```text
222
+ AskUserQuestion([
223
+ {
224
+ question: "Delegate phase execution to an external AI CLI? (current: <value or false>)",
225
+ header: "Cross-AI",
226
+ multiSelect: false,
227
+ options: [
228
+ { label: "No (default: false)", description: "Use local executor agents." },
229
+ { label: "Yes", description: "Pipe phase prompt to `cross_ai_command` via stdin. Requires command to be set." }
230
+ ]
231
+ },
232
+ {
233
+ question: "Cross-AI command template? (current: <value or null>)",
234
+ header: "Cross-AI Command",
235
+ multiSelect: false,
236
+ options: [
237
+ { label: "Keep current", description: "Leave command unchanged." },
238
+ { label: "Clear (null)", description: "Unset the command." },
239
+ { label: "Enter command", description: "Shell command receiving phase prompt via stdin. Must produce SUMMARY.md-compatible output." }
240
+ ]
241
+ },
242
+ {
243
+ question: "Cross-AI timeout (seconds)? (current: <value or 300>)",
244
+ header: "Cross-AI Timeout",
245
+ multiSelect: false,
246
+ options: [
247
+ { label: "Keep current", description: "Leave timeout unchanged." },
248
+ { label: "Enter seconds", description: "Integer seconds. Non-numeric rejected. Default: 300" }
249
+ ]
250
+ }
251
+ ])
252
+ ```
253
+
254
+ ### Section 5 — Git Customization
255
+
256
+ ```text
257
+ AskUserQuestion([
258
+ {
259
+ question: "Git base branch? (current: <value or main>)",
260
+ header: "Base Branch",
261
+ multiSelect: false,
262
+ options: [
263
+ { label: "Keep current", description: "Leave base branch unchanged." },
264
+ { label: "Enter branch name", description: "e.g., main, master, develop. Integration branch for phase/milestone branches." }
265
+ ]
266
+ },
267
+ {
268
+ question: "Phase branch template? (current: <value or gsd/phase-{phase}-{slug}>)",
269
+ header: "Phase Template",
270
+ multiSelect: false,
271
+ options: [
272
+ { label: "Keep current", description: "Leave template unchanged." },
273
+ { label: "Enter template", description: "Non-empty string with at least one placeholder. Available: {phase}, {slug}. Non-default values missing placeholders are rejected." }
274
+ ]
275
+ },
276
+ {
277
+ question: "Milestone branch template? (current: <value or gsd/{milestone}-{slug}>)",
278
+ header: "Milestone Template",
279
+ multiSelect: false,
280
+ options: [
281
+ { label: "Keep current", description: "Leave template unchanged." },
282
+ { label: "Enter template", description: "Non-empty string. Available placeholders: {milestone}, {slug}. Non-default values missing placeholders are rejected." }
283
+ ]
284
+ }
285
+ ])
286
+ ```
287
+
288
+ ### Section 6 — Runtime / Output
289
+
290
+ ```text
291
+ AskUserQuestion([
292
+ {
293
+ question: "Response language for agent output? (current: <value or null>)",
294
+ header: "Language",
295
+ multiSelect: false,
296
+ options: [
297
+ { label: "Keep current", description: "Leave unchanged." },
298
+ { label: "Clear (null)", description: "Use Claude default (English)." },
299
+ { label: "Enter language", description: "Free-text language name or code (e.g., Japanese, pt, ko). Propagates to spawned agents." }
300
+ ]
301
+ },
302
+ {
303
+ question: "Context window size (tokens)? (current: <value or 200000>)",
304
+ header: "Context Window",
305
+ multiSelect: false,
306
+ options: [
307
+ { label: "Keep current", description: "Leave unchanged." },
308
+ { label: "Enter number", description: "Integer. Non-numeric rejected. Default: 200000. Use 1000000 for 1M-context models. Values >= 500000 enable adaptive enrichment." }
309
+ ]
310
+ },
311
+ {
312
+ question: "Include gitignored files in broad searches? (current: <value or false>)",
313
+ header: "Search Gitignored",
314
+ multiSelect: false,
315
+ options: [
316
+ { label: "No (default: false)", description: "Respect .gitignore during searches." },
317
+ { label: "Yes", description: "Add --no-ignore to broad searches (includes .planning/)." }
318
+ ]
319
+ },
320
+ {
321
+ question: "Graphify build timeout (seconds)? (current: <value or 300>)",
322
+ header: "Graphify Timeout",
323
+ multiSelect: false,
324
+ options: [
325
+ { label: "Keep current", description: "Leave timeout unchanged." },
326
+ { label: "Enter seconds", description: "Integer seconds. Non-numeric rejected. Default: 300" }
327
+ ]
328
+ }
329
+ ])
330
+ ```
331
+
332
+ ### Section 7 — Runtime Model Tiers
333
+
334
+ This section lets the user inspect and override the built-in model IDs GSD resolves for each
335
+ profile tier (`opus` / `sonnet` / `haiku`) on their configured runtime.
336
+
337
+ **Step A — Show current runtime and built-in defaults:**
338
+
339
+ Read `runtime` from the config (or treat as `"claude"` if absent). Look up the built-in
340
+ tier map from the table below. For each tier, also read the current override from
341
+ `model_profile_overrides.<runtime>.<tier>` if present.
342
+
343
+ Built-in tier defaults by runtime:
344
+
345
+ | Runtime | `opus` | `sonnet` | `haiku` |
346
+ |------------|-------------------------------|---------------------------------|-------------------------------|
347
+ | `claude` | `claude-opus-4-8` | `claude-sonnet-4-6` | `claude-haiku-4-5` |
348
+ | `codex` | `gpt-5.5` | `gpt-5.3-codex` | `gpt-5.4-mini` |
349
+ | `gemini` | `gemini-3-pro` | `gemini-3-flash` | `gemini-2.5-flash-lite` |
350
+ | `qwen` | `qwen3-max-2026-01-23` | `qwen3-coder-plus` | `qwen3-coder-next` |
351
+ | `opencode` | `anthropic/claude-opus-4-8` | `anthropic/claude-sonnet-4-6` | `anthropic/claude-haiku-4-5` |
352
+ | `copilot` | `claude-opus-4-8` | `claude-sonnet-4-6` | `claude-haiku-4-5` |
353
+ | `hermes` | `anthropic/claude-opus-4-8` | `anthropic/claude-sonnet-4-6` | `anthropic/claude-haiku-4-5` |
354
+ | Group B (`kilo`, `cline`, `cursor`, `windsurf`, `augment`, `trae`, `codebuddy`, `antigravity`) | (no built-in default — your runtime handles model selection) | | |
355
+
356
+ Display a table to the user showing the effective configuration:
357
+
358
+ ```text
359
+ Runtime model tiers — runtime: <current runtime or "claude (default)">
360
+
361
+ | Tier | Built-in default | Current override (if any) |
362
+ |--------|-----------------------------------|-----------------------------------|
363
+ | opus | <built-in or "(no built-in)"> | <override value or "(none)"> |
364
+ | sonnet | <built-in or "(no built-in)"> | <override value or "(none)"> |
365
+ | haiku | <built-in or "(no built-in)"> | <override value or "(none)"> |
366
+ ```
367
+
368
+ For Group B runtimes (those without a built-in default), show `(no built-in default — your runtime handles model selection)` in the built-in column.
369
+
370
+ **Step B — Let the user choose a runtime (optional):**
371
+
372
+ ```text
373
+ AskUserQuestion([
374
+ {
375
+ question: "Which runtime group do you want to configure tier overrides for? (current: <runtime or 'claude'>)",
376
+ header: "Runtime Group",
377
+ multiSelect: false,
378
+ options: [
379
+ { label: "Keep current (<runtime>)", description: "Configure overrides for the current runtime." },
380
+ { label: "Common runtimes", description: "claude, codex, gemini, qwen" },
381
+ { label: "Additional runtimes", description: "opencode, copilot, hermes" },
382
+ { label: "Other (Group B or custom)", description: "kilo, cline, cursor, windsurf, augment, trae, codebuddy, antigravity, or a custom runtime string." }
383
+ ]
384
+ }
385
+ ])
386
+ ```
387
+
388
+ If "Common runtimes" is selected, ask:
389
+
390
+ ```text
391
+ AskUserQuestion([
392
+ {
393
+ question: "Choose the runtime:",
394
+ header: "Common",
395
+ multiSelect: false,
396
+ options: [
397
+ { label: "claude", description: "Claude Code / Anthropic CLI." },
398
+ { label: "codex", description: "OpenAI Codex CLI." },
399
+ { label: "gemini", description: "Gemini CLI." },
400
+ { label: "qwen", description: "Qwen CLI." }
401
+ ]
402
+ }
403
+ ])
404
+ ```
405
+
406
+ If "Additional runtimes" is selected, ask:
407
+
408
+ ```text
409
+ AskUserQuestion([
410
+ {
411
+ question: "Choose the runtime:",
412
+ header: "Additional",
413
+ multiSelect: false,
414
+ options: [
415
+ { label: "opencode", description: "OpenCode (uses anthropic/ prefix)." },
416
+ { label: "copilot", description: "GitHub Copilot." },
417
+ { label: "hermes", description: "Hermes (uses anthropic/ prefix)." }
418
+ ]
419
+ }
420
+ ])
421
+ ```
422
+
423
+ If "Other (Group B or custom)" is selected, prompt the user to enter the runtime name as a free-text string.
424
+ If the selected runtime differs from the stored `runtime` key, update `runtime` via
425
+ `gsd-tools.cjs query config-set runtime <value>` before proceeding to Step C.
426
+
427
+ **Step C — Configure tier overrides for the selected runtime:**
428
+
429
+ ```text
430
+ AskUserQuestion([
431
+ {
432
+ question: "Override for opus tier? Built-in: <opus default or '(no built-in)'> Current: <override or '(none)'>",
433
+ header: "Opus Override",
434
+ multiSelect: false,
435
+ options: [
436
+ { label: "Keep current", description: "Leave unchanged (uses built-in default if no override)." },
437
+ { label: "Clear override", description: "Remove any existing override; fall back to built-in." },
438
+ { label: "Enter model ID", description: "Type the exact model ID string to use for opus-tier agents on this runtime." }
439
+ ]
440
+ },
441
+ {
442
+ question: "Override for sonnet tier? Built-in: <sonnet default or '(no built-in)'> Current: <override or '(none)'>",
443
+ header: "Sonnet Override",
444
+ multiSelect: false,
445
+ options: [
446
+ { label: "Keep current", description: "Leave unchanged." },
447
+ { label: "Clear override", description: "Remove any existing override; fall back to built-in." },
448
+ { label: "Enter model ID", description: "Type the exact model ID string to use for sonnet-tier agents on this runtime." }
449
+ ]
450
+ },
451
+ {
452
+ question: "Override for haiku tier? Built-in: <haiku default or '(no built-in)'> Current: <override or '(none)'>",
453
+ header: "Haiku Override",
454
+ multiSelect: false,
455
+ options: [
456
+ { label: "Keep current", description: "Leave unchanged." },
457
+ { label: "Clear override", description: "Remove any existing override; fall back to built-in." },
458
+ { label: "Enter model ID", description: "Type the exact model ID string to use for haiku-tier agents on this runtime." }
459
+ ]
460
+ }
461
+ ])
462
+ ```
463
+
464
+ **Step D — Apply the changes:**
465
+
466
+ For each tier where the user chose "Enter model ID":
467
+ ```bash
468
+ gsd_run query config-set model_profile_overrides.<runtime>.<tier> "<model-id>"
469
+ ```
470
+
471
+ For each tier where the user chose "Clear override", remove the key by setting it to null:
472
+ ```bash
473
+ gsd_run query config-set model_profile_overrides.<runtime>.<tier> null
474
+ ```
475
+
476
+ "Keep current" selections are skipped entirely. Never write a key the user did not explicitly
477
+ change.
478
+
479
+ </step>
480
+
481
+ <step name="update_config">
482
+ Merge the new settings into the existing config at `$GSD_CONFIG_PATH`. This merge is the
483
+ core correctness invariant: **preserve every unrelated key** — do not clobber siblings.
484
+
485
+ Apply each selected value via `gsd-tools.cjs query config-set <key> <value>` so the central
486
+ validator (`isValidConfigKey`) accepts the write and the deep-merge preserves unrelated
487
+ keys and sibling sub-objects.
488
+
489
+ ```bash
490
+ # Example — only write keys the user changed. "Keep current" selections are skipped.
491
+ gsd_run query config-set workflow.plan_bounce_passes 5
492
+ gsd_run query config-set workflow.subagent_timeout 900
493
+ gsd_run query config-set git.base_branch main
494
+ gsd_run query config-set context_window 1000000
495
+ # Runtime model tier examples:
496
+ gsd_run query config-set runtime gemini
497
+ gsd_run query config-set model_profile_overrides.gemini.opus gemini-3-ultra
498
+ gsd_run query config-set model_profile_overrides.gemini.haiku null
499
+ ```
500
+
501
+ Conceptual shape after merge (unchanged top-level keys like `model_profile`,
502
+ `granularity`, `mode`, `brave_search`, `agent_skills.*`, `hooks.context_warnings`, and
503
+ anything not listed in Sections 1–7 MUST survive the update):
504
+
505
+ ```json
506
+ {
507
+ ...existing_config,
508
+ "workflow": {
509
+ ...existing_workflow,
510
+ "plan_bounce": <new|existing>,
511
+ "plan_bounce_passes": <new|existing>,
512
+ "plan_bounce_script": <new|existing|null>,
513
+ "subagent_timeout": <new|existing>,
514
+ "inline_plan_threshold": <new|existing>,
515
+ "node_repair": <new|existing>,
516
+ "node_repair_budget": <new|existing>,
517
+ "auto_prune_state": <new|existing>,
518
+ "max_discuss_passes": <new|existing>,
519
+ "cross_ai_execution": <new|existing>,
520
+ "cross_ai_command": <new|existing|null>,
521
+ "cross_ai_timeout": <new|existing>
522
+ },
523
+ "git": {
524
+ ...existing_git,
525
+ "base_branch": <new|existing>,
526
+ "phase_branch_template": <new|existing>,
527
+ "milestone_branch_template": <new|existing>
528
+ },
529
+ "response_language": <new|existing|null>,
530
+ "context_window": <new|existing>,
531
+ "search_gitignored": <new|existing>,
532
+ "graphify": {
533
+ ...existing_graphify,
534
+ "build_timeout": <new|existing>
535
+ },
536
+ "runtime": <new|existing|null>,
537
+ "model_profile_overrides": {
538
+ ...existing_model_profile_overrides,
539
+ "<runtime>": {
540
+ ...existing_runtime_overrides,
541
+ "opus": <new|existing|null>,
542
+ "sonnet": <new|existing|null>,
543
+ "haiku": <new|existing|null>
544
+ }
545
+ }
546
+ }
547
+ ```
548
+
549
+ Never emit a full overwrite of the file that omits keys the user did not touch. Always
550
+ route each write through `gsd-tools.cjs query config-set` so sibling preservation is handled by
551
+ the central setter.
552
+ </step>
553
+
554
+ <step name="confirm">
555
+ Display:
556
+
557
+ ```text
558
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
559
+ GSD ► ADVANCED SETTINGS UPDATED
560
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
561
+
562
+ | Setting | Value |
563
+ |--------------------------------------------|-------|
564
+ | workflow.plan_bounce | {on/off} |
565
+ | workflow.plan_bounce_passes | {n} |
566
+ | workflow.plan_bounce_script | {path/null} |
567
+ | workflow.subagent_timeout | {seconds} |
568
+ | workflow.inline_plan_threshold | {n} |
569
+ | workflow.node_repair | {on/off} |
570
+ | workflow.node_repair_budget | {n} |
571
+ | workflow.auto_prune_state | {on/off} |
572
+ | workflow.max_discuss_passes | {n} |
573
+ | workflow.cross_ai_execution | {on/off} |
574
+ | workflow.cross_ai_command | {cmd/null} |
575
+ | workflow.cross_ai_timeout | {seconds} |
576
+ | git.base_branch | {branch} |
577
+ | git.phase_branch_template | {template} |
578
+ | git.milestone_branch_template | {template} |
579
+ | response_language | {lang/null} |
580
+ | context_window | {tokens} |
581
+ | search_gitignored | {on/off} |
582
+ | graphify.build_timeout | {seconds} |
583
+ | runtime | {runtime/null} |
584
+ | model_profile_overrides.<runtime>.opus | {model/built-in/null} |
585
+ | model_profile_overrides.<runtime>.sonnet | {model/built-in/null} |
586
+ | model_profile_overrides.<runtime>.haiku | {model/built-in/null} |
587
+ | effort.default | {low/medium/high/xhigh/max} |
588
+ | effort.routing_tier_defaults.light | {low/medium/high/xhigh/max} |
589
+ | effort.routing_tier_defaults.standard | {low/medium/high/xhigh/max} |
590
+ | effort.routing_tier_defaults.heavy | {low/medium/high/xhigh/max} |
591
+ | effort.agent_overrides.<agent-id> | {low/medium/high/xhigh/max} |
592
+ | fast_mode.enabled | {true/false} |
593
+ | fast_mode.routing_tier_defaults.light | {true/false} |
594
+ | fast_mode.routing_tier_defaults.standard | {true/false} |
595
+ | fast_mode.routing_tier_defaults.heavy | {true/false} |
596
+ | fast_mode.agent_overrides.<agent-id> | {true/false} |
597
+
598
+ These settings apply to future /gsd:plan-phase, /gsd:execute-phase, /gsd:discuss-phase,
599
+ and /gsd:ship runs.
600
+
601
+ For common-case toggles (model profile, research/plan_check/verifier, branching strategy,
602
+ UI/AI phase gates), use /gsd:settings.
603
+ ```
604
+ </step>
605
+
606
+ </process>
607
+
608
+ <success_criteria>
609
+ - [ ] Current config read from resolved `$GSD_CONFIG_PATH`
610
+ - [ ] Seven sections rendered (Planning, Execution, Discussion, Cross-AI, Git, Runtime/Output, Runtime Model Tiers)
611
+ - [ ] Every field pre-selected to its current value (or documented default if absent)
612
+ - [ ] Numeric inputs validated — non-numeric rejected and re-prompted
613
+ - [ ] Branch-template inputs validated — non-default must contain a placeholder
614
+ - [ ] Null-allowed fields accept an empty input as a clear
615
+ - [ ] Writes routed through `gsd-tools.cjs query config-set` so unrelated keys are preserved
616
+ - [ ] Section 7 shows current runtime and built-in tier table
617
+ - [ ] Group B runtimes display "(no built-in default — your runtime handles model selection)"
618
+ - [ ] Override set/clear/keep paths all work correctly for each tier
619
+ - [ ] Confirmation table rendered listing all 23 fields (19 + runtime + 3 tier overrides)
620
+ </success_criteria>