@opengsd/gsd-core 1.3.0-rc.1 → 1.3.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 (521) hide show
  1. package/README.ja-JP.md +44 -790
  2. package/README.ko-KR.md +41 -778
  3. package/README.md +39 -180
  4. package/README.pt-BR.md +45 -413
  5. package/README.zh-CN.md +43 -761
  6. package/agents/gsd-ai-researcher.md +1 -1
  7. package/agents/gsd-debugger.md +8 -8
  8. package/agents/gsd-domain-researcher.md +14 -1
  9. package/agents/gsd-eval-auditor.md +1 -1
  10. package/agents/gsd-eval-planner.md +1 -1
  11. package/agents/gsd-executor.md +21 -8
  12. package/agents/gsd-framework-selector.md +1 -1
  13. package/agents/gsd-intel-updater.md +4 -4
  14. package/agents/gsd-phase-researcher.md +18 -5
  15. package/agents/gsd-plan-checker.md +3 -3
  16. package/agents/gsd-planner.md +36 -23
  17. package/agents/gsd-project-researcher.md +13 -0
  18. package/agents/gsd-research-synthesizer.md +6 -2
  19. package/agents/gsd-roadmapper.md +6 -6
  20. package/agents/gsd-ui-researcher.md +15 -2
  21. package/agents/gsd-user-profiler.md +2 -2
  22. package/agents/gsd-verifier.md +7 -7
  23. package/bin/install.js +169 -59
  24. package/commands/gsd/add-tests.md +1 -1
  25. package/commands/gsd/ai-integration-phase.md +3 -3
  26. package/commands/gsd/audit-fix.md +1 -1
  27. package/commands/gsd/audit-milestone.md +1 -1
  28. package/commands/gsd/audit-uat.md +1 -1
  29. package/commands/gsd/autonomous.md +2 -2
  30. package/commands/gsd/capture.md +6 -6
  31. package/commands/gsd/cleanup.md +1 -1
  32. package/commands/gsd/code-review.md +1 -1
  33. package/commands/gsd/complete-milestone.md +2 -2
  34. package/commands/gsd/config.md +3 -3
  35. package/commands/gsd/debug.md +1 -1
  36. package/commands/gsd/discuss-phase.md +5 -4
  37. package/commands/gsd/docs-update.md +1 -1
  38. package/commands/gsd/eval-review.md +2 -2
  39. package/commands/gsd/execute-phase.md +2 -2
  40. package/commands/gsd/explore.md +1 -1
  41. package/commands/gsd/extract-learnings.md +2 -2
  42. package/commands/gsd/fast.md +1 -1
  43. package/commands/gsd/forensics.md +1 -1
  44. package/commands/gsd/graphify.md +9 -9
  45. package/commands/gsd/health.md +1 -1
  46. package/commands/gsd/help.md +2 -2
  47. package/commands/gsd/import.md +5 -5
  48. package/commands/gsd/inbox.md +1 -1
  49. package/commands/gsd/ingest-docs.md +4 -4
  50. package/commands/gsd/manager.md +3 -3
  51. package/commands/gsd/map-codebase.md +1 -1
  52. package/commands/gsd/milestone-summary.md +1 -1
  53. package/commands/gsd/mvp-phase.md +4 -4
  54. package/commands/gsd/new-milestone.md +5 -5
  55. package/commands/gsd/new-project.md +5 -5
  56. package/commands/gsd/pause-work.md +2 -2
  57. package/commands/gsd/phase.md +4 -4
  58. package/commands/gsd/plan-phase.md +2 -2
  59. package/commands/gsd/plan-review-convergence.md +4 -4
  60. package/commands/gsd/pr-branch.md +1 -1
  61. package/commands/gsd/profile-user.md +2 -2
  62. package/commands/gsd/progress.md +4 -4
  63. package/commands/gsd/quick.md +1 -1
  64. package/commands/gsd/resume-work.md +1 -1
  65. package/commands/gsd/review.md +1 -1
  66. package/commands/gsd/secure-phase.md +1 -1
  67. package/commands/gsd/settings.md +1 -1
  68. package/commands/gsd/ship.md +2 -2
  69. package/commands/gsd/sketch.md +7 -7
  70. package/commands/gsd/spec-phase.md +2 -2
  71. package/commands/gsd/spike.md +3 -3
  72. package/commands/gsd/stats.md +1 -1
  73. package/commands/gsd/surface.md +4 -4
  74. package/commands/gsd/thread.md +1 -1
  75. package/commands/gsd/ui-phase.md +2 -2
  76. package/commands/gsd/ui-review.md +2 -2
  77. package/commands/gsd/ultraplan-phase.md +2 -2
  78. package/commands/gsd/undo.md +3 -3
  79. package/commands/gsd/update.md +3 -3
  80. package/commands/gsd/validate-phase.md +1 -1
  81. package/commands/gsd/verify-work.md +2 -2
  82. package/commands/gsd/workspace.md +4 -4
  83. package/{get-shit-done → gsd-core}/bin/check-latest-version.cjs +1 -1
  84. package/{get-shit-done → gsd-core}/bin/gsd-tools.cjs +13 -3
  85. package/gsd-core/bin/lib/active-workstream-store.cjs +291 -0
  86. package/gsd-core/bin/lib/adr-parser.cjs +399 -0
  87. package/gsd-core/bin/lib/agent-command-router.cjs +68 -0
  88. package/gsd-core/bin/lib/artifacts.cjs +51 -0
  89. package/gsd-core/bin/lib/audit.cjs +743 -0
  90. package/gsd-core/bin/lib/check-command-router.cjs +342 -0
  91. package/gsd-core/bin/lib/cjs-command-router-adapter.cjs +81 -0
  92. package/gsd-core/bin/lib/clock.cjs +95 -0
  93. package/gsd-core/bin/lib/clusters.cjs +128 -0
  94. package/gsd-core/bin/lib/code-review-flags.cjs +59 -0
  95. package/gsd-core/bin/lib/command-aliases.cjs +809 -0
  96. package/gsd-core/bin/lib/command-arg-projection.cjs +55 -0
  97. package/gsd-core/bin/lib/command-routing-hub.cjs +300 -0
  98. package/gsd-core/bin/lib/commands.cjs +1202 -0
  99. package/gsd-core/bin/lib/config-schema.cjs +29 -0
  100. package/{get-shit-done → gsd-core}/bin/lib/config-types.cjs +1 -1
  101. package/gsd-core/bin/lib/config.cjs +714 -0
  102. package/{get-shit-done → gsd-core}/bin/lib/configuration.cjs +76 -85
  103. package/gsd-core/bin/lib/context-utilization.cjs +48 -0
  104. package/gsd-core/bin/lib/core.cjs +2007 -0
  105. package/{get-shit-done → gsd-core}/bin/lib/decisions.cjs +9 -7
  106. package/gsd-core/bin/lib/docs.cjs +252 -0
  107. package/gsd-core/bin/lib/drift.cjs +364 -0
  108. package/gsd-core/bin/lib/fallow-runner.cjs +115 -0
  109. package/gsd-core/bin/lib/frontmatter.cjs +442 -0
  110. package/gsd-core/bin/lib/gap-checker.cjs +257 -0
  111. package/gsd-core/bin/lib/graphify.cjs +496 -0
  112. package/gsd-core/bin/lib/gsd2-import.cjs +456 -0
  113. package/gsd-core/bin/lib/init-command-router.cjs +62 -0
  114. package/gsd-core/bin/lib/init.cjs +1799 -0
  115. package/gsd-core/bin/lib/install-profiles.cjs +526 -0
  116. package/gsd-core/bin/lib/installer-migration-authoring.cjs +122 -0
  117. package/gsd-core/bin/lib/installer-migration-report.cjs +347 -0
  118. package/gsd-core/bin/lib/installer-migrations/000-first-time-baseline.cjs +218 -0
  119. package/gsd-core/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +48 -0
  120. package/gsd-core/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +94 -0
  121. package/gsd-core/bin/lib/installer-migrations/003-rename-get-shit-done-to-gsd-core.cjs +108 -0
  122. package/gsd-core/bin/lib/installer-migrations.cjs +823 -0
  123. package/gsd-core/bin/lib/intel.cjs +607 -0
  124. package/gsd-core/bin/lib/learnings.cjs +270 -0
  125. package/gsd-core/bin/lib/legacy-cleanup.cjs +253 -0
  126. package/gsd-core/bin/lib/milestone.cjs +373 -0
  127. package/gsd-core/bin/lib/model-catalog.cjs +154 -0
  128. package/gsd-core/bin/lib/model-profiles.cjs +24 -0
  129. package/gsd-core/bin/lib/observability/event.cjs +51 -0
  130. package/gsd-core/bin/lib/observability/logger.cjs +146 -0
  131. package/{get-shit-done → gsd-core}/bin/lib/observability/redaction.cjs +19 -21
  132. package/{get-shit-done → gsd-core}/bin/lib/package-identity.cjs +5 -1
  133. package/gsd-core/bin/lib/phase-command-router.cjs +189 -0
  134. package/gsd-core/bin/lib/phase-lifecycle.cjs +74 -0
  135. package/gsd-core/bin/lib/phase.cjs +1307 -0
  136. package/gsd-core/bin/lib/phases-command-router.cjs +43 -0
  137. package/{get-shit-done → gsd-core}/bin/lib/plan-scan.cjs +18 -24
  138. package/gsd-core/bin/lib/planning-workspace.cjs +245 -0
  139. package/gsd-core/bin/lib/profile-output.cjs +1120 -0
  140. package/gsd-core/bin/lib/profile-pipeline.cjs +517 -0
  141. package/gsd-core/bin/lib/project-root.cjs +119 -0
  142. package/gsd-core/bin/lib/prompt-budget.cjs +305 -0
  143. package/gsd-core/bin/lib/review-reviewer-selection.cjs +121 -0
  144. package/gsd-core/bin/lib/roadmap-command-router.cjs +166 -0
  145. package/gsd-core/bin/lib/roadmap-upgrade.cjs +491 -0
  146. package/gsd-core/bin/lib/roadmap.cjs +600 -0
  147. package/gsd-core/bin/lib/runtime-artifact-layout.cjs +254 -0
  148. package/gsd-core/bin/lib/runtime-homes.cjs +169 -0
  149. package/gsd-core/bin/lib/runtime-name-policy.cjs +96 -0
  150. package/gsd-core/bin/lib/runtime-slash.cjs +119 -0
  151. package/{get-shit-done → gsd-core}/bin/lib/schema-detect.cjs +20 -26
  152. package/gsd-core/bin/lib/secrets.cjs +34 -0
  153. package/gsd-core/bin/lib/security.cjs +407 -0
  154. package/{get-shit-done → gsd-core}/bin/lib/semver-compare.cjs +1 -1
  155. package/gsd-core/bin/lib/shell-command-projection.cjs +524 -0
  156. package/gsd-core/bin/lib/state-command-router.cjs +160 -0
  157. package/{get-shit-done → gsd-core}/bin/lib/state-document.cjs +78 -78
  158. package/gsd-core/bin/lib/state.cjs +2010 -0
  159. package/gsd-core/bin/lib/surface.cjs +406 -0
  160. package/gsd-core/bin/lib/task-command-router.cjs +85 -0
  161. package/gsd-core/bin/lib/template.cjs +237 -0
  162. package/gsd-core/bin/lib/uat.cjs +297 -0
  163. package/gsd-core/bin/lib/ui-safety-gate.cjs +98 -0
  164. package/gsd-core/bin/lib/update-context.cjs +218 -0
  165. package/gsd-core/bin/lib/validate-command-router.cjs +91 -0
  166. package/gsd-core/bin/lib/validate.cjs +112 -0
  167. package/gsd-core/bin/lib/verify-command-router.cjs +44 -0
  168. package/gsd-core/bin/lib/verify.cjs +1451 -0
  169. package/{get-shit-done → gsd-core}/bin/lib/workstream-inventory-builder.cjs +19 -12
  170. package/gsd-core/bin/lib/workstream-inventory.cjs +147 -0
  171. package/{get-shit-done → gsd-core}/bin/lib/workstream-name-policy.cjs +28 -31
  172. package/gsd-core/bin/lib/workstream.cjs +380 -0
  173. package/gsd-core/bin/lib/worktree-safety.cjs +912 -0
  174. package/{get-shit-done → gsd-core}/bin/shared/config-schema.manifest.json +5 -0
  175. package/{get-shit-done → gsd-core}/references/artifact-types.md +1 -1
  176. package/{get-shit-done → gsd-core}/references/few-shot-examples/plan-checker.md +2 -2
  177. package/{get-shit-done → gsd-core}/references/few-shot-examples/verifier.md +12 -12
  178. package/{get-shit-done → gsd-core}/references/model-profile-resolution.md +1 -1
  179. package/{get-shit-done → gsd-core}/references/mvp-concepts.md +1 -1
  180. package/{get-shit-done → gsd-core}/references/planner-graphify-auto-update.md +2 -2
  181. package/{get-shit-done → gsd-core}/references/planner-mvp-mode.md +1 -1
  182. package/{get-shit-done → gsd-core}/references/verification-patterns.md +1 -1
  183. package/gsd-core/references/worktree-branch-check.md +38 -0
  184. package/{get-shit-done → gsd-core}/references/worktree-path-safety.md +4 -26
  185. package/{get-shit-done → gsd-core}/templates/README.md +2 -2
  186. package/{get-shit-done → gsd-core}/templates/codebase/structure.md +10 -10
  187. package/{get-shit-done → gsd-core}/templates/copilot-instructions.md +1 -1
  188. package/{get-shit-done → gsd-core}/templates/phase-prompt.md +10 -10
  189. package/gsd-core/workflows/_runtime-launcher.snippet.sh +1 -0
  190. package/{get-shit-done → gsd-core}/workflows/add-backlog.md +1 -1
  191. package/{get-shit-done → gsd-core}/workflows/add-phase.md +1 -1
  192. package/{get-shit-done → gsd-core}/workflows/add-tests.md +1 -1
  193. package/{get-shit-done → gsd-core}/workflows/add-todo.md +1 -1
  194. package/{get-shit-done → gsd-core}/workflows/ai-integration-phase.md +4 -4
  195. package/{get-shit-done → gsd-core}/workflows/audit-fix.md +1 -1
  196. package/{get-shit-done → gsd-core}/workflows/audit-milestone.md +1 -1
  197. package/{get-shit-done → gsd-core}/workflows/audit-uat.md +1 -1
  198. package/{get-shit-done → gsd-core}/workflows/autonomous.md +4 -4
  199. package/{get-shit-done → gsd-core}/workflows/check-todos.md +1 -1
  200. package/{get-shit-done → gsd-core}/workflows/cleanup.md +1 -1
  201. package/{get-shit-done → gsd-core}/workflows/code-review-fix.md +1 -1
  202. package/{get-shit-done → gsd-core}/workflows/code-review.md +4 -4
  203. package/{get-shit-done → gsd-core}/workflows/complete-milestone.md +2 -2
  204. package/{get-shit-done → gsd-core}/workflows/debug.md +1 -1
  205. package/{get-shit-done → gsd-core}/workflows/diagnose-issues.md +4 -2
  206. package/{get-shit-done → gsd-core}/workflows/discovery-phase.md +5 -5
  207. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/advisor.md +4 -4
  208. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/auto.md +1 -1
  209. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/chain.md +1 -1
  210. package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/power.md +1 -1
  211. package/{get-shit-done → gsd-core}/workflows/discuss-phase-assumptions.md +2 -2
  212. package/{get-shit-done → gsd-core}/workflows/discuss-phase.md +6 -6
  213. package/{get-shit-done → gsd-core}/workflows/do.md +1 -1
  214. package/{get-shit-done → gsd-core}/workflows/docs-update.md +1 -1
  215. package/{get-shit-done → gsd-core}/workflows/edit-phase.md +1 -1
  216. package/{get-shit-done → gsd-core}/workflows/eval-review.md +2 -2
  217. package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/codebase-drift-gate.md +15 -2
  218. package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/post-merge-gate.md +1 -1
  219. package/{get-shit-done → gsd-core}/workflows/execute-phase.md +68 -46
  220. package/{get-shit-done → gsd-core}/workflows/execute-plan.md +8 -8
  221. package/{get-shit-done → gsd-core}/workflows/explore.md +3 -3
  222. package/{get-shit-done → gsd-core}/workflows/extract-learnings.md +1 -1
  223. package/{get-shit-done → gsd-core}/workflows/forensics.md +1 -1
  224. package/{get-shit-done → gsd-core}/workflows/graduation.md +1 -1
  225. package/{get-shit-done → gsd-core}/workflows/health.md +1 -1
  226. package/{get-shit-done → gsd-core}/workflows/help/modes/full.md +1 -1
  227. package/{get-shit-done → gsd-core}/workflows/import.md +1 -1
  228. package/{get-shit-done → gsd-core}/workflows/ingest-docs.md +3 -3
  229. package/{get-shit-done → gsd-core}/workflows/insert-phase.md +1 -1
  230. package/{get-shit-done → gsd-core}/workflows/list-workspaces.md +1 -1
  231. package/{get-shit-done → gsd-core}/workflows/manager.md +1 -1
  232. package/{get-shit-done → gsd-core}/workflows/map-codebase.md +1 -1
  233. package/{get-shit-done → gsd-core}/workflows/milestone-summary.md +1 -1
  234. package/{get-shit-done → gsd-core}/workflows/mvp-phase.md +7 -7
  235. package/{get-shit-done → gsd-core}/workflows/new-milestone.md +3 -3
  236. package/{get-shit-done → gsd-core}/workflows/new-project.md +6 -6
  237. package/{get-shit-done → gsd-core}/workflows/new-workspace.md +1 -1
  238. package/{get-shit-done → gsd-core}/workflows/next.md +1 -1
  239. package/{get-shit-done → gsd-core}/workflows/pause-work.md +1 -1
  240. package/{get-shit-done → gsd-core}/workflows/plan-milestone-gaps.md +1 -1
  241. package/{get-shit-done → gsd-core}/workflows/plan-phase.md +15 -15
  242. package/{get-shit-done → gsd-core}/workflows/plan-review-convergence.md +7 -7
  243. package/{get-shit-done → gsd-core}/workflows/plant-seed.md +1 -1
  244. package/{get-shit-done → gsd-core}/workflows/profile-user.md +11 -11
  245. package/{get-shit-done → gsd-core}/workflows/progress.md +1 -1
  246. package/{get-shit-done → gsd-core}/workflows/quick.md +2 -26
  247. package/{get-shit-done → gsd-core}/workflows/reapply-patches.md +2 -2
  248. package/{get-shit-done → gsd-core}/workflows/remove-phase.md +1 -1
  249. package/{get-shit-done → gsd-core}/workflows/remove-workspace.md +1 -1
  250. package/{get-shit-done → gsd-core}/workflows/resume-project.md +2 -2
  251. package/{get-shit-done → gsd-core}/workflows/review.md +1 -1
  252. package/{get-shit-done → gsd-core}/workflows/scan.md +1 -1
  253. package/{get-shit-done → gsd-core}/workflows/secure-phase.md +3 -3
  254. package/{get-shit-done → gsd-core}/workflows/settings-advanced.md +1 -1
  255. package/{get-shit-done → gsd-core}/workflows/settings-integrations.md +2 -2
  256. package/{get-shit-done → gsd-core}/workflows/settings.md +1 -1
  257. package/{get-shit-done → gsd-core}/workflows/ship.md +56 -4
  258. package/{get-shit-done → gsd-core}/workflows/sketch-wrap-up.md +1 -1
  259. package/{get-shit-done → gsd-core}/workflows/sketch.md +5 -5
  260. package/{get-shit-done → gsd-core}/workflows/spec-phase.md +2 -2
  261. package/{get-shit-done → gsd-core}/workflows/spike-wrap-up.md +1 -1
  262. package/{get-shit-done → gsd-core}/workflows/spike.md +1 -1
  263. package/{get-shit-done → gsd-core}/workflows/stats.md +1 -1
  264. package/{get-shit-done → gsd-core}/workflows/sync-skills.md +3 -3
  265. package/{get-shit-done → gsd-core}/workflows/thread.md +1 -1
  266. package/{get-shit-done → gsd-core}/workflows/transition.md +2 -2
  267. package/{get-shit-done → gsd-core}/workflows/ui-phase.md +3 -3
  268. package/{get-shit-done → gsd-core}/workflows/ui-review.md +2 -2
  269. package/{get-shit-done → gsd-core}/workflows/ultraplan-phase.md +1 -1
  270. package/{get-shit-done → gsd-core}/workflows/undo.md +2 -2
  271. package/{get-shit-done → gsd-core}/workflows/update.md +41 -16
  272. package/{get-shit-done → gsd-core}/workflows/validate-phase.md +3 -3
  273. package/{get-shit-done → gsd-core}/workflows/verify-phase.md +4 -4
  274. package/{get-shit-done → gsd-core}/workflows/verify-work.md +5 -5
  275. package/hooks/dist/gsd-check-update-worker.js +16 -3
  276. package/hooks/dist/gsd-check-update.js +7 -5
  277. package/hooks/dist/gsd-context-monitor.js +2 -2
  278. package/hooks/dist/gsd-statusline.js +39 -21
  279. package/hooks/dist/gsd-update-banner.js +6 -2
  280. package/hooks/dist/managed-hooks-registry.cjs +35 -0
  281. package/hooks/gsd-check-update-worker.js +16 -3
  282. package/hooks/gsd-check-update.js +7 -5
  283. package/hooks/gsd-context-monitor.js +2 -2
  284. package/hooks/gsd-statusline.js +39 -21
  285. package/hooks/gsd-update-banner.js +6 -2
  286. package/package.json +9 -6
  287. package/scripts/affected-tests-lib.cjs +1 -1
  288. package/scripts/base64-scan.sh +12 -0
  289. package/scripts/build-hooks.js +4 -1
  290. package/scripts/changeset/cli.cjs +2 -2
  291. package/scripts/changeset/github-release-notes.cjs +1 -1
  292. package/scripts/changeset/lint.cjs +1 -1
  293. package/scripts/check-alias-drift.cjs +8 -8
  294. package/scripts/check-env.cjs +5 -1
  295. package/scripts/ci-test-scope.cjs +25 -10
  296. package/scripts/command-contract-helpers.cjs +1 -1
  297. package/scripts/fix-slash-commands.cjs +5 -5
  298. package/scripts/gen-inventory-manifest.cjs +3 -3
  299. package/scripts/generate-package-identity.cjs +28 -7
  300. package/scripts/lib/allowlist-ratchet.cjs +136 -0
  301. package/scripts/lint-command-contract.cjs +1 -1
  302. package/scripts/lint-legacy-dir-name.cjs +156 -0
  303. package/scripts/lint-package-identity-drift.cjs +8 -8
  304. package/scripts/lint-pr-check-project-dir.cjs +0 -1
  305. package/scripts/lint-shell-command-projection-drift.cjs +1 -1
  306. package/scripts/lint-skill-deps.cjs +1 -1
  307. package/scripts/lint-test-file-count.allowlist.json +129 -32
  308. package/scripts/lint-test-file-count.cjs +85 -30
  309. package/scripts/mutation-matrix.cjs +219 -0
  310. package/scripts/prompt-injection-scan.sh +5 -1
  311. package/scripts/release-notes/format-github-release-notes.cjs +256 -0
  312. package/scripts/release-tarball-smoke.cjs +9 -9
  313. package/scripts/run-tests.cjs +11 -3
  314. package/scripts/strip-prose-atrefs.cjs +2 -2
  315. package/scripts/sync-runtime-launcher.cjs +2 -2
  316. package/scripts/verify-npm-publish.cjs +252 -0
  317. package/get-shit-done/bin/lib/active-workstream-store.cjs +0 -302
  318. package/get-shit-done/bin/lib/adr-parser.cjs +0 -394
  319. package/get-shit-done/bin/lib/agent-command-router.cjs +0 -65
  320. package/get-shit-done/bin/lib/artifacts.cjs +0 -53
  321. package/get-shit-done/bin/lib/audit.cjs +0 -755
  322. package/get-shit-done/bin/lib/check-command-router.cjs +0 -333
  323. package/get-shit-done/bin/lib/cjs-command-router-adapter.cjs +0 -118
  324. package/get-shit-done/bin/lib/clock.cjs +0 -96
  325. package/get-shit-done/bin/lib/clusters.cjs +0 -135
  326. package/get-shit-done/bin/lib/code-review-flags.cjs +0 -74
  327. package/get-shit-done/bin/lib/command-aliases.cjs +0 -831
  328. package/get-shit-done/bin/lib/command-arg-projection.cjs +0 -62
  329. package/get-shit-done/bin/lib/command-routing-hub.cjs +0 -388
  330. package/get-shit-done/bin/lib/commands.cjs +0 -1292
  331. package/get-shit-done/bin/lib/config-schema.cjs +0 -31
  332. package/get-shit-done/bin/lib/config.cjs +0 -728
  333. package/get-shit-done/bin/lib/context-utilization.cjs +0 -47
  334. package/get-shit-done/bin/lib/core.cjs +0 -2513
  335. package/get-shit-done/bin/lib/docs.cjs +0 -270
  336. package/get-shit-done/bin/lib/drift.cjs +0 -388
  337. package/get-shit-done/bin/lib/fallow-runner.cjs +0 -109
  338. package/get-shit-done/bin/lib/frontmatter.cjs +0 -389
  339. package/get-shit-done/bin/lib/gap-checker.cjs +0 -254
  340. package/get-shit-done/bin/lib/graphify.cjs +0 -592
  341. package/get-shit-done/bin/lib/gsd2-import.cjs +0 -514
  342. package/get-shit-done/bin/lib/init-command-router.cjs +0 -58
  343. package/get-shit-done/bin/lib/init.cjs +0 -2112
  344. package/get-shit-done/bin/lib/install-profiles.cjs +0 -603
  345. package/get-shit-done/bin/lib/installer-migration-authoring.cjs +0 -117
  346. package/get-shit-done/bin/lib/installer-migration-report.cjs +0 -355
  347. package/get-shit-done/bin/lib/installer-migrations/000-first-time-baseline.cjs +0 -220
  348. package/get-shit-done/bin/lib/installer-migrations/001-legacy-orphan-files.cjs +0 -41
  349. package/get-shit-done/bin/lib/installer-migrations/002-codex-legacy-hooks-json.cjs +0 -80
  350. package/get-shit-done/bin/lib/installer-migrations.cjs +0 -778
  351. package/get-shit-done/bin/lib/intel.cjs +0 -708
  352. package/get-shit-done/bin/lib/learnings.cjs +0 -421
  353. package/get-shit-done/bin/lib/milestone.cjs +0 -372
  354. package/get-shit-done/bin/lib/model-catalog.cjs +0 -229
  355. package/get-shit-done/bin/lib/model-profiles.cjs +0 -31
  356. package/get-shit-done/bin/lib/observability/event.cjs +0 -82
  357. package/get-shit-done/bin/lib/observability/logger.cjs +0 -174
  358. package/get-shit-done/bin/lib/phase-command-router.cjs +0 -191
  359. package/get-shit-done/bin/lib/phase-lifecycle.cjs +0 -79
  360. package/get-shit-done/bin/lib/phase.cjs +0 -1607
  361. package/get-shit-done/bin/lib/phases-command-router.cjs +0 -39
  362. package/get-shit-done/bin/lib/planning-workspace.cjs +0 -238
  363. package/get-shit-done/bin/lib/profile-output.cjs +0 -1141
  364. package/get-shit-done/bin/lib/profile-pipeline.cjs +0 -539
  365. package/get-shit-done/bin/lib/project-root.cjs +0 -112
  366. package/get-shit-done/bin/lib/prompt-budget.cjs +0 -399
  367. package/get-shit-done/bin/lib/review-reviewer-selection.cjs +0 -126
  368. package/get-shit-done/bin/lib/roadmap-command-router.cjs +0 -162
  369. package/get-shit-done/bin/lib/roadmap-upgrade.cjs +0 -569
  370. package/get-shit-done/bin/lib/roadmap.cjs +0 -651
  371. package/get-shit-done/bin/lib/runtime-artifact-layout.cjs +0 -301
  372. package/get-shit-done/bin/lib/runtime-homes.cjs +0 -222
  373. package/get-shit-done/bin/lib/runtime-name-policy.cjs +0 -83
  374. package/get-shit-done/bin/lib/runtime-slash.cjs +0 -112
  375. package/get-shit-done/bin/lib/secrets.cjs +0 -32
  376. package/get-shit-done/bin/lib/security.cjs +0 -600
  377. package/get-shit-done/bin/lib/shell-command-projection.cjs +0 -535
  378. package/get-shit-done/bin/lib/state-command-router.cjs +0 -252
  379. package/get-shit-done/bin/lib/state.cjs +0 -2073
  380. package/get-shit-done/bin/lib/surface.cjs +0 -470
  381. package/get-shit-done/bin/lib/task-command-router.cjs +0 -81
  382. package/get-shit-done/bin/lib/template.cjs +0 -228
  383. package/get-shit-done/bin/lib/uat.cjs +0 -289
  384. package/get-shit-done/bin/lib/ui-safety-gate.cjs +0 -111
  385. package/get-shit-done/bin/lib/update-context.cjs +0 -209
  386. package/get-shit-done/bin/lib/validate-command-router.cjs +0 -83
  387. package/get-shit-done/bin/lib/validate.cjs +0 -118
  388. package/get-shit-done/bin/lib/verify-command-router.cjs +0 -40
  389. package/get-shit-done/bin/lib/verify.cjs +0 -1614
  390. package/get-shit-done/bin/lib/workstream-inventory.cjs +0 -146
  391. package/get-shit-done/bin/lib/workstream.cjs +0 -389
  392. package/get-shit-done/bin/lib/worktree-safety.cjs +0 -985
  393. package/get-shit-done/workflows/_runtime-launcher.snippet.sh +0 -1
  394. package/scripts/lint-no-source-grep-extras.cjs +0 -81
  395. package/scripts/lint-no-source-grep.cjs +0 -174
  396. /package/{get-shit-done → gsd-core}/bin/shared/config-defaults.manifest.json +0 -0
  397. /package/{get-shit-done → gsd-core}/bin/shared/model-catalog.json +0 -0
  398. /package/{get-shit-done → gsd-core}/bin/shared/runtime-aliases.manifest.json +0 -0
  399. /package/{get-shit-done → gsd-core}/bin/verify-reapply-patches.cjs +0 -0
  400. /package/{get-shit-done → gsd-core}/contexts/dev.md +0 -0
  401. /package/{get-shit-done → gsd-core}/contexts/research.md +0 -0
  402. /package/{get-shit-done → gsd-core}/contexts/review.md +0 -0
  403. /package/{get-shit-done → gsd-core}/references/agent-contracts.md +0 -0
  404. /package/{get-shit-done → gsd-core}/references/ai-evals.md +0 -0
  405. /package/{get-shit-done → gsd-core}/references/ai-frameworks.md +0 -0
  406. /package/{get-shit-done → gsd-core}/references/autonomous-smart-discuss.md +0 -0
  407. /package/{get-shit-done → gsd-core}/references/checkpoints.md +0 -0
  408. /package/{get-shit-done → gsd-core}/references/common-bug-patterns.md +0 -0
  409. /package/{get-shit-done → gsd-core}/references/context-budget.md +0 -0
  410. /package/{get-shit-done → gsd-core}/references/continuation-format.md +0 -0
  411. /package/{get-shit-done → gsd-core}/references/debugger-philosophy.md +0 -0
  412. /package/{get-shit-done → gsd-core}/references/decimal-phase-calculation.md +0 -0
  413. /package/{get-shit-done → gsd-core}/references/doc-conflict-engine.md +0 -0
  414. /package/{get-shit-done → gsd-core}/references/domain-probes.md +0 -0
  415. /package/{get-shit-done → gsd-core}/references/execute-mvp-tdd.md +0 -0
  416. /package/{get-shit-done → gsd-core}/references/executor-examples.md +0 -0
  417. /package/{get-shit-done → gsd-core}/references/gate-prompts.md +0 -0
  418. /package/{get-shit-done → gsd-core}/references/gates.md +0 -0
  419. /package/{get-shit-done → gsd-core}/references/git-integration.md +0 -0
  420. /package/{get-shit-done → gsd-core}/references/git-planning-commit.md +0 -0
  421. /package/{get-shit-done → gsd-core}/references/ios-scaffold.md +0 -0
  422. /package/{get-shit-done → gsd-core}/references/mandatory-initial-read.md +0 -0
  423. /package/{get-shit-done → gsd-core}/references/model-profiles.md +0 -0
  424. /package/{get-shit-done → gsd-core}/references/phase-argument-parsing.md +0 -0
  425. /package/{get-shit-done → gsd-core}/references/planner-antipatterns.md +0 -0
  426. /package/{get-shit-done → gsd-core}/references/planner-chunked.md +0 -0
  427. /package/{get-shit-done → gsd-core}/references/planner-gap-closure.md +0 -0
  428. /package/{get-shit-done → gsd-core}/references/planner-human-verify-mode.md +0 -0
  429. /package/{get-shit-done → gsd-core}/references/planner-interface-context.md +0 -0
  430. /package/{get-shit-done → gsd-core}/references/planner-reviews.md +0 -0
  431. /package/{get-shit-done → gsd-core}/references/planner-revision.md +0 -0
  432. /package/{get-shit-done → gsd-core}/references/planner-source-audit.md +0 -0
  433. /package/{get-shit-done → gsd-core}/references/planning-config.md +0 -0
  434. /package/{get-shit-done → gsd-core}/references/project-skills-discovery.md +0 -0
  435. /package/{get-shit-done → gsd-core}/references/questioning.md +0 -0
  436. /package/{get-shit-done → gsd-core}/references/revision-loop.md +0 -0
  437. /package/{get-shit-done → gsd-core}/references/scout-codebase.md +0 -0
  438. /package/{get-shit-done → gsd-core}/references/skeleton-template.md +0 -0
  439. /package/{get-shit-done → gsd-core}/references/sketch-interactivity.md +0 -0
  440. /package/{get-shit-done → gsd-core}/references/sketch-theme-system.md +0 -0
  441. /package/{get-shit-done → gsd-core}/references/sketch-tooling.md +0 -0
  442. /package/{get-shit-done → gsd-core}/references/sketch-variant-patterns.md +0 -0
  443. /package/{get-shit-done → gsd-core}/references/spidr-splitting.md +0 -0
  444. /package/{get-shit-done → gsd-core}/references/tdd.md +0 -0
  445. /package/{get-shit-done → gsd-core}/references/thinking-models-debug.md +0 -0
  446. /package/{get-shit-done → gsd-core}/references/thinking-models-execution.md +0 -0
  447. /package/{get-shit-done → gsd-core}/references/thinking-models-planning.md +0 -0
  448. /package/{get-shit-done → gsd-core}/references/thinking-models-research.md +0 -0
  449. /package/{get-shit-done → gsd-core}/references/thinking-models-verification.md +0 -0
  450. /package/{get-shit-done → gsd-core}/references/thinking-partner.md +0 -0
  451. /package/{get-shit-done → gsd-core}/references/ui-brand.md +0 -0
  452. /package/{get-shit-done → gsd-core}/references/universal-anti-patterns.md +0 -0
  453. /package/{get-shit-done → gsd-core}/references/user-profiling.md +0 -0
  454. /package/{get-shit-done → gsd-core}/references/user-story-template.md +0 -0
  455. /package/{get-shit-done → gsd-core}/references/verification-overrides.md +0 -0
  456. /package/{get-shit-done → gsd-core}/references/verify-mvp-mode.md +0 -0
  457. /package/{get-shit-done → gsd-core}/references/workstream-flag.md +0 -0
  458. /package/{get-shit-done → gsd-core}/templates/AI-SPEC.md +0 -0
  459. /package/{get-shit-done → gsd-core}/templates/DEBUG.md +0 -0
  460. /package/{get-shit-done → gsd-core}/templates/SECURITY.md +0 -0
  461. /package/{get-shit-done → gsd-core}/templates/UAT.md +0 -0
  462. /package/{get-shit-done → gsd-core}/templates/UI-SPEC.md +0 -0
  463. /package/{get-shit-done → gsd-core}/templates/VALIDATION.md +0 -0
  464. /package/{get-shit-done → gsd-core}/templates/claude-md.md +0 -0
  465. /package/{get-shit-done → gsd-core}/templates/codebase/architecture.md +0 -0
  466. /package/{get-shit-done → gsd-core}/templates/codebase/concerns.md +0 -0
  467. /package/{get-shit-done → gsd-core}/templates/codebase/conventions.md +0 -0
  468. /package/{get-shit-done → gsd-core}/templates/codebase/integrations.md +0 -0
  469. /package/{get-shit-done → gsd-core}/templates/codebase/stack.md +0 -0
  470. /package/{get-shit-done → gsd-core}/templates/codebase/testing.md +0 -0
  471. /package/{get-shit-done → gsd-core}/templates/config.json +0 -0
  472. /package/{get-shit-done → gsd-core}/templates/context.md +0 -0
  473. /package/{get-shit-done → gsd-core}/templates/continue-here.md +0 -0
  474. /package/{get-shit-done → gsd-core}/templates/debug-subagent-prompt.md +0 -0
  475. /package/{get-shit-done → gsd-core}/templates/dev-preferences.md +0 -0
  476. /package/{get-shit-done → gsd-core}/templates/discovery.md +0 -0
  477. /package/{get-shit-done → gsd-core}/templates/discussion-log.md +0 -0
  478. /package/{get-shit-done → gsd-core}/templates/milestone-archive.md +0 -0
  479. /package/{get-shit-done → gsd-core}/templates/milestone.md +0 -0
  480. /package/{get-shit-done → gsd-core}/templates/planner-subagent-prompt.md +0 -0
  481. /package/{get-shit-done → gsd-core}/templates/project.md +0 -0
  482. /package/{get-shit-done → gsd-core}/templates/requirements.md +0 -0
  483. /package/{get-shit-done → gsd-core}/templates/research-project/ARCHITECTURE.md +0 -0
  484. /package/{get-shit-done → gsd-core}/templates/research-project/FEATURES.md +0 -0
  485. /package/{get-shit-done → gsd-core}/templates/research-project/PITFALLS.md +0 -0
  486. /package/{get-shit-done → gsd-core}/templates/research-project/STACK.md +0 -0
  487. /package/{get-shit-done → gsd-core}/templates/research-project/SUMMARY.md +0 -0
  488. /package/{get-shit-done → gsd-core}/templates/research.md +0 -0
  489. /package/{get-shit-done → gsd-core}/templates/retrospective.md +0 -0
  490. /package/{get-shit-done → gsd-core}/templates/roadmap.md +0 -0
  491. /package/{get-shit-done → gsd-core}/templates/spec.md +0 -0
  492. /package/{get-shit-done → gsd-core}/templates/state.md +0 -0
  493. /package/{get-shit-done → gsd-core}/templates/summary-complex.md +0 -0
  494. /package/{get-shit-done → gsd-core}/templates/summary-minimal.md +0 -0
  495. /package/{get-shit-done → gsd-core}/templates/summary-standard.md +0 -0
  496. /package/{get-shit-done → gsd-core}/templates/summary.md +0 -0
  497. /package/{get-shit-done → gsd-core}/templates/user-profile.md +0 -0
  498. /package/{get-shit-done → gsd-core}/templates/user-setup.md +0 -0
  499. /package/{get-shit-done → gsd-core}/templates/verification-report.md +0 -0
  500. /package/{get-shit-done → gsd-core}/workflows/analyze-dependencies.md +0 -0
  501. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/all.md +0 -0
  502. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/analyze.md +0 -0
  503. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/batch.md +0 -0
  504. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/default.md +0 -0
  505. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/modes/text.md +0 -0
  506. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/checkpoint.json +0 -0
  507. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/context.md +0 -0
  508. /package/{get-shit-done → gsd-core}/workflows/discuss-phase/templates/discussion-log.md +0 -0
  509. /package/{get-shit-done → gsd-core}/workflows/discuss-phase-power.md +0 -0
  510. /package/{get-shit-done → gsd-core}/workflows/execute-phase/steps/per-plan-worktree-gate.md +0 -0
  511. /package/{get-shit-done → gsd-core}/workflows/fast.md +0 -0
  512. /package/{get-shit-done → gsd-core}/workflows/help/modes/brief.md +0 -0
  513. /package/{get-shit-done → gsd-core}/workflows/help/modes/default.md +0 -0
  514. /package/{get-shit-done → gsd-core}/workflows/help/modes/topic.md +0 -0
  515. /package/{get-shit-done → gsd-core}/workflows/help.md +0 -0
  516. /package/{get-shit-done → gsd-core}/workflows/inbox.md +0 -0
  517. /package/{get-shit-done → gsd-core}/workflows/list-phase-assumptions.md +0 -0
  518. /package/{get-shit-done → gsd-core}/workflows/node-repair.md +0 -0
  519. /package/{get-shit-done → gsd-core}/workflows/note.md +0 -0
  520. /package/{get-shit-done → gsd-core}/workflows/pr-branch.md +0 -0
  521. /package/{get-shit-done → gsd-core}/workflows/session-report.md +0 -0
@@ -0,0 +1,256 @@
1
+ 'use strict';
2
+
3
+ const path = require('path');
4
+ const os = require('os');
5
+ const fs = require('fs');
6
+ const { execFileSync } = require('child_process');
7
+
8
+ /**
9
+ * Classify a What's-Changed bullet line into 'Feature', 'Fix', or 'Enhancement'.
10
+ * @param {string} bulletLine - Full bullet line including the leading `* ` or `- ` marker.
11
+ * @returns {'Feature'|'Fix'|'Enhancement'}
12
+ */
13
+ function classifyTitle(bulletLine) {
14
+ // Strip leading `* ` or `- ` marker
15
+ const withoutMarker = bulletLine.replace(/^[*-]\s+/, '');
16
+
17
+ // Extract title = text before ` by @`
18
+ const byIdx = withoutMarker.indexOf(' by @');
19
+ const title = (byIdx !== -1 ? withoutMarker.slice(0, byIdx) : withoutMarker).trim();
20
+
21
+ if (/^feat(?:ure)?\s*(?:\(|!|:)/i.test(title)) return 'Feature';
22
+ if (/^fix\s*(?:\(|!|:)/i.test(title)) return 'Fix';
23
+ return 'Enhancement';
24
+ }
25
+
26
+ /**
27
+ * Reformat GitHub's auto-generated release notes into the repo's hand-curated format.
28
+ *
29
+ * @param {object} opts
30
+ * @param {string} opts.generatedBody - The raw GitHub-generated release body.
31
+ * @param {string} opts.version - Version string (e.g. "1.3.0-rc.1"), no leading "v".
32
+ * @param {boolean} opts.prerelease - Whether this is a pre-release.
33
+ * @param {string} opts.packageName - npm package name (e.g. "@opengsd/gsd-core").
34
+ * @returns {string} Formatted release body (no trailing newline).
35
+ */
36
+ function formatReleaseNotes({ generatedBody, version, prerelease, packageName }) {
37
+ const lines = generatedBody.split('\n');
38
+
39
+ const featureBullets = [];
40
+ const fixBullets = [];
41
+ const enhancementBullets = [];
42
+ const newContributorBullets = [];
43
+ let fullChangelogLine = null;
44
+
45
+ let inWhatsChanged = false;
46
+ let inNewContributors = false;
47
+
48
+ for (const line of lines) {
49
+ const trimmed = line.trim();
50
+
51
+ // Detect section headings
52
+ if (trimmed === '## What\'s Changed') {
53
+ inWhatsChanged = true;
54
+ inNewContributors = false;
55
+ continue;
56
+ }
57
+
58
+ if (trimmed === '## New Contributors') {
59
+ inWhatsChanged = false;
60
+ inNewContributors = true;
61
+ continue;
62
+ }
63
+
64
+ // Full changelog line ends the What's Changed section
65
+ if (trimmed.startsWith('**Full Changelog**:')) {
66
+ inWhatsChanged = false;
67
+ inNewContributors = false;
68
+ fullChangelogLine = trimmed;
69
+ continue;
70
+ }
71
+
72
+ // Any other `##` heading ends current section
73
+ if (trimmed.startsWith('## ')) {
74
+ inWhatsChanged = false;
75
+ inNewContributors = false;
76
+ continue;
77
+ }
78
+
79
+ // Collect bullets
80
+ if (inWhatsChanged && (trimmed.startsWith('* ') || trimmed.startsWith('- '))) {
81
+ const category = classifyTitle(trimmed);
82
+ if (category === 'Feature') featureBullets.push(trimmed);
83
+ else if (category === 'Fix') fixBullets.push(trimmed);
84
+ else enhancementBullets.push(trimmed);
85
+ continue;
86
+ }
87
+
88
+ if (inNewContributors && (trimmed.startsWith('* ') || trimmed.startsWith('- '))) {
89
+ newContributorBullets.push(trimmed);
90
+ continue;
91
+ }
92
+ }
93
+
94
+ // Build Install block
95
+ let installBlock;
96
+ if (prerelease) {
97
+ installBlock = [
98
+ '## Install',
99
+ '',
100
+ 'This pre-release is published to npm under the `next` dist-tag.',
101
+ '',
102
+ '```bash',
103
+ `npm i ${packageName}@${version}`,
104
+ '# or',
105
+ `npm i ${packageName}@next`,
106
+ '```',
107
+ ].join('\n');
108
+ } else {
109
+ installBlock = [
110
+ '## Install',
111
+ '',
112
+ '```bash',
113
+ `npm i ${packageName}@${version}`,
114
+ '# or',
115
+ `npm i ${packageName}@latest`,
116
+ '```',
117
+ ].join('\n');
118
+ }
119
+
120
+ // Assemble groups (omit empty ones)
121
+ const groups = [];
122
+
123
+ // Group A: Install
124
+ groups.push(installBlock);
125
+
126
+ // Group B: What's Changed heading
127
+ groups.push('## What\'s Changed');
128
+
129
+ // Group C: Features
130
+ if (featureBullets.length > 0) {
131
+ groups.push('### Feature\n' + featureBullets.join('\n'));
132
+ }
133
+
134
+ // Group D: Enhancements
135
+ if (enhancementBullets.length > 0) {
136
+ groups.push('### Enhancement\n' + enhancementBullets.join('\n'));
137
+ }
138
+
139
+ // Group E: Fixes
140
+ if (fixBullets.length > 0) {
141
+ groups.push('### Fix\n' + fixBullets.join('\n'));
142
+ }
143
+
144
+ // Group F: New Contributors
145
+ if (newContributorBullets.length > 0) {
146
+ groups.push('## New Contributors\n' + newContributorBullets.join('\n'));
147
+ }
148
+
149
+ // Group G: Full Changelog
150
+ if (fullChangelogLine) {
151
+ groups.push(fullChangelogLine);
152
+ }
153
+
154
+ return groups.join('\n\n');
155
+ }
156
+
157
+ // CLI entry point
158
+ if (require.main === module) {
159
+ try {
160
+ const argv = process.argv.slice(2);
161
+
162
+ let tag = null;
163
+ let repo = null;
164
+ let packageName = null;
165
+ let prerelease = null;
166
+ let useStdin = false;
167
+ let doApply = false;
168
+
169
+ for (let i = 0; i < argv.length; i++) {
170
+ const arg = argv[i];
171
+ if (arg === '--tag') {
172
+ tag = argv[++i];
173
+ } else if (arg === '--repo') {
174
+ repo = argv[++i];
175
+ } else if (arg === '--package') {
176
+ packageName = argv[++i];
177
+ } else if (arg === '--prerelease') {
178
+ prerelease = true;
179
+ } else if (arg === '--latest') {
180
+ prerelease = false;
181
+ } else if (arg === '--stdin') {
182
+ useStdin = true;
183
+ } else if (arg === '--apply') {
184
+ doApply = true;
185
+ }
186
+ }
187
+
188
+ // Derive version from tag
189
+ const version = tag ? tag.replace(/^v/, '') : null;
190
+
191
+ // Resolve package name if not provided
192
+ if (!packageName) {
193
+ const repoRoot = path.resolve(__dirname, '..', '..');
194
+ const pkgJson = JSON.parse(fs.readFileSync(path.join(repoRoot, 'package.json'), 'utf8'));
195
+ packageName = pkgJson.name;
196
+ }
197
+
198
+ let generatedBody;
199
+
200
+ if (useStdin) {
201
+ // Read from stdin
202
+ if (!version) {
203
+ throw new Error('--stdin mode requires --tag or --version to derive version');
204
+ }
205
+ if (prerelease === null) {
206
+ throw new Error('--stdin mode requires --prerelease or --latest');
207
+ }
208
+ generatedBody = fs.readFileSync('/dev/stdin', 'utf8');
209
+ } else {
210
+ // Fetch from gh
211
+ if (!tag) {
212
+ throw new Error('--tag <tag> is required');
213
+ }
214
+
215
+ const ghArgs = ['release', 'view', tag, '--json', 'body', '-q', '.body'];
216
+ if (repo) ghArgs.push('--repo', repo);
217
+
218
+ generatedBody = execFileSync('gh', ghArgs, { encoding: 'utf8' });
219
+
220
+ // Determine prerelease if not forced
221
+ if (prerelease === null) {
222
+ try {
223
+ const ghPreArgs = ['release', 'view', tag, '--json', 'isPrerelease', '-q', '.isPrerelease'];
224
+ if (repo) ghPreArgs.push('--repo', repo);
225
+ const result = execFileSync('gh', ghPreArgs, { encoding: 'utf8' }).trim();
226
+ prerelease = result === 'true';
227
+ } catch (_e) {
228
+ // Final fallback: check if tag contains `-` after version digits
229
+ prerelease = /-/.test(version);
230
+ }
231
+ }
232
+ }
233
+
234
+ const formatted = formatReleaseNotes({ generatedBody, version, prerelease, packageName });
235
+
236
+ if (doApply) {
237
+ const tmpFile = path.join(os.tmpdir(), `release-notes-${Date.now()}.md`);
238
+ fs.writeFileSync(tmpFile, formatted, 'utf8');
239
+ try {
240
+ const ghArgs = ['release', 'edit', tag, '--notes-file', tmpFile];
241
+ if (repo) ghArgs.push('--repo', repo);
242
+ execFileSync('gh', ghArgs, { encoding: 'utf8' });
243
+ process.stderr.write(`Release notes updated for ${tag}\n`);
244
+ } finally {
245
+ fs.unlinkSync(tmpFile);
246
+ }
247
+ } else {
248
+ process.stdout.write(formatted + '\n');
249
+ }
250
+ } catch (err) {
251
+ process.stderr.write((err.message || String(err)) + '\n');
252
+ process.exit(1);
253
+ }
254
+ }
255
+
256
+ module.exports = { formatReleaseNotes, classifyTitle };
@@ -33,7 +33,7 @@
33
33
  * Non-interactive: --local --claude flags skip all prompts.
34
34
  *
35
35
  * Workflow-body checks (Cycle 3 — informational):
36
- * - Scans all installed get-shit-done/workflows/*.md for /gsd:<known-cmd>
36
+ * - Scans all installed gsd-core/workflows/*.md for /gsd:<known-cmd>
37
37
  * colon-namespace leaks (WORKFLOW_BODY_COLON_LEAK).
38
38
  * This check populates result.details with counters but does NOT return a
39
39
  * failure code by default; it is informational until enforcement is enabled.
@@ -45,7 +45,7 @@ const { execFileSync, spawnSync } = require('child_process');
45
45
  const fs = require('fs');
46
46
  const os = require('os');
47
47
  const path = require('path');
48
- const { PACKAGE_NAME } = require('../get-shit-done/bin/lib/package-identity.cjs');
48
+ const { PACKAGE_NAME } = require('../gsd-core/bin/lib/package-identity.cjs');
49
49
  // 120 s proved too tight on Windows GitHub-hosted runners: cold-cache
50
50
  // `npm install -g` with a 1499-file tarball took ~120 s exactly, causing
51
51
  // spawnSync to fire SIGTERM and return { status: null, stdout: '', stderr: '' }
@@ -182,15 +182,15 @@ function findInstallerBin(installPrefix) {
182
182
  * Structured parser — only inspects individual lines; never regexes on the
183
183
  * whole-file string. Two recognised forms (in priority order):
184
184
  *
185
- * 1. @-import line: `@~/.claude/get-shit-done/workflows/<name>.md`
186
- * 2. Inline mention: any line containing `~/.claude/get-shit-done/workflows/<name>.md`
185
+ * 1. @-import line: `@~/.claude/gsd-core/workflows/<name>.md`
186
+ * 2. Inline mention: any line containing `~/.claude/gsd-core/workflows/<name>.md`
187
187
  * (takes the LAST occurrence so conditional-dispatch files resolve to the
188
188
  * default / unconditional branch, e.g. discuss-phase.md)
189
189
  *
190
190
  * Returns the bare workflow filename (e.g. `"discuss-phase.md"`) or null.
191
191
  */
192
192
  function parseWorkflowRef(mdContent) {
193
- const WORKFLOW_PREFIX = 'get-shit-done/workflows/';
193
+ const WORKFLOW_PREFIX = 'gsd-core/workflows/';
194
194
  let atImportResult = null;
195
195
  let lastInlineResult = null;
196
196
 
@@ -433,7 +433,7 @@ function runSmoke({
433
433
  // Verify expected dirs were created
434
434
  const expectedDirs = [
435
435
  path.join(fixtureDir, '.claude', 'commands'),
436
- path.join(fixtureDir, '.claude', 'get-shit-done'),
436
+ path.join(fixtureDir, '.claude', 'gsd-core'),
437
437
  ];
438
438
  for (const dir of expectedDirs) {
439
439
  if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()) {
@@ -472,9 +472,9 @@ function runSmoke({
472
472
 
473
473
  let workflowPath = null;
474
474
  if (workflowName) {
475
- // Workflow files live at get-shit-done/workflows/<name> in the package.
475
+ // Workflow files live at gsd-core/workflows/<name> in the package.
476
476
  // Some live in subdirectories; try flat first then scan once.
477
- const flat = path.join(pkg, 'get-shit-done', 'workflows', workflowName);
477
+ const flat = path.join(pkg, 'gsd-core', 'workflows', workflowName);
478
478
  workflowPath = fs.existsSync(flat) ? flat : null;
479
479
 
480
480
  if (!workflowPath) {
@@ -503,7 +503,7 @@ function runSmoke({
503
503
  // ─────────────────────────────────────────────────────────────────────────
504
504
 
505
505
  // --- Workflow-body checks (informational — #3668 not yet fixed) ----------
506
- const workflowsDir = path.join(pkg, 'get-shit-done', 'workflows');
506
+ const workflowsDir = path.join(pkg, 'gsd-core', 'workflows');
507
507
  const installedCmdNames = readInstalledCmdNames(pkg);
508
508
 
509
509
  let workflowsScanned = 0;
@@ -26,7 +26,7 @@ const { execFileSync } = require('child_process');
26
26
 
27
27
  const SUITES = ['all', 'unit', 'integration', 'install', 'security', 'slow'];
28
28
 
29
- // ADR-457 build-at-publish: get-shit-done/bin/lib/*.cjs is generated from
29
+ // ADR-457 build-at-publish: gsd-core/bin/lib/*.cjs is generated from
30
30
  // src/*.cts and gitignored, so on a clean checkout (fresh CI, before any build)
31
31
  // the artifact is absent — yet test files require it. This is the universal
32
32
  // chokepoint every test path funnels through (test:unit, --files-from, direct
@@ -38,7 +38,7 @@ const SUITES = ['all', 'unit', 'integration', 'install', 'security', 'slow'];
38
38
  // modules migrate into src/.
39
39
  function ensureBuiltArtifacts() {
40
40
  const root = join(__dirname, '..');
41
- const sentinel = join(root, 'get-shit-done', 'bin', 'lib', 'semver-compare.cjs');
41
+ const sentinel = join(root, 'gsd-core', 'bin', 'lib', 'semver-compare.cjs');
42
42
  if (existsSync(sentinel)) return;
43
43
  const tscBin = require.resolve('typescript/bin/tsc');
44
44
  execFileSync(process.execPath, [tscBin, '-p', join(root, 'tsconfig.build.json')], {
@@ -161,7 +161,15 @@ function selectExplicitFiles(allFiles, filesValue, filesFrom) {
161
161
  const selected = [];
162
162
  const missing = [];
163
163
  for (const file of requested) {
164
- if (available.has(file)) {
164
+ // If the token is a bare suite name (e.g. "unit" written by ci-test-scope
165
+ // as the #408 fallback sentinel), delegate to the existing suite resolver
166
+ // rather than treating it as a filename. This prevents the
167
+ // "requested test file(s) not found: unit" crash (#641).
168
+ if (SUITES.includes(file)) {
169
+ for (const f of selectFiles(allFiles, file)) {
170
+ selected.push(f);
171
+ }
172
+ } else if (available.has(file)) {
165
173
  selected.push(file);
166
174
  } else {
167
175
  missing.push(file);
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * strip-prose-atrefs.cjs
4
4
  *
5
- * Removes redundant @~/.claude/get-shit-done/ path tokens from prose lines
5
+ * Removes redundant @~/.claude/gsd-core/ path tokens from prose lines
6
6
  * in <process> and <context> blocks. The path is already declared in
7
7
  * <execution_context> where it actually loads the file. Prose copies are
8
8
  * inert and add ~900 tokens/invocation of dead weight.
@@ -30,7 +30,7 @@ const DRY_RUN = process.argv.includes('--dry-run');
30
30
  const ROOT = path.join(__dirname, '..');
31
31
  const COMMANDS_DIR = path.join(ROOT, 'commands', 'gsd');
32
32
 
33
- const AT_PATH_PATTERN = /@(?:~|\$HOME)\/.+?get-shit-done\/[^\s`\)]+/;
33
+ const AT_PATH_PATTERN = /@(?:~|\$HOME)\/.+?gsd-core\/[^\s`\)]+/;
34
34
  const mkAtRe = () => new RegExp(AT_PATH_PATTERN.source, 'g');
35
35
 
36
36
  function transformLine(line) {
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * sync-runtime-launcher.cjs
4
4
  *
5
- * Idempotent transform: for every get-shit-done/workflows/*.md (and subdirs),
5
+ * Idempotent transform: for every gsd-core/workflows/*.md (and subdirs),
6
6
  * rewrite all bash/sh/shell fenced blocks to:
7
7
  * 1. Strip ALL old resolver forms from every bash block (GSD_TOOLS=,
8
8
  * GSD_SDK=, the if/elif/else/fi resolver, _GSD_SHIM_NAME=, and any
@@ -19,7 +19,7 @@
19
19
  const fs = require('node:fs');
20
20
  const path = require('node:path');
21
21
 
22
- const WORKFLOWS_DIR = path.join(__dirname, '..', 'get-shit-done', 'workflows');
22
+ const WORKFLOWS_DIR = path.join(__dirname, '..', 'gsd-core', 'workflows');
23
23
  const SNIPPET_FILE = path.join(WORKFLOWS_DIR, '_runtime-launcher.snippet.sh');
24
24
 
25
25
  // Read canonical preamble (full content of snippet file)
@@ -0,0 +1,252 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ /**
5
+ * verify-npm-publish.cjs — verifies a freshly-published npm version is
6
+ * retrievable, tolerating registry/CDN propagation lag via bounded retry.
7
+ * Fixes #623. Used by both Verify-publish steps in .github/workflows/release.yml.
8
+ */
9
+
10
+ const cp = require('node:child_process');
11
+
12
+ // ---- Constants ---------------------------------------------------------------
13
+
14
+ const REASON = Object.freeze({
15
+ OK_VERSION_LIVE: 'ok_version_live',
16
+ FAIL_VERSION_NOT_FOUND: 'fail_version_not_found',
17
+ });
18
+
19
+ // ---- Sleep -------------------------------------------------------------------
20
+
21
+ const defaultSleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
22
+
23
+ // ---- npm fetchers ------------------------------------------------------------
24
+
25
+ function defaultFetchVersion(pkg, version) {
26
+ try {
27
+ const out = cp.execFileSync('npm', ['view', `${pkg}@${version}`, 'version'],
28
+ { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] }).trim();
29
+ return out || null;
30
+ } catch { return null; }
31
+ }
32
+
33
+ function defaultFetchDistTag(pkg, distTag) {
34
+ try {
35
+ const out = cp.execFileSync('npm', ['view', pkg, 'dist-tags', '--json'],
36
+ { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] });
37
+ const tags = JSON.parse(out);
38
+ return (tags && typeof tags === 'object' && tags[distTag]) || null;
39
+ } catch { return null; }
40
+ }
41
+
42
+ // ---- Core async function (unit-tested seam) ----------------------------------
43
+
44
+ async function verifyPublish({
45
+ pkg,
46
+ version,
47
+ distTag = null,
48
+ fetchVersion = defaultFetchVersion,
49
+ fetchDistTag = defaultFetchDistTag,
50
+ maxAttempts = 20,
51
+ intervalMs = 5000,
52
+ sleep = defaultSleep,
53
+ }) {
54
+ let attempts = 0;
55
+
56
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
57
+ const found = fetchVersion(pkg, version);
58
+ attempts++;
59
+
60
+ if (found === version) {
61
+ // Version confirmed live — optionally resolve dist-tag informally
62
+ let distTagResult = null;
63
+
64
+ if (distTag && typeof distTag === 'string' && distTag.length > 0) {
65
+ let pointsTo = null;
66
+
67
+ for (let dt = 1; dt <= maxAttempts; dt++) {
68
+ const tagVal = fetchDistTag(pkg, distTag);
69
+ if (tagVal !== null) {
70
+ pointsTo = tagVal;
71
+ break;
72
+ }
73
+ if (dt < maxAttempts) {
74
+ await sleep(intervalMs);
75
+ }
76
+ }
77
+
78
+ distTagResult = {
79
+ name: distTag,
80
+ points_to: pointsTo,
81
+ matches: pointsTo === version,
82
+ };
83
+ }
84
+
85
+ return {
86
+ ok: true,
87
+ reason: REASON.OK_VERSION_LIVE,
88
+ pkg,
89
+ version,
90
+ attempts,
91
+ distTag: distTagResult,
92
+ };
93
+ }
94
+
95
+ // Not found yet — sleep before retry (but not after the final attempt)
96
+ if (attempt < maxAttempts) {
97
+ await sleep(intervalMs);
98
+ }
99
+ }
100
+
101
+ return {
102
+ ok: false,
103
+ reason: REASON.FAIL_VERSION_NOT_FOUND,
104
+ pkg,
105
+ version,
106
+ attempts,
107
+ distTag: null,
108
+ };
109
+ }
110
+
111
+ // ---- Argument parsing --------------------------------------------------------
112
+
113
+ function parseArgs(argv) {
114
+ const opts = {
115
+ pkg: null,
116
+ version: null,
117
+ distTag: null,
118
+ maxAttempts: 20,
119
+ intervalMs: 5000,
120
+ json: false,
121
+ };
122
+
123
+ const args = argv.slice();
124
+ while (args.length > 0) {
125
+ const arg = args.shift();
126
+
127
+ if (arg === '--help' || arg === '-h') {
128
+ process.stdout.write(
129
+ 'Usage: node scripts/verify-npm-publish.cjs --package <pkg> --version <ver> [options]\n' +
130
+ '\n' +
131
+ 'Options:\n' +
132
+ ' --package <s> npm package name (required)\n' +
133
+ ' --version <s> version to verify (required)\n' +
134
+ ' --dist-tag <s> dist-tag to report (optional, informational only)\n' +
135
+ ' --max-attempts <n> max retry attempts (default: 20)\n' +
136
+ ' --interval-ms <n> ms between retries (default: 5000)\n' +
137
+ ' --json emit structured JSON output\n' +
138
+ ' --help, -h show this help\n'
139
+ );
140
+ process.exit(0);
141
+ } else if (arg === '--package') {
142
+ const val = args.shift();
143
+ if (!val || val.startsWith('-')) {
144
+ process.stderr.write('error: --package requires a value\n');
145
+ process.exit(2);
146
+ }
147
+ opts.pkg = val;
148
+ } else if (arg === '--version') {
149
+ const val = args.shift();
150
+ if (!val || val.startsWith('-')) {
151
+ process.stderr.write('error: --version requires a value\n');
152
+ process.exit(2);
153
+ }
154
+ opts.version = val;
155
+ } else if (arg === '--dist-tag') {
156
+ const val = args.shift();
157
+ if (!val || val.startsWith('-')) {
158
+ process.stderr.write('error: --dist-tag requires a value\n');
159
+ process.exit(2);
160
+ }
161
+ opts.distTag = val;
162
+ } else if (arg === '--max-attempts') {
163
+ const val = args.shift();
164
+ if (!val || val.startsWith('-')) {
165
+ process.stderr.write('error: --max-attempts requires a value\n');
166
+ process.exit(2);
167
+ }
168
+ const n = parseInt(val, 10);
169
+ if (isNaN(n) || n < 1) {
170
+ process.stderr.write('error: --max-attempts must be a positive integer\n');
171
+ process.exit(2);
172
+ }
173
+ opts.maxAttempts = n;
174
+ } else if (arg === '--interval-ms') {
175
+ const val = args.shift();
176
+ if (!val || val.startsWith('-')) {
177
+ process.stderr.write('error: --interval-ms requires a value\n');
178
+ process.exit(2);
179
+ }
180
+ const n = parseInt(val, 10);
181
+ if (isNaN(n) || n < 0) {
182
+ process.stderr.write('error: --interval-ms must be a non-negative integer\n');
183
+ process.exit(2);
184
+ }
185
+ opts.intervalMs = n;
186
+ } else if (arg === '--json') {
187
+ opts.json = true;
188
+ } else {
189
+ process.stderr.write(`unknown argument: ${arg}\n`);
190
+ process.exit(2);
191
+ }
192
+ }
193
+
194
+ if (!opts.pkg) {
195
+ process.stderr.write('error: --package is required\n');
196
+ process.exit(2);
197
+ }
198
+ if (!opts.version) {
199
+ process.stderr.write('error: --version is required\n');
200
+ process.exit(2);
201
+ }
202
+
203
+ return opts;
204
+ }
205
+
206
+ // ---- Main entry point --------------------------------------------------------
207
+
208
+ async function main() {
209
+ const opts = parseArgs(process.argv.slice(2));
210
+ const result = await verifyPublish({
211
+ pkg: opts.pkg,
212
+ version: opts.version,
213
+ distTag: opts.distTag,
214
+ maxAttempts: opts.maxAttempts,
215
+ intervalMs: opts.intervalMs,
216
+ });
217
+
218
+ if (opts.json) {
219
+ process.stdout.write(JSON.stringify(result, null, 2) + '\n');
220
+ } else {
221
+ if (result.ok) {
222
+ process.stdout.write(
223
+ `✓ Verified: ${result.pkg}@${result.version} is live on npm (after ${result.attempts} attempt(s))\n`
224
+ );
225
+ if (result.distTag) {
226
+ process.stdout.write(`✓ ${result.distTag.name} tag points to: ${result.distTag.points_to}\n`);
227
+ if (!result.distTag.matches) {
228
+ process.stdout.write(
229
+ `::warning::${result.distTag.name} dist-tag points to ${result.distTag.points_to}, expected ${result.version}\n`
230
+ );
231
+ }
232
+ }
233
+ } else {
234
+ process.stdout.write(
235
+ `::error::Published version verification failed. ${result.pkg}@${result.version} not found after ${result.attempts} attempt(s)\n`
236
+ );
237
+ }
238
+ }
239
+
240
+ process.exit(result.ok ? 0 : 1);
241
+ }
242
+
243
+ // ---- Guard -------------------------------------------------------------------
244
+
245
+ if (require.main === module) {
246
+ main().catch((err) => {
247
+ process.stderr.write(String((err && err.stack) || err) + '\n');
248
+ process.exit(1);
249
+ });
250
+ }
251
+
252
+ module.exports = { verifyPublish, parseArgs, REASON, defaultFetchVersion, defaultFetchDistTag };