gsd-pi 2.33.1 → 2.34.0-dev.bbb5216

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 (828) hide show
  1. package/dist/bundled-resource-path.d.ts +8 -0
  2. package/dist/bundled-resource-path.js +14 -0
  3. package/dist/cli.js +16 -0
  4. package/dist/headless-query.js +6 -6
  5. package/dist/resource-loader.d.ts +2 -0
  6. package/dist/resource-loader.js +39 -4
  7. package/dist/resources/extensions/ask-user-questions.js +217 -0
  8. package/dist/resources/extensions/async-jobs/async-bash-tool.js +180 -0
  9. package/dist/resources/extensions/async-jobs/await-tool.js +90 -0
  10. package/dist/resources/extensions/async-jobs/cancel-job-tool.js +28 -0
  11. package/dist/resources/extensions/async-jobs/index.js +119 -0
  12. package/dist/resources/extensions/async-jobs/job-manager.js +159 -0
  13. package/dist/resources/extensions/aws-auth/index.js +138 -0
  14. package/dist/resources/extensions/bg-shell/bg-shell-command.js +182 -0
  15. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.js +343 -0
  16. package/dist/resources/extensions/bg-shell/bg-shell-tool.js +831 -0
  17. package/dist/resources/extensions/bg-shell/index.js +41 -0
  18. package/dist/resources/extensions/bg-shell/interaction.js +160 -0
  19. package/dist/resources/extensions/bg-shell/output-formatter.js +245 -0
  20. package/dist/resources/extensions/bg-shell/overlay.js +378 -0
  21. package/dist/resources/extensions/bg-shell/process-manager.js +413 -0
  22. package/dist/resources/extensions/bg-shell/readiness-detector.js +109 -0
  23. package/dist/resources/extensions/bg-shell/types.js +96 -0
  24. package/dist/resources/extensions/bg-shell/utilities.js +50 -0
  25. package/dist/resources/extensions/browser-tools/capture.js +179 -0
  26. package/dist/resources/extensions/browser-tools/core.js +899 -0
  27. package/dist/resources/extensions/browser-tools/{evaluate-helpers.ts → evaluate-helpers.js} +0 -1
  28. package/dist/resources/extensions/browser-tools/index.js +123 -0
  29. package/dist/resources/extensions/browser-tools/lifecycle.js +222 -0
  30. package/dist/resources/extensions/browser-tools/refs.js +254 -0
  31. package/dist/resources/extensions/browser-tools/settle.js +173 -0
  32. package/dist/resources/extensions/browser-tools/state.js +126 -0
  33. package/dist/resources/extensions/browser-tools/tools/action-cache.js +179 -0
  34. package/dist/resources/extensions/browser-tools/tools/assertions.js +320 -0
  35. package/dist/resources/extensions/browser-tools/tools/codegen.js +242 -0
  36. package/dist/resources/extensions/browser-tools/tools/device.js +162 -0
  37. package/dist/resources/extensions/browser-tools/tools/extract.js +191 -0
  38. package/dist/resources/extensions/browser-tools/tools/forms.js +710 -0
  39. package/dist/resources/extensions/browser-tools/tools/injection-detect.js +178 -0
  40. package/dist/resources/extensions/browser-tools/tools/inspection.js +426 -0
  41. package/dist/resources/extensions/browser-tools/tools/intent.js +556 -0
  42. package/dist/resources/extensions/browser-tools/tools/interaction.js +776 -0
  43. package/dist/resources/extensions/browser-tools/tools/navigation.js +208 -0
  44. package/dist/resources/extensions/browser-tools/tools/network-mock.js +194 -0
  45. package/dist/resources/extensions/browser-tools/tools/pages.js +280 -0
  46. package/dist/resources/extensions/browser-tools/tools/pdf.js +74 -0
  47. package/dist/resources/extensions/browser-tools/tools/refs.js +485 -0
  48. package/dist/resources/extensions/browser-tools/tools/screenshot.js +87 -0
  49. package/dist/resources/extensions/browser-tools/tools/session.js +375 -0
  50. package/dist/resources/extensions/browser-tools/tools/state-persistence.js +180 -0
  51. package/dist/resources/extensions/browser-tools/tools/visual-diff.js +174 -0
  52. package/dist/resources/extensions/browser-tools/tools/wait.js +201 -0
  53. package/dist/resources/extensions/browser-tools/tools/zoom.js +90 -0
  54. package/dist/resources/extensions/browser-tools/utils.js +490 -0
  55. package/dist/resources/extensions/context7/index.js +337 -0
  56. package/dist/resources/extensions/get-secrets-from-user.js +492 -0
  57. package/dist/resources/extensions/google-search/index.js +373 -0
  58. package/dist/resources/extensions/gsd/activity-log.js +146 -0
  59. package/dist/resources/extensions/gsd/atomic-write.js +38 -0
  60. package/dist/resources/extensions/gsd/auto/session.js +182 -0
  61. package/dist/resources/extensions/gsd/auto-budget.js +30 -0
  62. package/dist/resources/extensions/gsd/auto-dashboard.js +429 -0
  63. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +185 -0
  64. package/dist/resources/extensions/gsd/auto-dispatch.js +353 -0
  65. package/dist/resources/extensions/gsd/auto-loop.js +956 -0
  66. package/dist/resources/extensions/gsd/auto-model-selection.js +133 -0
  67. package/dist/resources/extensions/gsd/auto-observability.js +56 -0
  68. package/dist/resources/extensions/gsd/auto-post-unit.js +385 -0
  69. package/dist/resources/extensions/gsd/auto-prompts.js +1153 -0
  70. package/dist/resources/extensions/gsd/auto-recovery.js +512 -0
  71. package/dist/resources/extensions/gsd/auto-start.js +414 -0
  72. package/dist/resources/extensions/gsd/auto-supervisor.js +47 -0
  73. package/dist/resources/extensions/gsd/auto-timeout-recovery.js +183 -0
  74. package/dist/resources/extensions/gsd/auto-timers.js +180 -0
  75. package/dist/resources/extensions/gsd/auto-tool-tracking.js +50 -0
  76. package/dist/resources/extensions/gsd/auto-unit-closeout.js +30 -0
  77. package/dist/resources/extensions/gsd/auto-verification.js +171 -0
  78. package/dist/resources/extensions/gsd/auto-worktree-sync.js +167 -0
  79. package/dist/resources/extensions/gsd/auto-worktree.js +830 -0
  80. package/dist/resources/extensions/gsd/auto.js +765 -0
  81. package/dist/resources/extensions/gsd/{cache.ts → cache.js} +5 -7
  82. package/dist/resources/extensions/gsd/captures.js +354 -0
  83. package/dist/resources/extensions/gsd/claude-import.js +540 -0
  84. package/dist/resources/extensions/gsd/collision-diagnostics.js +226 -0
  85. package/dist/resources/extensions/gsd/commands-bootstrap.js +223 -0
  86. package/dist/resources/extensions/gsd/commands-config.js +89 -0
  87. package/dist/resources/extensions/gsd/commands-extensions.js +259 -0
  88. package/dist/resources/extensions/gsd/commands-handlers.js +310 -0
  89. package/dist/resources/extensions/gsd/commands-inspect.js +70 -0
  90. package/dist/resources/extensions/gsd/commands-logs.js +468 -0
  91. package/dist/resources/extensions/gsd/commands-maintenance.js +185 -0
  92. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +660 -0
  93. package/dist/resources/extensions/gsd/commands-workflow-templates.js +408 -0
  94. package/dist/resources/extensions/gsd/commands.js +1024 -0
  95. package/dist/resources/extensions/gsd/complexity-classifier.js +257 -0
  96. package/dist/resources/extensions/gsd/{constants.ts → constants.js} +0 -6
  97. package/dist/resources/extensions/gsd/context-budget.js +187 -0
  98. package/dist/resources/extensions/gsd/context-store.js +165 -0
  99. package/dist/resources/extensions/gsd/crash-recovery.js +110 -0
  100. package/dist/resources/extensions/gsd/dashboard-overlay.js +562 -0
  101. package/dist/resources/extensions/gsd/db-writer.js +298 -0
  102. package/dist/resources/extensions/gsd/debug-logger.js +161 -0
  103. package/dist/resources/extensions/gsd/detection.js +373 -0
  104. package/dist/resources/extensions/gsd/diff-context.js +168 -0
  105. package/dist/resources/extensions/gsd/dispatch-guard.js +75 -0
  106. package/dist/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  107. package/dist/resources/extensions/gsd/doctor-checks.js +562 -0
  108. package/dist/resources/extensions/gsd/doctor-environment.js +429 -0
  109. package/dist/resources/extensions/gsd/doctor-format.js +71 -0
  110. package/dist/resources/extensions/gsd/doctor-proactive.js +239 -0
  111. package/dist/resources/extensions/gsd/doctor-providers.js +292 -0
  112. package/dist/resources/extensions/gsd/doctor-types.js +12 -0
  113. package/dist/resources/extensions/gsd/doctor.js +672 -0
  114. package/dist/resources/extensions/gsd/error-utils.js +6 -0
  115. package/dist/resources/extensions/gsd/{errors.ts → errors.js} +6 -11
  116. package/dist/resources/extensions/gsd/exit-command.js +11 -0
  117. package/dist/resources/extensions/gsd/{export-html.ts → export-html.js} +482 -614
  118. package/dist/resources/extensions/gsd/export.js +268 -0
  119. package/dist/resources/extensions/gsd/file-watcher.js +76 -0
  120. package/dist/resources/extensions/gsd/files.js +937 -0
  121. package/dist/resources/extensions/gsd/forensics.js +511 -0
  122. package/dist/resources/extensions/gsd/{git-constants.ts → git-constants.js} +4 -5
  123. package/dist/resources/extensions/gsd/git-self-heal.js +113 -0
  124. package/dist/resources/extensions/gsd/git-service.js +460 -0
  125. package/dist/resources/extensions/gsd/{gitignore.ts → gitignore.js} +98 -125
  126. package/dist/resources/extensions/gsd/gsd-db.js +735 -0
  127. package/dist/resources/extensions/gsd/guided-flow-queue.js +366 -0
  128. package/dist/resources/extensions/gsd/guided-flow.js +1158 -0
  129. package/dist/resources/extensions/gsd/health-widget.js +141 -0
  130. package/dist/resources/extensions/gsd/history.js +118 -0
  131. package/dist/resources/extensions/gsd/index.js +1114 -0
  132. package/dist/resources/extensions/gsd/init-wizard.js +479 -0
  133. package/dist/resources/extensions/gsd/json-persistence.js +62 -0
  134. package/dist/resources/extensions/gsd/{jsonl-utils.ts → jsonl-utils.js} +10 -7
  135. package/dist/resources/extensions/gsd/key-manager.js +829 -0
  136. package/dist/resources/extensions/gsd/marketplace-discovery.js +356 -0
  137. package/dist/resources/extensions/gsd/md-importer.js +440 -0
  138. package/dist/resources/extensions/gsd/memory-extractor.js +295 -0
  139. package/dist/resources/extensions/gsd/memory-store.js +351 -0
  140. package/dist/resources/extensions/gsd/metrics.js +377 -0
  141. package/dist/resources/extensions/gsd/migrate/command.js +157 -0
  142. package/dist/resources/extensions/gsd/migrate/index.js +7 -0
  143. package/dist/resources/extensions/gsd/migrate/parser.js +268 -0
  144. package/dist/resources/extensions/gsd/migrate/parsers.js +477 -0
  145. package/dist/resources/extensions/gsd/migrate/preview.js +47 -0
  146. package/dist/resources/extensions/gsd/migrate/transformer.js +278 -0
  147. package/dist/resources/extensions/gsd/migrate/types.js +4 -0
  148. package/dist/resources/extensions/gsd/migrate/validator.js +41 -0
  149. package/dist/resources/extensions/gsd/migrate/writer.js +477 -0
  150. package/dist/resources/extensions/gsd/migrate-external.js +130 -0
  151. package/dist/resources/extensions/gsd/milestone-actions.js +111 -0
  152. package/dist/resources/extensions/gsd/{milestone-ids.ts → milestone-ids.js} +50 -63
  153. package/dist/resources/extensions/gsd/model-cost-table.js +48 -0
  154. package/dist/resources/extensions/gsd/model-router.js +187 -0
  155. package/dist/resources/extensions/gsd/namespaced-registry.js +322 -0
  156. package/dist/resources/extensions/gsd/namespaced-resolver.js +176 -0
  157. package/dist/resources/extensions/gsd/native-git-bridge.js +842 -0
  158. package/dist/resources/extensions/gsd/native-parser-bridge.js +156 -0
  159. package/dist/resources/extensions/gsd/notifications.js +58 -0
  160. package/dist/resources/extensions/gsd/observability-validator.js +398 -0
  161. package/dist/resources/extensions/gsd/parallel-eligibility.js +182 -0
  162. package/dist/resources/extensions/gsd/parallel-merge.js +121 -0
  163. package/dist/resources/extensions/gsd/parallel-orchestrator.js +687 -0
  164. package/dist/resources/extensions/gsd/paths.js +414 -0
  165. package/dist/resources/extensions/gsd/plugin-importer.js +254 -0
  166. package/dist/resources/extensions/gsd/post-unit-hooks.js +433 -0
  167. package/dist/resources/extensions/gsd/preferences-models.js +294 -0
  168. package/dist/resources/extensions/gsd/preferences-skills.js +154 -0
  169. package/dist/resources/extensions/gsd/preferences-types.js +73 -0
  170. package/dist/resources/extensions/gsd/preferences-validation.js +607 -0
  171. package/dist/resources/extensions/gsd/preferences.js +325 -0
  172. package/dist/resources/extensions/gsd/progress-score.js +102 -0
  173. package/dist/resources/extensions/gsd/prompt-cache-optimizer.js +150 -0
  174. package/dist/resources/extensions/gsd/prompt-compressor.js +393 -0
  175. package/dist/resources/extensions/gsd/prompt-loader.js +119 -0
  176. package/dist/resources/extensions/gsd/prompt-ordering.js +170 -0
  177. package/dist/resources/extensions/gsd/provider-error-pause.js +60 -0
  178. package/dist/resources/extensions/gsd/queue-order.js +178 -0
  179. package/dist/resources/extensions/gsd/queue-reorder-ui.js +234 -0
  180. package/dist/resources/extensions/gsd/quick.js +206 -0
  181. package/dist/resources/extensions/gsd/repo-identity.js +187 -0
  182. package/dist/resources/extensions/gsd/{reports.ts → reports.js} +146 -241
  183. package/dist/resources/extensions/gsd/{resource-version.ts → resource-version.js} +50 -53
  184. package/dist/resources/extensions/gsd/roadmap-slices.js +130 -0
  185. package/dist/resources/extensions/gsd/routing-history.js +210 -0
  186. package/dist/resources/extensions/gsd/safe-fs.js +52 -0
  187. package/dist/resources/extensions/gsd/semantic-chunker.js +254 -0
  188. package/dist/resources/extensions/gsd/session-forensics.js +427 -0
  189. package/dist/resources/extensions/gsd/session-lock.js +397 -0
  190. package/dist/resources/extensions/gsd/session-status-io.js +134 -0
  191. package/dist/resources/extensions/gsd/skill-discovery.js +121 -0
  192. package/dist/resources/extensions/gsd/skill-health.js +324 -0
  193. package/dist/resources/extensions/gsd/{skill-telemetry.ts → skill-telemetry.js} +58 -74
  194. package/dist/resources/extensions/gsd/state.js +653 -0
  195. package/dist/resources/extensions/gsd/structured-data-formatter.js +97 -0
  196. package/dist/resources/extensions/gsd/summary-distiller.js +212 -0
  197. package/dist/resources/extensions/gsd/templates/preferences.md +1 -0
  198. package/dist/resources/extensions/gsd/token-counter.js +54 -0
  199. package/dist/resources/extensions/gsd/triage-resolution.js +217 -0
  200. package/dist/resources/extensions/gsd/triage-ui.js +125 -0
  201. package/dist/resources/extensions/gsd/types.js +4 -0
  202. package/dist/resources/extensions/gsd/undo.js +205 -0
  203. package/dist/resources/extensions/gsd/unit-id.js +7 -0
  204. package/dist/resources/extensions/gsd/unit-runtime.js +131 -0
  205. package/dist/resources/extensions/gsd/validate-directory.js +143 -0
  206. package/dist/resources/extensions/gsd/verification-evidence.js +122 -0
  207. package/dist/resources/extensions/gsd/verification-gate.js +514 -0
  208. package/dist/resources/extensions/gsd/visualizer-data.js +612 -0
  209. package/dist/resources/extensions/gsd/visualizer-overlay.js +501 -0
  210. package/dist/resources/extensions/gsd/visualizer-views.js +893 -0
  211. package/dist/resources/extensions/gsd/workflow-templates.js +188 -0
  212. package/dist/resources/extensions/gsd/workspace-index.js +139 -0
  213. package/dist/resources/extensions/gsd/worktree-command-bootstrap.js +40 -0
  214. package/dist/resources/extensions/gsd/worktree-command.js +682 -0
  215. package/dist/resources/extensions/gsd/worktree-manager.js +358 -0
  216. package/dist/resources/extensions/gsd/worktree-resolver.js +344 -0
  217. package/dist/resources/extensions/gsd/worktree.js +199 -0
  218. package/dist/resources/extensions/mac-tools/index.js +768 -0
  219. package/dist/resources/extensions/mcp-client/index.js +363 -0
  220. package/dist/resources/extensions/package.json +3 -0
  221. package/dist/resources/extensions/remote-questions/config.js +70 -0
  222. package/dist/resources/extensions/remote-questions/discord-adapter.js +134 -0
  223. package/dist/resources/extensions/remote-questions/format.js +234 -0
  224. package/dist/resources/extensions/remote-questions/http-client.js +43 -0
  225. package/dist/resources/extensions/remote-questions/manager.js +156 -0
  226. package/dist/resources/extensions/remote-questions/{mod.ts → mod.js} +1 -10
  227. package/dist/resources/extensions/remote-questions/notify.js +89 -0
  228. package/dist/resources/extensions/remote-questions/remote-command.js +453 -0
  229. package/dist/resources/extensions/remote-questions/slack-adapter.js +123 -0
  230. package/dist/resources/extensions/remote-questions/status.js +25 -0
  231. package/dist/resources/extensions/remote-questions/store.js +70 -0
  232. package/dist/resources/extensions/remote-questions/telegram-adapter.js +123 -0
  233. package/dist/resources/extensions/remote-questions/types.js +5 -0
  234. package/dist/resources/extensions/search-the-web/cache.js +74 -0
  235. package/dist/resources/extensions/search-the-web/command-search-provider.js +79 -0
  236. package/dist/resources/extensions/search-the-web/format.js +161 -0
  237. package/dist/resources/extensions/search-the-web/http.js +178 -0
  238. package/dist/resources/extensions/search-the-web/index.js +41 -0
  239. package/dist/resources/extensions/search-the-web/native-search.js +166 -0
  240. package/dist/resources/extensions/search-the-web/provider.js +143 -0
  241. package/dist/resources/extensions/search-the-web/tavily.js +82 -0
  242. package/dist/resources/extensions/search-the-web/tool-fetch-page.js +452 -0
  243. package/dist/resources/extensions/search-the-web/tool-llm-context.js +455 -0
  244. package/dist/resources/extensions/search-the-web/tool-search.js +482 -0
  245. package/dist/resources/extensions/search-the-web/url-utils.js +121 -0
  246. package/dist/resources/extensions/shared/confirm-ui.js +96 -0
  247. package/dist/resources/extensions/shared/{format-utils.ts → format-utils.js} +85 -91
  248. package/dist/resources/extensions/shared/frontmatter.js +109 -0
  249. package/dist/resources/extensions/shared/interview-ui.js +569 -0
  250. package/dist/resources/extensions/shared/{mod.ts → mod.js} +2 -24
  251. package/dist/resources/extensions/shared/next-action-ui.js +168 -0
  252. package/dist/resources/extensions/shared/{path-display.ts → path-display.js} +2 -3
  253. package/dist/resources/extensions/shared/sanitize.js +17 -0
  254. package/dist/resources/extensions/shared/terminal.js +21 -0
  255. package/dist/resources/extensions/shared/ui.js +245 -0
  256. package/dist/resources/extensions/shared/wizard-ui.js +478 -0
  257. package/dist/resources/extensions/slash-commands/audit.js +72 -0
  258. package/dist/resources/extensions/slash-commands/clear.js +8 -0
  259. package/dist/resources/extensions/slash-commands/create-extension.js +264 -0
  260. package/dist/resources/extensions/slash-commands/create-slash-command.js +208 -0
  261. package/dist/resources/extensions/slash-commands/index.js +10 -0
  262. package/dist/resources/extensions/subagent/agents.js +103 -0
  263. package/dist/resources/extensions/subagent/index.js +905 -0
  264. package/dist/resources/extensions/subagent/isolation.js +384 -0
  265. package/dist/resources/extensions/subagent/worker-registry.js +73 -0
  266. package/dist/resources/extensions/ttsr/index.js +144 -0
  267. package/dist/resources/extensions/ttsr/rule-loader.js +70 -0
  268. package/dist/resources/extensions/ttsr/ttsr-manager.js +380 -0
  269. package/dist/resources/extensions/universal-config/discovery.js +94 -0
  270. package/dist/resources/extensions/universal-config/format.js +178 -0
  271. package/dist/resources/extensions/universal-config/index.js +99 -0
  272. package/dist/resources/extensions/universal-config/scanners.js +574 -0
  273. package/dist/resources/extensions/universal-config/tools.js +57 -0
  274. package/dist/resources/extensions/universal-config/types.js +8 -0
  275. package/dist/resources/extensions/voice/index.js +247 -0
  276. package/dist/startup-timings.d.ts +2 -0
  277. package/dist/startup-timings.js +22 -0
  278. package/dist/tool-bootstrap.js +59 -11
  279. package/dist/worktree-cli.js +7 -7
  280. package/package.json +1 -1
  281. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  282. package/packages/pi-coding-agent/dist/core/agent-session.js +9 -0
  283. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  284. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +1 -1
  285. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  286. package/packages/pi-coding-agent/dist/core/extensions/index.js +1 -1
  287. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +1 -0
  289. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  290. package/packages/pi-coding-agent/dist/core/extensions/loader.js +31 -4
  291. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  292. package/packages/pi-coding-agent/dist/index.d.ts +1 -1
  293. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  294. package/packages/pi-coding-agent/dist/index.js +1 -1
  295. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  296. package/packages/pi-coding-agent/package.json +1 -1
  297. package/packages/pi-coding-agent/src/core/agent-session.ts +9 -0
  298. package/packages/pi-coding-agent/src/core/extensions/index.ts +1 -0
  299. package/packages/pi-coding-agent/src/core/extensions/loader.ts +35 -4
  300. package/packages/pi-coding-agent/src/index.ts +1 -0
  301. package/pkg/package.json +1 -1
  302. package/src/resources/extensions/bg-shell/index.ts +41 -46
  303. package/src/resources/extensions/browser-tools/index.ts +156 -67
  304. package/src/resources/extensions/gsd/auto/session.ts +47 -30
  305. package/src/resources/extensions/gsd/auto-dashboard.ts +28 -131
  306. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +6 -1
  307. package/src/resources/extensions/gsd/auto-dispatch.ts +135 -91
  308. package/src/resources/extensions/gsd/auto-loop.ts +1665 -0
  309. package/src/resources/extensions/gsd/auto-observability.ts +4 -2
  310. package/src/resources/extensions/gsd/auto-post-unit.ts +85 -228
  311. package/src/resources/extensions/gsd/auto-prompts.ts +138 -109
  312. package/src/resources/extensions/gsd/auto-recovery.ts +124 -118
  313. package/src/resources/extensions/gsd/auto-start.ts +440 -354
  314. package/src/resources/extensions/gsd/auto-supervisor.ts +5 -12
  315. package/src/resources/extensions/gsd/auto-timeout-recovery.ts +8 -8
  316. package/src/resources/extensions/gsd/auto-timers.ts +3 -4
  317. package/src/resources/extensions/gsd/auto-verification.ts +76 -72
  318. package/src/resources/extensions/gsd/auto-worktree-sync.ts +204 -0
  319. package/src/resources/extensions/gsd/auto-worktree.ts +453 -133
  320. package/src/resources/extensions/gsd/auto.ts +516 -1189
  321. package/src/resources/extensions/gsd/captures.ts +10 -4
  322. package/src/resources/extensions/gsd/commands-bootstrap.ts +252 -0
  323. package/src/resources/extensions/gsd/commands.ts +39 -31
  324. package/src/resources/extensions/gsd/dispatch-guard.ts +13 -9
  325. package/src/resources/extensions/gsd/docs/preferences-reference.md +25 -18
  326. package/src/resources/extensions/gsd/doctor-checks.ts +3 -4
  327. package/src/resources/extensions/gsd/git-service.ts +32 -12
  328. package/src/resources/extensions/gsd/gitignore.ts +4 -2
  329. package/src/resources/extensions/gsd/gsd-db.ts +375 -180
  330. package/src/resources/extensions/gsd/guided-flow.ts +22 -11
  331. package/src/resources/extensions/gsd/index.ts +76 -163
  332. package/src/resources/extensions/gsd/post-unit-hooks.ts +13 -13
  333. package/src/resources/extensions/gsd/progress-score.ts +65 -200
  334. package/src/resources/extensions/gsd/quick.ts +121 -76
  335. package/src/resources/extensions/gsd/repo-identity.ts +56 -22
  336. package/src/resources/extensions/gsd/session-lock.ts +17 -0
  337. package/src/resources/extensions/gsd/templates/preferences.md +1 -0
  338. package/src/resources/extensions/gsd/tests/agent-end-retry.test.ts +32 -59
  339. package/src/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +75 -27
  340. package/src/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +1 -1
  341. package/src/resources/extensions/gsd/tests/auto-lock-creation.test.ts +37 -0
  342. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +1458 -0
  343. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +8 -162
  344. package/src/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +2 -108
  345. package/src/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +1 -3
  346. package/src/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -3
  347. package/src/resources/extensions/gsd/tests/auto-worktree.test.ts +58 -0
  348. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -55
  349. package/src/resources/extensions/gsd/tests/git-service.test.ts +16 -7
  350. package/src/resources/extensions/gsd/tests/headless-query.test.ts +22 -0
  351. package/src/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +8 -11
  352. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +4 -6
  353. package/src/resources/extensions/gsd/tests/quick-branch-lifecycle.test.ts +281 -0
  354. package/src/resources/extensions/gsd/tests/repo-identity-worktree.test.ts +71 -0
  355. package/src/resources/extensions/gsd/tests/run-uat.test.ts +3 -3
  356. package/src/resources/extensions/gsd/tests/session-lock-regression.test.ts +64 -0
  357. package/src/resources/extensions/gsd/tests/sidecar-queue.test.ts +181 -0
  358. package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -3
  359. package/src/resources/extensions/gsd/tests/token-profile.test.ts +6 -6
  360. package/src/resources/extensions/gsd/tests/triage-dispatch.test.ts +6 -6
  361. package/src/resources/extensions/gsd/tests/undo.test.ts +6 -0
  362. package/src/resources/extensions/gsd/tests/verification-evidence.test.ts +24 -26
  363. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +7 -136
  364. package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +205 -0
  365. package/src/resources/extensions/gsd/tests/worktree-db.test.ts +442 -0
  366. package/src/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -3
  367. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +705 -0
  368. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +57 -106
  369. package/src/resources/extensions/gsd/tests/worktree.test.ts +5 -1
  370. package/src/resources/extensions/gsd/tests/write-gate.test.ts +43 -132
  371. package/src/resources/extensions/gsd/types.ts +90 -77
  372. package/src/resources/extensions/gsd/undo.ts +42 -46
  373. package/src/resources/extensions/gsd/unit-runtime.ts +14 -18
  374. package/src/resources/extensions/gsd/verification-evidence.ts +0 -2
  375. package/src/resources/extensions/gsd/verification-gate.ts +4 -16
  376. package/src/resources/extensions/gsd/worktree-command-bootstrap.ts +46 -0
  377. package/src/resources/extensions/gsd/worktree-command.ts +29 -11
  378. package/src/resources/extensions/gsd/worktree-manager.ts +2 -3
  379. package/src/resources/extensions/gsd/worktree-resolver.ts +485 -0
  380. package/src/resources/extensions/gsd/worktree.ts +7 -44
  381. package/src/resources/extensions/package.json +3 -0
  382. package/src/resources/extensions/search-the-web/command-search-provider.ts +1 -1
  383. package/src/resources/extensions/search-the-web/index.ts +35 -52
  384. package/src/resources/extensions/search-the-web/tavily.ts +1 -1
  385. package/dist/resources/extensions/ask-user-questions.ts +0 -290
  386. package/dist/resources/extensions/async-jobs/async-bash-tool.ts +0 -212
  387. package/dist/resources/extensions/async-jobs/await-tool.ts +0 -103
  388. package/dist/resources/extensions/async-jobs/cancel-job-tool.ts +0 -35
  389. package/dist/resources/extensions/async-jobs/index.ts +0 -141
  390. package/dist/resources/extensions/async-jobs/job-manager.ts +0 -211
  391. package/dist/resources/extensions/aws-auth/index.ts +0 -144
  392. package/dist/resources/extensions/bg-shell/bg-shell-command.ts +0 -219
  393. package/dist/resources/extensions/bg-shell/bg-shell-lifecycle.ts +0 -400
  394. package/dist/resources/extensions/bg-shell/bg-shell-tool.ts +0 -985
  395. package/dist/resources/extensions/bg-shell/index.ts +0 -59
  396. package/dist/resources/extensions/bg-shell/interaction.ts +0 -198
  397. package/dist/resources/extensions/bg-shell/output-formatter.ts +0 -279
  398. package/dist/resources/extensions/bg-shell/overlay.ts +0 -437
  399. package/dist/resources/extensions/bg-shell/process-manager.ts +0 -464
  400. package/dist/resources/extensions/bg-shell/readiness-detector.ts +0 -126
  401. package/dist/resources/extensions/bg-shell/types.ts +0 -303
  402. package/dist/resources/extensions/bg-shell/utilities.ts +0 -57
  403. package/dist/resources/extensions/browser-tools/capture.ts +0 -199
  404. package/dist/resources/extensions/browser-tools/core.ts +0 -1196
  405. package/dist/resources/extensions/browser-tools/index.ts +0 -71
  406. package/dist/resources/extensions/browser-tools/lifecycle.ts +0 -270
  407. package/dist/resources/extensions/browser-tools/refs.ts +0 -264
  408. package/dist/resources/extensions/browser-tools/settle.ts +0 -197
  409. package/dist/resources/extensions/browser-tools/state.ts +0 -408
  410. package/dist/resources/extensions/browser-tools/tools/action-cache.ts +0 -216
  411. package/dist/resources/extensions/browser-tools/tools/assertions.ts +0 -342
  412. package/dist/resources/extensions/browser-tools/tools/codegen.ts +0 -274
  413. package/dist/resources/extensions/browser-tools/tools/device.ts +0 -183
  414. package/dist/resources/extensions/browser-tools/tools/extract.ts +0 -229
  415. package/dist/resources/extensions/browser-tools/tools/forms.ts +0 -801
  416. package/dist/resources/extensions/browser-tools/tools/injection-detect.ts +0 -221
  417. package/dist/resources/extensions/browser-tools/tools/inspection.ts +0 -492
  418. package/dist/resources/extensions/browser-tools/tools/intent.ts +0 -614
  419. package/dist/resources/extensions/browser-tools/tools/interaction.ts +0 -865
  420. package/dist/resources/extensions/browser-tools/tools/navigation.ts +0 -232
  421. package/dist/resources/extensions/browser-tools/tools/network-mock.ts +0 -244
  422. package/dist/resources/extensions/browser-tools/tools/pages.ts +0 -303
  423. package/dist/resources/extensions/browser-tools/tools/pdf.ts +0 -92
  424. package/dist/resources/extensions/browser-tools/tools/refs.ts +0 -541
  425. package/dist/resources/extensions/browser-tools/tools/screenshot.ts +0 -101
  426. package/dist/resources/extensions/browser-tools/tools/session.ts +0 -400
  427. package/dist/resources/extensions/browser-tools/tools/state-persistence.ts +0 -202
  428. package/dist/resources/extensions/browser-tools/tools/visual-diff.ts +0 -209
  429. package/dist/resources/extensions/browser-tools/tools/wait.ts +0 -247
  430. package/dist/resources/extensions/browser-tools/tools/zoom.ts +0 -104
  431. package/dist/resources/extensions/browser-tools/utils.ts +0 -660
  432. package/dist/resources/extensions/context7/index.ts +0 -428
  433. package/dist/resources/extensions/get-secrets-from-user.ts +0 -607
  434. package/dist/resources/extensions/google-search/index.ts +0 -466
  435. package/dist/resources/extensions/gsd/activity-log.ts +0 -162
  436. package/dist/resources/extensions/gsd/atomic-write.ts +0 -35
  437. package/dist/resources/extensions/gsd/auto/session.ts +0 -236
  438. package/dist/resources/extensions/gsd/auto-budget.ts +0 -32
  439. package/dist/resources/extensions/gsd/auto-constants.ts +0 -6
  440. package/dist/resources/extensions/gsd/auto-dashboard.ts +0 -626
  441. package/dist/resources/extensions/gsd/auto-direct-dispatch.ts +0 -224
  442. package/dist/resources/extensions/gsd/auto-dispatch.ts +0 -409
  443. package/dist/resources/extensions/gsd/auto-idempotency.ts +0 -151
  444. package/dist/resources/extensions/gsd/auto-model-selection.ts +0 -179
  445. package/dist/resources/extensions/gsd/auto-observability.ts +0 -72
  446. package/dist/resources/extensions/gsd/auto-post-unit.ts +0 -618
  447. package/dist/resources/extensions/gsd/auto-prompts.ts +0 -1273
  448. package/dist/resources/extensions/gsd/auto-recovery.ts +0 -578
  449. package/dist/resources/extensions/gsd/auto-start.ts +0 -483
  450. package/dist/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  451. package/dist/resources/extensions/gsd/auto-supervisor.ts +0 -61
  452. package/dist/resources/extensions/gsd/auto-timeout-recovery.ts +0 -263
  453. package/dist/resources/extensions/gsd/auto-timers.ts +0 -224
  454. package/dist/resources/extensions/gsd/auto-tool-tracking.ts +0 -54
  455. package/dist/resources/extensions/gsd/auto-unit-closeout.ts +0 -48
  456. package/dist/resources/extensions/gsd/auto-verification.ts +0 -229
  457. package/dist/resources/extensions/gsd/auto-worktree.ts +0 -658
  458. package/dist/resources/extensions/gsd/auto.ts +0 -1834
  459. package/dist/resources/extensions/gsd/captures.ts +0 -427
  460. package/dist/resources/extensions/gsd/claude-import.ts +0 -656
  461. package/dist/resources/extensions/gsd/collision-diagnostics.ts +0 -332
  462. package/dist/resources/extensions/gsd/commands-config.ts +0 -102
  463. package/dist/resources/extensions/gsd/commands-extensions.ts +0 -328
  464. package/dist/resources/extensions/gsd/commands-handlers.ts +0 -395
  465. package/dist/resources/extensions/gsd/commands-inspect.ts +0 -91
  466. package/dist/resources/extensions/gsd/commands-logs.ts +0 -536
  467. package/dist/resources/extensions/gsd/commands-maintenance.ts +0 -206
  468. package/dist/resources/extensions/gsd/commands-prefs-wizard.ts +0 -780
  469. package/dist/resources/extensions/gsd/commands-workflow-templates.ts +0 -543
  470. package/dist/resources/extensions/gsd/commands.ts +0 -1149
  471. package/dist/resources/extensions/gsd/complexity-classifier.ts +0 -320
  472. package/dist/resources/extensions/gsd/context-budget.ts +0 -266
  473. package/dist/resources/extensions/gsd/context-store.ts +0 -195
  474. package/dist/resources/extensions/gsd/crash-recovery.ts +0 -121
  475. package/dist/resources/extensions/gsd/dashboard-overlay.ts +0 -681
  476. package/dist/resources/extensions/gsd/db-writer.ts +0 -360
  477. package/dist/resources/extensions/gsd/debug-logger.ts +0 -178
  478. package/dist/resources/extensions/gsd/detection.ts +0 -470
  479. package/dist/resources/extensions/gsd/diff-context.ts +0 -214
  480. package/dist/resources/extensions/gsd/dispatch-guard.ts +0 -81
  481. package/dist/resources/extensions/gsd/doctor-checks.ts +0 -612
  482. package/dist/resources/extensions/gsd/doctor-environment.ts +0 -497
  483. package/dist/resources/extensions/gsd/doctor-format.ts +0 -78
  484. package/dist/resources/extensions/gsd/doctor-proactive.ts +0 -292
  485. package/dist/resources/extensions/gsd/doctor-providers.ts +0 -343
  486. package/dist/resources/extensions/gsd/doctor-types.ts +0 -87
  487. package/dist/resources/extensions/gsd/doctor.ts +0 -722
  488. package/dist/resources/extensions/gsd/error-utils.ts +0 -6
  489. package/dist/resources/extensions/gsd/exit-command.ts +0 -18
  490. package/dist/resources/extensions/gsd/export.ts +0 -317
  491. package/dist/resources/extensions/gsd/file-watcher.ts +0 -97
  492. package/dist/resources/extensions/gsd/files.ts +0 -1058
  493. package/dist/resources/extensions/gsd/forensics.ts +0 -629
  494. package/dist/resources/extensions/gsd/git-self-heal.ts +0 -127
  495. package/dist/resources/extensions/gsd/git-service.ts +0 -580
  496. package/dist/resources/extensions/gsd/gsd-db.ts +0 -685
  497. package/dist/resources/extensions/gsd/guided-flow-queue.ts +0 -440
  498. package/dist/resources/extensions/gsd/guided-flow.ts +0 -1303
  499. package/dist/resources/extensions/gsd/health-widget.ts +0 -167
  500. package/dist/resources/extensions/gsd/history.ts +0 -143
  501. package/dist/resources/extensions/gsd/index.ts +0 -1390
  502. package/dist/resources/extensions/gsd/init-wizard.ts +0 -587
  503. package/dist/resources/extensions/gsd/json-persistence.ts +0 -67
  504. package/dist/resources/extensions/gsd/key-manager.ts +0 -996
  505. package/dist/resources/extensions/gsd/marketplace-discovery.ts +0 -508
  506. package/dist/resources/extensions/gsd/md-importer.ts +0 -527
  507. package/dist/resources/extensions/gsd/mechanical-completion.ts +0 -430
  508. package/dist/resources/extensions/gsd/memory-extractor.ts +0 -352
  509. package/dist/resources/extensions/gsd/memory-store.ts +0 -441
  510. package/dist/resources/extensions/gsd/metrics.ts +0 -532
  511. package/dist/resources/extensions/gsd/migrate/command.ts +0 -219
  512. package/dist/resources/extensions/gsd/migrate/index.ts +0 -42
  513. package/dist/resources/extensions/gsd/migrate/parser.ts +0 -323
  514. package/dist/resources/extensions/gsd/migrate/parsers.ts +0 -539
  515. package/dist/resources/extensions/gsd/migrate/preview.ts +0 -48
  516. package/dist/resources/extensions/gsd/migrate/transformer.ts +0 -346
  517. package/dist/resources/extensions/gsd/migrate/types.ts +0 -370
  518. package/dist/resources/extensions/gsd/migrate/validator.ts +0 -55
  519. package/dist/resources/extensions/gsd/migrate/writer.ts +0 -579
  520. package/dist/resources/extensions/gsd/migrate-external.ts +0 -140
  521. package/dist/resources/extensions/gsd/milestone-actions.ts +0 -126
  522. package/dist/resources/extensions/gsd/model-cost-table.ts +0 -65
  523. package/dist/resources/extensions/gsd/model-router.ts +0 -256
  524. package/dist/resources/extensions/gsd/namespaced-registry.ts +0 -467
  525. package/dist/resources/extensions/gsd/namespaced-resolver.ts +0 -307
  526. package/dist/resources/extensions/gsd/native-git-bridge.ts +0 -1041
  527. package/dist/resources/extensions/gsd/native-parser-bridge.ts +0 -267
  528. package/dist/resources/extensions/gsd/notifications.ts +0 -87
  529. package/dist/resources/extensions/gsd/observability-validator.ts +0 -429
  530. package/dist/resources/extensions/gsd/parallel-eligibility.ts +0 -233
  531. package/dist/resources/extensions/gsd/parallel-merge.ts +0 -157
  532. package/dist/resources/extensions/gsd/parallel-orchestrator.ts +0 -826
  533. package/dist/resources/extensions/gsd/paths.ts +0 -449
  534. package/dist/resources/extensions/gsd/plugin-importer.ts +0 -411
  535. package/dist/resources/extensions/gsd/post-unit-hooks.ts +0 -520
  536. package/dist/resources/extensions/gsd/preferences-models.ts +0 -329
  537. package/dist/resources/extensions/gsd/preferences-skills.ts +0 -169
  538. package/dist/resources/extensions/gsd/preferences-types.ts +0 -229
  539. package/dist/resources/extensions/gsd/preferences-validation.ts +0 -590
  540. package/dist/resources/extensions/gsd/preferences.ts +0 -416
  541. package/dist/resources/extensions/gsd/progress-score.ts +0 -273
  542. package/dist/resources/extensions/gsd/prompt-cache-optimizer.ts +0 -213
  543. package/dist/resources/extensions/gsd/prompt-compressor.ts +0 -508
  544. package/dist/resources/extensions/gsd/prompt-loader.ts +0 -130
  545. package/dist/resources/extensions/gsd/prompt-ordering.ts +0 -200
  546. package/dist/resources/extensions/gsd/provider-error-pause.ts +0 -88
  547. package/dist/resources/extensions/gsd/queue-order.ts +0 -230
  548. package/dist/resources/extensions/gsd/queue-reorder-ui.ts +0 -276
  549. package/dist/resources/extensions/gsd/quick.ts +0 -212
  550. package/dist/resources/extensions/gsd/repo-identity.ts +0 -169
  551. package/dist/resources/extensions/gsd/roadmap-slices.ts +0 -149
  552. package/dist/resources/extensions/gsd/routing-history.ts +0 -286
  553. package/dist/resources/extensions/gsd/safe-fs.ts +0 -47
  554. package/dist/resources/extensions/gsd/semantic-chunker.ts +0 -336
  555. package/dist/resources/extensions/gsd/session-forensics.ts +0 -537
  556. package/dist/resources/extensions/gsd/session-lock.ts +0 -426
  557. package/dist/resources/extensions/gsd/session-status-io.ts +0 -179
  558. package/dist/resources/extensions/gsd/skill-discovery.ts +0 -139
  559. package/dist/resources/extensions/gsd/skill-health.ts +0 -417
  560. package/dist/resources/extensions/gsd/state.ts +0 -727
  561. package/dist/resources/extensions/gsd/structured-data-formatter.ts +0 -144
  562. package/dist/resources/extensions/gsd/summary-distiller.ts +0 -258
  563. package/dist/resources/extensions/gsd/tests/activity-log.test.ts +0 -213
  564. package/dist/resources/extensions/gsd/tests/agent-end-retry.test.ts +0 -107
  565. package/dist/resources/extensions/gsd/tests/all-milestones-complete-merge.test.ts +0 -200
  566. package/dist/resources/extensions/gsd/tests/auto-budget-alerts.test.ts +0 -50
  567. package/dist/resources/extensions/gsd/tests/auto-dashboard.test.ts +0 -166
  568. package/dist/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  569. package/dist/resources/extensions/gsd/tests/auto-lock-creation.test.ts +0 -186
  570. package/dist/resources/extensions/gsd/tests/auto-preflight.test.ts +0 -40
  571. package/dist/resources/extensions/gsd/tests/auto-recovery.test.ts +0 -640
  572. package/dist/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  573. package/dist/resources/extensions/gsd/tests/auto-secrets-gate.test.ts +0 -302
  574. package/dist/resources/extensions/gsd/tests/auto-session-encapsulation.test.ts +0 -257
  575. package/dist/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  576. package/dist/resources/extensions/gsd/tests/auto-worktree-milestone-merge.test.ts +0 -340
  577. package/dist/resources/extensions/gsd/tests/auto-worktree.test.ts +0 -167
  578. package/dist/resources/extensions/gsd/tests/budget-prediction.test.ts +0 -220
  579. package/dist/resources/extensions/gsd/tests/cache-staleness-regression.test.ts +0 -317
  580. package/dist/resources/extensions/gsd/tests/captures.test.ts +0 -438
  581. package/dist/resources/extensions/gsd/tests/claude-import-tui.test.ts +0 -351
  582. package/dist/resources/extensions/gsd/tests/collect-from-manifest.test.ts +0 -469
  583. package/dist/resources/extensions/gsd/tests/collision-diagnostics.test.ts +0 -705
  584. package/dist/resources/extensions/gsd/tests/commands-logs.test.ts +0 -241
  585. package/dist/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -209
  586. package/dist/resources/extensions/gsd/tests/complexity-classifier.test.ts +0 -181
  587. package/dist/resources/extensions/gsd/tests/context-budget.test.ts +0 -352
  588. package/dist/resources/extensions/gsd/tests/context-compression.test.ts +0 -193
  589. package/dist/resources/extensions/gsd/tests/context-store.test.ts +0 -462
  590. package/dist/resources/extensions/gsd/tests/continue-here.test.ts +0 -285
  591. package/dist/resources/extensions/gsd/tests/cost-projection.test.ts +0 -134
  592. package/dist/resources/extensions/gsd/tests/crash-recovery.test.ts +0 -134
  593. package/dist/resources/extensions/gsd/tests/dashboard-budget.test.ts +0 -346
  594. package/dist/resources/extensions/gsd/tests/db-writer.test.ts +0 -602
  595. package/dist/resources/extensions/gsd/tests/debug-logger.test.ts +0 -185
  596. package/dist/resources/extensions/gsd/tests/derive-state-db.test.ts +0 -405
  597. package/dist/resources/extensions/gsd/tests/derive-state-deps.test.ts +0 -421
  598. package/dist/resources/extensions/gsd/tests/derive-state-draft.test.ts +0 -308
  599. package/dist/resources/extensions/gsd/tests/derive-state.test.ts +0 -788
  600. package/dist/resources/extensions/gsd/tests/detection.test.ts +0 -398
  601. package/dist/resources/extensions/gsd/tests/diff-context.test.ts +0 -136
  602. package/dist/resources/extensions/gsd/tests/discuss-prompt.test.ts +0 -15
  603. package/dist/resources/extensions/gsd/tests/dispatch-guard.test.ts +0 -128
  604. package/dist/resources/extensions/gsd/tests/dispatch-missing-task-plans.test.ts +0 -132
  605. package/dist/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  606. package/dist/resources/extensions/gsd/tests/doctor-environment.test.ts +0 -314
  607. package/dist/resources/extensions/gsd/tests/doctor-fixlevel.test.ts +0 -245
  608. package/dist/resources/extensions/gsd/tests/doctor-git.test.ts +0 -344
  609. package/dist/resources/extensions/gsd/tests/doctor-proactive.test.ts +0 -278
  610. package/dist/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -298
  611. package/dist/resources/extensions/gsd/tests/doctor-runtime.test.ts +0 -302
  612. package/dist/resources/extensions/gsd/tests/doctor.test.ts +0 -652
  613. package/dist/resources/extensions/gsd/tests/draft-promotion.test.ts +0 -169
  614. package/dist/resources/extensions/gsd/tests/exit-command.test.ts +0 -50
  615. package/dist/resources/extensions/gsd/tests/export-html-all.test.ts +0 -105
  616. package/dist/resources/extensions/gsd/tests/export-html-enhancements.test.ts +0 -378
  617. package/dist/resources/extensions/gsd/tests/extension-selector-separator.test.ts +0 -144
  618. package/dist/resources/extensions/gsd/tests/feature-branch-lifecycle-integration.test.ts +0 -424
  619. package/dist/resources/extensions/gsd/tests/git-self-heal.test.ts +0 -131
  620. package/dist/resources/extensions/gsd/tests/git-service.test.ts +0 -1172
  621. package/dist/resources/extensions/gsd/tests/gsd-db.test.ts +0 -353
  622. package/dist/resources/extensions/gsd/tests/gsd-inspect.test.ts +0 -125
  623. package/dist/resources/extensions/gsd/tests/gsd-tools.test.ts +0 -326
  624. package/dist/resources/extensions/gsd/tests/headless-answers.test.ts +0 -340
  625. package/dist/resources/extensions/gsd/tests/headless-query.test.ts +0 -162
  626. package/dist/resources/extensions/gsd/tests/idle-recovery.test.ts +0 -485
  627. package/dist/resources/extensions/gsd/tests/in-flight-tool-tracking.test.ts +0 -32
  628. package/dist/resources/extensions/gsd/tests/init-wizard.test.ts +0 -197
  629. package/dist/resources/extensions/gsd/tests/integration/headless-command.ts +0 -534
  630. package/dist/resources/extensions/gsd/tests/integration-edge.test.ts +0 -228
  631. package/dist/resources/extensions/gsd/tests/integration-lifecycle.test.ts +0 -277
  632. package/dist/resources/extensions/gsd/tests/integration-mixed-milestones.test.ts +0 -523
  633. package/dist/resources/extensions/gsd/tests/key-manager.test.ts +0 -414
  634. package/dist/resources/extensions/gsd/tests/knowledge.test.ts +0 -161
  635. package/dist/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  636. package/dist/resources/extensions/gsd/tests/manifest-status.test.ts +0 -283
  637. package/dist/resources/extensions/gsd/tests/marketplace-test-fixtures.ts +0 -91
  638. package/dist/resources/extensions/gsd/tests/md-importer.test.ts +0 -410
  639. package/dist/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  640. package/dist/resources/extensions/gsd/tests/memory-extractor.test.ts +0 -180
  641. package/dist/resources/extensions/gsd/tests/memory-leak-guards.test.ts +0 -91
  642. package/dist/resources/extensions/gsd/tests/memory-store.test.ts +0 -345
  643. package/dist/resources/extensions/gsd/tests/metrics.test.ts +0 -253
  644. package/dist/resources/extensions/gsd/tests/migrate-command.test.ts +0 -369
  645. package/dist/resources/extensions/gsd/tests/migrate-parser.test.ts +0 -757
  646. package/dist/resources/extensions/gsd/tests/migrate-transformer.test.ts +0 -635
  647. package/dist/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +0 -414
  648. package/dist/resources/extensions/gsd/tests/migrate-writer-integration.test.ts +0 -303
  649. package/dist/resources/extensions/gsd/tests/migrate-writer.test.ts +0 -398
  650. package/dist/resources/extensions/gsd/tests/milestone-transition-worktree.test.ts +0 -147
  651. package/dist/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -69
  652. package/dist/resources/extensions/gsd/tests/model-isolation.test.ts +0 -157
  653. package/dist/resources/extensions/gsd/tests/model-router.test.ts +0 -167
  654. package/dist/resources/extensions/gsd/tests/must-have-parser.test.ts +0 -291
  655. package/dist/resources/extensions/gsd/tests/namespaced-registry.test.ts +0 -1027
  656. package/dist/resources/extensions/gsd/tests/namespaced-resolver.test.ts +0 -671
  657. package/dist/resources/extensions/gsd/tests/native-has-changes-cache.test.ts +0 -61
  658. package/dist/resources/extensions/gsd/tests/next-milestone-id.test.ts +0 -23
  659. package/dist/resources/extensions/gsd/tests/none-mode-gates.test.ts +0 -114
  660. package/dist/resources/extensions/gsd/tests/notifications.test.ts +0 -67
  661. package/dist/resources/extensions/gsd/tests/overrides.test.ts +0 -131
  662. package/dist/resources/extensions/gsd/tests/parallel-budget-atomicity.test.ts +0 -331
  663. package/dist/resources/extensions/gsd/tests/parallel-crash-recovery.test.ts +0 -298
  664. package/dist/resources/extensions/gsd/tests/parallel-merge.test.ts +0 -468
  665. package/dist/resources/extensions/gsd/tests/parallel-orchestration.test.ts +0 -685
  666. package/dist/resources/extensions/gsd/tests/parallel-worker-monitoring.test.ts +0 -171
  667. package/dist/resources/extensions/gsd/tests/parallel-workers-multi-milestone-e2e.test.ts +0 -354
  668. package/dist/resources/extensions/gsd/tests/park-edge-cases.test.ts +0 -276
  669. package/dist/resources/extensions/gsd/tests/park-milestone.test.ts +0 -401
  670. package/dist/resources/extensions/gsd/tests/parsers.test.ts +0 -1704
  671. package/dist/resources/extensions/gsd/tests/plan-milestone.test.ts +0 -133
  672. package/dist/resources/extensions/gsd/tests/plan-quality-validator.test.ts +0 -363
  673. package/dist/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +0 -42
  674. package/dist/resources/extensions/gsd/tests/plugin-importer-live.test.ts +0 -481
  675. package/dist/resources/extensions/gsd/tests/plugin-importer.test.ts +0 -1383
  676. package/dist/resources/extensions/gsd/tests/post-unit-hooks.test.ts +0 -337
  677. package/dist/resources/extensions/gsd/tests/preferences.test.ts +0 -276
  678. package/dist/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  679. package/dist/resources/extensions/gsd/tests/prompt-budget-enforcement.test.ts +0 -464
  680. package/dist/resources/extensions/gsd/tests/prompt-cache-optimizer.test.ts +0 -314
  681. package/dist/resources/extensions/gsd/tests/prompt-compressor.test.ts +0 -529
  682. package/dist/resources/extensions/gsd/tests/prompt-db.test.ts +0 -385
  683. package/dist/resources/extensions/gsd/tests/prompt-ordering.test.ts +0 -296
  684. package/dist/resources/extensions/gsd/tests/provider-errors.test.ts +0 -338
  685. package/dist/resources/extensions/gsd/tests/queue-draft-detection.test.ts +0 -126
  686. package/dist/resources/extensions/gsd/tests/queue-order.test.ts +0 -204
  687. package/dist/resources/extensions/gsd/tests/queue-reorder-e2e.test.ts +0 -282
  688. package/dist/resources/extensions/gsd/tests/reassess-detection.test.ts +0 -154
  689. package/dist/resources/extensions/gsd/tests/reassess-prompt.test.ts +0 -145
  690. package/dist/resources/extensions/gsd/tests/regex-hardening.test.ts +0 -281
  691. package/dist/resources/extensions/gsd/tests/remote-questions.test.ts +0 -642
  692. package/dist/resources/extensions/gsd/tests/remote-status.test.ts +0 -99
  693. package/dist/resources/extensions/gsd/tests/replan-slice.test.ts +0 -538
  694. package/dist/resources/extensions/gsd/tests/requirements.test.ts +0 -106
  695. package/dist/resources/extensions/gsd/tests/roadmap-parse-regression.test.ts +0 -358
  696. package/dist/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -66
  697. package/dist/resources/extensions/gsd/tests/routing-history.test.ts +0 -240
  698. package/dist/resources/extensions/gsd/tests/run-uat.test.ts +0 -416
  699. package/dist/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -185
  700. package/dist/resources/extensions/gsd/tests/semantic-chunker.test.ts +0 -426
  701. package/dist/resources/extensions/gsd/tests/session-lock-regression.test.ts +0 -216
  702. package/dist/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
  703. package/dist/resources/extensions/gsd/tests/skill-lifecycle.test.ts +0 -126
  704. package/dist/resources/extensions/gsd/tests/smart-entry-draft.test.ts +0 -123
  705. package/dist/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +0 -142
  706. package/dist/resources/extensions/gsd/tests/stop-auto-remote.test.ts +0 -156
  707. package/dist/resources/extensions/gsd/tests/structured-data-formatter.test.ts +0 -365
  708. package/dist/resources/extensions/gsd/tests/summary-distiller.test.ts +0 -323
  709. package/dist/resources/extensions/gsd/tests/test-helpers.ts +0 -61
  710. package/dist/resources/extensions/gsd/tests/token-counter.test.ts +0 -129
  711. package/dist/resources/extensions/gsd/tests/token-optimization-benchmark.test.ts +0 -1272
  712. package/dist/resources/extensions/gsd/tests/token-optimization-prefs.test.ts +0 -164
  713. package/dist/resources/extensions/gsd/tests/token-profile.test.ts +0 -268
  714. package/dist/resources/extensions/gsd/tests/token-savings.test.ts +0 -366
  715. package/dist/resources/extensions/gsd/tests/triage-dispatch.test.ts +0 -340
  716. package/dist/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -416
  717. package/dist/resources/extensions/gsd/tests/undo.test.ts +0 -136
  718. package/dist/resources/extensions/gsd/tests/unique-milestone-ids.test.ts +0 -219
  719. package/dist/resources/extensions/gsd/tests/unit-runtime.test.ts +0 -258
  720. package/dist/resources/extensions/gsd/tests/update-command.test.ts +0 -67
  721. package/dist/resources/extensions/gsd/tests/validate-directory.test.ts +0 -222
  722. package/dist/resources/extensions/gsd/tests/validate-milestone.test.ts +0 -375
  723. package/dist/resources/extensions/gsd/tests/verification-evidence.test.ts +0 -745
  724. package/dist/resources/extensions/gsd/tests/verification-gate.test.ts +0 -1208
  725. package/dist/resources/extensions/gsd/tests/visualizer-critical-path.test.ts +0 -145
  726. package/dist/resources/extensions/gsd/tests/visualizer-data.test.ts +0 -446
  727. package/dist/resources/extensions/gsd/tests/visualizer-overlay.test.ts +0 -237
  728. package/dist/resources/extensions/gsd/tests/visualizer-views.test.ts +0 -718
  729. package/dist/resources/extensions/gsd/tests/worker-registry.test.ts +0 -148
  730. package/dist/resources/extensions/gsd/tests/workflow-templates.test.ts +0 -173
  731. package/dist/resources/extensions/gsd/tests/workspace-index.test.ts +0 -38
  732. package/dist/resources/extensions/gsd/tests/worktree-bugfix.test.ts +0 -120
  733. package/dist/resources/extensions/gsd/tests/worktree-e2e.test.ts +0 -244
  734. package/dist/resources/extensions/gsd/tests/worktree-integration.test.ts +0 -207
  735. package/dist/resources/extensions/gsd/tests/worktree-manager.test.ts +0 -141
  736. package/dist/resources/extensions/gsd/tests/worktree-post-create-hook.test.ts +0 -165
  737. package/dist/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +0 -206
  738. package/dist/resources/extensions/gsd/tests/worktree.test.ts +0 -171
  739. package/dist/resources/extensions/gsd/tests/write-gate.test.ts +0 -211
  740. package/dist/resources/extensions/gsd/token-counter.ts +0 -65
  741. package/dist/resources/extensions/gsd/triage-resolution.ts +0 -284
  742. package/dist/resources/extensions/gsd/triage-ui.ts +0 -175
  743. package/dist/resources/extensions/gsd/types.ts +0 -425
  744. package/dist/resources/extensions/gsd/undo.ts +0 -223
  745. package/dist/resources/extensions/gsd/unit-id.ts +0 -14
  746. package/dist/resources/extensions/gsd/unit-runtime.ts +0 -192
  747. package/dist/resources/extensions/gsd/validate-directory.ts +0 -164
  748. package/dist/resources/extensions/gsd/verification-evidence.ts +0 -188
  749. package/dist/resources/extensions/gsd/verification-gate.ts +0 -643
  750. package/dist/resources/extensions/gsd/visualizer-data.ts +0 -866
  751. package/dist/resources/extensions/gsd/visualizer-overlay.ts +0 -566
  752. package/dist/resources/extensions/gsd/visualizer-views.ts +0 -1171
  753. package/dist/resources/extensions/gsd/workflow-templates.ts +0 -241
  754. package/dist/resources/extensions/gsd/workspace-index.ts +0 -217
  755. package/dist/resources/extensions/gsd/worktree-command.ts +0 -807
  756. package/dist/resources/extensions/gsd/worktree-manager.ts +0 -449
  757. package/dist/resources/extensions/gsd/worktree.ts +0 -257
  758. package/dist/resources/extensions/mac-tools/index.ts +0 -852
  759. package/dist/resources/extensions/mcp-client/index.ts +0 -459
  760. package/dist/resources/extensions/remote-questions/config.ts +0 -83
  761. package/dist/resources/extensions/remote-questions/discord-adapter.ts +0 -148
  762. package/dist/resources/extensions/remote-questions/format.ts +0 -315
  763. package/dist/resources/extensions/remote-questions/http-client.ts +0 -76
  764. package/dist/resources/extensions/remote-questions/manager.ts +0 -184
  765. package/dist/resources/extensions/remote-questions/notify.ts +0 -90
  766. package/dist/resources/extensions/remote-questions/remote-command.ts +0 -457
  767. package/dist/resources/extensions/remote-questions/slack-adapter.ts +0 -141
  768. package/dist/resources/extensions/remote-questions/status.ts +0 -31
  769. package/dist/resources/extensions/remote-questions/store.ts +0 -81
  770. package/dist/resources/extensions/remote-questions/telegram-adapter.ts +0 -149
  771. package/dist/resources/extensions/remote-questions/types.ts +0 -102
  772. package/dist/resources/extensions/search-the-web/cache.ts +0 -78
  773. package/dist/resources/extensions/search-the-web/command-search-provider.ts +0 -101
  774. package/dist/resources/extensions/search-the-web/format.ts +0 -258
  775. package/dist/resources/extensions/search-the-web/http.ts +0 -238
  776. package/dist/resources/extensions/search-the-web/index.ts +0 -65
  777. package/dist/resources/extensions/search-the-web/native-search.ts +0 -193
  778. package/dist/resources/extensions/search-the-web/provider.ts +0 -148
  779. package/dist/resources/extensions/search-the-web/tavily.ts +0 -116
  780. package/dist/resources/extensions/search-the-web/tool-fetch-page.ts +0 -589
  781. package/dist/resources/extensions/search-the-web/tool-llm-context.ts +0 -608
  782. package/dist/resources/extensions/search-the-web/tool-search.ts +0 -649
  783. package/dist/resources/extensions/search-the-web/url-utils.ts +0 -125
  784. package/dist/resources/extensions/shared/confirm-ui.ts +0 -126
  785. package/dist/resources/extensions/shared/frontmatter.ts +0 -117
  786. package/dist/resources/extensions/shared/interview-ui.ts +0 -613
  787. package/dist/resources/extensions/shared/next-action-ui.ts +0 -212
  788. package/dist/resources/extensions/shared/sanitize.ts +0 -19
  789. package/dist/resources/extensions/shared/terminal.ts +0 -23
  790. package/dist/resources/extensions/shared/tests/format-utils.test.ts +0 -153
  791. package/dist/resources/extensions/shared/ui.ts +0 -400
  792. package/dist/resources/extensions/shared/wizard-ui.ts +0 -551
  793. package/dist/resources/extensions/slash-commands/audit.ts +0 -88
  794. package/dist/resources/extensions/slash-commands/clear.ts +0 -10
  795. package/dist/resources/extensions/slash-commands/create-extension.ts +0 -297
  796. package/dist/resources/extensions/slash-commands/create-slash-command.ts +0 -234
  797. package/dist/resources/extensions/slash-commands/index.ts +0 -12
  798. package/dist/resources/extensions/subagent/agents.ts +0 -126
  799. package/dist/resources/extensions/subagent/index.ts +0 -1121
  800. package/dist/resources/extensions/subagent/isolation.ts +0 -501
  801. package/dist/resources/extensions/subagent/worker-registry.ts +0 -99
  802. package/dist/resources/extensions/ttsr/index.ts +0 -168
  803. package/dist/resources/extensions/ttsr/rule-loader.ts +0 -74
  804. package/dist/resources/extensions/ttsr/ttsr-manager.ts +0 -456
  805. package/dist/resources/extensions/universal-config/discovery.ts +0 -104
  806. package/dist/resources/extensions/universal-config/format.ts +0 -191
  807. package/dist/resources/extensions/universal-config/index.ts +0 -120
  808. package/dist/resources/extensions/universal-config/scanners.ts +0 -642
  809. package/dist/resources/extensions/universal-config/tests/discovery.test.ts +0 -119
  810. package/dist/resources/extensions/universal-config/tests/format.test.ts +0 -127
  811. package/dist/resources/extensions/universal-config/tests/scanners.test.ts +0 -456
  812. package/dist/resources/extensions/universal-config/tools.ts +0 -60
  813. package/dist/resources/extensions/universal-config/types.ts +0 -135
  814. package/dist/resources/extensions/voice/index.ts +0 -272
  815. package/dist/resources/skills/create-gsd-extension/templates/extension-skeleton.ts +0 -51
  816. package/dist/resources/skills/create-gsd-extension/templates/stateful-tool-skeleton.ts +0 -143
  817. package/src/resources/extensions/gsd/auto-constants.ts +0 -6
  818. package/src/resources/extensions/gsd/auto-idempotency.ts +0 -151
  819. package/src/resources/extensions/gsd/auto-stuck-detection.ts +0 -221
  820. package/src/resources/extensions/gsd/mechanical-completion.ts +0 -430
  821. package/src/resources/extensions/gsd/tests/auto-dispatch-loop.test.ts +0 -691
  822. package/src/resources/extensions/gsd/tests/auto-reentrancy-guard.test.ts +0 -127
  823. package/src/resources/extensions/gsd/tests/auto-skip-loop.test.ts +0 -123
  824. package/src/resources/extensions/gsd/tests/dispatch-stall-guard.test.ts +0 -126
  825. package/src/resources/extensions/gsd/tests/loop-regression.test.ts +0 -877
  826. package/src/resources/extensions/gsd/tests/mechanical-completion.test.ts +0 -356
  827. package/src/resources/extensions/gsd/tests/progress-score.test.ts +0 -206
  828. package/src/resources/extensions/gsd/tests/session-lock.test.ts +0 -434
@@ -1,652 +0,0 @@
1
- import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync, existsSync } from "node:fs";
2
- import { join } from "node:path";
3
- import { tmpdir } from "node:os";
4
-
5
- import { formatDoctorReport, runGSDDoctor, summarizeDoctorIssues, filterDoctorIssues, selectDoctorScope, validateTitle } from "../doctor.js";
6
- import { createTestContext } from './test-helpers.ts';
7
-
8
- const { assertEq, assertTrue, report } = createTestContext();
9
- const tmpBase = mkdtempSync(join(tmpdir(), "gsd-doctor-test-"));
10
- const gsd = join(tmpBase, ".gsd");
11
- const mDir = join(gsd, "milestones", "M001");
12
- const sDir = join(mDir, "slices", "S01");
13
- const tDir = join(sDir, "tasks");
14
- mkdirSync(tDir, { recursive: true });
15
-
16
- writeFileSync(join(mDir, "M001-ROADMAP.md"), `# M001: Test Milestone
17
-
18
- ## Slices
19
- - [ ] **S01: Demo Slice** \`risk:low\` \`depends:[]\`
20
- > After this: demo works
21
- `);
22
-
23
- writeFileSync(join(sDir, "S01-PLAN.md"), `# S01: Demo Slice
24
-
25
- **Goal:** Demo
26
- **Demo:** Demo
27
-
28
- ## Must-Haves
29
- - done
30
-
31
- ## Tasks
32
- - [x] **T01: Implement thing** \`est:10m\`
33
- Task is complete.
34
- `);
35
-
36
- writeFileSync(join(tDir, "T01-SUMMARY.md"), `---
37
- id: T01
38
- parent: S01
39
- milestone: M001
40
- provides: []
41
- requires: []
42
- affects: []
43
- key_files: []
44
- key_decisions: []
45
- patterns_established: []
46
- observability_surfaces: []
47
- drill_down_paths: []
48
- duration: 10m
49
- verification_result: passed
50
- completed_at: 2026-03-09T00:00:00Z
51
- ---
52
-
53
- # T01: Implement thing
54
-
55
- **Done**
56
-
57
- ## What Happened
58
- Implemented.
59
-
60
- ## Diagnostics
61
- - log
62
- `);
63
-
64
- async function main(): Promise<void> {
65
- console.log("\n=== doctor diagnose ===");
66
- {
67
- const report = await runGSDDoctor(tmpBase, { fix: false });
68
- assertTrue(!report.ok, "report is not ok when completion artifacts are missing");
69
- assertTrue(report.issues.some(issue => issue.code === "all_tasks_done_missing_slice_summary"), "detects missing slice summary");
70
- assertTrue(report.issues.some(issue => issue.code === "all_tasks_done_missing_slice_uat"), "detects missing slice UAT");
71
- }
72
-
73
- console.log("\n=== doctor formatting ===");
74
- {
75
- const report = await runGSDDoctor(tmpBase, { fix: false });
76
- const summary = summarizeDoctorIssues(report.issues);
77
- assertEq(summary.errors, 2, "two blocking errors in summary");
78
- const scoped = filterDoctorIssues(report.issues, { scope: "M001/S01", includeWarnings: true });
79
- assertTrue(scoped.length >= 2, "scope filter keeps slice issues");
80
- const text = formatDoctorReport(report, { scope: "M001/S01", includeWarnings: true, maxIssues: 5 });
81
- assertTrue(text.includes("Scope: M001/S01"), "formatted report shows scope");
82
- assertTrue(text.includes("Top issue types:"), "formatted report shows grouped issue types");
83
- }
84
-
85
- console.log("\n=== doctor default scope ===");
86
- {
87
- const scope = await selectDoctorScope(tmpBase);
88
- assertEq(scope, "M001/S01", "default doctor scope targets the active slice");
89
- }
90
-
91
- console.log("\n=== doctor fix ===");
92
- {
93
- const report = await runGSDDoctor(tmpBase, { fix: true });
94
- if (report.fixesApplied.length < 3) console.error(report);
95
- assertTrue(report.fixesApplied.length >= 3, "applies multiple fixes");
96
- assertTrue(existsSync(join(sDir, "S01-SUMMARY.md")), "creates placeholder slice summary");
97
- assertTrue(existsSync(join(sDir, "S01-UAT.md")), "creates placeholder UAT");
98
-
99
- const plan = readFileSync(join(sDir, "S01-PLAN.md"), "utf-8");
100
- assertTrue(plan.includes("- [x] **T01:"), "marks task checkbox done");
101
-
102
- const roadmap = readFileSync(join(mDir, "M001-ROADMAP.md"), "utf-8");
103
- assertTrue(roadmap.includes("- [x] **S01:"), "marks slice checkbox done");
104
-
105
- const state = readFileSync(join(gsd, "STATE.md"), "utf-8");
106
- assertTrue(state.includes("# GSD State"), "writes state file");
107
- }
108
-
109
- rmSync(tmpBase, { recursive: true, force: true });
110
-
111
- // ─── Milestone summary detection: missing summary ──────────────────────
112
- console.log("\n=== doctor detects missing milestone summary ===");
113
- {
114
- const msBase = mkdtempSync(join(tmpdir(), "gsd-doctor-ms-test-"));
115
- const msGsd = join(msBase, ".gsd");
116
- const msMDir = join(msGsd, "milestones", "M001");
117
- const msSDir = join(msMDir, "slices", "S01");
118
- const msTDir = join(msSDir, "tasks");
119
- mkdirSync(msTDir, { recursive: true });
120
-
121
- // Roadmap with ALL slices [x] — milestone is complete by slice status
122
- writeFileSync(join(msMDir, "M001-ROADMAP.md"), `# M001: Test Milestone
123
-
124
- ## Slices
125
- - [x] **S01: Done Slice** \`risk:low\` \`depends:[]\`
126
- > After this: done
127
- `);
128
-
129
- // Slice has plan with all tasks done
130
- writeFileSync(join(msSDir, "S01-PLAN.md"), `# S01: Done Slice
131
-
132
- **Goal:** Done
133
- **Demo:** Done
134
-
135
- ## Tasks
136
- - [x] **T01: Done Task** \`est:10m\`
137
- Done.
138
- `);
139
-
140
- // Task summary exists
141
- writeFileSync(join(msTDir, "T01-SUMMARY.md"), `---
142
- id: T01
143
- parent: S01
144
- milestone: M001
145
- ---
146
- # T01: Done
147
- **Done**
148
- ## What Happened
149
- Done.
150
- `);
151
-
152
- // Slice summary exists (so slice-level checks pass)
153
- writeFileSync(join(msSDir, "S01-SUMMARY.md"), `---
154
- id: S01
155
- parent: M001
156
- ---
157
- # S01: Done
158
- `);
159
-
160
- // Slice UAT exists (so slice-level checks pass)
161
- writeFileSync(join(msSDir, "S01-UAT.md"), `# S01 UAT\nDone.\n`);
162
-
163
- // NO milestone summary — this is the condition we're detecting
164
-
165
- const report = await runGSDDoctor(msBase, { fix: false });
166
- assertTrue(
167
- report.issues.some(issue => issue.code === "all_slices_done_missing_milestone_summary"),
168
- "detects missing milestone summary when all slices are done"
169
- );
170
- const msIssue = report.issues.find(issue => issue.code === "all_slices_done_missing_milestone_summary");
171
- assertEq(msIssue?.scope, "milestone", "milestone summary issue has scope 'milestone'");
172
- assertEq(msIssue?.severity, "warning", "milestone summary issue has severity 'warning'");
173
- assertEq(msIssue?.unitId, "M001", "milestone summary issue unitId is 'M001'");
174
- assertTrue(msIssue?.message?.includes("SUMMARY") ?? false, "milestone summary issue message mentions SUMMARY");
175
-
176
- rmSync(msBase, { recursive: true, force: true });
177
- }
178
-
179
- // ─── Milestone summary detection: summary present (no false positive) ──
180
- console.log("\n=== doctor does NOT flag milestone with summary ===");
181
- {
182
- const msBase = mkdtempSync(join(tmpdir(), "gsd-doctor-ms-ok-test-"));
183
- const msGsd = join(msBase, ".gsd");
184
- const msMDir = join(msGsd, "milestones", "M001");
185
- const msSDir = join(msMDir, "slices", "S01");
186
- const msTDir = join(msSDir, "tasks");
187
- mkdirSync(msTDir, { recursive: true });
188
-
189
- // Roadmap with ALL slices [x]
190
- writeFileSync(join(msMDir, "M001-ROADMAP.md"), `# M001: Test Milestone
191
-
192
- ## Slices
193
- - [x] **S01: Done Slice** \`risk:low\` \`depends:[]\`
194
- > After this: done
195
- `);
196
-
197
- writeFileSync(join(msSDir, "S01-PLAN.md"), `# S01: Done Slice
198
-
199
- **Goal:** Done
200
- **Demo:** Done
201
-
202
- ## Tasks
203
- - [x] **T01: Done Task** \`est:10m\`
204
- Done.
205
- `);
206
-
207
- writeFileSync(join(msTDir, "T01-SUMMARY.md"), `---
208
- id: T01
209
- parent: S01
210
- milestone: M001
211
- ---
212
- # T01: Done
213
- **Done**
214
- ## What Happened
215
- Done.
216
- `);
217
-
218
- writeFileSync(join(msSDir, "S01-SUMMARY.md"), `---
219
- id: S01
220
- parent: M001
221
- ---
222
- # S01: Done
223
- `);
224
-
225
- writeFileSync(join(msSDir, "S01-UAT.md"), `# S01 UAT\nDone.\n`);
226
-
227
- // Milestone summary EXISTS
228
- writeFileSync(join(msMDir, "M001-SUMMARY.md"), `# M001 Summary\n\nMilestone complete.`);
229
-
230
- const report = await runGSDDoctor(msBase, { fix: false });
231
- assertTrue(
232
- !report.issues.some(issue => issue.code === "all_slices_done_missing_milestone_summary"),
233
- "does NOT report missing milestone summary when summary exists"
234
- );
235
-
236
- rmSync(msBase, { recursive: true, force: true });
237
- }
238
-
239
- // ─── blocker_discovered_no_replan detection ────────────────────────────
240
- console.log("\n=== doctor detects blocker_discovered_no_replan ===");
241
- {
242
- const bBase = mkdtempSync(join(tmpdir(), "gsd-doctor-blocker-test-"));
243
- const bGsd = join(bBase, ".gsd");
244
- const bMDir = join(bGsd, "milestones", "M001");
245
- const bSDir = join(bMDir, "slices", "S01");
246
- const bTDir = join(bSDir, "tasks");
247
- mkdirSync(bTDir, { recursive: true });
248
-
249
- writeFileSync(join(bMDir, "M001-ROADMAP.md"), `# M001: Test Milestone
250
-
251
- ## Slices
252
- - [ ] **S01: Test Slice** \`risk:low\` \`depends:[]\`
253
- > After this: stuff works
254
- `);
255
-
256
- writeFileSync(join(bSDir, "S01-PLAN.md"), `# S01: Test Slice
257
-
258
- **Goal:** Test
259
- **Demo:** Test
260
-
261
- ## Tasks
262
- - [x] **T01: First task** \`est:10m\`
263
- First task.
264
-
265
- - [ ] **T02: Second task** \`est:10m\`
266
- Second task.
267
- `);
268
-
269
- // Task summary with blocker_discovered: true
270
- writeFileSync(join(bTDir, "T01-SUMMARY.md"), `---
271
- id: T01
272
- parent: S01
273
- milestone: M001
274
- provides: []
275
- key_files: []
276
- key_decisions: []
277
- patterns_established: []
278
- observability_surfaces: []
279
- duration: 10m
280
- verification_result: passed
281
- completed_at: 2026-03-10T00:00:00Z
282
- blocker_discovered: true
283
- ---
284
-
285
- # T01: First task
286
-
287
- **Found a blocker.**
288
-
289
- ## What Happened
290
-
291
- Discovered an issue.
292
- `);
293
-
294
- // No REPLAN.md — should trigger the issue
295
- const report = await runGSDDoctor(bBase, { fix: false });
296
- const blockerIssues = report.issues.filter(i => i.code === "blocker_discovered_no_replan");
297
- assertTrue(blockerIssues.length > 0, "detects blocker_discovered_no_replan");
298
- assertEq(blockerIssues[0]?.severity, "warning", "blocker issue has warning severity");
299
- assertEq(blockerIssues[0]?.scope, "slice", "blocker issue has slice scope");
300
- assertTrue(blockerIssues[0]?.message?.includes("T01") ?? false, "blocker issue message mentions T01");
301
- assertTrue(blockerIssues[0]?.message?.includes("S01") ?? false, "blocker issue message mentions S01");
302
-
303
- rmSync(bBase, { recursive: true, force: true });
304
- }
305
-
306
- // ─── blocker_discovered with REPLAN.md (no false positive) ─────────────
307
- console.log("\n=== doctor does NOT flag blocker when REPLAN.md exists ===");
308
- {
309
- const bBase = mkdtempSync(join(tmpdir(), "gsd-doctor-blocker-ok-test-"));
310
- const bGsd = join(bBase, ".gsd");
311
- const bMDir = join(bGsd, "milestones", "M001");
312
- const bSDir = join(bMDir, "slices", "S01");
313
- const bTDir = join(bSDir, "tasks");
314
- mkdirSync(bTDir, { recursive: true });
315
-
316
- writeFileSync(join(bMDir, "M001-ROADMAP.md"), `# M001: Test Milestone
317
-
318
- ## Slices
319
- - [ ] **S01: Test Slice** \`risk:low\` \`depends:[]\`
320
- > After this: stuff works
321
- `);
322
-
323
- writeFileSync(join(bSDir, "S01-PLAN.md"), `# S01: Test Slice
324
-
325
- **Goal:** Test
326
- **Demo:** Test
327
-
328
- ## Tasks
329
- - [x] **T01: First task** \`est:10m\`
330
- First task.
331
-
332
- - [ ] **T02: Second task** \`est:10m\`
333
- Second task.
334
- `);
335
-
336
- writeFileSync(join(bTDir, "T01-SUMMARY.md"), `---
337
- id: T01
338
- parent: S01
339
- milestone: M001
340
- blocker_discovered: true
341
- completed_at: 2026-03-10T00:00:00Z
342
- ---
343
-
344
- # T01: First task
345
-
346
- **Found a blocker.**
347
-
348
- ## What Happened
349
-
350
- Discovered an issue.
351
- `);
352
-
353
- // REPLAN.md exists — should NOT trigger
354
- writeFileSync(join(bSDir, "S01-REPLAN.md"), `# Replan\n\nAlready replanned.`);
355
-
356
- const report = await runGSDDoctor(bBase, { fix: false });
357
- const blockerIssues = report.issues.filter(i => i.code === "blocker_discovered_no_replan");
358
- assertEq(blockerIssues.length, 0, "no blocker_discovered_no_replan when REPLAN.md exists");
359
-
360
- rmSync(bBase, { recursive: true, force: true });
361
- }
362
-
363
- // ─── Must-have verification: all addressed → no issue ─────────────────
364
- console.log("\n=== doctor: done task with must-haves all addressed → no issue ===");
365
- {
366
- const mhBase = mkdtempSync(join(tmpdir(), "gsd-doctor-mh-ok-"));
367
- const mhGsd = join(mhBase, ".gsd");
368
- const mhMDir = join(mhGsd, "milestones", "M001");
369
- const mhSDir = join(mhMDir, "slices", "S01");
370
- const mhTDir = join(mhSDir, "tasks");
371
- mkdirSync(mhTDir, { recursive: true });
372
-
373
- writeFileSync(join(mhMDir, "M001-ROADMAP.md"), `# M001: Test\n\n## Slices\n- [ ] **S01: Slice** \`risk:low\` \`depends:[]\`\n > After this: done\n`);
374
- writeFileSync(join(mhSDir, "S01-PLAN.md"), `# S01: Slice\n\n**Goal:** Demo\n**Demo:** Demo\n\n## Tasks\n- [x] **T01: Implement** \`est:10m\`\n Done.\n`);
375
-
376
- // Task plan with must-haves
377
- writeFileSync(join(mhTDir, "T01-PLAN.md"), `# T01: Implement\n\n## Must-Haves\n\n- [ ] \`parseWidgets\` function exported\n- [ ] Unit tests pass with zero failures\n`);
378
-
379
- // Summary mentioning both must-haves
380
- writeFileSync(join(mhTDir, "T01-SUMMARY.md"), `---\nid: T01\nparent: S01\nmilestone: M001\n---\n# T01: Implement\n\n## What Happened\nAdded parseWidgets function. Unit tests pass with zero failures.\n`);
381
-
382
- const report = await runGSDDoctor(mhBase, { fix: false });
383
- assertTrue(
384
- !report.issues.some(i => i.code === "task_done_must_haves_not_verified"),
385
- "no must-have issue when all must-haves are addressed"
386
- );
387
-
388
- rmSync(mhBase, { recursive: true, force: true });
389
- }
390
-
391
- // ─── Must-have verification: not addressed → warning fired ───────────
392
- console.log("\n=== doctor: done task with must-haves NOT addressed → warning ===");
393
- {
394
- const mhBase = mkdtempSync(join(tmpdir(), "gsd-doctor-mh-fail-"));
395
- const mhGsd = join(mhBase, ".gsd");
396
- const mhMDir = join(mhGsd, "milestones", "M001");
397
- const mhSDir = join(mhMDir, "slices", "S01");
398
- const mhTDir = join(mhSDir, "tasks");
399
- mkdirSync(mhTDir, { recursive: true });
400
-
401
- writeFileSync(join(mhMDir, "M001-ROADMAP.md"), `# M001: Test\n\n## Slices\n- [ ] **S01: Slice** \`risk:low\` \`depends:[]\`\n > After this: done\n`);
402
- writeFileSync(join(mhSDir, "S01-PLAN.md"), `# S01: Slice\n\n**Goal:** Demo\n**Demo:** Demo\n\n## Tasks\n- [x] **T01: Implement** \`est:10m\`\n Done.\n`);
403
-
404
- // Task plan with 3 must-haves
405
- writeFileSync(join(mhTDir, "T01-PLAN.md"), `# T01: Implement\n\n## Must-Haves\n\n- [ ] \`parseWidgets\` function exported\n- [ ] \`countWidgets\` utility added\n- [ ] Full regression suite passes\n`);
406
-
407
- // Summary mentions only parseWidgets — the other two are missing
408
- writeFileSync(join(mhTDir, "T01-SUMMARY.md"), `---\nid: T01\nparent: S01\nmilestone: M001\n---\n# T01: Implement\n\n## What Happened\nAdded parseWidgets function.\n`);
409
-
410
- const report = await runGSDDoctor(mhBase, { fix: false });
411
- const mhIssue = report.issues.find(i => i.code === "task_done_must_haves_not_verified");
412
- assertTrue(!!mhIssue, "must-have issue is fired when summary doesn't address all must-haves");
413
- assertEq(mhIssue?.severity, "warning", "must-have issue is warning severity");
414
- assertEq(mhIssue?.scope, "task", "must-have issue scope is task");
415
- assertTrue(mhIssue?.message?.includes("3 must-haves") ?? false, "message mentions total must-have count");
416
- assertTrue(mhIssue?.message?.includes("only 1") ?? false, "message mentions addressed count");
417
- assertEq(mhIssue?.fixable, false, "must-have issue is not fixable");
418
-
419
- rmSync(mhBase, { recursive: true, force: true });
420
- }
421
-
422
- // ─── Must-have verification: no task plan → no issue ─────────────────
423
- console.log("\n=== doctor: done task with no task plan file → no issue ===");
424
- {
425
- const mhBase = mkdtempSync(join(tmpdir(), "gsd-doctor-mh-noplan-"));
426
- const mhGsd = join(mhBase, ".gsd");
427
- const mhMDir = join(mhGsd, "milestones", "M001");
428
- const mhSDir = join(mhMDir, "slices", "S01");
429
- const mhTDir = join(mhSDir, "tasks");
430
- mkdirSync(mhTDir, { recursive: true });
431
-
432
- writeFileSync(join(mhMDir, "M001-ROADMAP.md"), `# M001: Test\n\n## Slices\n- [ ] **S01: Slice** \`risk:low\` \`depends:[]\`\n > After this: done\n`);
433
- writeFileSync(join(mhSDir, "S01-PLAN.md"), `# S01: Slice\n\n**Goal:** Demo\n**Demo:** Demo\n\n## Tasks\n- [x] **T01: Implement** \`est:10m\`\n Done.\n`);
434
-
435
- // NO task plan file — just a summary
436
- writeFileSync(join(mhTDir, "T01-SUMMARY.md"), `---\nid: T01\nparent: S01\nmilestone: M001\n---\n# T01: Implement\n\n## What Happened\nDone.\n`);
437
-
438
- const report = await runGSDDoctor(mhBase, { fix: false });
439
- assertTrue(
440
- !report.issues.some(i => i.code === "task_done_must_haves_not_verified"),
441
- "no must-have issue when task plan file doesn't exist"
442
- );
443
-
444
- rmSync(mhBase, { recursive: true, force: true });
445
- }
446
-
447
- // ─── Must-have verification: plan exists but no Must-Haves section → no issue
448
- console.log("\n=== doctor: done task with plan but no Must-Haves section → no issue ===");
449
- {
450
- const mhBase = mkdtempSync(join(tmpdir(), "gsd-doctor-mh-nosect-"));
451
- const mhGsd = join(mhBase, ".gsd");
452
- const mhMDir = join(mhGsd, "milestones", "M001");
453
- const mhSDir = join(mhMDir, "slices", "S01");
454
- const mhTDir = join(mhSDir, "tasks");
455
- mkdirSync(mhTDir, { recursive: true });
456
-
457
- writeFileSync(join(mhMDir, "M001-ROADMAP.md"), `# M001: Test\n\n## Slices\n- [ ] **S01: Slice** \`risk:low\` \`depends:[]\`\n > After this: done\n`);
458
- writeFileSync(join(mhSDir, "S01-PLAN.md"), `# S01: Slice\n\n**Goal:** Demo\n**Demo:** Demo\n\n## Tasks\n- [x] **T01: Implement** \`est:10m\`\n Done.\n`);
459
-
460
- // Task plan with NO Must-Haves section
461
- writeFileSync(join(mhTDir, "T01-PLAN.md"), `# T01: Implement\n\n## Steps\n\n1. Do the thing.\n\n## Verification\n\n- Run tests.\n`);
462
-
463
- writeFileSync(join(mhTDir, "T01-SUMMARY.md"), `---\nid: T01\nparent: S01\nmilestone: M001\n---\n# T01: Implement\n\n## What Happened\nDone.\n`);
464
-
465
- const report = await runGSDDoctor(mhBase, { fix: false });
466
- assertTrue(
467
- !report.issues.some(i => i.code === "task_done_must_haves_not_verified"),
468
- "no must-have issue when task plan has no Must-Haves section"
469
- );
470
-
471
- rmSync(mhBase, { recursive: true, force: true });
472
- }
473
-
474
- // ─── validateTitle: em dash and slash detection ────────────────────────
475
- console.log("\n=== validateTitle: returns null for clean titles ===");
476
- {
477
- assertEq(validateTitle("Foundation"), null, "clean title passes");
478
- assertEq(validateTitle("Build Core Systems"), null, "clean title with spaces passes");
479
- assertEq(validateTitle("API v2 Integration"), null, "clean title with version passes");
480
- assertEq(validateTitle(""), null, "empty title passes");
481
- }
482
-
483
- console.log("\n=== validateTitle: detects em dash ===");
484
- {
485
- const result = validateTitle("Foundation — Build Core");
486
- assertTrue(result !== null, "detects em dash in title");
487
- assertTrue(result!.includes("em/en dash"), "message mentions em/en dash");
488
- }
489
-
490
- console.log("\n=== validateTitle: detects en dash ===");
491
- {
492
- const result = validateTitle("Phase 1 – Phase 2");
493
- assertTrue(result !== null, "detects en dash in title");
494
- assertTrue(result!.includes("em/en dash"), "message mentions em/en dash for en dash");
495
- }
496
-
497
- console.log("\n=== validateTitle: detects forward slash ===");
498
- {
499
- const result = validateTitle("Client/Server");
500
- assertTrue(result !== null, "detects forward slash in title");
501
- assertTrue(result!.includes("forward slash"), "message mentions forward slash");
502
- }
503
-
504
- console.log("\n=== validateTitle: detects both em dash and slash ===");
505
- {
506
- const result = validateTitle("Client — Server/API");
507
- assertTrue(result !== null, "detects both delimiters");
508
- assertTrue(result!.includes("em/en dash"), "message mentions em/en dash");
509
- assertTrue(result!.includes("forward slash"), "message mentions forward slash");
510
- }
511
-
512
- // ─── doctor detects delimiter_in_title for milestone ───────────────────
513
- console.log("\n=== doctor detects em dash in milestone title ===");
514
- {
515
- const dtBase = mkdtempSync(join(tmpdir(), "gsd-doctor-dt-test-"));
516
- const dtGsd = join(dtBase, ".gsd");
517
- const dtMDir = join(dtGsd, "milestones", "M001");
518
- const dtSDir = join(dtMDir, "slices", "S01");
519
- const dtTDir = join(dtSDir, "tasks");
520
- mkdirSync(dtTDir, { recursive: true });
521
-
522
- // Roadmap with em dash in milestone title
523
- writeFileSync(join(dtMDir, "M001-ROADMAP.md"), `# M001: Foundation — Build Core\n\n## Slices\n- [ ] **S01: Demo Slice** \`risk:low\` \`depends:[]\`\n > After this: demo works\n`);
524
- writeFileSync(join(dtSDir, "S01-PLAN.md"), `# S01: Demo Slice\n\n**Goal:** Demo\n**Demo:** Demo\n\n## Tasks\n- [ ] **T01: Implement** \`est:10m\`\n Task.\n`);
525
- writeFileSync(join(dtTDir, "T01-PLAN.md"), `# T01: Implement\n\n## Steps\n\n1. Do the thing.\n`);
526
-
527
- const report = await runGSDDoctor(dtBase, { fix: false });
528
- const dtIssues = report.issues.filter(i => i.code === "delimiter_in_title");
529
- assertTrue(dtIssues.length >= 1, "detects delimiter_in_title for milestone with em dash");
530
- const milestoneIssue = dtIssues.find(i => i.scope === "milestone");
531
- assertTrue(milestoneIssue !== undefined, "delimiter issue has milestone scope");
532
- assertEq(milestoneIssue?.severity, "warning", "delimiter issue has warning severity");
533
- assertEq(milestoneIssue?.unitId, "M001", "delimiter issue unitId is M001");
534
- assertTrue(milestoneIssue?.message?.includes("em/en dash") ?? false, "issue message mentions em/en dash");
535
- assertEq(milestoneIssue?.fixable, false, "delimiter issue is not auto-fixable");
536
-
537
- rmSync(dtBase, { recursive: true, force: true });
538
- }
539
-
540
- // ─── doctor detects delimiter_in_title for slice ────────────────────────
541
- console.log("\n=== doctor detects em dash in slice title ===");
542
- {
543
- const dtBase = mkdtempSync(join(tmpdir(), "gsd-doctor-dt-slice-"));
544
- const dtGsd = join(dtBase, ".gsd");
545
- const dtMDir = join(dtGsd, "milestones", "M001");
546
- const dtSDir = join(dtMDir, "slices", "S01");
547
- const dtTDir = join(dtSDir, "tasks");
548
- mkdirSync(dtTDir, { recursive: true });
549
-
550
- // Roadmap with em dash in slice title (milestone title is clean)
551
- writeFileSync(join(dtMDir, "M001-ROADMAP.md"), `# M001: Clean Milestone\n\n## Slices\n- [ ] **S01: Core — Foundation** \`risk:low\` \`depends:[]\`\n > After this: demo works\n`);
552
- writeFileSync(join(dtSDir, "S01-PLAN.md"), `# S01: Core — Foundation\n\n**Goal:** Demo\n**Demo:** Demo\n\n## Tasks\n- [ ] **T01: Implement** \`est:10m\`\n Task.\n`);
553
- writeFileSync(join(dtTDir, "T01-PLAN.md"), `# T01: Implement\n\n## Steps\n\n1. Do the thing.\n`);
554
-
555
- const report = await runGSDDoctor(dtBase, { fix: false });
556
- const dtIssues = report.issues.filter(i => i.code === "delimiter_in_title");
557
- assertTrue(dtIssues.length >= 1, "detects delimiter_in_title for slice with em dash");
558
- const sliceIssue = dtIssues.find(i => i.scope === "slice");
559
- assertTrue(sliceIssue !== undefined, "delimiter issue has slice scope");
560
- assertEq(sliceIssue?.severity, "warning", "slice delimiter issue has warning severity");
561
- assertEq(sliceIssue?.unitId, "M001/S01", "slice delimiter issue unitId is M001/S01");
562
-
563
- rmSync(dtBase, { recursive: true, force: true });
564
- }
565
-
566
- // ─── doctor does NOT flag clean titles ──────────────────────────────────
567
- console.log("\n=== doctor does NOT flag milestone with clean title ===");
568
- {
569
- const dtBase = mkdtempSync(join(tmpdir(), "gsd-doctor-dt-clean-"));
570
- const dtGsd = join(dtBase, ".gsd");
571
- const dtMDir = join(dtGsd, "milestones", "M001");
572
- const dtSDir = join(dtMDir, "slices", "S01");
573
- const dtTDir = join(dtSDir, "tasks");
574
- mkdirSync(dtTDir, { recursive: true });
575
-
576
- // Roadmap with clean titles (no delimiters)
577
- writeFileSync(join(dtMDir, "M001-ROADMAP.md"), `# M001: Foundation Build Core\n\n## Slices\n- [ ] **S01: Demo Slice** \`risk:low\` \`depends:[]\`\n > After this: demo works\n`);
578
- writeFileSync(join(dtSDir, "S01-PLAN.md"), `# S01: Demo Slice\n\n**Goal:** Demo\n**Demo:** Demo\n\n## Tasks\n- [ ] **T01: Implement** \`est:10m\`\n Task.\n`);
579
- writeFileSync(join(dtTDir, "T01-PLAN.md"), `# T01: Implement\n\n## Steps\n\n1. Do the thing.\n`);
580
-
581
- const report = await runGSDDoctor(dtBase, { fix: false });
582
- const dtIssues = report.issues.filter(i => i.code === "delimiter_in_title");
583
- assertEq(dtIssues.length, 0, "no delimiter_in_title issues for clean titles");
584
-
585
- rmSync(dtBase, { recursive: true, force: true });
586
- }
587
-
588
- // ─── unresolvable_dependency: range syntax dep warns ─────────────────
589
- console.log("\n=== doctor: unresolvable_dependency warns for leftover range ID ===");
590
- {
591
- // Simulate a roadmap where expandDependencies did NOT expand (pre-fix stored artifact)
592
- // by writing a dep that looks like a range but doesn't match any real slice.
593
- const base = mkdtempSync(join(tmpdir(), "gsd-doctor-udep-"));
594
- const mDir2 = join(base, ".gsd", "milestones", "M001");
595
- const sDir2 = join(mDir2, "slices", "S01");
596
- const tDir2 = join(sDir2, "tasks");
597
- mkdirSync(tDir2, { recursive: true });
598
- writeFileSync(join(mDir2, "M001-ROADMAP.md"), [
599
- "# M001: Test",
600
- "",
601
- "## Slices",
602
- "- [x] **S01: Done** `risk:low` `depends:[]`",
603
- " > After this: done",
604
- "- [ ] **S02: Blocked** `risk:low` `depends:[S99]`",
605
- " > After this: also done",
606
- ].join("\n") + "\n");
607
- writeFileSync(join(sDir2, "S01-PLAN.md"), "# S01\n\n**Goal:** g\n**Demo:** d\n\n## Tasks\n- [x] **T01: t** `est:5m`\n");
608
- writeFileSync(join(tDir2, "T01-SUMMARY.md"), "---\nid: T01\nparent: S01\nmilestone: M001\n---\n# T01\n## What Happened\nDone.\n");
609
-
610
- const r = await runGSDDoctor(base, { fix: false });
611
- const udepIssues = r.issues.filter(i => i.code === "unresolvable_dependency");
612
- assertTrue(udepIssues.length > 0, "unresolvable_dependency fires for unknown dep S99");
613
- assertEq(udepIssues[0]?.severity, "warning", "severity is warning");
614
- assertTrue(udepIssues[0]?.message.includes("S99"), "message names the bad dep");
615
-
616
- rmSync(base, { recursive: true, force: true });
617
- }
618
-
619
- // ─── unresolvable_dependency: valid deps do not warn ─────────────────
620
- console.log("\n=== doctor: no unresolvable_dependency for valid deps ===");
621
- {
622
- const base = mkdtempSync(join(tmpdir(), "gsd-doctor-udep-ok-"));
623
- const mDir2 = join(base, ".gsd", "milestones", "M001");
624
- const sDir2 = join(mDir2, "slices", "S01");
625
- const tDir2 = join(sDir2, "tasks");
626
- mkdirSync(tDir2, { recursive: true });
627
- writeFileSync(join(mDir2, "M001-ROADMAP.md"), [
628
- "# M001: Test",
629
- "",
630
- "## Slices",
631
- "- [x] **S01: Done** `risk:low` `depends:[]`",
632
- " > After this: done",
633
- "- [ ] **S02: Next** `risk:low` `depends:[S01]`",
634
- " > After this: next done",
635
- ].join("\n") + "\n");
636
- writeFileSync(join(sDir2, "S01-PLAN.md"), "# S01\n\n**Goal:** g\n**Demo:** d\n\n## Tasks\n- [x] **T01: t** `est:5m`\n");
637
- writeFileSync(join(tDir2, "T01-SUMMARY.md"), "---\nid: T01\nparent: S01\nmilestone: M001\n---\n# T01\n## What Happened\nDone.\n");
638
-
639
- const r = await runGSDDoctor(base, { fix: false });
640
- const udepIssues = r.issues.filter(i => i.code === "unresolvable_dependency");
641
- assertEq(udepIssues.length, 0, "no unresolvable_dependency for valid S01 dep");
642
-
643
- rmSync(base, { recursive: true, force: true });
644
- }
645
-
646
- report();
647
- }
648
-
649
- main().catch((error) => {
650
- console.error(error);
651
- process.exit(1);
652
- });