@therocketcode/gsd-core 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (568) hide show
  1. package/.claude-plugin/plugin.json +23 -0
  2. package/GEMINI.md +53 -0
  3. package/LICENSE +21 -0
  4. package/README.ja-JP.md +125 -0
  5. package/README.ko-KR.md +125 -0
  6. package/README.md +144 -0
  7. package/README.pt-BR.md +125 -0
  8. package/README.zh-CN.md +125 -0
  9. package/agents/gsd-advisor-researcher.md +108 -0
  10. package/agents/gsd-ai-researcher.md +114 -0
  11. package/agents/gsd-assumptions-analyzer.md +105 -0
  12. package/agents/gsd-code-fixer.md +668 -0
  13. package/agents/gsd-code-reviewer.md +387 -0
  14. package/agents/gsd-codebase-mapper.md +853 -0
  15. package/agents/gsd-debug-session-manager.md +314 -0
  16. package/agents/gsd-debugger.md +1452 -0
  17. package/agents/gsd-doc-classifier.md +168 -0
  18. package/agents/gsd-doc-synthesizer.md +204 -0
  19. package/agents/gsd-doc-verifier.md +217 -0
  20. package/agents/gsd-doc-writer.md +616 -0
  21. package/agents/gsd-domain-researcher.md +147 -0
  22. package/agents/gsd-eval-auditor.md +191 -0
  23. package/agents/gsd-eval-planner.md +154 -0
  24. package/agents/gsd-executor.md +785 -0
  25. package/agents/gsd-framework-selector.md +160 -0
  26. package/agents/gsd-integration-checker.md +470 -0
  27. package/agents/gsd-intel-updater.md +342 -0
  28. package/agents/gsd-nyquist-auditor.md +203 -0
  29. package/agents/gsd-pattern-mapper.md +335 -0
  30. package/agents/gsd-phase-researcher.md +867 -0
  31. package/agents/gsd-plan-checker.md +978 -0
  32. package/agents/gsd-planner.md +1204 -0
  33. package/agents/gsd-project-researcher.md +611 -0
  34. package/agents/gsd-research-synthesizer.md +259 -0
  35. package/agents/gsd-roadmapper.md +688 -0
  36. package/agents/gsd-security-auditor.md +155 -0
  37. package/agents/gsd-ui-auditor.md +495 -0
  38. package/agents/gsd-ui-checker.md +309 -0
  39. package/agents/gsd-ui-researcher.md +374 -0
  40. package/agents/gsd-user-profiler.md +171 -0
  41. package/agents/gsd-verifier.md +923 -0
  42. package/assets/gsd-logo-2000-transparent.png +0 -0
  43. package/assets/gsd-logo-2000-transparent.svg +17 -0
  44. package/assets/gsd-logo-2000.png +0 -0
  45. package/assets/gsd-logo-2000.svg +21 -0
  46. package/assets/terminal.svg +68 -0
  47. package/bin/install.js +12726 -0
  48. package/bin/lib/ui-safety-gate.cjs +107 -0
  49. package/commands/gsd/add-tests.md +42 -0
  50. package/commands/gsd/ai-integration-phase.md +37 -0
  51. package/commands/gsd/audit-fix.md +34 -0
  52. package/commands/gsd/audit-milestone.md +37 -0
  53. package/commands/gsd/audit-uat.md +24 -0
  54. package/commands/gsd/autonomous.md +48 -0
  55. package/commands/gsd/capture.md +62 -0
  56. package/commands/gsd/cleanup.md +24 -0
  57. package/commands/gsd/code-review.md +59 -0
  58. package/commands/gsd/complete-milestone.md +143 -0
  59. package/commands/gsd/config.md +56 -0
  60. package/commands/gsd/debug.md +52 -0
  61. package/commands/gsd/discover-product.md +65 -0
  62. package/commands/gsd/discuss-phase.md +77 -0
  63. package/commands/gsd/docs-update.md +49 -0
  64. package/commands/gsd/eval-review.md +33 -0
  65. package/commands/gsd/execute-phase.md +66 -0
  66. package/commands/gsd/explore.md +27 -0
  67. package/commands/gsd/extract-learnings.md +23 -0
  68. package/commands/gsd/fast.md +31 -0
  69. package/commands/gsd/forensics.md +57 -0
  70. package/commands/gsd/graphify.md +204 -0
  71. package/commands/gsd/health.md +31 -0
  72. package/commands/gsd/help.md +28 -0
  73. package/commands/gsd/import.md +45 -0
  74. package/commands/gsd/inbox.md +39 -0
  75. package/commands/gsd/ingest-docs.md +42 -0
  76. package/commands/gsd/manager.md +45 -0
  77. package/commands/gsd/map-codebase.md +83 -0
  78. package/commands/gsd/milestone-summary.md +51 -0
  79. package/commands/gsd/model-domain.md +65 -0
  80. package/commands/gsd/mvp-phase.md +45 -0
  81. package/commands/gsd/new-milestone.md +45 -0
  82. package/commands/gsd/new-project.md +47 -0
  83. package/commands/gsd/ns-context.md +23 -0
  84. package/commands/gsd/ns-ideate.md +24 -0
  85. package/commands/gsd/ns-manage.md +29 -0
  86. package/commands/gsd/ns-project.md +22 -0
  87. package/commands/gsd/ns-review.md +26 -0
  88. package/commands/gsd/ns-workflow.md +28 -0
  89. package/commands/gsd/pause-work.md +43 -0
  90. package/commands/gsd/phase.md +56 -0
  91. package/commands/gsd/plan-phase.md +64 -0
  92. package/commands/gsd/plan-review-convergence.md +59 -0
  93. package/commands/gsd/pr-branch.md +26 -0
  94. package/commands/gsd/profile-user.md +46 -0
  95. package/commands/gsd/progress.md +48 -0
  96. package/commands/gsd/quick.md +174 -0
  97. package/commands/gsd/recommend-architecture.md +64 -0
  98. package/commands/gsd/resume-work.md +30 -0
  99. package/commands/gsd/review-backlog.md +63 -0
  100. package/commands/gsd/review.md +42 -0
  101. package/commands/gsd/secure-phase.md +36 -0
  102. package/commands/gsd/settings.md +29 -0
  103. package/commands/gsd/ship.md +24 -0
  104. package/commands/gsd/sketch.md +60 -0
  105. package/commands/gsd/spec-phase.md +63 -0
  106. package/commands/gsd/spike.md +57 -0
  107. package/commands/gsd/stats.md +20 -0
  108. package/commands/gsd/surface.md +155 -0
  109. package/commands/gsd/testing-strategy.md +65 -0
  110. package/commands/gsd/thread.md +24 -0
  111. package/commands/gsd/ui-phase.md +35 -0
  112. package/commands/gsd/ui-review.md +33 -0
  113. package/commands/gsd/ultraplan-phase.md +34 -0
  114. package/commands/gsd/undo.md +35 -0
  115. package/commands/gsd/update.md +49 -0
  116. package/commands/gsd/validate-phase.md +36 -0
  117. package/commands/gsd/verify-work.md +39 -0
  118. package/commands/gsd/workspace.md +52 -0
  119. package/commands/gsd/workstreams.md +70 -0
  120. package/gemini-extension.json +6 -0
  121. package/gsd-core/bin/check-latest-version.cjs +161 -0
  122. package/gsd-core/bin/gsd-tools.cjs +1928 -0
  123. package/gsd-core/bin/lib/active-workstream-store.cjs +291 -0
  124. package/gsd-core/bin/lib/adr-parser.cjs +399 -0
  125. package/gsd-core/bin/lib/agent-command-router.cjs +68 -0
  126. package/gsd-core/bin/lib/artifacts.cjs +51 -0
  127. package/gsd-core/bin/lib/audit.cjs +743 -0
  128. package/gsd-core/bin/lib/check-command-router.cjs +343 -0
  129. package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
  130. package/gsd-core/bin/lib/cli-exit.cjs +42 -0
  131. package/gsd-core/bin/lib/clock.cjs +95 -0
  132. package/gsd-core/bin/lib/clusters.cjs +132 -0
  133. package/gsd-core/bin/lib/code-review-flags.cjs +59 -0
  134. package/gsd-core/bin/lib/command-aliases.cjs +809 -0
  135. package/gsd-core/bin/lib/command-arg-projection.cjs +55 -0
  136. package/gsd-core/bin/lib/command-routing-hub.cjs +300 -0
  137. package/gsd-core/bin/lib/commands.cjs +1203 -0
  138. package/gsd-core/bin/lib/config-schema.cjs +29 -0
  139. package/gsd-core/bin/lib/config-types.cjs +19 -0
  140. package/gsd-core/bin/lib/config.cjs +738 -0
  141. package/gsd-core/bin/lib/configuration.cjs +239 -0
  142. package/gsd-core/bin/lib/context-utilization.cjs +48 -0
  143. package/gsd-core/bin/lib/core.cjs +2051 -0
  144. package/gsd-core/bin/lib/decisions.cjs +118 -0
  145. package/gsd-core/bin/lib/docs.cjs +252 -0
  146. package/gsd-core/bin/lib/drift.cjs +364 -0
  147. package/gsd-core/bin/lib/fallow-runner.cjs +115 -0
  148. package/gsd-core/bin/lib/frontmatter.cjs +442 -0
  149. package/gsd-core/bin/lib/gap-checker.cjs +257 -0
  150. package/gsd-core/bin/lib/graphify.cjs +496 -0
  151. package/gsd-core/bin/lib/gsd2-import.cjs +456 -0
  152. package/gsd-core/bin/lib/init-command-router.cjs +62 -0
  153. package/gsd-core/bin/lib/init.cjs +1815 -0
  154. package/gsd-core/bin/lib/install-profiles.cjs +584 -0
  155. package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
  156. package/gsd-core/bin/lib/installer-migration-report.cjs +350 -0
  157. package/gsd-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +218 -0
  158. package/gsd-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
  159. package/gsd-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
  160. package/gsd-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
  161. package/gsd-core/bin/lib/installer-migrations.cjs +823 -0
  162. package/gsd-core/bin/lib/intel.cjs +590 -0
  163. package/gsd-core/bin/lib/learnings.cjs +270 -0
  164. package/gsd-core/bin/lib/legacy-cleanup.cjs +253 -0
  165. package/gsd-core/bin/lib/milestone.cjs +373 -0
  166. package/gsd-core/bin/lib/model-catalog.cjs +154 -0
  167. package/gsd-core/bin/lib/model-profiles.cjs +24 -0
  168. package/gsd-core/bin/lib/observability/event.cjs +51 -0
  169. package/gsd-core/bin/lib/observability/logger.cjs +146 -0
  170. package/gsd-core/bin/lib/observability/redaction.cjs +48 -0
  171. package/gsd-core/bin/lib/package-identity.cjs +35 -0
  172. package/gsd-core/bin/lib/package-legitimacy.cjs +368 -0
  173. package/gsd-core/bin/lib/phase-command-router.cjs +189 -0
  174. package/gsd-core/bin/lib/phase-lifecycle.cjs +74 -0
  175. package/gsd-core/bin/lib/phase.cjs +1307 -0
  176. package/gsd-core/bin/lib/phases-command-router.cjs +43 -0
  177. package/gsd-core/bin/lib/plan-scan.cjs +91 -0
  178. package/gsd-core/bin/lib/planning-workspace.cjs +245 -0
  179. package/gsd-core/bin/lib/profile-output.cjs +1120 -0
  180. package/gsd-core/bin/lib/profile-pipeline.cjs +517 -0
  181. package/gsd-core/bin/lib/project-root.cjs +119 -0
  182. package/gsd-core/bin/lib/prompt-budget.cjs +305 -0
  183. package/gsd-core/bin/lib/research-provider.cjs +137 -0
  184. package/gsd-core/bin/lib/research-store.cjs +167 -0
  185. package/gsd-core/bin/lib/review-reviewer-selection.cjs +121 -0
  186. package/gsd-core/bin/lib/roadmap-command-router.cjs +166 -0
  187. package/gsd-core/bin/lib/roadmap-upgrade.cjs +476 -0
  188. package/gsd-core/bin/lib/roadmap.cjs +600 -0
  189. package/gsd-core/bin/lib/runtime-artifact-layout.cjs +312 -0
  190. package/gsd-core/bin/lib/runtime-config-adapter-registry.cjs +56 -0
  191. package/gsd-core/bin/lib/runtime-homes.cjs +190 -0
  192. package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
  193. package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
  194. package/gsd-core/bin/lib/schema-detect.cjs +159 -0
  195. package/gsd-core/bin/lib/secrets.cjs +34 -0
  196. package/gsd-core/bin/lib/security.cjs +480 -0
  197. package/gsd-core/bin/lib/semver-compare.cjs +42 -0
  198. package/gsd-core/bin/lib/shell-command-projection.cjs +533 -0
  199. package/gsd-core/bin/lib/state-command-router.cjs +160 -0
  200. package/gsd-core/bin/lib/state-document.cjs +259 -0
  201. package/gsd-core/bin/lib/state.cjs +2010 -0
  202. package/gsd-core/bin/lib/surface.cjs +449 -0
  203. package/gsd-core/bin/lib/task-command-router.cjs +85 -0
  204. package/gsd-core/bin/lib/template.cjs +237 -0
  205. package/gsd-core/bin/lib/uat.cjs +297 -0
  206. package/gsd-core/bin/lib/ui-safety-gate.cjs +98 -0
  207. package/gsd-core/bin/lib/update-context.cjs +218 -0
  208. package/gsd-core/bin/lib/validate-command-router.cjs +91 -0
  209. package/gsd-core/bin/lib/validate.cjs +112 -0
  210. package/gsd-core/bin/lib/verification-command-router.cjs +31 -0
  211. package/gsd-core/bin/lib/verification.cjs +193 -0
  212. package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
  213. package/gsd-core/bin/lib/verify.cjs +1451 -0
  214. package/gsd-core/bin/lib/workstream-inventory-builder.cjs +81 -0
  215. package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
  216. package/gsd-core/bin/lib/workstream-name-policy.cjs +91 -0
  217. package/gsd-core/bin/lib/workstream.cjs +380 -0
  218. package/gsd-core/bin/lib/worktree-base-ref.cjs +325 -0
  219. package/gsd-core/bin/lib/worktree-safety.cjs +943 -0
  220. package/gsd-core/bin/shared/config-defaults.manifest.json +98 -0
  221. package/gsd-core/bin/shared/config-schema.manifest.json +192 -0
  222. package/gsd-core/bin/shared/model-catalog.json +149 -0
  223. package/gsd-core/bin/shared/runtime-aliases.manifest.json +75 -0
  224. package/gsd-core/bin/verify-reapply-patches.cjs +349 -0
  225. package/gsd-core/contexts/dev.md +21 -0
  226. package/gsd-core/contexts/research.md +22 -0
  227. package/gsd-core/contexts/review.md +23 -0
  228. package/gsd-core/references/agent-contracts.md +79 -0
  229. package/gsd-core/references/ai-evals.md +156 -0
  230. package/gsd-core/references/ai-frameworks.md +186 -0
  231. package/gsd-core/references/architecture-decision.md +74 -0
  232. package/gsd-core/references/artifact-types.md +131 -0
  233. package/gsd-core/references/auth-in-tests.md +91 -0
  234. package/gsd-core/references/autonomous-smart-discuss.md +277 -0
  235. package/gsd-core/references/checkpoints.md +814 -0
  236. package/gsd-core/references/common-bug-patterns.md +114 -0
  237. package/gsd-core/references/context-budget.md +85 -0
  238. package/gsd-core/references/continuation-format.md +253 -0
  239. package/gsd-core/references/db-test-isolation.md +54 -0
  240. package/gsd-core/references/debugger-philosophy.md +76 -0
  241. package/gsd-core/references/decimal-phase-calculation.md +64 -0
  242. package/gsd-core/references/doc-conflict-engine.md +91 -0
  243. package/gsd-core/references/domain-modeling.md +80 -0
  244. package/gsd-core/references/domain-probes.md +125 -0
  245. package/gsd-core/references/e2e-tiering.md +35 -0
  246. package/gsd-core/references/execute-mvp-tdd.md +81 -0
  247. package/gsd-core/references/executor-examples.md +110 -0
  248. package/gsd-core/references/few-shot-examples/plan-checker.md +73 -0
  249. package/gsd-core/references/few-shot-examples/verifier.md +109 -0
  250. package/gsd-core/references/flaky-test-checklist.md +22 -0
  251. package/gsd-core/references/gate-prompts.md +100 -0
  252. package/gsd-core/references/gates.md +70 -0
  253. package/gsd-core/references/git-integration.md +298 -0
  254. package/gsd-core/references/git-planning-commit.md +40 -0
  255. package/gsd-core/references/ios-scaffold.md +123 -0
  256. package/gsd-core/references/mandatory-initial-read.md +2 -0
  257. package/gsd-core/references/model-profile-resolution.md +38 -0
  258. package/gsd-core/references/model-profiles.md +245 -0
  259. package/gsd-core/references/mvp-concepts.md +49 -0
  260. package/gsd-core/references/phase-argument-parsing.md +61 -0
  261. package/gsd-core/references/planner-antipatterns.md +89 -0
  262. package/gsd-core/references/planner-chunked.md +49 -0
  263. package/gsd-core/references/planner-gap-closure.md +62 -0
  264. package/gsd-core/references/planner-graphify-auto-update.md +67 -0
  265. package/gsd-core/references/planner-human-verify-mode.md +57 -0
  266. package/gsd-core/references/planner-interface-context.md +62 -0
  267. package/gsd-core/references/planner-load-graph-context.md +36 -0
  268. package/gsd-core/references/planner-mvp-mode.md +53 -0
  269. package/gsd-core/references/planner-reviews.md +39 -0
  270. package/gsd-core/references/planner-revision.md +87 -0
  271. package/gsd-core/references/planner-source-audit.md +73 -0
  272. package/gsd-core/references/planning-config.md +473 -0
  273. package/gsd-core/references/product-discovery.md +49 -0
  274. package/gsd-core/references/project-skills-discovery.md +19 -0
  275. package/gsd-core/references/questioning.md +162 -0
  276. package/gsd-core/references/realistic-test-data.md +44 -0
  277. package/gsd-core/references/research-documentation-lookup.md +29 -0
  278. package/gsd-core/references/research-philosophy.md +29 -0
  279. package/gsd-core/references/research-verification-protocol.md +27 -0
  280. package/gsd-core/references/revision-loop.md +97 -0
  281. package/gsd-core/references/scout-codebase.md +51 -0
  282. package/gsd-core/references/skeleton-template.md +48 -0
  283. package/gsd-core/references/sketch-interactivity.md +41 -0
  284. package/gsd-core/references/sketch-theme-system.md +94 -0
  285. package/gsd-core/references/sketch-tooling.md +45 -0
  286. package/gsd-core/references/sketch-variant-patterns.md +81 -0
  287. package/gsd-core/references/spidr-splitting.md +69 -0
  288. package/gsd-core/references/tdd.md +330 -0
  289. package/gsd-core/references/test-containers.md +55 -0
  290. package/gsd-core/references/test-strategy.md +75 -0
  291. package/gsd-core/references/thinking-models-debug.md +44 -0
  292. package/gsd-core/references/thinking-models-execution.md +50 -0
  293. package/gsd-core/references/thinking-models-planning.md +62 -0
  294. package/gsd-core/references/thinking-models-research.md +50 -0
  295. package/gsd-core/references/thinking-models-verification.md +55 -0
  296. package/gsd-core/references/thinking-partner.md +96 -0
  297. package/gsd-core/references/ui-brand.md +162 -0
  298. package/gsd-core/references/universal-anti-patterns.md +63 -0
  299. package/gsd-core/references/user-profiling.md +681 -0
  300. package/gsd-core/references/user-story-template.md +58 -0
  301. package/gsd-core/references/verification-overrides.md +227 -0
  302. package/gsd-core/references/verification-patterns.md +612 -0
  303. package/gsd-core/references/verify-mvp-mode.md +85 -0
  304. package/gsd-core/references/workstream-flag.md +111 -0
  305. package/gsd-core/references/worktree-branch-check.md +38 -0
  306. package/gsd-core/references/worktree-path-safety.md +67 -0
  307. package/gsd-core/templates/AI-SPEC.md +246 -0
  308. package/gsd-core/templates/DEBUG.md +169 -0
  309. package/gsd-core/templates/README.md +77 -0
  310. package/gsd-core/templates/SECURITY.md +61 -0
  311. package/gsd-core/templates/UAT.md +265 -0
  312. package/gsd-core/templates/UI-SPEC.md +100 -0
  313. package/gsd-core/templates/VALIDATION.md +76 -0
  314. package/gsd-core/templates/adr.md +58 -0
  315. package/gsd-core/templates/claude-md.md +145 -0
  316. package/gsd-core/templates/codebase/architecture.md +255 -0
  317. package/gsd-core/templates/codebase/concerns.md +310 -0
  318. package/gsd-core/templates/codebase/conventions.md +307 -0
  319. package/gsd-core/templates/codebase/integrations.md +280 -0
  320. package/gsd-core/templates/codebase/stack.md +186 -0
  321. package/gsd-core/templates/codebase/structure.md +285 -0
  322. package/gsd-core/templates/codebase/testing.md +480 -0
  323. package/gsd-core/templates/config.json +62 -0
  324. package/gsd-core/templates/context.md +352 -0
  325. package/gsd-core/templates/continue-here.md +78 -0
  326. package/gsd-core/templates/copilot-instructions.md +7 -0
  327. package/gsd-core/templates/debug-subagent-prompt.md +91 -0
  328. package/gsd-core/templates/dev-preferences.md +21 -0
  329. package/gsd-core/templates/discovery.md +146 -0
  330. package/gsd-core/templates/discussion-log.md +63 -0
  331. package/gsd-core/templates/domain-model.md +54 -0
  332. package/gsd-core/templates/milestone-archive.md +123 -0
  333. package/gsd-core/templates/milestone.md +115 -0
  334. package/gsd-core/templates/phase-prompt.md +610 -0
  335. package/gsd-core/templates/planner-subagent-prompt.md +117 -0
  336. package/gsd-core/templates/product-brief.md +55 -0
  337. package/gsd-core/templates/project.md +186 -0
  338. package/gsd-core/templates/requirements.md +231 -0
  339. package/gsd-core/templates/research-project/ARCHITECTURE.md +204 -0
  340. package/gsd-core/templates/research-project/FEATURES.md +147 -0
  341. package/gsd-core/templates/research-project/PITFALLS.md +200 -0
  342. package/gsd-core/templates/research-project/STACK.md +120 -0
  343. package/gsd-core/templates/research-project/SUMMARY.md +170 -0
  344. package/gsd-core/templates/research.md +592 -0
  345. package/gsd-core/templates/retrospective.md +54 -0
  346. package/gsd-core/templates/roadmap.md +202 -0
  347. package/gsd-core/templates/spec.md +307 -0
  348. package/gsd-core/templates/state.md +195 -0
  349. package/gsd-core/templates/summary-complex.md +59 -0
  350. package/gsd-core/templates/summary-minimal.md +41 -0
  351. package/gsd-core/templates/summary-standard.md +48 -0
  352. package/gsd-core/templates/summary.md +248 -0
  353. package/gsd-core/templates/test-strategy.md +50 -0
  354. package/gsd-core/templates/user-profile.md +146 -0
  355. package/gsd-core/templates/user-setup.md +311 -0
  356. package/gsd-core/templates/verification-report.md +322 -0
  357. package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
  358. package/gsd-core/workflows/add-backlog.md +91 -0
  359. package/gsd-core/workflows/add-phase.md +113 -0
  360. package/gsd-core/workflows/add-tests.md +355 -0
  361. package/gsd-core/workflows/add-todo.md +161 -0
  362. package/gsd-core/workflows/ai-integration-phase.md +295 -0
  363. package/gsd-core/workflows/analyze-dependencies.md +96 -0
  364. package/gsd-core/workflows/audit-fix.md +178 -0
  365. package/gsd-core/workflows/audit-milestone.md +360 -0
  366. package/gsd-core/workflows/audit-uat.md +110 -0
  367. package/gsd-core/workflows/autonomous.md +797 -0
  368. package/gsd-core/workflows/check-todos.md +180 -0
  369. package/gsd-core/workflows/cleanup.md +195 -0
  370. package/gsd-core/workflows/code-review-fix.md +502 -0
  371. package/gsd-core/workflows/code-review.md +658 -0
  372. package/gsd-core/workflows/complete-milestone.md +855 -0
  373. package/gsd-core/workflows/debug.md +237 -0
  374. package/gsd-core/workflows/diagnose-issues.md +245 -0
  375. package/gsd-core/workflows/discover-product.md +112 -0
  376. package/gsd-core/workflows/discovery-phase.md +291 -0
  377. package/gsd-core/workflows/discuss-phase/modes/advisor.md +176 -0
  378. package/gsd-core/workflows/discuss-phase/modes/all.md +28 -0
  379. package/gsd-core/workflows/discuss-phase/modes/analyze.md +44 -0
  380. package/gsd-core/workflows/discuss-phase/modes/auto.md +57 -0
  381. package/gsd-core/workflows/discuss-phase/modes/batch.md +52 -0
  382. package/gsd-core/workflows/discuss-phase/modes/chain.md +98 -0
  383. package/gsd-core/workflows/discuss-phase/modes/default.md +141 -0
  384. package/gsd-core/workflows/discuss-phase/modes/power.md +44 -0
  385. package/gsd-core/workflows/discuss-phase/modes/text.md +55 -0
  386. package/gsd-core/workflows/discuss-phase/templates/checkpoint.json +18 -0
  387. package/gsd-core/workflows/discuss-phase/templates/context.md +136 -0
  388. package/gsd-core/workflows/discuss-phase/templates/discussion-log.md +50 -0
  389. package/gsd-core/workflows/discuss-phase-assumptions.md +675 -0
  390. package/gsd-core/workflows/discuss-phase-power.md +291 -0
  391. package/gsd-core/workflows/discuss-phase.md +499 -0
  392. package/gsd-core/workflows/do.md +111 -0
  393. package/gsd-core/workflows/docs-update.md +1176 -0
  394. package/gsd-core/workflows/edit-phase.md +295 -0
  395. package/gsd-core/workflows/eval-review.md +156 -0
  396. package/gsd-core/workflows/execute-phase/steps/codebase-drift-gate.md +95 -0
  397. package/gsd-core/workflows/execute-phase/steps/per-plan-worktree-gate.md +94 -0
  398. package/gsd-core/workflows/execute-phase/steps/post-merge-gate.md +117 -0
  399. package/gsd-core/workflows/execute-phase.md +1752 -0
  400. package/gsd-core/workflows/execute-plan.md +526 -0
  401. package/gsd-core/workflows/explore.md +146 -0
  402. package/gsd-core/workflows/extract-learnings.md +243 -0
  403. package/gsd-core/workflows/fast.md +124 -0
  404. package/gsd-core/workflows/forensics.md +279 -0
  405. package/gsd-core/workflows/graduation.md +196 -0
  406. package/gsd-core/workflows/health.md +224 -0
  407. package/gsd-core/workflows/help/modes/brief.md +22 -0
  408. package/gsd-core/workflows/help/modes/default.md +50 -0
  409. package/gsd-core/workflows/help/modes/full.md +789 -0
  410. package/gsd-core/workflows/help/modes/topic.md +74 -0
  411. package/gsd-core/workflows/help.md +24 -0
  412. package/gsd-core/workflows/import.md +256 -0
  413. package/gsd-core/workflows/inbox.md +387 -0
  414. package/gsd-core/workflows/ingest-docs.md +340 -0
  415. package/gsd-core/workflows/insert-phase.md +152 -0
  416. package/gsd-core/workflows/list-phase-assumptions.md +178 -0
  417. package/gsd-core/workflows/list-workspaces.md +57 -0
  418. package/gsd-core/workflows/manager.md +393 -0
  419. package/gsd-core/workflows/map-codebase.md +446 -0
  420. package/gsd-core/workflows/milestone-summary.md +224 -0
  421. package/gsd-core/workflows/model-domain.md +162 -0
  422. package/gsd-core/workflows/mvp-phase.md +222 -0
  423. package/gsd-core/workflows/new-milestone.md +635 -0
  424. package/gsd-core/workflows/new-project.md +1555 -0
  425. package/gsd-core/workflows/new-workspace.md +240 -0
  426. package/gsd-core/workflows/next.md +299 -0
  427. package/gsd-core/workflows/node-repair.md +92 -0
  428. package/gsd-core/workflows/note.md +158 -0
  429. package/gsd-core/workflows/pause-work.md +244 -0
  430. package/gsd-core/workflows/plan-milestone-gaps.md +281 -0
  431. package/gsd-core/workflows/plan-phase.md +1814 -0
  432. package/gsd-core/workflows/plan-review-convergence.md +346 -0
  433. package/gsd-core/workflows/plant-seed.md +230 -0
  434. package/gsd-core/workflows/pr-branch.md +157 -0
  435. package/gsd-core/workflows/profile-user.md +453 -0
  436. package/gsd-core/workflows/progress.md +699 -0
  437. package/gsd-core/workflows/quick.md +1017 -0
  438. package/gsd-core/workflows/reapply-patches.md +426 -0
  439. package/gsd-core/workflows/recommend-architecture.md +135 -0
  440. package/gsd-core/workflows/remove-phase.md +156 -0
  441. package/gsd-core/workflows/remove-workspace.md +108 -0
  442. package/gsd-core/workflows/resume-project.md +332 -0
  443. package/gsd-core/workflows/review.md +748 -0
  444. package/gsd-core/workflows/scan.md +107 -0
  445. package/gsd-core/workflows/secure-phase.md +182 -0
  446. package/gsd-core/workflows/session-report.md +146 -0
  447. package/gsd-core/workflows/settings-advanced.md +810 -0
  448. package/gsd-core/workflows/settings-integrations.md +312 -0
  449. package/gsd-core/workflows/settings.md +566 -0
  450. package/gsd-core/workflows/ship.md +405 -0
  451. package/gsd-core/workflows/sketch-wrap-up.md +286 -0
  452. package/gsd-core/workflows/sketch.md +361 -0
  453. package/gsd-core/workflows/spec-phase.md +263 -0
  454. package/gsd-core/workflows/spike-wrap-up.md +307 -0
  455. package/gsd-core/workflows/spike.md +453 -0
  456. package/gsd-core/workflows/stats.md +80 -0
  457. package/gsd-core/workflows/sync-skills.md +182 -0
  458. package/gsd-core/workflows/testing-strategy.md +122 -0
  459. package/gsd-core/workflows/thread.md +222 -0
  460. package/gsd-core/workflows/transition.md +694 -0
  461. package/gsd-core/workflows/ui-phase.md +328 -0
  462. package/gsd-core/workflows/ui-review.md +193 -0
  463. package/gsd-core/workflows/ultraplan-phase.md +199 -0
  464. package/gsd-core/workflows/undo.md +314 -0
  465. package/gsd-core/workflows/update.md +496 -0
  466. package/gsd-core/workflows/validate-phase.md +181 -0
  467. package/gsd-core/workflows/verify-phase.md +544 -0
  468. package/gsd-core/workflows/verify-work.md +781 -0
  469. package/hooks/dist/gsd-check-update-worker.js +108 -0
  470. package/hooks/dist/gsd-check-update.js +66 -0
  471. package/hooks/dist/gsd-config-reload.js +133 -0
  472. package/hooks/dist/gsd-context-monitor.js +195 -0
  473. package/hooks/dist/gsd-cursor-post-tool.js +75 -0
  474. package/hooks/dist/gsd-cursor-session-start.js +52 -0
  475. package/hooks/dist/gsd-graphify-update.sh +158 -0
  476. package/hooks/dist/gsd-phase-boundary.sh +47 -0
  477. package/hooks/dist/gsd-prompt-guard.js +97 -0
  478. package/hooks/dist/gsd-read-guard.js +101 -0
  479. package/hooks/dist/gsd-read-injection-scanner.js +203 -0
  480. package/hooks/dist/gsd-session-state.sh +59 -0
  481. package/hooks/dist/gsd-statusline.js +566 -0
  482. package/hooks/dist/gsd-update-banner.js +138 -0
  483. package/hooks/dist/gsd-validate-commit.sh +57 -0
  484. package/hooks/dist/gsd-workflow-guard.js +167 -0
  485. package/hooks/dist/gsd-worktree-path-guard.js +169 -0
  486. package/hooks/dist/lib/git-cmd.js +150 -0
  487. package/hooks/dist/lib/gsd-graphify-rebuild.sh +65 -0
  488. package/hooks/dist/managed-hooks-registry.cjs +38 -0
  489. package/hooks/gsd-check-update-worker.js +108 -0
  490. package/hooks/gsd-check-update.js +66 -0
  491. package/hooks/gsd-config-reload.js +133 -0
  492. package/hooks/gsd-context-monitor.js +195 -0
  493. package/hooks/gsd-cursor-post-tool.js +75 -0
  494. package/hooks/gsd-cursor-session-start.js +52 -0
  495. package/hooks/gsd-graphify-update.sh +158 -0
  496. package/hooks/gsd-phase-boundary.sh +47 -0
  497. package/hooks/gsd-prompt-guard.js +97 -0
  498. package/hooks/gsd-read-guard.js +101 -0
  499. package/hooks/gsd-read-injection-scanner.js +203 -0
  500. package/hooks/gsd-session-state.sh +59 -0
  501. package/hooks/gsd-statusline.js +566 -0
  502. package/hooks/gsd-update-banner.js +138 -0
  503. package/hooks/gsd-validate-commit.sh +57 -0
  504. package/hooks/gsd-workflow-guard.js +167 -0
  505. package/hooks/gsd-worktree-path-guard.js +169 -0
  506. package/hooks/hooks.json +69 -0
  507. package/hooks/lib/git-cmd.js +150 -0
  508. package/hooks/lib/gsd-graphify-rebuild.sh +65 -0
  509. package/hooks/managed-hooks-registry.cjs +38 -0
  510. package/package.json +115 -0
  511. package/scripts/affected-tests-lib.cjs +542 -0
  512. package/scripts/audit-workflow-script-paths.cjs +73 -0
  513. package/scripts/base64-scan.sh +351 -0
  514. package/scripts/build-hooks.js +247 -0
  515. package/scripts/changeset/README.md +129 -0
  516. package/scripts/changeset/cli.cjs +590 -0
  517. package/scripts/changeset/github-release-notes.cjs +199 -0
  518. package/scripts/changeset/lint.cjs +111 -0
  519. package/scripts/changeset/new.cjs +137 -0
  520. package/scripts/changeset/parse.cjs +114 -0
  521. package/scripts/changeset/render.cjs +34 -0
  522. package/scripts/changeset/serialize.cjs +130 -0
  523. package/scripts/check-alias-drift.cjs +114 -0
  524. package/scripts/check-env.cjs +312 -0
  525. package/scripts/check-npm-integrity.cjs +215 -0
  526. package/scripts/ci-guard-runner.cjs +22 -0
  527. package/scripts/ci-prepare-test-scope.cjs +51 -0
  528. package/scripts/ci-rebase-check.cjs +86 -0
  529. package/scripts/ci-test-scope.cjs +431 -0
  530. package/scripts/command-contract-helpers.cjs +64 -0
  531. package/scripts/diff-touches-shipped-paths.cjs +155 -0
  532. package/scripts/fix-slash-commands.cjs +147 -0
  533. package/scripts/gen-inventory-manifest.cjs +115 -0
  534. package/scripts/gen-research-agents.cjs +276 -0
  535. package/scripts/generate-package-identity.cjs +125 -0
  536. package/scripts/issue-dedupe.cjs +278 -0
  537. package/scripts/lib/allowlist-ratchet.cjs +136 -0
  538. package/scripts/lib/cli-exit.cjs +56 -0
  539. package/scripts/lint-command-contract.cjs +114 -0
  540. package/scripts/lint-descriptions.cjs +87 -0
  541. package/scripts/lint-docs-required.cjs +222 -0
  542. package/scripts/lint-legacy-dir-name.cjs +160 -0
  543. package/scripts/lint-package-identity-drift.cjs +141 -0
  544. package/scripts/lint-pr-check-project-dir.cjs +99 -0
  545. package/scripts/lint-shell-command-projection-drift.cjs +62 -0
  546. package/scripts/lint-skill-deps.cjs +185 -0
  547. package/scripts/lint-test-file-count.allowlist.json +135 -0
  548. package/scripts/lint-test-file-count.cjs +246 -0
  549. package/scripts/mutation-matrix.cjs +222 -0
  550. package/scripts/pr-template-policy.cjs +268 -0
  551. package/scripts/prompt-injection-scan.sh +207 -0
  552. package/scripts/release-notes/discord-release-summary.cjs +373 -0
  553. package/scripts/release-notes/format-github-release-notes.cjs +261 -0
  554. package/scripts/release-tarball-smoke.cjs +629 -0
  555. package/scripts/research-profiles.cjs +149 -0
  556. package/scripts/run-affected-tests.cjs +7 -0
  557. package/scripts/run-cross-platform-tests.cjs +67 -0
  558. package/scripts/run-tests.cjs +315 -0
  559. package/scripts/secret-scan-lint.sh +231 -0
  560. package/scripts/secret-scan.sh +358 -0
  561. package/scripts/setup-branch-protection.sh +236 -0
  562. package/scripts/strip-prose-atrefs.cjs +106 -0
  563. package/scripts/sync-manifest-versions.cjs +119 -0
  564. package/scripts/sync-rulesets.sh +34 -0
  565. package/scripts/sync-runtime-launcher.cjs +399 -0
  566. package/scripts/test-failure-reasons.cjs +34 -0
  567. package/scripts/verify-npm-publish.cjs +240 -0
  568. package/scripts/workflow-policy.cjs +450 -0
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ /**
3
+ * Installer migration: record first-time installer migration baseline.
4
+ *
5
+ * ADR-457 build-at-publish: the hand-written
6
+ * bin/lib/installer-migrations/000-first-time-baseline.cjs collapsed to a
7
+ * TypeScript source of truth. Behaviour is preserved byte-for-behaviour from
8
+ * the prior hand-written .cjs; only types are added.
9
+ */
10
+ var __importDefault = (this && this.__importDefault) || function (mod) {
11
+ return (mod && mod.__esModule) ? mod : { "default": mod };
12
+ };
13
+ const node_fs_1 = __importDefault(require("node:fs"));
14
+ const node_path_1 = __importDefault(require("node:path"));
15
+ const BASELINE_MIGRATION_ID = '2026-05-11-first-time-baseline-scan';
16
+ // Runtime install surfaces must stay aligned with:
17
+ // - docs/installer-migrations.md#runtime-configuration-contract-registry
18
+ // - docs/ARCHITECTURE.md#runtime-install-contract-matrix
19
+ const RUNTIME_SURFACES = {
20
+ claude: ['gsd-core', 'commands/gsd', 'skills', 'agents', 'hooks', 'settings.json'],
21
+ codex: ['gsd-core', 'skills', 'agents', 'hooks', 'config.toml', 'hooks.json'],
22
+ gemini: ['gsd-core', 'commands/gsd', 'hooks'],
23
+ opencode: ['gsd-core', 'command', 'skills', 'agents'],
24
+ kilo: ['gsd-core', 'command', 'skills', 'agents'],
25
+ copilot: ['gsd-core', 'skills', 'agents'],
26
+ antigravity: ['gsd-core', 'skills', 'agents'],
27
+ cursor: ['gsd-core', 'skills', 'agents', 'hooks', 'hooks.json'],
28
+ windsurf: ['gsd-core', 'skills', 'agents', 'rules'],
29
+ augment: ['gsd-core', 'skills', 'agents'],
30
+ trae: ['gsd-core', 'skills', 'agents', 'rules'],
31
+ qwen: ['gsd-core', 'skills', 'agents'],
32
+ hermes: ['gsd-core', 'skills/gsd', 'agents'],
33
+ cline: ['gsd-core', 'skills', 'agents'],
34
+ codebuddy: ['gsd-core', 'skills', 'agents'],
35
+ };
36
+ const COMMON_SURFACES = ['gsd-core', 'skills', 'agents', 'hooks'];
37
+ const INTERNAL_TOP_LEVEL_NAMES = new Set([
38
+ 'gsd-file-manifest.json',
39
+ 'gsd-install-state.json',
40
+ 'gsd-migration-backups',
41
+ 'gsd-migration-journal',
42
+ ]);
43
+ const USER_OWNED_PATHS = new Set([
44
+ 'gsd-core/USER-PROFILE.md',
45
+ 'commands/gsd/dev-preferences.md',
46
+ 'skills/gsd-dev-preferences/SKILL.md',
47
+ ]);
48
+ let knownGeneratedAgentNames = null;
49
+ function normalizeRelPath(relPath) {
50
+ return relPath.replace(/\\/g, '/').replace(/^\/+/, '');
51
+ }
52
+ function baselineInstallSurfaces(runtime) {
53
+ if (runtime && RUNTIME_SURFACES[runtime])
54
+ return RUNTIME_SURFACES[runtime];
55
+ return COMMON_SURFACES;
56
+ }
57
+ function walkFiles(root, relDir, files) {
58
+ const dir = node_path_1.default.join(root, relDir);
59
+ if (!node_fs_1.default.existsSync(dir))
60
+ return;
61
+ const entries = node_fs_1.default.readdirSync(dir, { withFileTypes: true });
62
+ for (const entry of entries) {
63
+ const relPath = node_path_1.default.posix.join(relDir, entry.name);
64
+ if (relDir === '' && INTERNAL_TOP_LEVEL_NAMES.has(entry.name))
65
+ continue;
66
+ if (entry.isDirectory()) {
67
+ walkFiles(root, relPath, files);
68
+ }
69
+ else if (entry.isFile()) {
70
+ files.add(normalizeRelPath(relPath));
71
+ }
72
+ }
73
+ }
74
+ function scanBaselineFiles(configDir, runtime) {
75
+ const relPaths = new Set();
76
+ for (const surface of baselineInstallSurfaces(runtime)) {
77
+ const normalized = normalizeRelPath(surface);
78
+ const fullPath = node_path_1.default.join(configDir, normalized);
79
+ if (!node_fs_1.default.existsSync(fullPath))
80
+ continue;
81
+ const stat = node_fs_1.default.statSync(fullPath);
82
+ if (stat.isDirectory()) {
83
+ walkFiles(configDir, normalized, relPaths);
84
+ }
85
+ else if (stat.isFile() && !INTERNAL_TOP_LEVEL_NAMES.has(normalized)) {
86
+ relPaths.add(normalized);
87
+ }
88
+ }
89
+ return [...relPaths];
90
+ }
91
+ function isUserOwnedBaselinePath(relPath) {
92
+ if (USER_OWNED_PATHS.has(relPath))
93
+ return true;
94
+ const parts = relPath.split('/');
95
+ if (parts[0] === 'skills' && parts[1] && !parts[1].startsWith('gsd-'))
96
+ return true;
97
+ if (parts[0] === 'agents' && parts[1] && !parts[1].startsWith('gsd-'))
98
+ return true;
99
+ return false;
100
+ }
101
+ function listKnownGeneratedAgentNames() {
102
+ if (knownGeneratedAgentNames)
103
+ return knownGeneratedAgentNames;
104
+ knownGeneratedAgentNames = new Set();
105
+ const agentsDir = node_path_1.default.resolve(__dirname, '..', '..', '..', '..', 'agents');
106
+ try {
107
+ for (const entry of node_fs_1.default.readdirSync(agentsDir, { withFileTypes: true })) {
108
+ if (entry.isFile() && entry.name.startsWith('gsd-') && entry.name.endsWith('.md')) {
109
+ knownGeneratedAgentNames.add(entry.name.replace(/\.md$/, ''));
110
+ }
111
+ }
112
+ }
113
+ catch {
114
+ // If the source agent directory is unavailable, fail closed and treat
115
+ // GSD-looking agent files as user-choice artifacts.
116
+ }
117
+ return knownGeneratedAgentNames;
118
+ }
119
+ function isKnownGeneratedAgentPath(relPath, runtime) {
120
+ const parts = relPath.split('/');
121
+ if (parts.length !== 2 || parts[0] !== 'agents')
122
+ return false;
123
+ const fileName = parts[1];
124
+ const extension = node_path_1.default.posix.extname(fileName);
125
+ if (extension !== '.md' && !(runtime === 'codex' && extension === '.toml'))
126
+ return false;
127
+ const agentName = fileName.slice(0, -extension.length);
128
+ return listKnownGeneratedAgentNames().has(agentName);
129
+ }
130
+ function isStaleGsdLookingPath(relPath) {
131
+ const baseName = node_path_1.default.posix.basename(relPath);
132
+ if (/^gsd[-_]/.test(baseName))
133
+ return true;
134
+ const parts = relPath.split('/');
135
+ if ((parts[0] === 'skills' || parts[0] === 'agents') && parts[1] && parts[1].startsWith('gsd-')) {
136
+ return true;
137
+ }
138
+ return false;
139
+ }
140
+ function baselineActionRank(action) {
141
+ if (action.type === 'record-baseline')
142
+ return 0;
143
+ if (action.type === 'baseline-preserve-user')
144
+ return 1;
145
+ return 2;
146
+ }
147
+ const migration = {
148
+ id: BASELINE_MIGRATION_ID,
149
+ title: 'Record first-time installer migration baseline',
150
+ description: 'Classify existing install surfaces before destructive installer migrations run.',
151
+ introducedIn: '1.50.0',
152
+ scopes: ['global', 'local'],
153
+ destructive: false,
154
+ plan: ({ configDir, runtime, baselineScan, classifyArtifact }) => {
155
+ if (!baselineScan)
156
+ return [];
157
+ const actions = [];
158
+ for (const relPath of scanBaselineFiles(configDir, runtime)) {
159
+ // docs/installer-migrations.md#baseline-preserve-user keeps user-owned
160
+ // artifacts out of destructive migration flow.
161
+ if (isUserOwnedBaselinePath(relPath)) {
162
+ actions.push({
163
+ type: 'baseline-preserve-user',
164
+ relPath,
165
+ reason: 'known user-owned artifact preserved by first-time migration baseline',
166
+ classification: 'user-owned',
167
+ originalHash: null,
168
+ currentHash: null,
169
+ });
170
+ continue;
171
+ }
172
+ const artifact = classifyArtifact(relPath);
173
+ if (artifact.classification === 'managed-pristine' || artifact.classification === 'managed-modified') {
174
+ actions.push({
175
+ type: 'record-baseline',
176
+ relPath,
177
+ reason: 'existing manifest-managed file included in first-time migration baseline',
178
+ });
179
+ continue;
180
+ }
181
+ const currentHash = artifact.currentHash ?? null;
182
+ if (isKnownGeneratedAgentPath(relPath, runtime)) {
183
+ actions.push({
184
+ type: 'record-baseline',
185
+ relPath,
186
+ reason: 'known installer-generated agent included in first-time migration baseline',
187
+ classification: artifact.classification,
188
+ originalHash: artifact.originalHash ?? null,
189
+ currentHash,
190
+ });
191
+ continue;
192
+ }
193
+ if (isStaleGsdLookingPath(relPath)) {
194
+ actions.push({
195
+ type: 'prompt-user',
196
+ relPath,
197
+ reason: 'GSD-looking file is not proven manifest-managed and needs explicit user choice',
198
+ classification: 'stale-gsd-looking',
199
+ originalHash: artifact.originalHash ?? null,
200
+ currentHash,
201
+ prompt: 'Choose whether to remove this stale-looking GSD artifact or keep it as user-owned.',
202
+ choices: ['keep', 'remove'],
203
+ });
204
+ continue;
205
+ }
206
+ actions.push({
207
+ type: 'baseline-preserve-user',
208
+ relPath,
209
+ reason: 'unknown install-surface file preserved by first-time migration baseline',
210
+ classification: artifact.classification,
211
+ originalHash: artifact.originalHash ?? null,
212
+ currentHash,
213
+ });
214
+ }
215
+ return actions.sort((left, right) => baselineActionRank(left) - baselineActionRank(right) || left.relPath.localeCompare(right.relPath));
216
+ },
217
+ };
218
+ module.exports = migration;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /**
3
+ * Installer migration: remove manifest-managed legacy orphan hook files
4
+ * (ADR-457 build-at-publish: the hand-written
5
+ * bin/lib/installer-migrations/001-legacy-orphan-files.cjs collapsed to a
6
+ * TypeScript source of truth). Behaviour is preserved byte-for-behaviour from
7
+ * the prior hand-written .cjs; only types are added.
8
+ */
9
+ const LEGACY_ORPHAN_FILES = [
10
+ 'hooks/gsd-notify.sh',
11
+ 'hooks/statusline.js',
12
+ ];
13
+ const migration = {
14
+ id: '2026-05-11-legacy-orphan-files',
15
+ title: 'Remove manifest-managed legacy orphan hook files',
16
+ description: 'Remove legacy orphan hook files that are still manifest-managed.',
17
+ introducedIn: '1.50.0',
18
+ scopes: ['global', 'local'],
19
+ destructive: true,
20
+ // Retired generated hook files are removed only with manifest-managed
21
+ // evidence. This follows docs/installer-migrations.md#ownership and avoids
22
+ // relying on whether a runtime currently registers host hook config in the
23
+ // runtime contract registry.
24
+ plan: (ctx) => {
25
+ const actions = [];
26
+ for (const relPath of LEGACY_ORPHAN_FILES) {
27
+ const artifact = ctx.classifyArtifact(relPath);
28
+ if (artifact.classification === 'managed-pristine') {
29
+ actions.push({
30
+ type: 'remove-managed',
31
+ relPath,
32
+ reason: 'legacy orphan hook file retired by installer migration',
33
+ ownershipEvidence: 'legacy hook path is manifest-managed in gsd-file-manifest.json',
34
+ });
35
+ }
36
+ else if (artifact.classification === 'managed-modified') {
37
+ actions.push({
38
+ type: 'backup-and-remove',
39
+ relPath,
40
+ reason: 'legacy orphan hook file retired by installer migration',
41
+ ownershipEvidence: 'legacy hook path is manifest-managed in gsd-file-manifest.json',
42
+ });
43
+ }
44
+ }
45
+ return actions;
46
+ },
47
+ };
48
+ module.exports = migration;
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+ /**
3
+ * Installer migration: remove legacy Codex hooks.json GSD hook registrations.
4
+ *
5
+ * ADR-457 build-at-publish: the hand-written
6
+ * bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs collapsed to a
7
+ * TypeScript source of truth. Behaviour is preserved byte-for-behaviour from
8
+ * the prior hand-written .cjs; only types are added.
9
+ */
10
+ const shell_command_projection_cjs_1 = require("../shell-command-projection.cjs");
11
+ function isStructurallyEmpty(value) {
12
+ if (value === null || value === undefined)
13
+ return true;
14
+ if (Array.isArray(value))
15
+ return value.length === 0;
16
+ if (typeof value !== 'object')
17
+ return false;
18
+ for (const _key in value)
19
+ return false;
20
+ return true;
21
+ }
22
+ function isManagedCodexHookCommand(command, configDir) {
23
+ return (0, shell_command_projection_cjs_1.isManagedHookCommand)(command, {
24
+ surface: 'codex-hooks-json',
25
+ includeLegacyAliases: true,
26
+ configDir,
27
+ });
28
+ }
29
+ function pruneLegacyCodexHooksJsonValue(value, configDir) {
30
+ if (Array.isArray(value)) {
31
+ let changed = false;
32
+ const next = [];
33
+ for (const item of value) {
34
+ const pruned = pruneLegacyCodexHooksJsonValue(item, configDir);
35
+ if (pruned.changed)
36
+ changed = true;
37
+ if (pruned.changed && isStructurallyEmpty(pruned.value))
38
+ changed = true;
39
+ else
40
+ next.push(pruned.value);
41
+ }
42
+ return { value: next, changed };
43
+ }
44
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
45
+ const valueObj = value;
46
+ const command = valueObj['command'];
47
+ if (isManagedCodexHookCommand(command, configDir)) {
48
+ return { value: null, changed: true };
49
+ }
50
+ let changed = false;
51
+ const next = {};
52
+ for (const [key, child] of Object.entries(valueObj)) {
53
+ const pruned = pruneLegacyCodexHooksJsonValue(child, configDir);
54
+ if (pruned.changed)
55
+ changed = true;
56
+ if (pruned.changed && isStructurallyEmpty(pruned.value))
57
+ changed = true;
58
+ else
59
+ next[key] = pruned.value;
60
+ }
61
+ return { value: next, changed };
62
+ }
63
+ return { value, changed: false };
64
+ }
65
+ const migration = {
66
+ id: '2026-05-11-codex-legacy-hooks-json',
67
+ title: 'Remove legacy Codex hooks.json GSD hook registrations',
68
+ description: 'Remove legacy Codex hooks.json GSD hook registrations after config.toml migration.',
69
+ introducedIn: '1.50.0',
70
+ runtimes: ['codex'],
71
+ scopes: ['global', 'local'],
72
+ destructive: true,
73
+ runtimeContract: 'docs/installer-migrations.md#runtime-configuration-contract-registry Codex row',
74
+ plan: (ctx) => {
75
+ const { configDir } = ctx;
76
+ const hooksJson = ctx.readJson('hooks.json');
77
+ if (!hooksJson.exists || hooksJson.error)
78
+ return [];
79
+ const pruned = pruneLegacyCodexHooksJsonValue(hooksJson.value, configDir);
80
+ if (!pruned.changed)
81
+ return [];
82
+ return [
83
+ {
84
+ type: 'rewrite-json',
85
+ relPath: 'hooks.json',
86
+ value: pruned.value,
87
+ deleteIfEmpty: true,
88
+ reason: 'legacy Codex hooks.json GSD registration retired by installer migration',
89
+ ownershipEvidence: 'pruned command matches generated GSD hook command under the install hooks directory',
90
+ },
91
+ ];
92
+ },
93
+ };
94
+ module.exports = migration;
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+ /**
3
+ * Installer migration 003: remove stale legacy get-shit-done/ runtime directory // gsd-allow-legacy-name
4
+ * files after the rename to gsd-core/ (#604).
5
+ *
6
+ * Background: the GSD runtime config subdirectory was renamed from
7
+ * get-shit-done/ to gsd-core/ in #604. On upgrade, both directories can exist // gsd-allow-legacy-name
8
+ * simultaneously. This migration removes prior-manifest-managed files from the
9
+ * legacy get-shit-done/ directory during install. Migrations run BEFORE the new // gsd-allow-legacy-name
10
+ * runtime is materialized, so gsd-core/ will not yet exist on the first upgrade
11
+ * run — the migration must not gate on its presence. If the install fails after
12
+ * migrations apply, the framework rolls back by restoring files from rollback
13
+ * storage (copied before deletion), so removing legacy files pre-materialization
14
+ * is safe.
15
+ *
16
+ * Per-file approach: the migration framework has no recursive directory-removal
17
+ * primitive — all actions operate on individual files identified by relPath. As
18
+ * a result, any empty subdirectory shells left under the legacy tree after all
19
+ * files are removed will remain on disk. Users can remove them manually if
20
+ * desired. This is a known, intentional limitation of the ADR-0008 design: the
21
+ * framework never removes directories, only files.
22
+ *
23
+ * User file preservation: files classified 'unknown' (not in the prior manifest)
24
+ * receive a 'baseline-preserve-user' action and are explicitly NOT removed.
25
+ */
26
+ var __importDefault = (this && this.__importDefault) || function (mod) {
27
+ return (mod && mod.__esModule) ? mod : { "default": mod };
28
+ };
29
+ const node_fs_1 = __importDefault(require("node:fs"));
30
+ const node_path_1 = __importDefault(require("node:path"));
31
+ function walkLegacyFiles(root, relDir, baseResolved, results) {
32
+ const dir = node_path_1.default.join(root, relDir);
33
+ const entries = node_fs_1.default.readdirSync(dir, { withFileTypes: true });
34
+ for (const entry of entries) {
35
+ // Do not follow symlinks — skip them entirely to avoid out-of-tree traversal.
36
+ if (entry.isSymbolicLink())
37
+ continue; // gsd-allow-legacy-name (entry under legacy get-shit-done/ dir)
38
+ const relPath = node_path_1.default.posix.join(relDir, entry.name);
39
+ // Bounds check: ensure the resolved path stays under configDir.
40
+ const resolved = node_path_1.default.resolve(root, relPath);
41
+ if (resolved !== baseResolved && !resolved.startsWith(baseResolved + node_path_1.default.sep))
42
+ continue;
43
+ if (entry.isDirectory()) {
44
+ walkLegacyFiles(root, relPath, baseResolved, results);
45
+ }
46
+ else if (entry.isFile()) {
47
+ results.push(relPath);
48
+ }
49
+ }
50
+ }
51
+ const REASON = 'legacy runtime directory renamed to gsd-core (#604)';
52
+ const migration = {
53
+ id: '2026-06-02-rename-get-shit-done-to-gsd-core', // gsd-allow-legacy-name
54
+ title: 'Remove stale legacy get-shit-done/ runtime directory files (#604)', // gsd-allow-legacy-name
55
+ description: 'After the config dir rename from get-shit-done/ to gsd-core/ (#604), remove prior-manifest-managed files ' + // gsd-allow-legacy-name
56
+ 'from the stale legacy directory during install (framework rollback restores them if install fails). User-added files are preserved.',
57
+ introducedIn: '1.2.0',
58
+ scopes: ['global', 'local'],
59
+ destructive: true,
60
+ plan(ctx) {
61
+ const legacyRoot = node_path_1.default.join(ctx.configDir, 'get-shit-done'); // gsd-allow-legacy-name
62
+ // Idempotency: if the legacy directory doesn't exist, nothing to do.
63
+ if (!node_fs_1.default.existsSync(legacyRoot))
64
+ return [];
65
+ // Safety: if the legacy root itself is a symlink to an out-of-tree location,
66
+ // do not process it — walking a symlinked dir could emit removes outside configDir.
67
+ if (node_fs_1.default.lstatSync(legacyRoot).isSymbolicLink())
68
+ return []; // gsd-allow-legacy-name
69
+ const baseResolved = node_path_1.default.resolve(ctx.configDir);
70
+ const relPaths = [];
71
+ walkLegacyFiles(ctx.configDir, 'get-shit-done', baseResolved, relPaths); // gsd-allow-legacy-name
72
+ const actions = [];
73
+ for (const relPath of relPaths) {
74
+ // Bounds-check each relPath before emitting any action.
75
+ const resolved = node_path_1.default.resolve(ctx.configDir, relPath);
76
+ if (resolved !== baseResolved && !resolved.startsWith(baseResolved + node_path_1.default.sep))
77
+ continue;
78
+ const { classification } = ctx.classifyArtifact(relPath);
79
+ if (classification === 'managed-pristine') {
80
+ actions.push({
81
+ type: 'remove-managed',
82
+ relPath,
83
+ reason: REASON,
84
+ ownershipEvidence: 'present in prior install manifest as a managed GSD runtime file',
85
+ });
86
+ }
87
+ else if (classification === 'managed-modified') {
88
+ actions.push({
89
+ type: 'backup-and-remove',
90
+ relPath,
91
+ reason: REASON,
92
+ ownershipEvidence: 'managed GSD runtime file, locally modified; backed up before removal',
93
+ });
94
+ }
95
+ else if (classification === 'unknown') {
96
+ actions.push({
97
+ type: 'baseline-preserve-user',
98
+ relPath,
99
+ reason: 'user-added file under legacy runtime dir; preserved per ADR-0008',
100
+ ownershipEvidence: 'file is not present in the prior install manifest; treated as user-owned',
101
+ });
102
+ }
103
+ // 'managed-missing', 'missing', and any other classification: skip (no action)
104
+ }
105
+ return actions;
106
+ },
107
+ };
108
+ module.exports = migration;