@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,243 @@
1
+ <purpose>
2
+ Extract decisions, lessons learned, patterns discovered, and surprises encountered from completed phase artifacts into a structured LEARNINGS.md file. Captures institutional knowledge that would otherwise be lost between phases.
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
+ <objective>
10
+ Analyze completed phase artifacts (PLAN.md, SUMMARY.md, VERIFICATION.md, UAT.md, STATE.md) and extract structured learnings into 4 categories: decisions, lessons, patterns, and surprises. Each extracted item includes source attribution. The output is a LEARNINGS.md file with YAML frontmatter containing metadata about the extraction.
11
+ </objective>
12
+
13
+ <process>
14
+
15
+ <step name="initialize">
16
+ Parse arguments and load project state:
17
+
18
+ ```bash
19
+ _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
20
+ INIT=$(gsd_run query init.phase-op "${PHASE_ARG}")
21
+ if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi
22
+ ```
23
+
24
+ Parse from init JSON: `phase_found`, `phase_dir`, `phase_number`, `phase_name`, `padded_phase`.
25
+
26
+ If phase not found, exit with error: "Phase {PHASE_ARG} not found."
27
+ </step>
28
+
29
+ <step name="collect_artifacts">
30
+ Read the phase artifacts. PLAN.md and SUMMARY.md are required; VERIFICATION.md, UAT.md, and STATE.md are optional.
31
+
32
+ **Required artifacts:**
33
+ - `${PHASE_DIR}/*-PLAN.md` — all plan files for the phase
34
+ - `${PHASE_DIR}/*-SUMMARY.md` — all summary files for the phase
35
+
36
+ If PLAN.md or SUMMARY.md files are not found or missing, exit with error: "Required artifacts missing. PLAN.md and SUMMARY.md are required for learning extraction."
37
+
38
+ **Optional artifacts (read if available, skip if not found):**
39
+ - `${PHASE_DIR}/*-VERIFICATION.md` — verification results
40
+ - `${PHASE_DIR}/*-UAT.md` — user acceptance test results
41
+ - `.planning/STATE.md` — project state with decisions and blockers
42
+
43
+ Track which optional artifacts are missing for the `missing_artifacts` frontmatter field.
44
+ </step>
45
+
46
+ <step name="extract-learnings">
47
+ Analyze all collected artifacts and extract learnings into 4 categories:
48
+
49
+ ### 1. Decisions
50
+ Technical and architectural decisions made during the phase. Look for:
51
+ - Explicit decisions documented in PLAN.md or SUMMARY.md
52
+ - Technology choices and their rationale
53
+ - Trade-offs that were evaluated
54
+ - Design decisions recorded in STATE.md
55
+
56
+ Each decision entry must include:
57
+ - **What** was decided
58
+ - **Why** it was decided (rationale)
59
+ - **Source:** attribution to the artifact where the decision was found (e.g., "Source: 03-01-PLAN.md")
60
+
61
+ ### 2. Lessons
62
+ Things learned during execution that were not known beforehand. Look for:
63
+ - Unexpected complexity in SUMMARY.md
64
+ - Issues discovered during verification in VERIFICATION.md
65
+ - Failed approaches documented in SUMMARY.md
66
+ - UAT feedback that revealed gaps
67
+
68
+ Each lesson entry must include:
69
+ - **What** was learned
70
+ - **Context** for the lesson
71
+ - **Source:** attribution to the originating artifact
72
+
73
+ ### 3. Patterns
74
+ Reusable patterns, approaches, or techniques discovered. Look for:
75
+ - Successful implementation patterns in SUMMARY.md
76
+ - Testing patterns from VERIFICATION.md or UAT.md
77
+ - Workflow patterns that worked well
78
+ - Code organization patterns from PLAN.md
79
+
80
+ Each pattern entry must include:
81
+ - **Pattern** name/description
82
+ - **When to use** it
83
+ - **Source:** attribution to the originating artifact
84
+
85
+ ### 4. Surprises
86
+ Unexpected findings, behaviors, or outcomes. Look for:
87
+ - Things that took longer or shorter than estimated
88
+ - Unexpected dependencies or interactions
89
+ - Edge cases not anticipated in planning
90
+ - Performance or behavior that differed from expectations
91
+
92
+ Each surprise entry must include:
93
+ - **What** was surprising
94
+ - **Impact** of the surprise
95
+ - **Source:** attribution to the originating artifact
96
+ </step>
97
+
98
+ <step name="capture_thought_integration">
99
+ **What this step is:** `capture_thought` is an **optional convention**, not a bundled GSD tool. GSD does not ship one and does not require one. The step is a hook for users who run a memory / knowledge-base MCP server (for example ExoCortex-style servers, `claude-mem`, or `mem0`-style servers) that exposes a tool with this exact name. If any MCP server in the current session provides a `capture_thought` tool with the signature below, each extracted learning is routed through it with metadata. If no such tool is present, the step is a silent no-op — `LEARNINGS.md` is always the primary output.
100
+
101
+ **Detection:** Check whether a tool named `capture_thought` is available in the current session. Do not assume any specific MCP server is connected.
102
+
103
+ **If available**, call once per extracted learning:
104
+
105
+ ```
106
+ capture_thought({
107
+ category: "decision" | "lesson" | "pattern" | "surprise",
108
+ phase: PHASE_NUMBER,
109
+ content: LEARNING_TEXT,
110
+ source: ARTIFACT_NAME
111
+ })
112
+ ```
113
+
114
+ **If not available** (no MCP server in the session exposes this tool, or the runtime does not support it), skip the step silently and continue. The workflow must not fail or warn — this is expected behavior for users who do not run a knowledge-base MCP.
115
+ </step>
116
+
117
+ <step name="write_learnings">
118
+ Write the LEARNINGS.md file to the phase directory. If a previous LEARNINGS.md exists, overwrite it (replace the file entirely).
119
+
120
+ Output path: `${PHASE_DIR}/${PADDED_PHASE}-LEARNINGS.md`
121
+
122
+ The file must have YAML frontmatter with these fields:
123
+ ```yaml
124
+ ---
125
+ phase: {PHASE_NUMBER}
126
+ phase_name: "{PHASE_NAME}"
127
+ project: "{PROJECT_NAME}"
128
+ generated: "{ISO_DATE}"
129
+ counts:
130
+ decisions: {N}
131
+ lessons: {N}
132
+ patterns: {N}
133
+ surprises: {N}
134
+ missing_artifacts:
135
+ - "{ARTIFACT_NAME}"
136
+ ---
137
+ ```
138
+
139
+ Individual items may carry an optional `graduated:` annotation (added by `graduation.md` when a cluster is promoted):
140
+ ```markdown
141
+ **Graduated:** {target-file}:{ISO_DATE}
142
+ ```
143
+ This annotation is appended after the item's existing fields and prevents the item from being re-surfaced in future graduation scans. Do not add this field during extraction — it is written only by the graduation workflow.
144
+
145
+ The body follows this structure:
146
+ ```markdown
147
+ # Phase {PHASE_NUMBER} Learnings: {PHASE_NAME}
148
+
149
+ ## Decisions
150
+
151
+ ### {Decision Title}
152
+ {What was decided}
153
+
154
+ **Rationale:** {Why}
155
+ **Source:** {artifact file}
156
+
157
+ ---
158
+
159
+ ## Lessons
160
+
161
+ ### {Lesson Title}
162
+ {What was learned}
163
+
164
+ **Context:** {context}
165
+ **Source:** {artifact file}
166
+
167
+ ---
168
+
169
+ ## Patterns
170
+
171
+ ### {Pattern Name}
172
+ {Description}
173
+
174
+ **When to use:** {applicability}
175
+ **Source:** {artifact file}
176
+
177
+ ---
178
+
179
+ ## Surprises
180
+
181
+ ### {Surprise Title}
182
+ {What was surprising}
183
+
184
+ **Impact:** {impact description}
185
+ **Source:** {artifact file}
186
+ ```
187
+ </step>
188
+
189
+ <step name="update_state">
190
+ Update STATE.md to reflect the learning extraction:
191
+
192
+ ```bash
193
+ gsd_run query state.update "Last Activity" "$(date +%Y-%m-%d)"
194
+ ```
195
+ </step>
196
+
197
+ <step name="report">
198
+ ```
199
+ ---------------------------------------------------------------
200
+
201
+ ## Learnings Extracted: Phase {X} — {Name}
202
+
203
+ Decisions: {N}
204
+ Lessons: {N}
205
+ Patterns: {N}
206
+ Surprises: {N}
207
+ Total: {N}
208
+
209
+ Output: {PHASE_DIR}/{PADDED_PHASE}-LEARNINGS.md
210
+
211
+ Missing artifacts: {list or "none"}
212
+
213
+ Next steps:
214
+ - Review extracted learnings for accuracy
215
+ - /gsd:progress — see overall project state
216
+ - /gsd:execute-phase {next} — continue to next phase
217
+
218
+ ---------------------------------------------------------------
219
+ ```
220
+ </step>
221
+
222
+ </process>
223
+
224
+ <success_criteria>
225
+ - [ ] Phase artifacts located and read successfully
226
+ - [ ] All 4 categories extracted: decisions, lessons, patterns, surprises
227
+ - [ ] Each extracted item has source attribution
228
+ - [ ] LEARNINGS.md written with correct YAML frontmatter
229
+ - [ ] Missing optional artifacts tracked in frontmatter
230
+ - [ ] capture_thought integration attempted if tool available
231
+ - [ ] STATE.md updated with extraction activity
232
+ - [ ] User receives summary report
233
+ </success_criteria>
234
+
235
+ <critical_rules>
236
+ - PLAN.md and SUMMARY.md are required — exit with clear error if missing
237
+ - VERIFICATION.md, UAT.md, and STATE.md are optional — extract from them if present, skip gracefully if not found
238
+ - Every extracted learning must have source attribution back to the originating artifact
239
+ - Running extract-learnings twice on the same phase must overwrite (replace) the previous LEARNINGS.md, not append
240
+ - Do not fabricate learnings — only extract what is explicitly documented in artifacts
241
+ - If capture_thought is unavailable, the workflow must not fail — graceful degradation to file-only output
242
+ - LEARNINGS.md frontmatter must include counts for all 4 categories and list any missing_artifacts
243
+ </critical_rules>
@@ -0,0 +1,124 @@
1
+ <purpose>
2
+ Execute a trivial task inline without subagent overhead. No PLAN.md, no Task spawning,
3
+ no research, no plan checking. Just: understand → do → commit → log.
4
+
5
+ For tasks like: fix a typo, update a config value, add a missing import, rename a
6
+ variable, commit uncommitted work, add a .gitignore entry, bump a version number.
7
+
8
+ Use /gsd:quick for anything that needs multi-step planning or research.
9
+ </purpose>
10
+
11
+ <process>
12
+
13
+ <step name="parse_task">
14
+ Parse `$ARGUMENTS` for the task description.
15
+
16
+ If empty, ask:
17
+ ```
18
+ What's the quick fix? (one sentence)
19
+ ```
20
+
21
+ Store as `$TASK`.
22
+ </step>
23
+
24
+ <step name="scope_check">
25
+ **Before doing anything, verify this is actually trivial.**
26
+
27
+ A task is trivial if it can be completed in:
28
+ - ≤ 3 file edits
29
+ - ≤ 1 minute of work
30
+ - No new dependencies or architecture changes
31
+ - No research needed
32
+
33
+ If the task seems non-trivial (multi-file refactor, new feature, needs research),
34
+ say:
35
+
36
+ ```
37
+ This looks like it needs planning. Use /gsd:quick instead:
38
+ /gsd:quick "{task description}"
39
+ ```
40
+
41
+ And stop.
42
+ </step>
43
+
44
+ <step name="execute_inline">
45
+ Do the work directly:
46
+
47
+ 1. Read the relevant file(s)
48
+ 2. Make the change(s)
49
+ 3. Verify the change works (run existing tests if applicable, or do a quick sanity check)
50
+
51
+ **No PLAN.md.** Just do it.
52
+ </step>
53
+
54
+ <step name="commit">
55
+ Commit the change atomically:
56
+
57
+ ```bash
58
+ git add -A
59
+ git commit -m "fix: {concise description of what changed}"
60
+ ```
61
+
62
+ Use conventional commit format: `fix:`, `feat:`, `docs:`, `chore:`, `refactor:` as appropriate.
63
+ </step>
64
+
65
+ <step name="log_to_state">
66
+ If `.planning/STATE.md` exists and has a "Quick Tasks Completed" table, append a row
67
+ that matches the existing table's schema. If no table exists, skip silently.
68
+ If the table's schema is unrecognized, skip with a brief log rather than append a
69
+ malformed row.
70
+
71
+ ```bash
72
+ # Detect whether STATE.md has a Quick Tasks Completed table
73
+ if grep -q "Quick Tasks Completed" .planning/STATE.md 2>/dev/null; then
74
+ # Read the table header line to determine the column schema.
75
+ # quick.md Step 7 creates a 5-column table:
76
+ # | # | Description | Date | Commit | Directory |
77
+ # Count pipe characters in the header to determine column count.
78
+ HEADER_LINE=$(grep -A2 "Quick Tasks Completed" .planning/STATE.md 2>/dev/null | grep "^|" | head -1)
79
+ # Count columns: number of | separators minus 1 gives column count
80
+ COL_COUNT=$(echo "$HEADER_LINE" | awk -F'|' '{print NF-1}')
81
+
82
+ if [ "$COL_COUNT" -eq 5 ] && echo "$HEADER_LINE" | grep -qi "Description" && echo "$HEADER_LINE" | grep -qi "Commit" && echo "$HEADER_LINE" | grep -qi "Directory"; then
83
+ # 5-column schema from quick.md Step 7: | # | Description | Date | Commit | Directory |
84
+ # Determine the next row number by counting existing data rows (non-separator, non-header).
85
+ NEXT_NUM=$(awk '/Quick Tasks Completed/{found=1} found && /^\|/ && !/^[|][-: |]*[|]$/ && !/Description/{count++} END{print count+1}' .planning/STATE.md 2>/dev/null || echo "1")
86
+ # Get the latest commit hash (short)
87
+ COMMIT_HASH=$(git rev-parse --short HEAD 2>/dev/null || echo "—")
88
+ echo "| $NEXT_NUM | $TASK | $(date +%Y-%m-%d) | $COMMIT_HASH | — |" >> .planning/STATE.md
89
+ else
90
+ # Unrecognized table schema — skip to avoid appending a malformed row.
91
+ echo "⚠ fast.md log_to_state: Quick Tasks Completed table has unrecognized schema (${COL_COUNT} columns); skipping STATE.md update."
92
+ fi
93
+ fi
94
+ ```
95
+ </step>
96
+
97
+ <step name="done">
98
+ Report completion:
99
+
100
+ ```
101
+ ✅ Done: {what was changed}
102
+ Commit: {short hash}
103
+ Files: {list of changed files}
104
+ ```
105
+
106
+ No next-step suggestions. No workflow routing. Just done.
107
+ </step>
108
+
109
+ </process>
110
+
111
+ <guardrails>
112
+ - NEVER spawn a Task/subagent — this runs inline
113
+ - NEVER create PLAN.md or SUMMARY.md files
114
+ - NEVER run research or plan-checking
115
+ - If the task takes more than 3 file edits, STOP and redirect to /gsd:quick
116
+ - If you're unsure how to implement it, STOP and redirect to /gsd:quick
117
+ </guardrails>
118
+
119
+ <success_criteria>
120
+ - [ ] Task completed in current context (no subagents)
121
+ - [ ] Atomic git commit with conventional message
122
+ - [ ] STATE.md updated if it exists
123
+ - [ ] Total operation under 2 minutes wall time
124
+ </success_criteria>
@@ -0,0 +1,279 @@
1
+ # Forensics Workflow
2
+
3
+ Post-mortem investigation for failed or stuck GSD workflows. Analyzes git history,
4
+ `.planning/` artifacts, and file system state to detect anomalies and generate a
5
+ structured diagnostic report.
6
+
7
+ **Principle:** This is a read-only investigation. Do not modify project files.
8
+ Only write the forensic report.
9
+
10
+ ---
11
+
12
+ ## Step 1: Get Problem Description
13
+
14
+ ```bash
15
+ PROBLEM="$ARGUMENTS"
16
+ ```
17
+
18
+ If `$ARGUMENTS` is empty, ask the user:
19
+ > "What went wrong? Describe the issue — e.g., 'autonomous mode got stuck on phase 3',
20
+ > 'execute-phase failed silently', 'costs seem unusually high'."
21
+
22
+ Record the problem description for the report.
23
+
24
+ ## Step 2: Gather Evidence
25
+
26
+ Collect data from all available sources. Missing sources are fine — adapt to what exists.
27
+
28
+ ### 2a. Git History
29
+
30
+ ```bash
31
+ # Recent commits (last 30)
32
+ git log --oneline -30
33
+
34
+ # Commits with timestamps for gap analysis
35
+ git log --format="%H %ai %s" -30
36
+
37
+ # Files changed in recent commits (detect repeated edits)
38
+ git log --name-only --format="" -20 | sort | uniq -c | sort -rn | head -20
39
+
40
+ # Uncommitted work
41
+ git status --short
42
+ git diff --stat
43
+ ```
44
+
45
+ Record:
46
+ - Commit timeline (dates, messages, frequency)
47
+ - Most-edited files (potential stuck-loop indicator)
48
+ - Uncommitted changes (potential crash/interruption indicator)
49
+
50
+ ### 2b. Planning State
51
+
52
+ Read these files if they exist:
53
+ - `.planning/STATE.md` — current milestone, phase, progress, blockers, last session
54
+ - `.planning/ROADMAP.md` — phase list with status
55
+ - `.planning/config.json` — workflow configuration
56
+
57
+ Extract:
58
+ - Current phase and its status
59
+ - Last recorded session stop point
60
+ - Any blockers or flags
61
+
62
+ ### 2c. Phase Artifacts
63
+
64
+ For each phase directory in `.planning/phases/*/`:
65
+
66
+ ```bash
67
+ ls .planning/phases/*/
68
+ ```
69
+
70
+ For each phase, check which artifacts exist:
71
+ - `{padded}-PLAN.md` or `{padded}-PLAN-*.md` (execution plans)
72
+ - `{padded}-SUMMARY.md` (completion summary)
73
+ - `{padded}-VERIFICATION.md` (quality verification)
74
+ - `{padded}-CONTEXT.md` (design decisions)
75
+ - `{padded}-RESEARCH.md` (pre-planning research)
76
+
77
+ Track: which phases have complete artifact sets vs gaps.
78
+
79
+ ### 2d. Session Reports
80
+
81
+ Read `.planning/reports/SESSION_REPORT.md` if it exists — extract last session outcomes,
82
+ work completed, token estimates.
83
+
84
+ ### 2e. Git Worktree State
85
+
86
+ ```bash
87
+ git worktree list
88
+ ```
89
+
90
+ Check for orphaned worktrees (from crashed agents).
91
+
92
+ ## Step 3: Detect Anomalies
93
+
94
+ Evaluate the gathered evidence against these anomaly patterns:
95
+
96
+ ### Stuck Loop Detection
97
+
98
+ **Signal:** Same file appears in 3+ consecutive commits within a short time window.
99
+
100
+ ```bash
101
+ # Look for files committed repeatedly in sequence
102
+ git log --name-only --format="---COMMIT---" -20
103
+ ```
104
+
105
+ Parse commit boundaries. If any file appears in 3+ consecutive commits, flag as:
106
+ - **Confidence HIGH** if the commit messages are similar (e.g., "fix:", "fix:", "fix:" on same file)
107
+ - **Confidence MEDIUM** if the file appears frequently but commit messages vary
108
+
109
+ ### Missing Artifact Detection
110
+
111
+ **Signal:** Phase appears complete (has commits, is past in roadmap) but lacks expected artifacts.
112
+
113
+ For each phase that should be complete:
114
+ - PLAN.md missing → planning step was skipped
115
+ - SUMMARY.md missing → phase was not properly closed
116
+ - VERIFICATION.md missing → quality check was skipped
117
+
118
+ ### Partial-plan Drift Detection
119
+
120
+ **Signal:** commits exist but SUMMARY.md is missing for the current or recently
121
+ active plan.
122
+
123
+ Run the same comparison as the execute-phase safe-resume verifier: identify the
124
+ active plan from STATE.md/phase artifacts, search git history for that plan id,
125
+ then compare against the expected SUMMARY.md path. If production commits exist
126
+ but SUMMARY.md is missing, flag a high-confidence partial-plan drift anomaly.
127
+ This usually means an executor was interrupted after implementation commits but
128
+ before atomic close-out.
129
+
130
+ ### Abandoned Work Detection
131
+
132
+ **Signal:** Large gap between last commit and current time, with STATE.md showing mid-execution.
133
+
134
+ ```bash
135
+ # Time since last commit
136
+ git log -1 --format="%ai"
137
+ ```
138
+
139
+ If STATE.md shows an active phase but the last commit is >2 hours old and there are
140
+ uncommitted changes, flag as potential abandonment or crash.
141
+
142
+ ### Crash/Interruption Detection
143
+
144
+ **Signal:** Uncommitted changes + STATE.md shows mid-execution + orphaned worktrees.
145
+
146
+ Combine:
147
+ - `git status` shows modified/staged files
148
+ - STATE.md has an active execution entry
149
+ - `git worktree list` shows worktrees beyond the main one
150
+
151
+ ### Scope Drift Detection
152
+
153
+ **Signal:** Recent commits touch files outside the current phase's expected scope.
154
+
155
+ Read the current phase PLAN.md to determine expected file paths. Compare against
156
+ files actually modified in recent commits. Flag any files that are clearly outside
157
+ the phase's domain.
158
+
159
+ ### Test Regression Detection
160
+
161
+ **Signal:** Commit messages containing "fix test", "revert", or re-commits of test files.
162
+
163
+ ```bash
164
+ git log --oneline -20 | grep -iE "fix test|revert|broken|regression|fail"
165
+ ```
166
+
167
+ ## Step 4: Generate Report
168
+
169
+ Create the forensics directory if needed:
170
+ ```bash
171
+ mkdir -p .planning/forensics
172
+ ```
173
+
174
+ Write to `.planning/forensics/report-$(date +%Y%m%d-%H%M%S).md`:
175
+
176
+ ```markdown
177
+ # Forensic Report
178
+
179
+ **Generated:** {ISO timestamp}
180
+ **Problem:** {user's description}
181
+
182
+ ---
183
+
184
+ ## Evidence Summary
185
+
186
+ ### Git Activity
187
+ - **Last commit:** {date} — "{message}"
188
+ - **Commits (last 30):** {count}
189
+ - **Time span:** {earliest} → {latest}
190
+ - **Uncommitted changes:** {yes/no — list if yes}
191
+ - **Active worktrees:** {count — list if >1}
192
+
193
+ ### Planning State
194
+ - **Current milestone:** {version or "none"}
195
+ - **Current phase:** {number — name — status}
196
+ - **Last session:** {stopped_at from STATE.md}
197
+ - **Blockers:** {any flags from STATE.md}
198
+
199
+ ### Artifact Completeness
200
+ | Phase | PLAN | CONTEXT | RESEARCH | SUMMARY | VERIFICATION |
201
+ |-------|------|---------|----------|---------|-------------|
202
+ {for each phase: name | ✅/❌ per artifact}
203
+
204
+ ## Anomalies Detected
205
+
206
+ ### {Anomaly Type} — {Confidence: HIGH/MEDIUM/LOW}
207
+ **Evidence:** {specific commits, files, or state data}
208
+ **Interpretation:** {what this likely means}
209
+
210
+ {repeat for each anomaly found}
211
+
212
+ ## Root Cause Hypothesis
213
+
214
+ Based on the evidence above, the most likely explanation is:
215
+
216
+ {1-3 sentence hypothesis grounded in the anomalies}
217
+
218
+ ## Recommended Actions
219
+
220
+ 1. {Specific, actionable remediation step}
221
+ 2. {Another step if applicable}
222
+ 3. {Recovery command if applicable — e.g., `/gsd:resume-work`, `/gsd:execute-phase N`}
223
+
224
+ ---
225
+
226
+ *Report generated by `/gsd:forensics`. All paths redacted for portability.*
227
+ ```
228
+
229
+ **Redaction rules:**
230
+ - Replace absolute paths with relative paths (strip `$HOME` prefix)
231
+ - Remove any API keys, tokens, or credentials found in git diff output
232
+ - Truncate large diffs to first 50 lines
233
+
234
+ ## Step 5: Present Report
235
+
236
+ Display the full forensic report inline.
237
+
238
+ ## Step 6: Offer Interactive Investigation
239
+
240
+ > "Report saved to `.planning/forensics/report-{timestamp}.md`.
241
+ >
242
+ > I can dig deeper into any finding. Want me to:
243
+ > - Trace a specific anomaly to its root cause?
244
+ > - Read specific files referenced in the evidence?
245
+ > - Check if a similar issue has been reported before?"
246
+
247
+ If the user asks follow-up questions, answer from the evidence already gathered.
248
+ Read additional files only if specifically needed.
249
+
250
+ ## Step 7: Offer Issue Creation
251
+
252
+ If actionable anomalies were found (HIGH or MEDIUM confidence):
253
+
254
+ > "Want me to create a GitHub issue for this? I'll format the findings and redact paths."
255
+
256
+ If confirmed:
257
+ ```bash
258
+ # Check if "bug" label exists before using it
259
+ BUG_LABEL=$(gh label list --repo open-gsd/gsd-core --search "bug" --json name -q '.[0].name' 2>/dev/null)
260
+ LABEL_FLAG=""
261
+ if [ -n "$BUG_LABEL" ]; then
262
+ LABEL_FLAG="--label bug"
263
+ fi
264
+
265
+ gh issue create \
266
+ --repo open-gsd/gsd-core \
267
+ --title "bug: {concise description from anomaly}" \
268
+ $LABEL_FLAG \
269
+ --body "{formatted findings from report}"
270
+ ```
271
+
272
+ ## Step 8: Update STATE.md
273
+
274
+ ```bash
275
+ _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
276
+ gsd_run query state.record-session "" \
277
+ "Forensic investigation complete" \
278
+ ".planning/forensics/report-{timestamp}.md"
279
+ ```