gsd-pi 2.58.0-dev.778d6ac → 2.58.0-dev.d63175c

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 (628) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +35 -49
  3. package/dist/headless-ui.d.ts +0 -17
  4. package/dist/headless-ui.js +3 -97
  5. package/dist/headless.js +6 -67
  6. package/dist/help-text.js +0 -1
  7. package/dist/onboarding.js +0 -44
  8. package/dist/resource-loader.js +1 -16
  9. package/dist/resources/agents/researcher.md +1 -1
  10. package/dist/resources/extensions/ask-user-questions.js +3 -16
  11. package/dist/resources/extensions/async-jobs/extension-manifest.json +1 -1
  12. package/dist/resources/extensions/bg-shell/extension-manifest.json +1 -1
  13. package/dist/resources/extensions/browser-tools/extension-manifest.json +1 -1
  14. package/dist/resources/extensions/claude-code-cli/partial-builder.js +6 -14
  15. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +36 -59
  16. package/dist/resources/extensions/context7/extension-manifest.json +1 -1
  17. package/dist/resources/extensions/get-secrets-from-user.js +5 -8
  18. package/dist/resources/extensions/google-search/extension-manifest.json +1 -1
  19. package/dist/resources/extensions/google-search/index.js +1 -2
  20. package/dist/resources/extensions/gsd/auto/phases.js +21 -25
  21. package/dist/resources/extensions/gsd/auto-artifact-paths.js +2 -2
  22. package/dist/resources/extensions/gsd/auto-dashboard.js +20 -37
  23. package/dist/resources/extensions/gsd/auto-dispatch.js +2 -17
  24. package/dist/resources/extensions/gsd/auto-model-selection.js +3 -26
  25. package/dist/resources/extensions/gsd/auto-post-unit.js +4 -16
  26. package/dist/resources/extensions/gsd/auto-prompts.js +1 -1
  27. package/dist/resources/extensions/gsd/auto-recovery.js +5 -13
  28. package/dist/resources/extensions/gsd/auto-start.js +22 -35
  29. package/dist/resources/extensions/gsd/auto-worktree.js +12 -196
  30. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +0 -32
  31. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +8 -80
  32. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -32
  33. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +18 -33
  34. package/dist/resources/extensions/gsd/bootstrap/system-context.js +11 -44
  35. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +0 -67
  36. package/dist/resources/extensions/gsd/captures.js +4 -56
  37. package/dist/resources/extensions/gsd/db-writer.js +8 -116
  38. package/dist/resources/extensions/gsd/doctor-git-checks.js +0 -28
  39. package/dist/resources/extensions/gsd/doctor-providers.js +1 -2
  40. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +4 -5
  41. package/dist/resources/extensions/gsd/doctor.js +1 -3
  42. package/dist/resources/extensions/gsd/error-classifier.js +10 -13
  43. package/dist/resources/extensions/gsd/extension-manifest.json +1 -16
  44. package/dist/resources/extensions/gsd/forensics.js +20 -123
  45. package/dist/resources/extensions/gsd/git-service.js +1 -23
  46. package/dist/resources/extensions/gsd/gitignore.js +0 -33
  47. package/dist/resources/extensions/gsd/gsd-db.js +9 -36
  48. package/dist/resources/extensions/gsd/guided-flow.js +44 -106
  49. package/dist/resources/extensions/gsd/health-widget-core.js +0 -31
  50. package/dist/resources/extensions/gsd/health-widget.js +0 -17
  51. package/dist/resources/extensions/gsd/index.js +1 -1
  52. package/dist/resources/extensions/gsd/memory-extractor.js +0 -7
  53. package/dist/resources/extensions/gsd/migrate-external.js +1 -8
  54. package/dist/resources/extensions/gsd/model-cost-table.js +0 -18
  55. package/dist/resources/extensions/gsd/model-router.js +1 -35
  56. package/dist/resources/extensions/gsd/native-git-bridge.js +0 -17
  57. package/dist/resources/extensions/gsd/notifications.js +1 -16
  58. package/dist/resources/extensions/gsd/parallel-eligibility.js +2 -13
  59. package/dist/resources/extensions/gsd/parallel-merge.js +5 -78
  60. package/dist/resources/extensions/gsd/parsers-legacy.js +3 -20
  61. package/dist/resources/extensions/gsd/paths.js +0 -43
  62. package/dist/resources/extensions/gsd/preferences-models.js +1 -14
  63. package/dist/resources/extensions/gsd/preferences-types.js +1 -2
  64. package/dist/resources/extensions/gsd/preferences.js +16 -13
  65. package/dist/resources/extensions/gsd/prompt-loader.js +1 -4
  66. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  67. package/dist/resources/extensions/gsd/prompts/complete-slice.md +2 -4
  68. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  69. package/dist/resources/extensions/gsd/prompts/discuss.md +1 -1
  70. package/dist/resources/extensions/gsd/prompts/execute-task.md +1 -3
  71. package/dist/resources/extensions/gsd/prompts/forensics.md +2 -2
  72. package/dist/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  73. package/dist/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  74. package/dist/resources/extensions/gsd/prompts/plan-slice.md +0 -2
  75. package/dist/resources/extensions/gsd/prompts/rethink.md +1 -1
  76. package/dist/resources/extensions/gsd/prompts/triage-captures.md +0 -1
  77. package/dist/resources/extensions/gsd/repo-identity.js +11 -205
  78. package/dist/resources/extensions/gsd/rethink.js +0 -5
  79. package/dist/resources/extensions/gsd/roadmap-slices.js +4 -5
  80. package/dist/resources/extensions/gsd/state.js +27 -85
  81. package/dist/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
  82. package/dist/resources/extensions/gsd/tools/complete-task.js +71 -34
  83. package/dist/resources/extensions/gsd/tools/plan-milestone.js +2 -12
  84. package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +1 -29
  85. package/dist/resources/extensions/gsd/tools/validate-milestone.js +3 -14
  86. package/dist/resources/extensions/gsd/triage-resolution.js +7 -22
  87. package/dist/resources/extensions/gsd/undo.js +2 -2
  88. package/dist/resources/extensions/gsd/unit-ownership.js +33 -164
  89. package/dist/resources/extensions/gsd/verdict-parser.js +8 -20
  90. package/dist/resources/extensions/gsd/workflow-manifest.js +5 -24
  91. package/dist/resources/extensions/gsd/workflow-projections.js +63 -95
  92. package/dist/resources/extensions/gsd/workflow-reconcile.js +5 -35
  93. package/dist/resources/extensions/gsd/workspace-index.js +0 -24
  94. package/dist/resources/extensions/gsd/worktree-manager.js +1 -105
  95. package/dist/resources/extensions/gsd/worktree-resolver.js +3 -20
  96. package/dist/resources/extensions/mcp-client/index.js +7 -11
  97. package/dist/resources/extensions/search-the-web/extension-manifest.json +1 -1
  98. package/dist/resources/extensions/shared/interview-ui.js +1 -11
  99. package/dist/resources/skills/create-gsd-extension/SKILL.md +3 -5
  100. package/dist/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
  101. package/dist/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  102. package/dist/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  103. package/dist/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
  104. package/dist/web/standalone/.next/BUILD_ID +1 -1
  105. package/dist/web/standalone/.next/app-path-routes-manifest.json +17 -17
  106. package/dist/web/standalone/.next/build-manifest.json +3 -3
  107. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  108. package/dist/web/standalone/.next/react-loadable-manifest.json +1 -1
  109. package/dist/web/standalone/.next/required-server-files.json +1 -1
  110. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  111. package/dist/web/standalone/.next/server/app/_global-error.html +2 -2
  112. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  113. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  114. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  115. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  116. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  117. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  118. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  119. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  120. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  121. package/dist/web/standalone/.next/server/app/_not-found.rsc +2 -2
  122. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  123. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  124. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  125. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  126. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  127. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  128. package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
  129. package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
  130. package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
  131. package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
  132. package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
  133. package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
  134. package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
  135. package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
  136. package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
  138. package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
  139. package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
  140. package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
  141. package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
  142. package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
  143. package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
  144. package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
  145. package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
  146. package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
  147. package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
  148. package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
  149. package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
  150. package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
  151. package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
  152. package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
  153. package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
  154. package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
  155. package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
  156. package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
  159. package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
  160. package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
  161. package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
  162. package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
  163. package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
  164. package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
  165. package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
  166. package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
  167. package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
  168. package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
  169. package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
  170. package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
  174. package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
  175. package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
  176. package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
  177. package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
  178. package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
  179. package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
  180. package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
  181. package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
  182. package/dist/web/standalone/.next/server/app/index.html +1 -1
  183. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  184. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  185. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  186. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  187. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +2 -2
  188. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  189. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  190. package/dist/web/standalone/.next/server/app-paths-manifest.json +17 -17
  191. package/dist/web/standalone/.next/server/chunks/2229.js +2 -2
  192. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  193. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  194. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  195. package/dist/web/standalone/.next/server/pages/500.html +2 -2
  196. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  197. package/dist/web/standalone/.next/static/chunks/6502.8b732f67a11b11b4.js +9 -0
  198. package/dist/web/standalone/.next/static/chunks/{webpack-a1c1e452c6b32d04.js → webpack-61d3afac6d0f0ce7.js} +1 -1
  199. package/dist/web/standalone/.next/static/css/a58ef8a151aa0493.css +1 -0
  200. package/dist/web/standalone/server.js +1 -1
  201. package/dist/web-mode.js +1 -2
  202. package/package.json +2 -2
  203. package/packages/native/dist/ast/index.js +5 -9
  204. package/packages/native/dist/ast/types.js +1 -2
  205. package/packages/native/dist/clipboard/index.js +7 -12
  206. package/packages/native/dist/clipboard/types.js +1 -2
  207. package/packages/native/dist/diff/index.js +7 -12
  208. package/packages/native/dist/diff/types.js +1 -2
  209. package/packages/native/dist/fd/index.js +3 -6
  210. package/packages/native/dist/fd/types.js +1 -2
  211. package/packages/native/dist/glob/index.js +5 -9
  212. package/packages/native/dist/glob/types.js +1 -2
  213. package/packages/native/dist/grep/index.js +5 -9
  214. package/packages/native/dist/grep/types.js +1 -2
  215. package/packages/native/dist/gsd-parser/index.js +11 -18
  216. package/packages/native/dist/gsd-parser/types.js +1 -2
  217. package/packages/native/dist/highlight/index.js +7 -12
  218. package/packages/native/dist/highlight/types.js +1 -2
  219. package/packages/native/dist/html/index.js +3 -6
  220. package/packages/native/dist/html/types.js +1 -2
  221. package/packages/native/dist/image/index.js +5 -10
  222. package/packages/native/dist/image/types.js +4 -7
  223. package/packages/native/dist/index.js +17 -70
  224. package/packages/native/dist/json-parse/index.js +8 -13
  225. package/packages/native/dist/native.js +10 -47
  226. package/packages/native/dist/ps/index.js +9 -15
  227. package/packages/native/dist/ps/types.js +1 -2
  228. package/packages/native/dist/stream-process/index.js +7 -12
  229. package/packages/native/dist/text/index.js +14 -24
  230. package/packages/native/dist/text/types.js +2 -5
  231. package/packages/native/dist/truncate/index.js +7 -12
  232. package/packages/native/dist/ttsr/index.js +7 -12
  233. package/packages/native/dist/ttsr/types.js +1 -2
  234. package/packages/native/dist/xxhash/index.js +5 -9
  235. package/packages/native/package.json +19 -19
  236. package/packages/native/src/native.ts +8 -9
  237. package/packages/pi-agent-core/dist/agent-loop.js +2 -3
  238. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  239. package/packages/pi-agent-core/dist/proxy.d.ts +1 -1
  240. package/packages/pi-agent-core/dist/proxy.d.ts.map +1 -1
  241. package/packages/pi-agent-core/dist/proxy.js.map +1 -1
  242. package/packages/pi-agent-core/src/agent-loop.ts +2 -3
  243. package/packages/pi-agent-core/src/proxy.ts +1 -1
  244. package/packages/pi-ai/dist/env-api-keys.js +0 -1
  245. package/packages/pi-ai/dist/env-api-keys.js.map +1 -1
  246. package/packages/pi-ai/dist/index.d.ts +0 -1
  247. package/packages/pi-ai/dist/index.d.ts.map +1 -1
  248. package/packages/pi-ai/dist/index.js +0 -1
  249. package/packages/pi-ai/dist/index.js.map +1 -1
  250. package/packages/pi-ai/dist/providers/anthropic-shared.d.ts.map +1 -1
  251. package/packages/pi-ai/dist/providers/anthropic-shared.js +2 -19
  252. package/packages/pi-ai/dist/providers/anthropic-shared.js.map +1 -1
  253. package/packages/pi-ai/dist/types.d.ts +3 -3
  254. package/packages/pi-ai/dist/types.d.ts.map +1 -1
  255. package/packages/pi-ai/dist/types.js.map +1 -1
  256. package/packages/pi-ai/dist/utils/json-parse.d.ts +0 -3
  257. package/packages/pi-ai/dist/utils/json-parse.d.ts.map +1 -1
  258. package/packages/pi-ai/dist/utils/json-parse.js +1 -24
  259. package/packages/pi-ai/dist/utils/json-parse.js.map +1 -1
  260. package/packages/pi-ai/src/env-api-keys.ts +0 -1
  261. package/packages/pi-ai/src/index.ts +0 -1
  262. package/packages/pi-ai/src/providers/anthropic-shared.ts +2 -17
  263. package/packages/pi-ai/src/types.ts +2 -3
  264. package/packages/pi-ai/src/utils/json-parse.ts +1 -28
  265. package/packages/pi-coding-agent/dist/core/agent-session.d.ts +0 -4
  266. package/packages/pi-coding-agent/dist/core/agent-session.d.ts.map +1 -1
  267. package/packages/pi-coding-agent/dist/core/agent-session.js +0 -31
  268. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  269. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +1 -17
  270. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  271. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +2 -62
  272. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  273. package/packages/pi-coding-agent/dist/core/exec.d.ts.map +1 -1
  274. package/packages/pi-coding-agent/dist/core/exec.js +1 -3
  275. package/packages/pi-coding-agent/dist/core/exec.js.map +1 -1
  276. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts +0 -4
  277. package/packages/pi-coding-agent/dist/core/extensions/index.d.ts.map +1 -1
  278. package/packages/pi-coding-agent/dist/core/extensions/index.js +0 -2
  279. package/packages/pi-coding-agent/dist/core/extensions/index.js.map +1 -1
  280. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts +0 -5
  281. package/packages/pi-coding-agent/dist/core/extensions/loader.d.ts.map +1 -1
  282. package/packages/pi-coding-agent/dist/core/extensions/loader.js +0 -5
  283. package/packages/pi-coding-agent/dist/core/extensions/loader.js.map +1 -1
  284. package/packages/pi-coding-agent/dist/core/index.d.ts +1 -1
  285. package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  286. package/packages/pi-coding-agent/dist/core/index.js +1 -1
  287. package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
  288. package/packages/pi-coding-agent/dist/core/lsp/index.d.ts.map +1 -1
  289. package/packages/pi-coding-agent/dist/core/lsp/index.js +0 -3
  290. package/packages/pi-coding-agent/dist/core/lsp/index.js.map +1 -1
  291. package/packages/pi-coding-agent/dist/core/lsp/lspmux.d.ts.map +1 -1
  292. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js +0 -3
  293. package/packages/pi-coding-agent/dist/core/lsp/lspmux.js.map +1 -1
  294. package/packages/pi-coding-agent/dist/core/messages.d.ts.map +1 -1
  295. package/packages/pi-coding-agent/dist/core/messages.js +2 -31
  296. package/packages/pi-coding-agent/dist/core/messages.js.map +1 -1
  297. package/packages/pi-coding-agent/dist/core/model-resolver.d.ts.map +1 -1
  298. package/packages/pi-coding-agent/dist/core/model-resolver.js +0 -1
  299. package/packages/pi-coding-agent/dist/core/model-resolver.js.map +1 -1
  300. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +0 -10
  301. package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
  302. package/packages/pi-coding-agent/dist/core/resource-loader.js +1 -12
  303. package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
  304. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts +0 -6
  305. package/packages/pi-coding-agent/dist/core/retry-handler.d.ts.map +1 -1
  306. package/packages/pi-coding-agent/dist/core/retry-handler.js +1 -48
  307. package/packages/pi-coding-agent/dist/core/retry-handler.js.map +1 -1
  308. package/packages/pi-coding-agent/dist/core/tools/hashline-read.d.ts.map +1 -1
  309. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js +3 -10
  310. package/packages/pi-coding-agent/dist/core/tools/hashline-read.js.map +1 -1
  311. package/packages/pi-coding-agent/dist/core/tools/read.d.ts.map +1 -1
  312. package/packages/pi-coding-agent/dist/core/tools/read.js +4 -13
  313. package/packages/pi-coding-agent/dist/core/tools/read.js.map +1 -1
  314. package/packages/pi-coding-agent/dist/index.d.ts +2 -2
  315. package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
  316. package/packages/pi-coding-agent/dist/index.js +1 -1
  317. package/packages/pi-coding-agent/dist/index.js.map +1 -1
  318. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  319. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +0 -4
  320. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  321. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts +0 -1
  322. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.d.ts.map +1 -1
  323. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js +0 -5
  324. package/packages/pi-coding-agent/dist/modes/rpc/remote-terminal.js.map +1 -1
  325. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -38
  326. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +1 -94
  327. package/packages/pi-coding-agent/src/core/exec.ts +1 -3
  328. package/packages/pi-coding-agent/src/core/extensions/index.ts +0 -4
  329. package/packages/pi-coding-agent/src/core/extensions/loader.ts +0 -5
  330. package/packages/pi-coding-agent/src/core/index.ts +0 -6
  331. package/packages/pi-coding-agent/src/core/lsp/index.ts +0 -3
  332. package/packages/pi-coding-agent/src/core/lsp/lspmux.ts +0 -3
  333. package/packages/pi-coding-agent/src/core/messages.ts +2 -29
  334. package/packages/pi-coding-agent/src/core/model-resolver.ts +0 -1
  335. package/packages/pi-coding-agent/src/core/resource-loader.ts +1 -20
  336. package/packages/pi-coding-agent/src/core/retry-handler.ts +1 -52
  337. package/packages/pi-coding-agent/src/core/tools/hashline-read.ts +3 -11
  338. package/packages/pi-coding-agent/src/core/tools/read.ts +4 -14
  339. package/packages/pi-coding-agent/src/index.ts +0 -6
  340. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +0 -7
  341. package/packages/pi-coding-agent/src/modes/rpc/remote-terminal.ts +0 -6
  342. package/packages/pi-tui/dist/terminal.d.ts +0 -2
  343. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  344. package/packages/pi-tui/dist/terminal.js +0 -9
  345. package/packages/pi-tui/dist/terminal.js.map +1 -1
  346. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  347. package/packages/pi-tui/dist/tui.js +0 -9
  348. package/packages/pi-tui/dist/tui.js.map +1 -1
  349. package/packages/pi-tui/src/terminal.ts +0 -14
  350. package/packages/pi-tui/src/tui.ts +0 -8
  351. package/scripts/ensure-workspace-builds.cjs +14 -45
  352. package/src/resources/agents/researcher.md +1 -1
  353. package/src/resources/extensions/ask-user-questions.ts +3 -21
  354. package/src/resources/extensions/async-jobs/extension-manifest.json +1 -1
  355. package/src/resources/extensions/bg-shell/extension-manifest.json +1 -1
  356. package/src/resources/extensions/browser-tools/extension-manifest.json +1 -1
  357. package/src/resources/extensions/claude-code-cli/partial-builder.ts +6 -13
  358. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +35 -63
  359. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +0 -28
  360. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +1 -108
  361. package/src/resources/extensions/context7/extension-manifest.json +1 -1
  362. package/src/resources/extensions/get-secrets-from-user.ts +5 -8
  363. package/src/resources/extensions/google-search/extension-manifest.json +1 -1
  364. package/src/resources/extensions/google-search/index.ts +1 -2
  365. package/src/resources/extensions/gsd/auto/loop-deps.ts +0 -1
  366. package/src/resources/extensions/gsd/auto/phases.ts +34 -43
  367. package/src/resources/extensions/gsd/auto-artifact-paths.ts +2 -2
  368. package/src/resources/extensions/gsd/auto-dashboard.ts +19 -37
  369. package/src/resources/extensions/gsd/auto-dispatch.ts +2 -18
  370. package/src/resources/extensions/gsd/auto-model-selection.ts +5 -26
  371. package/src/resources/extensions/gsd/auto-post-unit.ts +4 -18
  372. package/src/resources/extensions/gsd/auto-prompts.ts +1 -1
  373. package/src/resources/extensions/gsd/auto-recovery.ts +5 -12
  374. package/src/resources/extensions/gsd/auto-start.ts +26 -35
  375. package/src/resources/extensions/gsd/auto-worktree.ts +9 -190
  376. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +0 -31
  377. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +8 -85
  378. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -38
  379. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +19 -31
  380. package/src/resources/extensions/gsd/bootstrap/system-context.ts +11 -50
  381. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +0 -75
  382. package/src/resources/extensions/gsd/captures.ts +3 -63
  383. package/src/resources/extensions/gsd/db-writer.ts +7 -140
  384. package/src/resources/extensions/gsd/doctor-git-checks.ts +0 -26
  385. package/src/resources/extensions/gsd/doctor-providers.ts +1 -2
  386. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +4 -5
  387. package/src/resources/extensions/gsd/doctor.ts +1 -3
  388. package/src/resources/extensions/gsd/error-classifier.ts +11 -14
  389. package/src/resources/extensions/gsd/extension-manifest.json +1 -16
  390. package/src/resources/extensions/gsd/forensics.ts +20 -144
  391. package/src/resources/extensions/gsd/git-service.ts +3 -26
  392. package/src/resources/extensions/gsd/gitignore.ts +0 -33
  393. package/src/resources/extensions/gsd/gsd-db.ts +7 -43
  394. package/src/resources/extensions/gsd/guided-flow.ts +45 -114
  395. package/src/resources/extensions/gsd/health-widget-core.ts +0 -34
  396. package/src/resources/extensions/gsd/health-widget.ts +0 -17
  397. package/src/resources/extensions/gsd/index.ts +0 -1
  398. package/src/resources/extensions/gsd/memory-extractor.ts +0 -8
  399. package/src/resources/extensions/gsd/migrate-external.ts +1 -9
  400. package/src/resources/extensions/gsd/model-cost-table.ts +0 -19
  401. package/src/resources/extensions/gsd/model-router.ts +1 -35
  402. package/src/resources/extensions/gsd/native-git-bridge.ts +0 -17
  403. package/src/resources/extensions/gsd/notifications.ts +0 -16
  404. package/src/resources/extensions/gsd/parallel-eligibility.ts +2 -15
  405. package/src/resources/extensions/gsd/parallel-merge.ts +4 -87
  406. package/src/resources/extensions/gsd/parsers-legacy.ts +3 -22
  407. package/src/resources/extensions/gsd/paths.ts +0 -42
  408. package/src/resources/extensions/gsd/preferences-models.ts +1 -14
  409. package/src/resources/extensions/gsd/preferences-types.ts +1 -2
  410. package/src/resources/extensions/gsd/preferences.ts +15 -13
  411. package/src/resources/extensions/gsd/prompt-loader.ts +1 -4
  412. package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  413. package/src/resources/extensions/gsd/prompts/complete-slice.md +2 -4
  414. package/src/resources/extensions/gsd/prompts/discuss-headless.md +1 -1
  415. package/src/resources/extensions/gsd/prompts/discuss.md +1 -1
  416. package/src/resources/extensions/gsd/prompts/execute-task.md +1 -3
  417. package/src/resources/extensions/gsd/prompts/forensics.md +2 -2
  418. package/src/resources/extensions/gsd/prompts/guided-discuss-milestone.md +1 -1
  419. package/src/resources/extensions/gsd/prompts/guided-discuss-slice.md +1 -1
  420. package/src/resources/extensions/gsd/prompts/plan-slice.md +0 -2
  421. package/src/resources/extensions/gsd/prompts/rethink.md +1 -1
  422. package/src/resources/extensions/gsd/prompts/triage-captures.md +0 -1
  423. package/src/resources/extensions/gsd/repo-identity.ts +11 -186
  424. package/src/resources/extensions/gsd/rethink.ts +0 -6
  425. package/src/resources/extensions/gsd/roadmap-slices.ts +4 -5
  426. package/src/resources/extensions/gsd/state.ts +32 -84
  427. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +0 -29
  428. package/src/resources/extensions/gsd/tests/auto-model-selection.test.ts +1 -71
  429. package/src/resources/extensions/gsd/tests/captures.test.ts +0 -103
  430. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +0 -27
  431. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +0 -21
  432. package/src/resources/extensions/gsd/tests/db-writer.test.ts +12 -7
  433. package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +5 -78
  434. package/src/resources/extensions/gsd/tests/derive-state.test.ts +0 -29
  435. package/src/resources/extensions/gsd/tests/discuss-queued-milestones.test.ts +0 -40
  436. package/src/resources/extensions/gsd/tests/dist-redirect.mjs +1 -20
  437. package/src/resources/extensions/gsd/tests/doctor-providers.test.ts +0 -117
  438. package/src/resources/extensions/gsd/tests/empty-db-reconciliation.test.ts +79 -0
  439. package/src/resources/extensions/gsd/tests/forensics-dedup.test.ts +0 -31
  440. package/src/resources/extensions/gsd/tests/gsd-tools.test.ts +12 -125
  441. package/src/resources/extensions/gsd/tests/health-widget.test.ts +0 -67
  442. package/src/resources/extensions/gsd/tests/integration/auto-recovery.test.ts +1 -111
  443. package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +0 -101
  444. package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +0 -59
  445. package/src/resources/extensions/gsd/tests/integration/parallel-merge.test.ts +0 -110
  446. package/src/resources/extensions/gsd/tests/integration/run-uat.test.ts +1 -1
  447. package/src/resources/extensions/gsd/tests/memory-extractor.test.ts +2 -85
  448. package/src/resources/extensions/gsd/tests/model-cost-table.test.ts +0 -34
  449. package/src/resources/extensions/gsd/tests/model-router.test.ts +3 -68
  450. package/src/resources/extensions/gsd/tests/model-unittype-mapping.test.ts +0 -28
  451. package/src/resources/extensions/gsd/tests/notifications.test.ts +0 -45
  452. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +1 -33
  453. package/src/resources/extensions/gsd/tests/prompt-contracts.test.ts +0 -29
  454. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +0 -38
  455. package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +0 -117
  456. package/src/resources/extensions/gsd/tests/roadmap-slices.test.ts +0 -97
  457. package/src/resources/extensions/gsd/tests/secure-env-collect.test.ts +0 -134
  458. package/src/resources/extensions/gsd/tests/tool-naming.test.ts +1 -2
  459. package/src/resources/extensions/gsd/tests/triage-resolution.test.ts +0 -8
  460. package/src/resources/extensions/gsd/tests/unit-ownership.test.ts +17 -100
  461. package/src/resources/extensions/gsd/tests/validate-milestone-write-order.test.ts +1 -4
  462. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +0 -48
  463. package/src/resources/extensions/gsd/tests/workflow-manifest.test.ts +0 -92
  464. package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +2 -4
  465. package/src/resources/extensions/gsd/tests/worktree-resolver.test.ts +1 -48
  466. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +5 -29
  467. package/src/resources/extensions/gsd/tools/complete-task.ts +74 -36
  468. package/src/resources/extensions/gsd/tools/plan-milestone.ts +1 -13
  469. package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +0 -36
  470. package/src/resources/extensions/gsd/tools/validate-milestone.ts +2 -20
  471. package/src/resources/extensions/gsd/triage-resolution.ts +6 -23
  472. package/src/resources/extensions/gsd/types.ts +2 -4
  473. package/src/resources/extensions/gsd/undo.ts +2 -2
  474. package/src/resources/extensions/gsd/unit-ownership.ts +35 -206
  475. package/src/resources/extensions/gsd/verdict-parser.ts +6 -21
  476. package/src/resources/extensions/gsd/workflow-logger.ts +1 -3
  477. package/src/resources/extensions/gsd/workflow-manifest.ts +5 -22
  478. package/src/resources/extensions/gsd/workflow-projections.ts +64 -97
  479. package/src/resources/extensions/gsd/workflow-reconcile.ts +10 -39
  480. package/src/resources/extensions/gsd/workspace-index.ts +0 -30
  481. package/src/resources/extensions/gsd/worktree-manager.ts +1 -120
  482. package/src/resources/extensions/gsd/worktree-resolver.ts +3 -22
  483. package/src/resources/extensions/mcp-client/index.ts +7 -13
  484. package/src/resources/extensions/search-the-web/extension-manifest.json +1 -1
  485. package/src/resources/extensions/shared/interview-ui.ts +1 -12
  486. package/src/resources/skills/create-gsd-extension/SKILL.md +3 -5
  487. package/src/resources/skills/create-gsd-extension/references/key-rules-gotchas.md +4 -5
  488. package/src/resources/skills/create-gsd-extension/workflows/add-capability.md +2 -2
  489. package/src/resources/skills/create-gsd-extension/workflows/create-extension.md +4 -4
  490. package/src/resources/skills/create-gsd-extension/workflows/debug-extension.md +3 -5
  491. package/dist/resources/extensions/gsd/milestone-validation-gates.js +0 -45
  492. package/dist/resources/extensions/ollama/index.js +0 -112
  493. package/dist/resources/extensions/ollama/model-capabilities.js +0 -115
  494. package/dist/resources/extensions/ollama/ollama-client.js +0 -168
  495. package/dist/resources/extensions/ollama/ollama-commands.js +0 -194
  496. package/dist/resources/extensions/ollama/ollama-discovery.js +0 -69
  497. package/dist/resources/extensions/ollama/ollama-tool.js +0 -184
  498. package/dist/resources/extensions/ollama/types.js +0 -2
  499. package/dist/startup-model-validation.d.ts +0 -39
  500. package/dist/startup-model-validation.js +0 -50
  501. package/dist/web/standalone/.next/static/chunks/6502.7593d7797a4b3999.js +0 -9
  502. package/dist/web/standalone/.next/static/css/f6e8833d46e738d8.css +0 -1
  503. package/packages/native/src/__tests__/module-compat.test.mjs +0 -91
  504. package/packages/pi-agent-core/src/agent-loop.test.ts +0 -45
  505. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts +0 -2
  506. package/packages/pi-ai/dist/providers/anthropic-shared.test.d.ts.map +0 -1
  507. package/packages/pi-ai/dist/providers/anthropic-shared.test.js +0 -25
  508. package/packages/pi-ai/dist/providers/anthropic-shared.test.js.map +0 -1
  509. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts +0 -37
  510. package/packages/pi-ai/dist/utils/repair-tool-json.d.ts.map +0 -1
  511. package/packages/pi-ai/dist/utils/repair-tool-json.js +0 -75
  512. package/packages/pi-ai/dist/utils/repair-tool-json.js.map +0 -1
  513. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts +0 -2
  514. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.d.ts.map +0 -1
  515. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js +0 -73
  516. package/packages/pi-ai/dist/utils/tests/repair-tool-json.test.js.map +0 -1
  517. package/packages/pi-ai/src/providers/anthropic-shared.test.ts +0 -29
  518. package/packages/pi-ai/src/utils/repair-tool-json.ts +0 -88
  519. package/packages/pi-ai/src/utils/tests/repair-tool-json.test.ts +0 -102
  520. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts +0 -6
  521. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.d.ts.map +0 -1
  522. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +0 -176
  523. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +0 -1
  524. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts +0 -28
  525. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.d.ts.map +0 -1
  526. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js +0 -37
  527. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.js.map +0 -1
  528. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts +0 -2
  529. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.d.ts.map +0 -1
  530. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js +0 -63
  531. package/packages/pi-coding-agent/dist/core/extensions/extension-manifest.test.js.map +0 -1
  532. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts +0 -19
  533. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.d.ts.map +0 -1
  534. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js +0 -115
  535. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.js.map +0 -1
  536. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts +0 -2
  537. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.d.ts.map +0 -1
  538. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js +0 -109
  539. package/packages/pi-coding-agent/dist/core/extensions/extension-sort.test.js.map +0 -1
  540. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts +0 -44
  541. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.d.ts.map +0 -1
  542. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js +0 -97
  543. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.js.map +0 -1
  544. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts +0 -2
  545. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.d.ts.map +0 -1
  546. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js +0 -181
  547. package/packages/pi-coding-agent/dist/core/image-overflow-recovery.test.js.map +0 -1
  548. package/packages/pi-coding-agent/dist/core/messages.test.d.ts +0 -9
  549. package/packages/pi-coding-agent/dist/core/messages.test.d.ts.map +0 -1
  550. package/packages/pi-coding-agent/dist/core/messages.test.js +0 -86
  551. package/packages/pi-coding-agent/dist/core/messages.test.js.map +0 -1
  552. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts +0 -9
  553. package/packages/pi-coding-agent/dist/core/retry-handler.test.d.ts.map +0 -1
  554. package/packages/pi-coding-agent/dist/core/retry-handler.test.js +0 -193
  555. package/packages/pi-coding-agent/dist/core/retry-handler.test.js.map +0 -1
  556. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts +0 -16
  557. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.d.ts.map +0 -1
  558. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js +0 -80
  559. package/packages/pi-coding-agent/dist/core/tools/spawn-shell-windows.test.js.map +0 -1
  560. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +0 -236
  561. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.test.ts +0 -77
  562. package/packages/pi-coding-agent/src/core/extensions/extension-manifest.ts +0 -62
  563. package/packages/pi-coding-agent/src/core/extensions/extension-sort.test.ts +0 -134
  564. package/packages/pi-coding-agent/src/core/extensions/extension-sort.ts +0 -137
  565. package/packages/pi-coding-agent/src/core/image-overflow-recovery.test.ts +0 -228
  566. package/packages/pi-coding-agent/src/core/image-overflow-recovery.ts +0 -118
  567. package/packages/pi-coding-agent/src/core/messages.test.ts +0 -114
  568. package/packages/pi-coding-agent/src/core/retry-handler.test.ts +0 -255
  569. package/packages/pi-coding-agent/src/core/tools/spawn-shell-windows.test.ts +0 -92
  570. package/src/resources/extensions/gsd/milestone-validation-gates.ts +0 -56
  571. package/src/resources/extensions/gsd/tests/auto-mode-interactive-guard.test.ts +0 -71
  572. package/src/resources/extensions/gsd/tests/cli-provider-rate-limit.test.ts +0 -47
  573. package/src/resources/extensions/gsd/tests/completion-hierarchy-guards.test.ts +0 -192
  574. package/src/resources/extensions/gsd/tests/db-path-worktree-symlink.test.ts +0 -131
  575. package/src/resources/extensions/gsd/tests/discord-invite-links.test.ts +0 -47
  576. package/src/resources/extensions/gsd/tests/discuss-empty-db-fallback.test.ts +0 -127
  577. package/src/resources/extensions/gsd/tests/dynamic-routing-default.test.ts +0 -20
  578. package/src/resources/extensions/gsd/tests/empty-content-abort-loop.test.ts +0 -74
  579. package/src/resources/extensions/gsd/tests/event-replay-idempotency.test.ts +0 -140
  580. package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +0 -129
  581. package/src/resources/extensions/gsd/tests/forensics-db-completion.test.ts +0 -96
  582. package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +0 -164
  583. package/src/resources/extensions/gsd/tests/guided-flow-dynamic-routing.test.ts +0 -135
  584. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +0 -97
  585. package/src/resources/extensions/gsd/tests/hook-key-parsing.test.ts +0 -107
  586. package/src/resources/extensions/gsd/tests/integration/doctor-false-positives.test.ts +0 -243
  587. package/src/resources/extensions/gsd/tests/integration/gitignore-staging-2570.test.ts +0 -150
  588. package/src/resources/extensions/gsd/tests/integration/state-machine-live-validation.test.ts +0 -959
  589. package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +0 -105
  590. package/src/resources/extensions/gsd/tests/milestone-status-authoritative.test.ts +0 -116
  591. package/src/resources/extensions/gsd/tests/parallel-commit-scope.test.ts +0 -159
  592. package/src/resources/extensions/gsd/tests/parallel-eligibility-ghost.test.ts +0 -150
  593. package/src/resources/extensions/gsd/tests/plan-milestone-title.test.ts +0 -70
  594. package/src/resources/extensions/gsd/tests/project-relocation-recovery.test.ts +0 -297
  595. package/src/resources/extensions/gsd/tests/prompt-loader-replacement.test.ts +0 -178
  596. package/src/resources/extensions/gsd/tests/prompt-tool-names.test.ts +0 -69
  597. package/src/resources/extensions/gsd/tests/queue-execution-guard.test.ts +0 -157
  598. package/src/resources/extensions/gsd/tests/quick-turn-end-cleanup.test.ts +0 -90
  599. package/src/resources/extensions/gsd/tests/reconciliation-edge-cases.test.ts +0 -162
  600. package/src/resources/extensions/gsd/tests/slice-disk-reconcile.test.ts +0 -233
  601. package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +0 -305
  602. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +0 -405
  603. package/src/resources/extensions/gsd/tests/state-derivation-parity.test.ts +0 -257
  604. package/src/resources/extensions/gsd/tests/state-machine-full-walkthrough.test.ts +0 -1628
  605. package/src/resources/extensions/gsd/tests/stop-auto-race-null-unit.test.ts +0 -106
  606. package/src/resources/extensions/gsd/tests/stuck-detection-coverage.test.ts +0 -174
  607. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +0 -221
  608. package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +0 -289
  609. package/src/resources/extensions/gsd/tests/vacuum-recovery.test.ts +0 -154
  610. package/src/resources/extensions/gsd/tests/verdict-parser.test.ts +0 -156
  611. package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +0 -82
  612. package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +0 -140
  613. package/src/resources/extensions/gsd/tests/worktree-nested-git-safety.test.ts +0 -101
  614. package/src/resources/extensions/gsd/tests/zombie-gsd-state.test.ts +0 -95
  615. package/src/resources/extensions/mcp-client/tests/server-name-spaces.test.ts +0 -55
  616. package/src/resources/extensions/ollama/index.ts +0 -130
  617. package/src/resources/extensions/ollama/model-capabilities.ts +0 -145
  618. package/src/resources/extensions/ollama/ollama-client.ts +0 -196
  619. package/src/resources/extensions/ollama/ollama-commands.ts +0 -248
  620. package/src/resources/extensions/ollama/ollama-discovery.ts +0 -106
  621. package/src/resources/extensions/ollama/ollama-tool.ts +0 -218
  622. package/src/resources/extensions/ollama/tests/model-capabilities.test.ts +0 -162
  623. package/src/resources/extensions/ollama/tests/ollama-client.test.ts +0 -38
  624. package/src/resources/extensions/ollama/tests/ollama-discovery.test.ts +0 -28
  625. package/src/resources/extensions/ollama/types.ts +0 -130
  626. package/src/resources/extensions/shared/tests/ask-user-freetext.test.ts +0 -156
  627. /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_buildManifest.js +0 -0
  628. /package/dist/web/standalone/.next/static/{R0D4xaIPl5kg93edN7Oo0 → 5DLsjFHdSB6_a1EDQVjr7}/_ssgManifest.js +0 -0
@@ -317,54 +317,6 @@ describe("workflow-logger", () => {
317
317
  });
318
318
  });
319
319
 
320
- describe("new log components (db, dispatch)", () => {
321
- test("logError with 'db' component stores correct component", () => {
322
- logError("db", "failed to copy DB to worktree", { error: "ENOENT" });
323
- const entries = peekLogs();
324
- assert.equal(entries.length, 1);
325
- assert.equal(entries[0].severity, "error");
326
- assert.equal(entries[0].component, "db");
327
- assert.equal(entries[0].message, "failed to copy DB to worktree");
328
- assert.deepEqual(entries[0].context, { error: "ENOENT" });
329
- });
330
-
331
- test("logError with 'dispatch' component stores correct component", () => {
332
- logError("dispatch", "reactive graph derivation failed", { error: "timeout" });
333
- const entries = peekLogs();
334
- assert.equal(entries.length, 1);
335
- assert.equal(entries[0].severity, "error");
336
- assert.equal(entries[0].component, "dispatch");
337
- assert.deepEqual(entries[0].context, { error: "timeout" });
338
- });
339
-
340
- test("logWarning with 'reconcile' component for centralized logging path", () => {
341
- logWarning("reconcile", "could not acquire sync lock — another reconciliation may be in progress");
342
- const entries = peekLogs();
343
- assert.equal(entries.length, 1);
344
- assert.equal(entries[0].severity, "warn");
345
- assert.equal(entries[0].component, "reconcile");
346
- });
347
-
348
- test("summarizeLogs includes db and dispatch entries", () => {
349
- logError("db", "worktree DB reconciliation failed: path contains unsafe characters");
350
- logWarning("dispatch", "graph derivation timeout");
351
- const summary = summarizeLogs()!;
352
- assert.ok(summary.includes("1 error(s)"));
353
- assert.ok(summary.includes("1 warning(s)"));
354
- assert.ok(summary.includes("unsafe characters"));
355
- assert.ok(summary.includes("graph derivation timeout"));
356
- });
357
-
358
- test("formatForNotification renders db and dispatch components", () => {
359
- logError("db", "copy failed");
360
- logWarning("dispatch", "slow derivation");
361
- const entries = drainLogs();
362
- const formatted = formatForNotification(entries);
363
- assert.ok(formatted.includes("[db] copy failed"));
364
- assert.ok(formatted.includes("[dispatch] slow derivation"));
365
- });
366
- });
367
-
368
320
  describe("stderr output", () => {
369
321
  test("writes WARN prefix to stderr for warnings", (t) => {
370
322
  const written: string[] = [];
@@ -12,7 +12,6 @@ import {
12
12
  insertMilestone,
13
13
  insertSlice,
14
14
  insertTask,
15
- _getAdapter,
16
15
  } from '../gsd-db.ts';
17
16
  import {
18
17
  writeManifest,
@@ -166,97 +165,6 @@ test('workflow-manifest: bootstrapFromManifest restores DB from manifest (round-
166
165
  }
167
166
  });
168
167
 
169
- // ─── snapshotState: numeric column coercion (#2962) ─────────────────────
170
-
171
- test('workflow-manifest: snapshotState coerces string placeholders in numeric columns to null (#2962)', () => {
172
- const base = tempDir();
173
- openDatabase(tempDbPath(base));
174
- try {
175
- // Set up prerequisite rows
176
- insertMilestone({ id: 'M001' });
177
- insertSlice({ id: 'S01', milestoneId: 'M001' });
178
- insertTask({ id: 'T01', sliceId: 'S01', milestoneId: 'M001', title: 'Task', status: 'complete' });
179
-
180
- // Insert verification_evidence with string placeholders in numeric columns
181
- // This simulates what happens after schema migrations or manual inserts
182
- const db = _getAdapter()!;
183
- db.prepare(
184
- `INSERT INTO verification_evidence (task_id, slice_id, milestone_id, command, exit_code, verdict, duration_ms, created_at)
185
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
186
- ).run('T01', 'S01', 'M001', 'npm test', '-', 'pass', '-', new Date().toISOString());
187
-
188
- // snapshotState should coerce "-" to null for numeric columns
189
- const snap = snapshotState();
190
- const ev = snap.verification_evidence[0];
191
- assert.strictEqual(ev.exit_code, null, 'exit_code "-" should be coerced to null');
192
- assert.strictEqual(ev.duration_ms, null, 'duration_ms "-" should be coerced to null');
193
-
194
- // Round-trip through JSON should not throw
195
- const json = JSON.stringify(snap, null, 2);
196
- const reparsed = JSON.parse(json);
197
- assert.strictEqual(reparsed.verification_evidence[0].exit_code, null);
198
- assert.strictEqual(reparsed.verification_evidence[0].duration_ms, null);
199
- } finally {
200
- closeDatabase();
201
- cleanupDir(base);
202
- }
203
- });
204
-
205
- test('workflow-manifest: snapshotState coerces empty string and N/A in numeric columns (#2962)', () => {
206
- const base = tempDir();
207
- openDatabase(tempDbPath(base));
208
- try {
209
- insertMilestone({ id: 'M001' });
210
- insertSlice({ id: 'S01', milestoneId: 'M001' });
211
- insertTask({ id: 'T01', sliceId: 'S01', milestoneId: 'M001', title: 'Task', status: 'complete' });
212
-
213
- const db = _getAdapter()!;
214
- db.prepare(
215
- `INSERT INTO verification_evidence (task_id, slice_id, milestone_id, command, exit_code, verdict, duration_ms, created_at)
216
- VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,
217
- ).run('T01', 'S01', 'M001', 'npm test', 'N/A', 'pass', '', new Date().toISOString());
218
-
219
- const snap = snapshotState();
220
- const ev = snap.verification_evidence[0];
221
- assert.strictEqual(ev.exit_code, null, 'exit_code "N/A" should be coerced to null');
222
- assert.strictEqual(ev.duration_ms, null, 'duration_ms "" should be coerced to null');
223
- } finally {
224
- closeDatabase();
225
- cleanupDir(base);
226
- }
227
- });
228
-
229
- test('workflow-manifest: snapshotState coerces string placeholders in sequence columns (#2962)', () => {
230
- const base = tempDir();
231
- openDatabase(tempDbPath(base));
232
- try {
233
- insertMilestone({ id: 'M001' });
234
-
235
- // Insert a slice with a string sequence via raw SQL
236
- const db = _getAdapter()!;
237
- db.prepare(
238
- `INSERT INTO slices (milestone_id, id, title, status, risk, depends, demo, created_at, sequence)
239
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
240
- ).run('M001', 'S01', 'Test Slice', 'planned', 'low', '[]', '', new Date().toISOString(), '-');
241
-
242
- db.prepare(
243
- `INSERT INTO tasks (milestone_id, slice_id, id, title, status, sequence)
244
- VALUES (?, ?, ?, ?, ?, ?)`,
245
- ).run('M001', 'S01', 'T01', 'Test Task', 'planned', 'N/A');
246
-
247
- const snap = snapshotState();
248
- assert.strictEqual(snap.slices[0].sequence, 0, 'slice sequence "-" should be coerced to 0');
249
- assert.strictEqual(snap.tasks[0].sequence, 0, 'task sequence "N/A" should be coerced to 0');
250
-
251
- // JSON round-trip must not throw
252
- const json = JSON.stringify(snap, null, 2);
253
- assert.doesNotThrow(() => JSON.parse(json));
254
- } finally {
255
- closeDatabase();
256
- cleanupDir(base);
257
- }
258
- });
259
-
260
168
  // ─── readManifest: version check ─────────────────────────────────────────
261
169
 
262
170
  test('workflow-manifest: readManifest throws on unsupported version', () => {
@@ -86,12 +86,10 @@ test('workflow-projections: renderPlanContent falls back to TBD when goal and fu
86
86
  assert.ok(content.includes('**Goal:** TBD'));
87
87
  });
88
88
 
89
- test('workflow-projections: renderPlanContent falls back to TBD when goal is empty (full_summary_md ignored #2945)', () => {
89
+ test('workflow-projections: renderPlanContent falls back to full_summary_md when goal is empty', () => {
90
90
  const slice = makeSlice({ goal: '', full_summary_md: 'Fallback goal text' });
91
91
  const content = renderPlanContent(slice, []);
92
- // #2945: full_summary_md is no longer used as a fallback — it contains
93
- // multi-line rendered markdown that corrupts single-line fields.
94
- assert.ok(content.includes('**Goal:** TBD'), `expected TBD fallback, got: ${content}`);
92
+ assert.ok(content.includes('**Goal:** Fallback goal text'));
95
93
  });
96
94
 
97
95
  test('workflow-projections: renderPlanContent includes ## Tasks section', () => {
@@ -481,8 +481,7 @@ test("mergeAndExit resolves roadmap from worktree when missing at project root (
481
481
 
482
482
  // Should have called mergeMilestoneToMain, not bare teardown
483
483
  assert.equal(findCalls(deps.calls, "mergeMilestoneToMain").length, 1);
484
- // #2945 Bug 3: secondary teardown is now called after merge for cleanup
485
- assert.equal(findCalls(deps.calls, "teardownAutoWorktree").length, 1);
484
+ assert.equal(findCalls(deps.calls, "teardownAutoWorktree").length, 0);
486
485
  assert.equal(s.basePath, "/project"); // restored
487
486
  assert.ok(ctx.messages.some((m) => m.msg.includes("merged to main")));
488
487
  });
@@ -914,49 +913,3 @@ test("isolationDegraded is reset by session.reset() (#2483)", () => {
914
913
 
915
914
  assert.equal(s.isolationDegraded, false);
916
915
  });
917
-
918
- // ─── #2625 — Default isolation mode change must not orphan worktree commits ──
919
-
920
- test("mergeAndExit still merges when mode is 'none' but session is in a worktree (#2625)", () => {
921
- // Scenario: user upgraded from a version where default was "worktree" to one
922
- // where default is "none". They have an active worktree with committed work.
923
- // mergeAndExit must detect the active worktree and merge regardless of config.
924
- const s = makeSession({
925
- basePath: "/project/.gsd/worktrees/M001",
926
- originalBasePath: "/project",
927
- });
928
- const deps = makeDeps({
929
- isInAutoWorktree: () => true,
930
- getIsolationMode: () => "none", // config says "none" — but we ARE in a worktree
931
- });
932
- const ctx = makeNotifyCtx();
933
- const resolver = new WorktreeResolver(s, deps);
934
-
935
- resolver.mergeAndExit("M001", ctx);
936
-
937
- // Must still merge — not skip silently
938
- assert.equal(findCalls(deps.calls, "mergeMilestoneToMain").length, 1,
939
- "must call mergeMilestoneToMain even when isolation mode is 'none' but we are in a worktree");
940
- assert.equal(s.basePath, "/project", "basePath must be restored to project root");
941
- assert.ok(ctx.messages.some((m) => m.msg.includes("merged to main")),
942
- "must notify about the merge");
943
- });
944
-
945
- test("mergeAndExit in none mode remains a no-op when NOT in a worktree (#2625)", () => {
946
- // When mode is "none" and we are genuinely not in a worktree, it should still be a no-op.
947
- const s = makeSession({
948
- basePath: "/project",
949
- originalBasePath: "/project",
950
- });
951
- const deps = makeDeps({
952
- isInAutoWorktree: () => false,
953
- getIsolationMode: () => "none",
954
- });
955
- const ctx = makeNotifyCtx();
956
- const resolver = new WorktreeResolver(s, deps);
957
-
958
- resolver.mergeAndExit("M001", ctx);
959
-
960
- assert.equal(findCalls(deps.calls, "mergeMilestoneToMain").length, 0,
961
- "must NOT merge when not in a worktree and mode is none");
962
- });
@@ -100,8 +100,8 @@ describe('worktree-sync-milestones', async () => {
100
100
  }
101
101
  }
102
102
 
103
- // ─── 3. empty gsd.db deleted in worktree after sync ────────────────────
104
- console.log('\n=== 3. empty gsd.db deleted in worktree after sync ===');
103
+ // ─── 3. gsd.db deleted in worktree after sync ─────────────────────────
104
+ console.log('\n=== 3. gsd.db deleted in worktree after sync ===');
105
105
  {
106
106
  const mainBase = createBase('main');
107
107
  const wtBase = createBase('wt');
@@ -111,37 +111,13 @@ describe('worktree-sync-milestones', async () => {
111
111
  mkdirSync(m001Dir, { recursive: true });
112
112
  writeFileSync(join(m001Dir, 'M001-ROADMAP.md'), '# Roadmap');
113
113
 
114
- // Worktree has an empty (0-byte) gsd.db — stale/corrupt
115
- writeFileSync(join(wtBase, '.gsd', 'gsd.db'), '');
114
+ // Worktree has a stale gsd.db
115
+ writeFileSync(join(wtBase, '.gsd', 'gsd.db'), 'stale data');
116
116
  assert.ok(existsSync(join(wtBase, '.gsd', 'gsd.db')), 'gsd.db exists before sync');
117
117
 
118
118
  syncProjectRootToWorktree(mainBase, wtBase, 'M001');
119
119
 
120
- assert.ok(!existsSync(join(wtBase, '.gsd', 'gsd.db')), '#853: empty gsd.db deleted after sync');
121
- } finally {
122
- cleanup(mainBase);
123
- cleanup(wtBase);
124
- }
125
- }
126
-
127
- // ─── 3b. non-empty gsd.db preserved in worktree after sync (#2815) ───
128
- console.log('\n=== 3b. non-empty gsd.db preserved in worktree after sync (#2815) ===');
129
- {
130
- const mainBase = createBase('main');
131
- const wtBase = createBase('wt');
132
-
133
- try {
134
- const m001Dir = join(mainBase, '.gsd', 'milestones', 'M001');
135
- mkdirSync(m001Dir, { recursive: true });
136
- writeFileSync(join(m001Dir, 'M001-ROADMAP.md'), '# Roadmap');
137
-
138
- // Worktree has a populated gsd.db (e.g. from gsd-migrate on respawn)
139
- writeFileSync(join(wtBase, '.gsd', 'gsd.db'), 'migrated-db-content');
140
- assert.ok(existsSync(join(wtBase, '.gsd', 'gsd.db')), 'gsd.db exists before sync');
141
-
142
- syncProjectRootToWorktree(mainBase, wtBase, 'M001');
143
-
144
- assert.ok(existsSync(join(wtBase, '.gsd', 'gsd.db')), '#2815: non-empty gsd.db preserved after sync');
120
+ assert.ok(!existsSync(join(wtBase, '.gsd', 'gsd.db')), '#853: gsd.db deleted after sync');
145
121
  } finally {
146
122
  cleanup(mainBase);
147
123
  cleanup(wtBase);
@@ -30,7 +30,7 @@ import { checkOwnership, taskUnitKey } from "../unit-ownership.js";
30
30
  import { saveFile, clearParseCache } from "../files.js";
31
31
  import { invalidateStateCache } from "../state.js";
32
32
  import { renderPlanCheckboxes } from "../markdown-renderer.js";
33
- import { renderAllProjections, renderSummaryContent } from "../workflow-projections.js";
33
+ import { renderAllProjections } from "../workflow-projections.js";
34
34
  import { writeManifest } from "../workflow-manifest.js";
35
35
  import { appendEvent } from "../workflow-events.js";
36
36
 
@@ -41,40 +41,79 @@ export interface CompleteTaskResult {
41
41
  summaryPath: string;
42
42
  }
43
43
 
44
- import type { TaskRow } from "../gsd-db.js";
45
-
46
44
  /**
47
- * Build a TaskRow-shaped object from CompleteTaskParams so the unified
48
- * renderSummaryContent() can be used at completion time (#2720).
45
+ * Render task summary markdown matching the template format.
46
+ * YAML frontmatter uses snake_case keys for parseSummary() compatibility.
49
47
  */
50
- function paramsToTaskRow(params: CompleteTaskParams, completedAt: string): TaskRow {
51
- return {
52
- milestone_id: params.milestoneId,
53
- slice_id: params.sliceId,
54
- id: params.taskId,
55
- title: params.oneLiner || params.taskId,
56
- status: "complete",
57
- one_liner: params.oneLiner,
58
- narrative: params.narrative,
59
- verification_result: params.verification,
60
- duration: "",
61
- completed_at: completedAt,
62
- blocker_discovered: params.blockerDiscovered,
63
- deviations: params.deviations,
64
- known_issues: params.knownIssues,
65
- key_files: params.keyFiles,
66
- key_decisions: params.keyDecisions,
67
- full_summary_md: "",
68
- description: "",
69
- estimate: "",
70
- files: [],
71
- verify: "",
72
- inputs: [],
73
- expected_output: [],
74
- observability_impact: "",
75
- full_plan_md: "",
76
- sequence: 0,
77
- };
48
+ function renderSummaryMarkdown(params: CompleteTaskParams): string {
49
+ const now = new Date().toISOString();
50
+ const keyFilesYaml = params.keyFiles.length > 0
51
+ ? params.keyFiles.map(f => ` - ${f}`).join("\n")
52
+ : " - (none)";
53
+ const keyDecisionsYaml = params.keyDecisions.length > 0
54
+ ? params.keyDecisions.map(d => ` - ${d}`).join("\n")
55
+ : " - (none)";
56
+
57
+ // Build verification evidence table rows
58
+ let evidenceTable = "| # | Command | Exit Code | Verdict | Duration |\n|---|---------|-----------|---------|----------|\n";
59
+ if (params.verificationEvidence.length > 0) {
60
+ params.verificationEvidence.forEach((e, i) => {
61
+ evidenceTable += `| ${i + 1} | \`${e.command}\` | ${e.exitCode} | ${e.verdict} | ${e.durationMs}ms |\n`;
62
+ });
63
+ } else {
64
+ evidenceTable += "| — | No verification commands discovered | — | — | — |\n";
65
+ }
66
+
67
+ // Determine verification_result from evidence
68
+ const allPassed = params.verificationEvidence.length > 0 &&
69
+ params.verificationEvidence.every(e => e.exitCode === 0 || e.verdict.includes("") || e.verdict.toLowerCase().includes("pass"));
70
+ const verificationResult = allPassed ? "passed" : (params.verificationEvidence.length === 0 ? "untested" : "mixed");
71
+
72
+ // Extract a title from the oneLiner or taskId
73
+ const title = params.oneLiner || params.taskId;
74
+
75
+ return `---
76
+ id: ${params.taskId}
77
+ parent: ${params.sliceId}
78
+ milestone: ${params.milestoneId}
79
+ key_files:
80
+ ${keyFilesYaml}
81
+ key_decisions:
82
+ ${keyDecisionsYaml}
83
+ duration: ""
84
+ verification_result: ${verificationResult}
85
+ completed_at: ${now}
86
+ blocker_discovered: ${params.blockerDiscovered}
87
+ ---
88
+
89
+ # ${params.taskId}: ${title}
90
+
91
+ **${params.oneLiner}**
92
+
93
+ ## What Happened
94
+
95
+ ${params.narrative}
96
+
97
+ ## Verification
98
+
99
+ ${params.verification}
100
+
101
+ ## Verification Evidence
102
+
103
+ ${evidenceTable}
104
+
105
+ ## Deviations
106
+
107
+ ${params.deviations || "None."}
108
+
109
+ ## Known Issues
110
+
111
+ ${params.knownIssues || "None."}
112
+
113
+ ## Files Created/Modified
114
+
115
+ ${params.keyFiles.map(f => `- \`${f}\``).join("\n") || "None."}
116
+ `;
78
117
  }
79
118
 
80
119
  /**
@@ -179,9 +218,8 @@ export async function handleCompleteTask(
179
218
  // If disk render fails, roll back the DB status so deriveState() and
180
219
  // verifyExpectedArtifact() stay consistent (both say "not done").
181
220
 
182
- // Render summary markdown via the single source of truth (#2720)
183
- const taskRow = paramsToTaskRow(params, completedAt);
184
- const summaryMd = renderSummaryContent(taskRow, params.sliceId, params.milestoneId, params.verificationEvidence);
221
+ // Render summary markdown
222
+ const summaryMd = renderSummaryMarkdown(params);
185
223
 
186
224
  // Resolve and write summary to disk
187
225
  let summaryPath: string;
@@ -4,7 +4,6 @@ import { isNonEmptyString, validateStringArray } from "../validation.js";
4
4
  import {
5
5
  transaction,
6
6
  getMilestone,
7
- getMilestoneSlices,
8
7
  insertMilestone,
9
8
  insertSlice,
10
9
  upsertMilestonePlanning,
@@ -190,17 +189,6 @@ export async function handlePlanMilestone(
190
189
  return;
191
190
  }
192
191
 
193
- // Guard: refuse to re-plan a milestone that has completed slices (#2960).
194
- // INSERT OR IGNORE on slices won't overwrite existing rows, but a full
195
- // re-plan after worktree recreation or DB resync can create new slice rows
196
- // that shadow completed work. Block early when any slice is already done.
197
- const existingSlices = getMilestoneSlices(params.milestoneId);
198
- const completedSlices = existingSlices.filter(s => isClosedStatus(s.status));
199
- if (completedSlices.length > 0) {
200
- guardError = `cannot re-plan milestone ${params.milestoneId}: ${completedSlices.length} slice(s) already completed (${completedSlices.map(s => s.id).join(", ")}). Use gsd_reassess_roadmap to modify the roadmap.`;
201
- return;
202
- }
203
-
204
192
  // Validate depends_on: all dependencies must exist and be complete
205
193
  if (params.dependsOn && params.dependsOn.length > 0) {
206
194
  for (const depId of params.dependsOn) {
@@ -235,7 +223,7 @@ export async function handlePlanMilestone(
235
223
  definitionOfDone: params.definitionOfDone,
236
224
  requirementCoverage: params.requirementCoverage,
237
225
  boundaryMapMarkdown: params.boundaryMapMarkdown,
238
- }, params.title);
226
+ });
239
227
 
240
228
  for (const slice of params.slices) {
241
229
  insertSlice({
@@ -1,5 +1,4 @@
1
1
  import { join } from "node:path";
2
- import { existsSync, unlinkSync } from "node:fs";
3
2
  import { clearParseCache } from "../files.js";
4
3
  import { isClosedStatus } from "../status-guards.js";
5
4
  import { isNonEmptyString } from "../validation.js";
@@ -11,7 +10,6 @@ import {
11
10
  insertSlice,
12
11
  updateSliceFields,
13
12
  insertAssessment,
14
- deleteAssessmentByScope,
15
13
  deleteSlice,
16
14
  } from "../gsd-db.js";
17
15
  import { invalidateStateCache } from "../state.js";
@@ -202,21 +200,6 @@ export async function handleReassessRoadmap(
202
200
  for (const removedId of params.sliceChanges.removed) {
203
201
  deleteSlice(params.milestoneId, removedId);
204
202
  }
205
-
206
- // ── Invalidate stale milestone validation (#2957) ──────────────
207
- // When roadmap structure changes (slices added/modified/removed),
208
- // any prior milestone-validation verdict is stale. Delete the DB
209
- // row so deriveState() returns phase: 'validating-milestone' once
210
- // the new slices complete, rather than advancing directly to
211
- // 'completing-milestone' with a stale needs-remediation verdict.
212
- const hasStructuralChanges =
213
- params.sliceChanges.added.length > 0 ||
214
- params.sliceChanges.modified.length > 0 ||
215
- params.sliceChanges.removed.length > 0;
216
-
217
- if (hasStructuralChanges) {
218
- deleteAssessmentByScope(params.milestoneId, "milestone-validation");
219
- }
220
203
  });
221
204
  } catch (err) {
222
205
  return { error: `db write failed: ${(err as Error).message}` };
@@ -235,25 +218,6 @@ export async function handleReassessRoadmap(
235
218
  completedSliceId: params.completedSliceId,
236
219
  });
237
220
 
238
- // ── Remove stale VALIDATION file from disk (#2957) ────────────
239
- const hasStructuralChanges =
240
- params.sliceChanges.added.length > 0 ||
241
- params.sliceChanges.modified.length > 0 ||
242
- params.sliceChanges.removed.length > 0;
243
-
244
- if (hasStructuralChanges) {
245
- const validationFile = join(
246
- basePath, ".gsd", "milestones", params.milestoneId,
247
- `${params.milestoneId}-VALIDATION.md`,
248
- );
249
- try {
250
- if (existsSync(validationFile)) unlinkSync(validationFile);
251
- } catch {
252
- // Best-effort: DB row is already deleted, so state derivation
253
- // will not see the file-based verdict as authoritative.
254
- }
255
- }
256
-
257
221
  // ── Invalidate caches ─────────────────────────────────────────
258
222
  invalidateStateCache();
259
223
  clearParseCache();
@@ -1,12 +1,8 @@
1
1
  /**
2
2
  * validate-milestone handler — the core operation behind gsd_validate_milestone.
3
3
  *
4
- * Persists milestone validation results to the assessments table and
5
- * quality_gates table, renders VALIDATION.md to disk, and invalidates caches.
6
- *
7
- * #2945 Bug 4: Previously only wrote to assessments — quality_gates records
8
- * were never persisted, causing M002+ milestones to have zero gate records
9
- * despite passing validation.
4
+ * Persists milestone validation results to the assessments table,
5
+ * renders VALIDATION.md to disk, and invalidates caches.
10
6
  */
11
7
 
12
8
  import { join } from "node:path";
@@ -15,13 +11,11 @@ import {
15
11
  transaction,
16
12
  insertAssessment,
17
13
  deleteAssessmentByScope,
18
- getMilestoneSlices,
19
14
  } from "../gsd-db.js";
20
15
  import { resolveMilestonePath, clearPathCache } from "../paths.js";
21
16
  import { saveFile, clearParseCache } from "../files.js";
22
17
  import { invalidateStateCache } from "../state.js";
23
18
  import { VALIDATION_VERDICTS, isValidMilestoneVerdict } from "../verdict-parser.js";
24
- import { insertMilestoneValidationGates } from "../milestone-validation-gates.js";
25
19
 
26
20
  export interface ValidateMilestoneParams {
27
21
  milestoneId: string;
@@ -118,18 +112,6 @@ export async function handleValidateMilestone(
118
112
  scope: 'milestone-validation',
119
113
  fullContent: validationMd,
120
114
  });
121
-
122
- // #2945 Bug 4: persist quality_gates records alongside the assessment.
123
- // Previously only the assessment was written, leaving M002+ milestones
124
- // with zero quality_gate records despite passing validation.
125
- const slices = getMilestoneSlices(params.milestoneId);
126
- const sliceId = slices.length > 0 ? slices[0].id : "_milestone";
127
- insertMilestoneValidationGates(
128
- params.milestoneId,
129
- sliceId,
130
- params.verdict,
131
- validatedAt,
132
- );
133
115
  });
134
116
 
135
117
  // ── Filesystem render (outside transaction) ────────────────────────────
@@ -22,7 +22,6 @@ import {
22
22
  loadActionableCaptures,
23
23
  markCaptureResolved,
24
24
  markCaptureExecuted,
25
- stampCaptureMilestone,
26
25
  } from "./captures.js";
27
26
 
28
27
  // ─── Resolution Executors ─────────────────────────────────────────────────────
@@ -272,15 +271,11 @@ export function buildQuickTaskPrompt(capture: CaptureEntry): string {
272
271
  ``,
273
272
  `## Instructions`,
274
273
  ``,
275
- `1. **Verify the issue still exists.** Before making any changes, inspect the`,
276
- ` relevant code to confirm the problem described above is actually present in`,
277
- ` the current codebase. If the issue has already been fixed (e.g., by planned`,
278
- ` milestone work), report "Already resolved no changes needed." and stop.`,
279
- `2. Execute this task as a small, self-contained change.`,
280
- `3. Do NOT modify any \`.gsd/\` plan files — this is a one-off, not a planned task.`,
281
- `4. Commit your changes with a descriptive message.`,
282
- `5. Keep changes minimal and focused on the capture text.`,
283
- `6. When done, say: "Quick task complete."`,
274
+ `1. Execute this task as a small, self-contained change.`,
275
+ `2. Do NOT modify any \`.gsd/\` plan files — this is a one-off, not a planned task.`,
276
+ `3. Commit your changes with a descriptive message.`,
277
+ `4. Keep changes minimal and focused on the capture text.`,
278
+ `5. When done, say: "Quick task complete."`,
284
279
  ].join("\n");
285
280
  }
286
281
 
@@ -329,19 +324,7 @@ export function executeTriageResolutions(
329
324
  actions: [],
330
325
  };
331
326
 
332
- const actionable = loadActionableCaptures(basePath, mid || undefined);
333
-
334
- // Reconciliation: stamp actionable captures that are missing the Milestone field
335
- // with the current milestone ID. This covers captures resolved by the triage LLM
336
- // before the prompt included the Milestone instruction, and acts as a safety net
337
- // when the LLM omits the field (#2872).
338
- if (mid) {
339
- for (const capture of actionable) {
340
- if (!capture.resolvedInMilestone) {
341
- stampCaptureMilestone(basePath, capture.id, mid);
342
- }
343
- }
344
- }
327
+ const actionable = loadActionableCaptures(basePath);
345
328
 
346
329
  // Also process deferred captures that target milestone IDs — create
347
330
  // milestone directories so deriveState() discovers them.
@@ -249,8 +249,6 @@ export interface GSDState {
249
249
  slices?: { done: number; total: number };
250
250
  tasks?: { done: number; total: number };
251
251
  };
252
- /** When phase=complete, holds the last completed milestone (instead of activeMilestone). */
253
- lastCompletedMilestone?: ActiveRef | null;
254
252
  }
255
253
 
256
254
  // ─── Post-Unit Hook Types ─────────────────────────────────────────────────
@@ -565,8 +563,8 @@ export interface CompleteSliceParams {
565
563
 
566
564
  // ─── Quality Gates ───────────────────────────────────────────────────────
567
565
 
568
- export type GateId = "Q3" | "Q4" | "Q5" | "Q6" | "Q7" | "Q8" | "MV01" | "MV02" | "MV03" | "MV04";
569
- export type GateScope = "slice" | "task" | "milestone";
566
+ export type GateId = "Q3" | "Q4" | "Q5" | "Q6" | "Q7" | "Q8";
567
+ export type GateScope = "slice" | "task";
570
568
  export type GateStatus = "pending" | "complete" | "omitted";
571
569
  export type GateVerdict = "pass" | "flag" | "omitted" | "";
572
570
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  import type { ExtensionCommandContext, ExtensionAPI } from "@gsd/pi-coding-agent";
7
7
  import { existsSync, readFileSync, writeFileSync, unlinkSync, readdirSync } from "node:fs";
8
- import { join, basename } from "node:path";
8
+ import { join } from "node:path";
9
9
  import { nativeRevertCommit, nativeRevertAbort } from "./native-git-bridge.js";
10
10
  import { parseUnitId } from "./unit-id.js";
11
11
  import { deriveState } from "./state.js";
@@ -133,7 +133,7 @@ export async function handleUndo(args: string, ctx: ExtensionCommandContext, _pi
133
133
  }
134
134
 
135
135
  ctx.ui.notify(results.join("\n"), "success");
136
- sendDesktopNotification("GSD", `Undone: ${unitType} (${unitId})`, "info", "complete", basename(basePath));
136
+ sendDesktopNotification("GSD", `Undone: ${unitType} (${unitId})`, "info", "complete");
137
137
  }
138
138
 
139
139
  // ─── Targeted State Reset ────────────────────────────────────────────────────