gsd-pi 2.82.0-dev.ed17d078d → 3.0.0-dev.8b8d129d7

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 (562) hide show
  1. package/README.md +93 -18
  2. package/dist/cli.js +20 -9
  3. package/dist/headless.js +9 -2
  4. package/dist/resources/.managed-resources-content-hash +1 -1
  5. package/dist/resources/GSD-WORKFLOW.md +10 -1
  6. package/dist/resources/extensions/claude-code-cli/partial-builder.js +2 -1
  7. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +44 -6
  8. package/dist/resources/extensions/cmux/index.js +5 -0
  9. package/dist/resources/extensions/gsd/auto/infra-errors.js +9 -3
  10. package/dist/resources/extensions/gsd/auto/loop.js +110 -37
  11. package/dist/resources/extensions/gsd/auto/orchestrator.js +12 -1
  12. package/dist/resources/extensions/gsd/auto/phases.js +97 -38
  13. package/dist/resources/extensions/gsd/auto/session.js +6 -0
  14. package/dist/resources/extensions/gsd/auto/workflow-kernel.js +3 -0
  15. package/dist/resources/extensions/gsd/auto/workflow-memory-pressure.js +12 -0
  16. package/dist/resources/extensions/gsd/auto-dashboard.js +66 -1
  17. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +1 -0
  18. package/dist/resources/extensions/gsd/auto-dispatch.js +20 -19
  19. package/dist/resources/extensions/gsd/auto-model-selection.js +2 -0
  20. package/dist/resources/extensions/gsd/auto-post-unit.js +278 -137
  21. package/dist/resources/extensions/gsd/auto-prompts.js +36 -10
  22. package/dist/resources/extensions/gsd/auto-recovery.js +79 -14
  23. package/dist/resources/extensions/gsd/auto-start.js +87 -14
  24. package/dist/resources/extensions/gsd/auto-timers.js +11 -3
  25. package/dist/resources/extensions/gsd/auto-verification.js +102 -34
  26. package/dist/resources/extensions/gsd/auto-worktree.js +178 -11
  27. package/dist/resources/extensions/gsd/auto.js +98 -54
  28. package/dist/resources/extensions/gsd/bootstrap/agent-end-recovery.js +31 -7
  29. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +10 -9
  30. package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +5 -4
  31. package/dist/resources/extensions/gsd/bootstrap/subagent-input.js +21 -9
  32. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +24 -9
  33. package/dist/resources/extensions/gsd/clean-root-preflight.js +170 -8
  34. package/dist/resources/extensions/gsd/commands/catalog.js +10 -1
  35. package/dist/resources/extensions/gsd/commands/handlers/core.js +38 -0
  36. package/dist/resources/extensions/gsd/commands/handlers/ops.js +20 -0
  37. package/dist/resources/extensions/gsd/commands-bootstrap.js +5 -0
  38. package/dist/resources/extensions/gsd/commands-handlers.js +2 -0
  39. package/dist/resources/extensions/gsd/commands-mcp-status.js +9 -0
  40. package/dist/resources/extensions/gsd/commands-prefs-wizard.js +7 -2
  41. package/dist/resources/extensions/gsd/commands-verdict.js +139 -0
  42. package/dist/resources/extensions/gsd/crash-recovery.js +43 -5
  43. package/dist/resources/extensions/gsd/db/milestone-leases.js +24 -0
  44. package/dist/resources/extensions/gsd/db/unit-dispatches.js +3 -2
  45. package/dist/resources/extensions/gsd/db-base-schema.js +2 -0
  46. package/dist/resources/extensions/gsd/db-migration-steps.js +4 -0
  47. package/dist/resources/extensions/gsd/db-task-slice-rows.js +2 -0
  48. package/dist/resources/extensions/gsd/dispatch-guard.js +46 -2
  49. package/dist/resources/extensions/gsd/docs/preferences-reference.md +8 -0
  50. package/dist/resources/extensions/gsd/doctor-git-checks.js +46 -1
  51. package/dist/resources/extensions/gsd/doctor-runtime-checks.js +28 -11
  52. package/dist/resources/extensions/gsd/doctor.js +2 -28
  53. package/dist/resources/extensions/gsd/export-html.js +27 -425
  54. package/dist/resources/extensions/gsd/forensics.js +8 -3
  55. package/dist/resources/extensions/gsd/git-service.js +138 -10
  56. package/dist/resources/extensions/gsd/gsd-db.js +76 -33
  57. package/dist/resources/extensions/gsd/guided-flow-queue.js +4 -3
  58. package/dist/resources/extensions/gsd/guided-flow.js +110 -117
  59. package/dist/resources/extensions/gsd/guided-unit-context.js +23 -0
  60. package/dist/resources/extensions/gsd/init-wizard.js +17 -2
  61. package/dist/resources/extensions/gsd/markdown-renderer.js +10 -8
  62. package/dist/resources/extensions/gsd/mcp-filter.js +58 -0
  63. package/dist/resources/extensions/gsd/migrate/parsers.js +10 -0
  64. package/dist/resources/extensions/gsd/migration-auto-check.js +12 -17
  65. package/dist/resources/extensions/gsd/milestone-actions.js +11 -4
  66. package/dist/resources/extensions/gsd/native-git-bridge.js +57 -14
  67. package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -0
  68. package/dist/resources/extensions/gsd/paths.js +4 -0
  69. package/dist/resources/extensions/gsd/pending-auto-start.js +52 -0
  70. package/dist/resources/extensions/gsd/planning-path-scope.js +9 -3
  71. package/dist/resources/extensions/gsd/post-execution-checks.js +73 -9
  72. package/dist/resources/extensions/gsd/pre-execution-checks.js +38 -11
  73. package/dist/resources/extensions/gsd/preferences-mcp.js +19 -0
  74. package/dist/resources/extensions/gsd/preferences-types.js +2 -0
  75. package/dist/resources/extensions/gsd/preferences-validation.js +138 -0
  76. package/dist/resources/extensions/gsd/preferences.js +2 -0
  77. package/dist/resources/extensions/gsd/prompt-loader.js +1 -1
  78. package/dist/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  79. package/dist/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  80. package/dist/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
  81. package/dist/resources/extensions/gsd/prompts/discuss.md +9 -9
  82. package/dist/resources/extensions/gsd/prompts/forensics.md +3 -3
  83. package/dist/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
  84. package/dist/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
  85. package/dist/resources/extensions/gsd/prompts/plan-slice.md +4 -4
  86. package/dist/resources/extensions/gsd/prompts/queue.md +4 -4
  87. package/dist/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
  88. package/dist/resources/extensions/gsd/prompts/refine-slice.md +2 -2
  89. package/dist/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  90. package/dist/resources/extensions/gsd/queue-reorder-ui.js +30 -13
  91. package/dist/resources/extensions/gsd/repository-registry.js +44 -0
  92. package/dist/resources/extensions/gsd/safety/evidence-collector.js +2 -0
  93. package/dist/resources/extensions/gsd/safety/evidence-cross-ref.js +42 -18
  94. package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +59 -2
  95. package/dist/resources/extensions/gsd/smart-entry-routing.js +36 -0
  96. package/dist/resources/extensions/gsd/state-reconciliation/drift/merge-state.js +6 -1
  97. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +9 -14
  98. package/dist/resources/extensions/gsd/state-reconciliation/drift/roadmap.js +19 -24
  99. package/dist/resources/extensions/gsd/state.js +14 -4
  100. package/dist/resources/extensions/gsd/status-guards.js +14 -2
  101. package/dist/resources/extensions/gsd/templates/plan.md +9 -5
  102. package/dist/resources/extensions/gsd/templates/task-plan.md +10 -2
  103. package/dist/resources/extensions/gsd/tools/complete-milestone.js +6 -8
  104. package/dist/resources/extensions/gsd/tools/complete-slice.js +6 -8
  105. package/dist/resources/extensions/gsd/tools/plan-milestone.js +7 -1
  106. package/dist/resources/extensions/gsd/tools/plan-slice.js +151 -15
  107. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +119 -0
  108. package/dist/resources/extensions/gsd/unit-context-manifest.js +36 -17
  109. package/dist/resources/extensions/gsd/validation.js +23 -1
  110. package/dist/resources/extensions/gsd/verification-gate.js +142 -7
  111. package/dist/resources/extensions/gsd/verification-verdict.js +26 -0
  112. package/dist/resources/extensions/gsd/workflow-manifest.js +2 -0
  113. package/dist/resources/extensions/gsd/workflow-mcp.js +17 -1
  114. package/dist/resources/extensions/gsd/workflow-projections.js +6 -8
  115. package/dist/resources/extensions/gsd/worktree-lifecycle.js +54 -10
  116. package/dist/resources/extensions/gsd/worktree-manager.js +1 -1
  117. package/dist/resources/extensions/gsd/worktree-state-projection.js +31 -0
  118. package/dist/resources/extensions/shared/html-shell.js +388 -0
  119. package/dist/resources/extensions/shared/interview-ui.js +6 -4
  120. package/dist/resources/extensions/subagent/index.js +448 -78
  121. package/dist/resources/extensions/subagent/launch.js +77 -0
  122. package/dist/resources/extensions/subagent/run-store.js +148 -0
  123. package/dist/resources/extensions/ttsr/ttsr-manager.js +3 -1
  124. package/dist/resources/extensions/visual-brief/artifact-policy.js +29 -0
  125. package/dist/resources/extensions/visual-brief/extension-manifest.json +8 -0
  126. package/dist/resources/extensions/visual-brief/index.js +5 -0
  127. package/dist/resources/extensions/visual-brief/page-contract.js +124 -0
  128. package/dist/resources/extensions/visual-brief/prompts.js +140 -0
  129. package/dist/resources/skills/forensics/SKILL.md +1 -1
  130. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  131. package/dist/web/standalone/.next/BUILD_ID +1 -1
  132. package/dist/web/standalone/.next/app-path-routes-manifest.json +9 -9
  133. package/dist/web/standalone/.next/build-manifest.json +3 -3
  134. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  135. package/dist/web/standalone/.next/react-loadable-manifest.json +5 -5
  136. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  137. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  138. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  139. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  140. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  141. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  142. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  143. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  144. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  145. package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
  146. package/dist/web/standalone/.next/server/app/_not-found/page.js.nft.json +1 -1
  147. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  148. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  149. package/dist/web/standalone/.next/server/app/_not-found.rsc +4 -7
  150. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +4 -7
  151. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  152. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +4 -5
  153. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  154. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  155. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -5
  156. package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
  157. package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
  158. package/dist/web/standalone/.next/server/app/index.html +1 -1
  159. package/dist/web/standalone/.next/server/app/index.rsc +4 -7
  160. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  161. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -7
  162. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  163. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +4 -5
  164. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +2 -5
  165. package/dist/web/standalone/.next/server/app/page.js +2 -2
  166. package/dist/web/standalone/.next/server/app/page.js.nft.json +1 -1
  167. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  168. package/dist/web/standalone/.next/server/app-paths-manifest.json +9 -9
  169. package/dist/web/standalone/.next/server/chunks/4266.js +2 -0
  170. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  171. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  172. package/dist/web/standalone/.next/server/next-font-manifest.js +1 -1
  173. package/dist/web/standalone/.next/server/next-font-manifest.json +1 -1
  174. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  175. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  176. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  177. package/dist/web/standalone/.next/static/chunks/2973.33f26573894b6153.js +2 -0
  178. package/dist/web/standalone/.next/static/chunks/8359.65b24fac92188a6b.js +10 -0
  179. package/dist/web/standalone/.next/static/chunks/9441.ff70bb53f6835771.js +1 -0
  180. package/dist/web/standalone/.next/static/chunks/app/layout-8c10ec293ae0f1d5.js +1 -0
  181. package/dist/web/standalone/.next/static/chunks/{webpack-de742b64187e13fe.js → webpack-855d616060cb6e59.js} +1 -1
  182. package/dist/web/standalone/.next/static/css/746ee28c929d1880.css +1 -0
  183. package/package.json +4 -4
  184. package/packages/contracts/dist/rpc.test.js +7 -0
  185. package/packages/contracts/dist/rpc.test.js.map +1 -1
  186. package/packages/contracts/dist/workflow.d.ts +21 -0
  187. package/packages/contracts/dist/workflow.d.ts.map +1 -1
  188. package/packages/contracts/dist/workflow.js +24 -0
  189. package/packages/contracts/dist/workflow.js.map +1 -1
  190. package/packages/contracts/src/rpc.test.ts +8 -0
  191. package/packages/contracts/src/workflow.ts +24 -0
  192. package/packages/daemon/package.json +2 -2
  193. package/packages/mcp-server/README.md +13 -4
  194. package/packages/mcp-server/dist/workflow-tools.d.ts +0 -3
  195. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -1
  196. package/packages/mcp-server/dist/workflow-tools.js +80 -0
  197. package/packages/mcp-server/dist/workflow-tools.js.map +1 -1
  198. package/packages/mcp-server/package.json +2 -2
  199. package/packages/mcp-server/src/workflow-tools.test.ts +23 -1
  200. package/packages/mcp-server/src/workflow-tools.ts +168 -0
  201. package/packages/mcp-server/tsconfig.tsbuildinfo +1 -1
  202. package/packages/native/package.json +1 -1
  203. package/packages/native/tsconfig.json +2 -1
  204. package/packages/native/tsconfig.tsbuildinfo +1 -1
  205. package/packages/pi-agent-core/package.json +1 -1
  206. package/packages/pi-ai/dist/providers/google-gemini-cli.d.ts.map +1 -1
  207. package/packages/pi-ai/dist/providers/google-gemini-cli.js +5 -0
  208. package/packages/pi-ai/dist/providers/google-gemini-cli.js.map +1 -1
  209. package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts +2 -0
  210. package/packages/pi-ai/dist/providers/google-gemini-cli.test.d.ts.map +1 -0
  211. package/packages/pi-ai/dist/providers/google-gemini-cli.test.js +41 -0
  212. package/packages/pi-ai/dist/providers/google-gemini-cli.test.js.map +1 -0
  213. package/packages/pi-ai/dist/providers/openai-codex-responses.d.ts.map +1 -1
  214. package/packages/pi-ai/dist/providers/openai-codex-responses.js +82 -1
  215. package/packages/pi-ai/dist/providers/openai-codex-responses.js.map +1 -1
  216. package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts +2 -0
  217. package/packages/pi-ai/dist/providers/openai-codex-responses.test.d.ts.map +1 -0
  218. package/packages/pi-ai/dist/providers/openai-codex-responses.test.js +52 -0
  219. package/packages/pi-ai/dist/providers/openai-codex-responses.test.js.map +1 -0
  220. package/packages/pi-ai/dist/providers/simple-options.d.ts +2 -4
  221. package/packages/pi-ai/dist/providers/simple-options.d.ts.map +1 -1
  222. package/packages/pi-ai/dist/providers/simple-options.js +5 -6
  223. package/packages/pi-ai/dist/providers/simple-options.js.map +1 -1
  224. package/packages/pi-ai/dist/providers/simple-options.test.d.ts +2 -0
  225. package/packages/pi-ai/dist/providers/simple-options.test.d.ts.map +1 -0
  226. package/packages/pi-ai/dist/providers/simple-options.test.js +50 -0
  227. package/packages/pi-ai/dist/providers/simple-options.test.js.map +1 -0
  228. package/packages/pi-ai/package.json +1 -1
  229. package/packages/pi-ai/src/providers/google-gemini-cli.test.ts +49 -0
  230. package/packages/pi-ai/src/providers/google-gemini-cli.ts +7 -0
  231. package/packages/pi-ai/src/providers/openai-codex-responses.test.ts +63 -0
  232. package/packages/pi-ai/src/providers/openai-codex-responses.ts +91 -1
  233. package/packages/pi-ai/src/providers/simple-options.test.ts +60 -0
  234. package/packages/pi-ai/src/providers/simple-options.ts +5 -6
  235. package/packages/pi-ai/tsconfig.tsbuildinfo +1 -1
  236. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts +2 -0
  237. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.d.ts.map +1 -0
  238. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js +66 -0
  239. package/packages/pi-coding-agent/dist/core/agent-session-thinking-level.test.js.map +1 -0
  240. package/packages/pi-coding-agent/dist/core/agent-session.js +1 -1
  241. package/packages/pi-coding-agent/dist/core/agent-session.js.map +1 -1
  242. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js +44 -3
  243. package/packages/pi-coding-agent/dist/core/chat-controller-ordering.test.js.map +1 -1
  244. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts +6 -1
  245. package/packages/pi-coding-agent/dist/core/compaction/compaction.d.ts.map +1 -1
  246. package/packages/pi-coding-agent/dist/core/compaction/compaction.js +7 -2
  247. package/packages/pi-coding-agent/dist/core/compaction/compaction.js.map +1 -1
  248. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js +14 -1
  249. package/packages/pi-coding-agent/dist/core/compaction/compaction.test.js.map +1 -1
  250. package/packages/pi-coding-agent/dist/core/sdk.js +1 -1
  251. package/packages/pi-coding-agent/dist/core/sdk.js.map +1 -1
  252. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.d.ts.map +1 -1
  253. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js +24 -6
  254. package/packages/pi-coding-agent/dist/modes/interactive/components/footer.js.map +1 -1
  255. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  256. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +71 -97
  257. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  258. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +7 -7
  259. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  260. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js +11 -0
  261. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.test.js.map +1 -1
  262. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js +25 -1
  263. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode-ordering.test.js.map +1 -1
  264. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +2 -0
  265. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  266. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +24 -10
  267. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  268. package/packages/pi-coding-agent/package.json +1 -1
  269. package/packages/pi-coding-agent/src/core/agent-session-thinking-level.test.ts +79 -0
  270. package/packages/pi-coding-agent/src/core/agent-session.ts +1 -1
  271. package/packages/pi-coding-agent/src/core/chat-controller-ordering.test.ts +53 -3
  272. package/packages/pi-coding-agent/src/core/compaction/compaction.test.ts +23 -1
  273. package/packages/pi-coding-agent/src/core/compaction/compaction.ts +7 -2
  274. package/packages/pi-coding-agent/src/core/sdk.ts +1 -1
  275. package/packages/pi-coding-agent/src/modes/interactive/components/footer.ts +23 -7
  276. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +75 -102
  277. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.test.ts +15 -1
  278. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +9 -9
  279. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode-ordering.test.ts +30 -1
  280. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +29 -10
  281. package/packages/pi-coding-agent/tsconfig.tsbuildinfo +1 -1
  282. package/packages/pi-tui/dist/__tests__/terminal.test.d.ts +2 -0
  283. package/packages/pi-tui/dist/__tests__/terminal.test.d.ts.map +1 -0
  284. package/packages/pi-tui/dist/__tests__/terminal.test.js +103 -0
  285. package/packages/pi-tui/dist/__tests__/terminal.test.js.map +1 -0
  286. package/packages/pi-tui/dist/__tests__/tui.test.js +45 -2
  287. package/packages/pi-tui/dist/__tests__/tui.test.js.map +1 -1
  288. package/packages/pi-tui/dist/terminal.d.ts +2 -0
  289. package/packages/pi-tui/dist/terminal.d.ts.map +1 -1
  290. package/packages/pi-tui/dist/terminal.js +12 -0
  291. package/packages/pi-tui/dist/terminal.js.map +1 -1
  292. package/packages/pi-tui/dist/tui.d.ts.map +1 -1
  293. package/packages/pi-tui/dist/tui.js +106 -27
  294. package/packages/pi-tui/dist/tui.js.map +1 -1
  295. package/packages/pi-tui/package.json +1 -1
  296. package/packages/pi-tui/src/__tests__/terminal.test.ts +121 -0
  297. package/packages/pi-tui/src/__tests__/tui.test.ts +59 -2
  298. package/packages/pi-tui/src/terminal.ts +11 -0
  299. package/packages/pi-tui/src/tui.ts +108 -27
  300. package/packages/pi-tui/tsconfig.tsbuildinfo +1 -1
  301. package/packages/rpc-client/package.json +1 -1
  302. package/packages/rpc-client/tsconfig.tsbuildinfo +1 -1
  303. package/pkg/package.json +1 -1
  304. package/src/resources/GSD-WORKFLOW.md +10 -1
  305. package/src/resources/extensions/claude-code-cli/partial-builder.ts +2 -1
  306. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +52 -6
  307. package/src/resources/extensions/claude-code-cli/tests/partial-builder.test.ts +19 -2
  308. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +49 -2
  309. package/src/resources/extensions/cmux/index.ts +6 -0
  310. package/src/resources/extensions/gsd/auto/contracts.ts +17 -6
  311. package/src/resources/extensions/gsd/auto/infra-errors.ts +9 -3
  312. package/src/resources/extensions/gsd/auto/loop.ts +111 -38
  313. package/src/resources/extensions/gsd/auto/orchestrator.ts +12 -1
  314. package/src/resources/extensions/gsd/auto/phases.ts +115 -49
  315. package/src/resources/extensions/gsd/auto/session.ts +16 -0
  316. package/src/resources/extensions/gsd/auto/types.ts +3 -0
  317. package/src/resources/extensions/gsd/auto/workflow-kernel.ts +5 -1
  318. package/src/resources/extensions/gsd/auto/workflow-memory-pressure.ts +13 -0
  319. package/src/resources/extensions/gsd/auto-dashboard.ts +72 -1
  320. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +1 -0
  321. package/src/resources/extensions/gsd/auto-dispatch.ts +21 -19
  322. package/src/resources/extensions/gsd/auto-model-selection.ts +2 -1
  323. package/src/resources/extensions/gsd/auto-post-unit.ts +312 -148
  324. package/src/resources/extensions/gsd/auto-prompts.ts +36 -13
  325. package/src/resources/extensions/gsd/auto-recovery.ts +83 -11
  326. package/src/resources/extensions/gsd/auto-start.ts +94 -12
  327. package/src/resources/extensions/gsd/auto-timers.ts +10 -3
  328. package/src/resources/extensions/gsd/auto-verification.ts +124 -42
  329. package/src/resources/extensions/gsd/auto-worktree.ts +195 -11
  330. package/src/resources/extensions/gsd/auto.ts +91 -42
  331. package/src/resources/extensions/gsd/bootstrap/agent-end-recovery.ts +42 -7
  332. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +10 -9
  333. package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +5 -4
  334. package/src/resources/extensions/gsd/bootstrap/subagent-input.ts +19 -7
  335. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +27 -10
  336. package/src/resources/extensions/gsd/clean-root-preflight.ts +174 -8
  337. package/src/resources/extensions/gsd/commands/catalog.ts +10 -1
  338. package/src/resources/extensions/gsd/commands/handlers/core.ts +41 -0
  339. package/src/resources/extensions/gsd/commands/handlers/ops.ts +21 -0
  340. package/src/resources/extensions/gsd/commands-bootstrap.ts +10 -0
  341. package/src/resources/extensions/gsd/commands-handlers.ts +2 -0
  342. package/src/resources/extensions/gsd/commands-mcp-status.ts +8 -0
  343. package/src/resources/extensions/gsd/commands-prefs-wizard.ts +8 -3
  344. package/src/resources/extensions/gsd/commands-verdict.ts +202 -0
  345. package/src/resources/extensions/gsd/crash-recovery.ts +44 -4
  346. package/src/resources/extensions/gsd/db/milestone-leases.ts +26 -0
  347. package/src/resources/extensions/gsd/db/unit-dispatches.ts +4 -3
  348. package/src/resources/extensions/gsd/db-base-schema.ts +2 -0
  349. package/src/resources/extensions/gsd/db-migration-steps.ts +5 -0
  350. package/src/resources/extensions/gsd/db-task-slice-rows.ts +4 -0
  351. package/src/resources/extensions/gsd/dispatch-guard.ts +60 -2
  352. package/src/resources/extensions/gsd/docs/preferences-reference.md +8 -0
  353. package/src/resources/extensions/gsd/doctor-git-checks.ts +45 -1
  354. package/src/resources/extensions/gsd/doctor-runtime-checks.ts +25 -13
  355. package/src/resources/extensions/gsd/doctor-types.ts +1 -0
  356. package/src/resources/extensions/gsd/doctor.ts +2 -27
  357. package/src/resources/extensions/gsd/export-html.ts +27 -427
  358. package/src/resources/extensions/gsd/forensics.ts +7 -3
  359. package/src/resources/extensions/gsd/git-service.ts +166 -11
  360. package/src/resources/extensions/gsd/gsd-db.ts +80 -31
  361. package/src/resources/extensions/gsd/guided-flow-queue.ts +4 -3
  362. package/src/resources/extensions/gsd/guided-flow.ts +142 -134
  363. package/src/resources/extensions/gsd/guided-unit-context.ts +30 -0
  364. package/src/resources/extensions/gsd/init-wizard.ts +17 -2
  365. package/src/resources/extensions/gsd/journal.ts +8 -1
  366. package/src/resources/extensions/gsd/markdown-renderer.ts +10 -8
  367. package/src/resources/extensions/gsd/mcp-filter.ts +80 -0
  368. package/src/resources/extensions/gsd/migrate/parsers.ts +11 -0
  369. package/src/resources/extensions/gsd/migration-auto-check.ts +15 -23
  370. package/src/resources/extensions/gsd/milestone-actions.ts +10 -4
  371. package/src/resources/extensions/gsd/native-git-bridge.ts +63 -14
  372. package/src/resources/extensions/gsd/parallel-orchestrator.ts +3 -0
  373. package/src/resources/extensions/gsd/paths.ts +5 -0
  374. package/src/resources/extensions/gsd/pending-auto-start.ts +79 -0
  375. package/src/resources/extensions/gsd/planning-path-scope.ts +10 -2
  376. package/src/resources/extensions/gsd/post-execution-checks.ts +87 -12
  377. package/src/resources/extensions/gsd/pre-execution-checks.ts +49 -11
  378. package/src/resources/extensions/gsd/preferences-mcp.ts +27 -0
  379. package/src/resources/extensions/gsd/preferences-types.ts +33 -0
  380. package/src/resources/extensions/gsd/preferences-validation.ts +145 -0
  381. package/src/resources/extensions/gsd/preferences.ts +5 -0
  382. package/src/resources/extensions/gsd/prompt-loader.ts +1 -1
  383. package/src/resources/extensions/gsd/prompts/complete-milestone.md +1 -1
  384. package/src/resources/extensions/gsd/prompts/complete-slice.md +1 -1
  385. package/src/resources/extensions/gsd/prompts/discuss-headless.md +8 -8
  386. package/src/resources/extensions/gsd/prompts/discuss.md +9 -9
  387. package/src/resources/extensions/gsd/prompts/forensics.md +3 -3
  388. package/src/resources/extensions/gsd/prompts/guided-discuss-project.md +4 -4
  389. package/src/resources/extensions/gsd/prompts/guided-discuss-requirements.md +3 -3
  390. package/src/resources/extensions/gsd/prompts/plan-slice.md +4 -4
  391. package/src/resources/extensions/gsd/prompts/queue.md +4 -4
  392. package/src/resources/extensions/gsd/prompts/reactive-execute.md +1 -1
  393. package/src/resources/extensions/gsd/prompts/refine-slice.md +2 -2
  394. package/src/resources/extensions/gsd/prompts/rewrite-docs.md +1 -1
  395. package/src/resources/extensions/gsd/queue-reorder-ui.ts +31 -13
  396. package/src/resources/extensions/gsd/repository-registry.ts +77 -0
  397. package/src/resources/extensions/gsd/safety/evidence-collector.ts +2 -0
  398. package/src/resources/extensions/gsd/safety/evidence-cross-ref.ts +54 -19
  399. package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +52 -1
  400. package/src/resources/extensions/gsd/smart-entry-routing.ts +77 -0
  401. package/src/resources/extensions/gsd/state-reconciliation/drift/merge-state.ts +8 -1
  402. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +12 -15
  403. package/src/resources/extensions/gsd/state-reconciliation/drift/roadmap.ts +17 -25
  404. package/src/resources/extensions/gsd/state.ts +15 -4
  405. package/src/resources/extensions/gsd/status-guards.ts +16 -2
  406. package/src/resources/extensions/gsd/templates/plan.md +9 -5
  407. package/src/resources/extensions/gsd/templates/task-plan.md +10 -2
  408. package/src/resources/extensions/gsd/tests/auto-dashboard.test.ts +71 -0
  409. package/src/resources/extensions/gsd/tests/auto-deterministic-error-classification-4973.test.ts +116 -0
  410. package/src/resources/extensions/gsd/tests/auto-loop.test.ts +300 -1
  411. package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +174 -8
  412. package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +151 -12
  413. package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +53 -2
  414. package/src/resources/extensions/gsd/tests/auto-post-unit-step-message.test.ts +18 -6
  415. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +129 -6
  416. package/src/resources/extensions/gsd/tests/auto-retry-mcp-churn-fixes.test.ts +12 -0
  417. package/src/resources/extensions/gsd/tests/auto-start-orphan-bootstrap.test.ts +1 -0
  418. package/src/resources/extensions/gsd/tests/auto-stop-notification.test.ts +20 -0
  419. package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +69 -1
  420. package/src/resources/extensions/gsd/tests/autocomplete-regressions-1675.test.ts +21 -0
  421. package/src/resources/extensions/gsd/tests/brief-command.test.ts +89 -0
  422. package/src/resources/extensions/gsd/tests/checkout-branch-stash-guard.test.ts +87 -0
  423. package/src/resources/extensions/gsd/tests/clean-root-preflight.test.ts +107 -2
  424. package/src/resources/extensions/gsd/tests/clear-stale-autostart.test.ts +32 -4
  425. package/src/resources/extensions/gsd/tests/closeout-git-deferral.test.ts +16 -0
  426. package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +378 -0
  427. package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +4 -1
  428. package/src/resources/extensions/gsd/tests/complete-slice.test.ts +5 -9
  429. package/src/resources/extensions/gsd/tests/complete-task.test.ts +3 -1
  430. package/src/resources/extensions/gsd/tests/crash-recovery-via-db.test.ts +86 -2
  431. package/src/resources/extensions/gsd/tests/custom-engine-loop-integration.test.ts +2 -0
  432. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +208 -0
  433. package/src/resources/extensions/gsd/tests/db-task-slice-rows.test.ts +1 -0
  434. package/src/resources/extensions/gsd/tests/deep-project-auto-loop.test.ts +61 -2
  435. package/src/resources/extensions/gsd/tests/dispatch-complete-milestone-guard.test.ts +66 -0
  436. package/src/resources/extensions/gsd/tests/dispatch-guard.test.ts +68 -1
  437. package/src/resources/extensions/gsd/tests/doctor-empty-worktree.test.ts +65 -0
  438. package/src/resources/extensions/gsd/tests/doctor-forensics-db-open-regression.test.ts +50 -0
  439. package/src/resources/extensions/gsd/tests/evidence-cross-ref.test.ts +97 -0
  440. package/src/resources/extensions/gsd/tests/export-html-enhancements.test.ts +8 -0
  441. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +28 -0
  442. package/src/resources/extensions/gsd/tests/gsdroot-worktree-detection.test.ts +5 -2
  443. package/src/resources/extensions/gsd/tests/guided-discuss-project-prompt-rendering.test.ts +2 -0
  444. package/src/resources/extensions/gsd/tests/guided-dispatch-root.test.ts +106 -0
  445. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +59 -11
  446. package/src/resources/extensions/gsd/tests/guided-flow.test.ts +21 -0
  447. package/src/resources/extensions/gsd/tests/guided-tool-contract.test.ts +65 -0
  448. package/src/resources/extensions/gsd/tests/headless-milestone-parity.test.ts +7 -7
  449. package/src/resources/extensions/gsd/tests/hook-model-resolution.test.ts +5 -0
  450. package/src/resources/extensions/gsd/tests/infra-error.test.ts +2 -2
  451. package/src/resources/extensions/gsd/tests/infra-errors-cooldown.test.ts +9 -0
  452. package/src/resources/extensions/gsd/tests/init-prefs-routing.test.ts +22 -0
  453. package/src/resources/extensions/gsd/tests/integration/doctor-runtime.test.ts +20 -0
  454. package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +199 -2
  455. package/src/resources/extensions/gsd/tests/integration/state-machine-runtime-failures.test.ts +6 -1
  456. package/src/resources/extensions/gsd/tests/journal-integration.test.ts +49 -3
  457. package/src/resources/extensions/gsd/tests/journal.test.ts +32 -0
  458. package/src/resources/extensions/gsd/tests/mcp-filter.test.ts +287 -0
  459. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +11 -0
  460. package/src/resources/extensions/gsd/tests/merge-db-cycle.test.ts +179 -0
  461. package/src/resources/extensions/gsd/tests/migrate-validator-parsers.test.ts +24 -1
  462. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +26 -18
  463. package/src/resources/extensions/gsd/tests/native-git-bridge-exec-fallback.test.ts +80 -2
  464. package/src/resources/extensions/gsd/tests/orphaned-worktree-audit.test.ts +121 -1
  465. package/src/resources/extensions/gsd/tests/parallel-orchestrator-zombie-cleanup.test.ts +55 -0
  466. package/src/resources/extensions/gsd/tests/park-db-sync.test.ts +55 -1
  467. package/src/resources/extensions/gsd/tests/pending-autostart-scope.test.ts +29 -5
  468. package/src/resources/extensions/gsd/tests/pipeline-variant-dispatch.test.ts +2 -1
  469. package/src/resources/extensions/gsd/tests/plan-milestone.test.ts +26 -0
  470. package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +2 -0
  471. package/src/resources/extensions/gsd/tests/plan-slice.test.ts +343 -3
  472. package/src/resources/extensions/gsd/tests/plan-task.test.ts +18 -1
  473. package/src/resources/extensions/gsd/tests/post-exec-retry-bypass.test.ts +79 -1
  474. package/src/resources/extensions/gsd/tests/post-execution-checks.test.ts +105 -3
  475. package/src/resources/extensions/gsd/tests/post-unit-git-failure.test.ts +1 -1
  476. package/src/resources/extensions/gsd/tests/post-unit-state-rebuild.test.ts +84 -0
  477. package/src/resources/extensions/gsd/tests/pre-execution-checks.test.ts +59 -0
  478. package/src/resources/extensions/gsd/tests/pre-execution-pause-wiring.test.ts +54 -0
  479. package/src/resources/extensions/gsd/tests/preferences-mcp.test.ts +128 -0
  480. package/src/resources/extensions/gsd/tests/preferences.test.ts +75 -0
  481. package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +70 -0
  482. package/src/resources/extensions/gsd/tests/prompt-loader.test.ts +23 -0
  483. package/src/resources/extensions/gsd/tests/provider-errors.test.ts +37 -1
  484. package/src/resources/extensions/gsd/tests/quality-gates.test.ts +6 -0
  485. package/src/resources/extensions/gsd/tests/queue-reorder-ui.test.ts +54 -0
  486. package/src/resources/extensions/gsd/tests/remediation-completion-guard.test.ts +89 -2
  487. package/src/resources/extensions/gsd/tests/repository-registry.test.ts +52 -0
  488. package/src/resources/extensions/gsd/tests/run-uat-replay-cap.test.ts +2 -3
  489. package/src/resources/extensions/gsd/tests/session-switch-abort-misclassification.test.ts +10 -0
  490. package/src/resources/extensions/gsd/tests/slice-parallel-orchestrator.test.ts +72 -1
  491. package/src/resources/extensions/gsd/tests/smart-entry-routing.test.ts +113 -0
  492. package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +53 -2
  493. package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +6 -0
  494. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +119 -23
  495. package/src/resources/extensions/gsd/tests/status-guards.test.ts +17 -1
  496. package/src/resources/extensions/gsd/tests/stuck-state-via-db.test.ts +64 -1
  497. package/src/resources/extensions/gsd/tests/subagent-model-dispatch.test.ts +2 -1
  498. package/src/resources/extensions/gsd/tests/summary-render-parity.test.ts +7 -3
  499. package/src/resources/extensions/gsd/tests/unit-context-manifest.test.ts +128 -9
  500. package/src/resources/extensions/gsd/tests/uok-gitops-turn-action.test.ts +111 -1
  501. package/src/resources/extensions/gsd/tests/validate-milestone-stuck-guard.test.ts +29 -2
  502. package/src/resources/extensions/gsd/tests/validate-milestone.test.ts +42 -1
  503. package/src/resources/extensions/gsd/tests/verification-gate.test.ts +173 -1
  504. package/src/resources/extensions/gsd/tests/verification-verdict.test.ts +78 -0
  505. package/src/resources/extensions/gsd/tests/workflow-kernel.test.ts +7 -0
  506. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +19 -1
  507. package/src/resources/extensions/gsd/tests/workflow-memory-pressure.test.ts +21 -1
  508. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +1 -1
  509. package/src/resources/extensions/gsd/tests/worktree-git-pathspec.test.ts +39 -0
  510. package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +64 -12
  511. package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +25 -0
  512. package/src/resources/extensions/gsd/tests/worktree-preferences-sync.test.ts +25 -0
  513. package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +95 -0
  514. package/src/resources/extensions/gsd/tests/worktree-write-gate.test.ts +27 -0
  515. package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +59 -0
  516. package/src/resources/extensions/gsd/tools/complete-milestone.ts +8 -10
  517. package/src/resources/extensions/gsd/tools/complete-slice.ts +6 -8
  518. package/src/resources/extensions/gsd/tools/plan-milestone.ts +5 -1
  519. package/src/resources/extensions/gsd/tools/plan-slice.ts +172 -12
  520. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +135 -0
  521. package/src/resources/extensions/gsd/types.ts +1 -1
  522. package/src/resources/extensions/gsd/unit-context-manifest.ts +51 -18
  523. package/src/resources/extensions/gsd/validation.ts +23 -1
  524. package/src/resources/extensions/gsd/verification-gate.ts +170 -6
  525. package/src/resources/extensions/gsd/verification-verdict.ts +47 -0
  526. package/src/resources/extensions/gsd/workflow-manifest.ts +2 -0
  527. package/src/resources/extensions/gsd/workflow-mcp.ts +18 -1
  528. package/src/resources/extensions/gsd/workflow-projections.ts +6 -8
  529. package/src/resources/extensions/gsd/worktree-lifecycle.ts +61 -10
  530. package/src/resources/extensions/gsd/worktree-manager.ts +1 -1
  531. package/src/resources/extensions/gsd/worktree-state-projection.ts +43 -0
  532. package/src/resources/extensions/shared/html-shell.ts +412 -0
  533. package/src/resources/extensions/shared/interview-ui.ts +6 -4
  534. package/src/resources/extensions/shared/tests/interview-notes-loop.test.ts +15 -0
  535. package/src/resources/extensions/subagent/index.ts +567 -103
  536. package/src/resources/extensions/subagent/launch.ts +131 -0
  537. package/src/resources/extensions/subagent/run-store.ts +218 -0
  538. package/src/resources/extensions/subagent/tests/launch.test.ts +115 -0
  539. package/src/resources/extensions/subagent/tests/run-store.test.ts +111 -0
  540. package/src/resources/extensions/ttsr/ttsr-manager.ts +5 -1
  541. package/src/resources/extensions/visual-brief/artifact-policy.ts +41 -0
  542. package/src/resources/extensions/visual-brief/extension-manifest.json +8 -0
  543. package/src/resources/extensions/visual-brief/index.ts +8 -0
  544. package/src/resources/extensions/visual-brief/page-contract.ts +136 -0
  545. package/src/resources/extensions/visual-brief/prompts.ts +183 -0
  546. package/src/resources/extensions/visual-brief/tests/visual-brief.test.ts +212 -0
  547. package/src/resources/skills/forensics/SKILL.md +1 -1
  548. package/dist/web/standalone/.next/server/chunks/5822.js +0 -2
  549. package/dist/web/standalone/.next/static/chunks/2556.0527fea66e123b7f.js +0 -1
  550. package/dist/web/standalone/.next/static/chunks/8359.e059d86b255fce1c.js +0 -10
  551. package/dist/web/standalone/.next/static/chunks/9441.1081da1125d1764f.js +0 -1
  552. package/dist/web/standalone/.next/static/chunks/app/layout-a16c7a7ecdf0c2cf.js +0 -1
  553. package/dist/web/standalone/.next/static/css/54ec2745c1da488b.css +0 -1
  554. package/dist/web/standalone/.next/static/css/de70bee13400563f.css +0 -1
  555. package/dist/web/standalone/.next/static/media/4cf2300e9c8272f7-s.p.woff2 +0 -0
  556. package/dist/web/standalone/.next/static/media/747892c23ea88013-s.woff2 +0 -0
  557. package/dist/web/standalone/.next/static/media/8d697b304b401681-s.woff2 +0 -0
  558. package/dist/web/standalone/.next/static/media/93f479601ee12b01-s.p.woff2 +0 -0
  559. package/dist/web/standalone/.next/static/media/9610d9e46709d722-s.woff2 +0 -0
  560. package/dist/web/standalone/.next/static/media/ba015fad6dcf6784-s.woff2 +0 -0
  561. /package/dist/web/standalone/.next/static/{YEvjuT-fsFfYQhDSWtueS → _kljR-_Miq_YV1IW0wpRO}/_buildManifest.js +0 -0
  562. /package/dist/web/standalone/.next/static/{YEvjuT-fsFfYQhDSWtueS → _kljR-_Miq_YV1IW0wpRO}/_ssgManifest.js +0 -0
@@ -20,6 +20,7 @@ import { parseUnitId } from "./unit-id.js";
20
20
  import { isDbAvailable, getTask, getSliceTasks, getMilestoneSlices } from "./gsd-db.js";
21
21
  import type { TaskRow } from "./db-task-slice-rows.js";
22
22
  import { loadEffectiveGSDPreferences } from "./preferences.js";
23
+ import type { GSDPreferences } from "./preferences-types.js";
23
24
  import { extractVerdict } from "./verdict-parser.js";
24
25
  import { isClosedStatus } from "./status-guards.js";
25
26
  import { loadFile } from "./files.js";
@@ -27,10 +28,12 @@ import { parseRoadmap } from "./parsers-legacy.js";
27
28
  import { isMilestoneComplete } from "./state.js";
28
29
  import {
29
30
  runVerificationGate,
31
+ runVerificationGateForTargets,
30
32
  formatFailureContext,
31
33
  captureRuntimeErrors,
32
34
  runDependencyAudit,
33
35
  } from "./verification-gate.js";
36
+ import type { VerificationTarget } from "./verification-gate.js";
34
37
  import { writeVerificationJSON, type PostExecutionCheckJSON, type EvidenceJSON } from "./verification-evidence.js";
35
38
  import { logWarning } from "./workflow-logger.js";
36
39
  import { runPostExecutionChecks, type PostExecutionResult } from "./post-execution-checks.js";
@@ -40,6 +43,10 @@ import { join } from "node:path";
40
43
  import { resolveUokFlags } from "./uok/flags.js";
41
44
  import { UokGateRunner } from "./uok/gate-runner.js";
42
45
  import { verificationRetryKey } from "./auto/verification-retry-policy.js";
46
+ import { decideVerificationVerdict } from "./verification-verdict.js";
47
+ import { createRepositoryRegistryFromPreferences } from "./repository-registry.js";
48
+ import type { SliceRow } from "./db-task-slice-rows.js";
49
+ import { getSlice } from "./gsd-db.js";
43
50
 
44
51
  export interface VerificationContext {
45
52
  s: AutoSession;
@@ -49,10 +56,48 @@ export interface VerificationContext {
49
56
 
50
57
  export type VerificationResult = "continue" | "retry" | "pause";
51
58
 
52
- function isInfraVerificationFailure(stderr: string): boolean {
53
- return /\b(ENOENT|ENOTFOUND|ETIMEDOUT|ECONNRESET|EAI_AGAIN|spawn\s+\S+\s+ENOENT|command not found)\b/i.test(
54
- stderr,
55
- );
59
+ function resolveVerificationTargets(
60
+ basePath: string,
61
+ prefs: GSDPreferences | undefined,
62
+ task: TaskRow | null,
63
+ slice: SliceRow | null,
64
+ ): VerificationTarget[] {
65
+ const registry = createRepositoryRegistryFromPreferences(basePath, prefs);
66
+ const explicitIds =
67
+ task?.target_repositories?.length
68
+ ? task.target_repositories
69
+ : slice?.target_repositories?.length
70
+ ? slice.target_repositories
71
+ : null;
72
+ const requestedIds = explicitIds ?? ["project"];
73
+
74
+ const targets: VerificationTarget[] = [];
75
+ const seen = new Set<string>();
76
+ for (const id of requestedIds) {
77
+ if (seen.has(id)) continue;
78
+ seen.add(id);
79
+ const repo = registry.byId.get(id);
80
+ if (!repo) {
81
+ if (explicitIds) {
82
+ throw new Error(`unknown verification target repository: ${id}`);
83
+ }
84
+ continue;
85
+ }
86
+ targets.push({
87
+ id: repo.id,
88
+ cwd: repo.root,
89
+ // Top-level verification commands override per-repo defaults.
90
+ preferenceCommands: prefs?.verification_commands?.length
91
+ ? undefined
92
+ : repo.verification,
93
+ });
94
+ }
95
+
96
+ if (!explicitIds && targets.length === 0) {
97
+ const project = registry.byId.get("project");
98
+ if (project) targets.push({ id: "project", cwd: project.root });
99
+ }
100
+ return targets;
56
101
  }
57
102
 
58
103
  /**
@@ -110,11 +155,31 @@ async function runValidateMilestonePostCheck(
110
155
  const { milestone: mid } = parseUnitId(s.currentUnit.id);
111
156
  if (!mid) return "continue";
112
157
 
158
+ const setToolFailureRetry = (message: string): VerificationResult => {
159
+ const retryKey = verificationRetryKey(s.currentUnit!.type, s.currentUnit!.id);
160
+ const attempt = (s.verificationRetryCount.get(retryKey) ?? 0) + 1;
161
+ s.verificationRetryCount.set(retryKey, attempt);
162
+ s.pendingVerificationRetry = {
163
+ unitId: s.currentUnit!.id,
164
+ failureContext: message,
165
+ attempt,
166
+ };
167
+ return "retry";
168
+ };
169
+
113
170
  const validationFile = resolveMilestoneFile(s.basePath, mid, "VALIDATION");
114
- if (!validationFile) return "continue";
171
+ if (!validationFile) {
172
+ return setToolFailureRetry(
173
+ "You must call gsd_validate_milestone to persist the validation results. No VALIDATION.md was created.",
174
+ );
175
+ }
115
176
 
116
177
  const validationContent = await loadFile(validationFile);
117
- if (!validationContent) return "continue";
178
+ if (!validationContent) {
179
+ return setToolFailureRetry(
180
+ "You must call gsd_validate_milestone to persist the validation results. VALIDATION.md exists but is empty.",
181
+ );
182
+ }
118
183
 
119
184
  const verdict = extractVerdict(validationContent);
120
185
  if (verdict !== "needs-remediation") {
@@ -196,7 +261,7 @@ async function countIncompleteSlices(basePath: string, milestoneId: string): Pro
196
261
  /**
197
262
  * Run the verification gate for the current execute-task unit.
198
263
  * Returns:
199
- * - "continue" — gate passed (or no checks configured), proceed normally
264
+ * - "continue" — host-owned verification passed, proceed normally
200
265
  * - "retry" — gate failed with retries remaining, s.pendingVerificationRetry set for loop re-iteration
201
266
  * - "pause" — gate failed with retries exhausted, pauseAuto already called
202
267
  */
@@ -226,18 +291,29 @@ export async function runPostUnitVerification(
226
291
  // Read task plan verify field
227
292
  const { milestone: mid, slice: sid, task: tid } = parseUnitId(s.currentUnit.id);
228
293
  let taskPlanVerify: string | undefined;
294
+ let taskRow: TaskRow | null = null;
295
+ let sliceRow: SliceRow | null = null;
229
296
  if (mid && sid && tid) {
230
297
  if (isDbAvailable()) {
231
- taskPlanVerify = getTask(mid, sid, tid)?.verify;
298
+ taskRow = getTask(mid, sid, tid);
299
+ sliceRow = getSlice(mid, sid);
300
+ taskPlanVerify = taskRow?.verify;
232
301
  }
233
302
  // When DB unavailable, taskPlanVerify stays undefined — gate runs without task-specific checks
234
303
  }
235
304
 
236
- const result = runVerificationGate({
237
- cwd: s.basePath,
238
- preferenceCommands: prefs?.verification_commands,
239
- taskPlanVerify,
240
- });
305
+ const verificationTargets = resolveVerificationTargets(s.basePath, prefs, taskRow, sliceRow);
306
+ const result = verificationTargets.length <= 1
307
+ ? runVerificationGate({
308
+ cwd: verificationTargets[0]?.cwd ?? s.basePath,
309
+ preferenceCommands: prefs?.verification_commands ?? verificationTargets[0]?.preferenceCommands,
310
+ taskPlanVerify,
311
+ })
312
+ : runVerificationGateForTargets({
313
+ targets: verificationTargets,
314
+ preferenceCommands: prefs?.verification_commands,
315
+ taskPlanVerify,
316
+ });
241
317
 
242
318
  // Capture runtime errors
243
319
  const runtimeErrors = await captureRuntimeErrors();
@@ -260,6 +336,11 @@ export async function runPostUnitVerification(
260
336
  }
261
337
  }
262
338
 
339
+ const verdict = decideVerificationVerdict(s.currentUnit.type, result);
340
+ if (!verdict.passed) {
341
+ result.passed = false;
342
+ }
343
+
263
344
  if (uokFlags.gates) {
264
345
  const gateRunner = new UokGateRunner();
265
346
  gateRunner.register({
@@ -272,10 +353,12 @@ export async function runPostUnitVerification(
272
353
  : "verification",
273
354
  rationale: result.passed
274
355
  ? "verification checks passed"
275
- : "verification checks failed",
356
+ : verdict.reason === "no-host-checks"
357
+ ? "no runnable host-owned verification checks discovered"
358
+ : "verification checks failed",
276
359
  findings: result.passed
277
360
  ? ""
278
- : formatFailureContext(result),
361
+ : verdict.failureContext || formatFailureContext(result),
279
362
  }),
280
363
  });
281
364
 
@@ -343,13 +426,18 @@ export async function runPostUnitVerification(
343
426
  writeVerificationJSON(result, tasksDir, tid, s.currentUnit.id);
344
427
  } else {
345
428
  const nextAttempt = attempt + 1;
429
+ const includeRetryMetadata =
430
+ !result.passed &&
431
+ verdict.retryable &&
432
+ autoFixEnabled &&
433
+ nextAttempt <= maxRetries;
346
434
  writeVerificationJSON(
347
435
  result,
348
436
  tasksDir,
349
437
  tid,
350
438
  s.currentUnit.id,
351
- nextAttempt,
352
- maxRetries,
439
+ includeRetryMetadata ? nextAttempt : undefined,
440
+ includeRetryMetadata ? maxRetries : undefined,
353
441
  );
354
442
  }
355
443
  }
@@ -358,26 +446,6 @@ export async function runPostUnitVerification(
358
446
  }
359
447
  }
360
448
 
361
- const advisoryFailure =
362
- !result.passed &&
363
- (result.discoverySource === "package-json" ||
364
- result.checks.some((check) =>
365
- isInfraVerificationFailure(check.stderr),
366
- ));
367
-
368
- if (advisoryFailure) {
369
- s.verificationRetryCount.delete(retryKey);
370
- s.verificationRetryFailureHashes.delete(retryKey);
371
- s.pendingVerificationRetry = null;
372
- ctx.ui.notify(
373
- result.discoverySource === "package-json"
374
- ? "Verification failed in auto-discovered package.json checks — treating as advisory."
375
- : "Verification failed due to infrastructure/runtime environment issues — treating as advisory.",
376
- "warning",
377
- );
378
- return "continue";
379
- }
380
-
381
449
  // ── Post-execution checks (run after main verification passes for execute-task units) ──
382
450
  let postExecChecks: PostExecutionCheckJSON[] | undefined;
383
451
  let postExecBlockingFailure = false;
@@ -389,8 +457,7 @@ export async function runPostUnitVerification(
389
457
 
390
458
  if (enhancedEnabled && postEnabled && isDbAvailable()) {
391
459
  try {
392
- // Get the completed task from DB
393
- const taskRow = getTask(mid, sid, tid);
460
+ // Reuse the already-loaded task row for post-execution checks.
394
461
  if (taskRow && taskRow.key_files && taskRow.key_files.length > 0) {
395
462
  // Get all tasks in the slice
396
463
  const allTasks = getSliceTasks(mid, sid);
@@ -572,6 +639,17 @@ export async function runPostUnitVerification(
572
639
  s.verificationRetryFailureHashes.delete(retryKey);
573
640
  s.pendingVerificationRetry = null;
574
641
  return "continue";
642
+ } else if (verdict.reason === "no-host-checks") {
643
+ s.verificationRetryCount.delete(retryKey);
644
+ s.verificationRetryFailureHashes.delete(retryKey);
645
+ s.pendingVerificationRetry = null;
646
+ ctx.ui.notify(
647
+ "Verification gate FAILED — no runnable host-owned verification checks were discovered. Pausing for human review.",
648
+ "error",
649
+ );
650
+ process.stderr.write(`verification-gate: ${verdict.failureContext}\n`);
651
+ await pauseAuto(ctx, pi);
652
+ return "pause";
575
653
  } else if (postExecBlockingFailure) {
576
654
  // Post-execution failures are cross-task consistency issues — retrying the same task won't fix them.
577
655
  // Skip retry and pause immediately for human review.
@@ -589,7 +667,7 @@ export async function runPostUnitVerification(
589
667
  s.verificationRetryCount.set(retryKey, nextAttempt);
590
668
  s.pendingVerificationRetry = {
591
669
  unitId: s.currentUnit.id,
592
- failureContext: formatFailureContext(result),
670
+ failureContext: verdict.failureContext || formatFailureContext(result),
593
671
  attempt: nextAttempt,
594
672
  };
595
673
  const failedCmds = result.checks
@@ -623,9 +701,13 @@ export async function runPostUnitVerification(
623
701
  return "pause";
624
702
  }
625
703
  } catch (err) {
626
- // Gate errors are non-fatal
627
704
  logWarning("engine", `verification-gate error: ${(err as Error).message}`);
628
- return "continue";
705
+ ctx.ui.notify(
706
+ `Verification gate errored before producing an authoritative verdict: ${(err as Error).message}`,
707
+ "error",
708
+ );
709
+ await pauseAuto(ctx, pi);
710
+ return "pause";
629
711
  }
630
712
  }
631
713
 
@@ -252,7 +252,17 @@ function gitPathspecForWorktreePath(basePath: string, targetPath: string): strin
252
252
  let base = basePath;
253
253
  let target = targetPath;
254
254
  try {
255
- base = realpathSync.native(basePath);
255
+ base = execFileSync("git", ["rev-parse", "--show-toplevel"], {
256
+ cwd: basePath,
257
+ stdio: ["ignore", "pipe", "ignore"],
258
+ encoding: "utf-8",
259
+ }).trim() || basePath;
260
+ } catch {
261
+ /* keep original */
262
+ void base;
263
+ }
264
+ try {
265
+ base = realpathSync.native(base);
256
266
  } catch {
257
267
  /* keep original */
258
268
  void base;
@@ -269,6 +279,10 @@ function gitPathspecForWorktreePath(basePath: string, targetPath: string): strin
269
279
  return rel.replaceAll("\\", "/");
270
280
  }
271
281
 
282
+ export function _gitPathspecForWorktreePath(basePath: string, targetPath: string): string | null {
283
+ return gitPathspecForWorktreePath(basePath, targetPath);
284
+ }
285
+
272
286
  function gitRemoteExists(basePath: string, remote: string): boolean {
273
287
  try {
274
288
  execFileSync("git", ["remote", "get-url", remote], {
@@ -282,6 +296,50 @@ function gitRemoteExists(basePath: string, remote: string): boolean {
282
296
  }
283
297
  }
284
298
 
299
+ function findRegularMergeChangedPaths(basePath: string, milestoneBranch: string, mainBranch: string): Set<string> {
300
+ const changedPaths = new Set<string>();
301
+ let mergeLog = "";
302
+ try {
303
+ mergeLog = execFileSync("git", ["rev-list", "--merges", "--parents", mainBranch], {
304
+ cwd: basePath,
305
+ stdio: ["ignore", "pipe", "pipe"],
306
+ encoding: "utf-8",
307
+ }).trim();
308
+ } catch (err) {
309
+ logWarning("worktree", `regular merge lookup failed: ${err instanceof Error ? err.message : String(err)}`);
310
+ return changedPaths;
311
+ }
312
+
313
+ for (const line of mergeLog.split("\n").filter(Boolean)) {
314
+ const [mergeCommit, firstParent, ...otherParents] = line.split(" ");
315
+ if (!mergeCommit || !firstParent || otherParents.length === 0) continue;
316
+ const mergedMilestone = otherParents.some((parent) => {
317
+ try {
318
+ return nativeIsAncestor(basePath, milestoneBranch, parent);
319
+ } catch {
320
+ return false;
321
+ }
322
+ });
323
+ if (!mergedMilestone) continue;
324
+
325
+ try {
326
+ const output = execFileSync("git", ["diff", "--name-only", firstParent, mergeCommit], {
327
+ cwd: basePath,
328
+ stdio: ["ignore", "pipe", "pipe"],
329
+ encoding: "utf-8",
330
+ }).trim();
331
+ for (const path of output.split("\n").filter(Boolean)) {
332
+ if (!path.startsWith(".gsd/")) changedPaths.add(path);
333
+ }
334
+ } catch (err) {
335
+ logWarning("worktree", `regular merge diff lookup failed: ${err instanceof Error ? err.message : String(err)}`);
336
+ }
337
+ return changedPaths;
338
+ }
339
+
340
+ return changedPaths;
341
+ }
342
+
285
343
  function clearProjectRootStateFiles(basePath: string, milestoneId: string): void {
286
344
  const gsdDir = gsdRoot(basePath);
287
345
  // Phase C pt 2: auto.lock removed from this list — the file is gone
@@ -643,7 +701,8 @@ export function syncGsdStateToWorktree(
643
701
  // If both resolve to the same directory (symlink), no sync needed
644
702
  if (isSamePath(mainGsd, wtGsd)) return { synced };
645
703
 
646
- if (!existsSync(mainGsd) || !existsSync(wtGsd)) return { synced };
704
+ if (!existsSync(mainGsd)) return { synced };
705
+ mkdirSync(wtGsd, { recursive: true });
647
706
 
648
707
  // Sync root-level .gsd/ files (DECISIONS, REQUIREMENTS, PROJECT, KNOWLEDGE, etc.)
649
708
  for (const f of ROOT_STATE_FILES) {
@@ -949,7 +1008,73 @@ export function enterBranchModeForMilestone(
949
1008
  });
950
1009
  }
951
1010
 
952
- nativeCheckoutBranch(basePath, branch);
1011
+ checkoutBranchWithStashGuard(basePath, branch, `enter-branch-mode:${milestoneId}`);
1012
+ }
1013
+
1014
+ export function checkoutBranchWithStashGuard(
1015
+ basePath: string,
1016
+ branch: string,
1017
+ reason: string,
1018
+ ): void {
1019
+ let stashMarker: string | null = null;
1020
+ let stashed = false;
1021
+
1022
+ const status = nativeWorkingTreeStatus(basePath).trim();
1023
+ if (status.length > 0) {
1024
+ stashMarker = `gsd-checkout-stash:${reason}:${process.pid}:${Date.now()}:${process.hrtime.bigint().toString(36)}`;
1025
+ const stashListBefore = execFileSync("git", ["stash", "list"], {
1026
+ cwd: basePath,
1027
+ stdio: ["ignore", "pipe", "pipe"],
1028
+ encoding: "utf-8",
1029
+ });
1030
+ execFileSync(
1031
+ "git",
1032
+ ["stash", "push", "--include-untracked", "-m", `gsd: checkout stash [${stashMarker}]`],
1033
+ {
1034
+ cwd: basePath,
1035
+ stdio: ["ignore", "pipe", "pipe"],
1036
+ encoding: "utf-8",
1037
+ },
1038
+ );
1039
+ const stashListAfter = execFileSync("git", ["stash", "list"], {
1040
+ cwd: basePath,
1041
+ stdio: ["ignore", "pipe", "pipe"],
1042
+ encoding: "utf-8",
1043
+ });
1044
+ stashed = stashListAfter !== stashListBefore;
1045
+ }
1046
+
1047
+ // Checkout and stash-restore are split so we can distinguish two failure
1048
+ // modes: (a) checkout failed → HEAD did not move, restore stash and rethrow;
1049
+ // (b) checkout succeeded but stash pop failed → HEAD moved to `branch` but
1050
+ // the working-tree changes remain in the stash list. We surface a distinct
1051
+ // error in case (b) so callers don't assume the branch switch was rolled back.
1052
+ try {
1053
+ nativeCheckoutBranch(basePath, branch);
1054
+ } catch (checkoutErr) {
1055
+ if (stashed) {
1056
+ try {
1057
+ popStashByRef(basePath, stashMarker);
1058
+ } catch (restoreErr) {
1059
+ logWarning("worktree", `git stash pop failed during checkout restore: ${restoreErr instanceof Error ? restoreErr.message : String(restoreErr)}`);
1060
+ }
1061
+ }
1062
+ throw checkoutErr;
1063
+ }
1064
+
1065
+ if (stashed) {
1066
+ try {
1067
+ popStashByRef(basePath, stashMarker);
1068
+ } catch (popErr) {
1069
+ const msg = popErr instanceof Error ? popErr.message : String(popErr);
1070
+ const wrapped = new Error(
1071
+ `checkout to '${branch}' succeeded but stash restore failed; working tree changes remain in the stash list. Original error: ${msg}`,
1072
+ );
1073
+ const ref = (popErr as { stashRef?: string } | null)?.stashRef;
1074
+ if (ref) (wrapped as { stashRef?: string }).stashRef = ref;
1075
+ throw wrapped;
1076
+ }
1077
+ }
953
1078
  }
954
1079
 
955
1080
  // ─── Public API ────────────────────────────────────────────────────────────
@@ -1739,6 +1864,66 @@ export function mergeMilestoneToMain(
1739
1864
  }
1740
1865
  }
1741
1866
 
1867
+ // Already regular-merged milestones can skip the squash path and proceed to cleanup (#5831).
1868
+ if (nativeIsAncestor(originalBasePath_, milestoneBranch, mainBranch)) {
1869
+ const codeChanges = nativeDiffNumstat(
1870
+ originalBasePath_,
1871
+ mainBranch,
1872
+ milestoneBranch,
1873
+ ).filter((entry) => !entry.path.startsWith(".gsd/"));
1874
+ if (codeChanges.length > 0) {
1875
+ const regularMergeChangedPaths = findRegularMergeChangedPaths(
1876
+ originalBasePath_,
1877
+ milestoneBranch,
1878
+ mainBranch,
1879
+ );
1880
+ const unanchoredCodeChanges = codeChanges.filter((entry) =>
1881
+ regularMergeChangedPaths.has(entry.path)
1882
+ );
1883
+ if (unanchoredCodeChanges.length > 0) {
1884
+ process.chdir(previousCwd);
1885
+ throw new GSDError(
1886
+ GSD_GIT_ERROR,
1887
+ `Milestone branch "${milestoneBranch}" is reachable from "${mainBranch}" ` +
1888
+ `but has ${unanchoredCodeChanges.length} milestone-touched code file(s) not on current "${mainBranch}". ` +
1889
+ `Aborting worktree teardown to prevent data loss.`,
1890
+ );
1891
+ }
1892
+ }
1893
+ debugLog("mergeMilestoneToMain", {
1894
+ action: "skip-squash-already-merged",
1895
+ milestoneId,
1896
+ milestoneBranch,
1897
+ mainBranch,
1898
+ });
1899
+ try {
1900
+ clearProjectRootStateFiles(originalBasePath_, milestoneId);
1901
+ } catch (err) {
1902
+ logWarning("worktree", `clearProjectRootStateFiles failed during already-merged cleanup: ${err instanceof Error ? err.message : String(err)}`);
1903
+ }
1904
+ try {
1905
+ removeWorktree(originalBasePath_, milestoneId, {
1906
+ branch: milestoneBranch,
1907
+ deleteBranch: false,
1908
+ });
1909
+ } catch (err) {
1910
+ logWarning("worktree", `worktree removal failed: ${err instanceof Error ? err.message : String(err)}`);
1911
+ }
1912
+ try {
1913
+ nativeBranchDelete(originalBasePath_, milestoneBranch);
1914
+ } catch (err) {
1915
+ logWarning("worktree", `git branch-delete failed: ${err instanceof Error ? err.message : String(err)}`);
1916
+ }
1917
+ setActiveWorkspace(null);
1918
+ nudgeGitBranchCache(previousCwd);
1919
+ try {
1920
+ process.chdir(originalBasePath_);
1921
+ } catch (err) {
1922
+ logWarning("worktree", `chdir to project root after already-merged cleanup failed: ${err instanceof Error ? err.message : String(err)}`);
1923
+ }
1924
+ return { commitMessage, pushed: false, prCreated: false, codeFilesChanged: true };
1925
+ }
1926
+
1742
1927
  // 7. Shelter queued milestone directories before the squash merge (#2505).
1743
1928
  // The milestone branch may contain copies of queued milestone dirs (via
1744
1929
  // copyPlanningArtifacts), so `git merge --squash` rejects when those same
@@ -1874,14 +2059,6 @@ export function mergeMilestoneToMain(
1874
2059
  logWarning("worktree", `git stash failed: ${err instanceof Error ? err.message : String(err)}`);
1875
2060
  }
1876
2061
 
1877
- if (needsDbCycle && dbPathToReopen) {
1878
- try {
1879
- openDatabase(dbPathToReopen);
1880
- } catch (err) {
1881
- logWarning("worktree", `post-stash db reopen failed: ${err instanceof Error ? err.message : String(err)}`);
1882
- }
1883
- }
1884
-
1885
2062
  // 7b. Clean up stale merge state before attempting squash merge (#2912).
1886
2063
  // A leftover MERGE_HEAD (from a previous failed merge, libgit2 native path,
1887
2064
  // or interrupted operation) causes `git merge --squash` to refuse with
@@ -1891,6 +2068,13 @@ export function mergeMilestoneToMain(
1891
2068
 
1892
2069
  // 8. Squash merge — auto-resolve .gsd/ state file conflicts (#530)
1893
2070
  const mergeResult = nativeMergeSquash(originalBasePath_, milestoneBranch);
2071
+ if (needsDbCycle && dbPathToReopen) {
2072
+ try {
2073
+ openDatabase(dbPathToReopen);
2074
+ } catch (err) {
2075
+ logWarning("worktree", `post-merge db reopen failed: ${err instanceof Error ? err.message : String(err)}`);
2076
+ }
2077
+ }
1894
2078
 
1895
2079
  if (!mergeResult.success) {
1896
2080
  // Dirty working tree — the merge was rejected before it started (e.g.