@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,342 @@
1
+ "use strict";
2
+ /**
3
+ * Check subcommand router — auto-mode, decision-coverage-plan, decision-coverage-verify.
4
+ *
5
+ * ADR-457 build-at-publish: the hand-written bin/lib/check-command-router.cjs collapsed
6
+ * to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour
7
+ * from the prior hand-written .cjs; only strict types are added.
8
+ */
9
+ var __importDefault = (this && this.__importDefault) || function (mod) {
10
+ return (mod && mod.__esModule) ? mod : { "default": mod };
11
+ };
12
+ const node_fs_1 = __importDefault(require("node:fs"));
13
+ const node_path_1 = __importDefault(require("node:path"));
14
+ const node_child_process_1 = require("node:child_process");
15
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
16
+ const core = require("./core.cjs");
17
+ const { output, error, ERROR_REASON } = core;
18
+ const decisions_cjs_1 = require("./decisions.cjs");
19
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
20
+ function normalizePhrase(text) {
21
+ // eslint-disable-next-line @typescript-eslint/no-base-to-string
22
+ return String(text || '')
23
+ .toLowerCase()
24
+ .replace(/[^a-z0-9\s]/g, ' ')
25
+ .replace(/\s+/g, ' ')
26
+ .trim();
27
+ }
28
+ const SOFT_PHRASE_MIN_WORDS = 6;
29
+ function softPhrase(text) {
30
+ const words = normalizePhrase(text).split(' ').filter(Boolean);
31
+ if (words.length < SOFT_PHRASE_MIN_WORDS)
32
+ return '';
33
+ return words.slice(0, SOFT_PHRASE_MIN_WORDS).join(' ');
34
+ }
35
+ function decisionMentioned(haystack, decision) {
36
+ if (!haystack)
37
+ return false;
38
+ if (new RegExp(`\\b${decision.id}\\b`).test(haystack))
39
+ return true;
40
+ const phrase = softPhrase(decision.text);
41
+ return phrase ? normalizePhrase(haystack).includes(phrase) : false;
42
+ }
43
+ function readIfExists(filePath) {
44
+ try {
45
+ return node_fs_1.default.readFileSync(filePath, 'utf-8');
46
+ }
47
+ catch {
48
+ return '';
49
+ }
50
+ }
51
+ function resolvePath(inputPath, projectDir) {
52
+ return node_path_1.default.isAbsolute(inputPath) ? inputPath : node_path_1.default.join(projectDir, inputPath);
53
+ }
54
+ function readWorkflowConfig(projectDir) {
55
+ const configPath = node_path_1.default.join(projectDir, '.planning', 'config.json');
56
+ try {
57
+ const parsed = JSON.parse(node_fs_1.default.readFileSync(configPath, 'utf-8'));
58
+ const wf = parsed['workflow'] || {};
59
+ return {
60
+ ...wf,
61
+ auto_advance: (wf['auto_advance'] ?? parsed['auto_advance']),
62
+ _auto_chain_active: (wf['_auto_chain_active'] ?? parsed['_auto_chain_active']),
63
+ context_coverage_gate: (wf['context_coverage_gate'] ?? parsed['context_coverage_gate']),
64
+ };
65
+ }
66
+ catch {
67
+ return {};
68
+ }
69
+ }
70
+ function cmdAutoMode(projectDir, raw) {
71
+ const workflow = readWorkflowConfig(projectDir);
72
+ const autoAdvance = Boolean(workflow.auto_advance ?? false);
73
+ const autoChainActive = Boolean(workflow._auto_chain_active ?? false);
74
+ let source = 'none';
75
+ if (autoChainActive && autoAdvance)
76
+ source = 'both';
77
+ else if (autoChainActive)
78
+ source = 'auto_chain';
79
+ else if (autoAdvance)
80
+ source = 'auto_advance';
81
+ output({
82
+ active: autoChainActive || autoAdvance,
83
+ source,
84
+ auto_chain_active: autoChainActive,
85
+ auto_advance: autoAdvance,
86
+ }, raw, undefined);
87
+ }
88
+ function gateEnabled(projectDir) {
89
+ const value = readWorkflowConfig(projectDir).context_coverage_gate;
90
+ if (typeof value === 'boolean')
91
+ return value;
92
+ if (typeof value === 'string') {
93
+ const lower = value.toLowerCase();
94
+ if (lower === 'false' || lower === 'true')
95
+ return lower !== 'false';
96
+ }
97
+ return true;
98
+ }
99
+ function loadPlanContents(phaseDir) {
100
+ if (!node_fs_1.default.existsSync(phaseDir))
101
+ return [];
102
+ try {
103
+ return node_fs_1.default.readdirSync(phaseDir)
104
+ .filter((entry) => /-PLAN\.md$/.test(entry))
105
+ .map((entry) => readIfExists(node_path_1.default.join(phaseDir, entry)));
106
+ }
107
+ catch {
108
+ return [];
109
+ }
110
+ }
111
+ const DESIGNATED_HEADINGS_RE = /^#{1,6}\s+(?:must[_ ]haves?|truths?|tasks?|objective)\b/i;
112
+ const XML_DECISION_TAGS_RE = /<(?:objective|tasks?|action)(?:\s[^>]*)?>([\s\S]*?)<\/(?:objective|tasks?|action)>/gi;
113
+ function stripCommentsAndFences(text) {
114
+ return text
115
+ .replace(/<!--[\s\S]*?-->/g, ' ')
116
+ .replace(/```[\s\S]*?```/g, ' ')
117
+ .replace(/~~~[\s\S]*?~~~/g, ' ');
118
+ }
119
+ function extractYamlBlock(frontmatter, key) {
120
+ const match = frontmatter.match(new RegExp(`^${key}\\s*:(.*)$`, 'm'));
121
+ if (!match)
122
+ return '';
123
+ const startIdx = (match.index || 0) + match[0].length;
124
+ const rest = frontmatter.slice(startIdx + 1).split(/\r?\n/);
125
+ const block = [match[1] || ''];
126
+ for (const line of rest) {
127
+ if (line === '' || /^\s/.test(line))
128
+ block.push(line);
129
+ else
130
+ break;
131
+ }
132
+ return block.join('\n');
133
+ }
134
+ function extractXmlTagBodies(text) {
135
+ const parts = [];
136
+ for (const match of text.matchAll(XML_DECISION_TAGS_RE)) {
137
+ if (match[1])
138
+ parts.push(match[1]);
139
+ }
140
+ return parts.join('\n');
141
+ }
142
+ function extractPlanDesignatedSections(planContent) {
143
+ if (!planContent)
144
+ return '';
145
+ const cleaned = stripCommentsAndFences(planContent);
146
+ const fmMatch = cleaned.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
147
+ const frontmatter = fmMatch ? fmMatch[1] : '';
148
+ const body = fmMatch ? fmMatch[2] : cleaned;
149
+ const parts = [];
150
+ for (const key of ['must_haves', 'truths', 'objective']) {
151
+ const block = extractYamlBlock(frontmatter, key);
152
+ if (block)
153
+ parts.push(block);
154
+ }
155
+ const bodyParts = [];
156
+ let inDesignated = false;
157
+ for (const line of body.split(/\r?\n/)) {
158
+ const heading = /^#{1,6}\s+/.test(line);
159
+ if (heading) {
160
+ inDesignated = DESIGNATED_HEADINGS_RE.test(line);
161
+ if (inDesignated)
162
+ bodyParts.push(line);
163
+ continue;
164
+ }
165
+ if (inDesignated)
166
+ bodyParts.push(line);
167
+ }
168
+ parts.push(bodyParts.join('\n'));
169
+ parts.push(extractXmlTagBodies(cleaned));
170
+ return parts.join('\n\n');
171
+ }
172
+ function buildPlanMessage(uncovered) {
173
+ if (uncovered.length === 0)
174
+ return 'All trackable CONTEXT.md decisions are covered by plans.';
175
+ return [
176
+ '## Decision Coverage Gap',
177
+ '',
178
+ `${uncovered.length} CONTEXT.md decision(s) are not covered by any plan:`,
179
+ '',
180
+ ...uncovered.map((item) => `- **${item.id}** (${item.category || 'uncategorized'}): ${item.text}`),
181
+ '',
182
+ 'Resolve by citing `D-NN:` in a relevant plan\'s `must_haves`/`truths` (or body),',
183
+ 'OR move the decision to `### Claude\'s Discretion` / tag it `[informational]` if it should not be tracked.',
184
+ ].join('\n');
185
+ }
186
+ function buildVerifyMessage(notHonored) {
187
+ if (notHonored.length === 0)
188
+ return 'All trackable CONTEXT.md decisions are honored by shipped artifacts.';
189
+ return [
190
+ '### Decision Coverage (warning)',
191
+ '',
192
+ `${notHonored.length} decision(s) not found in shipped artifacts:`,
193
+ '',
194
+ ...notHonored.map((item) => `- **${item.id}** (${item.category || 'uncategorized'}): ${item.text}`),
195
+ '',
196
+ 'This is a soft warning - verification status is unchanged.',
197
+ ].join('\n');
198
+ }
199
+ function loadTrackableDecisions(contextPath) {
200
+ return (0, decisions_cjs_1.parseDecisions)(readIfExists(contextPath)).filter((decision) => decision.trackable);
201
+ }
202
+ function cmdDecisionCoveragePlan(projectDir, args, raw) {
203
+ const phaseDir = args[2] ? resolvePath(args[2], projectDir) : '';
204
+ const contextPath = args[3] ? resolvePath(args[3], projectDir) : '';
205
+ if (!gateEnabled(projectDir)) {
206
+ output({ passed: true, skipped: true, reason: 'workflow.context_coverage_gate is false', total: 0, covered: 0, uncovered: [], message: 'Decision coverage gate disabled by config.' }, raw, undefined);
207
+ return;
208
+ }
209
+ if (!contextPath || !node_fs_1.default.existsSync(contextPath)) {
210
+ output({ passed: true, skipped: true, reason: 'CONTEXT.md missing', total: 0, covered: 0, uncovered: [], message: 'No CONTEXT.md - nothing to check.' }, raw, undefined);
211
+ return;
212
+ }
213
+ const decisions = loadTrackableDecisions(contextPath);
214
+ if (decisions.length === 0) {
215
+ output({ passed: true, skipped: true, reason: 'no trackable decisions', total: 0, covered: 0, uncovered: [], message: 'No trackable decisions in CONTEXT.md.' }, raw, undefined);
216
+ return;
217
+ }
218
+ const sections = loadPlanContents(phaseDir).map(extractPlanDesignatedSections);
219
+ const uncovered = [];
220
+ let covered = 0;
221
+ for (const decision of decisions) {
222
+ if (sections.some((section) => decisionMentioned(section, decision)))
223
+ covered++;
224
+ else
225
+ uncovered.push({ id: decision.id, text: decision.text, category: decision.category });
226
+ }
227
+ output({
228
+ passed: uncovered.length === 0,
229
+ skipped: false,
230
+ total: decisions.length,
231
+ covered,
232
+ uncovered,
233
+ message: buildPlanMessage(uncovered),
234
+ }, raw, undefined);
235
+ }
236
+ function recentCommitMessages(projectDir) {
237
+ try {
238
+ return (0, node_child_process_1.execFileSync)('git', ['log', '-n', '200', '--pretty=%s%n%b'], {
239
+ cwd: projectDir,
240
+ encoding: 'utf-8',
241
+ maxBuffer: 4 * 1024 * 1024,
242
+ });
243
+ }
244
+ catch {
245
+ return '';
246
+ }
247
+ }
248
+ function isInsideRoot(candidatePath, rootDir) {
249
+ const root = node_path_1.default.resolve(rootDir);
250
+ const target = node_path_1.default.resolve(root, candidatePath);
251
+ return target === root || target.startsWith(`${root}${node_path_1.default.sep}`);
252
+ }
253
+ function readModifiedFilesContent(projectDir, summaries) {
254
+ const out = [];
255
+ let total = 0;
256
+ for (const summary of summaries) {
257
+ if (!summary)
258
+ continue;
259
+ for (const blockMatch of summary.matchAll(/files_modified:\s*\n((?:[ \t]*-\s+.+\n?)+)/g)) {
260
+ const files = [...(blockMatch[1] || '').matchAll(/-\s+(.+)/g)]
261
+ .map((match) => match[1].trim().replace(/^["']|["']$/g, ''));
262
+ for (const file of files) {
263
+ if (total >= 50)
264
+ break;
265
+ if (!file || !isInsideRoot(file, projectDir))
266
+ continue;
267
+ const raw = readIfExists(resolvePath(file, projectDir));
268
+ out.push(raw.length > 256 * 1024 ? raw.slice(0, 256 * 1024) : raw);
269
+ total++;
270
+ }
271
+ if (total >= 50)
272
+ break;
273
+ }
274
+ if (total >= 50)
275
+ break;
276
+ }
277
+ return out.join('\n\n');
278
+ }
279
+ function cmdDecisionCoverageVerify(projectDir, args, raw) {
280
+ const phaseDir = args[2] ? resolvePath(args[2], projectDir) : '';
281
+ const contextPath = args[3] ? resolvePath(args[3], projectDir) : '';
282
+ if (!gateEnabled(projectDir)) {
283
+ output({ skipped: true, blocking: false, reason: 'workflow.context_coverage_gate is false', total: 0, honored: 0, not_honored: [], message: 'Decision coverage gate disabled by config.' }, raw, undefined);
284
+ return;
285
+ }
286
+ if (!contextPath || !node_fs_1.default.existsSync(contextPath)) {
287
+ output({ skipped: true, blocking: false, reason: 'CONTEXT.md missing', total: 0, honored: 0, not_honored: [], message: 'No CONTEXT.md - nothing to check.' }, raw, undefined);
288
+ return;
289
+ }
290
+ const decisions = loadTrackableDecisions(contextPath);
291
+ if (decisions.length === 0) {
292
+ output({ skipped: true, blocking: false, reason: 'no trackable decisions', total: 0, honored: 0, not_honored: [], message: 'No trackable decisions in CONTEXT.md.' }, raw, undefined);
293
+ return;
294
+ }
295
+ const planContents = loadPlanContents(phaseDir);
296
+ const summaryParts = node_fs_1.default.existsSync(phaseDir)
297
+ ? node_fs_1.default.readdirSync(phaseDir).filter((entry) => /-SUMMARY\.md$/.test(entry)).map((entry) => readIfExists(node_path_1.default.join(phaseDir, entry)))
298
+ : [];
299
+ const haystack = [
300
+ planContents.join('\n\n'),
301
+ summaryParts.join('\n\n'),
302
+ readModifiedFilesContent(projectDir, summaryParts),
303
+ recentCommitMessages(projectDir),
304
+ ].join('\n\n');
305
+ const notHonored = [];
306
+ let honored = 0;
307
+ for (const decision of decisions) {
308
+ if (decisionMentioned(haystack, decision))
309
+ honored++;
310
+ else
311
+ notHonored.push({ id: decision.id, text: decision.text, category: decision.category });
312
+ }
313
+ output({
314
+ skipped: false,
315
+ blocking: false,
316
+ total: decisions.length,
317
+ honored,
318
+ not_honored: notHonored,
319
+ message: buildVerifyMessage(notHonored),
320
+ }, raw, undefined);
321
+ }
322
+ function routeCheckCommand({ args, cwd, raw }) {
323
+ const subcommand = args[1];
324
+ if (subcommand === 'auto-mode') {
325
+ cmdAutoMode(cwd, raw);
326
+ return;
327
+ }
328
+ if (subcommand === 'decision-coverage-plan') {
329
+ cmdDecisionCoveragePlan(cwd, args, raw);
330
+ return;
331
+ }
332
+ if (subcommand === 'decision-coverage-verify') {
333
+ cmdDecisionCoverageVerify(cwd, args, raw);
334
+ return;
335
+ }
336
+ error('Unknown check subcommand. Available: auto-mode, decision-coverage-plan, decision-coverage-verify', ERROR_REASON.SDK_UNKNOWN_COMMAND);
337
+ }
338
+ module.exports = {
339
+ routeCheckCommand,
340
+ decisionMentioned,
341
+ extractPlanDesignatedSections,
342
+ };
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * CJS Command Router Adapter Module
4
+ *
5
+ * Compatibility routing for gsd-tools.cjs command families. Uses generated
6
+ * command metadata for availability and small family-local argument shapers for
7
+ * CJS handler calls.
8
+ *
9
+ * ADR-457 build-at-publish: the hand-written bin/lib/cjs-command-router-adapter.cjs
10
+ * collapsed to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour
11
+ * from the prior hand-written .cjs; only types are added.
12
+ */
13
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
14
+ const commandRoutingHub = require("./command-routing-hub.cjs");
15
+ const { createHub, ERROR_KINDS } = commandRoutingHub;
16
+ // ─── Implementation ───────────────────────────────────────────────────────────
17
+ function routeCjsCommandFamily({ args, subcommands, handlers, defaultSubcommand, unsupported = {}, unknownMessage, error, cwd, raw, }) {
18
+ routeHubCommandFamily({
19
+ family: '__legacy_cjs_family__',
20
+ args,
21
+ subcommands,
22
+ handlers,
23
+ defaultSubcommand,
24
+ unsupported,
25
+ unknownMessage,
26
+ error,
27
+ cwd,
28
+ raw,
29
+ });
30
+ }
31
+ /**
32
+ * Hub-backed family router adapter.
33
+ *
34
+ * Deepens the command-topology seam by routing family handlers through
35
+ * CommandRoutingHub's typed Result contract instead of ad-hoc per-router
36
+ * lookup + error handling branches.
37
+ */
38
+ function routeHubCommandFamily({ family, args, subcommands, handlers, defaultSubcommand, unsupported = {}, unknownMessage, error, cwd, raw, }) {
39
+ const subcommand = args[1] || defaultSubcommand;
40
+ if (subcommand && unsupported[subcommand]) {
41
+ error(unsupported[subcommand]);
42
+ return;
43
+ }
44
+ const available = subcommands.filter((s) => !unsupported[s]);
45
+ const registryHandlers = Object.fromEntries(Object.entries(handlers).map(([name, handler]) => [
46
+ name,
47
+ () => {
48
+ const result = handler();
49
+ if (result && typeof result === 'object' && Object.prototype.hasOwnProperty.call(result, 'ok')) {
50
+ return result;
51
+ }
52
+ return { ok: true, data: null };
53
+ },
54
+ ]));
55
+ const hub = createHub({
56
+ cjsRegistry: { [family]: registryHandlers },
57
+ manifest: { [family]: available },
58
+ });
59
+ const result = hub.dispatch({
60
+ family,
61
+ subcommand,
62
+ args: args.slice(2),
63
+ cwd,
64
+ raw,
65
+ });
66
+ if (result.ok)
67
+ return;
68
+ if (result.kind === ERROR_KINDS.UnknownCommand) {
69
+ error(unknownMessage(subcommand ?? '', available));
70
+ return;
71
+ }
72
+ if (result.kind === ERROR_KINDS.InvalidArgs || result.kind === ERROR_KINDS.HandlerRefusal) {
73
+ error(result.reason);
74
+ return;
75
+ }
76
+ error(result.message);
77
+ }
78
+ module.exports = {
79
+ routeCjsCommandFamily,
80
+ routeHubCommandFamily,
81
+ };
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ /**
3
+ * Deterministic clock seam for lock modules (ADR-457 build-at-publish: the
4
+ * hand-written bin/lib/clock.cjs collapsed to a TypeScript source of truth).
5
+ * Behaviour is preserved byte-for-behaviour from the prior hand-written .cjs;
6
+ * only types are added.
7
+ *
8
+ * Production code uses `realClock` (the default). Test code passes in a
9
+ * `makeFakeClock()` instance to drive lock timing without real wall-clock
10
+ * waits or Atomics.wait calls.
11
+ *
12
+ * Both methods in realClock use exactly the same system primitives that
13
+ * acquireStateLock and withPlanningLock used inline before the seam was
14
+ * introduced:
15
+ * - now() → Date.now()
16
+ * - sleep() → Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms)
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.realClock = void 0;
20
+ // Module-level Atomics.wait buffer reused across every realClock.sleep() call.
21
+ // The buffer value is always 0 (never written), so reuse is semantically
22
+ // identical to allocating a fresh buffer each time.
23
+ const _realSleepBuf = new Int32Array(new SharedArrayBuffer(4));
24
+ /**
25
+ * Parse GSD_NOW_MS to a valid pinned epoch millisecond value, or return null.
26
+ *
27
+ * Accepts ONLY strict decimal integer strings within JS Date bounds
28
+ * (abs(ms) <= 8.64e15). Rejects empty strings, whitespace-only, floats
29
+ * ('12.5'), scientific notation ('1e30'), and out-of-range values.
30
+ *
31
+ * Returns null (fall back to Date.now()) for any invalid or absent input.
32
+ * Returns null when GSD_TEST_MODE is not set.
33
+ */
34
+ function _pinnedNowMs() {
35
+ if (!process.env.GSD_TEST_MODE)
36
+ return null;
37
+ const raw = process.env.GSD_NOW_MS;
38
+ if (typeof raw !== 'string')
39
+ return null;
40
+ const t = raw.trim();
41
+ if (!/^-?\d+$/.test(t))
42
+ return null; // reject '', 'abc', '1e30', '12.5'
43
+ const ms = Number(t);
44
+ if (!Number.isFinite(ms) || Math.abs(ms) > 8.64e15)
45
+ return null; // Date-valid bounds
46
+ return ms;
47
+ }
48
+ exports.realClock = {
49
+ /**
50
+ * Return current epoch milliseconds.
51
+ *
52
+ * When both GSD_TEST_MODE and GSD_NOW_MS are set (subprocess time-pin adapter,
53
+ * issue #474), returns the pinned millisecond value so all date-stamping in the
54
+ * subprocess SUT is deterministic. In production, falls back to Date.now().
55
+ *
56
+ * Only strict decimal integer strings within JS Date bounds are accepted as pins.
57
+ * Any other value (empty string, float, scientific notation, out-of-range) falls
58
+ * back to Date.now() to prevent RangeError from new Date(ms).toISOString().
59
+ */
60
+ now() {
61
+ const pinned = _pinnedNowMs();
62
+ if (pinned !== null)
63
+ return pinned;
64
+ return Date.now();
65
+ },
66
+ /**
67
+ * Return the current instant as an ISO 8601 string (UTC).
68
+ * Uses this.now() so the subprocess time-pin adapter is honoured.
69
+ *
70
+ * @returns e.g. "2020-06-15T12:00:00.000Z"
71
+ */
72
+ nowIso() {
73
+ return new Date(this.now()).toISOString();
74
+ },
75
+ /**
76
+ * Return today's date as a YYYY-MM-DD string (UTC calendar day).
77
+ * Uses this.now() so the subprocess time-pin adapter is honoured.
78
+ *
79
+ * @returns e.g. "2020-06-15"
80
+ */
81
+ today() {
82
+ return this.nowIso().split('T')[0];
83
+ },
84
+ /**
85
+ * Synchronous sleep via Atomics.wait.
86
+ * This is the identical primitive acquireStateLock and withPlanningLock used
87
+ * inline before the seam. Atomics.wait on a shared buffer that is never
88
+ * notified times out after exactly `ms` milliseconds without spinning the CPU.
89
+ *
90
+ * @param ms - milliseconds to sleep
91
+ */
92
+ sleep(ms) {
93
+ Atomics.wait(_realSleepBuf, 0, 0, ms);
94
+ },
95
+ };
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ /**
3
+ * Skill cluster definitions for the runtime surface module (ADR-457
4
+ * build-at-publish: the hand-written bin/lib/clusters.cjs collapsed to a
5
+ * TypeScript source of truth). Behaviour is preserved byte-for-behaviour from
6
+ * the prior hand-written .cjs; only types are added.
7
+ *
8
+ * Each cluster is a named group of skill stems. Clusters are used by /gsd:surface
9
+ * to enable/disable a cohesive group of skills without reinstall.
10
+ *
11
+ * Cluster membership may overlap (a skill can live in two clusters). The union
12
+ * of all clusters should cover every installed skill stem; uncategorized stems
13
+ * are flagged by surface-clusters.test.cjs.
14
+ *
15
+ * Source: docs/research/2026-05-12-skill-surface-budget.md §3.2 (verified
16
+ * against commands/gsd/ listing in surface-clusters.test.cjs).
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.CLUSTERS = void 0;
20
+ exports.allClusteredSkills = allClusteredSkills;
21
+ exports.CLUSTERS = Object.freeze({
22
+ core_loop: Object.freeze([
23
+ 'new-project',
24
+ 'discuss-phase',
25
+ 'plan-phase',
26
+ 'execute-phase',
27
+ 'help',
28
+ 'update',
29
+ ]),
30
+ audit_review: Object.freeze([
31
+ 'code-review',
32
+ 'review',
33
+ 'audit-fix',
34
+ 'audit-milestone',
35
+ 'audit-uat',
36
+ 'verify-work',
37
+ 'validate-phase',
38
+ 'plan-review-convergence',
39
+ 'eval-review',
40
+ 'add-tests',
41
+ 'secure-phase',
42
+ ]),
43
+ milestone: Object.freeze([
44
+ 'new-milestone',
45
+ 'complete-milestone',
46
+ 'milestone-summary',
47
+ 'health',
48
+ ]),
49
+ research_ideate: Object.freeze([
50
+ 'sketch',
51
+ 'spike',
52
+ 'forensics',
53
+ 'explore',
54
+ 'graphify',
55
+ 'ns-ideate',
56
+ ]),
57
+ workspace_state: Object.freeze([
58
+ 'pause-work',
59
+ 'resume-work',
60
+ 'workspace',
61
+ 'workstreams',
62
+ 'thread',
63
+ 'capture',
64
+ 'inbox',
65
+ ]),
66
+ docs: Object.freeze([
67
+ 'docs-update',
68
+ 'ingest-docs',
69
+ ]),
70
+ ui: Object.freeze([
71
+ 'ui-phase',
72
+ 'ui-review',
73
+ ]),
74
+ ai_eval: Object.freeze([
75
+ 'ai-integration-phase',
76
+ 'eval-review',
77
+ ]),
78
+ ns_meta: Object.freeze([
79
+ 'ns-context',
80
+ 'ns-ideate',
81
+ 'ns-manage',
82
+ 'ns-project',
83
+ 'ns-review',
84
+ 'ns-workflow',
85
+ ]),
86
+ utility: Object.freeze([
87
+ 'health',
88
+ 'stats',
89
+ 'settings',
90
+ 'cleanup',
91
+ 'pr-branch',
92
+ 'ship',
93
+ 'undo',
94
+ 'fast',
95
+ 'quick',
96
+ 'autonomous',
97
+ 'config',
98
+ 'progress',
99
+ 'phase',
100
+ 'review',
101
+ 'update',
102
+ 'help',
103
+ 'code-review',
104
+ 'import',
105
+ 'manager',
106
+ 'map-codebase',
107
+ 'profile-user',
108
+ 'spec-phase',
109
+ 'ultraplan-phase',
110
+ 'mvp-phase',
111
+ 'execute-phase',
112
+ 'review-backlog',
113
+ 'debug',
114
+ 'extract-learnings',
115
+ 'surface',
116
+ ]),
117
+ });
118
+ /**
119
+ * Build a Set of all skill stems covered by at least one cluster.
120
+ */
121
+ function allClusteredSkills() {
122
+ const result = new Set();
123
+ for (const skills of Object.values(exports.CLUSTERS)) {
124
+ for (const s of skills)
125
+ result.add(s);
126
+ }
127
+ return result;
128
+ }