@overdeck/desktop 0.45.22 → 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 (375) hide show
  1. package/package.json +1 -1
  2. package/server/{acceptance-criteria-BH7ac_1G.js → acceptance-criteria-DOA0KgXx.js} +5 -5
  3. package/server/{advancing-selfheal-cSvXNZLZ.js → advancing-selfheal-BBu6DSNm.js} +6 -6
  4. package/server/{agent-gc-Dj2gncak.js → agent-gc-BV1q_2EV.js} +4 -4
  5. package/server/agent-state-Bg0lhqwj.js +3 -0
  6. package/server/{agent-state-service-CsQ07Pxe.js → agent-state-service-CnzFKSAQ.js} +1 -1
  7. package/server/{agent-state-service-DistflNn.js → agent-state-service-HoK8U4jW.js} +5 -5
  8. package/server/{agents-DXdHmRTC.js → agents-B4Bjbkfv.js} +4 -4
  9. package/server/agents-FlIgQ3ql.js +3 -0
  10. package/server/{archive-planning-BvDuWNMo.js → archive-planning-DYrYojxl.js} +30 -6
  11. package/server/{archive-planning-Cp_DC1j-.js → archive-planning-zkJb3BeM.js} +1 -1
  12. package/server/{artifact-index-jobs-CDBFL4OU.js → artifact-index-jobs-C-xy7Z5v.js} +2 -2
  13. package/server/{backlog-auto-trigger-DmA1IbYf.js → backlog-auto-trigger-GtG71X8H.js} +3 -3
  14. package/server/{behavior-CGj16clS.js → behavior-B_-4EKF3.js} +2 -2
  15. package/server/{briefing-freshness-C12WgkaB.js → briefing-freshness-DWdW7vUm.js} +2 -2
  16. package/server/{build-info-NU3KbXYw.js → build-info-BT096lEl.js} +3 -3
  17. package/server/{build-info-BRpqQvNd.js → build-info-DgTqZkL5.js} +1 -1
  18. package/server/{checkpoint-manager-rOgT98WY.js → checkpoint-manager-B7Bt29J0.js} +1 -1
  19. package/server/{checkpoint-manager-CTPjAmtH.js → checkpoint-manager-DDqcGyu8.js} +2 -2
  20. package/server/checkpoint-worker.js +1 -1
  21. package/server/{checkpoints-BJum14fs.js → checkpoints-C-AXLfYT.js} +2 -2
  22. package/server/{checkpoints-B5jFNi2G.js → checkpoints-CpgCjAlN.js} +1 -1
  23. package/server/{claude-hooks-provision-BhwWK-TQ.js → claude-hooks-provision-C8wdRnN1.js} +1 -1
  24. package/server/{claude-hooks-provision-D7p5WcKZ.js → claude-hooks-provision-but-_qGY.js} +2 -2
  25. package/server/{claude-permissions-nSFKH78M.js → claude-permissions-H_5wHQZQ.js} +2 -2
  26. package/server/{claude-settings-overlay-DHBwjS1X.js → claude-settings-overlay-BTENVmYf.js} +1 -1
  27. package/server/{claude-settings-overlay-BI_UIke0.js → claude-settings-overlay-CbSz0Dvb.js} +2 -2
  28. package/server/cli-BsVIHwzC.js +3 -0
  29. package/server/{cli-CbKNkFE5.js → cli-vBeXbPrq.js} +9 -9
  30. package/server/{cliproxy-Brf_5MuG.js → cliproxy-Bgb2XCqi.js} +2 -2
  31. package/server/{cliproxy-bONZDBbC.js → cliproxy-DW0V86F8.js} +1 -1
  32. package/server/{close-issue-CxReRxIc.js → close-issue-Dn_4c4G8.js} +5 -5
  33. package/server/{closed-issue-reaper-DXP2Xyv3.js → closed-issue-reaper-CWpY2uBw.js} +1 -1
  34. package/server/{closed-issue-reaper-CQ3kqha7.js → closed-issue-reaper-hANY_ehE.js} +9 -9
  35. package/server/codex-Dg7Is5yb.js +3 -0
  36. package/server/{codex-CbmztVcc.js → codex-TmSi-yTv.js} +27 -8
  37. package/server/{codex-parser-jl8AeAmB.js → codex-parser-C4gSH-IR.js} +2 -2
  38. package/server/{config-q4Gvd8dq.js → config-CCvjQf27.js} +2 -2
  39. package/server/{config-BJKocXKd.js → config-DUIhMN_T.js} +1 -1
  40. package/server/{config-DeTsoZdR.js → config-DjLOdbgT.js} +2 -2
  41. package/server/{config-yaml-ig8Nwtiw.js → config-yaml-DvyMuOle.js} +55 -186
  42. package/server/{conflict-gate-CHU9K1vU.js → conflict-gate-BSJkNTdp.js} +1 -1
  43. package/server/{conflict-gate-CFqPVxEg.js → conflict-gate-CmrYpa47.js} +3 -3
  44. package/server/{context-layers-DlQKkHH2.js → context-layers-B3Nt58jl.js} +2 -2
  45. package/server/{context-layers-15gDOk20.js → context-layers-ZYFcWiyc.js} +3 -3
  46. package/server/{control-settings-D_odMIaC.js → control-settings-aP1ANIlI.js} +4 -4
  47. package/server/{conversation-compaction-B6YSRLda.js → conversation-compaction-CNbTLB86.js} +8 -8
  48. package/server/{conversation-compaction-CN4-5YYt.js → conversation-compaction-DiG5zWQq.js} +1 -1
  49. package/server/{conversation-service-C3avRVEr.js → conversation-service-Du-MTNpJ.js} +6 -6
  50. package/server/{conversation-service-Dq33SYEj.js → conversation-service-Up7FEzIC.js} +1 -1
  51. package/server/{conversations-H9if0bCQ.js → conversations-6mPANqvL.js} +1 -1
  52. package/server/{conversations-bYpM9-kZ.js → conversations-DbOs1e9Q.js} +4 -4
  53. package/server/{cost-wH46-WsJ.js → cost-CW4WSe72.js} +3 -3
  54. package/server/{cost-Codk1pc2.js → cost-Ca0YTWDw.js} +18 -2
  55. package/server/{cost-sync-D_cre6WM.js → cost-sync-C0VdGme1.js} +3 -3
  56. package/server/{dag-CJpgf9A3.js → dag-CdOjJVDT.js} +9 -9
  57. package/server/{dangerous-git-ops-D6AF-Hg_.js → dangerous-git-ops-CT-IypG3.js} +1 -1
  58. package/server/dashboard-db-worker.js +7 -7
  59. package/server/{deacon-B8HbQdqU.js → deacon-DYSEJb48.js} +3 -3
  60. package/server/{deacon-nudge-log-D6K9K-rE.js → deacon-nudge-log-Bjg8U4Y9.js} +3 -3
  61. package/server/{deacon-CkT_kznS.js → deacon-pRnyD5w9.js} +266 -577
  62. package/server/deacon-swarm-9jRLS5Ke.js +2 -0
  63. package/server/{deacon-swarm-BryRr6AO.js → deacon-swarm-DftYRDo8.js} +17 -17
  64. package/server/deacon.js +8 -8
  65. package/server/{deploy-patrol-1IrZxicY.js → deploy-patrol-Bjsho_ha.js} +136 -19
  66. package/server/{deploy-window-7ZYHh7Zp.js → deploy-window-CM6W1-c6.js} +1 -1
  67. package/server/{deploy-window-wDf4UgHt.js → deploy-window-DeP_OIRk.js} +77 -10
  68. package/server/{dev-supervisor-C7p9kEpc.js → dev-supervisor-BpMoHlkR.js} +2 -2
  69. package/server/{devcontainer-renderer-CNmQy0pL.js → devcontainer-renderer-CtUgrVKW.js} +3 -3
  70. package/server/dist-Bd3vn0Hw.js +3 -0
  71. package/server/{dist-D-Ed5yVw.js → dist-DyRx4cI7.js} +1 -1
  72. package/server/{docker-BCZ89M9X.js → docker-BK7HIcBj.js} +2 -2
  73. package/server/{dod-DbJLYcHv.js → dod-BrSfUHm0.js} +1 -1
  74. package/server/{ensure-devcontainer-Cs6W9Yzj.js → ensure-devcontainer-DRqaAkBR.js} +1 -1
  75. package/server/{ensure-devcontainer-V5JWaAva.js → ensure-devcontainer-DseivYEy.js} +4 -4
  76. package/server/{esm-shims-dTeNdq7X.js → esm-shims-CbI3BVkl.js} +1 -1
  77. package/server/{event-store-CpBGsO6_.js → event-store-Cr5PQwFC.js} +1 -1
  78. package/server/{event-store-TnWdydfB.js → event-store-tdiY5eDZ.js} +3 -3
  79. package/server/{events-DSUdR-04.js → events-CC1dgUpx.js} +3 -3
  80. package/server/{events-Dsuv6qyB.js → events-CvvGK6LT.js} +1 -1
  81. package/server/{factory-BMrK4TrE.js → factory-CynerjXO.js} +50 -13
  82. package/server/{feature-registry-population-B-CI9hgE.js → feature-registry-population-B0pmAz0a.js} +4 -4
  83. package/server/{feature-registry-storage-B972ph_A.js → feature-registry-storage-_wUBRD3J.js} +2 -2
  84. package/server/{features-Bc-Bmiye.js → features-Dhxz-wLc.js} +2 -2
  85. package/server/{feedback-target-DZ-iAnAa.js → feedback-target-CPS15Vte.js} +7 -7
  86. package/server/{feedback-target-DS6NUuSs.js → feedback-target-iygZwmMc.js} +1 -1
  87. package/server/{feedback-writer-BXP6g75N.js → feedback-writer-C9b6ccN1.js} +6 -5
  88. package/server/{feedback-writer-Bx5z11mF.js → feedback-writer-qmiMbqTZ.js} +1 -1
  89. package/server/{flywheel-Ctr5uuvo.js → flywheel-DMCUzDWg.js} +1 -1
  90. package/server/{flywheel-COR0mbRI.js → flywheel-DSSpWmqF.js} +13 -13
  91. package/server/{flywheel-6WHU4O7A.js → flywheel-DcBkQvgE.js} +14 -14
  92. package/server/{flywheel-merge-order-CNKAY489.js → flywheel-merge-order-C-6zRLvM.js} +1 -1
  93. package/server/{flywheel-merge-order-CTgHeg-W.js → flywheel-merge-order-DxbQKE1d.js} +8 -8
  94. package/server/forge-B-ZWyTRm.js +2 -0
  95. package/server/{forge-B1S_KZv4.js → forge-Ch9gCFod.js} +2 -2
  96. package/server/{from-DpwQ-sc3.js → from-CJ_aH5jD.js} +1 -1
  97. package/server/{fts-db-DmAcuCkV.js → fts-db-CKgg0VKg.js} +2 -2
  98. package/server/{fts-operations-7d_RkmWp.js → fts-operations-BrL_VTRr.js} +2 -2
  99. package/server/{git-utils-Cc3FHDKd.js → git-utils-BVa07a4a.js} +2 -2
  100. package/server/{git-utils-CsKGnzFA.js → git-utils-Dry_Ka_D.js} +1 -1
  101. package/server/{github-app-CDPtGF7J.js → github-app-CMBdIFBQ.js} +11 -3
  102. package/server/{github-app-CU14oYzP.js → github-app-CPfoFAdV.js} +1 -1
  103. package/server/{github-client-XjTJbBm7.js → github-client--XVlDpwM.js} +2 -2
  104. package/server/{github-client-CwBZZ3t7.js → github-client-B4QsdE-X.js} +1 -1
  105. package/server/{github-pr-lookup-CFGeVhqv.js → github-pr-lookup-BRbDW-qk.js} +2 -2
  106. package/server/{harness-binary-B2CTcD84.js → harness-binary-CVio2m-u.js} +1 -1
  107. package/server/{harness-resolve-D5FVQTmy.js → harness-resolve-qHJBhy3Z.js} +4 -4
  108. package/server/{health-events-DREeevle.js → health-events-C9B8y1Hm.js} +2 -2
  109. package/server/{health-events-C1whmd58.js → health-events-CpfvuVmm.js} +1 -1
  110. package/server/{hooks-yxRsjk-z.js → hooks-DUXw8A0-.js} +2 -2
  111. package/server/{hooks-B-HItBiS.js → hooks-ltecuFqZ.js} +1 -1
  112. package/server/{hume-Dz_OymXE.js → hume-BEq0bUDg.js} +2 -2
  113. package/server/hume-B_DbflNM.js +3 -0
  114. package/server/{idle-stack-reaper-DrCv0OAG.js → idle-stack-reaper-D7w9t3fE.js} +1 -1
  115. package/server/{idle-stack-reaper-Yf34xXxY.js → idle-stack-reaper-w1ISSlhs.js} +2 -2
  116. package/server/{in-flight-guard-BoWm66Kh.js → in-flight-guard-aQ1IxeI3.js} +2 -2
  117. package/server/{infra-D4iNWMA5.js → infra-CzaSOgul.js} +4 -4
  118. package/server/{injection-D7T75Pye.js → injection-DZ0PfYa4.js} +7 -7
  119. package/server/{injection-BVNa4MQW.js → injection-oNZeoDhL.js} +1 -1
  120. package/server/{inspect-agent-BXCgNeZ4.js → inspect-agent-DJKLWcVT.js} +12 -12
  121. package/server/inspect-agent-ch-F-5Ci.js +2 -0
  122. package/server/{internal-token-CXsfxslp.js → internal-token-Bb4XeV2x.js} +2 -2
  123. package/server/{internal-token-C9DdEOKY.js → internal-token-DXdfprGr.js} +1 -1
  124. package/server/{io-DQR9PMgS.js → io-B3_AHDfr.js} +160 -184
  125. package/server/{issue-closed-DtmJM0D0.js → issue-closed-zhdvQicO.js} +7 -7
  126. package/server/{issue-lifecycle-CeyW_HoD.js → issue-lifecycle-CreaCkjW.js} +22 -22
  127. package/server/{issue-lifecycle-8PSS9Anq.js → issue-lifecycle-Dy4vd0Oa.js} +1 -1
  128. package/server/{issue-service-singleton-D_RVYBuL.js → issue-service-singleton-B5ushCvE.js} +8 -8
  129. package/server/{issue-service-singleton-DBZabEl7.js → issue-service-singleton-DabvBWUp.js} +1 -1
  130. package/server/{issues-pDW9VUNz.js → issues-B6ToV6x1.js} +2 -2
  131. package/server/{jsonl-parser-C3HVNR5d.js → jsonl-parser-Dhflo1SH.js} +3 -3
  132. package/server/{label-cleanup-DPwiZlWo.js → label-cleanup-BKPJm4Hv.js} +3 -3
  133. package/server/{label-reconciler-Df1ZduPH.js → label-reconciler-DdWbHEBu.js} +4 -4
  134. package/server/{launcher-generator-COgR2By1.js → launcher-generator-CHVm7bGT.js} +10 -9
  135. package/server/{layers-Cp1To4L8.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-taIb0PoH.js → lifecycle-io-D8iNBcux.js} +37 -37
  139. package/server/{lifecycle-CtPDcZ9u.js → lifecycle-sycO16hj.js} +6 -6
  140. package/server/{linear-client-DsFkIxee.js → linear-client-D4zqMnX7.js} +2 -2
  141. package/server/{linear-client-YwZMDIwQ.js → linear-client-DqhDQO9k.js} +1 -1
  142. package/server/memory-fts-worker.js +1 -1
  143. package/server/{merge-C1t-bspg.js → merge-C_ZEhbqI.js} +3 -3
  144. package/server/{merge-BwsyNRJV.js → merge-DK23JEdS.js} +1 -1
  145. package/server/{merge-agent-B-SnXOoc.js → merge-agent-BQM3a8z5.js} +1 -1
  146. package/server/{merge-agent-DDiIjzk-.js → merge-agent-XrB80vfT.js} +28 -28
  147. package/server/{merge-batch-Byt-QnEl.js → merge-batch-Bwoyr8Je.js} +1 -1
  148. package/server/{merge-blockers-BYjeXrVN.js → merge-blockers-BsFjGrQ8.js} +2 -2
  149. package/server/merge-ops-DlB1IM0Y.js +2 -0
  150. package/server/{merge-rebase-Cm6fXaZN.js → merge-rebase-C1KIVr0s.js} +2 -2
  151. package/server/{merge-set-DiISXcC-.js → merge-set-DLz0MkGT.js} +3 -3
  152. package/server/{merge-set-6LEglm6o.js → merge-set-DnSYdBEp.js} +1 -1
  153. package/server/{merge-sync-Do8_q32h.js → merge-sync-DZ9dojJn.js} +2 -2
  154. package/server/{merge-sync-B95_4in_.js → merge-sync-SSv3E-pl.js} +1 -1
  155. package/server/{merge-train-CKana8EH.js → merge-train-DxDfBTjr.js} +3 -3
  156. package/server/{merge-train-deps-BgmqwIfA.js → merge-train-deps-CyYQUksx.js} +4 -4
  157. package/server/{merge-verification-CqnUzGEK.js → merge-verification-CSizH3HY.js} +4 -4
  158. package/server/{multipart-parser-tdOQDJ3o.js → multipart-parser-Dt8YPN5S.js} +2 -2
  159. package/server/{no-resume-mode-BWOSZjWd.js → no-resume-mode-Cx3K0hHi.js} +11 -8
  160. package/server/node_modules/.package-lock.json +1 -1
  161. package/server/{orphan-proposed-reconciler-DSvsJ5M7.js → orphan-proposed-reconciler-BTkDrl4R.js} +1 -1
  162. package/server/{orphan-proposed-reconciler-xklgvNA7.js → orphan-proposed-reconciler-neK8dHQk.js} +15 -13
  163. package/server/package-lock.json +2 -2
  164. package/server/package.json +1 -1
  165. package/server/{pan-dir-DOcf6ug3.js → pan-dir-DeVUgwA7.js} +78 -58
  166. package/server/{paths-DooHpt9p.js → paths-_zEts6wc.js} +2 -2
  167. package/server/{pickup-CaskQ7j6.js → pickup-Dd0Znxxy.js} +1 -1
  168. package/server/{pipeline-membership-1LGRjo-k.js → pipeline-membership-0HaEGDlH.js} +186 -67
  169. package/server/{pipeline-notifier-CZsrU_nj.js → pipeline-notifier-6iCJplFZ.js} +1 -1
  170. package/server/{pipeline-notifier-B6FVsYF9.js → pipeline-notifier-D0ykk59O.js} +2 -2
  171. package/server/{project-pipelines-CtNG_rvs.js → project-pipelines-2sK1apsO.js} +2 -2
  172. package/server/projects-9SkRpES9.js +3 -0
  173. package/server/{prompts-EvhMeeHG.js → prompts-Dp4Tpk39.js} +2 -2
  174. package/server/{providers-DNSQqy2V.js → providers-DKkBXhxU.js} +1 -1
  175. package/server/{providers-BDDPULlp.js → providers-DV7ec8l7.js} +7 -7
  176. package/server/public/assets/{chunk-BO2N2NFS-sym_ufXe.js → chunk-BO2N2NFS-CltymLRg.js} +4 -4
  177. package/server/public/assets/{diagram-OG6HWLK6-CQJPBNBu.js → diagram-OG6HWLK6-D2f6pjgA.js} +1 -1
  178. package/server/public/assets/{dist-Bio7THQU.js → dist-BWR4qFiV.js} +1 -1
  179. package/server/public/assets/{dist-DukGS2YZ.js → dist-DEmlBBNQ.js} +3 -3
  180. package/server/public/assets/{ganttDiagram-6RSMTGT7-D4lWwte3.js → ganttDiagram-6RSMTGT7-DnfiViPK.js} +1 -1
  181. package/server/public/assets/{highlighted-body-OFNGDK62-CaLboCt5.js → highlighted-body-OFNGDK62-B8Wrmj9H.js} +1 -1
  182. package/server/public/assets/index-CUr1xv8w.css +1 -0
  183. package/server/public/assets/{index-Bwejq-5s.js → index-CsSuZQBI.js} +145 -144
  184. package/server/public/assets/{linear-qUWmMZ-c.js → linear-C9zFQpkX.js} +1 -1
  185. package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +1 -0
  186. package/server/public/assets/{pieDiagram-4H26LBE5-C4zYulEm.js → pieDiagram-4H26LBE5-lR8H7Yjd.js} +1 -1
  187. package/server/public/assets/{prod-C8VtLuWC.js → prod-B1jCQihw.js} +4 -4
  188. package/server/public/assets/{quadrantDiagram-W4KKPZXB-qP04zyZC.js → quadrantDiagram-W4KKPZXB-CVQ2guem.js} +1 -1
  189. package/server/public/assets/{sankeyDiagram-5OEKKPKP-eMPTX_cG.js → sankeyDiagram-5OEKKPKP-eD1RB4gm.js} +1 -1
  190. package/server/public/assets/{xychartDiagram-2RQKCTM6-Dme1PIt6.js → xychartDiagram-2RQKCTM6-ChEC6dQn.js} +1 -1
  191. package/server/public/index.html +2 -2
  192. package/server/{pull-requests-By_BteaL.js → pull-requests--Ib2jTgy.js} +1 -1
  193. package/server/{pull-requests-8z2N1UOV.js → pull-requests-CXIhdCYD.js} +13 -11
  194. package/server/{queries-ZABd5aXP.js → queries-6d7Cdtm7.js} +693 -104
  195. package/server/{rally-i_goYmiA.js → rally-B708-nZn.js} +3 -3
  196. package/server/{rally-api-DqKqIMNR.js → rally-api-nY0ZANw3.js} +2 -2
  197. package/server/{rally-api-xHazRk0d.js → rally-api-yjQ0TfHd.js} +1 -1
  198. package/server/{rally-client-COYz1vYR.js → rally-client-B1EJhfV0.js} +4 -4
  199. package/server/{rally-client-CGWEHaPd.js → rally-client-CULK2XAY.js} +1 -1
  200. package/server/rally-njs_mJrt.js +3 -0
  201. package/server/{reap-terminal-sessions-CaMkFOIH.js → reap-terminal-sessions-MWnqdLCJ.js} +1 -1
  202. package/server/{reap-terminal-sessions-DG9eiMVz.js → reap-terminal-sessions-N3BTkmX_.js} +1 -1
  203. package/server/{rebuild-stack-JUm0jqYP.js → rebuild-stack-Dp4eLkt4.js} +6 -6
  204. package/server/{rebuild-stack-CKjJAI8L.js → rebuild-stack-kA7XngID.js} +1 -1
  205. package/server/{reconstruct-cache-wU79aCee.js → reconstruct-cache-uWbZfjms.js} +6 -6
  206. package/server/record-t6V-3Dcj.js +3 -0
  207. package/server/{record-update-D3N6WMFR.js → record-update-DACtKh6_.js} +1 -1
  208. package/server/record-update-Dq0t2uBG.js +310 -0
  209. package/server/{recovery-trip-DkzJSej9.js → recovery-trip-BJtIQuag.js} +2 -2
  210. package/server/{release-engine-DMINVN8S.js → release-engine-DZpmGGzb.js} +5 -5
  211. package/server/{release-set-DeUSOEHy.js → release-set-hnXd_kga.js} +3 -3
  212. package/server/{remote-Dr5kGYSZ.js → remote-4tiENDaI.js} +3 -3
  213. package/server/{remote-b-c5bOce.js → remote-Br-ZWVIP.js} +3 -3
  214. package/server/{remote-agents-D6O_zETW.js → remote-agents-CRCg1L4H.js} +1 -1
  215. package/server/{remote-agents-Ct_WOyke.js → remote-agents-nmty1mLu.js} +6 -6
  216. package/server/{remote-completion-Dca3hAaa.js → remote-completion-BbWNd10K.js} +12 -12
  217. package/server/resume-CcKqnTvE.js +3 -0
  218. package/server/{review-agent-CCum8sGe.js → review-agent-DJRO8EG8.js} +1 -1
  219. package/server/{review-agent-CThvgK2r.js → review-agent-sKkE1FEL.js} +22 -22
  220. package/server/{review-artifacts-CXywD0F2.js → review-artifacts-BLbSC4ke.js} +5 -5
  221. package/server/{review-context-OYfKUprb.js → review-context-BgX3lcCx.js} +8 -8
  222. package/server/{review-status-DFRjDFef.js → review-status-A7quS5KJ.js} +54 -21
  223. package/server/review-status-C6n6-9f_.js +3 -0
  224. package/server/{review-status-enrichment-crNAtIpL.js → review-status-enrichment-tbOn_A_u.js} +3 -3
  225. package/server/{review-status-sync-DpAMD_WO.js → review-status-sync-BhSQ0d0l.js} +2 -2
  226. package/server/{review-status-sync-D60PJWNL.js → review-status-sync-To3-iS-N.js} +1 -1
  227. package/server/{review-verdict-feedback-JImjut0z.js → review-verdict-feedback-C1Kg8n7t.js} +1 -1
  228. package/server/{review-verdict-feedback-CpUZl5aE.js → review-verdict-feedback-CTRNtzXO.js} +6 -6
  229. package/server/{rollup-CZ02qgxk.js → rollup-B53Y81xK.js} +1 -1
  230. package/server/{rollup-SyuF09e4.js → rollup-WA0VD-Rr.js} +8 -8
  231. package/server/{scanner-Br0Z5S6R.js → scanner-D2743cp8.js} +11 -7
  232. package/server/{sequence-io-fxU0DlwW.js → sequence-io-Cg0zYj_E.js} +4 -4
  233. package/server/{sequencer-agent-B5YC5XVP.js → sequencer-agent-BGY8gjg-.js} +5 -5
  234. package/server/server.js +941 -752
  235. package/server/{service-Bagb90KZ.js → service-DCpB_SGd.js} +53 -53
  236. package/server/{session-fork-BqQxd-V6.js → session-fork-BQ8_6H32.js} +2 -2
  237. package/server/{session-history-XdS0JKp3.js → session-history-CVZDpS3c.js} +4 -4
  238. package/server/{settings-BNbocWOg.js → settings-BZ5m1UCl.js} +3 -3
  239. package/server/settings-D0OSwos5.js +2 -0
  240. package/server/{settings-uLc6DEYI.js → settings-ylxwqwQG.js} +2 -2
  241. package/server/{shadow-engineering-D4X_s3fA.js → shadow-engineering-BlxG6Xye.js} +2 -2
  242. package/server/{shadow-state-CbvsN3qG.js → shadow-state-C2_epgx2.js} +1 -1
  243. package/server/{shadow-state-C_NkP-sa.js → shadow-state-Dh-HzF2J.js} +2 -2
  244. package/server/{shadow-utils-CYMRPeRT.js → shadow-utils-4bvjn9b3.js} +2 -2
  245. package/server/{ship-log-__QtAFXG.js → ship-log-ClSMIzZX.js} +1 -1
  246. package/server/{smart-compaction-jdMkG1vo.js → smart-compaction-CHIxLr_d.js} +1 -1
  247. package/server/{smart-compaction-CLZOWin1.js → smart-compaction-r4pHQBIr.js} +7 -7
  248. package/server/{spawn-planning-session-D5OXo8pT.js → spawn-planning-session-DWAorh2B.js} +22 -21
  249. package/server/{spawn-planning-session-8D6mE033.js → spawn-planning-session-KC_UduxD.js} +1 -1
  250. package/server/{specialist-completion-CqmduO92.js → specialist-completion-BXhav38U.js} +1 -1
  251. package/server/{specialist-context-CJ-QjFR-.js → specialist-context-DtrYvGJ-.js} +5 -5
  252. package/server/{specialist-handoff-logger-Dnjlwt7g.js → specialist-handoff-logger-C45ouoZ6.js} +2 -2
  253. package/server/{specialist-logs-CQnKzuZs.js → specialist-logs-DJ3RzKxW.js} +3 -3
  254. package/server/{specialists-D0gGXMZx.js → specialists-D5fRZXmN.js} +1 -1
  255. package/server/specialists-DVj0hvaL.js +3 -0
  256. package/server/{specialists-CwZHb5cb.js → specialists-DyFeedjn.js} +66 -76
  257. package/server/{specialists-Bg9v4z3F.js → specialists-JVO00bs7.js} +340 -214
  258. package/server/specs-nN45DG2X.js +3 -0
  259. package/server/{src-BMMoA_ba.js → src-CG9mCkP6.js} +6 -6
  260. package/server/{src-Bqdtd6po.js → src-CMTQGyCK.js} +3 -3
  261. package/server/{src-k039WVYY.js → src-U7_kTPEE.js} +2 -1
  262. package/server/{stack-health-Bd06frFn.js → stack-health-Df0YEZKa.js} +1 -1
  263. package/server/{stack-health-C-ifC7b0.js → stack-health-puygdaMd.js} +2 -2
  264. package/server/{stale-task-claims-L7pJkQFL.js → stale-task-claims-BbFwCTb0.js} +4 -4
  265. package/server/{staleness-BID1BKdr.js → staleness-Bpy41ngS.js} +15 -3
  266. package/server/{staleness-_Tr-GwdA.js → staleness-Cbl_w4Bw.js} +1 -1
  267. package/server/{state-home-CONQvZR0.js → state-home-CIGjwNfJ.js} +96 -44
  268. package/server/{state-migrate-BeBW0KXA.js → state-migrate-Dkzaxvny.js} +12 -3
  269. package/server/{stuck-remediation-CKnIryGT.js → stuck-remediation-CzEov_fq.js} +26 -22
  270. package/server/{stuck-remediation-CsGD5Ksb.js → stuck-remediation-sY_MHHgQ.js} +1 -1
  271. package/server/{substrate-bug-weights-service-CpIZILj9.js → substrate-bug-weights-service-BH66lhm7.js} +3 -3
  272. package/server/{summary-fork-agEMsPSo.js → summary-fork-D8bXjCr7.js} +2 -2
  273. package/server/{summary-fork-bX6ax6X7.js → summary-fork-DHhJIsAL.js} +8 -8
  274. package/server/{supervisor-Ctt4eRYz.js → supervisor-BO-Zk_h-.js} +3 -3
  275. package/server/supervisor-BPy-o1A8.js +2 -0
  276. package/server/{swarm-readiness-DdmJVX7y.js → swarm-readiness-CQ_fwUWF.js} +4 -4
  277. package/server/{system-prerequisites-DSXBvffY.js → system-prerequisites-Bza0ffAh.js} +2 -2
  278. package/server/{teardown-workspace-DDCf5n-a.js → teardown-workspace-CEgauF4U.js} +15 -15
  279. package/server/{test-agent-queue-BJZ9Nfcc.js → test-agent-queue-DXDt0Xa-.js} +7 -7
  280. package/server/{test-verdict-Cp5tljlJ.js → test-verdict-CmUBK5cT.js} +1 -1
  281. package/server/{test-verdict-D_-sXIz_.js → test-verdict-DFjjIHR5.js} +1 -1
  282. package/server/{tldr-daemon-BQFmmFp0.js → tldr-daemon-BDtLOIlO.js} +2 -2
  283. package/server/{tldr-daemon-B8_oT5gx.js → tldr-daemon-DL566HbH.js} +1 -1
  284. package/server/tmux-DoThH6aj.js +3 -0
  285. package/server/{tmux-L5LgvGLp.js → tmux-ftABRAmc.js} +76 -44
  286. package/server/{token-BkQLy4yS.js → token-CsOhvw42.js} +2 -2
  287. package/server/{token-util-DI8sGlmF.js → token-util-CTmczIfW.js} +1 -1
  288. package/server/token-util-DrHg8abn.js +3 -0
  289. package/server/{tracker-config-DdT-nUAM.js → tracker-config-B4itFzDo.js} +2 -2
  290. package/server/{tracker-utils-DV3h1FYG.js → tracker-utils-BePq_oj-.js} +1 -1
  291. package/server/{tracker-utils-CawsPSS2.js → tracker-utils-tnxxqROg.js} +2 -2
  292. package/server/{traefik-connect-C6mJckNs.js → traefik-connect-m73vGebA.js} +1 -1
  293. package/server/{tunnel-IdK1iTHx.js → tunnel-B2vxjx_b.js} +3 -3
  294. package/server/{tunnel-BIFl98rc.js → tunnel-Cgj-IGIl.js} +1 -1
  295. package/server/{types-7-GnJn0t.js → types-BBNjPcqU.js} +1 -1
  296. package/server/{uat-train-j0cPeMSj.js → uat-train-CuEn0t9M.js} +28 -28
  297. package/server/{uat-train-0Ujk8GCv.js → uat-train-cKfM-_WW.js} +1 -1
  298. package/server/{validation-CabEISJT.js → validation-B5JxoPUS.js} +259 -9
  299. package/server/{validation-DcAgXTQp.js → validation-CIi6pnI2.js} +1 -1
  300. package/server/{verification-artifact-BuTA1QbL.js → verification-artifact-BcnIbigL.js} +1 -1
  301. package/server/{verification-artifact-Ck1tefmz.js → verification-artifact-C-lIHfUa.js} +1 -1
  302. package/server/{verification-runner-FiuAZ-H2.js → verification-runner-Br0S_Ous.js} +102 -37
  303. package/server/{verification-runner-DlJezzef.js → verification-runner-CDj4lD4t.js} +1 -1
  304. package/server/{vtt-parser-BnRsYzcz.js → vtt-parser-DKpNNW5i.js} +1 -1
  305. package/server/{work-agent-prompt-DLthEPAq.js → work-agent-prompt-Yb2bd3Fq.js} +13 -13
  306. package/server/{workflows-BZNNYkGC.js → workflows-C9WmILql.js} +39 -77
  307. package/server/workflows-D90rMOya.js +2 -0
  308. package/server/{workspace-D9ppycdg.js → workspace-BVl4rihN.js} +3 -3
  309. package/server/{workspace-3IC-UkAi.js → workspace-DuUdndHe.js} +1 -1
  310. package/server/{workspace-config-Bigl_-Lk.js → workspace-config-cEGcO6UT.js} +1 -1
  311. package/server/{workspace-manager-B1WOfKvB.js → workspace-manager-ZTdJAy9M.js} +1 -1
  312. package/server/{workspace-manager-ClkCIWTe.js → workspace-manager-hLUv3ADC.js} +22 -15
  313. package/server/{workspace-metadata-tiSRIWJP.js → workspace-metadata-CskwzzhL.js} +2 -2
  314. package/server/{workspace-metadata-BE0efUv_.js → workspace-metadata-DNpMixRq.js} +1 -1
  315. package/server/{workspaces-CFPcL0vl.js → workspaces-hWvy9eKs.js} +275 -109
  316. package/sync-sources/agents/pan-inspect-agent.md +1 -1
  317. package/sync-sources/agents/pan-merge-agent.md +1 -1
  318. package/sync-sources/agents/pan-planning-agent.md +4 -4
  319. package/sync-sources/agents/pan-work-agent.md +1 -1
  320. package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
  321. package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
  322. package/sync-sources/hooks/record-cost-event.js +363 -71
  323. package/sync-sources/hooks/session-start-hook +7 -0
  324. package/sync-sources/hooks/work-agent-stop-hook +1 -1
  325. package/sync-sources/rules/per-bead-durability.md +1 -1
  326. package/sync-sources/rules/prd-authoring.md +1 -1
  327. package/sync-sources/skills/feature-work/SKILL.md +1 -1
  328. package/sync-sources/skills/pan/SKILL.md +2 -2
  329. package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
  330. package/sync-sources/skills/pan-approve/SKILL.md +1 -1
  331. package/sync-sources/skills/pan-close/SKILL.md +1 -1
  332. package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
  333. package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
  334. package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
  335. package/sync-sources/skills/pan-plan/SKILL.md +6 -6
  336. package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
  337. package/sync-sources/skills/pan-recap/SKILL.md +2 -2
  338. package/sync-sources/skills/pan-review/SKILL.md +1 -1
  339. package/sync-sources/skills/pan-start/SKILL.md +3 -3
  340. package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
  341. package/sync-sources/skills/pan-sync/SKILL.md +1 -1
  342. package/sync-sources/skills/pan-task/SKILL.md +2 -2
  343. package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
  344. package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
  345. package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
  346. package/sync-sources/skills/plan/SKILL.md +11 -11
  347. package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
  348. package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
  349. package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
  350. package/server/agent-state-Co5Sy2Fw.js +0 -3
  351. package/server/agents-DyHKlq1I.js +0 -3
  352. package/server/cli-BRORS9qY.js +0 -3
  353. package/server/codex-DNyiQDKW.js +0 -3
  354. package/server/deacon-swarm-CV54eNmU.js +0 -2
  355. package/server/dist-j64RzSrQ.js +0 -3
  356. package/server/forge-B0_opi-V.js +0 -2
  357. package/server/hume-BmhvfVbV.js +0 -3
  358. package/server/inspect-agent-Dq0z1k3H.js +0 -2
  359. package/server/lifecycle-io-DmY2qwCn.js +0 -3
  360. package/server/merge-ops-DwWCkSgo.js +0 -2
  361. package/server/projects-BKkwpH6q.js +0 -3
  362. package/server/public/assets/index-Bdc4V9ba.css +0 -1
  363. package/server/public/assets/mermaid-GHXKKRXX-B5v_r7cI.js +0 -1
  364. package/server/rally-OSJXdiHK.js +0 -3
  365. package/server/record-rwK-nKv_.js +0 -3
  366. package/server/record-update-Crz74r-6.js +0 -168
  367. package/server/resume-wZZsWtzz.js +0 -3
  368. package/server/review-status-Bnh-rdkY.js +0 -3
  369. package/server/settings-BlUsVaUc.js +0 -2
  370. package/server/specialists-Dqe6_HE5.js +0 -3
  371. package/server/specs-BhOKBzqk.js +0 -3
  372. package/server/supervisor-COVHrBTg.js +0 -2
  373. package/server/tmux-BAvtac_u.js +0 -3
  374. package/server/token-util-BArZLN6w.js +0 -3
  375. package/server/workflows-C4mR0Reb.js +0 -2
@@ -1,15 +1,16 @@
1
- import { Hn as init_projects, fr as init_issue_id, ii as init_paths, jr as init_errors, kn as findProjectByPathSync, mn as init_state_plane, nr as resolveProjectFromIssueSync, oi as packageRoot, ri as getOverdeckHome } from "./config-yaml-ig8Nwtiw.js";
2
- import { c as init_review_status, f as markWorkspaceStuck, s as getReviewStatusSync, y as setReviewStatusSync } from "./review-status-DFRjDFef.js";
3
- import { $ as stopAgent, Kn as setAgentPaused, L as messageAgent, s as init_agents } from "./queries-ZABd5aXP.js";
4
- import { n as init_tracker_utils } from "./tracker-utils-CawsPSS2.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
5
  import { i as readReviewStatusMap, n as init_review_status_source } from "./review-status-source-CxuEjLGg.js";
6
- import { m as readWorkspacePlanSync, o as init_io, t as VBriefMergeConflictError, v as init_types, y as subItemsOf } from "./io-DQR9PMgS.js";
7
- import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-BXP6g75N.js";
8
- import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-DZ-iAnAa.js";
9
- import { n as init_shadow_utils } from "./shadow-utils-CYMRPeRT.js";
10
- import { i as runQualityGates, n as init_validation, t as DEFAULT_GATES } from "./validation-CabEISJT.js";
11
- import { r as writeVerificationArtifact, t as readVerificationArtifact } from "./verification-artifact-BuTA1QbL.js";
12
- import { n as getVBriefACStatusSync } from "./acceptance-criteria-BH7ac_1G.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";
13
14
  import { join } from "node:path";
14
15
  import { Data, Effect } from "effect";
15
16
  import { existsSync } from "fs";
@@ -58,7 +59,18 @@ function isProcessAlive(pid) {
58
59
  function readVerificationWorkerState(issueId) {
59
60
  try {
60
61
  const parsed = JSON.parse(readFileSync$1(statePath(issueId), "utf8"));
61
- 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
+ };
62
74
  } catch {
63
75
  return null;
64
76
  }
@@ -72,20 +84,36 @@ function writeJsonAtomic(path, value) {
72
84
  writeFileSync$1(temp, `${JSON.stringify(value, null, 2)}\n`);
73
85
  renameSync$1(temp, path);
74
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
+ }
75
103
  async function waitForResult(state) {
76
- const deadline = Date.now() + MAX_RUN_MS;
77
- while (Date.now() < deadline) {
104
+ for (;;) {
78
105
  if (existsSync$1(state.resultPath)) return JSON.parse(readFileSync$1(state.resultPath, "utf8"));
79
106
  if (!isProcessAlive(state.pid)) return {
80
107
  outcome: "error",
81
108
  message: `Verification worker ${state.pid} exited before writing a result`
82
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
+ };
83
115
  await new Promise((resolve) => setTimeout(resolve, POLL_MS));
84
116
  }
85
- return {
86
- outcome: "error",
87
- message: `Verification worker ${state.pid} exceeded ${MAX_RUN_MS}ms`
88
- };
89
117
  }
90
118
  async function runSupervisedVerification(issueId, workspacePath, workspaceInfo, logPrefix, options = {}) {
91
119
  const existing = readVerificationWorkerState(issueId);
@@ -135,7 +163,9 @@ async function runSupervisedVerification(issueId, workspacePath, workspaceInfo,
135
163
  workspacePath,
136
164
  pid: child.pid,
137
165
  startedAt: (/* @__PURE__ */ new Date()).toISOString(),
138
- resultPath
166
+ resultPath,
167
+ phase: "queued",
168
+ admittedAt: null
139
169
  };
140
170
  writeJsonAtomic(statePath(issueId), state);
141
171
  child.unref();
@@ -146,6 +176,7 @@ async function runSupervisedVerification(issueId, workspacePath, workspaceInfo,
146
176
  //#region ../../lib/work/test-requirement-gate.ts
147
177
  init_projects();
148
178
  init_state_plane();
179
+ init_lifecycle();
149
180
  init_types();
150
181
  init_io();
151
182
  init_agents();
@@ -170,7 +201,7 @@ promisify(exec);
170
201
  const terminal = new Set(["completed", "cancelled"]);
171
202
  function checkIncompletePlanItemsSync(workspacePath) {
172
203
  const doc = readWorkspacePlanSync(workspacePath);
173
- 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."];
174
205
  const incomplete = doc.plan.items.flatMap((item) => {
175
206
  const lines = [];
176
207
  if (!terminal.has(item.status)) lines.push(` - ${item.id} ${item.title} (${item.status})`);
@@ -196,6 +227,19 @@ async function checkIncompletePlanItemsPromise(workspacePath, _issueId) {
196
227
  init_io();
197
228
  const execAsync = promisify$1(exec$1);
198
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
+ }
199
243
  function isFinalVerificationAttempt(cycleCount) {
200
244
  return cycleCount >= 3;
201
245
  }
@@ -222,6 +266,7 @@ function setStateDerivedVerificationFailure(issueId, failedCheck, summary, cycle
222
266
  console.warn(`[verification-runner] ${issueId} review is passed but held by state-derived gate ${failedCheck}: ${summary}`);
223
267
  }
224
268
  async function escalateVerificationStuck(issueId, failedCheck, cycleCount, summary, logPrefix) {
269
+ if (skipMergedVerification(issueId, logPrefix)) return;
225
270
  const agentId = `agent-${issueId.toLowerCase()}`;
226
271
  const reason = `needs-you: verification stuck after ${cycleCount}/3 attempts (${failedCheck})`;
227
272
  markWorkspaceStuck(issueId, "verification_stuck", {
@@ -287,7 +332,9 @@ function reconcileInterruptedVerifications(logPrefix = "boot-reconciliation") {
287
332
  return reset;
288
333
  }
289
334
  async function deliverVerificationFeedback(issueId, message, details, logPrefix) {
335
+ if (skipMergedVerification(issueId, logPrefix)) return;
290
336
  const target = await resolveIssueFeedbackTarget(issueId);
337
+ if (skipMergedVerification(issueId, logPrefix)) return;
291
338
  if ("agentId" in target) {
292
339
  await messageAgent(target.agentId, message, "internal", { owesRework: true });
293
340
  console.log(`[${logPrefix}] Sent verification feedback for ${issueId} to ${target.agentId}`);
@@ -399,17 +446,19 @@ function getSyncTargetBranch(workspacePath, projectConfig, repoName) {
399
446
  }
400
447
  /**
401
448
  * PAN-2179: detect a "plan-only" / zombie changeset — one whose only changes are
402
- * pipeline artifacts (.pan/, beads, vbrief) with no actual implementation. A work
449
+ * pipeline artifacts (.pan/, task state, xBRIEF) with no actual implementation. A work
403
450
  * agent that never received its kickoff produces exactly this. The verification
404
451
  * gate uses it to bounce the branch back instead of letting an empty "completion"
405
452
  * advance to review/merge. A legit non-code change (docs, rules under
406
453
  * sync-sources/, config) counts as content and is NOT flagged.
407
454
  */
408
455
  function changesetHasNoContent(changedFiles) {
409
- 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;
410
457
  }
411
458
  async function runVerificationForIssuePromise(issueId, workspacePath, workspaceInfo, logPrefix, options = {}) {
412
459
  const currentStatus = getReviewStatusSync(issueId);
460
+ const mergedOutcome = skipMergedVerification(issueId, logPrefix, currentStatus);
461
+ if (mergedOutcome) return mergedOutcome;
413
462
  const currentCycles = currentStatus?.verificationCycleCount ?? 0;
414
463
  if (currentCycles >= 3) {
415
464
  const reason = `Circuit breaker: ${currentCycles}/3 cycles exceeded — skipping verification`;
@@ -435,6 +484,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
435
484
  console.log(`[${logPrefix}] Syncing ${targetBranch} into ${displayName} for ${issueId}...`);
436
485
  syncResults.push(await syncSingleRepo(gitDir, targetBranch));
437
486
  }
487
+ const postSyncMergedOutcome = skipMergedVerification(issueId, logPrefix);
488
+ if (postSyncMergedOutcome) return postSyncMergedOutcome;
438
489
  const failures = syncResults.filter((r) => !r.success);
439
490
  if (failures.length > 0) {
440
491
  const newCycleCount = currentCycles + 1;
@@ -482,6 +533,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
482
533
  }
483
534
  }
484
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;
485
538
  const gates = projectConfig?.quality_gates && Object.keys(projectConfig.quality_gates).length > 0 ? projectConfig.quality_gates : DEFAULT_GATES;
486
539
  console.log(`[${logPrefix}] Project: ${projectConfig?.name || "NOT FOUND"}, gates: [${Object.keys(gates).join(", ")}], workspace: ${workspacePath}`);
487
540
  const featureFolder = basename$1(workspacePath);
@@ -545,10 +598,12 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
545
598
  };
546
599
  writeLiveArtifact();
547
600
  const gateResults = await Effect.runPromise(runQualityGates(gates, workspacePath, "pre_push", {
601
+ issueId,
548
602
  isRemote: workspaceInfo.isRemote,
549
603
  vmName: workspaceInfo.vmName,
550
604
  placeholders,
551
605
  ...options.onGateLog ? { onLog: options.onGateLog } : {},
606
+ onAdmissionPhase: (state) => markVerificationWorkerAdmissionPhase(issueId, state),
552
607
  onGateStart: (name) => {
553
608
  liveGateName = name;
554
609
  liveGateTail = "";
@@ -569,6 +624,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
569
624
  writeLiveArtifact();
570
625
  }
571
626
  }));
627
+ const postGateMergedOutcome = skipMergedVerification(issueId, logPrefix);
628
+ if (postGateMergedOutcome) return postGateMergedOutcome;
572
629
  const failedGate = gateResults.find((r) => !r.passed && r.required !== false);
573
630
  if (failedGate?.infraUnavailable) {
574
631
  try {
@@ -580,7 +637,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
580
637
  verificationNotes: `Verification deferred: ${failedGate.error}. Workspace stack rebuild triggered; verification re-runs on the next cycle.`
581
638
  });
582
639
  try {
583
- const { rebuildWorkspaceStack } = await import("./rebuild-stack-CKjJAI8L.js");
640
+ const { rebuildWorkspaceStack } = await import("./rebuild-stack-kA7XngID.js");
584
641
  Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[${logPrefix}] ${issueId} stack rebuild: ${m}`) })).then((r) => {
585
642
  if (!r.success) console.warn(`[${logPrefix}] Stack rebuild for ${issueId} failed: ${r.error}`);
586
643
  });
@@ -640,30 +697,30 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
640
697
  }
641
698
  let acStatus;
642
699
  try {
643
- acStatus = getVBriefACStatusSync(workspacePath);
644
- } catch (vbriefErr) {
645
- if (vbriefErr instanceof VBriefMergeConflictError) {
700
+ acStatus = getXBriefACStatusSync(workspacePath);
701
+ } catch (xbriefErr) {
702
+ if (xbriefErr instanceof XBriefMergeConflictError) {
646
703
  const newCycleCount = currentCycles + 1;
647
704
  const failedCheck = "vbrief-conflicts";
648
- 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.`;
649
706
  setStateDerivedVerificationFailure(issueId, failedCheck, summary, newCycleCount, currentStatus);
650
707
  if (shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount)) await escalateVerificationStuck(issueId, failedCheck, newCycleCount, summary, logPrefix);
651
- 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.`;
652
709
  try {
653
710
  const fileResult = await Effect.runPromise(writeFeedbackFile({
654
711
  issueId,
655
712
  workspacePath,
656
713
  specialist: "verification-gate",
657
714
  outcome: "failed",
658
- summary: `vBRIEF plan has merge conflicts (attempt ${newCycleCount}/3)`,
715
+ summary: `xBRIEF plan has merge conflicts (attempt ${newCycleCount}/3)`,
659
716
  markdownBody: feedbackBody
660
717
  }));
661
- 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.`, {
662
719
  failedCheck,
663
720
  feedbackPath: fileResult.filePath
664
721
  }, logPrefix);
665
722
  } catch (feedbackErr) {
666
- 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);
667
724
  }
668
725
  return {
669
726
  outcome: "failed",
@@ -672,7 +729,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
672
729
  maxCycles: 3
673
730
  };
674
731
  }
675
- throw vbriefErr;
732
+ throw xbriefErr;
676
733
  }
677
734
  if (acStatus && !acStatus.allCompleted) {
678
735
  const newCycleCount = currentCycles + 1;
@@ -708,7 +765,9 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
708
765
  maxCycles: 3
709
766
  };
710
767
  }
711
- 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;
712
771
  if (taskBlockers.length > 0) {
713
772
  const newCycleCount = currentCycles + 1;
714
773
  const failedCheck = "incomplete-plan-items";
@@ -746,10 +805,12 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
746
805
  encoding: "utf-8",
747
806
  timeout: 15e3
748
807
  });
808
+ const postDiffMergedOutcome = skipMergedVerification(issueId, logPrefix);
809
+ if (postDiffMergedOutcome) return postDiffMergedOutcome;
749
810
  if (changesetHasNoContent(changedOut.split("\n"))) {
750
811
  const newCycleCount = currentCycles + 1;
751
812
  const failedCheck = "empty-changeset";
752
- 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).`;
753
814
  setReviewStatusSync(issueId, {
754
815
  reviewStatus: "pending",
755
816
  verificationStatus: "failed",
@@ -759,7 +820,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
759
820
  });
760
821
  if (shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount)) await escalateVerificationStuck(issueId, failedCheck, newCycleCount, summary, logPrefix);
761
822
  try {
762
- 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.`, {
763
824
  failedCheck,
764
825
  changedBase
765
826
  }, logPrefix);
@@ -786,6 +847,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
786
847
  });
787
848
  lastVerifiedCommit = stdout.trim();
788
849
  } catch {}
850
+ const prePassMergedOutcome = skipMergedVerification(issueId, logPrefix);
851
+ if (prePassMergedOutcome) return prePassMergedOutcome;
789
852
  setReviewStatusSync(issueId, {
790
853
  verificationStatus: "passed",
791
854
  verificationNotes: void 0,
@@ -797,7 +860,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
797
860
  const repo = findProjectByPathSync(workspacePath)?.github_repo;
798
861
  if (!repo || !repo.includes("/")) return;
799
862
  const [owner, name] = repo.split("/");
800
- const { postOverdeckTestsStatus } = await import("./github-app-CU14oYzP.js");
863
+ const { postOverdeckTestsStatus } = await import("./github-app-CPfoFAdV.js");
801
864
  await postOverdeckTestsStatus(workspacePath, owner, name, "success", "Verification gate passed");
802
865
  } catch (err) {
803
866
  console.warn(`[${logPrefix}] Failed to post overdeck/tests status: ${err.message}`);
@@ -805,6 +868,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
805
868
  })();
806
869
  return { outcome: "passed" };
807
870
  } catch (verifyErr) {
871
+ const errorMergedOutcome = skipMergedVerification(issueId, logPrefix);
872
+ if (errorMergedOutcome) return errorMergedOutcome;
808
873
  setReviewStatusSync(issueId, {
809
874
  reviewStatus: "pending",
810
875
  verificationStatus: "failed",
@@ -833,4 +898,4 @@ function runVerificationForIssueInProcess(issueId, workspacePath, workspaceInfo,
833
898
  //#endregion
834
899
  export { runVerificationForIssueInProcess as i, reconcileInterruptedVerifications as n, runVerificationForIssue as r, changesetHasNoContent as t };
835
900
 
836
- //# sourceMappingURL=verification-runner-FiuAZ-H2.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-FiuAZ-H2.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-BnRsYzcz.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 { Bt as resolveProjectForIssue, Dn as extractTeamPrefix, Hn as init_projects, Mt as getProjectConfigFromWorkspacePath, Nt as init_record, jn as findProjectByTeamSync, t as init_config_yaml, u as isTldrEnabledSync, zt as readRecordContinueViewSync } from "./config-yaml-ig8Nwtiw.js";
3
- import { d as readPlanSync, i as findPlanSync, o as init_io, p as readWorkspacePlan } from "./io-DQR9PMgS.js";
4
- import { f as init_config, m as loadConfigSync } from "./config-q4Gvd8dq.js";
5
- import { i as NotImplementedError, o as init_interface } from "./rally-api-DqKqIMNR.js";
6
- import { n as createTrackerFromConfig, r as init_factory } from "./factory-BMrK4TrE.js";
7
- import { i as createActiveSlice, l as init_dag, o as getDispatchableItems } from "./dag-CJpgf9A3.js";
8
- import { l as getReadableWorkspacePanPaths, n as readWorkspaceContext, o as readFeedback, r as writeWorkspaceContext, t as init_pan_dir } from "./pan-dir-DOcf6ug3.js";
9
- import { n as renderPrompt, t as init_prompts } from "./prompts-EvhMeeHG.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 "";
@@ -295,9 +295,9 @@ async function writeStoryFeatureContext(workspacePath, issueId) {
295
295
  const subItems = item.subItems?.map((s) => ` - ${s.title} (${s.status})`).join("\n") || "";
296
296
  return `- **${item.id}**: ${item.title} (${item.status})${item.narrative?.Action ? `\n - Action: ${item.narrative.Action}` : ""}${subItems ? `\n${subItems}` : ""}`;
297
297
  }).join("\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 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`;
299
299
  } catch (planErr) {
300
- 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)}`);
301
301
  }
302
302
  const parentPanContext = await Effect.runPromise(readWorkspaceContext(parentWorkspace));
303
303
  if (parentPanContext && !contextContent) contextContent = parentPanContext;
@@ -436,4 +436,4 @@ __esmMin((() => {
436
436
  }))();
437
437
  export { buildPolyrepoContext, buildWorkAgentPrompt, extractStitchDesigns, getTrackerContext, readFeatureContext, readPlanningContext, writeStoryFeatureContext };
438
438
 
439
- //# sourceMappingURL=work-agent-prompt-DLthEPAq.js.map
439
+ //# sourceMappingURL=work-agent-prompt-Yb2bd3Fq.js.map
@@ -1,23 +1,22 @@
1
- import { Bt as resolveProjectForIssue, It as readIssueRecord, Mt as getProjectConfigFromWorkspacePath, Nt as init_record, Pt as markRecordPipelineClosedOutSync, Ut as writeCloseOutDodGate, Vr as OVERDECK_HOME, dr as extractPrefixSync, fr as init_issue_id, ii as init_paths, ur as extractNumberSync } from "./config-yaml-ig8Nwtiw.js";
2
- import { c as init_review_status, o as getReviewStatus } from "./review-status-DFRjDFef.js";
3
- import { i as listRunningAgents, s as init_agents } from "./queries-ZABd5aXP.js";
4
- import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population-B-CI9hgE.js";
5
- import { f as init_config, s as getDashboardApiUrlSync } from "./config-q4Gvd8dq.js";
6
- import { i as loadCloisterConfig, r as init_config$1 } from "./config-DeTsoZdR.js";
7
- import { r as getAutoCloseOutCanonicalState, t as pruneStoppedAgentsForIssue } from "./agent-gc-Dj2gncak.js";
8
- import { i as findWorkspacePath, o as init_archive_planning, t as archivePlanning } from "./archive-planning-BvDuWNMo.js";
9
- import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed, t as getLinearApiKey } from "./types-7-GnJn0t.js";
10
- import { t as closeIssue } from "./close-issue-CxReRxIc.js";
11
- import { o as init_pull_requests, r as fetchIssuePullRequest, t as fetchCommitCheckRuns } from "./pull-requests-8z2N1UOV.js";
12
- import { n as acceptFlagFor, t as DOD_ROWS } from "./dod-DbJLYcHv.js";
13
- import { t as teardownWorkspace } from "./teardown-workspace-DDCf5n-a.js";
1
+ import { Dt as getProjectConfigFromWorkspacePath, Ft as resolveProjectForIssue, Jn as extractPrefixSync, Lt as writeCloseOutDodGate, Ot as init_record, Vr as init_paths, Yn as init_issue_id, jt as readIssueRecord, kt as markRecordPipelineClosedOutSync, qn as extractNumberSync, wr as OVERDECK_HOME } from "./config-yaml-DvyMuOle.js";
2
+ import { l as init_review_status, s as getReviewStatus } from "./review-status-A7quS5KJ.js";
3
+ import { b as init_agents, i as listRunningAgents } from "./queries-6d7Cdtm7.js";
4
+ import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population-B0pmAz0a.js";
5
+ import { f as init_config, s as getDashboardApiUrlSync } from "./config-CCvjQf27.js";
6
+ import { i as loadCloisterConfig, r as init_config$1 } from "./config-DjLOdbgT.js";
7
+ import { r as getAutoCloseOutCanonicalState, t as pruneStoppedAgentsForIssue } from "./agent-gc-BV1q_2EV.js";
8
+ import { i as findWorkspacePath, o as init_archive_planning, t as archivePlanning } from "./archive-planning-DYrYojxl.js";
9
+ import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed, t as getLinearApiKey } from "./types-BBNjPcqU.js";
10
+ import { t as closeIssue } from "./close-issue-Dn_4c4G8.js";
11
+ import { o as init_pull_requests, r as fetchIssuePullRequest, t as fetchCommitCheckRuns } from "./pull-requests-CXIhdCYD.js";
12
+ import { n as acceptFlagFor, t as DOD_ROWS } from "./dod-BrSfUHm0.js";
13
+ import { t as teardownWorkspace } from "./teardown-workspace-CEgauF4U.js";
14
14
  import { resolve } from "node:path";
15
15
  import { Effect } from "effect";
16
16
  import { existsSync } from "fs";
17
17
  import { join as join$1 } from "path";
18
18
  import { userInfo } from "node:os";
19
- import { stat } from "node:fs/promises";
20
- import { copyFile, readFile as readFile$1, writeFile as writeFile$1 } from "fs/promises";
19
+ import { copyFile, readFile, writeFile } from "fs/promises";
21
20
  import { execFile } from "node:child_process";
22
21
  import { promisify } from "node:util";
23
22
  import { exec as exec$1 } from "child_process";
@@ -98,32 +97,7 @@ const defaultDeployRowDeps = {
98
97
  } catch {
99
98
  return false;
100
99
  }
101
- },
102
- serverStartedAt: async (port) => {
103
- const { stdout: pidOutput } = await execFileAsync("lsof", [
104
- "-ti",
105
- `tcp:${port}`,
106
- "-sTCP:LISTEN"
107
- ], {
108
- encoding: "utf-8",
109
- timeout: 1e4
110
- });
111
- const pid = pidOutput.trim().split("\n")[0];
112
- if (!pid) throw new Error(`no dashboard process owns port ${port}`);
113
- const { stdout } = await execFileAsync("ps", [
114
- "-o",
115
- "lstart=",
116
- "-p",
117
- pid
118
- ], {
119
- encoding: "utf-8",
120
- timeout: 1e4
121
- });
122
- const startedAt = new Date(stdout.trim());
123
- if (Number.isNaN(startedAt.getTime())) throw new Error(`could not parse dashboard process start time: ${stdout.trim()}`);
124
- return startedAt;
125
- },
126
- distMtime: async (repoRoot) => new Date((await stat(resolve(repoRoot, "dist/dashboard/server.js"))).mtime)
100
+ }
127
101
  };
128
102
  const defaultDeps = {
129
103
  getReviewStatus: (issueId) => Effect.runPromise(getReviewStatus(issueId)),
@@ -248,25 +222,13 @@ async function checkDeployRow(ctx, merge, deps = defaultDeployRowDeps) {
248
222
  const repoRoot = typeof health.repoRoot === "string" ? health.repoRoot : "";
249
223
  if (!repoRoot) return result("deploy", "miss", `dashboard at ${baseUrl} did not report repoRoot`);
250
224
  if (resolve(repoRoot) !== resolve(ctx.projectPath)) return result("deploy", "skip", `live dashboard serves ${repoRoot}, not this project — deploy semantics undefined for ${ctx.projectPath}`);
225
+ const buildCommit = typeof health.buildCommit === "string" && health.buildCommit.trim() ? health.buildCommit : void 0;
226
+ if (!buildCommit) return result("deploy", "miss", `dashboard at ${baseUrl} did not report buildCommit; live deployment cannot be proven`);
227
+ if (!merge.mergeCommit) return result("deploy", "miss", "cannot resolve merge commit; live deployment cannot be proven");
251
228
  try {
252
- let version = {};
253
- try {
254
- version = await deps.readJson(`${baseUrl}/api/version`);
255
- } catch {}
256
- const buildCommit = typeof version.buildCommit === "string" ? version.buildCommit : typeof version.commit === "string" ? version.commit : void 0;
257
- if (buildCommit && merge.mergeCommit) {
258
- const contains = await deps.commitContains(repoRoot, merge.mergeCommit, buildCommit);
259
- const observed = `build commit ${buildCommit.slice(0, 8)} ${contains ? "contains" : "does not contain"} merge ${merge.mergeCommit.slice(0, 8)}`;
260
- return result("deploy", contains ? "pass" : "miss", observed);
261
- }
262
- if (!merge.mergedAt) return result("deploy", "miss", "cannot resolve merge time for best-effort deploy check");
263
- const mergedAt = new Date(merge.mergedAt);
264
- if (Number.isNaN(mergedAt.getTime())) return result("deploy", "miss", `cannot parse merge time ${merge.mergedAt}`);
265
- const port = Number(new URL(baseUrl).port || (new URL(baseUrl).protocol === "https:" ? 443 : 80));
266
- const [startedAt, builtAt] = await Promise.all([deps.serverStartedAt(port), deps.distMtime(repoRoot)]);
267
- const fresh = startedAt > mergedAt && builtAt > mergedAt;
268
- const observed = `best-effort — build commit not exposed (PAN-2713): server started ${startedAt.toISOString()}, dist built ${builtAt.toISOString()}, merge ${mergedAt.toISOString()}`;
269
- return result("deploy", fresh ? "pass" : "miss", observed);
229
+ const contains = await deps.commitContains(repoRoot, merge.mergeCommit, buildCommit);
230
+ const observed = `build commit ${buildCommit.slice(0, 8)} ${contains ? "contains" : "does not contain"} merge ${merge.mergeCommit.slice(0, 8)}`;
231
+ return result("deploy", contains ? "pass" : "miss", observed);
270
232
  } catch (error) {
271
233
  return result("deploy", "miss", `deploy evidence unavailable: ${error instanceof Error ? error.message : String(error)}`);
272
234
  }
@@ -390,7 +352,7 @@ function close(ctx, opts = {}) {
390
352
  *
391
353
  * 1. Verify branch merged (hard fail if not — must pass before any cleanup)
392
354
  * 2. Move PRD + archive workspace artifacts (hard fail if archiving fails)
393
- * 3. Mark vBRIEF completed
355
+ * 3. Mark xBRIEF completed
394
356
  * 4. Clean up workspace (tmux, TLDR, Docker, worktree)
395
357
  * 5. Clean up agent state
396
358
  * 6. Close issue on tracker
@@ -424,10 +386,10 @@ function closeOut(ctx, opts = {}) {
424
386
  allSteps.push(stepFailed("close-out:abort", "Stopped — archiving failed, workspace preserved"));
425
387
  return buildResult("close-out", ctx.issueId, allSteps, start, dodGate);
426
388
  }
427
- const vbriefStep = yield* Effect.promise(() => completeVBriefStep(ctx));
428
- allSteps.push(vbriefStep);
429
- if (!vbriefStep.success && !vbriefStep.skipped) {
430
- allSteps.push(stepFailed("close-out:abort", "Stopped — vBRIEF completion failed, workspace preserved"));
389
+ const xbriefStep = yield* Effect.promise(() => completeXBriefStep(ctx));
390
+ allSteps.push(xbriefStep);
391
+ if (!xbriefStep.success && !xbriefStep.skipped) {
392
+ allSteps.push(stepFailed("close-out:abort", "Stopped — xBRIEF completion failed, workspace preserved"));
431
393
  return buildResult("close-out", ctx.issueId, allSteps, start, dodGate);
432
394
  }
433
395
  const closeOutConfig = (yield* Effect.promise(() => Effect.runPromise(loadCloisterConfig()))).close_out;
@@ -577,19 +539,19 @@ function resetToTodo(ctx, opts = {}) {
577
539
  function cancelIssueWorkflow(ctx, opts = {}) {
578
540
  return destructiveResetWorkflow("cancel", ctx, opts, resetIssueToCanceled, "Canceling issue", "Issue moved to Canceled");
579
541
  }
580
- async function completeVBriefStep(ctx) {
542
+ async function completeXBriefStep(ctx) {
581
543
  const step = "close-out:vbrief-completed";
582
544
  try {
583
- const { transitionVBriefOnMain } = await import("./lifecycle-io-DmY2qwCn.js");
584
- const result = await Effect.runPromise(transitionVBriefOnMain(ctx.projectPath, ctx.issueId, "completed", "completed", `scope: complete ${ctx.issueId.toUpperCase()} vBRIEF`));
585
- const details = [result.moved ? "Updated vBRIEF lifecycle to completed" : "vBRIEF lifecycle already completed", result.statusUpdated ? "Updated plan.status to completed" : "plan.status already completed"];
586
- if (result.committed) details.push("Committed vBRIEF completion on main");
545
+ const { transitionXBriefOnMain } = await import("./lifecycle-io-Bsnr2K4F.js");
546
+ const result = await Effect.runPromise(transitionXBriefOnMain(ctx.projectPath, ctx.issueId, "completed", "completed", `scope: complete ${ctx.issueId.toUpperCase()} xBRIEF`));
547
+ const details = [result.moved ? "Updated xBRIEF lifecycle to completed" : "xBRIEF lifecycle already completed", result.statusUpdated ? "Updated plan.status to completed" : "plan.status already completed"];
548
+ if (result.committed) details.push("Committed xBRIEF completion on main");
587
549
  return stepOk(step, details);
588
550
  } catch (err) {
589
551
  const cause = err.cause ?? err;
590
552
  const message = cause instanceof Error ? cause.message : String(cause);
591
- if (message.includes("No vBRIEF found")) return stepSkipped(step, [`No vBRIEF found for ${ctx.issueId}`]);
592
- return stepFailed(step, `vBRIEF completion failed: ${message}`);
553
+ if (message.includes("No xBRIEF found")) return stepSkipped(step, [`No xBRIEF found for ${ctx.issueId}`]);
554
+ return stepFailed(step, `xBRIEF completion failed: ${message}`);
593
555
  }
594
556
  }
595
557
  async function verifyBranchMergedImpl(ctx) {
@@ -597,7 +559,7 @@ async function verifyBranchMergedImpl(ctx) {
597
559
  const branchName = `feature/${ctx.issueId.toLowerCase()}`;
598
560
  try {
599
561
  try {
600
- const { loadReviewStatuses } = await import("./review-status-Bnh-rdkY.js");
562
+ const { loadReviewStatuses } = await import("./review-status-C6n6-9f_.js");
601
563
  if (loadReviewStatuses()[ctx.issueId.toUpperCase()]?.mergeStatus === "merged") return stepOk(step, ["Merge specialist confirmed merge completed"]);
602
564
  } catch {}
603
565
  const { stdout: branchExists } = await execAsync(`git branch --list "${branchName}" 2>/dev/null || true`, {
@@ -821,7 +783,7 @@ async function resetIssueToTodoImpl(ctx) {
821
783
  */
822
784
  async function resetPostMergeStateForIssue(issueId) {
823
785
  try {
824
- const { resetPostMergeState } = await import("./merge-agent-B-SnXOoc.js");
786
+ const { resetPostMergeState } = await import("./merge-agent-BQM3a8z5.js");
825
787
  resetPostMergeState(issueId);
826
788
  resetPostMergeState(issueId.toUpperCase());
827
789
  } catch {
@@ -837,18 +799,18 @@ function clearReviewStatusStep(issueId) {
837
799
  async function clearReviewStatusStepImpl(issueId) {
838
800
  const step = "clear-review-status";
839
801
  try {
840
- const { clearReviewStatus } = await import("./review-status-Bnh-rdkY.js");
802
+ const { clearReviewStatus } = await import("./review-status-C6n6-9f_.js");
841
803
  clearReviewStatus(issueId.toUpperCase());
842
804
  return stepOk(step, ["Review status cleared"]);
843
805
  } catch {
844
806
  try {
845
807
  const statusFile = join$1(OVERDECK_HOME, "review-status.json");
846
808
  if (existsSync(statusFile)) {
847
- const data = JSON.parse(await readFile$1(statusFile, "utf-8"));
809
+ const data = JSON.parse(await readFile(statusFile, "utf-8"));
848
810
  const upperKey = issueId.toUpperCase();
849
811
  if (data[upperKey]) {
850
812
  delete data[upperKey];
851
- await writeFile$1(statusFile, JSON.stringify(data, null, 2));
813
+ await writeFile(statusFile, JSON.stringify(data, null, 2));
852
814
  }
853
815
  }
854
816
  return stepOk(step, ["Review status cleared (direct)"]);
@@ -904,4 +866,4 @@ async function resetIssueToCanceledImpl(ctx) {
904
866
  //#endregion
905
867
  export { deepWipe as a, closeOut as i, cancelIssueWorkflow as n, resetToTodo as o, close as r, verifyBranchMergedImpl as s, approve as t };
906
868
 
907
- //# sourceMappingURL=workflows-BZNNYkGC.js.map
869
+ //# sourceMappingURL=workflows-C9WmILql.js.map
@@ -0,0 +1,2 @@
1
+ import { a as deepWipe, i as closeOut } from "./workflows-C9WmILql.js";
2
+ export { closeOut, deepWipe };