@overdeck/desktop 0.45.21 → 0.45.23

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 (387) hide show
  1. package/package.json +1 -1
  2. package/server/{acceptance-criteria-CJIFA8Vg.js → acceptance-criteria-DOA0KgXx.js} +5 -5
  3. package/server/{advancing-selfheal-CPOBO5ZS.js → advancing-selfheal-BBu6DSNm.js} +6 -6
  4. package/server/{agent-gc-D6PUckBB.js → agent-gc-BV1q_2EV.js} +4 -4
  5. package/server/agent-state-Bg0lhqwj.js +3 -0
  6. package/server/{agent-state-service-DHwemt96.js → agent-state-service-CnzFKSAQ.js} +1 -1
  7. package/server/{agent-state-service-6MFQqnFy.js → agent-state-service-HoK8U4jW.js} +5 -5
  8. package/server/{agents-DbrHWunF.js → agents-B4Bjbkfv.js} +4 -4
  9. package/server/agents-FlIgQ3ql.js +3 -0
  10. package/server/{archive-planning-BOnwJq8M.js → archive-planning-DYrYojxl.js} +31 -7
  11. package/server/{archive-planning-MPpvQJL4.js → archive-planning-zkJb3BeM.js} +1 -1
  12. package/server/{artifact-index-jobs-BOoySTKD.js → artifact-index-jobs-C-xy7Z5v.js} +2 -2
  13. package/server/{backlog-auto-trigger-BUaFI44J.js → backlog-auto-trigger-GtG71X8H.js} +3 -3
  14. package/server/{behavior-Dg-D8eBG.js → behavior-B_-4EKF3.js} +2 -2
  15. package/server/{briefing-freshness-OouGbJ7d.js → briefing-freshness-DWdW7vUm.js} +2 -2
  16. package/server/{build-info-27NlbKhV.js → build-info-BT096lEl.js} +3 -3
  17. package/server/{build-info-Cv6CI7Gu.js → build-info-DgTqZkL5.js} +1 -1
  18. package/server/{checkpoint-manager-C7mFCY_E.js → checkpoint-manager-B7Bt29J0.js} +1 -1
  19. package/server/{checkpoint-manager-D64fCC4p.js → checkpoint-manager-DDqcGyu8.js} +2 -2
  20. package/server/checkpoint-worker.js +1 -1
  21. package/server/{checkpoints-Vh-J15ge.js → checkpoints-C-AXLfYT.js} +2 -2
  22. package/server/{checkpoints-DwZqT2qQ.js → checkpoints-CpgCjAlN.js} +1 -1
  23. package/server/{claude-hooks-provision-CS5W_dhI.js → claude-hooks-provision-C8wdRnN1.js} +1 -1
  24. package/server/{claude-hooks-provision-BVLGfHrv.js → claude-hooks-provision-but-_qGY.js} +2 -2
  25. package/server/{claude-permissions-C2OrLYKL.js → claude-permissions-H_5wHQZQ.js} +2 -2
  26. package/server/{claude-settings-overlay-DWXjafJh.js → claude-settings-overlay-BTENVmYf.js} +1 -1
  27. package/server/{claude-settings-overlay-DX-fMFpC.js → claude-settings-overlay-CbSz0Dvb.js} +2 -2
  28. package/server/cli-BsVIHwzC.js +3 -0
  29. package/server/{cli-mvpEOb3w.js → cli-vBeXbPrq.js} +9 -9
  30. package/server/{cliproxy-Dvsr4ZkW.js → cliproxy-Bgb2XCqi.js} +2 -2
  31. package/server/{cliproxy-7g1nObvB.js → cliproxy-DW0V86F8.js} +1 -1
  32. package/server/{close-issue-8F6uawYj.js → close-issue-Dn_4c4G8.js} +5 -5
  33. package/server/{closed-issue-reaper-BhV-r-tC.js → closed-issue-reaper-CWpY2uBw.js} +1 -1
  34. package/server/{closed-issue-reaper-BaYQYF6w.js → closed-issue-reaper-hANY_ehE.js} +9 -9
  35. package/server/codex-Dg7Is5yb.js +3 -0
  36. package/server/{codex-D_UBEOwL.js → codex-TmSi-yTv.js} +30 -8
  37. package/server/{codex-parser-BTzlOZiV.js → codex-parser-C4gSH-IR.js} +2 -2
  38. package/server/{config-CrduXs4a.js → config-CCvjQf27.js} +2 -2
  39. package/server/{config-nAB_F-Gp.js → config-DUIhMN_T.js} +1 -1
  40. package/server/{config-G1TOMJZA.js → config-DjLOdbgT.js} +2 -2
  41. package/server/{config-yaml-Ciyp2mYe.js → config-yaml-DvyMuOle.js} +177 -211
  42. package/server/{conflict-gate-BKalpcjL.js → conflict-gate-BSJkNTdp.js} +1 -1
  43. package/server/{conflict-gate-BLUNMs1i.js → conflict-gate-CmrYpa47.js} +3 -3
  44. package/server/{context-layers-YNpf6Q_I.js → context-layers-B3Nt58jl.js} +2 -2
  45. package/server/{context-layers-Cg9ZgVfx.js → context-layers-ZYFcWiyc.js} +3 -3
  46. package/server/{control-settings-D_79A6gp.js → control-settings-aP1ANIlI.js} +4 -4
  47. package/server/{conversation-compaction-DiuZbIUB.js → conversation-compaction-CNbTLB86.js} +8 -8
  48. package/server/{conversation-compaction-CMIeWW4_.js → conversation-compaction-DiG5zWQq.js} +1 -1
  49. package/server/{conversation-service-DQybSPUK.js → conversation-service-Du-MTNpJ.js} +6 -6
  50. package/server/{conversation-service-CWk8mEym.js → conversation-service-Up7FEzIC.js} +1 -1
  51. package/server/{conversations-BJ-t3BRm.js → conversations-6mPANqvL.js} +1 -1
  52. package/server/{conversations-BUgGvqVL.js → conversations-DbOs1e9Q.js} +4 -4
  53. package/server/{cost-jJ2cgDcG.js → cost-CW4WSe72.js} +3 -3
  54. package/server/{cost-Drm7qeD5.js → cost-Ca0YTWDw.js} +18 -2
  55. package/server/{cost-sync-DzHP6zaR.js → cost-sync-C0VdGme1.js} +3 -3
  56. package/server/{dag-DIji6O2b.js → dag-CdOjJVDT.js} +9 -9
  57. package/server/{dangerous-git-ops-BebB-61h.js → dangerous-git-ops-CT-IypG3.js} +1 -1
  58. package/server/dashboard-db-worker.js +7 -7
  59. package/server/{deacon-pleYrvIm.js → deacon-DYSEJb48.js} +3 -3
  60. package/server/{deacon-nudge-log-C5VCKtyi.js → deacon-nudge-log-Bjg8U4Y9.js} +3 -3
  61. package/server/{deacon-1s7bM5zn.js → deacon-pRnyD5w9.js} +1133 -474
  62. package/server/deacon-swarm-9jRLS5Ke.js +2 -0
  63. package/server/{deacon-swarm-DmA3rJ7k.js → deacon-swarm-DftYRDo8.js} +17 -17
  64. package/server/deacon.js +8 -8
  65. package/server/{deploy-patrol-DmM6F-yw.js → deploy-patrol-Bjsho_ha.js} +136 -19
  66. package/server/{deploy-window-ClLq1RYf.js → deploy-window-CM6W1-c6.js} +1 -1
  67. package/server/{deploy-window-jw4S_Y-c.js → deploy-window-DeP_OIRk.js} +77 -10
  68. package/server/{dev-supervisor-Do2Stz49.js → dev-supervisor-BpMoHlkR.js} +2 -2
  69. package/server/{devcontainer-renderer-D8ylupco.js → devcontainer-renderer-CtUgrVKW.js} +3 -3
  70. package/server/dist-Bd3vn0Hw.js +3 -0
  71. package/server/{dist-yfR7G1BL.js → dist-DyRx4cI7.js} +1 -1
  72. package/server/{docker-ClwPQaba.js → docker-BK7HIcBj.js} +2 -2
  73. package/server/{dod-BLphkhjs.js → dod-BrSfUHm0.js} +1 -1
  74. package/server/{ensure-devcontainer-BA3bICoY.js → ensure-devcontainer-DRqaAkBR.js} +1 -1
  75. package/server/{ensure-devcontainer-CFpQatOc.js → ensure-devcontainer-DseivYEy.js} +4 -4
  76. package/server/{esm-shims-BZw-fTQ6.js → esm-shims-CbI3BVkl.js} +1 -1
  77. package/server/{event-store-DABarGNz.js → event-store-Cr5PQwFC.js} +1 -1
  78. package/server/{event-store-BVnON3vf.js → event-store-tdiY5eDZ.js} +3 -3
  79. package/server/{events-CmERlnwn.js → events-CC1dgUpx.js} +3 -3
  80. package/server/{events-LGeUehYW.js → events-CvvGK6LT.js} +1 -1
  81. package/server/{factory-CQNprtHe.js → factory-CynerjXO.js} +50 -13
  82. package/server/{feature-registry-population-D9Z3tYSa.js → feature-registry-population-B0pmAz0a.js} +4 -4
  83. package/server/{feature-registry-storage-BWymOgXE.js → feature-registry-storage-_wUBRD3J.js} +2 -2
  84. package/server/{features--fOza5g5.js → features-Dhxz-wLc.js} +2 -2
  85. package/server/{feedback-target-Dqik2WTe.js → feedback-target-CPS15Vte.js} +7 -7
  86. package/server/{feedback-target-Dn9vfPpz.js → feedback-target-iygZwmMc.js} +1 -1
  87. package/server/{feedback-writer-Wlq5-qgS.js → feedback-writer-C9b6ccN1.js} +6 -5
  88. package/server/{feedback-writer-DDQNV8uc.js → feedback-writer-qmiMbqTZ.js} +1 -1
  89. package/server/{flywheel-Q-38YhZG.js → flywheel-DMCUzDWg.js} +1 -1
  90. package/server/{flywheel-1Wd8WDlh.js → flywheel-DSSpWmqF.js} +13 -13
  91. package/server/{flywheel-DPUc8r3V.js → flywheel-DcBkQvgE.js} +14 -14
  92. package/server/{flywheel-merge-order-CeBuX0EJ.js → flywheel-merge-order-C-6zRLvM.js} +1 -1
  93. package/server/{flywheel-merge-order-4SqOXFAr.js → flywheel-merge-order-DxbQKE1d.js} +8 -8
  94. package/server/forge-B-ZWyTRm.js +2 -0
  95. package/server/{forge-DBbDpiYc.js → forge-Ch9gCFod.js} +2 -2
  96. package/server/{from-hh6vTBGl.js → from-CJ_aH5jD.js} +1 -1
  97. package/server/{fts-db-6ponMie2.js → fts-db-CKgg0VKg.js} +2 -2
  98. package/server/{fts-operations-KIRK165y.js → fts-operations-BrL_VTRr.js} +2 -2
  99. package/server/git-utils-BVa07a4a.js +198 -0
  100. package/server/{git-utils-DmF5xkj8.js → git-utils-Dry_Ka_D.js} +1 -1
  101. package/server/{github-app-B3yfECo8.js → github-app-CMBdIFBQ.js} +11 -3
  102. package/server/{github-app-CeSVFL6C.js → github-app-CPfoFAdV.js} +1 -1
  103. package/server/{github-client-Dslipypz.js → github-client--XVlDpwM.js} +2 -2
  104. package/server/{github-client-4A6FgA8O.js → github-client-B4QsdE-X.js} +1 -1
  105. package/server/{github-pr-lookup-DBP0YHMr.js → github-pr-lookup-BRbDW-qk.js} +2 -2
  106. package/server/harness-binary-CVio2m-u.js +106 -0
  107. package/server/{harness-resolve-BGpO-OVM.js → harness-resolve-qHJBhy3Z.js} +9 -15
  108. package/server/{health-events-CZGZ5I-A.js → health-events-C9B8y1Hm.js} +2 -2
  109. package/server/{health-events-CnwV_SSz.js → health-events-CpfvuVmm.js} +1 -1
  110. package/server/{hooks-CoNscX84.js → hooks-DUXw8A0-.js} +2 -2
  111. package/server/{hooks-DvX33gY_.js → hooks-ltecuFqZ.js} +1 -1
  112. package/server/{hume-DSJt5eA_.js → hume-BEq0bUDg.js} +2 -2
  113. package/server/hume-B_DbflNM.js +3 -0
  114. package/server/{idle-stack-reaper-5DVRoY6P.js → idle-stack-reaper-D7w9t3fE.js} +1 -1
  115. package/server/{idle-stack-reaper-BfL8HqYy.js → idle-stack-reaper-w1ISSlhs.js} +2 -2
  116. package/server/{in-flight-guard-tVGiI5ee.js → in-flight-guard-aQ1IxeI3.js} +2 -2
  117. package/server/{infra-DN2wSxle.js → infra-CzaSOgul.js} +4 -4
  118. package/server/{injection-DtlT8Akv.js → injection-DZ0PfYa4.js} +7 -7
  119. package/server/{injection-DK9zh_HL.js → injection-oNZeoDhL.js} +1 -1
  120. package/server/{inspect-agent-DKByUS_F.js → inspect-agent-DJKLWcVT.js} +15 -11
  121. package/server/inspect-agent-ch-F-5Ci.js +2 -0
  122. package/server/{internal-token-DhfFiwW7.js → internal-token-Bb4XeV2x.js} +2 -2
  123. package/server/{internal-token-7bYL5v6K.js → internal-token-DXdfprGr.js} +1 -1
  124. package/server/{io-BiM-7Zsx.js → io-B3_AHDfr.js} +160 -184
  125. package/server/{issue-closed-Dfw3QDyZ.js → issue-closed-zhdvQicO.js} +7 -7
  126. package/server/{issue-lifecycle-B7HZWnTA.js → issue-lifecycle-CreaCkjW.js} +22 -22
  127. package/server/{issue-lifecycle-ytsEdDlK.js → issue-lifecycle-Dy4vd0Oa.js} +1 -1
  128. package/server/{issue-service-singleton-CPESc4Or.js → issue-service-singleton-B5ushCvE.js} +8 -8
  129. package/server/{issue-service-singleton-D5EB5eYr.js → issue-service-singleton-DabvBWUp.js} +1 -1
  130. package/server/{issues-XYtFMxrH.js → issues-B6ToV6x1.js} +2 -2
  131. package/server/{jsonl-parser-DJV2eZUP.js → jsonl-parser-Dhflo1SH.js} +3 -3
  132. package/server/{label-cleanup-CJ4m8iRU.js → label-cleanup-BKPJm4Hv.js} +3 -3
  133. package/server/{label-reconciler-CNf3Ylm3.js → label-reconciler-DdWbHEBu.js} +4 -4
  134. package/server/{launcher-generator-5DJRiovn.js → launcher-generator-CHVm7bGT.js} +10 -9
  135. package/server/{layers-cZx7ibtV.js → layers-DzxSTGNA.js} +2 -2
  136. package/server/lifecycle-DfeyBDwA.js +121 -0
  137. package/server/lifecycle-io-Bsnr2K4F.js +3 -0
  138. package/server/{lifecycle-io-DMurK4oM.js → lifecycle-io-D8iNBcux.js} +37 -37
  139. package/server/{lifecycle-CE7619Xw.js → lifecycle-sycO16hj.js} +6 -6
  140. package/server/{linear-client-BLyN-NiP.js → linear-client-D4zqMnX7.js} +2 -2
  141. package/server/{linear-client-Bj1l4FOA.js → linear-client-DqhDQO9k.js} +1 -1
  142. package/server/memory-fts-worker.js +1 -1
  143. package/server/{merge-hSC2BENe.js → merge-C_ZEhbqI.js} +3 -3
  144. package/server/{merge-CwX2_AWm.js → merge-DK23JEdS.js} +1 -1
  145. package/server/{merge-agent-CnORPiri.js → merge-agent-BQM3a8z5.js} +1 -1
  146. package/server/{merge-agent-DnBsms_V.js → merge-agent-XrB80vfT.js} +369 -213
  147. package/server/{merge-batch-C2w2U2eK.js → merge-batch-Bwoyr8Je.js} +1 -1
  148. package/server/{merge-blockers-DhRgh76x.js → merge-blockers-BsFjGrQ8.js} +2 -2
  149. package/server/merge-ops-DlB1IM0Y.js +2 -0
  150. package/server/{merge-rebase-CE-ZyOMY.js → merge-rebase-C1KIVr0s.js} +2 -2
  151. package/server/{merge-set-D7YNU1ZB.js → merge-set-DLz0MkGT.js} +3 -3
  152. package/server/{merge-set-DHkzPCJU.js → merge-set-DnSYdBEp.js} +1 -1
  153. package/server/{merge-sync-De1FYva5.js → merge-sync-DZ9dojJn.js} +2 -2
  154. package/server/{merge-sync-CpGA9Kg7.js → merge-sync-SSv3E-pl.js} +1 -1
  155. package/server/{merge-train-SvkRJZ-k.js → merge-train-DxDfBTjr.js} +3 -3
  156. package/server/{merge-train-deps-CECJTElu.js → merge-train-deps-CyYQUksx.js} +4 -4
  157. package/server/{merge-verification-B3meGcXF.js → merge-verification-CSizH3HY.js} +4 -4
  158. package/server/{multipart-parser-ByTMgYV5.js → multipart-parser-Dt8YPN5S.js} +2 -2
  159. package/server/{no-resume-mode-BnInAFKs.js → no-resume-mode-Cx3K0hHi.js} +11 -8
  160. package/server/node_modules/.package-lock.json +5 -5
  161. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/README.md +3 -3
  162. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.d.ts.map +1 -1
  163. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js +2 -2
  164. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js.map +1 -1
  165. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +5 -5
  166. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeChildProcessSpawner.ts +6 -8
  167. package/server/{orphan-proposed-reconciler-CAfuWTA1.js → orphan-proposed-reconciler-BTkDrl4R.js} +1 -1
  168. package/server/{orphan-proposed-reconciler-AxAGUouN.js → orphan-proposed-reconciler-neK8dHQk.js} +23 -14
  169. package/server/package-lock.json +6 -6
  170. package/server/package.json +1 -1
  171. package/server/{pan-dir-Rw17YjT1.js → pan-dir-DeVUgwA7.js} +78 -58
  172. package/server/{paths-FP8v3lTz.js → paths-_zEts6wc.js} +2 -2
  173. package/server/{pickup-xi3KTLaJ.js → pickup-Dd0Znxxy.js} +2 -2
  174. package/server/{pipeline-membership-BtKMNY7v.js → pipeline-membership-0HaEGDlH.js} +190 -68
  175. package/server/{pipeline-notifier-dQ-U4NSb.js → pipeline-notifier-6iCJplFZ.js} +1 -1
  176. package/server/{pipeline-notifier-BM2HLF7B.js → pipeline-notifier-D0ykk59O.js} +2 -2
  177. package/server/{project-pipelines-B59NfN44.js → project-pipelines-2sK1apsO.js} +2 -2
  178. package/server/projects-9SkRpES9.js +3 -0
  179. package/server/{prompts-CbqaVjbe.js → prompts-Dp4Tpk39.js} +2 -2
  180. package/server/providers-DKkBXhxU.js +3 -0
  181. package/server/{providers-d3pwXGVE.js → providers-DV7ec8l7.js} +7 -7
  182. package/server/public/assets/{chunk-BO2N2NFS-BxYSL7J-.js → chunk-BO2N2NFS-CltymLRg.js} +4 -4
  183. package/server/public/assets/{diagram-OG6HWLK6-C_F9Q2as.js → diagram-OG6HWLK6-D2f6pjgA.js} +1 -1
  184. package/server/public/assets/{dist-DQNg4CiF.js → dist-BWR4qFiV.js} +1 -1
  185. package/server/public/assets/{dist-CLSlc6cV.js → dist-DEmlBBNQ.js} +3 -3
  186. package/server/public/assets/{ganttDiagram-6RSMTGT7-Cq0my-0C.js → ganttDiagram-6RSMTGT7-DnfiViPK.js} +1 -1
  187. package/server/public/assets/{highlighted-body-OFNGDK62-eZC03dGh.js → highlighted-body-OFNGDK62-B8Wrmj9H.js} +1 -1
  188. package/server/public/assets/index-CUr1xv8w.css +1 -0
  189. package/server/public/assets/{index-SLYGA8AQ.js → index-CsSuZQBI.js} +148 -145
  190. package/server/public/assets/{linear-6Fi3qnGg.js → linear-C9zFQpkX.js} +1 -1
  191. package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +1 -0
  192. package/server/public/assets/{pieDiagram-4H26LBE5-Dpmc6xsv.js → pieDiagram-4H26LBE5-lR8H7Yjd.js} +1 -1
  193. package/server/public/assets/{prod-ojHllFvN.js → prod-B1jCQihw.js} +4 -4
  194. package/server/public/assets/{quadrantDiagram-W4KKPZXB-Ulr9gON5.js → quadrantDiagram-W4KKPZXB-CVQ2guem.js} +1 -1
  195. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CwdHGXfL.js → sankeyDiagram-5OEKKPKP-eD1RB4gm.js} +1 -1
  196. package/server/public/assets/{xychartDiagram-2RQKCTM6-r-bEDzJh.js → xychartDiagram-2RQKCTM6-ChEC6dQn.js} +1 -1
  197. package/server/public/index.html +54 -10
  198. package/server/{pull-requests-D3N6HQzI.js → pull-requests--Ib2jTgy.js} +1 -1
  199. package/server/{pull-requests-CjjPj7v6.js → pull-requests-CXIhdCYD.js} +13 -11
  200. package/server/{queries-B5hl7lMQ.js → queries-6d7Cdtm7.js} +723 -110
  201. package/server/{rally-Dp0Gb1DN.js → rally-B708-nZn.js} +3 -3
  202. package/server/{rally-api-DGaFz5L5.js → rally-api-nY0ZANw3.js} +2 -2
  203. package/server/{rally-api-CKr0O4DJ.js → rally-api-yjQ0TfHd.js} +1 -1
  204. package/server/{rally-client-SVbjGvqj.js → rally-client-B1EJhfV0.js} +4 -4
  205. package/server/{rally-client-Cqf6EX_r.js → rally-client-CULK2XAY.js} +1 -1
  206. package/server/rally-njs_mJrt.js +3 -0
  207. package/server/reap-terminal-sessions-MWnqdLCJ.js +4 -0
  208. package/server/{reap-terminal-sessions-CjqRAGw7.js → reap-terminal-sessions-N3BTkmX_.js} +11 -28
  209. package/server/{rebuild-stack-DHqCLvLX.js → rebuild-stack-Dp4eLkt4.js} +6 -6
  210. package/server/{rebuild-stack-DjdpALr1.js → rebuild-stack-kA7XngID.js} +1 -1
  211. package/server/{reconstruct-cache-BqrCQt0o.js → reconstruct-cache-uWbZfjms.js} +6 -6
  212. package/server/record-t6V-3Dcj.js +3 -0
  213. package/server/{record-update-BlB8mpKO.js → record-update-DACtKh6_.js} +1 -1
  214. package/server/record-update-Dq0t2uBG.js +310 -0
  215. package/server/{recovery-trip-l1Hsi37x.js → recovery-trip-BJtIQuag.js} +2 -2
  216. package/server/{release-engine-CSI4K6Oj.js → release-engine-DZpmGGzb.js} +5 -5
  217. package/server/{release-set-BywwggrE.js → release-set-hnXd_kga.js} +3 -3
  218. package/server/{remote-DYziAkiZ.js → remote-4tiENDaI.js} +3 -3
  219. package/server/{remote-cnoeuDWn.js → remote-Br-ZWVIP.js} +3 -3
  220. package/server/{remote-agents-BNORDWAX.js → remote-agents-CRCg1L4H.js} +1 -1
  221. package/server/{remote-agents-CZ2rc8I0.js → remote-agents-nmty1mLu.js} +6 -6
  222. package/server/{remote-completion-W67FNQ-A.js → remote-completion-BbWNd10K.js} +13 -13
  223. package/server/resume-CcKqnTvE.js +3 -0
  224. package/server/{review-agent-CSswH985.js → review-agent-DJRO8EG8.js} +1 -1
  225. package/server/{review-agent-CqSqSHkU.js → review-agent-sKkE1FEL.js} +23 -23
  226. package/server/{review-artifacts-BBgnd5df.js → review-artifacts-BLbSC4ke.js} +5 -5
  227. package/server/{review-context-Ctp9BdNJ.js → review-context-BgX3lcCx.js} +9 -9
  228. package/server/{review-status-CCgPVK1h.js → review-status-A7quS5KJ.js} +56 -39
  229. package/server/review-status-C6n6-9f_.js +3 -0
  230. package/server/{review-status-enrichment-DtDRGpst.js → review-status-enrichment-tbOn_A_u.js} +3 -3
  231. package/server/review-status-source-CxuEjLGg.js +39 -0
  232. package/server/{review-status-sync-jnLgd04F.js → review-status-sync-BhSQ0d0l.js} +2 -2
  233. package/server/{review-status-sync-C792ksoJ.js → review-status-sync-To3-iS-N.js} +1 -1
  234. package/server/{review-verdict-feedback-D5lW0o3k.js → review-verdict-feedback-C1Kg8n7t.js} +1 -1
  235. package/server/{review-verdict-feedback-CMsIpTpy.js → review-verdict-feedback-CTRNtzXO.js} +7 -7
  236. package/server/{rollup-B3kQmNpl.js → rollup-B53Y81xK.js} +1 -1
  237. package/server/{rollup-CLj_AK9f.js → rollup-WA0VD-Rr.js} +8 -8
  238. package/server/{scanner-C4NeC4FE.js → scanner-D2743cp8.js} +11 -7
  239. package/server/{sequence-io-Ce-6grIY.js → sequence-io-Cg0zYj_E.js} +4 -4
  240. package/server/{sequencer-agent-Bpz0yGmG.js → sequencer-agent-BGY8gjg-.js} +5 -5
  241. package/server/server.js +1348 -963
  242. package/server/{service-CqAY8Kmk.js → service-DCpB_SGd.js} +154 -51
  243. package/server/{session-fork-uNo4rMRA.js → session-fork-BQ8_6H32.js} +2 -2
  244. package/server/{session-history-DUehL3KN.js → session-history-CVZDpS3c.js} +4 -4
  245. package/server/{settings-DP2OYLXL.js → settings-BZ5m1UCl.js} +3 -3
  246. package/server/settings-D0OSwos5.js +2 -0
  247. package/server/{settings-D9grjmaP.js → settings-ylxwqwQG.js} +2 -2
  248. package/server/{shadow-engineering-Bi_oIMtF.js → shadow-engineering-BlxG6Xye.js} +3 -3
  249. package/server/{shadow-state-CDxEuPlE.js → shadow-state-C2_epgx2.js} +1 -1
  250. package/server/{shadow-state-a_ztFBJe.js → shadow-state-Dh-HzF2J.js} +2 -2
  251. package/server/{shadow-utils-CyOg6_Xq.js → shadow-utils-4bvjn9b3.js} +2 -2
  252. package/server/{ship-log-DDcueaIR.js → ship-log-ClSMIzZX.js} +1 -1
  253. package/server/{smart-compaction-C1_VVLEd.js → smart-compaction-CHIxLr_d.js} +1 -1
  254. package/server/{smart-compaction--Oj65Uov.js → smart-compaction-r4pHQBIr.js} +7 -7
  255. package/server/{spawn-planning-session-AiUSsBnH.js → spawn-planning-session-DWAorh2B.js} +25 -20
  256. package/server/{spawn-planning-session-LFtK2QCE.js → spawn-planning-session-KC_UduxD.js} +1 -1
  257. package/server/{specialist-completion-qOgqdqXH.js → specialist-completion-BXhav38U.js} +1 -1
  258. package/server/{specialist-context-gjj8Z4Ii.js → specialist-context-DtrYvGJ-.js} +5 -5
  259. package/server/{specialist-handoff-logger-BsBNvVZv.js → specialist-handoff-logger-C45ouoZ6.js} +2 -2
  260. package/server/{specialist-logs-CSLtvPx6.js → specialist-logs-DJ3RzKxW.js} +3 -3
  261. package/server/{specialists-D0VBf8g_.js → specialists-D5fRZXmN.js} +1 -1
  262. package/server/specialists-DVj0hvaL.js +3 -0
  263. package/server/{specialists-CYRwELzc.js → specialists-DyFeedjn.js} +66 -76
  264. package/server/{specialists-DAegTvRt.js → specialists-JVO00bs7.js} +374 -220
  265. package/server/specs-nN45DG2X.js +3 -0
  266. package/server/{src-OLoJhUiJ.js → src-CG9mCkP6.js} +6 -6
  267. package/server/{src-BqTcrfO_.js → src-CMTQGyCK.js} +3 -3
  268. package/server/{src-Dpq1yFIl.js → src-U7_kTPEE.js} +338 -4
  269. package/server/{stack-health-I713ELld.js → stack-health-Df0YEZKa.js} +1 -1
  270. package/server/{stack-health-DV_f-lK0.js → stack-health-puygdaMd.js} +2 -2
  271. package/server/{stale-task-claims-CQSKZVq0.js → stale-task-claims-BbFwCTb0.js} +4 -4
  272. package/server/{staleness-BbsGxmF2.js → staleness-Bpy41ngS.js} +15 -3
  273. package/server/{staleness-zGp4P1hd.js → staleness-Cbl_w4Bw.js} +1 -1
  274. package/server/{state-home-DixkE-up.js → state-home-CIGjwNfJ.js} +119 -54
  275. package/server/state-migrate-Dkzaxvny.js +487 -0
  276. package/server/{stuck-remediation-BWkK_O7A.js → stuck-remediation-CzEov_fq.js} +27 -21
  277. package/server/{stuck-remediation-CTPRC2S5.js → stuck-remediation-sY_MHHgQ.js} +1 -1
  278. package/server/{substrate-bug-weights-service-DXd0ID83.js → substrate-bug-weights-service-BH66lhm7.js} +3 -3
  279. package/server/{summary-fork-CdLn8Chr.js → summary-fork-D8bXjCr7.js} +2 -2
  280. package/server/{summary-fork-f3DpgjXh.js → summary-fork-DHhJIsAL.js} +8 -8
  281. package/server/{supervisor-Ch8CDuoF.js → supervisor-BO-Zk_h-.js} +3 -3
  282. package/server/supervisor-BPy-o1A8.js +2 -0
  283. package/server/{swarm-readiness-C9P2iPap.js → swarm-readiness-CQ_fwUWF.js} +4 -4
  284. package/server/{system-prerequisites-DkoQBn1q.js → system-prerequisites-Bza0ffAh.js} +24 -44
  285. package/server/{teardown-workspace-D-5yMyit.js → teardown-workspace-CEgauF4U.js} +15 -15
  286. package/server/{test-agent-queue-BwpUpu-o.js → test-agent-queue-DXDt0Xa-.js} +7 -7
  287. package/server/{test-verdict-BRiSu7eW.js → test-verdict-CmUBK5cT.js} +1 -1
  288. package/server/{test-verdict-BQ1yx7d4.js → test-verdict-DFjjIHR5.js} +1 -1
  289. package/server/{tldr-daemon-DjxP5g6Y.js → tldr-daemon-BDtLOIlO.js} +2 -2
  290. package/server/{tldr-daemon-BJA7TkqS.js → tldr-daemon-DL566HbH.js} +1 -1
  291. package/server/tmux-DoThH6aj.js +3 -0
  292. package/server/{tmux-y1blSxks.js → tmux-ftABRAmc.js} +76 -44
  293. package/server/{token-LUrbM9sU.js → token-CsOhvw42.js} +2 -2
  294. package/server/{token-util-BZaDAQ8S.js → token-util-CTmczIfW.js} +1 -1
  295. package/server/token-util-DrHg8abn.js +3 -0
  296. package/server/{tracker-config-DSFZBdXP.js → tracker-config-B4itFzDo.js} +2 -2
  297. package/server/{tracker-utils-WtP_V-yn.js → tracker-utils-BePq_oj-.js} +1 -1
  298. package/server/{tracker-utils-DiceZN3a.js → tracker-utils-tnxxqROg.js} +2 -2
  299. package/server/{traefik-connect-BXqfOP4-.js → traefik-connect-m73vGebA.js} +1 -1
  300. package/server/{tunnel-DTng1rfQ.js → tunnel-B2vxjx_b.js} +3 -3
  301. package/server/{tunnel-WcJImbAC.js → tunnel-Cgj-IGIl.js} +1 -1
  302. package/server/{types-BjaZ1oqH.js → types-BBNjPcqU.js} +1 -1
  303. package/server/{types-DqeBMmJN.js → types-hraoaQIp.js} +1 -1
  304. package/server/{uat-train-BpLnp7Cx.js → uat-train-CuEn0t9M.js} +28 -28
  305. package/server/{uat-train-Wismge7h.js → uat-train-cKfM-_WW.js} +1 -1
  306. package/server/{validation-BA4e5EGm.js → validation-B5JxoPUS.js} +259 -9
  307. package/server/{validation-CUWamZ4X.js → validation-CIi6pnI2.js} +1 -1
  308. package/server/{verification-artifact-Dr_0g9nb.js → verification-artifact-BcnIbigL.js} +1 -1
  309. package/server/{verification-artifact-CrbI4tJE.js → verification-artifact-C-lIHfUa.js} +1 -1
  310. package/server/{verification-runner-gAzh3cVD.js → verification-runner-Br0S_Ous.js} +103 -37
  311. package/server/{verification-runner-Dcksl_P-.js → verification-runner-CDj4lD4t.js} +1 -1
  312. package/server/{vtt-parser-3VZKsmSm.js → vtt-parser-DKpNNW5i.js} +1 -1
  313. package/server/{work-agent-prompt-ULdcANl5.js → work-agent-prompt-Yb2bd3Fq.js} +16 -15
  314. package/server/{workflows-B8ROFlfw.js → workflows-C9WmILql.js} +39 -77
  315. package/server/workflows-D90rMOya.js +2 -0
  316. package/server/{workspace-DhTDA8nB.js → workspace-BVl4rihN.js} +3 -3
  317. package/server/{workspace-DSjUJaJN.js → workspace-DuUdndHe.js} +1 -1
  318. package/server/{workspace-config-BAAsAv-o.js → workspace-config-cEGcO6UT.js} +1 -1
  319. package/server/{workspace-manager-CcujONCR.js → workspace-manager-ZTdJAy9M.js} +1 -1
  320. package/server/{workspace-manager-DsN52IMG.js → workspace-manager-hLUv3ADC.js} +23 -16
  321. package/server/{workspace-metadata-DIL5_U4c.js → workspace-metadata-CskwzzhL.js} +2 -2
  322. package/server/{workspace-metadata-CftOpNLs.js → workspace-metadata-DNpMixRq.js} +1 -1
  323. package/server/{workspaces-Dmlh1YXm.js → workspaces-hWvy9eKs.js} +276 -110
  324. package/sync-sources/agents/pan-inspect-agent.md +1 -1
  325. package/sync-sources/agents/pan-merge-agent.md +1 -1
  326. package/sync-sources/agents/pan-planning-agent.md +4 -4
  327. package/sync-sources/agents/pan-work-agent.md +1 -1
  328. package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
  329. package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
  330. package/sync-sources/hooks/record-cost-event.js +363 -71
  331. package/sync-sources/hooks/session-start-hook +7 -0
  332. package/sync-sources/hooks/work-agent-stop-hook +1 -1
  333. package/sync-sources/rules/per-bead-durability.md +1 -1
  334. package/sync-sources/rules/prd-authoring.md +1 -1
  335. package/sync-sources/skills/feature-work/SKILL.md +1 -1
  336. package/sync-sources/skills/pan/SKILL.md +2 -2
  337. package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
  338. package/sync-sources/skills/pan-approve/SKILL.md +1 -1
  339. package/sync-sources/skills/pan-close/SKILL.md +1 -1
  340. package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
  341. package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
  342. package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
  343. package/sync-sources/skills/pan-plan/SKILL.md +6 -6
  344. package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
  345. package/sync-sources/skills/pan-recap/SKILL.md +2 -2
  346. package/sync-sources/skills/pan-review/SKILL.md +1 -1
  347. package/sync-sources/skills/pan-start/SKILL.md +26 -3
  348. package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
  349. package/sync-sources/skills/pan-sync/SKILL.md +1 -1
  350. package/sync-sources/skills/pan-task/SKILL.md +2 -2
  351. package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
  352. package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
  353. package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
  354. package/sync-sources/skills/plan/SKILL.md +11 -11
  355. package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
  356. package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
  357. package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
  358. package/server/agent-state-BV_6RHnO.js +0 -3
  359. package/server/agents-Czz6R57Z.js +0 -3
  360. package/server/cli-ChErG518.js +0 -3
  361. package/server/codex-BBeZ8c3s.js +0 -3
  362. package/server/deacon-swarm-uudlSCLM.js +0 -2
  363. package/server/dist-BEDL2alY.js +0 -3
  364. package/server/forge-DbhJyH6u.js +0 -2
  365. package/server/git-utils-Bkxzr1Xf.js +0 -129
  366. package/server/hume-BrA1tUuk.js +0 -3
  367. package/server/inspect-agent-CyXNo9fM.js +0 -2
  368. package/server/lifecycle-io-CUpsxG0p.js +0 -3
  369. package/server/merge-ops-BpTtuO8x.js +0 -2
  370. package/server/projects-IRHJIPYC.js +0 -3
  371. package/server/providers-BqCdTryq.js +0 -3
  372. package/server/public/assets/index-C6NLz_1S.css +0 -1
  373. package/server/public/assets/mermaid-GHXKKRXX-BNwFoQsf.js +0 -1
  374. package/server/rally-DGimSRBQ.js +0 -3
  375. package/server/reap-terminal-sessions-C1mfzoZo.js +0 -3
  376. package/server/record-update-RviRDSNs.js +0 -168
  377. package/server/record-us0YECMO.js +0 -3
  378. package/server/resume-OyN3dEXE.js +0 -3
  379. package/server/review-status-DXeqFpk5.js +0 -3
  380. package/server/settings-BaPXXJsT.js +0 -2
  381. package/server/specialists-C6WkeKFK.js +0 -3
  382. package/server/specs-BsNcum0h.js +0 -3
  383. package/server/state-migrate-_zJJ6XKE.js +0 -362
  384. package/server/supervisor-Qy1QecAs.js +0 -2
  385. package/server/tmux-HQLgwo_C.js +0 -3
  386. package/server/token-util-Cg-QnowA.js +0 -3
  387. package/server/workflows-C5c-RPsY.js +0 -2
@@ -1,14 +1,16 @@
1
- import { $n as resolveProjectFromIssueSync, En as findProjectByPathSync, Or as init_errors, dn as init_state_plane, ei as getOverdeckHome, lr as init_issue_id, ri as packageRoot, ti as init_paths, zn as init_projects } from "./config-yaml-Ciyp2mYe.js";
2
- import { C as init_review_status_source, c as init_review_status, f as markWorkspaceStuck, s as getReviewStatusSync, w as readReviewStatusMap, y as setReviewStatusSync } from "./review-status-CCgPVK1h.js";
3
- import { $ as stopAgent, Kn as setAgentPaused, L as messageAgent, s as init_agents } from "./queries-B5hl7lMQ.js";
4
- import { n as init_tracker_utils } from "./tracker-utils-DiceZN3a.js";
5
- import { m as readWorkspacePlanSync, o as init_io, t as VBriefMergeConflictError, v as init_types, y as subItemsOf } from "./io-BiM-7Zsx.js";
6
- import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-Wlq5-qgS.js";
7
- import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-Dqik2WTe.js";
8
- import { n as init_shadow_utils } from "./shadow-utils-CyOg6_Xq.js";
9
- import { i as runQualityGates, n as init_validation, t as DEFAULT_GATES } from "./validation-BA4e5EGm.js";
10
- import { r as writeVerificationArtifact, t as readVerificationArtifact } from "./verification-artifact-Dr_0g9nb.js";
11
- import { n as getVBriefACStatusSync } from "./acceptance-criteria-CJIFA8Vg.js";
1
+ import { Br as getOverdeckHome, Tn as init_projects, Ur as packageRoot, Vr as init_paths, Yn as init_issue_id, Yt as init_state_plane, fn as findProjectByPathSync, mr as init_errors, zn as resolveProjectFromIssueSync } from "./config-yaml-DvyMuOle.js";
2
+ import { b as setReviewStatusSync, c as getReviewStatusSync, l as init_review_status, p as markWorkspaceStuck } from "./review-status-A7quS5KJ.js";
3
+ import { X as messageAgent, ar as setAgentPaused, b as init_agents, ft as stopAgent } from "./queries-6d7Cdtm7.js";
4
+ import { n as init_tracker_utils } from "./tracker-utils-tnxxqROg.js";
5
+ import { i as readReviewStatusMap, n as init_review_status_source } from "./review-status-source-CxuEjLGg.js";
6
+ import { o as init_lifecycle, s as isXBriefFilename } from "./lifecycle-DfeyBDwA.js";
7
+ import { m as readWorkspacePlanSync, o as init_io, t as XBriefMergeConflictError, v as init_types, y as subItemsOf } from "./io-B3_AHDfr.js";
8
+ import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-C9b6ccN1.js";
9
+ import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-CPS15Vte.js";
10
+ import { n as init_shadow_utils } from "./shadow-utils-4bvjn9b3.js";
11
+ import { i as runQualityGates, n as init_validation, t as DEFAULT_GATES } from "./validation-B5JxoPUS.js";
12
+ import { r as writeVerificationArtifact, t as readVerificationArtifact } from "./verification-artifact-BcnIbigL.js";
13
+ import { n as getXBriefACStatusSync } from "./acceptance-criteria-DOA0KgXx.js";
12
14
  import { join } from "node:path";
13
15
  import { Data, Effect } from "effect";
14
16
  import { existsSync } from "fs";
@@ -57,7 +59,18 @@ function isProcessAlive(pid) {
57
59
  function readVerificationWorkerState(issueId) {
58
60
  try {
59
61
  const parsed = JSON.parse(readFileSync$1(statePath(issueId), "utf8"));
60
- return parsed.issueId === issueId && Number.isInteger(parsed.pid) ? parsed : null;
62
+ if (parsed.issueId !== issueId || !Number.isInteger(parsed.pid) || typeof parsed.runId !== "string" || typeof parsed.workspacePath !== "string" || typeof parsed.startedAt !== "string" || typeof parsed.resultPath !== "string") return null;
63
+ return {
64
+ ...parsed,
65
+ runId: parsed.runId,
66
+ issueId,
67
+ workspacePath: parsed.workspacePath,
68
+ pid: parsed.pid,
69
+ startedAt: parsed.startedAt,
70
+ resultPath: parsed.resultPath,
71
+ phase: parsed.phase === "queued" ? "queued" : "running",
72
+ admittedAt: parsed.admittedAt === void 0 ? parsed.startedAt : parsed.admittedAt
73
+ };
61
74
  } catch {
62
75
  return null;
63
76
  }
@@ -71,20 +84,36 @@ function writeJsonAtomic(path, value) {
71
84
  writeFileSync$1(temp, `${JSON.stringify(value, null, 2)}\n`);
72
85
  renameSync$1(temp, path);
73
86
  }
87
+ function verificationWorkerDeadline(state) {
88
+ if (!state.admittedAt) return null;
89
+ const admittedAt = Date.parse(state.admittedAt);
90
+ return Number.isFinite(admittedAt) ? admittedAt + MAX_RUN_MS : null;
91
+ }
92
+ function markVerificationWorkerAdmissionPhase(issueId, update) {
93
+ const state = readVerificationWorkerState(issueId);
94
+ if (!state || state.pid !== process.pid) return;
95
+ writeJsonAtomic(statePath(issueId), {
96
+ ...state,
97
+ phase: update.phase,
98
+ admittedAt: state.admittedAt ?? update.admittedAt ?? null,
99
+ currentGate: update.gateName,
100
+ currentAttempt: update.attempt
101
+ });
102
+ }
74
103
  async function waitForResult(state) {
75
- const deadline = Date.now() + MAX_RUN_MS;
76
- while (Date.now() < deadline) {
104
+ for (;;) {
77
105
  if (existsSync$1(state.resultPath)) return JSON.parse(readFileSync$1(state.resultPath, "utf8"));
78
106
  if (!isProcessAlive(state.pid)) return {
79
107
  outcome: "error",
80
108
  message: `Verification worker ${state.pid} exited before writing a result`
81
109
  };
110
+ const deadline = verificationWorkerDeadline(readVerificationWorkerState(state.issueId) ?? state);
111
+ if (deadline !== null && Date.now() >= deadline) return {
112
+ outcome: "error",
113
+ message: `Verification worker ${state.pid} exceeded ${MAX_RUN_MS}ms after CPU admission`
114
+ };
82
115
  await new Promise((resolve) => setTimeout(resolve, POLL_MS));
83
116
  }
84
- return {
85
- outcome: "error",
86
- message: `Verification worker ${state.pid} exceeded ${MAX_RUN_MS}ms`
87
- };
88
117
  }
89
118
  async function runSupervisedVerification(issueId, workspacePath, workspaceInfo, logPrefix, options = {}) {
90
119
  const existing = readVerificationWorkerState(issueId);
@@ -134,7 +163,9 @@ async function runSupervisedVerification(issueId, workspacePath, workspaceInfo,
134
163
  workspacePath,
135
164
  pid: child.pid,
136
165
  startedAt: (/* @__PURE__ */ new Date()).toISOString(),
137
- resultPath
166
+ resultPath,
167
+ phase: "queued",
168
+ admittedAt: null
138
169
  };
139
170
  writeJsonAtomic(statePath(issueId), state);
140
171
  child.unref();
@@ -145,6 +176,7 @@ async function runSupervisedVerification(issueId, workspacePath, workspaceInfo,
145
176
  //#region ../../lib/work/test-requirement-gate.ts
146
177
  init_projects();
147
178
  init_state_plane();
179
+ init_lifecycle();
148
180
  init_types();
149
181
  init_io();
150
182
  init_agents();
@@ -169,7 +201,7 @@ promisify(exec);
169
201
  const terminal = new Set(["completed", "cancelled"]);
170
202
  function checkIncompletePlanItemsSync(workspacePath) {
171
203
  const doc = readWorkspacePlanSync(workspacePath);
172
- if (!doc) return [" The required vBRIEF checklist is missing or unreadable; return the issue to planning before completion."];
204
+ if (!doc) return [" The required xBRIEF checklist is missing or unreadable; return the issue to planning before completion."];
173
205
  const incomplete = doc.plan.items.flatMap((item) => {
174
206
  const lines = [];
175
207
  if (!terminal.has(item.status)) lines.push(` - ${item.id} ${item.title} (${item.status})`);
@@ -195,6 +227,19 @@ async function checkIncompletePlanItemsPromise(workspacePath, _issueId) {
195
227
  init_io();
196
228
  const execAsync = promisify$1(exec$1);
197
229
  const NO_PROGRESS_REPEAT_THRESHOLD = 2;
230
+ const MERGED_VERIFICATION_REASON = "Merge already landed; verify-on-main owns post-merge validation.";
231
+ function skipMergedVerification(issueId, logPrefix, status = getReviewStatusSync(issueId)) {
232
+ if (status?.mergeStatus !== "merged") return null;
233
+ setReviewStatusSync(issueId, {
234
+ verificationStatus: "skipped",
235
+ verificationNotes: MERGED_VERIFICATION_REASON
236
+ });
237
+ console.log(`[${logPrefix}] Skipping pre-merge verification for ${issueId}: ${MERGED_VERIFICATION_REASON}`);
238
+ return {
239
+ outcome: "skipped",
240
+ reason: MERGED_VERIFICATION_REASON
241
+ };
242
+ }
198
243
  function isFinalVerificationAttempt(cycleCount) {
199
244
  return cycleCount >= 3;
200
245
  }
@@ -221,6 +266,7 @@ function setStateDerivedVerificationFailure(issueId, failedCheck, summary, cycle
221
266
  console.warn(`[verification-runner] ${issueId} review is passed but held by state-derived gate ${failedCheck}: ${summary}`);
222
267
  }
223
268
  async function escalateVerificationStuck(issueId, failedCheck, cycleCount, summary, logPrefix) {
269
+ if (skipMergedVerification(issueId, logPrefix)) return;
224
270
  const agentId = `agent-${issueId.toLowerCase()}`;
225
271
  const reason = `needs-you: verification stuck after ${cycleCount}/3 attempts (${failedCheck})`;
226
272
  markWorkspaceStuck(issueId, "verification_stuck", {
@@ -286,7 +332,9 @@ function reconcileInterruptedVerifications(logPrefix = "boot-reconciliation") {
286
332
  return reset;
287
333
  }
288
334
  async function deliverVerificationFeedback(issueId, message, details, logPrefix) {
335
+ if (skipMergedVerification(issueId, logPrefix)) return;
289
336
  const target = await resolveIssueFeedbackTarget(issueId);
337
+ if (skipMergedVerification(issueId, logPrefix)) return;
290
338
  if ("agentId" in target) {
291
339
  await messageAgent(target.agentId, message, "internal", { owesRework: true });
292
340
  console.log(`[${logPrefix}] Sent verification feedback for ${issueId} to ${target.agentId}`);
@@ -398,17 +446,19 @@ function getSyncTargetBranch(workspacePath, projectConfig, repoName) {
398
446
  }
399
447
  /**
400
448
  * PAN-2179: detect a "plan-only" / zombie changeset — one whose only changes are
401
- * pipeline artifacts (.pan/, beads, vbrief) with no actual implementation. A work
449
+ * pipeline artifacts (.pan/, task state, xBRIEF) with no actual implementation. A work
402
450
  * agent that never received its kickoff produces exactly this. The verification
403
451
  * gate uses it to bounce the branch back instead of letting an empty "completion"
404
452
  * advance to review/merge. A legit non-code change (docs, rules under
405
453
  * sync-sources/, config) counts as content and is NOT flagged.
406
454
  */
407
455
  function changesetHasNoContent(changedFiles) {
408
- return changedFiles.map((f) => f.trim()).filter(Boolean).filter((f) => !f.startsWith(".pan/") && !f.endsWith(".vbrief.json")).length === 0;
456
+ return changedFiles.map((f) => f.trim()).filter(Boolean).filter((f) => !f.startsWith(".pan/") && !isXBriefFilename(f)).length === 0;
409
457
  }
410
458
  async function runVerificationForIssuePromise(issueId, workspacePath, workspaceInfo, logPrefix, options = {}) {
411
459
  const currentStatus = getReviewStatusSync(issueId);
460
+ const mergedOutcome = skipMergedVerification(issueId, logPrefix, currentStatus);
461
+ if (mergedOutcome) return mergedOutcome;
412
462
  const currentCycles = currentStatus?.verificationCycleCount ?? 0;
413
463
  if (currentCycles >= 3) {
414
464
  const reason = `Circuit breaker: ${currentCycles}/3 cycles exceeded — skipping verification`;
@@ -434,6 +484,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
434
484
  console.log(`[${logPrefix}] Syncing ${targetBranch} into ${displayName} for ${issueId}...`);
435
485
  syncResults.push(await syncSingleRepo(gitDir, targetBranch));
436
486
  }
487
+ const postSyncMergedOutcome = skipMergedVerification(issueId, logPrefix);
488
+ if (postSyncMergedOutcome) return postSyncMergedOutcome;
437
489
  const failures = syncResults.filter((r) => !r.success);
438
490
  if (failures.length > 0) {
439
491
  const newCycleCount = currentCycles + 1;
@@ -481,6 +533,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
481
533
  }
482
534
  }
483
535
  else console.log(`[${logPrefix}] Skipping target-branch sync for ${issueId}; verifying current workspace state`);
536
+ const postSyncMergedOutcome = skipMergedVerification(issueId, logPrefix);
537
+ if (postSyncMergedOutcome) return postSyncMergedOutcome;
484
538
  const gates = projectConfig?.quality_gates && Object.keys(projectConfig.quality_gates).length > 0 ? projectConfig.quality_gates : DEFAULT_GATES;
485
539
  console.log(`[${logPrefix}] Project: ${projectConfig?.name || "NOT FOUND"}, gates: [${Object.keys(gates).join(", ")}], workspace: ${workspacePath}`);
486
540
  const featureFolder = basename$1(workspacePath);
@@ -544,10 +598,12 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
544
598
  };
545
599
  writeLiveArtifact();
546
600
  const gateResults = await Effect.runPromise(runQualityGates(gates, workspacePath, "pre_push", {
601
+ issueId,
547
602
  isRemote: workspaceInfo.isRemote,
548
603
  vmName: workspaceInfo.vmName,
549
604
  placeholders,
550
605
  ...options.onGateLog ? { onLog: options.onGateLog } : {},
606
+ onAdmissionPhase: (state) => markVerificationWorkerAdmissionPhase(issueId, state),
551
607
  onGateStart: (name) => {
552
608
  liveGateName = name;
553
609
  liveGateTail = "";
@@ -568,6 +624,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
568
624
  writeLiveArtifact();
569
625
  }
570
626
  }));
627
+ const postGateMergedOutcome = skipMergedVerification(issueId, logPrefix);
628
+ if (postGateMergedOutcome) return postGateMergedOutcome;
571
629
  const failedGate = gateResults.find((r) => !r.passed && r.required !== false);
572
630
  if (failedGate?.infraUnavailable) {
573
631
  try {
@@ -579,7 +637,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
579
637
  verificationNotes: `Verification deferred: ${failedGate.error}. Workspace stack rebuild triggered; verification re-runs on the next cycle.`
580
638
  });
581
639
  try {
582
- const { rebuildWorkspaceStack } = await import("./rebuild-stack-DjdpALr1.js");
640
+ const { rebuildWorkspaceStack } = await import("./rebuild-stack-kA7XngID.js");
583
641
  Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[${logPrefix}] ${issueId} stack rebuild: ${m}`) })).then((r) => {
584
642
  if (!r.success) console.warn(`[${logPrefix}] Stack rebuild for ${issueId} failed: ${r.error}`);
585
643
  });
@@ -639,30 +697,30 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
639
697
  }
640
698
  let acStatus;
641
699
  try {
642
- acStatus = getVBriefACStatusSync(workspacePath);
643
- } catch (vbriefErr) {
644
- if (vbriefErr instanceof VBriefMergeConflictError) {
700
+ acStatus = getXBriefACStatusSync(workspacePath);
701
+ } catch (xbriefErr) {
702
+ if (xbriefErr instanceof XBriefMergeConflictError) {
645
703
  const newCycleCount = currentCycles + 1;
646
704
  const failedCheck = "vbrief-conflicts";
647
- const summary = `vBRIEF spec has unresolved git merge conflict markers. Resolve all conflict markers in the spec file and commit before resubmitting.`;
705
+ const summary = `xBRIEF spec has unresolved git merge conflict markers. Resolve all conflict markers in the spec file and commit before resubmitting.`;
648
706
  setStateDerivedVerificationFailure(issueId, failedCheck, summary, newCycleCount, currentStatus);
649
707
  if (shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount)) await escalateVerificationStuck(issueId, failedCheck, newCycleCount, summary, logPrefix);
650
- const feedbackBody = shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId} (attempt ${newCycleCount}/3):\n\nFailed check: ${failedCheck}\n\n${summary}\n\n${buildFinalFailureInstructions(issueId)}` : `VERIFICATION FAILED for ${issueId} (attempt ${newCycleCount}/3):\n\nFailed check: ${failedCheck}\n\n${summary}\n\n## REQUIRED: Fix merge conflicts in vBRIEF spec BEFORE resubmitting\n\n1. Open the vBRIEF spec (on main in .pan/specs/)\n2. Find and resolve all <<<<<<< HEAD / ======= / >>>>>>> conflict markers\n3. Ensure the file is valid JSON (only keep ONE version of each conflicted block)\n4. Commit the fixed file on main\n5. ONLY THEN resubmit: pan review request ${issueId} -m "Resolved spec merge conflict"\n\nDo NOT resubmit until the spec parses cleanly.`;
708
+ const feedbackBody = shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId} (attempt ${newCycleCount}/3):\n\nFailed check: ${failedCheck}\n\n${summary}\n\n${buildFinalFailureInstructions(issueId)}` : `VERIFICATION FAILED for ${issueId} (attempt ${newCycleCount}/3):\n\nFailed check: ${failedCheck}\n\n${summary}\n\n## REQUIRED: Fix merge conflicts in xBRIEF spec BEFORE resubmitting\n\n1. Open the xBRIEF spec (on main in .pan/specs/)\n2. Find and resolve all <<<<<<< HEAD / ======= / >>>>>>> conflict markers\n3. Ensure the file is valid JSON (only keep ONE version of each conflicted block)\n4. Commit the fixed file on main\n5. ONLY THEN resubmit: pan review request ${issueId} -m "Resolved spec merge conflict"\n\nDo NOT resubmit until the spec parses cleanly.`;
651
709
  try {
652
710
  const fileResult = await Effect.runPromise(writeFeedbackFile({
653
711
  issueId,
654
712
  workspacePath,
655
713
  specialist: "verification-gate",
656
714
  outcome: "failed",
657
- summary: `vBRIEF plan has merge conflicts (attempt ${newCycleCount}/3)`,
715
+ summary: `xBRIEF plan has merge conflicts (attempt ${newCycleCount}/3)`,
658
716
  markdownBody: feedbackBody
659
717
  }));
660
- if (fileResult.success) await deliverVerificationFeedback(issueId, shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId}.\nFailed check: ${failedCheck} after repeated attempts.\n\nMUST READ: ${fileResult.filePath}\n\nFix every reported failure, commit and push the corrections, then run pan done ${issueId} -c "<summary>" to reset verification and return the latest commit to the normal pipeline.` : `VERIFICATION FAILED for ${issueId}.\nFailed check: ${failedCheck} — plan.vbrief.json has merge conflict markers.\n\nMUST READ: ${fileResult.filePath}\n\nUse your Read tool to open this file, read every line, resolve the merge conflict markers, commit and push the fix, then request a new review with pan review request. Do NOT stop at the prompt — keep working until pan review request completes successfully.`, {
718
+ if (fileResult.success) await deliverVerificationFeedback(issueId, shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId}.\nFailed check: ${failedCheck} after repeated attempts.\n\nMUST READ: ${fileResult.filePath}\n\nFix every reported failure, commit and push the corrections, then run pan done ${issueId} -c "<summary>" to reset verification and return the latest commit to the normal pipeline.` : `VERIFICATION FAILED for ${issueId}.\nFailed check: ${failedCheck} — the xBRIEF document has merge conflict markers.\n\nMUST READ: ${fileResult.filePath}\n\nUse your Read tool to open this file, read every line, resolve the merge conflict markers, commit and push the fix, then request a new review with pan review request. Do NOT stop at the prompt — keep working until pan review request completes successfully.`, {
661
719
  failedCheck,
662
720
  feedbackPath: fileResult.filePath
663
721
  }, logPrefix);
664
722
  } catch (feedbackErr) {
665
- console.error(`[${logPrefix}] Failed to write vBRIEF conflict feedback for ${issueId}:`, feedbackErr);
723
+ console.error(`[${logPrefix}] Failed to write xBRIEF conflict feedback for ${issueId}:`, feedbackErr);
666
724
  }
667
725
  return {
668
726
  outcome: "failed",
@@ -671,7 +729,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
671
729
  maxCycles: 3
672
730
  };
673
731
  }
674
- throw vbriefErr;
732
+ throw xbriefErr;
675
733
  }
676
734
  if (acStatus && !acStatus.allCompleted) {
677
735
  const newCycleCount = currentCycles + 1;
@@ -707,7 +765,9 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
707
765
  maxCycles: 3
708
766
  };
709
767
  }
710
- const taskBlockers = await checkIncompletePlanItemsPromise(workspacePath, issueId);
768
+ const taskBlockers = options.skipPlanChecklist ? [] : await checkIncompletePlanItemsPromise(workspacePath, issueId);
769
+ const postChecklistMergedOutcome = skipMergedVerification(issueId, logPrefix);
770
+ if (postChecklistMergedOutcome) return postChecklistMergedOutcome;
711
771
  if (taskBlockers.length > 0) {
712
772
  const newCycleCount = currentCycles + 1;
713
773
  const failedCheck = "incomplete-plan-items";
@@ -745,10 +805,12 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
745
805
  encoding: "utf-8",
746
806
  timeout: 15e3
747
807
  });
808
+ const postDiffMergedOutcome = skipMergedVerification(issueId, logPrefix);
809
+ if (postDiffMergedOutcome) return postDiffMergedOutcome;
748
810
  if (changesetHasNoContent(changedOut.split("\n"))) {
749
811
  const newCycleCount = currentCycles + 1;
750
812
  const failedCheck = "empty-changeset";
751
- const summary = `Branch has no implementation — only pipeline artifacts (.pan/vBRIEF task state) changed vs ${changedBase}. The work agent produced no code (likely a kickoff-delivery zombie — PAN-2179).`;
813
+ const summary = `Branch has no implementation — only pipeline artifacts (.pan/xBRIEF task state) changed vs ${changedBase}. The work agent produced no code (likely a kickoff-delivery zombie — PAN-2179).`;
752
814
  setReviewStatusSync(issueId, {
753
815
  reviewStatus: "pending",
754
816
  verificationStatus: "failed",
@@ -758,7 +820,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
758
820
  });
759
821
  if (shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount)) await escalateVerificationStuck(issueId, failedCheck, newCycleCount, summary, logPrefix);
760
822
  try {
761
- await deliverVerificationFeedback(issueId, shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId}.\nFailed check: ${failedCheck} after ${newCycleCount}/3 attempts — branch still has no implementation.\n\n${buildFinalFailureInstructions(issueId)}` : `VERIFICATION FAILED for ${issueId}.\nFailed check: ${failedCheck} — your branch contains NO code (only .pan/vBRIEF task state changed vs ${changedBase}).\n\nYou must actually implement the issue: read the plan (.pan/spec.vbrief.json + the issue body), write and commit the code, push, then run pan review request. Do NOT stop at the prompt — keep working until pan review request completes.`, {
823
+ await deliverVerificationFeedback(issueId, shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId}.\nFailed check: ${failedCheck} after ${newCycleCount}/3 attempts — branch still has no implementation.\n\n${buildFinalFailureInstructions(issueId)}` : `VERIFICATION FAILED for ${issueId}.\nFailed check: ${failedCheck} — your branch contains NO code (only .pan/xBRIEF task state changed vs ${changedBase}).\n\nYou must actually implement the issue: read the plan (.pan/spec.vbrief.json + the issue body), write and commit the code, push, then run pan review request. Do NOT stop at the prompt — keep working until pan review request completes.`, {
762
824
  failedCheck,
763
825
  changedBase
764
826
  }, logPrefix);
@@ -785,6 +847,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
785
847
  });
786
848
  lastVerifiedCommit = stdout.trim();
787
849
  } catch {}
850
+ const prePassMergedOutcome = skipMergedVerification(issueId, logPrefix);
851
+ if (prePassMergedOutcome) return prePassMergedOutcome;
788
852
  setReviewStatusSync(issueId, {
789
853
  verificationStatus: "passed",
790
854
  verificationNotes: void 0,
@@ -796,7 +860,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
796
860
  const repo = findProjectByPathSync(workspacePath)?.github_repo;
797
861
  if (!repo || !repo.includes("/")) return;
798
862
  const [owner, name] = repo.split("/");
799
- const { postOverdeckTestsStatus } = await import("./github-app-CeSVFL6C.js");
863
+ const { postOverdeckTestsStatus } = await import("./github-app-CPfoFAdV.js");
800
864
  await postOverdeckTestsStatus(workspacePath, owner, name, "success", "Verification gate passed");
801
865
  } catch (err) {
802
866
  console.warn(`[${logPrefix}] Failed to post overdeck/tests status: ${err.message}`);
@@ -804,6 +868,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
804
868
  })();
805
869
  return { outcome: "passed" };
806
870
  } catch (verifyErr) {
871
+ const errorMergedOutcome = skipMergedVerification(issueId, logPrefix);
872
+ if (errorMergedOutcome) return errorMergedOutcome;
807
873
  setReviewStatusSync(issueId, {
808
874
  reviewStatus: "pending",
809
875
  verificationStatus: "failed",
@@ -832,4 +898,4 @@ function runVerificationForIssueInProcess(issueId, workspacePath, workspaceInfo,
832
898
  //#endregion
833
899
  export { runVerificationForIssueInProcess as i, reconcileInterruptedVerifications as n, runVerificationForIssue as r, changesetHasNoContent as t };
834
900
 
835
- //# sourceMappingURL=verification-runner-gAzh3cVD.js.map
901
+ //# sourceMappingURL=verification-runner-Br0S_Ous.js.map
@@ -1,2 +1,2 @@
1
- import { n as reconcileInterruptedVerifications, r as runVerificationForIssue } from "./verification-runner-gAzh3cVD.js";
1
+ import { n as reconcileInterruptedVerifications, r as runVerificationForIssue } from "./verification-runner-Br0S_Ous.js";
2
2
  export { reconcileInterruptedVerifications, runVerificationForIssue };
@@ -107,4 +107,4 @@ function consolidateSpeakerCues(cues) {
107
107
  //#endregion
108
108
  export { vttToMarkdown };
109
109
 
110
- //# sourceMappingURL=vtt-parser-3VZKsmSm.js.map
110
+ //# sourceMappingURL=vtt-parser-DKpNNW5i.js.map
@@ -1,12 +1,12 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { At as init_record, It as readRecordContinueViewSync, Lt as resolveProjectForIssue, On as findProjectByTeamSync, kt as getProjectConfigFromWorkspacePath, t as init_config_yaml, u as isTldrEnabledSync, wn as extractTeamPrefix, zn as init_projects } from "./config-yaml-Ciyp2mYe.js";
3
- import { d as readPlanSync, i as findPlanSync, o as init_io, p as readWorkspacePlan } from "./io-BiM-7Zsx.js";
4
- import { f as init_config, m as loadConfigSync } from "./config-CrduXs4a.js";
5
- import { i as NotImplementedError, o as init_interface } from "./rally-api-DGaFz5L5.js";
6
- import { n as createTrackerFromConfig, r as init_factory } from "./factory-CQNprtHe.js";
7
- import { i as createActiveSlice, l as init_dag, o as getDispatchableItems } from "./dag-DIji6O2b.js";
8
- import { l as getReadableWorkspacePanPaths, n as readWorkspaceContext, o as readFeedback, r as writeWorkspaceContext, t as init_pan_dir } from "./pan-dir-Rw17YjT1.js";
9
- import { n as renderPrompt, t as init_prompts } from "./prompts-CbqaVjbe.js";
2
+ import { Dt as getProjectConfigFromWorkspacePath, Ft as resolveProjectForIssue, Ot as init_record, Pt as readRecordContinueViewSync, Tn as init_projects, mn as findProjectByTeamSync, t as init_config_yaml, u as isTldrEnabledSync, un as extractTeamPrefix } from "./config-yaml-DvyMuOle.js";
3
+ import { F as getReadableWorkspacePanPaths, d as readPlanSync, i as findPlanSync, o as init_io, p as readWorkspacePlan } from "./io-B3_AHDfr.js";
4
+ import { f as init_config, m as loadConfigSync } from "./config-CCvjQf27.js";
5
+ import { i as NotImplementedError, o as init_interface } from "./rally-api-nY0ZANw3.js";
6
+ import { n as createTrackerFromConfig, r as init_factory } from "./factory-CynerjXO.js";
7
+ import { i as createActiveSlice, l as init_dag, o as getDispatchableItems } from "./dag-CdOjJVDT.js";
8
+ import { l as readFeedback, n as readWorkspaceContext, r as writeWorkspaceContext, t as init_pan_dir } from "./pan-dir-DeVUgwA7.js";
9
+ import { n as renderPrompt, t as init_prompts } from "./prompts-Dp4Tpk39.js";
10
10
  import { Effect } from "effect";
11
11
  import { existsSync, readdirSync, statSync } from "fs";
12
12
  import { dirname, join } from "path";
@@ -67,7 +67,7 @@ async function buildActiveSliceContext(workspacePath, issueId) {
67
67
  const normalizedIssueId = (issueId ?? "").toUpperCase();
68
68
  const currentItemIds = doc.plan.items.filter((item) => item.status === "running" || item.id === nextItem.id).map((item) => item.id);
69
69
  return [
70
- "## Active vBRIEF Slice (Canonical Task Graph)",
70
+ "## Active xBRIEF Slice (Canonical Task Graph)",
71
71
  "",
72
72
  createActiveSlice(doc, {
73
73
  issueId: normalizedIssueId,
@@ -76,7 +76,7 @@ async function buildActiveSliceContext(workspacePath, issueId) {
76
76
  synthesisOutputs: void 0
77
77
  }).prompt,
78
78
  "",
79
- "_The merged vBRIEF is the canonical task authority._"
79
+ "_The merged xBRIEF is the canonical task authority._"
80
80
  ].join("\n");
81
81
  } catch {
82
82
  return "";
@@ -143,7 +143,7 @@ async function readPendingFeedback(workspacePath) {
143
143
  * Fetch tracker context (new comments + issue status) since continue file was last modified.
144
144
  * Returns a formatted markdown string for injection into the work agent prompt.
145
145
  */
146
- async function getTrackerContext(issueId, workspacePath) {
146
+ async function getTrackerContext(issueId, workspacePath, signal) {
147
147
  let stateMtime = null;
148
148
  try {
149
149
  const workspaceContinuePath = getReadableWorkspacePanPaths(workspacePath).continuePath;
@@ -161,7 +161,7 @@ async function getTrackerContext(issueId, workspacePath) {
161
161
  if (trackersConfig.secondary) trackerTypes.push(trackersConfig.secondary);
162
162
  for (const trackerType of trackerTypes) try {
163
163
  const tracker = createTrackerFromConfig(trackersConfig, trackerType);
164
- const [issue, allComments] = await Promise.all([Effect.runPromise(tracker.getIssue(issueId)), Effect.runPromise(tracker.getComments(issueId)).catch((err) => {
164
+ const [issue, allComments] = await Promise.all([Effect.runPromise(tracker.getIssue(issueId), { signal }), Effect.runPromise(tracker.getComments(issueId), { signal }).catch((err) => {
165
165
  if (err instanceof NotImplementedError) return [];
166
166
  throw err;
167
167
  })]);
@@ -211,6 +211,7 @@ async function getTrackerContext(issueId, workspacePath) {
211
211
  if (!isReopened && newComments.length === 0) return "";
212
212
  return result;
213
213
  } catch (err) {
214
+ if (signal?.aborted) return "";
214
215
  const message = err instanceof Error ? err.message : String(err);
215
216
  if (message.toLowerCase().includes("not found") || message.toLowerCase().includes("404") || message.toLowerCase().includes("no configuration")) continue;
216
217
  return `_Tracker unavailable: ${message}. Check tracker status and review any new comments manually._`;
@@ -294,9 +295,9 @@ async function writeStoryFeatureContext(workspacePath, issueId) {
294
295
  const subItems = item.subItems?.map((s) => ` - ${s.title} (${s.status})`).join("\n") || "";
295
296
  return `- **${item.id}**: ${item.title} (${item.status})${item.narrative?.Action ? `\n - Action: ${item.narrative.Action}` : ""}${subItems ? `\n${subItems}` : ""}`;
296
297
  }).join("\n");
297
- contextContent = `# Feature Context for ${issueId}\n\n**Parent Feature:** ${parentTitle} (${issue.parentRef})\n\n## Plan Narratives\n${narrativeSection || "_No narratives found._"}\n\n## Cross-Story Dependencies\n${edgesSection || "_No dependency edges found._"}\n\n## Related Plan Items\n${itemsSection || "_No plan items found for this story._"}\n\n---\n*Synthesized from parent feature workspace vBRIEF*\n`;
298
+ contextContent = `# Feature Context for ${issueId}\n\n**Parent Feature:** ${parentTitle} (${issue.parentRef})\n\n## Plan Narratives\n${narrativeSection || "_No narratives found._"}\n\n## Cross-Story Dependencies\n${edgesSection || "_No dependency edges found._"}\n\n## Related Plan Items\n${itemsSection || "_No plan items found for this story._"}\n\n---\n*Synthesized from parent feature workspace xBRIEF*\n`;
298
299
  } catch (planErr) {
299
- console.warn(`[writeStoryFeatureContext] Could not read parent workspace vBRIEF: ${planErr instanceof Error ? planErr.message : String(planErr)}`);
300
+ console.warn(`[writeStoryFeatureContext] Could not read parent workspace xBRIEF: ${planErr instanceof Error ? planErr.message : String(planErr)}`);
300
301
  }
301
302
  const parentPanContext = await Effect.runPromise(readWorkspaceContext(parentWorkspace));
302
303
  if (parentPanContext && !contextContent) contextContent = parentPanContext;
@@ -435,4 +436,4 @@ __esmMin((() => {
435
436
  }))();
436
437
  export { buildPolyrepoContext, buildWorkAgentPrompt, extractStitchDesigns, getTrackerContext, readFeatureContext, readPlanningContext, writeStoryFeatureContext };
437
438
 
438
- //# sourceMappingURL=work-agent-prompt-ULdcANl5.js.map
439
+ //# sourceMappingURL=work-agent-prompt-Yb2bd3Fq.js.map