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
@@ -1,289 +0,0 @@
1
- /**
2
- * uat-stuck-loop-orphaned-worktree.test.ts — Regression tests for #2821.
3
- *
4
- * Reproduces two cascading bugs:
5
- *
6
- * Bug 1 — UAT stuck-loop: syncProjectRootToWorktree uses force:false for
7
- * milestone files. When the project root has an ASSESSMENT with a verdict
8
- * but the worktree has a stale/empty ASSESSMENT (or none at all after DB
9
- * rebuild), the verdict is NOT synced into the worktree. checkNeedsRunUat
10
- * finds no verdict → re-dispatches run-uat indefinitely.
11
- *
12
- * Bug 2 — Orphaned worktree: removeWorktree silently swallows failures when
13
- * git worktree remove fails (untracked files, CWD inside worktree, etc.).
14
- * The worktree directory and branch persist on disk after teardown.
15
- * teardownAutoWorktree has a fallback rmSync but it also fails when the
16
- * git internal .git/worktrees/<name> directory holds a lock.
17
- */
18
-
19
- import { describe, test, beforeEach, afterEach } from "node:test";
20
- import assert from "node:assert/strict";
21
- import {
22
- mkdtempSync,
23
- mkdirSync,
24
- writeFileSync,
25
- rmSync,
26
- existsSync,
27
- readFileSync,
28
- } from "node:fs";
29
- import { join } from "node:path";
30
- import { tmpdir } from "node:os";
31
- import { execFileSync } from "node:child_process";
32
-
33
- import { syncProjectRootToWorktree } from "../auto-worktree.ts";
34
- import {
35
- createWorktree,
36
- removeWorktree,
37
- worktreePath,
38
- } from "../worktree-manager.ts";
39
-
40
- function git(args: string[], cwd: string): string {
41
- return execFileSync("git", args, {
42
- cwd,
43
- stdio: ["ignore", "pipe", "pipe"],
44
- encoding: "utf-8",
45
- }).trim();
46
- }
47
-
48
- function makeBaseRepo(): string {
49
- const base = mkdtempSync(join(tmpdir(), "gsd-2821-"));
50
- git(["init", "-b", "main"], base);
51
- git(["config", "user.name", "Test"], base);
52
- git(["config", "user.email", "test@test.com"], base);
53
- writeFileSync(join(base, "README.md"), "# test\n");
54
- mkdirSync(join(base, ".gsd", "milestones", "M011"), { recursive: true });
55
- git(["add", "."], base);
56
- git(["commit", "-m", "init"], base);
57
- return base;
58
- }
59
-
60
- // ─── Bug 1: ASSESSMENT force-sync ─────────────────────────────────────────
61
-
62
- describe("#2821 Bug 1 — ASSESSMENT file force-synced on resume", () => {
63
- let mainBase: string;
64
- let wtBase: string;
65
-
66
- beforeEach(() => {
67
- mainBase = mkdtempSync(join(tmpdir(), "gsd-2821-main-"));
68
- wtBase = mkdtempSync(join(tmpdir(), "gsd-2821-wt-"));
69
- mkdirSync(join(mainBase, ".gsd", "milestones", "M011", "slices", "S01"), {
70
- recursive: true,
71
- });
72
- mkdirSync(join(wtBase, ".gsd", "milestones", "M011", "slices", "S01"), {
73
- recursive: true,
74
- });
75
- });
76
-
77
- afterEach(() => {
78
- rmSync(mainBase, { recursive: true, force: true });
79
- rmSync(wtBase, { recursive: true, force: true });
80
- });
81
-
82
- test("force-syncs ASSESSMENT with verdict from project root into worktree when worktree copy has no verdict", () => {
83
- // Project root has ASSESSMENT with a PASS verdict (written by run-uat, synced by post-unit)
84
- const prAssessment = join(
85
- mainBase,
86
- ".gsd",
87
- "milestones",
88
- "M011",
89
- "slices",
90
- "S01",
91
- "S01-ASSESSMENT.md",
92
- );
93
- writeFileSync(
94
- prAssessment,
95
- "---\nverdict: pass\n---\n# S01 Assessment\nAll tests pass.\n",
96
- );
97
-
98
- // Worktree has a stale ASSESSMENT with FAIL verdict (from the initial run-uat execution)
99
- const wtAssessment = join(
100
- wtBase,
101
- ".gsd",
102
- "milestones",
103
- "M011",
104
- "slices",
105
- "S01",
106
- "S01-ASSESSMENT.md",
107
- );
108
- writeFileSync(
109
- wtAssessment,
110
- "---\nverdict: fail\n---\n# S01 Assessment\nSome tests fail.\n",
111
- );
112
-
113
- syncProjectRootToWorktree(mainBase, wtBase, "M011");
114
-
115
- // The worktree ASSESSMENT must now have the project root's PASS verdict
116
- const content = readFileSync(wtAssessment, "utf-8");
117
- assert.ok(
118
- content.includes("verdict: pass"),
119
- `Expected worktree ASSESSMENT to have verdict:pass after sync, got: ${content.slice(0, 100)}`,
120
- );
121
- });
122
-
123
- test("force-syncs ASSESSMENT from project root when worktree has no ASSESSMENT at all", () => {
124
- // Project root has ASSESSMENT with verdict
125
- const prAssessment = join(
126
- mainBase,
127
- ".gsd",
128
- "milestones",
129
- "M011",
130
- "slices",
131
- "S01",
132
- "S01-ASSESSMENT.md",
133
- );
134
- writeFileSync(
135
- prAssessment,
136
- "---\nverdict: pass\n---\n# S01 Assessment\n",
137
- );
138
-
139
- // Worktree has NO ASSESSMENT (deleted during DB rebuild)
140
- // — file simply doesn't exist
141
-
142
- syncProjectRootToWorktree(mainBase, wtBase, "M011");
143
-
144
- const wtAssessment = join(
145
- wtBase,
146
- ".gsd",
147
- "milestones",
148
- "M011",
149
- "slices",
150
- "S01",
151
- "S01-ASSESSMENT.md",
152
- );
153
- assert.ok(
154
- existsSync(wtAssessment),
155
- "ASSESSMENT should be copied to worktree when missing",
156
- );
157
- const content = readFileSync(wtAssessment, "utf-8");
158
- assert.ok(
159
- content.includes("verdict: pass"),
160
- `Synced ASSESSMENT should contain verdict:pass, got: ${content.slice(0, 100)}`,
161
- );
162
- });
163
-
164
- test("does NOT overwrite worktree ASSESSMENT when project root has no verdict", () => {
165
- // Project root has ASSESSMENT without verdict (incomplete)
166
- const prAssessment = join(
167
- mainBase,
168
- ".gsd",
169
- "milestones",
170
- "M011",
171
- "slices",
172
- "S01",
173
- "S01-ASSESSMENT.md",
174
- );
175
- writeFileSync(prAssessment, "# S01 Assessment\nIn progress...\n");
176
-
177
- // Worktree has ASSESSMENT with verdict:fail
178
- const wtAssessment = join(
179
- wtBase,
180
- ".gsd",
181
- "milestones",
182
- "M011",
183
- "slices",
184
- "S01",
185
- "S01-ASSESSMENT.md",
186
- );
187
- writeFileSync(
188
- wtAssessment,
189
- "---\nverdict: fail\n---\n# S01 Assessment\nSome tests fail.\n",
190
- );
191
-
192
- syncProjectRootToWorktree(mainBase, wtBase, "M011");
193
-
194
- // Worktree copy should NOT be overwritten by the verdictless project root copy
195
- const content = readFileSync(wtAssessment, "utf-8");
196
- assert.ok(
197
- content.includes("verdict: fail"),
198
- `Worktree ASSESSMENT should keep verdict:fail when project root has no verdict, got: ${content.slice(0, 100)}`,
199
- );
200
- });
201
- });
202
-
203
- // ─── Bug 2: Orphaned worktree cleanup ─────────────────────────────────────
204
-
205
- describe("#2821 Bug 2 — removeWorktree cleans up despite untracked files", () => {
206
- let base: string;
207
-
208
- beforeEach(() => {
209
- base = makeBaseRepo();
210
- });
211
-
212
- afterEach(() => {
213
- rmSync(base, { recursive: true, force: true });
214
- });
215
-
216
- test("removes worktree directory even when it contains untracked files", () => {
217
- const info = createWorktree(base, "M011", {
218
- branch: "milestone/M011",
219
- });
220
-
221
- // Simulate run-uat writing untracked files (S01-UAT-RESULT.md, ASSESSMENT)
222
- mkdirSync(
223
- join(info.path, ".gsd", "milestones", "M011", "slices", "S01"),
224
- { recursive: true },
225
- );
226
- writeFileSync(
227
- join(
228
- info.path,
229
- ".gsd",
230
- "milestones",
231
- "M011",
232
- "slices",
233
- "S01",
234
- "S01-UAT-RESULT.md",
235
- ),
236
- "# UAT Result\nverdict: fail\n",
237
- );
238
- writeFileSync(
239
- join(
240
- info.path,
241
- ".gsd",
242
- "milestones",
243
- "M011",
244
- "slices",
245
- "S01",
246
- "S01-ASSESSMENT.md",
247
- ),
248
- "---\nverdict: fail\n---\n# Assessment\n",
249
- );
250
-
251
- removeWorktree(base, "M011", {
252
- branch: "milestone/M011",
253
- deleteBranch: true,
254
- force: true,
255
- });
256
-
257
- const wtDir = worktreePath(base, "M011");
258
- assert.ok(
259
- !existsSync(wtDir),
260
- `Worktree directory should be removed after teardown, but still exists at ${wtDir}`,
261
- );
262
- });
263
-
264
- test("removes git internal worktree metadata after filesystem removal", () => {
265
- createWorktree(base, "M011", {
266
- branch: "milestone/M011",
267
- });
268
-
269
- removeWorktree(base, "M011", {
270
- branch: "milestone/M011",
271
- deleteBranch: true,
272
- force: true,
273
- });
274
-
275
- // The git internal worktree directory should be cleaned up
276
- const gitInternalWorktreeDir = join(base, ".git", "worktrees", "M011");
277
- assert.ok(
278
- !existsSync(gitInternalWorktreeDir),
279
- `Git internal worktree dir should be removed: ${gitInternalWorktreeDir}`,
280
- );
281
-
282
- // The branch should be deleted
283
- const branches = git(["branch"], base);
284
- assert.ok(
285
- !branches.includes("milestone/M011"),
286
- "milestone/M011 branch should be deleted after removeWorktree",
287
- );
288
- });
289
- });
@@ -1,154 +0,0 @@
1
- import { describe, test } from 'node:test';
2
- import assert from 'node:assert/strict';
3
- import * as fs from 'node:fs';
4
- import * as path from 'node:path';
5
- import * as os from 'node:os';
6
- import { createRequire } from 'node:module';
7
- import {
8
- openDatabase,
9
- closeDatabase,
10
- isDbAvailable,
11
- _getAdapter,
12
- } from '../gsd-db.ts';
13
-
14
- const _require = createRequire(import.meta.url);
15
-
16
- // ═══════════════════════════════════════════════════════════════════════════
17
- // Helpers
18
- // ═══════════════════════════════════════════════════════════════════════════
19
-
20
- function tempDbPath(): string {
21
- const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-vacuum-test-'));
22
- return path.join(dir, 'test.db');
23
- }
24
-
25
- function cleanup(dbPath: string): void {
26
- closeDatabase();
27
- try {
28
- const dir = path.dirname(dbPath);
29
- for (const f of fs.readdirSync(dir)) {
30
- fs.unlinkSync(path.join(dir, f));
31
- }
32
- fs.rmdirSync(dir);
33
- } catch { /* best effort */ }
34
- }
35
-
36
- /**
37
- * Create a SQLite DB with a corrupt freelist that causes DDL to fail
38
- * with "database disk image is malformed" but is recoverable via VACUUM.
39
- *
40
- * Strategy:
41
- * 1. Create a DB with schema_version at v0 (so initSchema needs to run DDL)
42
- * 2. Add padding rows to create many pages, then delete + drop to free them
43
- * 3. Corrupt the freelist trunk pointer to point at a B-tree page
44
- *
45
- * This simulates the real-world scenario described in #2519: an interrupted
46
- * WAL checkpoint leaves the freelist in an inconsistent state.
47
- */
48
- function createCorruptFreelistDb(dbPath: string): void {
49
- // Use node:sqlite directly to build the minimal corrupt DB
50
- const sqlite = _require('node:sqlite');
51
- const db = new sqlite.DatabaseSync(dbPath);
52
- db.exec('PRAGMA journal_mode=WAL');
53
- db.exec('CREATE TABLE schema_version (version INTEGER NOT NULL, applied_at TEXT NOT NULL)');
54
- db.exec("INSERT INTO schema_version VALUES (0, '2024-01-01')");
55
- // Pad with data to create many pages, then free them
56
- db.exec('CREATE TABLE _padding (id INTEGER PRIMARY KEY, data TEXT)');
57
- for (let i = 0; i < 30; i++) {
58
- db.exec(`INSERT INTO _padding (data) VALUES ('${'x'.repeat(4000)}')`);
59
- }
60
- db.exec('DELETE FROM _padding');
61
- db.exec('DROP TABLE _padding');
62
- db.exec('PRAGMA wal_checkpoint(TRUNCATE)');
63
- db.close();
64
-
65
- // Remove WAL/SHM files to ensure clean file-only state
66
- try { fs.unlinkSync(dbPath + '-wal'); } catch { /* may not exist */ }
67
- try { fs.unlinkSync(dbPath + '-shm'); } catch { /* may not exist */ }
68
-
69
- // Corrupt: point freelist trunk (offset 32-35) to page 2 (a B-tree page),
70
- // and claim 10 free pages (offset 36-39)
71
- const fd = fs.openSync(dbPath, 'r+');
72
- try {
73
- const buf = Buffer.alloc(8);
74
- buf.writeUInt32BE(2, 0); // trunk page = page 2 (actually a B-tree page)
75
- buf.writeUInt32BE(10, 4); // freelist count = 10
76
- fs.writeSync(fd, buf, 0, 8, 32);
77
- } finally {
78
- fs.closeSync(fd);
79
- }
80
- }
81
-
82
- // ═══════════════════════════════════════════════════════════════════════════
83
- // Tests
84
- // ═══════════════════════════════════════════════════════════════════════════
85
-
86
- describe('openDatabase VACUUM recovery on corrupt freelist', () => {
87
-
88
- test('recovers a file-backed DB with corrupt freelist via VACUUM', () => {
89
- const dbPath = tempDbPath();
90
-
91
- // Create a DB with corrupt freelist (schema at v0 so initSchema runs DDL)
92
- createCorruptFreelistDb(dbPath);
93
-
94
- // Without the fix, this throws "database disk image is malformed".
95
- // With the fix, openDatabase detects "malformed", runs VACUUM, retries.
96
- const ok = openDatabase(dbPath);
97
- assert.ok(ok, 'openDatabase should succeed after VACUUM recovery');
98
- assert.ok(isDbAvailable(), 'DB should be available after recovery');
99
-
100
- // Verify full schema was applied
101
- const adapter = _getAdapter()!;
102
- const row = adapter.prepare(
103
- 'SELECT MAX(version) as version FROM schema_version',
104
- ).get();
105
- assert.ok(
106
- typeof row?.['version'] === 'number' && (row['version'] as number) > 0,
107
- 'schema_version should have a positive version after recovery',
108
- );
109
-
110
- cleanup(dbPath);
111
- });
112
-
113
- test('does not attempt VACUUM for non-malformed errors', () => {
114
- // openDatabase with :memory: never hits the fileBacked VACUUM path,
115
- // so non-malformed errors propagate directly. We verify by checking
116
- // that a non-file error from an in-memory DB propagates unchanged.
117
- // (In-memory DBs always succeed for initSchema, so this is a design
118
- // check — the VACUUM path is only for fileBacked = true.)
119
- const ok = openDatabase(':memory:');
120
- assert.ok(ok, 'in-memory DB should open fine');
121
- closeDatabase();
122
- });
123
-
124
- test('throws if VACUUM itself fails on unrecoverable corruption', () => {
125
- const dbPath = tempDbPath();
126
-
127
- // Create a file with valid SQLite header but thoroughly corrupt content
128
- const page = Buffer.alloc(4096);
129
- // SQLite magic: "SQLite format 3\0"
130
- page.write('SQLite format 3\0', 0, 'utf8');
131
- // Page size: 4096 (big-endian at offset 16)
132
- page.writeUInt16BE(4096, 16);
133
- page[18] = 1; // write version
134
- page[19] = 1; // read version
135
- page[20] = 0; // reserved space
136
- page[21] = 64; // max embedded payload fraction
137
- page[22] = 32; // min embedded payload fraction
138
- page[23] = 32; // leaf payload fraction
139
- page.writeUInt32BE(1, 28); // page_count = 1
140
- page.writeUInt32BE(999, 32); // corrupt freelist trunk
141
- page.writeUInt32BE(5, 36); // freelist count = 5
142
-
143
- fs.writeFileSync(dbPath, page);
144
-
145
- // Should throw — VACUUM cannot save a thoroughly corrupt file
146
- assert.throws(
147
- () => openDatabase(dbPath),
148
- /./,
149
- 'should throw for unrecoverable corruption',
150
- );
151
-
152
- cleanup(dbPath);
153
- });
154
- });
@@ -1,156 +0,0 @@
1
- /**
2
- * Tests for verdict-parser.ts — extraction, normalization, and schema validation.
3
- *
4
- * Regression tests for #2960: extractVerdict() must detect verdicts in both
5
- * YAML frontmatter and common markdown body patterns (LLM manual writes).
6
- */
7
-
8
- import { describe, it } from "node:test";
9
- import assert from "node:assert/strict";
10
- import {
11
- extractVerdict,
12
- hasVerdict,
13
- isAcceptableUatVerdict,
14
- isValidMilestoneVerdict,
15
- } from "../verdict-parser.ts";
16
-
17
- // ── extractVerdict ──────────────────────────────────────────────────────────
18
-
19
- describe("extractVerdict", () => {
20
- it("extracts verdict from YAML frontmatter", () => {
21
- const content = "---\nverdict: pass\n---\n\n# Validation";
22
- assert.equal(extractVerdict(content), "pass");
23
- });
24
-
25
- it("normalizes 'passed' to 'pass' in frontmatter", () => {
26
- const content = "---\nverdict: passed\n---\n";
27
- assert.equal(extractVerdict(content), "pass");
28
- });
29
-
30
- it("extracts case-insensitive verdict from frontmatter", () => {
31
- const content = "---\nVerdict: PASS\n---\n";
32
- assert.equal(extractVerdict(content), "pass");
33
- });
34
-
35
- it("extracts needs-remediation from frontmatter", () => {
36
- const content = "---\nverdict: needs-remediation\n---\n";
37
- assert.equal(extractVerdict(content), "needs-remediation");
38
- });
39
-
40
- it("returns undefined when content has no frontmatter and no markdown verdict", () => {
41
- const content = "# Just a heading\n\nSome text without any verdict.";
42
- assert.equal(extractVerdict(content), undefined);
43
- });
44
-
45
- // ── Regression: #2960 — markdown body verdicts ─────────────────────────
46
-
47
- it("detects **Verdict:** PASS in markdown body (#2960)", () => {
48
- const content = [
49
- "# M013 — Milestone Validation",
50
- "",
51
- "**Verdict:** PASS",
52
- "",
53
- "All slices completed successfully.",
54
- ].join("\n");
55
- assert.equal(extractVerdict(content), "pass");
56
- });
57
-
58
- it("detects **Verdict:** with emoji prefix in markdown body (#2960)", () => {
59
- const content = [
60
- "# Milestone Validation",
61
- "",
62
- "**Verdict:** ✅ PASS",
63
- "",
64
- "Everything looks good.",
65
- ].join("\n");
66
- assert.equal(extractVerdict(content), "pass");
67
- });
68
-
69
- it("detects **Verdict:** needs-remediation in markdown body (#2960)", () => {
70
- const content = [
71
- "# Milestone Validation",
72
- "",
73
- "**Verdict:** needs-remediation",
74
- "",
75
- "Several issues found.",
76
- ].join("\n");
77
- assert.equal(extractVerdict(content), "needs-remediation");
78
- });
79
-
80
- it("normalizes 'passed' to 'pass' in markdown body (#2960)", () => {
81
- const content = "# Validation\n\n**Verdict:** Passed\n";
82
- assert.equal(extractVerdict(content), "pass");
83
- });
84
-
85
- it("detects verdict without colon in bold pattern (#2960)", () => {
86
- const content = "# Validation\n\n**Verdict** PASS\n";
87
- assert.equal(extractVerdict(content), "pass");
88
- });
89
-
90
- it("prefers frontmatter verdict over markdown body", () => {
91
- const content = [
92
- "---",
93
- "verdict: needs-remediation",
94
- "---",
95
- "",
96
- "**Verdict:** PASS",
97
- ].join("\n");
98
- assert.equal(extractVerdict(content), "needs-remediation");
99
- });
100
- });
101
-
102
- // ── hasVerdict ────────────────────────────────────────────────────────────
103
-
104
- describe("hasVerdict", () => {
105
- it("returns true when verdict field exists", () => {
106
- assert.equal(hasVerdict("verdict: pass"), true);
107
- });
108
-
109
- it("returns false when no verdict field exists", () => {
110
- assert.equal(hasVerdict("# Just a heading"), false);
111
- });
112
- });
113
-
114
- // ── isAcceptableUatVerdict ───────────────────────────────────────────────
115
-
116
- describe("isAcceptableUatVerdict", () => {
117
- it("accepts pass verdict", () => {
118
- assert.equal(isAcceptableUatVerdict("pass", undefined), true);
119
- });
120
-
121
- it("accepts passed verdict", () => {
122
- assert.equal(isAcceptableUatVerdict("passed", undefined), true);
123
- });
124
-
125
- it("rejects fail verdict", () => {
126
- assert.equal(isAcceptableUatVerdict("fail", undefined), false);
127
- });
128
-
129
- it("accepts partial for mixed UAT type", () => {
130
- assert.equal(isAcceptableUatVerdict("partial", "mixed"), true);
131
- });
132
-
133
- it("rejects partial for artifact-driven UAT type", () => {
134
- assert.equal(isAcceptableUatVerdict("partial", "artifact-driven"), false);
135
- });
136
- });
137
-
138
- // ── isValidMilestoneVerdict ──────────────────────────────────────────────
139
-
140
- describe("isValidMilestoneVerdict", () => {
141
- it("accepts pass", () => {
142
- assert.equal(isValidMilestoneVerdict("pass"), true);
143
- });
144
-
145
- it("accepts needs-attention", () => {
146
- assert.equal(isValidMilestoneVerdict("needs-attention"), true);
147
- });
148
-
149
- it("accepts needs-remediation", () => {
150
- assert.equal(isValidMilestoneVerdict("needs-remediation"), true);
151
- });
152
-
153
- it("rejects unknown verdict", () => {
154
- assert.equal(isValidMilestoneVerdict("fail"), false);
155
- });
156
- });
@@ -1,82 +0,0 @@
1
- /**
2
- * Regression test for #2931: completing-milestone gate should treat
3
- * "None required", "N/A", "Not applicable", etc. as equivalent to "none"
4
- * and skip the operational verification content check entirely.
5
- */
6
- import { test } from "node:test";
7
- import assert from "node:assert/strict";
8
-
9
- import { isVerificationNotApplicable } from "../auto-dispatch.ts";
10
-
11
- test("isVerificationNotApplicable: bare 'none' is not applicable", () => {
12
- assert.equal(isVerificationNotApplicable("none"), true);
13
- });
14
-
15
- test("isVerificationNotApplicable: 'None' (capitalized) is not applicable", () => {
16
- assert.equal(isVerificationNotApplicable("None"), true);
17
- });
18
-
19
- test("isVerificationNotApplicable: 'NONE' (uppercase) is not applicable", () => {
20
- assert.equal(isVerificationNotApplicable("NONE"), true);
21
- });
22
-
23
- test("isVerificationNotApplicable: 'None required' is not applicable (#2931)", () => {
24
- assert.equal(isVerificationNotApplicable("None required"), true);
25
- });
26
-
27
- test("isVerificationNotApplicable: 'None needed' is not applicable", () => {
28
- assert.equal(isVerificationNotApplicable("None needed"), true);
29
- });
30
-
31
- test("isVerificationNotApplicable: 'None planned' is not applicable", () => {
32
- assert.equal(isVerificationNotApplicable("None planned"), true);
33
- });
34
-
35
- test("isVerificationNotApplicable: 'N/A' is not applicable", () => {
36
- assert.equal(isVerificationNotApplicable("N/A"), true);
37
- });
38
-
39
- test("isVerificationNotApplicable: 'n/a' is not applicable", () => {
40
- assert.equal(isVerificationNotApplicable("n/a"), true);
41
- });
42
-
43
- test("isVerificationNotApplicable: 'Not applicable' is not applicable", () => {
44
- assert.equal(isVerificationNotApplicable("Not applicable"), true);
45
- });
46
-
47
- test("isVerificationNotApplicable: 'Not required' is not applicable", () => {
48
- assert.equal(isVerificationNotApplicable("Not required"), true);
49
- });
50
-
51
- test("isVerificationNotApplicable: 'Not needed' is not applicable", () => {
52
- assert.equal(isVerificationNotApplicable("Not needed"), true);
53
- });
54
-
55
- test("isVerificationNotApplicable: 'No operational verification needed' is not applicable", () => {
56
- assert.equal(isVerificationNotApplicable("No operational verification needed"), true);
57
- });
58
-
59
- test("isVerificationNotApplicable: 'No operational' is not applicable", () => {
60
- assert.equal(isVerificationNotApplicable("No operational"), true);
61
- });
62
-
63
- test("isVerificationNotApplicable: empty string is not applicable", () => {
64
- assert.equal(isVerificationNotApplicable(""), true);
65
- });
66
-
67
- test("isVerificationNotApplicable: whitespace-only is not applicable", () => {
68
- assert.equal(isVerificationNotApplicable(" "), true);
69
- });
70
-
71
- // Positive cases: these SHOULD require verification
72
- test("isVerificationNotApplicable: 'Run load tests' requires verification", () => {
73
- assert.equal(isVerificationNotApplicable("Run load tests"), false);
74
- });
75
-
76
- test("isVerificationNotApplicable: 'Verify API response times under load' requires verification", () => {
77
- assert.equal(isVerificationNotApplicable("Verify API response times under load"), false);
78
- });
79
-
80
- test("isVerificationNotApplicable: 'Monitor error rates for 24h' requires verification", () => {
81
- assert.equal(isVerificationNotApplicable("Monitor error rates for 24h"), false);
82
- });