@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,146 @@
1
+ "use strict";
2
+ /**
3
+ * DispatchLogger interface + default implementation — issue #177 (ADR-0174 P1.3).
4
+ *
5
+ * Interface:
6
+ * { onEvent(event: DispatchEvent): void }
7
+ *
8
+ * Default behaviour (createDefaultLogger):
9
+ * 1. Silent on success — no stdout/stderr when result.kind === 'ok'.
10
+ * 2. Structured JSON to stderr on error — one line per dispatch error.
11
+ * 3. Opt-in audit file — when GSD_AUDIT=1 OR config.audit.enabled===true,
12
+ * appends every event (success + error) as one JSON line to
13
+ * .planning/.gsd-trace.jsonl relative to `cwd`. Creates .planning/ if absent.
14
+ * 4. Args redaction — args omitted by default; included when GSD_AUDIT_ARGS=1.
15
+ *
16
+ * No-op logger (createNoOpLogger):
17
+ * Silent on all events. Used as the Hub default when no logger is injected.
18
+ *
19
+ * ADR-457 build-at-publish: the hand-written bin/lib/observability/logger.cjs
20
+ * collapsed to a TypeScript source of truth. Behaviour is preserved
21
+ * byte-for-behaviour from the prior hand-written .cjs; only types are added.
22
+ */
23
+ var __importDefault = (this && this.__importDefault) || function (mod) {
24
+ return (mod && mod.__esModule) ? mod : { "default": mod };
25
+ };
26
+ const node_fs_1 = __importDefault(require("node:fs"));
27
+ const node_path_1 = __importDefault(require("node:path"));
28
+ const redaction_cjs_1 = require("./redaction.cjs");
29
+ const AUDIT_FILE_NAME = '.gsd-trace.jsonl';
30
+ const PLANNING_DIR = '.planning';
31
+ // ─── helpers ─────────────────────────────────────────────────────────────────
32
+ /**
33
+ * Safely serialise a value to JSON, falling back to a placeholder on circular refs.
34
+ */
35
+ function _safeStringify(value) {
36
+ try {
37
+ return JSON.stringify(value);
38
+ }
39
+ catch {
40
+ return JSON.stringify({ _serializationError: true });
41
+ }
42
+ }
43
+ /**
44
+ * Determine whether the audit file should be written to.
45
+ */
46
+ function _isAuditEnabled(config) {
47
+ if (process.env['GSD_AUDIT'] === '1')
48
+ return true;
49
+ if (config && config.audit && config.audit.enabled === true)
50
+ return true;
51
+ return false;
52
+ }
53
+ /**
54
+ * Build the redacted plain object for the audit file.
55
+ * Preserves the full DispatchEvent structure.
56
+ */
57
+ function _toAuditRecord(event) {
58
+ return (0, redaction_cjs_1.redactEvent)(event);
59
+ }
60
+ /**
61
+ * Build the flattened stderr error line.
62
+ *
63
+ * Per ADR-0174 P1.3 contract: { "kind": "<variant>", "traceId": "<uuid>", ...typedPayload }
64
+ * The result's kind is promoted to top-level and the typed payload fields are spread in.
65
+ * The `result` wrapper is removed.
66
+ */
67
+ function _toStderrRecord(event) {
68
+ const redacted = (0, redaction_cjs_1.redactEvent)(event);
69
+ const { result, ...eventWithoutResult } = redacted;
70
+ // Flatten: top-level gets kind + typed payload fields from result
71
+ const resultObj = result;
72
+ const { kind, ...typedPayload } = resultObj;
73
+ return Object.assign({}, eventWithoutResult, { kind }, typedPayload);
74
+ }
75
+ /**
76
+ * Append one JSON line to the audit file.
77
+ * Creates .planning/ directory if it does not exist.
78
+ *
79
+ * Uses synchronous fs API (crash-safe for v1 — dispatch is synchronous).
80
+ */
81
+ function _appendAuditLine(cwd, event) {
82
+ const planningDir = node_path_1.default.join(cwd, PLANNING_DIR);
83
+ // Ensure the directory exists
84
+ if (!node_fs_1.default.existsSync(planningDir)) {
85
+ node_fs_1.default.mkdirSync(planningDir, { recursive: true });
86
+ }
87
+ const auditPath = node_path_1.default.join(planningDir, AUDIT_FILE_NAME);
88
+ node_fs_1.default.appendFileSync(auditPath, _safeStringify(event) + '\n', 'utf8');
89
+ }
90
+ /**
91
+ * Create a no-op logger. All events are silently dropped.
92
+ * This is the Hub's default when no logger is injected by the caller.
93
+ */
94
+ function createNoOpLogger() {
95
+ return {
96
+ onEvent(_event) {
97
+ // intentionally empty
98
+ },
99
+ };
100
+ }
101
+ /**
102
+ * Create the default DispatchLogger.
103
+ */
104
+ function createDefaultLogger({ cwd = process.cwd(), config } = {}) {
105
+ return {
106
+ /**
107
+ * @param event - A DispatchEvent from the Hub.
108
+ */
109
+ onEvent(event) {
110
+ const resultObj = event && event['result'];
111
+ const isOk = resultObj && resultObj['kind'] === 'ok';
112
+ // ── Audit file (both ok and error) ────────────────────────────────────
113
+ if (_isAuditEnabled(config)) {
114
+ try {
115
+ const auditRecord = _toAuditRecord(event);
116
+ _appendAuditLine(cwd, auditRecord);
117
+ }
118
+ catch (auditErr) {
119
+ // Audit errors must not surface to callers
120
+ process.stderr.write(_safeStringify({
121
+ level: 'warn',
122
+ source: 'DispatchLogger',
123
+ message: 'audit file write failed: ' + String(auditErr?.message ?? auditErr),
124
+ }) + '\n');
125
+ }
126
+ }
127
+ // ── Stderr on error ───────────────────────────────────────────────────
128
+ if (!isOk) {
129
+ try {
130
+ const stderrRecord = _toStderrRecord(event);
131
+ process.stderr.write(_safeStringify(stderrRecord) + '\n');
132
+ }
133
+ catch (stderrErr) {
134
+ // Last-resort: we cannot throw from the logger
135
+ process.stderr.write(_safeStringify({
136
+ level: 'warn',
137
+ source: 'DispatchLogger',
138
+ message: 'stderr emit failed: ' + String(stderrErr?.message ?? stderrErr),
139
+ }) + '\n');
140
+ }
141
+ }
142
+ // ── Silent on success (no else branch needed) ─────────────────────────
143
+ },
144
+ };
145
+ }
146
+ module.exports = { createDefaultLogger, createNoOpLogger };
@@ -1,7 +1,9 @@
1
- 'use strict';
2
-
1
+ "use strict";
3
2
  /**
4
- * Arg redaction policy — issue #177 (ADR-0174 P1.3).
3
+ * Arg redaction policy — issue #177 (ADR-457 build-at-publish: the
4
+ * hand-written bin/lib/observability/redaction.cjs collapsed to a TypeScript
5
+ * source of truth). Behaviour is preserved byte-for-behaviour from the prior
6
+ * hand-written .cjs; only types are added.
5
7
  *
6
8
  * Privacy default: args are OMITTED from every emitted event (both stderr
7
9
  * and file audit). Opt-in: set GSD_AUDIT_ARGS=1 to include args verbatim.
@@ -10,18 +12,17 @@
10
12
  * decisions are stateless reads of process.env at call time so that tests
11
13
  * can toggle the env var without module-level caching issues.
12
14
  */
13
-
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.shouldIncludeArgs = shouldIncludeArgs;
17
+ exports.redactEvent = redactEvent;
14
18
  /**
15
19
  * Returns true when the caller has opted in to including args in events.
16
20
  * Only GSD_AUDIT_ARGS === '1' enables inclusion; any other value (including
17
21
  * empty string, 'true', 'yes') keeps the default of omitting args.
18
- *
19
- * @returns {boolean}
20
22
  */
21
23
  function shouldIncludeArgs() {
22
- return process.env.GSD_AUDIT_ARGS === '1';
24
+ return process.env.GSD_AUDIT_ARGS === '1';
23
25
  }
24
-
25
26
  /**
26
27
  * Return a redacted copy of a DispatchEvent.
27
28
  *
@@ -32,19 +33,16 @@ function shouldIncludeArgs() {
32
33
  *
33
34
  * The original event object is never mutated (it is frozen by makeDispatchEvent).
34
35
  *
35
- * @param {object} event - A DispatchEvent (frozen or plain).
36
- * @returns {object} A new plain object with the same fields, minus args when redacted.
36
+ * @param event - A DispatchEvent (frozen or plain).
37
+ * @returns A new plain object with the same fields, minus args when redacted.
37
38
  */
38
39
  function redactEvent(event) {
39
- if (shouldIncludeArgs()) {
40
- // Include path: return a shallow copy with args preserved if present
41
- const copy = Object.assign({}, event);
42
- return copy;
43
- }
44
-
45
- // Exclude path: build a copy omitting `args`
46
- const { args: _dropped, ...rest } = event;
47
- return rest;
40
+ if (shouldIncludeArgs()) {
41
+ // Include path: return a shallow copy with args preserved if present
42
+ const copy = Object.assign({}, event);
43
+ return copy;
44
+ }
45
+ // Exclude path: build a copy omitting `args`
46
+ const { args: _dropped, ...rest } = event;
47
+ return rest;
48
48
  }
49
-
50
- module.exports = { shouldIncludeArgs, redactEvent };
@@ -8,6 +8,8 @@ const binName = "gsd-core";
8
8
  const repoSlug = "open-gsd/gsd-core";
9
9
  const repoUrl = "https://github.com/open-gsd/gsd-core";
10
10
  const changelogRawUrl = "https://raw.githubusercontent.com/open-gsd/gsd-core/main/CHANGELOG.md";
11
+ const cacheSlug = "opengsd-gsd-core";
12
+ const updateCacheFileName = "gsd-update-check-opengsd-gsd-core.json";
11
13
 
12
14
  function formatManualInstall({ packageName, binName, scope, runtime } = {}) {
13
15
  const runtimeFlag = runtime ? ` --${runtime}` : '';
@@ -21,11 +23,13 @@ function manualInstallCommand(opts = {}) {
21
23
  module.exports = Object.freeze({
22
24
  packageName,
23
25
  // PACKAGE_NAME: back-compat alias for #516-era consumers. Baked here, so it
24
- // survives the installed tree’s synthetic package.json (fixes the #378 undefined).
26
+ // survives the installed tree's synthetic package.json (fixes the #378 undefined).
25
27
  PACKAGE_NAME: packageName,
26
28
  binName,
27
29
  repoSlug,
28
30
  repoUrl,
29
31
  changelogRawUrl,
32
+ cacheSlug,
33
+ updateCacheFileName,
30
34
  manualInstallCommand,
31
35
  });
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ /**
3
+ * Manifest-backed phase subcommand router.
4
+ * Keeps gsd-tools.cjs thin while preserving existing command semantics.
5
+ *
6
+ * Unsupported in this router:
7
+ * - scaffold: routed through top-level scaffold command.
8
+ *
9
+ * CJS-only subcommands: mvp-mode (dispatched directly, before hub).
10
+ *
11
+ * #3788: dispatch is mediated by CommandRoutingHub. The public entry point
12
+ * and observable CLI behaviour are unchanged.
13
+ *
14
+ * ADR-457 build-at-publish: the hand-written bin/lib/phase-command-router.cjs
15
+ * collapsed to a TypeScript source of truth. Behaviour is preserved byte-for-behaviour
16
+ * from the prior hand-written .cjs; only types are added.
17
+ */
18
+ const command_aliases_cjs_1 = require("./command-aliases.cjs");
19
+ // ─── CommandRoutingHub (issue #3788, simplified in #175, typed in #176) ───────
20
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
21
+ const commandRoutingHub = require("./command-routing-hub.cjs");
22
+ const { createHub, ERROR_KINDS, makeInvalidArgs } = commandRoutingHub;
23
+ // ─── Implementation ───────────────────────────────────────────────────────────
24
+ function routePhaseCommand({ phase, args, cwd, raw, error }) {
25
+ // ── Unsupported subcommands ─────────────────────────────────────────────────
26
+ // Resolved before dispatch so the error message stays deterministic.
27
+ const UNSUPPORTED = {
28
+ scaffold: 'phase scaffold is routed through the top-level scaffold command.',
29
+ };
30
+ const subcommand = args[1];
31
+ if (subcommand && UNSUPPORTED[subcommand]) {
32
+ error(UNSUPPORTED[subcommand]);
33
+ return;
34
+ }
35
+ // ── No subcommand → reject early with helpful error ────────────────────────
36
+ // Pre-#3788 code resolved unknown subcommands via routeCjsCommandFamily which
37
+ // fell through to error() when no handler matched (including undefined).
38
+ // Post-#3788 the hub's manifest check is skipped for falsy subcommand, so we
39
+ // must guard here to preserve the deterministic "Available: ..." error message.
40
+ if (!subcommand) {
41
+ const available = command_aliases_cjs_1.PHASE_SUBCOMMANDS.filter(s => !UNSUPPORTED[s]).join(', ');
42
+ error(`Unknown phase subcommand. Available: ${available}`);
43
+ return;
44
+ }
45
+ // ── CJS-only subcommands (dispatched directly, before hub) ─────────────────
46
+ // `mvp-mode` has a CJS-native implementation in phase.cmdPhaseMvpMode that
47
+ // differs from the SDK query layer (different ROADMAP scan + error codes).
48
+ // Dispatch it early to preserve pre-migration observable behaviour (correct
49
+ // exit code, correct JSON error reason code, correct ROADMAP scan).
50
+ if (subcommand === 'mvp-mode') {
51
+ phase.cmdPhaseMvpMode(cwd, args.slice(2), raw);
52
+ return;
53
+ }
54
+ // ── Build the CJS registry ──────────────────────────────────────────────────
55
+ // Each handler receives a ctx object from the hub and must return a HubResult.
56
+ const cjsRegistry = {
57
+ phase: {
58
+ 'next-decimal': (_ctx) => {
59
+ phase.cmdPhaseNextDecimal(cwd, args[2], raw);
60
+ return { ok: true, data: null };
61
+ },
62
+ add: (_ctx) => {
63
+ let customId = null;
64
+ const descArgs = [];
65
+ for (let i = 2; i < args.length; i++) {
66
+ const token = args[i];
67
+ if (token === '--raw') {
68
+ continue;
69
+ }
70
+ if (token === '--id') {
71
+ const id = args[i + 1];
72
+ if (!id || id.startsWith('--')) {
73
+ return makeInvalidArgs('--id', '--id requires a value');
74
+ }
75
+ customId = id;
76
+ i++;
77
+ }
78
+ else if (token.startsWith('--')) {
79
+ return makeInvalidArgs(token, `phase add does not support ${token}`);
80
+ }
81
+ else {
82
+ descArgs.push(token);
83
+ }
84
+ }
85
+ phase.cmdPhaseAdd(cwd, descArgs.join(' '), raw, customId);
86
+ return { ok: true, data: null };
87
+ },
88
+ 'add-batch': (_ctx) => {
89
+ const descFlagIdx = args.indexOf('--descriptions');
90
+ let descriptions;
91
+ if (descFlagIdx !== -1) {
92
+ const rawDescriptions = args[descFlagIdx + 1];
93
+ if (!rawDescriptions || rawDescriptions.startsWith('--')) {
94
+ return makeInvalidArgs('--descriptions', '--descriptions must be a JSON array');
95
+ }
96
+ try {
97
+ descriptions = JSON.parse(rawDescriptions);
98
+ }
99
+ catch {
100
+ return makeInvalidArgs('--descriptions', '--descriptions must be a JSON array');
101
+ }
102
+ if (!Array.isArray(descriptions)) {
103
+ return makeInvalidArgs('--descriptions', '--descriptions must be a JSON array');
104
+ }
105
+ }
106
+ else {
107
+ descriptions = args.slice(2).filter(a => a !== '--raw');
108
+ }
109
+ phase.cmdPhaseAddBatch(cwd, descriptions, raw);
110
+ return { ok: true, data: null };
111
+ },
112
+ insert: (_ctx) => {
113
+ if (args.includes('--dry-run')) {
114
+ return makeInvalidArgs('--dry-run', 'phase insert does not support --dry-run');
115
+ }
116
+ phase.cmdPhaseInsert(cwd, args[2], args.slice(3).join(' '), raw);
117
+ return { ok: true, data: null };
118
+ },
119
+ remove: (_ctx) => {
120
+ const removeArgs = args.slice(2).filter(token => token !== '--raw');
121
+ let forceFlag = false;
122
+ const positional = [];
123
+ for (const token of removeArgs) {
124
+ if (token === '--force') {
125
+ forceFlag = true;
126
+ continue;
127
+ }
128
+ if (token.startsWith('--')) {
129
+ return makeInvalidArgs(token, `phase remove does not support ${token}`);
130
+ }
131
+ positional.push(token);
132
+ }
133
+ if (positional.length !== 1) {
134
+ return makeInvalidArgs('<phase-number>', 'phase remove accepts exactly one phase number');
135
+ }
136
+ phase.cmdPhaseRemove(cwd, positional[0], { force: forceFlag }, raw);
137
+ return { ok: true, data: null };
138
+ },
139
+ complete: (_ctx) => {
140
+ phase.cmdPhaseComplete(cwd, args[2], raw);
141
+ return { ok: true, data: null };
142
+ },
143
+ },
144
+ };
145
+ // ── Build manifest (available subcommands for UnknownCommand detection) ─────
146
+ // `availableSubcommands` is what the error message shows. It excludes
147
+ // unsupported commands (already handled above) but does NOT include 'mvp-mode'
148
+ // because it was absent from PHASE_SUBCOMMANDS in the original and was not
149
+ // shown in the "Available:" list there either.
150
+ //
151
+ // `manifestSubcommands` is the full routing set for the hub — it includes
152
+ // 'mvp-mode' (which the original code routed via a handler even without a
153
+ // manifest entry) so the hub's UnknownCommand check passes for it.
154
+ const availableSubcommands = command_aliases_cjs_1.PHASE_SUBCOMMANDS.filter(s => !UNSUPPORTED[s]);
155
+ const manifestSubcommands = ['mvp-mode', ...availableSubcommands];
156
+ const manifest = { phase: manifestSubcommands };
157
+ // ── Construct hub ──────────────────────────────────────────────────────────
158
+ // #175: Hub is CJS-only — no mode param, no sdkLoader.
159
+ const hub = createHub({ cjsRegistry, manifest });
160
+ // ── Dispatch ────────────────────────────────────────────────────────────────
161
+ const result = hub.dispatch({
162
+ family: 'phase',
163
+ subcommand,
164
+ args: args.slice(2),
165
+ cwd,
166
+ raw,
167
+ });
168
+ // ── Translate result → CLI output / error (adapter responsibility) ──────────
169
+ // CJS handlers call output() themselves (inside phase.cmdPhase*()).
170
+ // No further output call is needed here.
171
+ if (!result.ok) {
172
+ if (result.kind === ERROR_KINDS.UnknownCommand) {
173
+ const available = availableSubcommands.join(', ');
174
+ error(`Unknown phase subcommand. Available: ${available}`);
175
+ return;
176
+ }
177
+ if (result.kind === ERROR_KINDS.InvalidArgs || result.kind === ERROR_KINDS.HandlerRefusal) {
178
+ // #176: typed payload — reason holds the human-readable message
179
+ error(result.reason);
180
+ return;
181
+ }
182
+ // HandlerFailure: message field
183
+ error(result.message);
184
+ return;
185
+ }
186
+ }
187
+ module.exports = {
188
+ routePhaseCommand,
189
+ };
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ /**
3
+ * Phase Lifecycle Pure Helpers — pure-computation functions extracted from
4
+ * the phase-lifecycle SDK handler (ADR-457 build-at-publish: the hand-written
5
+ * bin/lib/phase-lifecycle.cjs collapsed to a TypeScript source of truth).
6
+ * Behaviour is preserved byte-for-behaviour from the prior hand-written .cjs;
7
+ * only types are added.
8
+ *
9
+ * I/O adapter pattern (ADR-3524 Section 4): each side supplies its own I/O
10
+ * (sync readFileSync for CJS, async readFile for SDK); the pure computation
11
+ * logic is shared via this generated artifact.
12
+ *
13
+ * Scope:
14
+ * - deriveProgressFromRoadmap(roadmapContent): count Complete rows => idempotent
15
+ * - clampPercent(completed, total): percent with 100 ceiling
16
+ *
17
+ * These two functions are the root-cause fix for issue #4.
18
+ *
19
+ * References:
20
+ * - ADR-3524 (docs/adr/3524-cjs-sdk-hard-seam.md)
21
+ * - Issue #4 (open-gsd/gsd-core)
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.deriveProgressFromRoadmap = deriveProgressFromRoadmap;
25
+ exports.clampPercent = clampPercent;
26
+ /**
27
+ * Derive completed_phases, total_phases, and total_plans from ROADMAP content.
28
+ * Root cause fix for issue #4 — see gen-phase-lifecycle.mjs for full documentation.
29
+ */
30
+ function deriveProgressFromRoadmap(roadmapContent) {
31
+ let completedPhases = null;
32
+ let totalPhases = null;
33
+ let totalPlans = null;
34
+ try {
35
+ // Count Complete rows in the progress table (Status column = "Complete").
36
+ // Pattern: row where the phase cell starts with a digit (data row, not header),
37
+ // followed by any cell content, then a "Complete" status cell.
38
+ // Handles both short form ("| 4. |") and long form ("| 01. Foundation |").
39
+ // See phase-lifecycle.ts ~line 1655 for the original SDK pattern.
40
+ const tableCompletePattern = /\|\s*\d+[^|]*\|\s*[^|]*\|\s*Complete\s*\|/gi;
41
+ const completeMatches = roadmapContent.match(tableCompletePattern);
42
+ completedPhases = completeMatches ? completeMatches.length : null;
43
+ // Count total phase rows in the progress table.
44
+ // Identify the table by looking for Phase|...|Status|...|Completed header.
45
+ const progressTableMatch = roadmapContent.match(/\|\s*Phase\s*\|[^|]*\|[^|]*Status[^|]*\|[^|]*Completed[^|]*\|[\s\S]*?(?=\n\n|\n##|$)/i);
46
+ if (progressTableMatch) {
47
+ const tableText = progressTableMatch[0];
48
+ // Count data rows (rows starting with pipe then a phase number)
49
+ const dataRowPattern = /^\|\s*\d+/gm;
50
+ const dataRows = tableText.match(dataRowPattern);
51
+ totalPhases = dataRows ? dataRows.length : null;
52
+ }
53
+ // Sum plan counts from M/N columns in progress table
54
+ let totalPlansSum = 0;
55
+ const planCellPattern = /\|\s*\d+[^|]*\|\s*(\d+)\/(\d+)\s*\|/gi;
56
+ let pm;
57
+ while ((pm = planCellPattern.exec(roadmapContent)) !== null) {
58
+ totalPlansSum += parseInt(pm[2], 10);
59
+ }
60
+ if (totalPlansSum > 0)
61
+ totalPlans = totalPlansSum;
62
+ }
63
+ catch { /* intentionally empty — fall through to existing values */ }
64
+ return { completedPhases, totalPhases, totalPlans };
65
+ }
66
+ /**
67
+ * Compute progress percent clamped to 100.
68
+ * Root cause fix for issue #4 — see gen-phase-lifecycle.mjs for full documentation.
69
+ */
70
+ function clampPercent(completed, total) {
71
+ if (!total || total <= 0)
72
+ return 0;
73
+ return Math.min(100, Math.round((completed / total) * 100));
74
+ }