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
@@ -0,0 +1,54 @@
1
+ import { describe, test } from "node:test";
2
+ import assert from "node:assert/strict";
3
+
4
+ import { showQueueReorder } from "../queue-reorder-ui.ts";
5
+
6
+ const fakeTheme = {
7
+ fg: (_color: string, text: string) => text,
8
+ bold: (text: string) => text,
9
+ };
10
+
11
+ describe("queue-reorder-ui", () => {
12
+ test("keeps cursor visible while scrolling long queue with arrow keys (#4656)", async () => {
13
+ const originalRowsDescriptor = Object.getOwnPropertyDescriptor(process.stdout, "rows");
14
+ Object.defineProperty(process.stdout, "rows", { value: 20, configurable: true });
15
+
16
+ try {
17
+ const pending = Array.from({ length: 20 }, (_, idx) => ({
18
+ id: `M${String(idx + 1).padStart(3, "0")}`,
19
+ title: `Milestone ${idx + 1}`,
20
+ }));
21
+
22
+ let resolved: { order: string[]; depsToRemove: Array<{ milestone: string; dep: string }> } | null = null;
23
+ let lastRender: string[] = [];
24
+
25
+ const ctx = {
26
+ hasUI: true,
27
+ ui: {
28
+ custom: async (factory: any) => {
29
+ const component = factory({ requestRender() {} }, fakeTheme, null, (value: any) => {
30
+ resolved = value;
31
+ });
32
+
33
+ for (let i = 0; i < 15; i++) component.handleInput("\u001b[B");
34
+ lastRender = component.render(100);
35
+ component.handleInput("\r");
36
+ return resolved;
37
+ },
38
+ },
39
+ } as any;
40
+
41
+ await showQueueReorder(ctx, [], pending);
42
+
43
+ const joined = lastRender.join("\n");
44
+ assert.ok(joined.includes("M016"), "selected item should stay visible after scrolling");
45
+ assert.ok(lastRender.length <= 16, `overlay should fit terminal max-height, got ${lastRender.length}`);
46
+ } finally {
47
+ if (originalRowsDescriptor) {
48
+ Object.defineProperty(process.stdout, "rows", originalRowsDescriptor);
49
+ } else {
50
+ delete (process.stdout as { rows?: number }).rows;
51
+ }
52
+ }
53
+ });
54
+ });
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Regression test for #2675: completing-milestone dispatch rule must
3
- * block completion when VALIDATION verdict is "needs-remediation".
2
+ * Regression tests for non-passing VALIDATION verdicts: completing-milestone
3
+ * dispatch must block completion when VALIDATION needs remediation or attention.
4
4
  *
5
5
  * Without this guard, needs-remediation + allSlicesDone causes a loop:
6
6
  * complete-milestone dispatched → agent refuses (correct) → no SUMMARY
@@ -66,6 +66,93 @@ test("completing-milestone blocks when VALIDATION verdict is needs-remediation (
66
66
  }
67
67
  });
68
68
 
69
+ test("completing-milestone blocks when VALIDATION verdict is needs-attention (#5747)", async () => {
70
+ const base = mkdtempSync(join(tmpdir(), "gsd-attention-"));
71
+ mkdirSync(join(base, ".gsd", "milestones", "M001"), { recursive: true });
72
+
73
+ try {
74
+ writeFileSync(
75
+ join(base, ".gsd", "milestones", "M001", "M001-VALIDATION.md"),
76
+ [
77
+ "---",
78
+ "verdict: needs-attention",
79
+ "remediation_round: 0",
80
+ "---",
81
+ "",
82
+ "# Validation Report",
83
+ "",
84
+ "Acceptance proof is incomplete and needs human attention.",
85
+ ].join("\n"),
86
+ );
87
+
88
+ const ctx = {
89
+ mid: "M001",
90
+ midTitle: "Test Milestone",
91
+ basePath: base,
92
+ state: { phase: "completing-milestone" } as any,
93
+ prefs: {} as any,
94
+ session: undefined,
95
+ };
96
+
97
+ const result = await completingRule!.match(ctx);
98
+
99
+ assert.ok(result !== null, "rule should match");
100
+ assert.equal(result!.action, "stop", "should return stop action");
101
+ if (result!.action === "stop") {
102
+ assert.equal(result!.level, "warning", "should be warning level (pausable)");
103
+ assert.ok(
104
+ result!.reason.includes("needs-attention"),
105
+ "reason should mention needs-attention",
106
+ );
107
+ }
108
+ } finally {
109
+ rmSync(base, { recursive: true, force: true });
110
+ }
111
+ });
112
+
113
+ test("completing-milestone blocks when VALIDATION verdict is fail (#5920)", async () => {
114
+ const base = mkdtempSync(join(tmpdir(), "gsd-fail-verdict-"));
115
+ mkdirSync(join(base, ".gsd", "milestones", "M001"), { recursive: true });
116
+
117
+ try {
118
+ writeFileSync(
119
+ join(base, ".gsd", "milestones", "M001", "M001-VALIDATION.md"),
120
+ [
121
+ "---",
122
+ "verdict: fail",
123
+ "---",
124
+ "",
125
+ "# Validation Report",
126
+ "",
127
+ "Blocking failures remain unresolved.",
128
+ ].join("\n"),
129
+ );
130
+
131
+ const ctx = {
132
+ mid: "M001",
133
+ midTitle: "Test Milestone",
134
+ basePath: base,
135
+ state: { phase: "completing-milestone" } as any,
136
+ prefs: {} as any,
137
+ session: undefined,
138
+ };
139
+
140
+ const result = await completingRule!.match(ctx);
141
+
142
+ assert.ok(result !== null, "rule should match");
143
+ assert.equal(result!.action, "stop", "should return stop action");
144
+ if (result!.action === "stop") {
145
+ assert.equal(result!.level, "warning", "should be warning level (pausable)");
146
+ assert.ok(
147
+ result!.reason.includes('verdict is "fail"'),
148
+ "reason should mention fail verdict",
149
+ );
150
+ }
151
+ } finally {
152
+ rmSync(base, { recursive: true, force: true });
153
+ }
154
+ });
155
+
69
156
  test("completing-milestone proceeds normally when VALIDATION verdict is pass (#2675 guard)", async () => {
70
157
  const base = mkdtempSync(join(tmpdir(), "gsd-remediation-"));
71
158
  mkdirSync(join(base, ".gsd", "milestones", "M001"), { recursive: true });
@@ -0,0 +1,52 @@
1
+ // GSD-2 + Repository registry seam tests.
2
+
3
+ import test from "node:test";
4
+ import assert from "node:assert/strict";
5
+ import { mkdtempSync, mkdirSync, rmSync } from "node:fs";
6
+ import { tmpdir } from "node:os";
7
+ import { join } from "node:path";
8
+ import { createRepositoryRegistryFromPreferences } from "../repository-registry.ts";
9
+
10
+ test("repository registry includes implicit project root and declared child repos", (t) => {
11
+ const base = mkdtempSync(join(tmpdir(), "gsd-repo-registry-"));
12
+ t.after(() => rmSync(base, { recursive: true, force: true }));
13
+ mkdirSync(join(base, ".gsd"), { recursive: true });
14
+ mkdirSync(join(base, "frontend"), { recursive: true });
15
+ mkdirSync(join(base, "backend"), { recursive: true });
16
+
17
+ const registry = createRepositoryRegistryFromPreferences(base, {
18
+ workspace: {
19
+ mode: "parent",
20
+ repositories: {
21
+ frontend: { path: "frontend", role: "web UI", verification: ["npm test"] },
22
+ backend: { path: "./backend", role: "API", commit_policy: "skip" },
23
+ },
24
+ },
25
+ });
26
+
27
+ assert.equal(registry.mode, "parent");
28
+ assert.equal(registry.projectRoot, base);
29
+ assert.equal(registry.byId.get("project")?.root, base);
30
+ assert.equal(registry.byId.get("frontend")?.root, join(base, "frontend"));
31
+ assert.equal(registry.byId.get("backend")?.root, join(base, "backend"));
32
+ assert.deepEqual(registry.byId.get("frontend")?.verification, ["npm test"]);
33
+ assert.equal(registry.byId.get("backend")?.commitPolicy, "skip");
34
+ });
35
+
36
+ test("repository registry rejects repositories outside project root", (t) => {
37
+ const base = mkdtempSync(join(tmpdir(), "gsd-repo-registry-"));
38
+ t.after(() => rmSync(base, { recursive: true, force: true }));
39
+ mkdirSync(join(base, ".gsd"), { recursive: true });
40
+
41
+ assert.throws(
42
+ () => createRepositoryRegistryFromPreferences(base, {
43
+ workspace: {
44
+ mode: "parent",
45
+ repositories: {
46
+ unsafe: { path: "../outside" },
47
+ },
48
+ },
49
+ }),
50
+ /outside project root/,
51
+ );
52
+ });
@@ -36,7 +36,7 @@ function makeUatProject(): string {
36
36
  return base;
37
37
  }
38
38
 
39
- test("run-uat dispatch stops after three attempts without a verdict", async () => {
39
+ test("run-uat dispatch skips after three attempts without a verdict", async () => {
40
40
  const basePath = makeUatProject();
41
41
  const rule = DISPATCH_RULES.find((r) => r.name === "run-uat (post-completion)");
42
42
  assert.ok(rule, "run-uat dispatch rule is registered");
@@ -58,8 +58,7 @@ test("run-uat dispatch stops after three attempts without a verdict", async () =
58
58
  }
59
59
 
60
60
  const capped = await rule.match(ctx as any);
61
- assert.equal(capped?.action, "stop");
62
- assert.match(capped?.reason ?? "", /dispatched 3 times/);
61
+ assert.equal(capped?.action, "skip");
63
62
  assert.equal(getUatCount(basePath, "M001", "S01"), 4);
64
63
  } finally {
65
64
  rmSync(basePath, { recursive: true, force: true });
@@ -5,6 +5,7 @@ import test from "node:test";
5
5
  import assert from "node:assert/strict";
6
6
 
7
7
  import {
8
+ _hasEmptyAgentEndContent,
8
9
  _handleSessionSwitchAgentEnd,
9
10
  isBareClaudeCodeStreamAbortPlaceholder,
10
11
  isClaudeCodeSessionSwitchAbortMessage,
@@ -188,6 +189,15 @@ test("empty-content aborted during session-switch is silently ignored", () => {
188
189
  assert.equal(cancelledWith, null);
189
190
  });
190
191
 
192
+ test("missing agent_end content is classified as empty abort content", () => {
193
+ // Providers may omit content entirely for a late aborted agent_end. That is
194
+ // equivalent to empty content and must not pause/cancel the next unit.
195
+ assert.equal(_hasEmptyAgentEndContent(undefined), true);
196
+ assert.equal(_hasEmptyAgentEndContent(null), true);
197
+ assert.equal(_hasEmptyAgentEndContent([]), true);
198
+ assert.equal(_hasEmptyAgentEndContent([{ type: "text", text: "partial" }]), false);
199
+ });
200
+
191
201
  test("completed assistant content with aborted stopReason during session-switch is ignored", () => {
192
202
  // newSession() can abort the just-finished provider stream while the last
193
203
  // assistant message still carries the completed unit summary. That is a
@@ -3,7 +3,7 @@
3
3
  import { describe, it } from "node:test";
4
4
  import assert from "node:assert/strict";
5
5
  import { execFileSync, spawn } from "node:child_process";
6
- import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
6
+ import { existsSync, lstatSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs";
7
7
  import { join } from "node:path";
8
8
  import { tmpdir } from "node:os";
9
9
 
@@ -12,8 +12,12 @@ import { validatePreferences } from "../preferences-validation.ts";
12
12
  import {
13
13
  _buildSliceWorkerEnvForTest,
14
14
  _resolveSliceParallelMaxWorkersForTest,
15
+ getSliceOrchestratorState,
15
16
  restoreSliceState,
17
+ resetSliceOrchestrator,
16
18
  SLICE_WORKER_AUTO_ARGS,
19
+ startSliceParallel,
20
+ stopSliceParallel,
17
21
  } from "../slice-parallel-orchestrator.ts";
18
22
 
19
23
  function readLinuxProcessStartFingerprint(pid: number): string | null {
@@ -50,6 +54,23 @@ function makeTempProject(): string {
50
54
  return basePath;
51
55
  }
52
56
 
57
+ function runGit(basePath: string, args: string[]): string {
58
+ return execFileSync("git", args, {
59
+ cwd: basePath,
60
+ stdio: ["ignore", "pipe", "pipe"],
61
+ encoding: "utf-8",
62
+ }).trim();
63
+ }
64
+
65
+ function initGitProject(basePath: string): void {
66
+ runGit(basePath, ["init", "--initial-branch=main"]);
67
+ runGit(basePath, ["config", "user.email", "test@example.com"]);
68
+ runGit(basePath, ["config", "user.name", "Test User"]);
69
+ writeFileSync(join(basePath, "README.md"), "initial\n", "utf-8");
70
+ runGit(basePath, ["add", "README.md"]);
71
+ runGit(basePath, ["commit", "-m", "initial"]);
72
+ }
73
+
53
74
  function writeSliceOrchestratorState(
54
75
  basePath: string,
55
76
  worker: {
@@ -111,6 +132,56 @@ describe("slice worker launch contract", () => {
111
132
  });
112
133
  });
113
134
 
135
+ describe("slice-parallel stale worktree handling", () => {
136
+ it("replaces a stale slice worktree before spawning the worker", async () => {
137
+ const basePath = makeTempProject();
138
+ const oldGsdBinPath = process.env.GSD_BIN_PATH;
139
+ try {
140
+ initGitProject(basePath);
141
+ const workerBin = join(basePath, "fake-worker.js");
142
+ writeFileSync(
143
+ workerBin,
144
+ [
145
+ "process.on('SIGTERM', () => process.exit(0));",
146
+ "setInterval(() => {}, 1000);",
147
+ ].join("\n"),
148
+ "utf-8",
149
+ );
150
+ process.env.GSD_BIN_PATH = workerBin;
151
+
152
+ const staleWorktree = join(basePath, ".gsd", "worktrees", "M900-S01");
153
+ mkdirSync(staleWorktree, { recursive: true });
154
+ writeFileSync(join(staleWorktree, ".git"), "gitdir: /tmp/not-this-repo\n", "utf-8");
155
+ writeFileSync(join(staleWorktree, "stale-marker"), "stale\n", "utf-8");
156
+
157
+ const result = await startSliceParallel(basePath, "M900", [{ id: "S01" }], { maxWorkers: 1 });
158
+
159
+ assert.deepEqual(result, { started: ["S01"], errors: [] });
160
+ assert.equal(existsSync(join(staleWorktree, "stale-marker")), false);
161
+ assert.equal(lstatSync(join(staleWorktree, ".git")).isFile(), true);
162
+ assert.match(readFileSync(join(staleWorktree, ".git"), "utf-8"), /^gitdir: /);
163
+ assert.equal(getSliceOrchestratorState()?.active, true);
164
+ } finally {
165
+ const child = getSliceOrchestratorState()?.workers.get("S01")?.process;
166
+ if (child && child.exitCode === null) {
167
+ await new Promise<void>((resolve) => {
168
+ const timeout = setTimeout(resolve, 500);
169
+ child.once("exit", () => {
170
+ clearTimeout(timeout);
171
+ resolve();
172
+ });
173
+ child.kill("SIGTERM");
174
+ });
175
+ }
176
+ stopSliceParallel();
177
+ resetSliceOrchestrator();
178
+ if (oldGsdBinPath === undefined) delete process.env.GSD_BIN_PATH;
179
+ else process.env.GSD_BIN_PATH = oldGsdBinPath;
180
+ rmSync(basePath, { recursive: true, force: true });
181
+ }
182
+ });
183
+ });
184
+
114
185
  describe("slice-parallel-orchestrator recovery identity", () => {
115
186
  it("rejects a live PID when the process start fingerprint does not match", () => {
116
187
  const basePath = makeTempProject();
@@ -0,0 +1,113 @@
1
+ // GSD-2 — Smart entry routing behavior tests.
2
+ // Verifies guided wizard choices resolve to the correct execution path.
3
+
4
+ import test from "node:test";
5
+ import assert from "node:assert/strict";
6
+
7
+ import {
8
+ resolveActiveTaskChoiceRoute,
9
+ resolveGuidedExecuteLaunchMode,
10
+ type ActiveTaskChoice,
11
+ type ActiveTaskRoute,
12
+ type SmartEntryIsolationMode,
13
+ } from "../smart-entry-routing.ts";
14
+
15
+ test("guided execute route enters auto step bootstrap only for worktree isolation", () => {
16
+ const cases: Array<{
17
+ isolationMode: SmartEntryIsolationMode;
18
+ expectedRoute: ActiveTaskRoute;
19
+ }> = [
20
+ {
21
+ isolationMode: "worktree",
22
+ expectedRoute: {
23
+ kind: "auto-bootstrap",
24
+ verboseMode: false,
25
+ options: {
26
+ step: true,
27
+ milestoneLock: "M001",
28
+ },
29
+ },
30
+ },
31
+ {
32
+ isolationMode: "none",
33
+ expectedRoute: {
34
+ kind: "guided-dispatch",
35
+ unitType: "execute-task",
36
+ },
37
+ },
38
+ {
39
+ isolationMode: "branch",
40
+ expectedRoute: {
41
+ kind: "guided-dispatch",
42
+ unitType: "execute-task",
43
+ },
44
+ },
45
+ ];
46
+
47
+ for (const testCase of cases) {
48
+ assert.deepEqual(
49
+ resolveActiveTaskChoiceRoute({
50
+ choice: "execute",
51
+ isolationMode: testCase.isolationMode,
52
+ milestoneId: "M001",
53
+ }),
54
+ testCase.expectedRoute,
55
+ );
56
+ }
57
+ });
58
+
59
+ test("active task smart entry choices resolve to explicit routes", () => {
60
+ const cases: Array<{
61
+ choice: ActiveTaskChoice;
62
+ expectedRoute: ActiveTaskRoute;
63
+ }> = [
64
+ {
65
+ choice: "auto",
66
+ expectedRoute: {
67
+ kind: "auto-bootstrap",
68
+ verboseMode: false,
69
+ },
70
+ },
71
+ {
72
+ choice: "status",
73
+ expectedRoute: {
74
+ kind: "status",
75
+ },
76
+ },
77
+ {
78
+ choice: "milestone_actions",
79
+ expectedRoute: {
80
+ kind: "milestone-actions",
81
+ },
82
+ },
83
+ ];
84
+
85
+ for (const testCase of cases) {
86
+ assert.deepEqual(
87
+ resolveActiveTaskChoiceRoute({
88
+ choice: testCase.choice,
89
+ isolationMode: "worktree",
90
+ milestoneId: "M001",
91
+ }),
92
+ testCase.expectedRoute,
93
+ );
94
+ }
95
+ });
96
+
97
+ test("active task route rejects invalid choices from untyped callers", () => {
98
+ assert.throws(
99
+ () =>
100
+ resolveActiveTaskChoiceRoute({
101
+ choice: "not_yet" as ActiveTaskChoice,
102
+ isolationMode: "worktree",
103
+ milestoneId: "M001",
104
+ }),
105
+ /Invalid ActiveTaskChoice: not_yet/,
106
+ );
107
+ });
108
+
109
+ test("guided execute launch mode remains a small compatibility helper", () => {
110
+ assert.equal(resolveGuidedExecuteLaunchMode("worktree"), "auto-step");
111
+ assert.equal(resolveGuidedExecuteLaunchMode("none"), "guided-dispatch");
112
+ assert.equal(resolveGuidedExecuteLaunchMode("branch"), "guided-dispatch");
113
+ });
@@ -4,7 +4,10 @@ import { readFileSync } from "node:fs";
4
4
  import { resolve } from "node:path";
5
5
 
6
6
  import { _withDetachedAutoKeepaliveForTest } from "../auto.ts";
7
- import { _scheduleAutoStartAfterIdleForTest } from "../guided-flow.ts";
7
+ import {
8
+ _scheduleAutoStartAfterIdleForTest,
9
+ resolveGuidedExecuteLaunchMode,
10
+ } from "../guided-flow.ts";
8
11
 
9
12
  const gsdDir = resolve(import.meta.dirname, "..");
10
13
 
@@ -64,6 +67,24 @@ test("bare /gsd stays in the foreground smart-entry flow (#5125 regression)", ()
64
67
  );
65
68
  });
66
69
 
70
+ test("guided execute uses auto step bootstrap when worktree isolation is enabled", () => {
71
+ assert.equal(
72
+ resolveGuidedExecuteLaunchMode("worktree"),
73
+ "auto-step",
74
+ "guided execute must enter auto bootstrap so the milestone worktree is created before execution",
75
+ );
76
+ assert.equal(
77
+ resolveGuidedExecuteLaunchMode("none"),
78
+ "guided-dispatch",
79
+ "non-isolated projects can keep the foreground guided dispatch path",
80
+ );
81
+ assert.equal(
82
+ resolveGuidedExecuteLaunchMode("branch"),
83
+ "guided-dispatch",
84
+ "this regression fix is scoped to worktree isolation",
85
+ );
86
+ });
87
+
67
88
  test("auto bootstrap validates blocked directories before touching .gsd migration state", () => {
68
89
  const autoSrc = readGsdFile("auto.ts");
69
90
  const autoStartSrc = readGsdFile("auto-start.ts");
@@ -99,19 +120,49 @@ test("auto bootstrap validates blocked directories before touching .gsd migratio
99
120
 
100
121
  test("fresh start registers the auto worker before bootstrap enters worktree flow (#5405)", () => {
101
122
  const autoSrc = readGsdFile("auto.ts");
123
+ const autoStartSrc = readGsdFile("auto-start.ts");
102
124
  const startAutoIdx = autoSrc.indexOf("export async function startAuto(");
103
125
  const startAutoBody = autoSrc.slice(startAutoIdx);
126
+ const bootstrapIdx = autoStartSrc.indexOf("export async function bootstrapAutoSession(");
127
+ const bootstrapBody = autoStartSrc.slice(bootstrapIdx);
104
128
 
105
- const preBootstrapRegisterIdx = startAutoBody.indexOf("registerAutoWorkerForSession(s, base);");
106
129
  const bootstrapCallIdx = startAutoBody.indexOf("const ready = await bootstrapAutoSession(");
130
+ const preBootstrapBody = startAutoBody.slice(0, bootstrapCallIdx);
131
+ const preBootstrapRegisterIdx = preBootstrapBody.lastIndexOf("registerAutoWorkerForSession(s, base);");
132
+ const resumeSectionIdx = startAutoBody.indexOf("if (s.paused) {");
133
+ const freshStartSectionIdx = startAutoBody.indexOf("// ── Fresh start path — delegated to auto-start.ts ──");
134
+ const resumeBody = startAutoBody.slice(resumeSectionIdx, freshStartSectionIdx);
135
+ const resumeDbOpenIdx = resumeBody.indexOf("await openProjectDbIfPresent(base);");
136
+ const resumeRegisterIdx = resumeBody.indexOf("registerAutoWorkerForSession(s, base);");
137
+ const resumeEnterMilestoneIdx = resumeBody.indexOf("buildLifecycle().enterMilestone");
138
+ const dbOpenIdx = bootstrapBody.indexOf("await openProjectDbIfPresent(base);");
139
+ const bootstrapRegisterIdx = bootstrapBody.indexOf("registerAutoWorkerForSession(base);");
140
+ const enterMilestoneIdx = bootstrapBody.indexOf("buildLifecycle().enterMilestone");
107
141
 
108
142
  assert.ok(startAutoIdx > -1, "startAuto should exist");
109
143
  assert.ok(preBootstrapRegisterIdx > -1, "startAuto should register worker before bootstrap");
110
144
  assert.ok(bootstrapCallIdx > -1, "startAuto should call bootstrapAutoSession");
145
+ assert.ok(resumeSectionIdx > -1, "startAuto should have resume milestone entry flow");
146
+ assert.ok(freshStartSectionIdx > resumeSectionIdx, "resume assertions should be scoped before fresh start");
147
+ assert.ok(resumeDbOpenIdx > -1, "resume should open DB before milestone entry");
148
+ assert.ok(resumeRegisterIdx > -1, "resume should register worker before milestone entry");
149
+ assert.ok(resumeEnterMilestoneIdx > -1, "resume should enter milestones through lifecycle");
150
+ assert.ok(bootstrapIdx > -1, "bootstrapAutoSession should exist");
151
+ assert.ok(dbOpenIdx > -1, "bootstrap should open the project DB");
152
+ assert.ok(bootstrapRegisterIdx > -1, "bootstrap should register worker after DB open");
153
+ assert.ok(enterMilestoneIdx > -1, "bootstrap should enter milestones through lifecycle");
111
154
  assert.ok(
112
155
  preBootstrapRegisterIdx < bootstrapCallIdx,
113
156
  "worker registration must happen before bootstrap so enterMilestone can claim milestone leases on first entry",
114
157
  );
158
+ assert.ok(
159
+ dbOpenIdx < bootstrapRegisterIdx && bootstrapRegisterIdx < enterMilestoneIdx,
160
+ "bootstrap must open DB and register worker before first enterMilestone",
161
+ );
162
+ assert.ok(
163
+ resumeDbOpenIdx < resumeRegisterIdx && resumeRegisterIdx < resumeEnterMilestoneIdx,
164
+ "resume must open DB and register worker before first enterMilestone",
165
+ );
115
166
  });
116
167
 
117
168
  test("startAutoDetached reports failures asynchronously (#3733)", () => {
@@ -271,6 +271,11 @@ describe("#2945 Bug 3: mergeAndExit must teardown worktree after successful merg
271
271
  // a real git fixture and verify the worktree directory is removed
272
272
  // from disk after the merge.
273
273
  const tmpBase = realpathSync(mkdtempSync(join(tmpdir(), "gsd-2945-bug3-")));
274
+ // ADR-016 phase 3 (#5693): Lifecycle.restoreToProjectRoot now chdirs to
275
+ // s.originalBasePath. Save cwd before the test so we can restore it
276
+ // before rmSync removes tmpBase — otherwise the next test in this file
277
+ // inherits a deleted cwd and process.cwd() throws ENOENT (uv_cwd).
278
+ const prevCwd = process.cwd();
274
279
  try {
275
280
  const git = (args: string[]): void => {
276
281
  execFileSync("git", args, { cwd: tmpBase, stdio: "pipe" });
@@ -325,6 +330,7 @@ describe("#2945 Bug 3: mergeAndExit must teardown worktree after successful merg
325
330
  `teardownAutoWorktree must be called after successful merge — worktree directory at ${wt} should be removed`,
326
331
  );
327
332
  } finally {
333
+ try { process.chdir(prevCwd); } catch { /* noop */ }
328
334
  try { rmSync(tmpBase, { recursive: true, force: true }); } catch { /* noop */ }
329
335
  }
330
336
  });