@opengsd/gsd-core 1.3.0-rc.1 → 1.3.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 (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 +784 -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
@@ -11,17 +11,29 @@
11
11
 
12
12
  const fs = require('fs');
13
13
  const path = require('path');
14
- const { isSemverNewer } = require('../get-shit-done/bin/lib/semver-compare.cjs');
14
+ const { isSemverNewer } = require('../gsd-core/bin/lib/semver-compare.cjs');
15
15
  // Latest-version lookup is delegated to the single deterministic adapter
16
16
  // (#498). checkLatestVersion() owns the npm-view call, the timeout/semver
17
17
  // policy, and the package name — sourced from the baked Package Identity seam.
18
18
  // The previous `require('../package.json').name` (#378) resolved to undefined
19
19
  // in the installed tree (only a {"type":"commonjs"} marker ships), so the
20
20
  // background check never reported updates.
21
- const { checkLatestVersion } = require('../get-shit-done/bin/check-latest-version.cjs');
21
+ const { checkLatestVersion } = require('../gsd-core/bin/check-latest-version.cjs');
22
+ const { PACKAGE_NAME } = require('../gsd-core/bin/lib/package-identity.cjs');
22
23
  // Authoritative list of managed hooks — shared with tests to retire source-grep
23
24
  // assertions (pending-migration-to-typed-ir [#455]).
24
- const { MANAGED_HOOKS } = require('./managed-hooks-registry.cjs');
25
+ // NOTE: managed-hooks-registry.cjs must be in HOOKS_TO_COPY (scripts/build-hooks.js)
26
+ // so it is present in hooks/dist/ and ships to the installed runtime hooks/ dir.
27
+ // If it is missing (e.g., installed from an older dist), catch and degrade gracefully
28
+ // so the worker always proceeds to compute and write the result cache record.
29
+ let MANAGED_HOOKS = [];
30
+ try {
31
+ ({ MANAGED_HOOKS } = require('./managed-hooks-registry.cjs'));
32
+ } catch (e) {
33
+ // Module not found in installed runtime — stale-hook detection degrades to
34
+ // no-op (empty list means no hooks are checked for staleness). The worker
35
+ // still runs and writes package_name / installed / latest / update_available.
36
+ }
25
37
 
26
38
  const cacheFile = process.env.GSD_CACHE_FILE;
27
39
  const projectVersionFile = process.env.GSD_PROJECT_VERSION_FILE;
@@ -88,6 +100,7 @@ const result = {
88
100
  latest: latest || 'unknown',
89
101
  checked: Math.floor(Date.now() / 1000),
90
102
  stale_hooks: staleHooks.length > 0 ? staleHooks : undefined,
103
+ package_name: PACKAGE_NAME,
91
104
  };
92
105
 
93
106
  if (cacheFile) {
@@ -8,6 +8,8 @@ const path = require('path');
8
8
  const os = require('os');
9
9
  const { spawn } = require('child_process');
10
10
 
11
+ const { updateCacheFileName } = require('../gsd-core/bin/lib/package-identity.cjs');
12
+
11
13
  const homeDir = os.homedir();
12
14
  const cwd = process.cwd();
13
15
 
@@ -16,11 +18,11 @@ const cwd = process.cwd();
16
18
  function detectConfigDir(baseDir) {
17
19
  // Check env override first (supports multi-account setups)
18
20
  const envDir = process.env.CLAUDE_CONFIG_DIR;
19
- if (envDir && fs.existsSync(path.join(envDir, 'get-shit-done', 'VERSION'))) {
21
+ if (envDir && fs.existsSync(path.join(envDir, 'gsd-core', 'VERSION'))) {
20
22
  return envDir;
21
23
  }
22
24
  for (const dir of ['.claude', '.gemini', '.config/kilo', '.kilo', '.config/opencode', '.opencode']) {
23
- if (fs.existsSync(path.join(baseDir, dir, 'get-shit-done', 'VERSION'))) {
25
+ if (fs.existsSync(path.join(baseDir, dir, 'gsd-core', 'VERSION'))) {
24
26
  return path.join(baseDir, dir);
25
27
  }
26
28
  }
@@ -33,11 +35,11 @@ const projectConfigDir = detectConfigDir(cwd);
33
35
  // resolution mismatches where check-update writes to one runtime's cache
34
36
  // but statusline reads from another (#1421).
35
37
  const cacheDir = path.join(homeDir, '.cache', 'gsd');
36
- const cacheFile = path.join(cacheDir, 'gsd-update-check.json');
38
+ const cacheFile = path.join(cacheDir, updateCacheFileName);
37
39
 
38
40
  // VERSION file locations (check project first, then global)
39
- const projectVersionFile = path.join(projectConfigDir, 'get-shit-done', 'VERSION');
40
- const globalVersionFile = path.join(globalConfigDir, 'get-shit-done', 'VERSION');
41
+ const projectVersionFile = path.join(projectConfigDir, 'gsd-core', 'VERSION');
42
+ const globalVersionFile = path.join(globalConfigDir, 'gsd-core', 'VERSION');
41
43
 
42
44
  // Ensure cache directory exists
43
45
  if (!fs.existsSync(cacheDir)) {
@@ -140,10 +140,10 @@ process.stdin.on('end', () => {
140
140
  if (isCritical && isGsdActive && !warnData.criticalRecorded) {
141
141
  try {
142
142
  // Runtime-agnostic path: this hook lives at <runtime-config>/hooks/
143
- // and gsd-tools.cjs lives at <runtime-config>/get-shit-done/bin/.
143
+ // and gsd-tools.cjs lives at <runtime-config>/gsd-core/bin/.
144
144
  // Using __dirname makes this work on Claude Code, OpenCode, Gemini,
145
145
  // Kilo, etc. without hardcoding ~/.claude/.
146
- const gsdTools = path.join(__dirname, '..', 'get-shit-done', 'bin', 'gsd-tools.cjs');
146
+ const gsdTools = path.join(__dirname, '..', 'gsd-core', 'bin', 'gsd-tools.cjs');
147
147
  // Coerce usedPct to a safe number in case bridge file is malformed
148
148
  const safeUsedPct = Number(usedPct) || 0;
149
149
  const stoppedAt = `context exhaustion at ${safeUsedPct}% (${new Date().toISOString().split('T')[0]})`;
@@ -6,7 +6,8 @@
6
6
  const fs = require('fs');
7
7
  const path = require('path');
8
8
  const os = require('os');
9
- const { isSemverNewer } = require('../get-shit-done/bin/lib/semver-compare.cjs');
9
+ const { isSemverNewer } = require('../gsd-core/bin/lib/semver-compare.cjs');
10
+ const { PACKAGE_NAME, updateCacheFileName } = require('../gsd-core/bin/lib/package-identity.cjs');
10
11
 
11
12
  // --- Config + last-command readers ------------------------------------------
12
13
 
@@ -395,32 +396,22 @@ function runStatusline() {
395
396
  const gsdStateStr = task ? '' : formatGsdState(readGsdState(dir) || {});
396
397
 
397
398
  // GSD update available?
398
- // Check shared cache first (#1421), fall back to runtime-specific cache for
399
- // backward compatibility with older gsd-check-update.js versions.
399
+ // Read only the per-package shared cache file (#607). The legacy
400
+ // runtime-specific fallback has been removed — the per-package filename
401
+ // carries lineage and avoids multi-runtime resolution mismatches (#1421).
400
402
  let gsdUpdate = '';
401
- const sharedCacheFile = path.join(homeDir, '.cache', 'gsd', 'gsd-update-check.json');
402
- const legacyCacheFile = path.join(claudeDir, 'cache', 'gsd-update-check.json');
403
- const cacheFile = fs.existsSync(sharedCacheFile) ? sharedCacheFile : legacyCacheFile;
403
+ const cacheFile = path.join(homeDir, '.cache', 'gsd', updateCacheFileName);
404
404
  if (fs.existsSync(cacheFile)) {
405
405
  try {
406
406
  const cache = JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
407
- if (cache.update_available) {
407
+ const { showUpdate, staleWarning } = evaluateUpdateCache(cache);
408
+ if (showUpdate) {
408
409
  gsdUpdate = '\x1b[33m⬆ /gsd:update\x1b[0m │ ';
409
410
  }
410
- if (cache.stale_hooks && cache.stale_hooks.length > 0) {
411
- // If installed version is ahead of npm latest, this is a dev install.
412
- // Running /gsd:update would downgrade — show a contextual warning instead.
413
- const isDevInstall = (
414
- cache.installed &&
415
- cache.latest &&
416
- cache.latest !== 'unknown' &&
417
- isInstalledAheadOfLatest(cache.installed, cache.latest)
418
- );
419
- if (isDevInstall) {
420
- gsdUpdate += '\x1b[33m⚠ dev install — re-run installer to sync hooks\x1b[0m │ ';
421
- } else {
422
- gsdUpdate += '\x1b[31m⚠ stale hooks — run /gsd:update\x1b[0m │ ';
423
- }
411
+ if (staleWarning === 'dev') {
412
+ gsdUpdate += '\x1b[33m⚠ dev install — re-run installer to sync hooks\x1b[0m │ ';
413
+ } else if (staleWarning === 'stale') {
414
+ gsdUpdate += '\x1b[31m⚠ stale hooks — run /gsd:update\x1b[0m │ ';
424
415
  }
425
416
  } catch (e) {}
426
417
  }
@@ -507,12 +498,39 @@ function isInstalledAheadOfLatest(installed, latest) {
507
498
  return isSemverNewer(installed, latest);
508
499
  }
509
500
 
501
+ /**
502
+ * Pure function: evaluate an update-check cache object and return display flags.
503
+ * Applies lineage guard — if package_name is absent or foreign, treats cache as absent.
504
+ *
505
+ * @param {object|null} cache Parsed cache object, or null.
506
+ * @returns {{ showUpdate: boolean, staleWarning: 'none'|'dev'|'stale' }}
507
+ */
508
+ function evaluateUpdateCache(cache) {
509
+ const none = { showUpdate: false, staleWarning: 'none' };
510
+ if (!cache) return none;
511
+ // Lineage guard: package_name must be present and match this package.
512
+ if (!cache.package_name || cache.package_name !== PACKAGE_NAME) return none;
513
+ const showUpdate = Boolean(cache.update_available);
514
+ let staleWarning = 'none';
515
+ if (cache.stale_hooks && cache.stale_hooks.length > 0) {
516
+ const isDevInstall = (
517
+ cache.installed &&
518
+ cache.latest &&
519
+ cache.latest !== 'unknown' &&
520
+ isInstalledAheadOfLatest(cache.installed, cache.latest)
521
+ );
522
+ staleWarning = isDevInstall ? 'dev' : 'stale';
523
+ }
524
+ return { showUpdate, staleWarning };
525
+ }
526
+
510
527
  // Export helpers for unit tests. Harmless when run as a script.
511
528
  module.exports = {
512
529
  readGsdState, parseStateMd, formatGsdState,
513
530
  readGsdConfig, getConfigValue, readLastSlashCommand,
514
531
  composeStatusline,
515
532
  isInstalledAheadOfLatest,
533
+ evaluateUpdateCache,
516
534
  };
517
535
 
518
536
  /**
@@ -2,7 +2,7 @@
2
2
  // gsd-hook-version: {{GSD_VERSION}}
3
3
  // SessionStart banner that surfaces GSD update availability when GSD's
4
4
  // statusline isn't installed. Reads the cache that
5
- // gsd-check-update-worker.js writes to ~/.cache/gsd/gsd-update-check.json.
5
+ // gsd-check-update-worker.js writes to ~/.cache/gsd/<updateCacheFileName> (per-package).
6
6
  //
7
7
  // Opt-in by design: bin/install.js only registers this hook when the user
8
8
  // declines to install (or replace) the GSD statusline. The presence of the
@@ -15,6 +15,7 @@
15
15
  const fs = require('fs');
16
16
  const path = require('path');
17
17
  const os = require('os');
18
+ const { PACKAGE_NAME, updateCacheFileName } = require('../gsd-core/bin/lib/package-identity.cjs');
18
19
 
19
20
  // Suppress repeat parse-error banners for 24 hours so a genuinely broken
20
21
  // cache file doesn't nag the user every session.
@@ -37,6 +38,9 @@ function buildBannerOutput(state) {
37
38
  return { systemMessage: 'GSD update check failed.' };
38
39
  }
39
40
  if (!cache) return null;
41
+ // Lineage guard: package_name must be present and match this package.
42
+ // Absent package_name means the cache predates lineage tracking — treat as untrusted.
43
+ if (!cache.package_name || cache.package_name !== PACKAGE_NAME) return null;
40
44
  if (!cache.update_available) return null;
41
45
  const installed = cache.installed || 'unknown';
42
46
  const latest = cache.latest || 'unknown';
@@ -96,7 +100,7 @@ function recordFailureWarning(sentinelFile, nowSeconds) {
96
100
 
97
101
  function main() {
98
102
  const cacheDir = path.join(os.homedir(), '.cache', 'gsd');
99
- const cacheFile = path.join(cacheDir, 'gsd-update-check.json');
103
+ const cacheFile = path.join(cacheDir, updateCacheFileName);
100
104
  const sentinelFile = path.join(cacheDir, 'banner-failure-warned-at');
101
105
  const now = Math.floor(Date.now() / 1000);
102
106
 
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Authoritative list of GSD-managed hook files.
5
+ *
6
+ * Extracted from the worker script into a shared CJS module so that:
7
+ * 1. gsd-check-update-worker.js can require() it directly (no source-level
8
+ * duplication).
9
+ * 2. Tests can assert against the exported array instead of regex-parsing
10
+ * the worker source (retiring the pending-migration-to-typed-ir token
11
+ * on managed-hooks.test.cjs and orphaned-hooks.test.cjs, per #455).
12
+ *
13
+ * These are the files GSD ships into ~/.claude/hooks/ (or equivalent) and
14
+ * checks for staleness after an update. Orphaned files from removed features
15
+ * (e.g., gsd-intel-*.js) must NOT be listed here — that would cause permanent
16
+ * stale warnings for users who haven't cleaned up manually (#1750).
17
+ */
18
+ const MANAGED_HOOKS = [
19
+ 'gsd-check-update-worker.js',
20
+ 'gsd-check-update.js',
21
+ 'gsd-context-monitor.js',
22
+ 'gsd-graphify-update.sh',
23
+ 'gsd-phase-boundary.sh',
24
+ 'gsd-prompt-guard.js',
25
+ 'gsd-read-guard.js',
26
+ 'gsd-read-injection-scanner.js',
27
+ 'gsd-session-state.sh',
28
+ 'gsd-statusline.js',
29
+ 'gsd-update-banner.js',
30
+ 'gsd-validate-commit.sh',
31
+ 'gsd-workflow-guard.js',
32
+ 'gsd-worktree-path-guard.js',
33
+ ];
34
+
35
+ module.exports = { MANAGED_HOOKS };
@@ -11,17 +11,29 @@
11
11
 
12
12
  const fs = require('fs');
13
13
  const path = require('path');
14
- const { isSemverNewer } = require('../get-shit-done/bin/lib/semver-compare.cjs');
14
+ const { isSemverNewer } = require('../gsd-core/bin/lib/semver-compare.cjs');
15
15
  // Latest-version lookup is delegated to the single deterministic adapter
16
16
  // (#498). checkLatestVersion() owns the npm-view call, the timeout/semver
17
17
  // policy, and the package name — sourced from the baked Package Identity seam.
18
18
  // The previous `require('../package.json').name` (#378) resolved to undefined
19
19
  // in the installed tree (only a {"type":"commonjs"} marker ships), so the
20
20
  // background check never reported updates.
21
- const { checkLatestVersion } = require('../get-shit-done/bin/check-latest-version.cjs');
21
+ const { checkLatestVersion } = require('../gsd-core/bin/check-latest-version.cjs');
22
+ const { PACKAGE_NAME } = require('../gsd-core/bin/lib/package-identity.cjs');
22
23
  // Authoritative list of managed hooks — shared with tests to retire source-grep
23
24
  // assertions (pending-migration-to-typed-ir [#455]).
24
- const { MANAGED_HOOKS } = require('./managed-hooks-registry.cjs');
25
+ // NOTE: managed-hooks-registry.cjs must be in HOOKS_TO_COPY (scripts/build-hooks.js)
26
+ // so it is present in hooks/dist/ and ships to the installed runtime hooks/ dir.
27
+ // If it is missing (e.g., installed from an older dist), catch and degrade gracefully
28
+ // so the worker always proceeds to compute and write the result cache record.
29
+ let MANAGED_HOOKS = [];
30
+ try {
31
+ ({ MANAGED_HOOKS } = require('./managed-hooks-registry.cjs'));
32
+ } catch (e) {
33
+ // Module not found in installed runtime — stale-hook detection degrades to
34
+ // no-op (empty list means no hooks are checked for staleness). The worker
35
+ // still runs and writes package_name / installed / latest / update_available.
36
+ }
25
37
 
26
38
  const cacheFile = process.env.GSD_CACHE_FILE;
27
39
  const projectVersionFile = process.env.GSD_PROJECT_VERSION_FILE;
@@ -88,6 +100,7 @@ const result = {
88
100
  latest: latest || 'unknown',
89
101
  checked: Math.floor(Date.now() / 1000),
90
102
  stale_hooks: staleHooks.length > 0 ? staleHooks : undefined,
103
+ package_name: PACKAGE_NAME,
91
104
  };
92
105
 
93
106
  if (cacheFile) {
@@ -8,6 +8,8 @@ const path = require('path');
8
8
  const os = require('os');
9
9
  const { spawn } = require('child_process');
10
10
 
11
+ const { updateCacheFileName } = require('../gsd-core/bin/lib/package-identity.cjs');
12
+
11
13
  const homeDir = os.homedir();
12
14
  const cwd = process.cwd();
13
15
 
@@ -16,11 +18,11 @@ const cwd = process.cwd();
16
18
  function detectConfigDir(baseDir) {
17
19
  // Check env override first (supports multi-account setups)
18
20
  const envDir = process.env.CLAUDE_CONFIG_DIR;
19
- if (envDir && fs.existsSync(path.join(envDir, 'get-shit-done', 'VERSION'))) {
21
+ if (envDir && fs.existsSync(path.join(envDir, 'gsd-core', 'VERSION'))) {
20
22
  return envDir;
21
23
  }
22
24
  for (const dir of ['.claude', '.gemini', '.config/kilo', '.kilo', '.config/opencode', '.opencode']) {
23
- if (fs.existsSync(path.join(baseDir, dir, 'get-shit-done', 'VERSION'))) {
25
+ if (fs.existsSync(path.join(baseDir, dir, 'gsd-core', 'VERSION'))) {
24
26
  return path.join(baseDir, dir);
25
27
  }
26
28
  }
@@ -33,11 +35,11 @@ const projectConfigDir = detectConfigDir(cwd);
33
35
  // resolution mismatches where check-update writes to one runtime's cache
34
36
  // but statusline reads from another (#1421).
35
37
  const cacheDir = path.join(homeDir, '.cache', 'gsd');
36
- const cacheFile = path.join(cacheDir, 'gsd-update-check.json');
38
+ const cacheFile = path.join(cacheDir, updateCacheFileName);
37
39
 
38
40
  // VERSION file locations (check project first, then global)
39
- const projectVersionFile = path.join(projectConfigDir, 'get-shit-done', 'VERSION');
40
- const globalVersionFile = path.join(globalConfigDir, 'get-shit-done', 'VERSION');
41
+ const projectVersionFile = path.join(projectConfigDir, 'gsd-core', 'VERSION');
42
+ const globalVersionFile = path.join(globalConfigDir, 'gsd-core', 'VERSION');
41
43
 
42
44
  // Ensure cache directory exists
43
45
  if (!fs.existsSync(cacheDir)) {
@@ -140,10 +140,10 @@ process.stdin.on('end', () => {
140
140
  if (isCritical && isGsdActive && !warnData.criticalRecorded) {
141
141
  try {
142
142
  // Runtime-agnostic path: this hook lives at <runtime-config>/hooks/
143
- // and gsd-tools.cjs lives at <runtime-config>/get-shit-done/bin/.
143
+ // and gsd-tools.cjs lives at <runtime-config>/gsd-core/bin/.
144
144
  // Using __dirname makes this work on Claude Code, OpenCode, Gemini,
145
145
  // Kilo, etc. without hardcoding ~/.claude/.
146
- const gsdTools = path.join(__dirname, '..', 'get-shit-done', 'bin', 'gsd-tools.cjs');
146
+ const gsdTools = path.join(__dirname, '..', 'gsd-core', 'bin', 'gsd-tools.cjs');
147
147
  // Coerce usedPct to a safe number in case bridge file is malformed
148
148
  const safeUsedPct = Number(usedPct) || 0;
149
149
  const stoppedAt = `context exhaustion at ${safeUsedPct}% (${new Date().toISOString().split('T')[0]})`;
@@ -6,7 +6,8 @@
6
6
  const fs = require('fs');
7
7
  const path = require('path');
8
8
  const os = require('os');
9
- const { isSemverNewer } = require('../get-shit-done/bin/lib/semver-compare.cjs');
9
+ const { isSemverNewer } = require('../gsd-core/bin/lib/semver-compare.cjs');
10
+ const { PACKAGE_NAME, updateCacheFileName } = require('../gsd-core/bin/lib/package-identity.cjs');
10
11
 
11
12
  // --- Config + last-command readers ------------------------------------------
12
13
 
@@ -395,32 +396,22 @@ function runStatusline() {
395
396
  const gsdStateStr = task ? '' : formatGsdState(readGsdState(dir) || {});
396
397
 
397
398
  // GSD update available?
398
- // Check shared cache first (#1421), fall back to runtime-specific cache for
399
- // backward compatibility with older gsd-check-update.js versions.
399
+ // Read only the per-package shared cache file (#607). The legacy
400
+ // runtime-specific fallback has been removed — the per-package filename
401
+ // carries lineage and avoids multi-runtime resolution mismatches (#1421).
400
402
  let gsdUpdate = '';
401
- const sharedCacheFile = path.join(homeDir, '.cache', 'gsd', 'gsd-update-check.json');
402
- const legacyCacheFile = path.join(claudeDir, 'cache', 'gsd-update-check.json');
403
- const cacheFile = fs.existsSync(sharedCacheFile) ? sharedCacheFile : legacyCacheFile;
403
+ const cacheFile = path.join(homeDir, '.cache', 'gsd', updateCacheFileName);
404
404
  if (fs.existsSync(cacheFile)) {
405
405
  try {
406
406
  const cache = JSON.parse(fs.readFileSync(cacheFile, 'utf8'));
407
- if (cache.update_available) {
407
+ const { showUpdate, staleWarning } = evaluateUpdateCache(cache);
408
+ if (showUpdate) {
408
409
  gsdUpdate = '\x1b[33m⬆ /gsd:update\x1b[0m │ ';
409
410
  }
410
- if (cache.stale_hooks && cache.stale_hooks.length > 0) {
411
- // If installed version is ahead of npm latest, this is a dev install.
412
- // Running /gsd:update would downgrade — show a contextual warning instead.
413
- const isDevInstall = (
414
- cache.installed &&
415
- cache.latest &&
416
- cache.latest !== 'unknown' &&
417
- isInstalledAheadOfLatest(cache.installed, cache.latest)
418
- );
419
- if (isDevInstall) {
420
- gsdUpdate += '\x1b[33m⚠ dev install — re-run installer to sync hooks\x1b[0m │ ';
421
- } else {
422
- gsdUpdate += '\x1b[31m⚠ stale hooks — run /gsd:update\x1b[0m │ ';
423
- }
411
+ if (staleWarning === 'dev') {
412
+ gsdUpdate += '\x1b[33m⚠ dev install — re-run installer to sync hooks\x1b[0m │ ';
413
+ } else if (staleWarning === 'stale') {
414
+ gsdUpdate += '\x1b[31m⚠ stale hooks — run /gsd:update\x1b[0m │ ';
424
415
  }
425
416
  } catch (e) {}
426
417
  }
@@ -507,12 +498,39 @@ function isInstalledAheadOfLatest(installed, latest) {
507
498
  return isSemverNewer(installed, latest);
508
499
  }
509
500
 
501
+ /**
502
+ * Pure function: evaluate an update-check cache object and return display flags.
503
+ * Applies lineage guard — if package_name is absent or foreign, treats cache as absent.
504
+ *
505
+ * @param {object|null} cache Parsed cache object, or null.
506
+ * @returns {{ showUpdate: boolean, staleWarning: 'none'|'dev'|'stale' }}
507
+ */
508
+ function evaluateUpdateCache(cache) {
509
+ const none = { showUpdate: false, staleWarning: 'none' };
510
+ if (!cache) return none;
511
+ // Lineage guard: package_name must be present and match this package.
512
+ if (!cache.package_name || cache.package_name !== PACKAGE_NAME) return none;
513
+ const showUpdate = Boolean(cache.update_available);
514
+ let staleWarning = 'none';
515
+ if (cache.stale_hooks && cache.stale_hooks.length > 0) {
516
+ const isDevInstall = (
517
+ cache.installed &&
518
+ cache.latest &&
519
+ cache.latest !== 'unknown' &&
520
+ isInstalledAheadOfLatest(cache.installed, cache.latest)
521
+ );
522
+ staleWarning = isDevInstall ? 'dev' : 'stale';
523
+ }
524
+ return { showUpdate, staleWarning };
525
+ }
526
+
510
527
  // Export helpers for unit tests. Harmless when run as a script.
511
528
  module.exports = {
512
529
  readGsdState, parseStateMd, formatGsdState,
513
530
  readGsdConfig, getConfigValue, readLastSlashCommand,
514
531
  composeStatusline,
515
532
  isInstalledAheadOfLatest,
533
+ evaluateUpdateCache,
516
534
  };
517
535
 
518
536
  /**
@@ -2,7 +2,7 @@
2
2
  // gsd-hook-version: {{GSD_VERSION}}
3
3
  // SessionStart banner that surfaces GSD update availability when GSD's
4
4
  // statusline isn't installed. Reads the cache that
5
- // gsd-check-update-worker.js writes to ~/.cache/gsd/gsd-update-check.json.
5
+ // gsd-check-update-worker.js writes to ~/.cache/gsd/<updateCacheFileName> (per-package).
6
6
  //
7
7
  // Opt-in by design: bin/install.js only registers this hook when the user
8
8
  // declines to install (or replace) the GSD statusline. The presence of the
@@ -15,6 +15,7 @@
15
15
  const fs = require('fs');
16
16
  const path = require('path');
17
17
  const os = require('os');
18
+ const { PACKAGE_NAME, updateCacheFileName } = require('../gsd-core/bin/lib/package-identity.cjs');
18
19
 
19
20
  // Suppress repeat parse-error banners for 24 hours so a genuinely broken
20
21
  // cache file doesn't nag the user every session.
@@ -37,6 +38,9 @@ function buildBannerOutput(state) {
37
38
  return { systemMessage: 'GSD update check failed.' };
38
39
  }
39
40
  if (!cache) return null;
41
+ // Lineage guard: package_name must be present and match this package.
42
+ // Absent package_name means the cache predates lineage tracking — treat as untrusted.
43
+ if (!cache.package_name || cache.package_name !== PACKAGE_NAME) return null;
40
44
  if (!cache.update_available) return null;
41
45
  const installed = cache.installed || 'unknown';
42
46
  const latest = cache.latest || 'unknown';
@@ -96,7 +100,7 @@ function recordFailureWarning(sentinelFile, nowSeconds) {
96
100
 
97
101
  function main() {
98
102
  const cacheDir = path.join(os.homedir(), '.cache', 'gsd');
99
- const cacheFile = path.join(cacheDir, 'gsd-update-check.json');
103
+ const cacheFile = path.join(cacheDir, updateCacheFileName);
100
104
  const sentinelFile = path.join(cacheDir, 'banner-failure-warned-at');
101
105
  const now = Math.floor(Date.now() / 1000);
102
106
 
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@opengsd/gsd-core",
3
- "version": "1.3.0-rc.1",
3
+ "version": "1.3.0",
4
4
  "description": "GSD Core is a meta-prompting, context engineering, and spec-driven development system for AI coding agents.",
5
5
  "bin": {
6
6
  "gsd-core": "bin/install.js",
7
- "gsd-tools": "get-shit-done/bin/gsd-tools.cjs"
7
+ "gsd-tools": "gsd-core/bin/gsd-tools.cjs"
8
8
  },
9
9
  "files": [
10
10
  "bin",
11
11
  "commands",
12
- "get-shit-done",
12
+ "gsd-core",
13
13
  "assets",
14
14
  "agents",
15
15
  "hooks",
@@ -27,7 +27,7 @@
27
27
  "codex",
28
28
  "codex-cli"
29
29
  ],
30
- "author": "TÂCHES",
30
+ "author": "OpenGSD",
31
31
  "license": "MIT",
32
32
  "repository": {
33
33
  "type": "git",
@@ -51,6 +51,7 @@
51
51
  "devDependencies": {
52
52
  "@eslint/js": "^9.39.4",
53
53
  "@stryker-mutator/core": "^9.6.1",
54
+ "@types/node": "^22.19.19",
54
55
  "c8": "^11.0.0",
55
56
  "eslint": "^9.39.4",
56
57
  "eslint-plugin-n": "^17.24.0",
@@ -75,6 +76,7 @@
75
76
  "build:lib": "tsc -p tsconfig.build.json",
76
77
  "generate:identity": "node scripts/generate-package-identity.cjs",
77
78
  "prepack": "npm run build:lib",
79
+ "prepare": "npm run build:lib",
78
80
  "prepublishOnly": "npm run build:lib && npm run build:hooks",
79
81
  "pretest": "npm run build:lib && npm run lint:skill-deps",
80
82
  "pretest:coverage": "npm run build:lib && npm run lint:skill-deps",
@@ -86,6 +88,7 @@
86
88
  "lint:pr-checks": "node scripts/lint-pr-check-project-dir.cjs",
87
89
  "lint:changeset": "node scripts/changeset/lint.cjs",
88
90
  "lint:docs": "node scripts/lint-docs-required.cjs",
91
+ "lint:legacy-name": "node scripts/lint-legacy-dir-name.cjs",
89
92
  "ci:test-scope": "node scripts/ci-test-scope.cjs",
90
93
  "changeset": "node scripts/changeset/new.cjs",
91
94
  "changelog:render": "node scripts/changeset/cli.cjs render",
@@ -96,8 +99,8 @@
96
99
  "test:security": "node scripts/run-tests.cjs --suite security",
97
100
  "test:slow": "node scripts/run-tests.cjs --suite slow",
98
101
  "test:affected": "node scripts/run-affected-tests.cjs",
99
- "test:coverage": "c8 --check-coverage --lines 70 --reporter text --include 'get-shit-done/bin/lib/*.cjs' --exclude 'tests/**' --all node scripts/run-tests.cjs",
100
- "test:coverage:unit": "c8 --check-coverage --lines 70 --reporter text --include 'get-shit-done/bin/lib/*.cjs' --exclude 'tests/**' --all node scripts/run-tests.cjs --suite unit",
102
+ "test:coverage": "c8 --check-coverage --lines 70 --reporter text --include 'gsd-core/bin/lib/*.cjs' --exclude 'tests/**' --all node scripts/run-tests.cjs",
103
+ "test:coverage:unit": "c8 --check-coverage --lines 70 --reporter text --include 'gsd-core/bin/lib/*.cjs' --exclude 'tests/**' --all node scripts/run-tests.cjs --suite unit",
101
104
  "test:coverage:all": "npm run test:coverage",
102
105
  "test:mutation": "stryker run",
103
106
  "test:mutation:since": "stryker run --incremental --since origin/next"
@@ -25,7 +25,7 @@ const PR_FULL_SUITES = ['unit', 'integration', 'security'];
25
25
  // Relative to repoRoot. We walk these to discover SUT-internal requires so that
26
26
  // a change to a deep helper propagates through re-export chains to tests.
27
27
  const SOURCE_TREES = [
28
- 'get-shit-done/bin/lib',
28
+ 'gsd-core/bin/lib',
29
29
  'bin/lib',
30
30
  'bin',
31
31
  'scripts',
@@ -217,6 +217,18 @@ extract_and_check_blobs() {
217
217
  local found=0
218
218
  local line_num=0
219
219
 
220
+ # Skip binary-by-content files (e.g. adversarial parser fixtures with embedded
221
+ # non-UTF8 / NUL bytes). They cannot meaningfully carry base64-obfuscated *text*,
222
+ # and feeding NUL bytes through the per-line scanner spawns thousands of bogus
223
+ # `base64 -d` subprocesses (the "ignored null byte" warnings) — slow enough to
224
+ # blow the job timeout on a large diff. `grep -Iq .` treats a binary file as
225
+ # non-matching, so this skips it with a coverage notice (collect_files already
226
+ # filters binary *extensions*; this catches binary *content* in text extensions).
227
+ if ! LC_ALL=C grep -Iq . "$file" 2>/dev/null; then
228
+ echo "SKIP: $file (binary content — base64 text scan not applicable)" >&2
229
+ return 0
230
+ fi
231
+
220
232
  while IFS= read -r line; do
221
233
  line_num=$((line_num + 1))
222
234
 
@@ -26,6 +26,9 @@ const STAGE_DIR = path.join(HOOKS_DIR, `.dist-staging-${process.pid}`);
26
26
  const HOOKS_TO_COPY = [
27
27
  'gsd-check-update-worker.js',
28
28
  'gsd-check-update.js',
29
+ // Required by gsd-check-update-worker.js at runtime — must ship alongside it
30
+ // so require('./managed-hooks-registry.cjs') resolves in the installed hooks/ dir.
31
+ 'managed-hooks-registry.cjs',
29
32
  'gsd-context-monitor.js',
30
33
  'gsd-prompt-guard.js',
31
34
  'gsd-read-guard.js',
@@ -234,4 +237,4 @@ if (require.main === module) {
234
237
  build();
235
238
  }
236
239
 
237
- module.exports = { HOOKS_TO_COPY };
240
+ module.exports = { HOOKS_TO_COPY, HOOKS_SUBDIRS_TO_COPY };
@@ -24,8 +24,8 @@ const { renderGithubReleaseNotes } = require('./github-release-notes.cjs');
24
24
  const {
25
25
  compareSemverCore,
26
26
  isStableTripletSemver,
27
- } = require('../../get-shit-done/bin/lib/semver-compare.cjs');
28
- const { packageName, repoSlug: defaultRepoSlug } = require('../../get-shit-done/bin/lib/package-identity.cjs');
27
+ } = require('../../gsd-core/bin/lib/semver-compare.cjs');
28
+ const { packageName, repoSlug: defaultRepoSlug } = require('../../gsd-core/bin/lib/package-identity.cjs');
29
29
 
30
30
  function parseArgs(argv) {
31
31
  const opts = {
@@ -4,7 +4,7 @@ const cp = require('node:child_process');
4
4
  const path = require('node:path');
5
5
 
6
6
  const { parseFragment } = require('./parse.cjs');
7
- const { packageName, repoSlug: defaultRepoSlug } = require('../../get-shit-done/bin/lib/package-identity.cjs');
7
+ const { packageName, repoSlug: defaultRepoSlug } = require('../../gsd-core/bin/lib/package-identity.cjs');
8
8
 
9
9
  const SECTION_ORDER = ['Fixed', 'Added', 'Changed', 'Deprecated', 'Removed', 'Security'];
10
10
 
@@ -25,7 +25,7 @@ const OPT_OUT_LABEL = 'no-changelog';
25
25
  // fragment or an explicit opt-out label. Test/CI/docs/lock files do not.
26
26
  const USER_FACING_PREFIXES = [
27
27
  'bin/',
28
- 'get-shit-done/',
28
+ 'gsd-core/',
29
29
  'agents/',
30
30
  'commands/',
31
31
  'hooks/',