@overdeck/desktop 0.45.7 → 0.45.10

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 (304) hide show
  1. package/package.json +10 -3
  2. package/server/{acceptance-criteria-DYffaKI9.js → acceptance-criteria-l0DSvFFS.js} +2 -2
  3. package/server/{activity-logger-DO27GsPa.js → activity-logger-DvYvFhwZ.js} +1 -1
  4. package/server/{activity-logger-Dm95Ua07.js → activity-logger-pcbf-e30.js} +3 -2
  5. package/server/{advancing-selfheal-n8tAeFwE.js → advancing-selfheal-CMlGznKv.js} +11 -66
  6. package/server/{agent-gc-CIFaa2vJ.js → agent-gc-BtAzj8QN.js} +3 -3
  7. package/server/{agent-state-service-BqVDA9b8.js → agent-state-service-5ge9xxhx.js} +5 -5
  8. package/server/{agent-state-service-CLifyinO.js → agent-state-service-C1iUF9Ft.js} +1 -1
  9. package/server/agent-state-xk_G8t90.js +3 -0
  10. package/server/{agents-KaEsWZ8D.js → agents-BIggLvi_.js} +1 -1
  11. package/server/{agents-D_x5BSZM.js → agents-DHvsjsuP.js} +129 -61
  12. package/server/{archive-planning-CFxmeFKh.js → archive-planning-B4Qi02bk.js} +1 -1
  13. package/server/{archive-planning-DVUXlRBs.js → archive-planning-zTvWWHG_.js} +4 -4
  14. package/server/{artifact-index-jobs-ChUgzZah.js → artifact-index-jobs-BrByqVkB.js} +2 -2
  15. package/server/{auto-commit-2KiBFh-K.js → auto-commit-DoIPFoEs.js} +1 -1
  16. package/server/{backlog-auto-trigger-DoTEMZMl.js → backlog-auto-trigger-COm_R96V.js} +3 -3
  17. package/server/{bd-mutex-CE6P_MlD.js → bd-mutex-BItGvLQ8.js} +2 -2
  18. package/server/{bd-process-lock-Ch3WNHS9.js → bd-process-lock-CJkoG7hW.js} +2 -2
  19. package/server/{beads-B43pgBIy.js → beads-AmCXEv_E.js} +1 -1
  20. package/server/{beads-BugPvtWp.js → beads-DlZm-vrG.js} +5 -5
  21. package/server/{beads-query-CtqWakL6.js → beads-query-BrVNWoSL.js} +2 -2
  22. package/server/{beads-restore-BqTMSQi-.js → beads-restore-CMbDSB5R.js} +1 -1
  23. package/server/{behavior-vk1sixby.js → behavior-By-2Wipv.js} +3 -3
  24. package/server/{briefing-freshness-B3YxHQ-L.js → briefing-freshness-CXhZdnB8.js} +4 -4
  25. package/server/{checkpoint-manager-CdrwLsQh.js → checkpoint-manager-CPw51H2n.js} +1 -1
  26. package/server/{checkpoint-manager-Dg6cWZz3.js → checkpoint-manager-CfNpHOp4.js} +11 -2
  27. package/server/checkpoint-worker.js +1 -1
  28. package/server/{checkpoints-DDd-0doa.js → checkpoints-BbfH1EIy.js} +2 -2
  29. package/server/{checkpoints-dBCJr0dC.js → checkpoints-BjlBWOA8.js} +1 -1
  30. package/server/{claude-permissions-BpwIcIR7.js → claude-permissions-DrRAs_0F.js} +3 -3
  31. package/server/{claude-settings-overlay-DnraWcz6.js → claude-settings-overlay-BSeS7Ki3.js} +2 -2
  32. package/server/{claude-settings-overlay-xD_Vu420.js → claude-settings-overlay-CEWlIFL-.js} +1 -1
  33. package/server/cli-CJDWXE_Y.js +3 -0
  34. package/server/{cli-BmzYZZKi.js → cli-CvK9xuSS.js} +9 -9
  35. package/server/{cliproxy-DYWdJKZ1.js → cliproxy-BOcmOK6l.js} +1 -1
  36. package/server/{cliproxy-CE2GDY7x.js → cliproxy-J-_1iIXe.js} +2 -2
  37. package/server/{close-issue-CpJd4SOL.js → close-issue-BnpErnD1.js} +5 -5
  38. package/server/{closed-issue-reaper-QpcvCDeE.js → closed-issue-reaper-BLCQwTpF.js} +1 -1
  39. package/server/{closed-issue-reaper-DubXY9Zg.js → closed-issue-reaper-DRqK5k39.js} +10 -10
  40. package/server/{codex-j8aVgRou.js → codex-BUZjrnqH.js} +1 -1
  41. package/server/{codex-B3J1TXo7.js → codex-DcInrhok.js} +5 -5
  42. package/server/{compact-beads-CqhLqG-k.js → compact-beads-RFwdZFPA.js} +4 -4
  43. package/server/{compact-beads-BeilHCdj.js → compact-beads-omhUgj5b.js} +1 -1
  44. package/server/{config-DHU0j_pS.js → config-CzcWQ24p.js} +1 -1
  45. package/server/{config-DkEhJM0h.js → config-oWoKf5jO.js} +4 -4
  46. package/server/{config-yaml-DbdN9Fuq.js → config-yaml-DPAieL_G.js} +3 -2
  47. package/server/{conflict-gate-CgOtMo8i.js → conflict-gate-BhKvrPxn.js} +4 -4
  48. package/server/{conflict-gate-D00zFjeu.js → conflict-gate-JdFuhKuF.js} +1 -1
  49. package/server/{context-layers-BHEjT8Cn.js → context-layers-CTjQwcEQ.js} +3 -3
  50. package/server/{context-layers-0Lgq-SE_.js → context-layers-DxKsseHI.js} +2 -2
  51. package/server/{control-settings-CYv732Gs.js → control-settings-BMqUkXmR.js} +4 -4
  52. package/server/{conversation-compaction-Dbw03b-X.js → conversation-compaction-Ba5aZdrb.js} +1 -1
  53. package/server/{conversation-compaction-DKXvmX50.js → conversation-compaction-C5o_eKEm.js} +8 -8
  54. package/server/{conversation-service-BwKUeEvn.js → conversation-service-DvG8vZSV.js} +5 -5
  55. package/server/{conversation-service-kYYeRp9B.js → conversation-service-WKl-sw58.js} +1 -1
  56. package/server/{conversations-Dwr1jHrO.js → conversations-DL_BAWVk.js} +4 -4
  57. package/server/{conversations-D-uOnA8T.js → conversations-Dcx6LeIh.js} +1 -1
  58. package/server/{cost-DiSDkYe7.js → cost-C2CuA66z.js} +2 -2
  59. package/server/{cost-DNIyZH1X.js → cost-DaOG8sUB.js} +3 -3
  60. package/server/{cost-sync-CfXu-3TF.js → cost-sync-8lkDeL9g.js} +3 -3
  61. package/server/{dag-DZBowTd2.js → dag-jH8ZkewR.js} +3 -3
  62. package/server/{dangerous-git-ops-Pongxg2d.js → dangerous-git-ops-Dcw7PbYo.js} +1 -1
  63. package/server/dashboard-db-worker.js +6 -6
  64. package/server/{deacon-DT0BsVyE.js → deacon-Cv2RMfHs.js} +3 -3
  65. package/server/{deacon-f0yvsG5S.js → deacon-j3qSZ7--.js} +222 -110
  66. package/server/{deacon-nudge-log-Cmcch2Av.js → deacon-nudge-log-CJGA6aSQ.js} +1 -1
  67. package/server/deacon-swarm-D1iAUX-P.js +2 -0
  68. package/server/{deacon-swarm-BBGnhvD2.js → deacon-swarm-DadWNi5J.js} +88 -43
  69. package/server/deacon.js +8 -8
  70. package/server/{devcontainer-renderer-Cpz7XBj0.js → devcontainer-renderer-DUJYYRQB.js} +3 -3
  71. package/server/{dist-DypOkJv9.js → dist-BIC8spJ0.js} +1 -1
  72. package/server/dist-BUplB3Od.js +3 -0
  73. package/server/{docker-DARVx0OZ.js → docker-Q4bphryk.js} +2 -2
  74. package/server/{ensure-devcontainer-Dmdw4BxF.js → ensure-devcontainer-BCB6fHp9.js} +1 -1
  75. package/server/{ensure-devcontainer-BJssuBG6.js → ensure-devcontainer-XLL0vtgV.js} +4 -4
  76. package/server/{esm-shims-Crmvo9Ln.js → esm-shims-DiV9jHa_.js} +1 -1
  77. package/server/{event-store-BeEE8pW5.js → event-store-DIk9wvnS.js} +1 -1
  78. package/server/{event-store-DrfTJZ1_.js → event-store-DTJXZjCl.js} +4 -4
  79. package/server/events-BlzVUyTx.js +3 -0
  80. package/server/{events-BbClwoM-.js → events-DGWZzye2.js} +4 -4
  81. package/server/{factory-DVv9cpG5.js → factory-rG4T40su.js} +4 -4
  82. package/server/{feature-registry-population-C6eVdq4J.js → feature-registry-population-Dwyj9gEM.js} +4 -4
  83. package/server/{feature-registry-storage-ByBosRId.js → feature-registry-storage-CnGyNgAq.js} +2 -2
  84. package/server/{features-EZfSwuqq.js → features-CYY2_Eeh.js} +2 -2
  85. package/server/{feedback-target-DENaINE6.js → feedback-target-C4DaDSZ8.js} +1 -1
  86. package/server/{feedback-target-Dv4VnbQl.js → feedback-target-oE4-Esxl.js} +48 -17
  87. package/server/{feedback-writer-Dxg8qM8i.js → feedback-writer-DMaO0XXa.js} +4 -4
  88. package/server/{feedback-writer-BvHE1I-3.js → feedback-writer-thrdxYpK.js} +1 -1
  89. package/server/{flywheel-Akbd9VNM.js → flywheel-BqDdGvrQ.js} +1 -1
  90. package/server/{flywheel-B4KN9BmW.js → flywheel-ClMjGW_u.js} +11 -11
  91. package/server/{flywheel-ByZyAv3P.js → flywheel-DefHRzY4.js} +13 -13
  92. package/server/{flywheel-merge-order-DPFZbt-w.js → flywheel-merge-order-B6YDSElh.js} +1 -1
  93. package/server/{flywheel-merge-order-BYUPxqgx.js → flywheel-merge-order-CuDcqTRJ.js} +7 -7
  94. package/server/forge-BfP7OJwK.js +2 -0
  95. package/server/{forge-BnTExkbK.js → forge-BixzckB0.js} +2 -2
  96. package/server/{from-B2i_NgIH.js → from-D4xmArTA.js} +1 -1
  97. package/server/{fts-db-dnCj-PD3.js → fts-db-DPtxOAjp.js} +2 -2
  98. package/server/{fts-operations-CAAofsTQ.js → fts-operations-VrGjsT0w.js} +2 -2
  99. package/server/{git-utils-CB3gDSM-.js → git-utils-D_cax3fD.js} +2 -2
  100. package/server/{git-utils-Bk7sJZru.js → git-utils-RAmTwjFB.js} +1 -1
  101. package/server/{github-app-CIhMNI4C.js → github-app-B5PDHMyn.js} +1 -1
  102. package/server/{github-app-BIU8a93o.js → github-app-FMXgo3vK.js} +2 -2
  103. package/server/{github-client-DmZgsnYP.js → github-client-VRiB6N-4.js} +1 -1
  104. package/server/{github-client-zREpj5HA.js → github-client-yjbXaqpR.js} +2 -2
  105. package/server/{github-pr-lookup-CPri6JR1.js → github-pr-lookup-t8X8R0c0.js} +2 -2
  106. package/server/{harness-resolve-TzYAiXzZ.js → harness-resolve-DKeSVsJL.js} +3 -3
  107. package/server/{health-events-CDWk8Oz4.js → health-events-CD6q47ub.js} +1 -1
  108. package/server/{health-events-Dd0FuKrE.js → health-events-DaLX4-0a.js} +2 -2
  109. package/server/{hooks-C6HBXlVm.js → hooks-CmHFSj_Z.js} +2 -2
  110. package/server/{hooks-DRLzoFof.js → hooks-D-cbMUzQ.js} +1 -1
  111. package/server/{hume-Bb91r_2I.js → hume-DkVOs1Qi.js} +2 -2
  112. package/server/hume-x9voULey.js +3 -0
  113. package/server/{idle-stack-reaper-BPHnItVj.js → idle-stack-reaper-DBKQ9SKu.js} +3 -3
  114. package/server/{idle-stack-reaper-D5bwmuwX.js → idle-stack-reaper-DdnERp3G.js} +1 -1
  115. package/server/{infra-CCTzpcuJ.js → infra-CpKlYZA9.js} +3 -3
  116. package/server/{injection-D6L7D_w0.js → injection-CszhePD2.js} +7 -7
  117. package/server/{injection-CBrN8UxB.js → injection-DKzL2Axk.js} +1 -1
  118. package/server/{inspect-agent-CSYyFWqP.js → inspect-agent-BKKc0XnB.js} +9 -9
  119. package/server/inspect-agent-vm88mLYr.js +2 -0
  120. package/server/{internal-token-DWhBqgIk.js → internal-token-CQUx9YLc.js} +2 -2
  121. package/server/{internal-token-DCrCAG_M.js → internal-token-DrGdpLFo.js} +1 -1
  122. package/server/{io-DtAQ_2hp.js → io-Wy8YpFeP.js} +2 -2
  123. package/server/{issue-closed-0Zx72zXf.js → issue-closed-BO84g03t.js} +4 -4
  124. package/server/{issue-lifecycle-ZTt6kP_K.js → issue-lifecycle-DnhQgddB.js} +22 -22
  125. package/server/{issue-lifecycle-CJ7-D4XX.js → issue-lifecycle-nY4esZn8.js} +1 -1
  126. package/server/{issue-service-singleton-DNh4RRI7.js → issue-service-singleton-Bnqv1uaa.js} +1 -1
  127. package/server/{issue-service-singleton-DRE7S-Zg.js → issue-service-singleton-_AquSBTl.js} +8 -8
  128. package/server/{issues-CGc8Aaxm.js → issues-ChNcfHta.js} +2 -2
  129. package/server/{label-cleanup-CNsPlXy6.js → label-cleanup-bVXCGWBM.js} +3 -3
  130. package/server/{layers-CO_VLcSv.js → layers-vdvlpFki.js} +2 -2
  131. package/server/{lifecycle-B_NFvTj9.js → lifecycle-CGKm7doE.js} +7 -7
  132. package/server/{lifecycle-io-D0FftBLy.js → lifecycle-io-CdqPkCyk.js} +1 -1
  133. package/server/{lifecycle-io-WDGwa1vV.js → lifecycle-io-DSrv9xGh.js} +4 -4
  134. package/server/{linear-client-MvjflCXs.js → linear-client-BxKvL6U8.js} +1 -1
  135. package/server/{linear-client-CSgH24Ym.js → linear-client-E0HdXtWs.js} +2 -2
  136. package/server/memory-fts-worker.js +1 -1
  137. package/server/{merge-DltB-RGV.js → merge-D3wEbmUJ.js} +1 -1
  138. package/server/{merge-Ce9DHBXM.js → merge-UlAwCk80.js} +4 -4
  139. package/server/{merge-agent-Rv0bNQNU.js → merge-agent-BcgAYStl.js} +27 -27
  140. package/server/{merge-agent-DRXwKxmb.js → merge-agent-Dh8Y9PDO.js} +1 -1
  141. package/server/{merge-batch-LLp_cXUR.js → merge-batch-BwhGdlh4.js} +1 -1
  142. package/server/{merge-blockers-BqYUtLBd.js → merge-blockers-DwdQNsYD.js} +2 -2
  143. package/server/merge-ops-QdBiQ8XB.js +2 -0
  144. package/server/{merge-rebase-AiSEs4QB.js → merge-rebase-CH12_ufi.js} +2 -2
  145. package/server/{merge-set-CUY9msG9.js → merge-set-TRxJwR-w.js} +3 -3
  146. package/server/{merge-set-CSJoIpKB.js → merge-set-rXK3ehnB.js} +1 -1
  147. package/server/{merge-sync-CAjbJeTp.js → merge-sync-BKLKu9kz.js} +1 -1
  148. package/server/{merge-sync-CuyWzzZK.js → merge-sync-CaLRt2cB.js} +2 -2
  149. package/server/{merge-train-DndZCAiv.js → merge-train-DmxlYbEo.js} +3 -3
  150. package/server/{merge-train-deps-Bsy90Q7t.js → merge-train-deps-DBHsOWt9.js} +4 -4
  151. package/server/{merge-verification-Kvh4WViS.js → merge-verification-DA9rvqsE.js} +4 -4
  152. package/server/{multipart-parser-BWnfyoyz.js → multipart-parser-DtIEUW2B.js} +2 -2
  153. package/server/{no-resume-mode-CKy2bwZL.js → no-resume-mode-yrPEQ_pC.js} +1 -1
  154. package/server/{orphan-proposed-reconciler-Cg5_uVy1.js → orphan-proposed-reconciler-Db8tUhce.js} +10 -10
  155. package/server/{orphan-proposed-reconciler-CjUuBs6J.js → orphan-proposed-reconciler-mXV--tcB.js} +1 -1
  156. package/server/{pan-dir-Cn3NUnxU.js → pan-dir-BgBeeZDX.js} +3 -3
  157. package/server/{paths-Bo-kA9ta.js → paths-TE1GOZDr.js} +2 -2
  158. package/server/{pickup-DRn-XNXS.js → pickup-KLRUhThD.js} +1 -1
  159. package/server/{pipeline-notifier-BbGQtvKM.js → pipeline-notifier-aX_5EqQO.js} +2 -2
  160. package/server/{pipeline-notifier-DQsOtdjZ.js → pipeline-notifier-lwMa--Gz.js} +1 -1
  161. package/server/{projects-CKTA6Klk.js → projects-BNmVxnNt.js} +1 -1
  162. package/server/{prompts-CVncQg4P.js → prompts-CelsUdrx.js} +2 -2
  163. package/server/{providers-uPI9uU7Q.js → providers-4-xOzHQu.js} +7 -7
  164. package/server/{providers-CapuDkKX.js → providers-BOnRq5XK.js} +1 -1
  165. package/server/public/assets/{chunk-BO2N2NFS-CaAvtgHW.js → chunk-BO2N2NFS-BjULspib.js} +4 -4
  166. package/server/public/assets/{diagram-OG6HWLK6-C4flU2X9.js → diagram-OG6HWLK6-4ER5ovy_.js} +1 -1
  167. package/server/public/assets/{dist-DygIHsen.js → dist-CBUe_1pC.js} +3 -3
  168. package/server/public/assets/{dist-DXAnG2e9.js → dist-DVM-OI65.js} +1 -1
  169. package/server/public/assets/{ganttDiagram-6RSMTGT7-BJY25etK.js → ganttDiagram-6RSMTGT7-DQ3nocJU.js} +1 -1
  170. package/server/public/assets/{highlighted-body-OFNGDK62-DIEQLSG_.js → highlighted-body-OFNGDK62-BcLOHe75.js} +1 -1
  171. package/server/public/assets/index-DdqPXf3T.js +796 -0
  172. package/server/public/assets/{linear-CRa2o9KP.js → linear-Acq5WFAt.js} +1 -1
  173. package/server/public/assets/mermaid-GHXKKRXX-BTHbMU88.js +1 -0
  174. package/server/public/assets/{pieDiagram-4H26LBE5-Cb6OrK_c.js → pieDiagram-4H26LBE5-BEmjmqLh.js} +1 -1
  175. package/server/public/assets/{prod-DWpuiL-y.js → prod-D-3YYika.js} +4 -4
  176. package/server/public/assets/{quadrantDiagram-W4KKPZXB-DhZzzcAO.js → quadrantDiagram-W4KKPZXB-DyeZ0jBC.js} +1 -1
  177. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CVe6lE5A.js → sankeyDiagram-5OEKKPKP-DSD--Pbl.js} +1 -1
  178. package/server/public/assets/{xychartDiagram-2RQKCTM6-zukUz5pI.js → xychartDiagram-2RQKCTM6-idS7x7Bb.js} +1 -1
  179. package/server/public/index.html +1 -1
  180. package/server/{pull-requests-C3csHJsc.js → pull-requests-CH4iBFLl.js} +3 -3
  181. package/server/{pull-requests-MeAgb3Ax.js → pull-requests-DL_4klIb.js} +1 -1
  182. package/server/{rally-nalS21zz.js → rally-D0mKv2t8.js} +3 -3
  183. package/server/rally-DffLLIdl.js +3 -0
  184. package/server/{rally-api-DzQryQi8.js → rally-api-CcCdecF-.js} +1 -1
  185. package/server/{rally-api-DdY4ebu3.js → rally-api-DgAt6FbN.js} +2 -2
  186. package/server/{rally-client-9duSds1_.js → rally-client-DYjtgTOu.js} +4 -4
  187. package/server/{rally-client-B16-bZk9.js → rally-client-X0bEEN2B.js} +1 -1
  188. package/server/reap-terminal-sessions-BwJb2DLJ.js +3 -0
  189. package/server/{reap-terminal-sessions-C6rD1pDT.js → reap-terminal-sessions-CAmURC2h.js} +12 -62
  190. package/server/{rebuild-stack-D9qBmVcM.js → rebuild-stack-BLG3rlWa.js} +6 -6
  191. package/server/{rebuild-stack-DrWMHxoY.js → rebuild-stack-ByFCMqTK.js} +1 -1
  192. package/server/{reconstruct-cache--H2QBooC.js → reconstruct-cache-_tDZ2D72.js} +6 -6
  193. package/server/{record-fn7uPjsl.js → record-DjPikotp.js} +1 -1
  194. package/server/{remote-BEkHf2HO.js → remote-B1Trmr0N.js} +3 -3
  195. package/server/{remote-Dl6Hn0zz.js → remote-TN0cV8k-.js} +3 -3
  196. package/server/{remote-agents-DNdP4sew.js → remote-agents-CmbIKw7E.js} +5 -5
  197. package/server/{remote-agents-OB4zwVHz.js → remote-agents-DNuaAgU6.js} +1 -1
  198. package/server/{remote-completion-BINc1Y8c.js → remote-completion-Bklh6loJ.js} +12 -12
  199. package/server/resume-DnIsmIgC.js +3 -0
  200. package/server/review-agent-DgySDb-G.js +3 -0
  201. package/server/{review-agent-C-A6IgXc.js → review-agent-phzqNqIs.js} +599 -197
  202. package/server/{review-artifacts-DTTdAYsU.js → review-artifacts-BGc69epg.js} +7 -7
  203. package/server/{review-context-De14xPtc.js → review-context-CCq56O_Y.js} +7 -7
  204. package/server/{review-monitor-BNV3kjLq.js → review-monitor-BKG2ubt5.js} +2 -2
  205. package/server/{review-status-DWAsTqfJ.js → review-status-BQjqQXZG.js} +160 -52
  206. package/server/{review-status-mo3tyc8L.js → review-status-bBkqUj5i.js} +1 -1
  207. package/server/{review-status-enrichment-C6sr9wOI.js → review-status-enrichment-CGlcApSn.js} +3 -3
  208. package/server/{review-status-sync-D-p7TQit.js → review-status-sync-BWHnrq-k.js} +3 -3
  209. package/server/{review-status-sync-MvYGQLDD.js → review-status-sync-BxHBVH8s.js} +1 -1
  210. package/server/{review-verdict-feedback-BbIfN5Vg.js → review-verdict-feedback-cZh9Wi9G.js} +1 -1
  211. package/server/{review-verdict-feedback-Cfc-THvz.js → review-verdict-feedback-wqnikhMK.js} +16 -36
  212. package/server/{rollup-DgWlrSBc.js → rollup-BJE-Vc7H.js} +8 -8
  213. package/server/{rollup-CxR6GMTe.js → rollup-DBNy1yFB.js} +1 -1
  214. package/server/{scanner-6OmIn5XE.js → scanner-CUGpdp4i.js} +7 -7
  215. package/server/{sequence-io-CxiPMMKM.js → sequence-io-B2GmilSI.js} +4 -4
  216. package/server/{sequencer-agent--xPlSfR2.js → sequencer-agent-D8pW2aU_.js} +5 -5
  217. package/server/server.js +166 -162
  218. package/server/{service-CXje28KS.js → service-CILd-uOt.js} +46 -45
  219. package/server/session-fork-DDSDVoIK.js +99 -0
  220. package/server/{settings-ChvoXExM.js → settings-CBrei_kx.js} +2 -2
  221. package/server/{settings-DZq_bi-B.js → settings-D2wt4nku.js} +3 -3
  222. package/server/settings-vLoKyghx.js +2 -0
  223. package/server/{shadow-engineering-BHeyD5bL.js → shadow-engineering-Ba1D0QUN.js} +2 -2
  224. package/server/{shadow-state-p3YTxrJ5.js → shadow-state-BOaq8BrD.js} +1 -1
  225. package/server/{shadow-state-3L0eHQNE.js → shadow-state-DTC7AMHc.js} +2 -2
  226. package/server/{ship-log-B2EEH__n.js → ship-log-CMWH3H5-.js} +1 -1
  227. package/server/{smart-compaction-DRXK5_io.js → smart-compaction-Bgp_gwcA.js} +1 -1
  228. package/server/{smart-compaction-DMB4hv07.js → smart-compaction-CrP90OFE.js} +7 -7
  229. package/server/{spawn-planning-session-BZfVvIi3.js → spawn-planning-session-BmJWHSCu.js} +15 -15
  230. package/server/{spawn-planning-session-BBUzeHJQ.js → spawn-planning-session-D15KbPOy.js} +1 -1
  231. package/server/{specialist-completion-BAZHHbmp.js → specialist-completion-BiEXUHfD.js} +1 -1
  232. package/server/{specialist-context-DgdhI7rm.js → specialist-context-CwKkcXL9.js} +5 -5
  233. package/server/{specialist-handoff-logger-CH1nC8fq.js → specialist-handoff-logger-B_2VsWli.js} +2 -2
  234. package/server/{specialist-logs-DynFhFXg.js → specialist-logs-CvDxquV_.js} +3 -3
  235. package/server/{specialists-LJ9MZMCz.js → specialists-BCjcG4uE.js} +1 -1
  236. package/server/{specialists-BUKBHtmQ.js → specialists-BYi0k8CZ.js} +18 -18
  237. package/server/{specialists-e0Jmecc1.js → specialists-D07ybnam.js} +78 -85
  238. package/server/{specialists-CF02f9p2.js → specialists-F2uMO4QS.js} +1 -1
  239. package/server/specs-DeS98l_p.js +3 -0
  240. package/server/{src-CNLON0co.js → src-BswtmojL.js} +6 -6
  241. package/server/{src-DhJeCV1p.js → src-Dp0WHgDZ.js} +3 -3
  242. package/server/{src-AXK4mjue.js → src-fgbU-jJ-.js} +6 -3
  243. package/server/{stack-health-8jZH0Lgk.js → stack-health-BJVh1TCg.js} +3 -3
  244. package/server/{stack-health-CXYHwv5D.js → stack-health-Deel1mSW.js} +1 -1
  245. package/server/{state-home-XkLSsJCD.js → state-home-Bgj7i-C7.js} +8 -7
  246. package/server/{summary-fork-shfA2XOf.js → summary-fork-DedqguZb.js} +2 -2
  247. package/server/{summary-fork-BWa0ECGL.js → summary-fork-EjvOkEPl.js} +12 -91
  248. package/server/{supervisor-owMkHcx8.js → supervisor-0oXvLwyC.js} +3 -3
  249. package/server/supervisor-D1-XwmZ7.js +2 -0
  250. package/server/{swarm-readiness-BACUsKOx.js → swarm-readiness-OBgamRql.js} +3 -3
  251. package/server/{teardown-workspace-CYt_PBaq.js → teardown-workspace-5LCVbjfq.js} +14 -14
  252. package/server/{test-agent-queue-C1s6mB8C.js → test-agent-queue-qfsq6uaC.js} +6 -6
  253. package/server/{test-verdict-CmxX3KEf.js → test-verdict-BkubHtti.js} +1 -1
  254. package/server/{test-verdict-njEv9ZY2.js → test-verdict-D3Il7cBK.js} +1 -1
  255. package/server/{tldr-daemon-CEUflKr2.js → tldr-daemon-CJW_P4On.js} +2 -2
  256. package/server/{tldr-daemon-HIo0dwDB.js → tldr-daemon-CJqGsDFh.js} +1 -1
  257. package/server/tmux-CeDD14p1.js +3 -0
  258. package/server/{tmux-CBYZ5lKF.js → tmux-ePNhMIMU.js} +2 -2
  259. package/server/{token-CiS3w6Ma.js → token-_qujO3JZ.js} +1 -1
  260. package/server/{tracker-config-CVCoeaaL.js → tracker-config-C3hiPVAM.js} +2 -2
  261. package/server/{tracker-config-Bx50plWp.js → tracker-config-Drt_tx4D.js} +1 -1
  262. package/server/{tracker-utils-C2Lg4RoB.js → tracker-utils-D6B8scEw.js} +1 -1
  263. package/server/{tracker-utils-mI4d-vh8.js → tracker-utils-bpWs7Xyx.js} +2 -2
  264. package/server/{traefik-connect-D21-YEyX.js → traefik-connect-5EP1WS_Z.js} +1 -1
  265. package/server/{tunnel-BK4PVyb0.js → tunnel-3Ve8BS4H.js} +3 -3
  266. package/server/{tunnel-CcHkuRIS.js → tunnel-AporWhoi.js} +1 -1
  267. package/server/{types-DoPMvws2.js → types-B5u3NxMl.js} +1 -1
  268. package/server/{uat-train-BLFPxqLx.js → uat-train-C3hWXtip.js} +1 -1
  269. package/server/{uat-train-CQ_E-2ei.js → uat-train-CtNGgXxj.js} +27 -27
  270. package/server/{validation-Dab3bnSN.js → validation-BmUB-26g.js} +4 -4
  271. package/server/{validation-1QnjDMc0.js → validation-CbqP_dze.js} +1 -1
  272. package/server/{verification-runner-BO8TgZWA.js → verification-runner-BPAhPWR7.js} +11 -11
  273. package/server/{verification-runner-UhAAqOio.js → verification-runner-DuZRHjPU.js} +1 -1
  274. package/server/{vtt-parser-D-q5-8il.js → vtt-parser-CKc-smWM.js} +1 -1
  275. package/server/{work-agent-prompt-D_7T1xw5.js → work-agent-prompt-DCdHsm-V.js} +11 -11
  276. package/server/workflows-Cz8OtiB4.js +2 -0
  277. package/server/{workflows-CB5SWd0B.js → workflows-H-COJ84X.js} +14 -14
  278. package/server/{workspace-C4Avf_Tp.js → workspace-4ZufqeMe.js} +3 -3
  279. package/server/{workspace--XWYPbn1.js → workspace-DYv9kBg6.js} +1 -1
  280. package/server/{workspace-config-BwJB-bLH.js → workspace-config-DA8U97k9.js} +1 -1
  281. package/server/{workspace-manager-_6zbrhNF.js → workspace-manager-B3PqQQSM.js} +1 -1
  282. package/server/{workspace-manager-BE3OznLY.js → workspace-manager-CEWK-OXd.js} +12 -12
  283. package/server/{workspace-metadata-BCgODi1j.js → workspace-metadata-1eu1RvAT.js} +2 -2
  284. package/server/{workspace-metadata-wKPgY8PN.js → workspace-metadata-C0I-nIDL.js} +1 -1
  285. package/server/{workspaces-DpMiZ9BP.js → workspaces-CRU9_vRn.js} +154 -106
  286. package/server/agent-state-DTZCqWx5.js +0 -3
  287. package/server/cli-wyiCmp7b.js +0 -3
  288. package/server/deacon-swarm-jDiQ0kKk.js +0 -2
  289. package/server/dist-CnkaBMG-.js +0 -3
  290. package/server/forge-D2QLGWK9.js +0 -2
  291. package/server/hume-sCsuupWb.js +0 -3
  292. package/server/inspect-agent-DnspoIls.js +0 -2
  293. package/server/merge-ops-B6xc_Irj.js +0 -2
  294. package/server/public/assets/index-BsKNi2y5.js +0 -796
  295. package/server/public/assets/mermaid-GHXKKRXX-uIkd-n0c.js +0 -1
  296. package/server/rally-BJiyvz3w.js +0 -3
  297. package/server/reap-terminal-sessions-mW7SPDtP.js +0 -2
  298. package/server/resume-Pur3Z2e8.js +0 -3
  299. package/server/review-agent-BRSSFv7e.js +0 -3
  300. package/server/settings-D0XXIUQ0.js +0 -2
  301. package/server/specs-COn3zZ2Q.js +0 -3
  302. package/server/supervisor-DwGIhpXk.js +0 -2
  303. package/server/tmux-DNmHGMEv.js +0 -3
  304. package/server/workflows-Plo_VxeO.js +0 -2
@@ -1,9 +1,9 @@
1
- import { Qn as extractNumberSync, er as init_issue_id } from "./config-yaml-DbdN9Fuq.js";
2
- import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-Dm95Ua07.js";
3
- import { a as upsertMergeSetSync, i as init_merge_set, n as ensureMergeSetForIssueSync, o as withRepoArtifactUrlSync, s as withRepoStateSync } from "./merge-set-CUY9msG9.js";
4
- import { i as findPlanSync, o as init_io } from "./io-DtAQ_2hp.js";
5
- import { a as queryBeadsForIssue, r as init_beads_query } from "./beads-query-CtqWakL6.js";
6
- import { n as getForgeAdapter } from "./forge-BnTExkbK.js";
1
+ import { Qn as extractNumberSync, er as init_issue_id } from "./config-yaml-DPAieL_G.js";
2
+ import { a as init_activity_logger, n as emitActivityEntrySync } from "./activity-logger-pcbf-e30.js";
3
+ import { a as upsertMergeSetSync, i as init_merge_set, n as ensureMergeSetForIssueSync, o as withRepoArtifactUrlSync, s as withRepoStateSync } from "./merge-set-TRxJwR-w.js";
4
+ import { i as findPlanSync, o as init_io } from "./io-Wy8YpFeP.js";
5
+ import { a as queryBeadsForIssue, r as init_beads_query } from "./beads-query-BrVNWoSL.js";
6
+ import { n as getForgeAdapter } from "./forge-BixzckB0.js";
7
7
  import { Data, Effect } from "effect";
8
8
  import { existsSync } from "node:fs";
9
9
  import { join } from "node:path";
@@ -167,4 +167,4 @@ const createReviewArtifactsForIssue = (issueId, workspacePath) => Effect.tryProm
167
167
  //#endregion
168
168
  export { createReviewArtifactsForIssue };
169
169
 
170
- //# sourceMappingURL=review-artifacts-DTTdAYsU.js.map
170
+ //# sourceMappingURL=review-artifacts-BGc69epg.js.map
@@ -1,11 +1,11 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { cr as FsError, vr as init_errors } from "./config-yaml-DbdN9Fuq.js";
2
+ import { cr as FsError, vr as init_errors } from "./config-yaml-DPAieL_G.js";
3
3
  import { a as PAN_DIRNAME, p as init_types } from "./types-CE1m_daD.js";
4
- import { i as findPlanSync, o as init_io, u as readPlan } from "./io-DtAQ_2hp.js";
5
- import { d as getDevrootPathSync, f as init_config } from "./config-DkEhJM0h.js";
6
- import { a as init_lifecycle_io, i as findVBriefByIssueSync } from "./lifecycle-io-WDGwa1vV.js";
7
- import { n as init_review_verdict_feedback } from "./review-verdict-feedback-Cfc-THvz.js";
8
- import { n as init_github_pr_lookup, r as lookupPullRequestNumberForBranch } from "./github-pr-lookup-CPri6JR1.js";
4
+ import { i as findPlanSync, o as init_io, u as readPlan } from "./io-Wy8YpFeP.js";
5
+ import { d as getDevrootPathSync, f as init_config } from "./config-oWoKf5jO.js";
6
+ import { a as init_lifecycle_io, i as findVBriefByIssueSync } from "./lifecycle-io-DSrv9xGh.js";
7
+ import { n as init_review_verdict_feedback } from "./review-verdict-feedback-wqnikhMK.js";
8
+ import { n as init_github_pr_lookup, r as lookupPullRequestNumberForBranch } from "./github-pr-lookup-t8X8R0c0.js";
9
9
  import { Effect } from "effect";
10
10
  import { existsSync } from "fs";
11
11
  import { join } from "path";
@@ -700,4 +700,4 @@ var init_review_context = __esmMin((() => {
700
700
  //#endregion
701
701
  export { getDiffStat as a, getDiffBase as i, formatTier1Summary as n, init_review_context as o, getChangedFiles as r, buildReviewContext as t };
702
702
 
703
- //# sourceMappingURL=review-context-De14xPtc.js.map
703
+ //# sourceMappingURL=review-context-CCq56O_Y.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { x as init_tmux } from "./tmux-CBYZ5lKF.js";
2
+ import { x as init_tmux } from "./tmux-ePNhMIMU.js";
3
3
  import "effect";
4
4
  import "fs";
5
5
  import "path";
@@ -18,4 +18,4 @@ var init_review_monitor = __esmMin((() => {
18
18
  //#endregion
19
19
  export { init_review_monitor as n, REVIEW_SUB_ROLES as t };
20
20
 
21
- //# sourceMappingURL=review-monitor-BNV3kjLq.js.map
21
+ //# sourceMappingURL=review-monitor-BKG2ubt5.js.map
@@ -1,18 +1,18 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { At as queueIssueRecordCommit, Dn as getProjectSync, Et as getIssueWorkspacePath, Gn as resolveProjectFromIssueSync, Nn as init_projects, Nt as readIssueRecordSync, Ot as init_record, jt as readIssueRecord, zt as writeIssueRecordSync } from "./config-yaml-DbdN9Fuq.js";
3
- import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-Dm95Ua07.js";
4
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CCTzpcuJ.js";
5
- import { d as init_cost_sync, i as getCostBreakdownByStageAndModelSync, o as getCostForIssueSync } from "./cost-sync-CfXu-3TF.js";
6
- import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-BbGQtvKM.js";
7
- import { c as init_review_status_sync, d as init_review_status_normalize, f as normalizeReviewStatusSync, l as markWorkspaceStuck$1, n as deleteReviewStatus, o as getReviewStatusFromDbSync, r as getAllReviewStatusesFromDb, s as getReviewStatusesFromDb, u as upsertReviewStatusSync } from "./review-status-sync-D-p7TQit.js";
2
+ import { At as queueIssueRecordCommit, Dn as getProjectSync, Et as getIssueWorkspacePath, Gn as resolveProjectFromIssueSync, Nn as init_projects, Nt as readIssueRecordSync, Ot as init_record, jt as readIssueRecord, zt as writeIssueRecordSync } from "./config-yaml-DPAieL_G.js";
3
+ import { a as init_activity_logger, n as emitActivityEntrySync, r as emitActivityTtsSync } from "./activity-logger-pcbf-e30.js";
4
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CpKlYZA9.js";
5
+ import { d as init_cost_sync, i as getCostBreakdownByStageAndModelSync, o as getCostForIssueSync } from "./cost-sync-8lkDeL9g.js";
6
+ import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-aX_5EqQO.js";
7
+ import { c as init_review_status_sync, d as init_review_status_normalize, f as normalizeReviewStatusSync, l as markWorkspaceStuck$1, n as deleteReviewStatus, o as getReviewStatusFromDbSync, r as getAllReviewStatusesFromDb, s as getReviewStatusesFromDb, u as upsertReviewStatusSync } from "./review-status-sync-BWHnrq-k.js";
8
8
  import { a as PAN_DIRNAME, p as init_types, r as PAN_CONTINUES_DIRNAME } from "./types-CE1m_daD.js";
9
- import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-CUY9msG9.js";
9
+ import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-TRxJwR-w.js";
10
10
  import { Data, Effect } from "effect";
11
11
  import { join } from "path";
12
12
  import { homedir } from "os";
13
13
  import { hostname } from "node:os";
14
- import { existsSync, promises } from "node:fs";
15
- import { join as join$1 } from "node:path";
14
+ import { existsSync, mkdirSync, promises, readFileSync, writeFileSync } from "node:fs";
15
+ import { dirname as dirname$1, join as join$1 } from "node:path";
16
16
  //#region ../../lib/overdeck/agent-state-sync.ts
17
17
  function isoFromMillis(value) {
18
18
  return value == null ? void 0 : new Date(value).toISOString();
@@ -190,6 +190,23 @@ var init_agent_state_sync = __esmMin((() => {
190
190
  SELECT_AGENT_SQL = `SELECT ${AGENT_COLUMNS_FOR_DB.join(", ")} FROM agents`;
191
191
  }));
192
192
  //#endregion
193
+ //#region ../../lib/cloister/review-status-source.ts
194
+ function registerReviewStatusMapReader(fn) {
195
+ reader = fn;
196
+ }
197
+ function readReviewStatusMap() {
198
+ if (!reader) return null;
199
+ try {
200
+ return reader();
201
+ } catch {
202
+ return null;
203
+ }
204
+ }
205
+ var reader;
206
+ var init_review_status_source = __esmMin((() => {
207
+ reader = null;
208
+ }));
209
+ //#endregion
193
210
  //#region ../../lib/pan-dir/record-lock.ts
194
211
  /**
195
212
  * Serialize async read-modify-write rebuilds for a single issue record.
@@ -363,13 +380,18 @@ async function buildIssueRecord(project, issueId, opts = {}) {
363
380
  * PAN-1908 / PAN-1919: rebuild and queue the per-issue permanent record for a
364
381
  * given issue. Fire-and-forget: failures are logged, never thrown, so
365
382
  * review-status writes stay synchronous and fast.
383
+ *
384
+ * PAN-2583: returns whether the durable write actually landed, so the caller
385
+ * can fall back to a sandbox-writable verdict drop when it did not (a sandboxed
386
+ * reviewer cannot write ${OVERDECK_HOME}/state, and swallowing that here was
387
+ * how blocked review verdicts silently vanished).
366
388
  */
367
389
  async function updateIssueRecordForIssue(issueId, reviewStatus) {
368
390
  try {
369
391
  const resolved = resolveProjectFromIssueSync(issueId);
370
- if (!resolved) return;
392
+ if (!resolved) return false;
371
393
  const project = getProjectSync(resolved.projectKey);
372
- if (!project) return;
394
+ if (!project) return false;
373
395
  await withIssueRecordLock(issueId, async () => {
374
396
  const record = await buildIssueRecord(project, issueId, { reviewStatus });
375
397
  const fresh = readIssueRecordSync(project, issueId);
@@ -380,8 +402,10 @@ async function updateIssueRecordForIssue(issueId, reviewStatus) {
380
402
  };
381
403
  queueIssueRecordCommit(project, issueId, writeIssueRecordSync(project, issueId, record));
382
404
  });
405
+ return true;
383
406
  } catch (err) {
384
407
  console.warn(`[pan-dir/records] Failed to update record for ${issueId}: ${err.message}`);
408
+ return false;
385
409
  }
386
410
  }
387
411
  var init_records = __esmMin((() => {
@@ -396,7 +420,9 @@ var init_records = __esmMin((() => {
396
420
  //#endregion
397
421
  //#region ../../lib/overdeck/review-status-record-sync.ts
398
422
  function updateIssueRecordForReviewStatusSync(issueId, status) {
399
- updateIssueRecordForIssue(issueId, status);
423
+ Promise.resolve(updateIssueRecordForIssue(issueId, status)).then((landed) => {
424
+ if (landed === false) writeWorkspaceVerdictFallbackSync(issueId, status);
425
+ }).catch(() => writeWorkspaceVerdictFallbackSync(issueId, status));
400
426
  }
401
427
  /** Resolve and read the per-issue journal record's pipeline block, or null. Best-effort. */
402
428
  function readPipelineSync(issueId) {
@@ -432,6 +458,78 @@ function enrichReviewNotesFromRecordSync(issueId, status) {
432
458
  };
433
459
  }
434
460
  /**
461
+ * The durable field subset shared by the journal record's pipeline block and the
462
+ * workspace verdict fallback (PAN-2583). Derived/live columns (readyForMerge,
463
+ * blockerReasons) are intentionally omitted — the reader recomputes them.
464
+ */
465
+ function durableSubset(p) {
466
+ return {
467
+ reviewStatus: p.reviewStatus,
468
+ testStatus: p.testStatus,
469
+ mergeStatus: p.mergeStatus ?? void 0,
470
+ inspectStatus: p.inspectStatus ?? void 0,
471
+ verificationStatus: p.verificationStatus ?? void 0,
472
+ reviewNotes: p.reviewNotes,
473
+ testNotes: p.testNotes,
474
+ mergeNotes: p.mergeNotes,
475
+ inspectNotes: p.inspectNotes,
476
+ verificationNotes: p.verificationNotes,
477
+ scopeDrift: p.scopeDrift,
478
+ prUrl: p.prUrl,
479
+ prNumber: p.prNumber,
480
+ prHeadSha: p.prHeadSha,
481
+ reviewedAtCommit: p.reviewedAtCommit,
482
+ lastVerifiedCommit: p.lastVerifiedCommit,
483
+ reviewRequestedAt: p.reviewRequestedAt,
484
+ reviewerVerdicts: p.reviewerVerdicts,
485
+ autoMerge: p.autoMerge,
486
+ deaconIgnored: p.deaconIgnored,
487
+ deaconIgnoredAt: p.deaconIgnoredAt,
488
+ deaconIgnoredReason: p.deaconIgnoredReason,
489
+ closedOut: p.closedOut,
490
+ closedOutAt: p.closedOutAt
491
+ };
492
+ }
493
+ function workspaceVerdictFallbackPath(issueId) {
494
+ try {
495
+ const resolved = resolveProjectFromIssueSync(issueId);
496
+ if (!resolved) return null;
497
+ return join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`, ".overdeck", "pipeline-verdict.json");
498
+ } catch {
499
+ return null;
500
+ }
501
+ }
502
+ function writeWorkspaceVerdictFallbackSync(issueId, status) {
503
+ try {
504
+ const path = workspaceVerdictFallbackPath(issueId);
505
+ if (!path) {
506
+ console.error(`[review-status] PAN-2583: journal write failed for ${issueId} and no workspace could be resolved — the verdict is NOT durable`);
507
+ return;
508
+ }
509
+ mkdirSync(dirname$1(path), { recursive: true });
510
+ const payload = {
511
+ issueId: issueId.toUpperCase(),
512
+ updatedAt: status.updatedAt ?? (/* @__PURE__ */ new Date()).toISOString(),
513
+ pipeline: durableSubset(status)
514
+ };
515
+ writeFileSync(path, JSON.stringify(payload, null, 2));
516
+ console.warn(`[review-status] journal write failed for ${issueId} — durable verdict written to workspace fallback ${path}; the host sweeps it on the next status read (PAN-2583)`);
517
+ } catch (err) {
518
+ console.error(`[review-status] PAN-2583: could not persist verdict for ${issueId} anywhere durable: ${err.message}`);
519
+ }
520
+ }
521
+ function readWorkspaceVerdictFallbackSync(issueId) {
522
+ try {
523
+ const path = workspaceVerdictFallbackPath(issueId);
524
+ if (!path || !existsSync(path)) return null;
525
+ const parsed = JSON.parse(readFileSync(path, "utf-8"));
526
+ if (!parsed?.updatedAt || !parsed.pipeline) return null;
527
+ return parsed;
528
+ } catch {
529
+ return null;
530
+ }
531
+ }
532
+ /**
435
533
  * PAN-1988: read the journal record's durable verdict for an issue — the SOURCE OF TRUTH.
436
534
  * Returns the record `updatedAt` (used to decide whether the journal is newer than the DB
437
535
  * cache) plus the durable status fields (flags + feedback notes). Derived/live columns
@@ -440,37 +538,32 @@ function enrichReviewNotesFromRecordSync(issueId, status) {
440
538
  * This is what makes verdict writes host-owned: a sandboxed agent can always write the journal
441
539
  * (workspace-local) even when it cannot write `~/.overdeck/overdeck.db`. The host reconciles
442
540
  * the cache from this on read, so no agent has to escalate out of its sandbox to record a verdict.
541
+ *
542
+ * PAN-2583: since the records migration (PAN-2541) the journal itself lives in
543
+ * ${OVERDECK_HOME}/state, which a sandboxed reviewer cannot write either. When such a
544
+ * writer dropped its verdict into the workspace fallback instead, overlay it here —
545
+ * a strictly newer fallback wins over the record, and the host's own next journal
546
+ * write folds it back into the canonical record.
443
547
  */
444
548
  function readJournalStatusSync(issueId) {
445
549
  const p = readPipelineSync(issueId);
550
+ const fallback = readWorkspaceVerdictFallbackSync(issueId);
551
+ const fallbackNewer = !!fallback && (!p || (p.updatedAt ?? "") < fallback.updatedAt);
552
+ if (fallback && fallbackNewer) {
553
+ const base = p ? durableSubset(p) : {};
554
+ const overlay = Object.fromEntries(Object.entries(fallback.pipeline).filter(([, value]) => value !== void 0));
555
+ return {
556
+ updatedAt: fallback.updatedAt,
557
+ durable: {
558
+ ...base,
559
+ ...overlay
560
+ }
561
+ };
562
+ }
446
563
  if (!p) return null;
447
564
  return {
448
565
  updatedAt: p.updatedAt,
449
- durable: {
450
- reviewStatus: p.reviewStatus,
451
- testStatus: p.testStatus,
452
- mergeStatus: p.mergeStatus ?? void 0,
453
- inspectStatus: p.inspectStatus ?? void 0,
454
- verificationStatus: p.verificationStatus ?? void 0,
455
- reviewNotes: p.reviewNotes,
456
- testNotes: p.testNotes,
457
- mergeNotes: p.mergeNotes,
458
- inspectNotes: p.inspectNotes,
459
- verificationNotes: p.verificationNotes,
460
- scopeDrift: p.scopeDrift,
461
- prUrl: p.prUrl,
462
- prNumber: p.prNumber,
463
- prHeadSha: p.prHeadSha,
464
- reviewedAtCommit: p.reviewedAtCommit,
465
- lastVerifiedCommit: p.lastVerifiedCommit,
466
- reviewRequestedAt: p.reviewRequestedAt,
467
- autoMerge: p.autoMerge,
468
- deaconIgnored: p.deaconIgnored,
469
- deaconIgnoredAt: p.deaconIgnoredAt,
470
- deaconIgnoredReason: p.deaconIgnoredReason,
471
- closedOut: p.closedOut,
472
- closedOutAt: p.closedOutAt
473
- }
566
+ durable: durableSubset(p)
474
567
  };
475
568
  }
476
569
  var init_review_status_record_sync = __esmMin((() => {
@@ -526,7 +619,7 @@ function verificationSatisfied(status) {
526
619
  * journal→DB reconcile in getReviewStatusSync derive readyForMerge identically.
527
620
  */
528
621
  function reviewGatesPassedSync(s) {
529
- return s.reviewStatus === "passed" && (s.testStatus === "passed" || s.testStatus === "skipped") && verificationSatisfied(s) && (s.uatStatus === void 0 || s.uatStatus === "passed") && (s.mergeStatus === "pending" || s.mergeStatus === "queued" || s.mergeStatus === void 0 || s.mergeStatus === null);
622
+ return (s.reviewStatus === "passed" || s.reviewStatus === "skipped") && (s.testStatus === "passed" || s.testStatus === "skipped") && verificationSatisfied(s) && (s.uatStatus === void 0 || s.uatStatus === "passed") && (s.mergeStatus === "pending" || s.mergeStatus === "queued" || s.mergeStatus === void 0 || s.mergeStatus === null);
530
623
  }
531
624
  /**
532
625
  * Authoritative "allowed to merge" predicate (PAN-1759). The flywheel
@@ -542,7 +635,7 @@ function mergeGateEligibility(status) {
542
635
  eligible: false,
543
636
  reason: "no review record"
544
637
  };
545
- if (status.reviewStatus !== "passed") return {
638
+ if (status.reviewStatus !== "passed" && status.reviewStatus !== "skipped") return {
546
639
  eligible: false,
547
640
  reason: `review is ${status.reviewStatus}`
548
641
  };
@@ -627,6 +720,15 @@ function setReviewStatusSync(issueId, update, existing) {
627
720
  });
628
721
  return status;
629
722
  }
723
+ if (update.reviewStatus === "reviewing" && (status.reviewStatus === "blocked" || status.reviewStatus === "failed") && update.reviewSpawnedAt === void 0) {
724
+ console.warn(`[review-status] Rejecting stale 'reviewing' write for ${issueId} — a terminal '${status.reviewStatus}' verdict is already recorded for this review cycle. Only a new dispatch (carrying reviewSpawnedAt) may re-enter 'reviewing'.`);
725
+ notifyPipelineSync({
726
+ type: "status_changed",
727
+ issueId,
728
+ status
729
+ });
730
+ return status;
731
+ }
630
732
  if ((update.testStatus === "dispatch_failed" || update.testStatus === "failed") && status.testStatus === "passed") {
631
733
  console.warn(`[review-status] Rejecting testStatus regression from 'passed' to '${update.testStatus}' for ${issueId}`);
632
734
  delete update.testStatus;
@@ -636,6 +738,10 @@ function setReviewStatusSync(issueId, update, existing) {
636
738
  ...status,
637
739
  ...update
638
740
  };
741
+ if (update.reviewerVerdicts && status.reviewerVerdicts) merged.reviewerVerdicts = {
742
+ ...status.reviewerVerdicts,
743
+ ...update.reviewerVerdicts
744
+ };
639
745
  const history = [...status.history || []];
640
746
  const now = (/* @__PURE__ */ new Date()).toISOString();
641
747
  if (update.reviewStatus && update.reviewStatus !== status.reviewStatus) history.push({
@@ -672,7 +778,7 @@ function setReviewStatusSync(issueId, update, existing) {
672
778
  });
673
779
  if (readyForMerge && !status.readyForMerge && updated.prUrl) (async () => {
674
780
  try {
675
- const { isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-CIhMNI4C.js");
781
+ const { isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-B5PDHMyn.js");
676
782
  if (!isGitHubAppConfigured()) return;
677
783
  const prMatch = updated.prUrl.match(/github\.com\/([^/]+)\/([^/]+)\/pull/);
678
784
  if (!prMatch) return;
@@ -893,7 +999,7 @@ function setReviewStatusSync(issueId, update, existing) {
893
999
  eventType: "readyForMerge"
894
1000
  });
895
1001
  }
896
- if (update.reviewStatus === "passed" && status.reviewStatus !== "passed" && updated.testStatus === "pending") if (updated.reviewedAtCommit && updated.lastVerifiedCommit && updated.reviewedAtCommit === updated.lastVerifiedCommit) {
1002
+ if ((update.reviewStatus === "passed" || update.reviewStatus === "skipped") && status.reviewStatus !== "passed" && status.reviewStatus !== "skipped" && updated.testStatus === "pending") if (updated.reviewedAtCommit && updated.lastVerifiedCommit && updated.reviewedAtCommit === updated.lastVerifiedCommit) {
897
1003
  console.log(`[review-status] Skipping test role for ${issueId} — no code drift since verification (HEAD=${updated.reviewedAtCommit.slice(0, 8)})`);
898
1004
  emitActivityEntrySync({
899
1005
  source: "cloister",
@@ -950,7 +1056,7 @@ function resetPipelineVerdictsForWorkStartSync(issueId) {
950
1056
  */
951
1057
  async function deliverReviewVerdictFeedbackHostSide(issueId, status) {
952
1058
  try {
953
- const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-BbIfN5Vg.js");
1059
+ const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-cZh9Wi9G.js");
954
1060
  if ((await Effect.runPromise(deliverReviewVerdictFeedback({
955
1061
  issueId,
956
1062
  verdict: status.reviewStatus === "failed" ? "failed" : "blocked",
@@ -983,7 +1089,7 @@ function maybeAutoDispatchReviewHostSide(issueId, status) {
983
1089
  }
984
1090
  async function dispatchReviewHostSide(issueId, prUrl) {
985
1091
  try {
986
- const { resolveProjectFromIssueSync } = await import("./projects-CKTA6Klk.js");
1092
+ const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
987
1093
  const resolved = resolveProjectFromIssueSync(issueId);
988
1094
  if (!resolved) return;
989
1095
  const { existsSync } = await import("fs");
@@ -999,7 +1105,7 @@ async function dispatchReviewHostSide(issueId, prUrl) {
999
1105
  });
1000
1106
  branch = stdout.trim() || branch;
1001
1107
  } catch {}
1002
- const { spawnReviewRoleForIssue } = await import("./review-agent-BRSSFv7e.js");
1108
+ const { spawnReviewRoleForIssue } = await import("./review-agent-DgySDb-G.js");
1003
1109
  if ((await Effect.runPromise(spawnReviewRoleForIssue({
1004
1110
  issueId,
1005
1111
  workspace,
@@ -1021,13 +1127,13 @@ function maybeRecoverTestVerdictHostSide(issueId, status) {
1021
1127
  }
1022
1128
  async function recoverTestVerdictHostSide(issueId) {
1023
1129
  try {
1024
- const { resolveProjectFromIssueSync } = await import("./projects-CKTA6Klk.js");
1130
+ const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
1025
1131
  const resolved = resolveProjectFromIssueSync(issueId);
1026
1132
  if (!resolved) return;
1027
1133
  const { existsSync } = await import("fs");
1028
1134
  const workspace = join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
1029
1135
  if (!existsSync(workspace)) return;
1030
- const { readTestVerdictArtifact } = await import("./test-verdict-CmxX3KEf.js");
1136
+ const { readTestVerdictArtifact } = await import("./test-verdict-BkubHtti.js");
1031
1137
  const artifact = readTestVerdictArtifact(workspace);
1032
1138
  if (!artifact) return;
1033
1139
  setReviewStatusSync(issueId, {
@@ -1041,13 +1147,13 @@ async function recoverTestVerdictHostSide(issueId) {
1041
1147
  }
1042
1148
  async function deliverTestFailureToWorkAgentHostSide(issueId, status) {
1043
1149
  try {
1044
- const { resolveProjectFromIssueSync } = await import("./projects-CKTA6Klk.js");
1150
+ const { resolveProjectFromIssueSync } = await import("./projects-BNmVxnNt.js");
1045
1151
  const resolved = resolveProjectFromIssueSync(issueId);
1046
1152
  const workspace = resolved ? join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`) : void 0;
1047
1153
  const notes = status.testNotes;
1048
1154
  let feedbackPath;
1049
1155
  try {
1050
- const { writeFeedbackFile } = await import("./feedback-writer-BvHE1I-3.js");
1156
+ const { writeFeedbackFile } = await import("./feedback-writer-thrdxYpK.js");
1051
1157
  const r = await Effect.runPromise(writeFeedbackFile({
1052
1158
  issueId,
1053
1159
  workspacePath: workspace,
@@ -1059,10 +1165,10 @@ async function deliverTestFailureToWorkAgentHostSide(issueId, status) {
1059
1165
  if (r.success) feedbackPath = r.filePath;
1060
1166
  } catch {}
1061
1167
  const message = `SPECIALIST FEEDBACK: test-agent reported FAILED for ${issueId}.\n\n${feedbackPath ? `MUST READ: ${feedbackPath}\n\n` : ""}${notes ? `${notes.slice(0, 400)}\n\n` : ""}Fix the failing tests, commit and push, then re-run pan done ${issueId}. Do NOT stop at the prompt.`;
1062
- const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-DENaINE6.js");
1168
+ const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-C4DaDSZ8.js");
1063
1169
  const target = await resolveIssueFeedbackTarget(issueId);
1064
1170
  if ("agentId" in target) {
1065
- const { messageAgent } = await import("./agents-KaEsWZ8D.js");
1171
+ const { messageAgent } = await import("./agents-BIggLvi_.js");
1066
1172
  await messageAgent(target.agentId, message);
1067
1173
  console.log(`[review-status] delivered test failure to ${target.agentId} for ${issueId} (host-side)`);
1068
1174
  } else await surfaceIssueFeedbackNeedsYou(issueId, target.reason, {
@@ -1254,9 +1360,11 @@ var init_review_status = __esmMin((() => {
1254
1360
  init_pipeline_notifier();
1255
1361
  init_activity_logger();
1256
1362
  init_review_status_sync();
1363
+ init_review_status_source();
1257
1364
  init_review_status_normalize();
1258
1365
  init_review_status_record_sync();
1259
1366
  init_review_dispatch_decision();
1367
+ registerReviewStatusMapReader(() => getAllReviewStatusesFromDb());
1260
1368
  DEFAULT_STATUS_FILE = join(homedir(), ".overdeck", "review-status.json");
1261
1369
  reviewDispatchAttemptAt = /* @__PURE__ */ new Map();
1262
1370
  REVIEW_AUTO_DISPATCH_THROTTLE_MS = 3e4;
@@ -1291,6 +1399,6 @@ var init_review_status = __esmMin((() => {
1291
1399
  });
1292
1400
  }));
1293
1401
  //#endregion
1294
- export { stateToOverdeckParamsForDb as A, init_record_lock as C, init_agent_state_sync as D, getOverdeckAgentStateSync as E, listOverdeckAgentStatesSync as O, needsReviewDispatch as S, AGENT_COLUMNS_FOR_DB as T, setDeaconIgnored as _, fixStuckReadyForMerge as a, verificationSatisfied as b, init_review_status as c, loadReviewStatusesForIssues as d, markWorkspaceStuck as f, setAutoMerge as g, reviewGatesPassedSync as h, fixStuckCommentedReviews as i, saveOverdeckAgentStateSync as k, loadReadyForMergeFlags as l, resetPipelineVerdictsForWorkStartSync as m, clearReviewStatus as n, getReviewStatus as o, mergeGateEligibility as p, clearStuckMergeStatuses as r, getReviewStatusSync as s, ReviewStatusError as t, loadReviewStatuses as u, setReviewStatus as v, withIssueRecordLock as w, init_review_dispatch_decision as x, setReviewStatusSync as y };
1402
+ export { listOverdeckAgentStatesSync as A, init_record_lock as C, AGENT_COLUMNS_FOR_DB as D, readReviewStatusMap as E, stateToOverdeckParamsForDb as M, getOverdeckAgentStateSync as O, needsReviewDispatch as S, init_review_status_source as T, setDeaconIgnored as _, fixStuckReadyForMerge as a, verificationSatisfied as b, init_review_status as c, loadReviewStatusesForIssues as d, markWorkspaceStuck as f, setAutoMerge as g, reviewGatesPassedSync as h, fixStuckCommentedReviews as i, saveOverdeckAgentStateSync as j, init_agent_state_sync as k, loadReadyForMergeFlags as l, resetPipelineVerdictsForWorkStartSync as m, clearReviewStatus as n, getReviewStatus as o, mergeGateEligibility as p, clearStuckMergeStatuses as r, getReviewStatusSync as s, ReviewStatusError as t, loadReviewStatuses as u, setReviewStatus as v, withIssueRecordLock as w, init_review_dispatch_decision as x, setReviewStatusSync as y };
1295
1403
 
1296
- //# sourceMappingURL=review-status-DWAsTqfJ.js.map
1404
+ //# sourceMappingURL=review-status-BQjqQXZG.js.map
@@ -1,3 +1,3 @@
1
- import { c as init_review_status, f as markWorkspaceStuck, n as clearReviewStatus, p as mergeGateEligibility, s as getReviewStatusSync, u as loadReviewStatuses, y as setReviewStatusSync } from "./review-status-DWAsTqfJ.js";
1
+ import { c as init_review_status, f as markWorkspaceStuck, n as clearReviewStatus, p as mergeGateEligibility, s as getReviewStatusSync, u as loadReviewStatuses, y as setReviewStatusSync } from "./review-status-BQjqQXZG.js";
2
2
  init_review_status();
3
3
  export { clearReviewStatus, getReviewStatusSync, loadReviewStatuses, markWorkspaceStuck, mergeGateEligibility, setReviewStatusSync };
@@ -1,5 +1,5 @@
1
- import { Gn as resolveProjectFromIssueSync, Nn as init_projects } from "./config-yaml-DbdN9Fuq.js";
2
- import { O as listSessionNames, x as init_tmux } from "./tmux-CBYZ5lKF.js";
1
+ import { Gn as resolveProjectFromIssueSync, Nn as init_projects } from "./config-yaml-DPAieL_G.js";
2
+ import { O as listSessionNames, x as init_tmux } from "./tmux-ePNhMIMU.js";
3
3
  import { Data, Effect } from "effect";
4
4
  import { existsSync } from "fs";
5
5
  import { join } from "path";
@@ -124,4 +124,4 @@ const enrichReviewStatus = (issueId, status) => Effect.tryPromise({
124
124
  //#endregion
125
125
  export { enrichReviewStatusFromSessions as n, enrichReviewStatus as t };
126
126
 
127
- //# sourceMappingURL=review-status-enrichment-C6sr9wOI.js.map
127
+ //# sourceMappingURL=review-status-enrichment-CGlcApSn.js.map
@@ -1,10 +1,10 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CCTzpcuJ.js";
2
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CpKlYZA9.js";
3
3
  import { Effect } from "effect";
4
4
  //#region ../../lib/review-status-normalize.ts
5
5
  function normalizeReviewStatusSync(status) {
6
6
  const shouldClearMergeNotes = status.mergeStatus === "verifying" || status.mergeStatus === "merged";
7
- const shouldClearReadyForMerge = status.mergeStatus === "merged" || status.reviewStatus !== "passed" || status.testStatus !== "passed" && status.testStatus !== "skipped" || status.uatStatus !== void 0 && status.uatStatus !== "passed" || (status.blockerReasons?.length ?? 0) > 0;
7
+ const shouldClearReadyForMerge = status.mergeStatus === "merged" || status.reviewStatus !== "passed" && status.reviewStatus !== "skipped" || status.testStatus !== "passed" && status.testStatus !== "skipped" || status.uatStatus !== void 0 && status.uatStatus !== "passed" || (status.blockerReasons?.length ?? 0) > 0;
8
8
  return {
9
9
  ...status,
10
10
  ...shouldClearMergeNotes ? { mergeNotes: void 0 } : {},
@@ -271,4 +271,4 @@ var init_review_status_sync = __esmMin((() => {
271
271
  //#endregion
272
272
  export { getMergeBlockerReconcileCandidatesSync as a, init_review_status_sync as c, init_review_status_normalize as d, normalizeReviewStatusSync as f, getMergeBlockerReconcileCandidates as i, markWorkspaceStuck as l, deleteReviewStatus as n, getReviewStatusFromDbSync as o, getAllReviewStatusesFromDb as r, getReviewStatusesFromDb as s, clearWorkspaceStuck as t, upsertReviewStatusSync as u };
273
273
 
274
- //# sourceMappingURL=review-status-sync-D-p7TQit.js.map
274
+ //# sourceMappingURL=review-status-sync-BWHnrq-k.js.map
@@ -1,3 +1,3 @@
1
- import { c as init_review_status_sync, t as clearWorkspaceStuck } from "./review-status-sync-D-p7TQit.js";
1
+ import { c as init_review_status_sync, t as clearWorkspaceStuck } from "./review-status-sync-BWHnrq-k.js";
2
2
  init_review_status_sync();
3
3
  export { clearWorkspaceStuck };
@@ -1,3 +1,3 @@
1
- import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-Cfc-THvz.js";
1
+ import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-wqnikhMK.js";
2
2
  init_review_verdict_feedback();
3
3
  export { deliverReviewVerdictFeedback };
@@ -1,11 +1,10 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Gn as resolveProjectFromIssueSync, Nn as init_projects } from "./config-yaml-DbdN9Fuq.js";
3
- import { L as sessionExists, x as init_tmux } from "./tmux-CBYZ5lKF.js";
4
- import { c as init_review_status, s as getReviewStatusSync } from "./review-status-DWAsTqfJ.js";
5
- import { E as resumeAgent, Pn as getAgentStateSync, Tn as clearAgentPausedSync, j as messageAgent, t as init_agents } from "./agents-D_x5BSZM.js";
2
+ import { Gn as resolveProjectFromIssueSync, Nn as init_projects } from "./config-yaml-DPAieL_G.js";
3
+ import { c as init_review_status, s as getReviewStatusSync } from "./review-status-BQjqQXZG.js";
4
+ import { j as messageAgent, t as init_agents } from "./agents-DHvsjsuP.js";
6
5
  import { a as PAN_DIRNAME, p as init_types } from "./types-CE1m_daD.js";
7
- import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-Dxg8qM8i.js";
8
- import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-Dv4VnbQl.js";
6
+ import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-DMaO0XXa.js";
7
+ import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-oE4-Esxl.js";
9
8
  import { Effect } from "effect";
10
9
  import { existsSync } from "node:fs";
11
10
  import { join } from "node:path";
@@ -95,15 +94,20 @@ async function deliverReviewVerdictFeedbackPromise(opts) {
95
94
  if (fileResult.success && fileResult.filePath) {
96
95
  const message = `SPECIALIST FEEDBACK: review-agent reported ${opts.verdict.toUpperCase()} for ${issueId}.\n\nMUST READ: ${fileResult.filePath}\n\nUse your Read tool to open this file, read every line, then fix ALL review findings. Do NOT stop at the prompt.`;
97
96
  try {
98
- const target = await resolveIssueFeedbackTarget(issueId, {
99
- itemId: opts.slotItemId,
100
- revivePipelinePausedAgent
101
- });
97
+ const target = await resolveIssueFeedbackTarget(issueId, { itemId: opts.slotItemId });
102
98
  if ("agentId" in target) try {
103
99
  await messageAgent(target.agentId, message);
104
100
  agentMessageSent = true;
105
101
  } catch (err) {
106
- console.log(`[review-verdict-feedback] Could not message ${target.agentId}; feedback file remains available: ${err instanceof Error ? err.message : String(err)}`);
102
+ const reason = err instanceof Error ? err.message : String(err);
103
+ console.warn(`[review-verdict-feedback] Could not message ${target.agentId}; feedback file remains available: ${reason}`);
104
+ try {
105
+ await surfaceIssueFeedbackNeedsYou(issueId, `Feedback delivery to ${target.agentId} failed: ${reason}`, {
106
+ specialist: "review-agent",
107
+ feedbackPath: fileResult.filePath,
108
+ slotItemId: opts.slotItemId
109
+ });
110
+ } catch {}
107
111
  }
108
112
  else try {
109
113
  await surfaceIssueFeedbackNeedsYou(issueId, target.reason, {
@@ -125,36 +129,12 @@ async function deliverReviewVerdictFeedbackPromise(opts) {
125
129
  agentMessageSent
126
130
  };
127
131
  }
128
- /**
129
- * PAN-2461: unpause + resume an agent that the PIPELINE paused (pausedReason
130
- * starts with "needs-you:") so feedback can be delivered to it. Operator pauses
131
- * are left untouched.
132
- */
133
- async function revivePipelinePausedAgent(agentId, issueId) {
134
- try {
135
- const state = getAgentStateSync(agentId);
136
- if (!state) return false;
137
- if (state.paused !== true || !state.pausedReason?.startsWith("needs-you:")) return false;
138
- console.log(`[review-verdict-feedback] ${agentId} is pipeline-paused (${state.pausedReason}) — unpausing to deliver feedback for ${issueId}`);
139
- clearAgentPausedSync(agentId);
140
- const result = await resumeAgent(agentId);
141
- if (!result.success) {
142
- console.warn(`[review-verdict-feedback] Failed to revive ${agentId}: ${result.error}`);
143
- return false;
144
- }
145
- return Effect.runPromise(sessionExists(agentId));
146
- } catch (err) {
147
- console.warn(`[review-verdict-feedback] revivePipelinePausedAgent(${agentId}) failed: ${err instanceof Error ? err.message : String(err)}`);
148
- return false;
149
- }
150
- }
151
132
  var execFileAsync, PR_COMMENT_TIMEOUT_MS, deliverReviewVerdictFeedback;
152
133
  var init_review_verdict_feedback = __esmMin((() => {
153
134
  init_agents();
154
135
  init_projects();
155
136
  init_review_status();
156
137
  init_types();
157
- init_tmux();
158
138
  init_feedback_writer();
159
139
  init_feedback_target();
160
140
  execFileAsync = promisify(execFile);
@@ -164,4 +144,4 @@ var init_review_verdict_feedback = __esmMin((() => {
164
144
  //#endregion
165
145
  export { init_review_verdict_feedback as n, postPrComment as r, deliverReviewVerdictFeedback as t };
166
146
 
167
- //# sourceMappingURL=review-verdict-feedback-Cfc-THvz.js.map
147
+ //# sourceMappingURL=review-verdict-feedback-wqnikhMK.js.map
@@ -1,8 +1,8 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { S as MemoryStatus, t as init_src } from "./src-AXK4mjue.js";
3
- import { a as resolveArchiveDir, f as resolveStatusFile, i as init_paths, l as resolveObservationsFile, n as ensureDir, r as ensureParentDir, u as resolvePendingDir } from "./paths-Bo-kA9ta.js";
4
- import { i as init_settings, n as getMemoryRollupPendingThreshold } from "./settings-DZq_bi-B.js";
5
- import { i as updateMemoryHealth, n as extractWithProviderPolicy, r as init_health, t as init_providers } from "./providers-uPI9uU7Q.js";
2
+ import { S as MemoryStatus, t as init_src } from "./src-fgbU-jJ-.js";
3
+ import { a as resolveArchiveDir, f as resolveStatusFile, i as init_paths, l as resolveObservationsFile, n as ensureDir, r as ensureParentDir, u as resolvePendingDir } from "./paths-TE1GOZDr.js";
4
+ import { i as init_settings, n as getMemoryRollupPendingThreshold } from "./settings-D2wt4nku.js";
5
+ import { i as updateMemoryHealth, n as extractWithProviderPolicy, r as init_health, t as init_providers } from "./providers-4-xOzHQu.js";
6
6
  import { Result, Schema } from "effect";
7
7
  import { dirname } from "path";
8
8
  import { randomUUID } from "crypto";
@@ -98,8 +98,8 @@ async function enqueueStatusRollupEvent(job) {
98
98
  await configuredStatusRollupProcessor(job);
99
99
  return;
100
100
  }
101
- const { initEventStore } = await import("./event-store-BeEE8pW5.js");
102
- const { synthesizeStatusRollup, commitStatusRollup } = await import("./rollup-CxR6GMTe.js");
101
+ const { initEventStore } = await import("./event-store-DIk9wvnS.js");
102
+ const { synthesizeStatusRollup, commitStatusRollup } = await import("./rollup-DBNy1yFB.js");
103
103
  await (await initEventStore()).appendAsync({
104
104
  type: "memory.rollup_triggered",
105
105
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
@@ -295,7 +295,7 @@ async function clearPendingTurns(projectId, issueId, pendingTurns) {
295
295
  return cleared;
296
296
  }
297
297
  async function emitStatusUpdatedEvent(event) {
298
- const { initEventStore } = await import("./event-store-BeEE8pW5.js");
298
+ const { initEventStore } = await import("./event-store-DIk9wvnS.js");
299
299
  await (await initEventStore()).appendAsync({
300
300
  type: "memory.status_updated",
301
301
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
@@ -446,4 +446,4 @@ var init_rollup = __esmMin((() => {
446
446
  //#endregion
447
447
  export { readCurrentStatus as a, init_pending as c, readArchivedStatuses as i, maybeTriggerStatusRollup as l, commitStatusRollup as n, readRecentObservations as o, init_rollup as r, synthesizeStatusRollup as s, buildStatusRollupPrompt as t, writePendingTurn as u };
448
448
 
449
- //# sourceMappingURL=rollup-DgWlrSBc.js.map
449
+ //# sourceMappingURL=rollup-BJE-Vc7H.js.map
@@ -1,3 +1,3 @@
1
- import { n as commitStatusRollup, r as init_rollup, s as synthesizeStatusRollup } from "./rollup-DgWlrSBc.js";
1
+ import { n as commitStatusRollup, r as init_rollup, s as synthesizeStatusRollup } from "./rollup-BJE-Vc7H.js";
2
2
  init_rollup();
3
3
  export { commitStatusRollup, synthesizeStatusRollup };