@overdeck/desktop 0.47.0 → 0.47.1

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 (343) hide show
  1. package/package.json +1 -1
  2. package/server/{acceptance-criteria-10Ur5Dne.js → acceptance-criteria-Cd7ZGZCq.js} +2 -2
  3. package/server/{advancing-selfheal-BNwqxseD.js → advancing-selfheal-DieFp3qi.js} +5 -5
  4. package/server/{agent-gc-C3h9Or3a.js → agent-gc-BMcgTDl7.js} +4 -4
  5. package/server/{agent-state-CYXJVG72.js → agent-state-DyZJia9f.js} +1 -1
  6. package/server/{agent-state-service-Ds6OeFvo.js → agent-state-service-BOzQhLjU.js} +4 -4
  7. package/server/{agent-state-service-C63p_ftq.js → agent-state-service-DFO6qvHp.js} +1 -1
  8. package/server/agent-state-source-Ca_zCaII.js +21 -0
  9. package/server/{agents-J5mEnekq.js → agents-CtACUuVG.js} +3 -3
  10. package/server/{agents-ePFVoZbu.js → agents-Dnn4XgdB.js} +1 -1
  11. package/server/archive-planning-BHCd_eL5.js +2 -0
  12. package/server/{archive-planning-BwhxeP7C.js → archive-planning-Binfb99i.js} +4 -4
  13. package/server/{artifact-index-jobs-D1q_vR3V.js → artifact-index-jobs-Jn7BGOtV.js} +1 -1
  14. package/server/{assemble-Bgwqv-Ro.js → assemble-DsqK9OAq.js} +1 -1
  15. package/server/{auto-spawn-consent-CQ9Bi9q6.js → auto-spawn-consent-BooqhC3L.js} +3 -3
  16. package/server/{backlog-auto-trigger-n1lzPgN4.js → backlog-auto-trigger-BADGPxov.js} +3 -3
  17. package/server/{behavior-td6-xhQk.js → behavior-B7biGtFT.js} +1 -1
  18. package/server/{boot-reconciled-stop-events-C7gGe3oB.js → boot-reconciled-stop-events-bQUzU8ns.js} +1 -1
  19. package/server/{bridge-pool-patrol-CYH2OLb5.js → bridge-pool-patrol-DsPj6F7t.js} +1 -1
  20. package/server/{briefing-freshness-DRqZ8lAz.js → briefing-freshness-CUerZqWd.js} +1 -1
  21. package/server/{build-info-7yiEpl6u.js → build-info-D0q_i8WM.js} +3 -3
  22. package/server/{build-info-CpG__c63.js → build-info-Du74MKiP.js} +1 -1
  23. package/server/{checkpoint-manager-CkKmB0wZ.js → checkpoint-manager-Cu-R5Uzg.js} +1 -1
  24. package/server/{checkpoint-manager-DBcyNR8w.js → checkpoint-manager-R5tnaxEY.js} +1 -1
  25. package/server/checkpoint-worker.js +1 -1
  26. package/server/{checkpoints-D95apurL.js → checkpoints-DYtLu-PB.js} +1 -1
  27. package/server/{checkpoints-Wm963lm8.js → checkpoints-wF84ubZ8.js} +1 -1
  28. package/server/{claude-hooks-provision-Bjitl9aI.js → claude-hooks-provision-DXI3Wqlm.js} +1 -1
  29. package/server/{claude-hooks-provision-4RPxNkE8.js → claude-hooks-provision-UKxCeOyj.js} +1 -1
  30. package/server/{claude-permissions-CpbpvUQ2.js → claude-permissions-DYVLnX9t.js} +1 -1
  31. package/server/{claude-settings-overlay-_H9Yrzab.js → claude-settings-overlay-DsbpIq2d.js} +1 -1
  32. package/server/{claude-settings-overlay-BzkHYDwR.js → claude-settings-overlay-DxP2F_gY.js} +1 -1
  33. package/server/cli-D6mRfUE6.js +3 -0
  34. package/server/{cli-Cte9ZFGn.js → cli-DzRKxxP_.js} +7 -7
  35. package/server/{cliproxy-C5fMJ7rY.js → cliproxy-CG4meRFc.js} +1 -1
  36. package/server/{cliproxy-DaAbWMjC.js → cliproxy-Cwzw39yN.js} +1 -1
  37. package/server/{close-issue-BPh1ARCF.js → close-issue-BX1bATJy.js} +4 -4
  38. package/server/{closed-issue-reaper-DHRfRMrp.js → closed-issue-reaper-DvnTSN6a.js} +1 -1
  39. package/server/{closed-issue-reaper-DoOZqGFK.js → closed-issue-reaper-hLt0W86J.js} +9 -9
  40. package/server/{codex-BzGDW_d3.js → codex-BYwi1uyW.js} +4 -4
  41. package/server/{codex-parser-Dt-ycU8L.js → codex-parser-Poyz29GE.js} +2 -2
  42. package/server/{codex-o8FJwzmy.js → codex-rnJN3v3_.js} +1 -1
  43. package/server/{compaction-continuation-CvXpbZ4w.js → compaction-continuation-DtMfHN0f.js} +2 -2
  44. package/server/{config-BvLe652W.js → config-CX4vk1CV.js} +1 -1
  45. package/server/{config-CL3Gyvja.js → config-R793W0yA.js} +1 -1
  46. package/server/{config-Bi3u1VK7.js → config-ktAVnp4s.js} +1 -1
  47. package/server/{conflict-gate-E4nt7ZeS.js → conflict-gate-BNv6UolH.js} +3 -3
  48. package/server/{conflict-gate-CX80JYYS.js → conflict-gate-BSTlwCtF.js} +1 -1
  49. package/server/{context-layers-DAG83UZt.js → context-layers-DCdaGsRG.js} +2 -2
  50. package/server/{context-layers-C_IIysnm.js → context-layers-DlWsDiRF.js} +2 -2
  51. package/server/{control-settings-CiqGxXnc.js → control-settings-qYYHrIqy.js} +2 -2
  52. package/server/{conversation-compaction-BE3CNtHF.js → conversation-compaction-BxUKObHb.js} +1 -1
  53. package/server/{conversation-compaction-D6-yLtqt.js → conversation-compaction-CXQrN3I_.js} +6 -6
  54. package/server/{conversation-service-D_TS2b1r.js → conversation-service-CDnQ3ayN.js} +1 -1
  55. package/server/{conversation-service-DBxoYMDl.js → conversation-service-CZiUE8Uw.js} +4 -4
  56. package/server/{conversations-D0UEdLtk.js → conversations-D7lR670u.js} +1 -1
  57. package/server/{conversations-BKDVpB-3.js → conversations-DXl5YTf4.js} +1 -1
  58. package/server/{cost-DpgYmYqR.js → cost-Aat8HfO_.js} +1 -1
  59. package/server/{cost-DS1s0DbG.js → cost-CWvN9FP2.js} +3 -3
  60. package/server/{cost-sync-tOCCGnEt.js → cost-sync-DiUBXwl6.js} +1 -1
  61. package/server/{dag-BtkgLeqY.js → dag-5QlmH0oC.js} +2 -2
  62. package/server/{dangerous-git-ops-CFLykHWt.js → dangerous-git-ops-DWX6Og8c.js} +1 -1
  63. package/server/dashboard-db-worker.js +7 -7
  64. package/server/{deacon-pLRLbPvR.js → deacon-B1LD5cJU.js} +318 -160
  65. package/server/{deacon-BIblC-WX.js → deacon-PW_bg4uL.js} +2 -2
  66. package/server/{deacon-nudge-log-B08gF0mh.js → deacon-nudge-log-DPHsO14z.js} +2 -2
  67. package/server/{deacon-pending-lifecycle-B-Io84AP.js → deacon-pending-lifecycle-2ZflPxgo.js} +3 -3
  68. package/server/deacon-swarm-BkKR7SXu.js +2 -0
  69. package/server/{deacon-swarm-v5PMun-m.js → deacon-swarm-DwGUgSVp.js} +10 -10
  70. package/server/deacon.js +7 -7
  71. package/server/{dead-end-trip-D8A3msX9.js → dead-end-trip-B06RFIr2.js} +2 -2
  72. package/server/{delivery-BX9HR4wQ.js → delivery-C2M73sBg.js} +1 -1
  73. package/server/{deploy-patrol-sYgOxLeb.js → deploy-patrol-BNjeCL8u.js} +7 -7
  74. package/server/{deploy-queue-VfohaPN_.js → deploy-queue-CKT_Ia9p.js} +1 -1
  75. package/server/{deploy-queue-gHJBycaF.js → deploy-queue-DMMYhFC8.js} +1 -1
  76. package/server/{deploy-window-D4DQb8VP.js → deploy-window-DC8lze3d.js} +4 -4
  77. package/server/{deploy-window-CFRZ0-kt.js → deploy-window-D_AimdNN.js} +1 -1
  78. package/server/{dev-supervisor-DiOBDM1c.js → dev-supervisor-C4F0vbno.js} +1 -1
  79. package/server/{devcontainer-renderer-BUOIlfgD.js → devcontainer-renderer-66sqMQIi.js} +2 -2
  80. package/server/{dist-C3A8B8wM.js → dist-C5FT9lTG.js} +1 -1
  81. package/server/dist-qcf9gAP0.js +3 -0
  82. package/server/{dist-src-C0adpegX.js → dist-src-B-AlGWSl.js} +1 -1
  83. package/server/{docker-Y3PElJb0.js → docker-BxrFhTZ_.js} +1 -1
  84. package/server/{docker-BJzlkqYB.js → docker-CoAT8R0J.js} +2 -2
  85. package/server/{dod-DlNtcH6n.js → dod-Bg6wsKTV.js} +1 -1
  86. package/server/{durable-review-pipeline-DP6bIcOY.js → durable-review-pipeline-D_DcfIGP.js} +1 -1
  87. package/server/{durable-review-pipeline-Cibps-Rg.js → durable-review-pipeline-HkAgnx0L.js} +1 -1
  88. package/server/{ensure-devcontainer-DMAbWqtQ.js → ensure-devcontainer-Bg5HJAcO.js} +1 -1
  89. package/server/{ensure-devcontainer-BAofzBPv.js → ensure-devcontainer-DTxChVuA.js} +3 -3
  90. package/server/{esm-shims-BeObUkaw.js → esm-shims-CaBWIR7f.js} +1 -1
  91. package/server/{events-CF8QDbuV.js → events-ChEFB7Jp.js} +1 -1
  92. package/server/{events-BNrvchBg.js → events-DhRN-6vM.js} +2 -2
  93. package/server/{factory-Cmm9Hsho.js → factory-BezSPaTd.js} +4 -4
  94. package/server/{feature-registry-population-B6HpNWRy.js → feature-registry-population-DhswNiXx.js} +3 -3
  95. package/server/{feature-registry-storage-DJEFx1Pf.js → feature-registry-storage-CUVNpAso.js} +1 -1
  96. package/server/{features-D5km80UI.js → features-B2CfNPFw.js} +1 -1
  97. package/server/{feedback-target-BJ5ZADsu.js → feedback-target-CMrEAoeA.js} +1 -1
  98. package/server/{feedback-target-DSxEL6lP.js → feedback-target-VBr9gKgX.js} +15 -4
  99. package/server/{feedback-writer-CoB9Z6aU.js → feedback-writer-CY91ckuw.js} +1 -1
  100. package/server/{feedback-writer-C27Hak8a.js → feedback-writer-xpFgU632.js} +4 -4
  101. package/server/{flywheel-BHx8XuMr.js → flywheel-CTVY3yCG.js} +12 -12
  102. package/server/{flywheel-f662Q-y2.js → flywheel-DQqsSm7P.js} +11 -11
  103. package/server/{flywheel-DZZdtiOL.js → flywheel-DsICCjTR.js} +1 -1
  104. package/server/{flywheel-merge-order-Dil0LmdN.js → flywheel-merge-order-C-TI4JGu.js} +1 -1
  105. package/server/{flywheel-merge-order-D_xLMbJU.js → flywheel-merge-order-CMGz-imq.js} +6 -6
  106. package/server/forge-D647IMNa.js +3 -0
  107. package/server/{forge-BaKGCya6.js → forge-RTNqJe6a.js} +2 -2
  108. package/server/{from-B3tZbB55.js → from-DxGcivc9.js} +1 -1
  109. package/server/{fts-db-IVc4_M3f.js → fts-db-wROfFfje.js} +2 -2
  110. package/server/{fts-operations-B9jG8wa3.js → fts-operations-BuTdlZFA.js} +2 -2
  111. package/server/{git-utils-Xg4PFN45.js → git-utils-CedsVume.js} +1 -1
  112. package/server/{git-utils-CsvYfJU3.js → git-utils-DtdoEXJk.js} +3 -3
  113. package/server/{github-app-Bmg4R9mv.js → github-app-DIE8BkHI.js} +1 -1
  114. package/server/{github-app-CmNk0zLU.js → github-app-gVnZcP9B.js} +1 -1
  115. package/server/{github-client-qazkPrg0.js → github-client-BrAC6ELh.js} +3 -3
  116. package/server/{github-client-B6KM9_wA.js → github-client-CBOkvBUl.js} +1 -1
  117. package/server/{github-pr-lookup-DAcVeRLK.js → github-pr-lookup-CgMULTPf.js} +2 -2
  118. package/server/{harness-binary-BSpiXaLw.js → harness-binary-CnBHpd57.js} +1 -1
  119. package/server/{harness-resolve-BAJu5MX8.js → harness-resolve-BVj6sI8m.js} +3 -3
  120. package/server/{health-events-BwX32k8d.js → health-events-BBWO_Dh9.js} +1 -1
  121. package/server/{health-events-2Z6Wa9SM.js → health-events-Der6bOkm.js} +1 -1
  122. package/server/{hooks-D1g1jKLI.js → hooks-BJNal-bs.js} +1 -1
  123. package/server/{hooks-DbtbimEf.js → hooks-BOavco-e.js} +1 -1
  124. package/server/{hume-DXNiu6nQ.js → hume-DBocJFkA.js} +2 -2
  125. package/server/hume-DtWN8oV5.js +3 -0
  126. package/server/{idle-stack-reaper-CRA1e0jr.js → idle-stack-reaper-CyGxXOfC.js} +1 -1
  127. package/server/{idle-stack-reaper-Cy-dQzW4.js → idle-stack-reaper-DQFh8rDh.js} +1 -1
  128. package/server/{in-flight-guard-D-sSkADM.js → in-flight-guard-nXEKoxI7.js} +1 -1
  129. package/server/{injection-6AGnXxlj.js → injection-CCopdUKz.js} +6 -6
  130. package/server/{injection-Bl8d_jHZ.js → injection-DfFFEMKL.js} +1 -1
  131. package/server/inspect-agent-CPqXI81t.js +2 -0
  132. package/server/{inspect-agent-nXdIptyh.js → inspect-agent-FCDlNT_i.js} +10 -10
  133. package/server/{internal-token-DzK385vD.js → internal-token-BG6yQKNL.js} +1 -1
  134. package/server/{internal-token-Ias7N8Kg.js → internal-token-BJZa40Ld.js} +1 -1
  135. package/server/{io-B00PBNku.js → io-C0NV7y6C.js} +3 -3
  136. package/server/{issue-closed-BehTG1be.js → issue-closed-CNNGbhWm.js} +6 -6
  137. package/server/{issue-lifecycle-Birk-ifu.js → issue-lifecycle-BXfzxFCD.js} +18 -18
  138. package/server/{issue-lifecycle-BqSuQvbn.js → issue-lifecycle-DSH0GpWC.js} +1 -1
  139. package/server/{issue-service-singleton-C6ZduvuY.js → issue-service-singleton-F3A5VP6M.js} +8 -8
  140. package/server/{issue-service-singleton-B2wXiIlw.js → issue-service-singleton-lwFJ4dHk.js} +1 -1
  141. package/server/{issues-DQ5-LatB.js → issues-DA-U_MpR.js} +1 -1
  142. package/server/{jsonl-parser-BDpnGFCl.js → jsonl-parser-BXiGANOh.js} +2 -2
  143. package/server/{label-cleanup-Dwnky8FG.js → label-cleanup-BnxRk0Eo.js} +2 -2
  144. package/server/{lifecycle-B4Xdb4cY.js → lifecycle-DOgGnpIv.js} +1 -1
  145. package/server/{lifecycle-B3s4sM1G.js → lifecycle-Di48-w4x.js} +6 -6
  146. package/server/{lifecycle-io-DCo6s6ks.js → lifecycle-io-1XSeczTr.js} +4 -4
  147. package/server/{lifecycle-io-CzTHEooc.js → lifecycle-io-eVG6v_8-.js} +1 -1
  148. package/server/{linear-client-9uq7fhiV.js → linear-client-CYZRrcjp.js} +3 -3
  149. package/server/{linear-client-CnbtHiic.js → linear-client-CvGo9n7M.js} +1 -1
  150. package/server/{linear-mcp-auth-BxUOzswy.js → linear-mcp-auth-Cp0XaP96.js} +4 -4
  151. package/server/{linear-mcp-auth-D46fBCLf.js → linear-mcp-auth-DoJnjdPZ.js} +1 -1
  152. package/server/memory-fts-worker.js +1 -1
  153. package/server/{merge-DiW9RdSB.js → merge-DO14mOr3.js} +2 -2
  154. package/server/{merge-sr8Nrnmi.js → merge-ZF99ig6A.js} +1 -1
  155. package/server/{merge-agent-DQTXZk8z.js → merge-agent-C1-9zbP_.js} +1 -1
  156. package/server/{merge-agent-BLUgRsz3.js → merge-agent-gpiRkcvj.js} +25 -25
  157. package/server/{merge-batch-Cp_j9BGk.js → merge-batch-C11ocNkO.js} +1 -1
  158. package/server/{merge-completeness-B46KqhtY.js → merge-completeness-BUzPZy0E.js} +4 -4
  159. package/server/{merge-completeness-BLbB5-6n.js → merge-completeness-CghMbyX7.js} +1 -1
  160. package/server/merge-ops-7QqziXAh.js +2 -0
  161. package/server/merge-rebase-B4pgzvQJ.js +2 -0
  162. package/server/{merge-rebase-DIkBjgwq.js → merge-rebase-iwlUzZjr.js} +1 -1
  163. package/server/{merge-set-DeUxFsC3.js → merge-set-BymrheTj.js} +1 -1
  164. package/server/{merge-set-CBgHfwM0.js → merge-set-Dbnx4chw.js} +3 -3
  165. package/server/{merge-sync-kr4vqyjM.js → merge-sync-CM978zez.js} +1 -1
  166. package/server/{merge-sync-CpGmk6Ch.js → merge-sync-CqEtqjI2.js} +1 -1
  167. package/server/{merge-train-Dmrcus12.js → merge-train-DvLcAn1G.js} +3 -3
  168. package/server/{merge-train-deps-D_uGX91G.js → merge-train-deps-Cl_kcRbO.js} +3 -3
  169. package/server/{merge-verification-NvaAd8CZ.js → merge-verification-c9Y9mllw.js} +5 -5
  170. package/server/{merged-docker-cleanup-worker-Y1R06TEl.js → merged-docker-cleanup-worker-CGiDOdv8.js} +3 -3
  171. package/server/{merged-docker-cleanup-worker-DH_hrGPI.js → merged-docker-cleanup-worker-DgsLOx3E.js} +1 -1
  172. package/server/{multipart-parser-R-oC8dQg.js → multipart-parser-D0twwRjz.js} +2 -2
  173. package/server/{no-resume-mode-BgD0JUmM.js → no-resume-mode-DZvP0M_S.js} +1 -1
  174. package/server/node_modules/.package-lock.json +1 -1
  175. package/server/{orphan-proposed-reconciler-DcgTPPFY.js → orphan-proposed-reconciler-6r2OEfYd.js} +1 -1
  176. package/server/{orphan-proposed-reconciler-B6vJHxtX.js → orphan-proposed-reconciler-DtQP6oE_.js} +17 -17
  177. package/server/package-lock.json +2 -2
  178. package/server/package.json +1 -1
  179. package/server/{pan-dir-DMzF5wne.js → pan-dir-DAOb1V2-.js} +3 -3
  180. package/server/{paths-sJBSb7Ul.js → paths-DuATV5iE.js} +1 -1
  181. package/server/{pending-lifecycle-claim-DilzGfgk.js → pending-lifecycle-claim-DQUHIDfX.js} +2 -2
  182. package/server/{persistent-logger-H_VjuOu7.js → persistent-logger-CBj016pT.js} +1 -1
  183. package/server/{pickup-DWhqzliO.js → pickup-zXZl5lQI.js} +1 -1
  184. package/server/{pipeline-membership-D9SBvItj.js → pipeline-membership-B2yUcBz7.js} +1 -1
  185. package/server/{pipeline-membership-C88VBnhJ.js → pipeline-membership-DHOXmvba.js} +1 -1
  186. package/server/{pipeline-membership-gather-CeVGnNJ2.js → pipeline-membership-gather-BIcJ-N0W.js} +7 -7
  187. package/server/{pipeline-membership-gather-4eR-7Tqy.js → pipeline-membership-gather-OkLXuvxR.js} +1 -1
  188. package/server/{pipeline-notifier-DT6xLFao.js → pipeline-notifier-BmwrVKsO.js} +1 -1
  189. package/server/{pipeline-notifier-D0ALV6Nw.js → pipeline-notifier-CxMes51i.js} +2 -2
  190. package/server/{post-merge-lifecycle-worker-8HIeS_J6.js → post-merge-lifecycle-worker-3u_rA4R0.js} +3 -3
  191. package/server/{project-pipelines-9SKt2bEc.js → project-pipelines-C3SPFJ38.js} +1 -1
  192. package/server/{project-repos-B5pIphKg.js → project-repos-BOpBzkO6.js} +1 -1
  193. package/server/{project-repos-DPjOdfPa.js → project-repos-BgW4lcIa.js} +1 -1
  194. package/server/{prompts-CgzMBvQF.js → prompts-B0TtboFm.js} +1 -1
  195. package/server/{providers-BJQSnAAp.js → providers-O2smCvSz.js} +6 -6
  196. package/server/{pull-requests-7BgLDsIo.js → pull-requests-BonZ4WVG.js} +3 -3
  197. package/server/{pull-requests-Dq0y6IxE.js → pull-requests-DNcJUVWA.js} +1 -1
  198. package/server/{queries-C-MUZaIy.js → queries-DCX27GRr.js} +64 -64
  199. package/server/{rally-CPysR4T_.js → rally-Cxe7lKYX.js} +2 -2
  200. package/server/{rally-api-CgosKdKL.js → rally-api-Cp50exEi.js} +1 -1
  201. package/server/{rally-api-8Ptlp2os.js → rally-api-CzkKenoi.js} +1 -1
  202. package/server/{rally-client-CCX0hADj.js → rally-client-Bu3Cekkw.js} +1 -1
  203. package/server/{rally-client-iYMHWQD7.js → rally-client-CyBBEDHu.js} +5 -5
  204. package/server/rally-x6ztTQo4.js +3 -0
  205. package/server/{reap-terminal-sessions-Qf-9LVQc.js → reap-terminal-sessions-CtAhr6L0.js} +2 -2
  206. package/server/{reap-terminal-sessions-4Xg9NGA8.js → reap-terminal-sessions-DvFqQUnq.js} +2 -2
  207. package/server/{rebuild-stack-DqcOVmJO.js → rebuild-stack-BKYpIPDL.js} +2 -2
  208. package/server/{rebuild-stack-CMdgaylx.js → rebuild-stack-hCQtprWC.js} +6 -6
  209. package/server/{reconstruct-cache-CMZJ_Vjq.js → reconstruct-cache-CF2avArx.js} +6 -6
  210. package/server/{recovery-trip-DDH-02ng.js → recovery-trip-D-wM9EfB.js} +1 -1
  211. package/server/{release-engine-B2X9AfFC.js → release-engine-_eO3VFth.js} +4 -4
  212. package/server/{release-set-G4XKyQ8K.js → release-set-vxgZwwZV.js} +1 -1
  213. package/server/{remote-BXarMvqf.js → remote-BienmcrZ.js} +3 -3
  214. package/server/{remote-CUhyqjXk.js → remote-CVPCc7Vy.js} +3 -3
  215. package/server/{remote-agents-CLZB3Coc.js → remote-agents-kwsEZvXu.js} +1 -1
  216. package/server/{remote-agents-Bba-MgSA.js → remote-agents-kxraOCGT.js} +4 -4
  217. package/server/{remote-completion-CwAp79EC.js → remote-completion-BtmZ42aP.js} +12 -12
  218. package/server/resume-DXIIfJNk.js +3 -0
  219. package/server/{review-agent--pOptAEV.js → review-agent-CIRr0yYt.js} +25 -25
  220. package/server/{review-agent-BTCNkq2h.js → review-agent-UpAM4DmT.js} +1 -1
  221. package/server/{review-artifacts-BNmw8dWE.js → review-artifacts-BCODM9ww.js} +4 -4
  222. package/server/{review-context-DFxYOOJW.js → review-context-BBsNrDri.js} +8 -8
  223. package/server/{review-convoy-liveness-BgU_1jJf.js → review-convoy-liveness-l06_LYCt.js} +1 -1
  224. package/server/{review-status-Dma9SFaN.js → review-status-CacDM78F.js} +1 -1
  225. package/server/{review-status-CGvlA4o_.js → review-status-CwhA9wmd.js} +22 -19
  226. package/server/{review-status-emit-DURrmGYX.js → review-status-emit-BPJwYcRy.js} +3 -3
  227. package/server/{review-status-enrichment-8NiNXi5W.js → review-status-enrichment-DvyZAbGR.js} +1 -1
  228. package/server/{review-status-source-BLx_1siH.js → review-status-source-B70ekARK.js} +1 -1
  229. package/server/{review-status-source-DIk1JSow.js → review-status-source-DWnFE0b6.js} +1 -1
  230. package/server/{review-status-sync-muT-EBp2.js → review-status-sync-B0IS6Beh.js} +1 -1
  231. package/server/{review-status-sync-0GxOqeqF.js → review-status-sync-h2CJX6ju.js} +1 -1
  232. package/server/{review-verdict-feedback-HwF6ODFy.js → review-verdict-feedback-qRohbFG2.js} +1 -1
  233. package/server/{review-verdict-feedback-xJNdqBnX.js → review-verdict-feedback-yrrmgps_.js} +74 -12
  234. package/server/{rollup-BQaol5TX.js → rollup-CUoav0Op.js} +5 -5
  235. package/server/{rollup-BR4t_wck.js → rollup-DxCjJaAM.js} +1 -1
  236. package/server/{scanner-C-D2cFdX.js → scanner-ChURu_b-.js} +5 -5
  237. package/server/{sequence-io-Bmf1EZM5.js → sequence-io-D9ITDxzq.js} +3 -3
  238. package/server/{sequencer-agent-CigMyKh2.js → sequencer-agent-m7gmaakW.js} +5 -5
  239. package/server/server.js +180 -180
  240. package/server/{service-CD0DvFvD.js → service-BzFG0Us_.js} +51 -51
  241. package/server/{session-fork-B6cQ5eya.js → session-fork-KBq4HIHF.js} +1 -1
  242. package/server/{session-history-3ON_IJjm.js → session-history-C_EMhIIF.js} +3 -3
  243. package/server/settings-9jSGHBPY.js +2 -0
  244. package/server/{settings-VN0qOh4U.js → settings-BLbcDqUp.js} +2 -2
  245. package/server/{settings-PilbFZAM.js → settings-DejgzzLs.js} +1 -1
  246. package/server/{shadow-engineering-DXvx77oE.js → shadow-engineering-D8R9I8Yl.js} +3 -3
  247. package/server/{shadow-state-CZBp7pwq.js → shadow-state-C0Af4clN.js} +1 -1
  248. package/server/{shadow-state-BBk_zacw.js → shadow-state-fzIqIMDD.js} +1 -1
  249. package/server/{shadow-utils-DdZ05AJS.js → shadow-utils-Ugca_9ND.js} +1 -1
  250. package/server/{ship-log-7kJfjUX2.js → ship-log-VAv-lHrF.js} +1 -1
  251. package/server/{smart-compaction-ByhL9cRS.js → smart-compaction-B2Xu5XEb.js} +5 -5
  252. package/server/{smart-compaction-8fA5k5XN.js → smart-compaction-BcYY_Suf.js} +1 -1
  253. package/server/{spawn-planning-session-pcF-YeFE.js → spawn-planning-session-DhCoBPct.js} +14 -14
  254. package/server/{spawn-planning-session-vLUJoFjy.js → spawn-planning-session-Dsv-350T.js} +2 -2
  255. package/server/{specialist-completion-B07XjWD2.js → specialist-completion-z6v3ZqJE.js} +1 -1
  256. package/server/{specialist-context-DJ-zFyL3.js → specialist-context-CrA5azkJ.js} +4 -4
  257. package/server/{specialist-handoff-logger-aKSxbIgD.js → specialist-handoff-logger-CmpZYJMB.js} +1 -1
  258. package/server/{specialist-logs-Dae-n52_.js → specialist-logs-BorrIu0x.js} +2 -2
  259. package/server/{specialists-6PWdtWcg.js → specialists-2yLmqph9.js} +86 -86
  260. package/server/{specialists-Bz-wFT7R.js → specialists-CH6ah6D-.js} +1 -1
  261. package/server/{specialists-DUiExaxb.js → specialists-Dfx9_Wzb.js} +15 -15
  262. package/server/{specialists-KR3pKulN.js → specialists-ZdrifiKx.js} +1 -1
  263. package/server/specs-DKV3jIEs.js +3 -0
  264. package/server/{src-rac0Mepv.js → src-B2e5rGu2.js} +6 -6
  265. package/server/{src-vHy2-oCv.js → src-Dm_NV7f6.js} +3 -3
  266. package/server/{stack-health-DqLTiEu4.js → stack-health-Bf2WdG4E.js} +1 -1
  267. package/server/{stack-health-BikqHSjn.js → stack-health-CoWAhA99.js} +1 -1
  268. package/server/{stale-task-claims-Cab_Fo_Z.js → stale-task-claims-D1Ll8fI5.js} +2 -2
  269. package/server/{staleness-C-a5rBxF.js → staleness-45qZ_a60.js} +1 -1
  270. package/server/{staleness-CGTZyp6V.js → staleness-CuED1Psm.js} +1 -1
  271. package/server/{state-home-722Dkx92.js → state-home-B4EWfIxF.js} +1 -1
  272. package/server/{state-mapping-CybR81Uf.js → state-mapping-BEONzr8P.js} +1 -1
  273. package/server/{state-migrate-2u8wIpoL.js → state-migrate-Cd8BH33U.js} +3 -3
  274. package/server/{stuck-remediation-r1TJu68G.js → stuck-remediation-ChcooZuk.js} +1 -1
  275. package/server/{stuck-remediation-CC6q3eqQ.js → stuck-remediation-DmY5UJLg.js} +16 -16
  276. package/server/{substrate-bug-weights-service-CzIyyWFT.js → substrate-bug-weights-service-BvTWrFUz.js} +1 -1
  277. package/server/{summary-fork-BqgmgPDt.js → summary-fork--Jr8duYh.js} +2 -2
  278. package/server/{summary-fork-Df2WFijM.js → summary-fork-Ct514_Jl.js} +7 -7
  279. package/server/supervisor/{injection-budget-Cg_KIb3o.js → injection-budget-B3UyEONL.js} +1 -1
  280. package/server/supervisor/pty-supervisor.js +2 -2
  281. package/server/supervisor/{pty-token-BbjwEUUM.js → pty-token-CWRffcCa.js} +1 -1
  282. package/server/{supervisor-BxqSpjcN.js → supervisor-B7BHGcNA.js} +2 -2
  283. package/server/supervisor-CyR_mW5B.js +2 -0
  284. package/server/{swarm-readiness-DfFxa9-n.js → swarm-readiness-MNE5O8hn.js} +3 -3
  285. package/server/{system-prerequisites-ICLSkhhZ.js → system-prerequisites-Cin9ZgDx.js} +2 -2
  286. package/server/{teardown-workspace-DRdi_CPa.js → teardown-workspace-CvBpvc85.js} +13 -13
  287. package/server/{test-agent-queue-A_-p-i0I.js → test-agent-queue-DmSIqays.js} +5 -5
  288. package/server/{test-verdict-BHgTAwIG.js → test-verdict-BieVDAV1.js} +1 -1
  289. package/server/{test-verdict-C4i9aqEP.js → test-verdict-Cy2jJGTe.js} +1 -1
  290. package/server/{tldr-daemon-CvWXBhX1.js → tldr-daemon-Ca0eovh3.js} +1 -1
  291. package/server/{tldr-daemon-wvsU6bKv.js → tldr-daemon-IOssGwg7.js} +1 -1
  292. package/server/{token-DrxwytsZ.js → token-B10VFNOD.js} +2 -2
  293. package/server/{token-util-B48BlCba.js → token-util-CZ8WPtdk.js} +1 -1
  294. package/server/token-util-CrfQ2FKf.js +3 -0
  295. package/server/{tracker-config-BcPMElRB.js → tracker-config-CHbrjg6m.js} +1 -1
  296. package/server/{tracker-utils-CJ6BHjcD.js → tracker-utils-DZZq_C0R.js} +1 -1
  297. package/server/{traefik-connect-DZ6nMYMj.js → traefik-connect-GHomyBaD.js} +1 -1
  298. package/server/{tunnel-DUbUPElU.js → tunnel-Bdyb-sNq.js} +2 -2
  299. package/server/{tunnel-Bp-dRHZz.js → tunnel-Dz7y434T.js} +1 -1
  300. package/server/{typed-errors-CKeoDdU3.js → typed-errors-BR_RmPS_.js} +1 -1
  301. package/server/{typed-errors-DyjseiB6.js → typed-errors-Bn_2WRU7.js} +1 -1
  302. package/server/{types-Cm5ASJbq.js → types-D2ETIB8T.js} +1 -1
  303. package/server/{types-Di8wdakq.js → types-Dh6RI5Vj.js} +1 -1
  304. package/server/{uat-promote-verification-CoJuh7XO.js → uat-promote-verification-DyvQXvIn.js} +4 -4
  305. package/server/{uat-train-4Q0k06CQ.js → uat-train-Dv0Bxer7.js} +0 -0
  306. package/server/{uat-train-Dewoatps.js → uat-train-diX_7shd.js} +1 -1
  307. package/server/{validate-B0C8p66t.js → validate-606KcYZC.js} +3 -3
  308. package/server/{validation-hVOwQk8T.js → validation-Cf7aaV5A.js} +1 -1
  309. package/server/{validation-B_kIRfNe.js → validation-CnrDul1x.js} +3 -3
  310. package/server/{verification-artifact-D70AtckY.js → verification-artifact-D4b-bio9.js} +1 -1
  311. package/server/{verification-artifact-BxlxTiYK.js → verification-artifact-GOaj8u2s.js} +1 -1
  312. package/server/{verification-runner-KZTz6u72.js → verification-runner-B5MVxDvU.js} +18 -18
  313. package/server/{verification-runner-Bc3cJvpC.js → verification-runner-DiPaUP-C.js} +1 -1
  314. package/server/{vtt-parser-CE_i3Bcw.js → vtt-parser-CMU5EZ5R.js} +1 -1
  315. package/server/{work-agent-prompt-ByrPAzOy.js → work-agent-prompt-Csb3fbVR.js} +8 -8
  316. package/server/{workflows-D0vP1WrK.js → workflows-D87ajwV6.js} +20 -20
  317. package/server/workflows-DN6NyVGd.js +2 -0
  318. package/server/{workspace-COWvdibH.js → workspace-AIOM7n00.js} +1 -1
  319. package/server/{workspace-anchor-drift-pwz23TI1.js → workspace-anchor-drift-19cJ1bH5.js} +1 -1
  320. package/server/{workspace-anchor-drift-DXYIAHzr.js → workspace-anchor-drift-C3mK5wNI.js} +3 -3
  321. package/server/{workspace-config-BdZM4PvZ.js → workspace-config-CJ7RqQiP.js} +1 -1
  322. package/server/{workspace-DQkRPLlQ.js → workspace-iD8oULqu.js} +2 -2
  323. package/server/{workspace-manager-C1F3XsnS.js → workspace-manager-B38rFWA1.js} +1 -1
  324. package/server/{workspace-manager-BPgTrG66.js → workspace-manager-CXfrw4rR.js} +12 -12
  325. package/server/{workspace-metadata-CdjzAP8x.js → workspace-metadata-BuMRco5P.js} +1 -1
  326. package/server/{workspace-metadata-DkO_iTLo.js → workspace-metadata-eHSj_NsP.js} +1 -1
  327. package/server/{workspaces-CRBJikLp.js → workspaces-DbtMX2TM.js} +96 -96
  328. package/server/archive-planning-B2XplFzT.js +0 -2
  329. package/server/cli-CjOCSnfj.js +0 -3
  330. package/server/deacon-swarm-B1XkIvfr.js +0 -2
  331. package/server/dist-B3YPQa5A.js +0 -3
  332. package/server/forge-B5o319qI.js +0 -3
  333. package/server/hume-VUCNbTgn.js +0 -3
  334. package/server/inspect-agent-CUwVmr2h.js +0 -2
  335. package/server/merge-ops-1abz6O_P.js +0 -2
  336. package/server/merge-rebase-CJJVAJuz.js +0 -2
  337. package/server/rally-D_VW4bJv.js +0 -3
  338. package/server/resume-mOREjlYu.js +0 -3
  339. package/server/settings-CVmWiJ-r.js +0 -2
  340. package/server/specs--enInima.js +0 -3
  341. package/server/supervisor-B4anCCSm.js +0 -2
  342. package/server/token-util-D411CAq9.js +0 -3
  343. package/server/workflows-DtDX08ed.js +0 -2
@@ -1,57 +1,57 @@
1
1
  import { i as __require, t as __commonJSMin } from "./rolldown-runtime-DNCzzKnI.js";
2
2
  import { Fr as init_errors, Gn as init_projects, Gr as OVERDECK_HOME, Ir as AGENTS_DIR, Pt as init_record, Yn as listProjectsSync, Zn as loadProjectsConfigSync, ar as resolveProjectFromIssueSync, b as DEFAULT_CONFIG$1, dn as reconcileStatePlaneDrift, f as loadConfigSync, hn as init_state_plane, li as init_paths, ln as init_auto_commit, mn as getMainDivergence, or as resolveProjectPath, pi as sessionFilePath, s as init_load, x as init_defaults, zn as getProjectSync, zt as readIssueRecordSync } from "./config-yaml-CxdwhAIA.js";
3
- import { n as init_build_info, t as getBuildInfo } from "./build-info-7yiEpl6u.js";
4
- import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-B08gF0mh.js";
3
+ import { n as init_build_info, t as getBuildInfo } from "./build-info-D0q_i8WM.js";
4
+ import { n as getDashboardIdentity, t as recordDeaconNudge } from "./deacon-nudge-log-DPHsO14z.js";
5
5
  import { i as emitActivityTtsSync, o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
6
6
  import { i as updateIssueRecord, r as init_record_update } from "./record-update-DaOKS7Wb.js";
7
7
  import { A as listPaneValues, B as sendKeysAsync, D as killSession, E as isPaneDead, H as sessionExists, I as querySessionSync, M as listSessionNames, N as listSessions, U as sessionExistsSync, i as capturePane, w as init_tmux, z as sendKeys } from "./tmux-CfDHob9M.js";
8
8
  import { a as init_event_store, i as initEventStore } from "./event-store-CrHcVC5_.js";
9
9
  import { D as projectLegacySystemHealthSummary, t as init_src } from "./src-B948bGVR.js";
10
- import { B as reviewGatesPassedSync, C as setReviewStatusSync, H as findBlockingFindings, K as readJournalStatusSync, R as init_review_dispatch_decision, U as init_review_findings, W as init_review_status_record_sync, d as getReviewStatusSync, h as loadReviewStatuses, p as init_review_status, z as needsReviewDispatch } from "./review-status-CGvlA4o_.js";
11
- import { n as logAgentLifecycleSync, r as logDeaconEventSync, t as init_persistent_logger } from "./persistent-logger-H_VjuOu7.js";
12
- import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents-J5mEnekq.js";
13
- import { $n as getAgentDir, Br as saveAgentRuntimeState, Bt as init_transcript_landing, Ct as resetPatrolDispatchBudget, Et as workResumeSlotsAvailable, G as resumeAgent, Gr as init_codex_auth, J as isContextOverflowTail, K as init_context_overflow, Kr as paneShowsCodexAuthBurn, Ln as buildResumeContinueMessage, Lr as getAgentRuntimeState, Ot as init_memory_verdict_cache, Pt as deliverInitialPromptWithRetry, Rr as getAgentRuntimeStateSync, Ur as applyCodexAuthBurnFlag, X as messageAgent, Xn as clearAgentTroubledSync, Y as init_messaging, Zn as clearYieldForResumeSync, _ as init_linux, _r as saveAgentStateSync, _t as describeRunningAgents, a as listRunningAgentsSync, b as init_agents$1, br as setAgentYieldedSync, bt as init_concurrency, c as getRuntimeCensus, fr as recordAgentFailure, ft as init_termination, g as LINUX_MEMORY_PRESSURE_DEFAULTS, gr as saveAgentState, h as init_collector, hr as resetAgentFailureCount, ht as countRunningAgents, i as listRunningAgents, ir as init_agent_state, kt as setCachedMemoryVerdict, lr as markAgentRunningState, m as createHostHealthCollector, n as init_queries, pt as stopAgent, r as listAgentStates, rr as getAgentStateSync, s as descendantPidsForSession, tr as getAgentState, u as init_runtime_census, v as DARWIN_MEMORY_PRESSURE_DEFAULTS, wt as tryReserveAdvancingSlot, xt as releaseAdvancingSlot, y as init_darwin, yr as setAgentPausedSync, yt as getConcurrencyLimits, zr as init_runtime_state, zt as captureTranscriptUserRecordSnapshot } from "./queries-C-MUZaIy.js";
14
- import { o as getRuntimeSnapshot, s as init_agent_runtime_mirror } from "./session-history-3ON_IJjm.js";
15
- import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-CJ6BHjcD.js";
16
- import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-DzK385vD.js";
17
- import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-0GxOqeqF.js";
18
- import { i as readReviewStatusMap, n as init_review_status_source, t as classifyAdvancingSessionLifecycle } from "./review-status-source-DIk1JSow.js";
19
- import { _ as markMerged, c as init_merge_sync, f as listActiveAutoMerges, m as listProblemAutoMerges, t as cancelPending } from "./merge-sync-kr4vqyjM.js";
20
- import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-CBgHfwM0.js";
21
- import { m as readWorkspacePlanSync, o as init_io } from "./io-B00PBNku.js";
22
- import { f as init_config, m as loadConfigSync$1, p as loadConfig$1 } from "./config-BvLe652W.js";
23
- import { D as setSetting, O as stampBootReconciliation, _ as setBootReconciliationGrace, c as init_control_settings, g as setBootReconciliationDecision, o as getLastCleanShutdownAt, r as getBootReconciliationState, s as getSetting, u as isDeaconGloballyPaused } from "./control-settings-CiqGxXnc.js";
24
- import { d as init_docker_stats, u as DockerStatsCollector } from "./stack-health-DqLTiEu4.js";
25
- import { l as init_dag, o as getDispatchableItems } from "./dag-BtkgLeqY.js";
26
- import { a as loadCloisterConfigSync, i as loadCloisterConfig, r as init_config$1 } from "./config-Bi3u1VK7.js";
27
- import { a as findRecreatedLegacyStatePaths, o as init_state_home } from "./state-home-722Dkx92.js";
28
- import { M as withConcurrencyLimit, j as init_concurrency$1 } from "./github-app-CmNk0zLU.js";
29
- import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-CC6q3eqQ.js";
30
- import { n as __filename, r as init_esm_shims } from "./esm-shims-BeObUkaw.js";
31
- import { i as init_staleness, r as computeBuildStaleness } from "./staleness-C-a5rBxF.js";
32
- import { a as pidsWithCwdUnder, i as sweepAutoCloseOutCache, n as pruneTerminalStoppedAgents, r as getAutoCloseOutCanonicalState } from "./agent-gc-C3h9Or3a.js";
33
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-BehTG1be.js";
34
- import { n as getForgeAdapter, r as init_forge } from "./forge-BaKGCya6.js";
35
- import { a as observeForgeMergeState, i as init_merge_completeness } from "./merge-completeness-B46KqhtY.js";
36
- import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-C27Hak8a.js";
37
- import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-DSxEL6lP.js";
38
- import { a as init_review_monitor, i as REVIEW_SUB_ROLES, n as init_review_convoy_liveness, r as reviewTimestampMs, t as evaluateReviewConvoyLiveness } from "./review-convoy-liveness-BgU_1jJf.js";
39
- import { J as parseReviewerSessionName, U as getTmuxSessionName, g as getAllProjectSpecialistStatuses, t as init_specialists } from "./specialists-DUiExaxb.js";
40
- import { a as inferBranchFromWorkspace, i as findWorkspacePath } from "./archive-planning-BwhxeP7C.js";
41
- import { n as init_merge_verification, r as shouldSkipDispatchAsMerged } from "./merge-verification-NvaAd8CZ.js";
42
- import { n as init_review_verdict_feedback, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-xJNdqBnX.js";
43
- import { _ as init_label_reconciler, a as gatherProjectLensSignals, s as init_pipeline_membership_gather, v as reconcilePipelineLabelsPatrol } from "./pipeline-membership-gather-CeVGnNJ2.js";
44
- import { n as init_pipeline_membership, r as resolvePipelineMembership } from "./pipeline-membership-D9SBvItj.js";
45
- import { i as init_conflict_gate, o as probeBranchConflictPaths } from "./conflict-gate-E4nt7ZeS.js";
46
- import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-DZ6nMYMj.js";
47
- import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-v5PMun-m.js";
48
- import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-BgD0JUmM.js";
49
- import { r as init_in_flight_guard, t as createInFlightGuard } from "./in-flight-guard-D-sSkADM.js";
50
- import { r as reconcileClosedIssueAgents } from "./closed-issue-reaper-DoOZqGFK.js";
51
- import { t as recordDeadEndNeedsYou } from "./dead-end-trip-D8A3msX9.js";
52
- import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-B6vJHxtX.js";
53
- import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-Cy-dQzW4.js";
54
- import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-C4i9aqEP.js";
10
+ import { B as reviewGatesPassedSync, C as setReviewStatusSync, H as findBlockingFindings, K as readJournalStatusSync, R as init_review_dispatch_decision, U as init_review_findings, W as init_review_status_record_sync, d as getReviewStatusSync, h as loadReviewStatuses, p as init_review_status, z as needsReviewDispatch } from "./review-status-CwhA9wmd.js";
11
+ import { n as logAgentLifecycleSync, r as logDeaconEventSync, t as init_persistent_logger } from "./persistent-logger-CBj016pT.js";
12
+ import { c as listAllAgentsSync, d as isTerminalIssueStage, o as init_agents, u as getIssueStageSync } from "./agents-CtACUuVG.js";
13
+ import { $n as getAgentDir, Br as saveAgentRuntimeState, Bt as init_transcript_landing, Ct as resetPatrolDispatchBudget, Et as workResumeSlotsAvailable, G as resumeAgent, Gr as init_codex_auth, J as isContextOverflowTail, K as init_context_overflow, Kr as paneShowsCodexAuthBurn, Ln as buildResumeContinueMessage, Lr as getAgentRuntimeState, Ot as init_memory_verdict_cache, Pt as deliverInitialPromptWithRetry, Rr as getAgentRuntimeStateSync, Ur as applyCodexAuthBurnFlag, X as messageAgent, Xn as clearAgentTroubledSync, Y as init_messaging, Zn as clearYieldForResumeSync, _ as init_linux, _r as saveAgentStateSync, _t as describeRunningAgents, a as listRunningAgentsSync, b as init_agents$1, br as setAgentYieldedSync, bt as init_concurrency, c as getRuntimeCensus, fr as recordAgentFailure, ft as init_termination, g as LINUX_MEMORY_PRESSURE_DEFAULTS, gr as saveAgentState, h as init_collector, hr as resetAgentFailureCount, ht as countRunningAgents, i as listRunningAgents, ir as init_agent_state, kt as setCachedMemoryVerdict, lr as markAgentRunningState, m as createHostHealthCollector, n as init_queries, pt as stopAgent, r as listAgentStates, rr as getAgentStateSync, s as descendantPidsForSession, tr as getAgentState, u as init_runtime_census, v as DARWIN_MEMORY_PRESSURE_DEFAULTS, wt as tryReserveAdvancingSlot, xt as releaseAdvancingSlot, y as init_darwin, yr as setAgentPausedSync, yt as getConcurrencyLimits, zr as init_runtime_state, zt as captureTranscriptUserRecordSnapshot } from "./queries-DCX27GRr.js";
14
+ import { o as getRuntimeSnapshot, s as init_agent_runtime_mirror } from "./session-history-C_EMhIIF.js";
15
+ import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-DZZq_C0R.js";
16
+ import { i as ensureInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-BG6yQKNL.js";
17
+ import { c as init_review_status_sync, l as markWorkspaceStuck } from "./review-status-sync-h2CJX6ju.js";
18
+ import { i as readReviewStatusMap, n as init_review_status_source, t as classifyAdvancingSessionLifecycle } from "./review-status-source-DWnFE0b6.js";
19
+ import { _ as markMerged, c as init_merge_sync, f as listActiveAutoMerges, m as listProblemAutoMerges, t as cancelPending } from "./merge-sync-CM978zez.js";
20
+ import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-Dbnx4chw.js";
21
+ import { m as readWorkspacePlanSync, o as init_io } from "./io-C0NV7y6C.js";
22
+ import { f as init_config, m as loadConfigSync$1, p as loadConfig$1 } from "./config-CX4vk1CV.js";
23
+ import { D as setSetting, O as stampBootReconciliation, _ as setBootReconciliationGrace, c as init_control_settings, g as setBootReconciliationDecision, o as getLastCleanShutdownAt, r as getBootReconciliationState, s as getSetting, u as isDeaconGloballyPaused } from "./control-settings-qYYHrIqy.js";
24
+ import { d as init_docker_stats, u as DockerStatsCollector } from "./stack-health-Bf2WdG4E.js";
25
+ import { l as init_dag, o as getDispatchableItems } from "./dag-5QlmH0oC.js";
26
+ import { a as loadCloisterConfigSync, i as loadCloisterConfig, r as init_config$1 } from "./config-ktAVnp4s.js";
27
+ import { a as findRecreatedLegacyStatePaths, o as init_state_home } from "./state-home-B4EWfIxF.js";
28
+ import { M as withConcurrencyLimit, j as init_concurrency$1 } from "./github-app-gVnZcP9B.js";
29
+ import { a as isAgentIdleForNudge, t as checkStuckAgentRemediation } from "./stuck-remediation-DmY5UJLg.js";
30
+ import { n as __filename, r as init_esm_shims } from "./esm-shims-CaBWIR7f.js";
31
+ import { i as init_staleness, r as computeBuildStaleness } from "./staleness-45qZ_a60.js";
32
+ import { a as pidsWithCwdUnder, i as sweepAutoCloseOutCache, n as pruneTerminalStoppedAgents, r as getAutoCloseOutCanonicalState } from "./agent-gc-BMcgTDl7.js";
33
+ import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-CNNGbhWm.js";
34
+ import { n as getForgeAdapter, r as init_forge } from "./forge-RTNqJe6a.js";
35
+ import { a as observeForgeMergeState, i as init_merge_completeness } from "./merge-completeness-BUzPZy0E.js";
36
+ import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-xpFgU632.js";
37
+ import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-VBr9gKgX.js";
38
+ import { a as init_review_monitor, i as REVIEW_SUB_ROLES, n as init_review_convoy_liveness, r as reviewTimestampMs, t as evaluateReviewConvoyLiveness } from "./review-convoy-liveness-l06_LYCt.js";
39
+ import { J as parseReviewerSessionName, U as getTmuxSessionName, g as getAllProjectSpecialistStatuses, t as init_specialists } from "./specialists-Dfx9_Wzb.js";
40
+ import { a as inferBranchFromWorkspace, i as findWorkspacePath } from "./archive-planning-Binfb99i.js";
41
+ import { n as init_merge_verification, r as shouldSkipDispatchAsMerged } from "./merge-verification-c9Y9mllw.js";
42
+ import { a as findVerdictReportAsync, i as findVerdictReport, n as init_review_verdict_feedback, o as init_review_verdict_report, s as parseVerdictReport, t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-yrrmgps_.js";
43
+ import { _ as init_label_reconciler, a as gatherProjectLensSignals, s as init_pipeline_membership_gather, v as reconcilePipelineLabelsPatrol } from "./pipeline-membership-gather-BIcJ-N0W.js";
44
+ import { n as init_pipeline_membership, r as resolvePipelineMembership } from "./pipeline-membership-B2yUcBz7.js";
45
+ import { i as init_conflict_gate, o as probeBranchConflictPaths } from "./conflict-gate-BNv6UolH.js";
46
+ import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-GHomyBaD.js";
47
+ import { g as decideAgentAutonomousRedrive, r as coordinateSwarmSlots, y as listFeatureWorkspaces } from "./deacon-swarm-DwGUgSVp.js";
48
+ import { n as isExplicitNoResumeRequest, t as init_no_resume_mode } from "./no-resume-mode-DZvP0M_S.js";
49
+ import { r as init_in_flight_guard, t as createInFlightGuard } from "./in-flight-guard-nXEKoxI7.js";
50
+ import { r as reconcileClosedIssueAgents } from "./closed-issue-reaper-hLt0W86J.js";
51
+ import { t as recordDeadEndNeedsYou } from "./dead-end-trip-B06RFIr2.js";
52
+ import { a as spawnWorkAgentThroughAgentsEndpoint, i as reconcileOrphanProposedSpecs, o as triggerRebuildAndStart } from "./orphan-proposed-reconciler-DtQP6oE_.js";
53
+ import { n as reconcileIdleWorkspaceStacks } from "./idle-stack-reaper-DQFh8rDh.js";
54
+ import { i as readTestVerdictArtifact, n as decideUnsignaledTestAction, r as init_test_verdict } from "./test-verdict-Cy2jJGTe.js";
55
55
  import { createRequire } from "node:module";
56
56
  import { join } from "node:path";
57
57
  import { Effect } from "effect";
@@ -60,7 +60,7 @@ import { basename as basename$1, dirname as dirname$1, join as join$1 } from "pa
60
60
  import { cpus, loadavg } from "os";
61
61
  import { freemem as freemem$1, homedir as homedir$1, platform as platform$1, totalmem as totalmem$1 } from "node:os";
62
62
  import { closeSync as closeSync$1, existsSync as existsSync$1, openSync as openSync$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, unlinkSync as unlinkSync$1, writeFileSync as writeFileSync$1 } from "node:fs";
63
- import { readFile } from "node:fs/promises";
63
+ import { readFile, readdir, stat as stat$1 } from "node:fs/promises";
64
64
  import { readFile as readFile$1, readdir as readdir$1, writeFile as writeFile$1 } from "fs/promises";
65
65
  import { exec, execFile, execFileSync, spawn } from "node:child_process";
66
66
  import { promisify } from "node:util";
@@ -23211,7 +23211,7 @@ async function checkInspectAgentTimeouts(now = /* @__PURE__ */ new Date()) {
23211
23211
  console.warn(`[deacon] Failed to kill inspect session ${sessionName}: ${msg}`);
23212
23212
  });
23213
23213
  try {
23214
- const { messageAgent } = await import("./agents-ePFVoZbu.js");
23214
+ const { messageAgent } = await import("./agents-Dnn4XgdB.js");
23215
23215
  await messageAgent(`agent-${issueId.toLowerCase()}`, verdict, "deacon:inspect-watchdog");
23216
23216
  } catch (err) {
23217
23217
  const msg = err instanceof Error ? err.message : String(err);
@@ -23405,7 +23405,7 @@ async function maybeProactivelyCompactContext(sessionName, now) {
23405
23405
  if (!agentState?.workspace || !sessionId || !agentState.model) return null;
23406
23406
  let usage = null;
23407
23407
  try {
23408
- const { computeContextUsage } = await import("./conversation-service-D_TS2b1r.js");
23408
+ const { computeContextUsage } = await import("./conversation-service-CDnQ3ayN.js");
23409
23409
  usage = await computeContextUsage(sessionFilePath(agentState.workspace, sessionId), agentState.model);
23410
23410
  } catch {
23411
23411
  return null;
@@ -23504,9 +23504,9 @@ async function checkApiErrorAgents() {
23504
23504
  }
23505
23505
  if (!tmuxOutput.includes("❯")) continue;
23506
23506
  try {
23507
- const { maybeContinueCompactedAgent } = await import("./compaction-continuation-CvXpbZ4w.js");
23508
- const { findLastCompactBoundary } = await import("./conversation-service-D_TS2b1r.js");
23509
- const { deliverAgentMessage } = await import("./delivery-BX9HR4wQ.js");
23507
+ const { maybeContinueCompactedAgent } = await import("./compaction-continuation-DtMfHN0f.js");
23508
+ const { findLastCompactBoundary } = await import("./conversation-service-CDnQ3ayN.js");
23509
+ const { deliverAgentMessage } = await import("./delivery-C2M73sBg.js");
23510
23510
  const continued = await maybeContinueCompactedAgent({
23511
23511
  agentId: sessionName,
23512
23512
  tmuxOutput,
@@ -23557,13 +23557,13 @@ async function checkApiErrorAgents() {
23557
23557
  const st = getAgentStateSync(sessionName);
23558
23558
  const sid = st?.sessionId ?? runtimeState?.claudeSessionId;
23559
23559
  if (st?.workspace && sid && st.model) {
23560
- const { computeContextUsage } = await import("./conversation-service-D_TS2b1r.js");
23560
+ const { computeContextUsage } = await import("./conversation-service-CDnQ3ayN.js");
23561
23561
  const usage = await computeContextUsage(sessionFilePath(st.workspace, sid), st.model);
23562
23562
  if (usage && usage.percentUsed < 85) recoveredPct = usage.percentUsed;
23563
23563
  }
23564
23564
  } catch {}
23565
23565
  if (recoveredPct !== null) {
23566
- const { clearWorkspaceStuck } = await import("./review-status-sync-muT-EBp2.js");
23566
+ const { clearWorkspaceStuck } = await import("./review-status-sync-B0IS6Beh.js");
23567
23567
  clearWorkspaceStuck(issueId);
23568
23568
  stuckOverflowNativeRecoveryState.delete(sessionName);
23569
23569
  actions.push(`Context overflow recovery: cleared stuck flag for ${sessionName} (context back to ${Math.round(recoveredPct)}%)`);
@@ -23579,7 +23579,7 @@ async function checkApiErrorAgents() {
23579
23579
  rec.attempts += 1;
23580
23580
  rec.lastAttempt = now;
23581
23581
  stuckOverflowNativeRecoveryState.set(sessionName, rec);
23582
- const { resumeAgent } = await import("./agents-ePFVoZbu.js");
23582
+ const { resumeAgent } = await import("./agents-Dnn4XgdB.js");
23583
23583
  const recovered = await resumeAgent(sessionName, void 0, { compact: true });
23584
23584
  if (recovered.success) {
23585
23585
  stuckOverflowNativeRecoveryState.delete(sessionName);
@@ -23627,7 +23627,7 @@ async function checkApiErrorAgents() {
23627
23627
  }
23628
23628
  const compactAttempts = (ov?.compactAttempts ?? 0) + 1;
23629
23629
  if (issueId !== null) {
23630
- const { resumeAgent } = await import("./agents-ePFVoZbu.js");
23630
+ const { resumeAgent } = await import("./agents-Dnn4XgdB.js");
23631
23631
  const resumeResult = await resumeAgent(sessionName, void 0, { compact: true });
23632
23632
  contextOverflowRecoveryState.set(sessionName, {
23633
23633
  lastAttempt: now,
@@ -23746,7 +23746,7 @@ function isStuckMergingState(status, now) {
23746
23746
  }
23747
23747
  async function readSpecStatus(projectPath, issueId) {
23748
23748
  try {
23749
- const { findSpecByIssue } = await import("./specs--enInima.js");
23749
+ const { findSpecByIssue } = await import("./specs-DKV3jIEs.js");
23750
23750
  return (await Effect.runPromise(findSpecByIssue(projectPath, issueId)))?.status;
23751
23751
  } catch {
23752
23752
  return;
@@ -23828,7 +23828,7 @@ async function reconcileStuckMergingStates() {
23828
23828
  reviewGatesPassed: reviewGatesPassedSync,
23829
23829
  setReviewStatus: setReviewStatusSync,
23830
23830
  enqueuePostMerge: async (issueId, projectPath, branch) => {
23831
- const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-8HIeS_J6.js");
23831
+ const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-3u_rA4R0.js");
23832
23832
  return enqueuePostMergeLifecycle(issueId, projectPath, branch);
23833
23833
  },
23834
23834
  warn: (message) => console.warn(message)
@@ -24073,7 +24073,7 @@ async function reconcileStaleMergeStatus() {
24073
24073
  ].includes(status.mergeStatus ?? "") || ["merging", "failed"].includes(mergeSet?.status ?? "");
24074
24074
  let specStatus;
24075
24075
  try {
24076
- const { findSpecByIssue } = await import("./specs--enInima.js");
24076
+ const { findSpecByIssue } = await import("./specs-DKV3jIEs.js");
24077
24077
  const spec = await Effect.runPromise(findSpecByIssue(project.projectPath, issueId));
24078
24078
  specStatus = spec?.status;
24079
24079
  if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
@@ -24083,7 +24083,7 @@ async function reconcileStaleMergeStatus() {
24083
24083
  } catch {}
24084
24084
  const branch = `feature/${issueId.toLowerCase()}`;
24085
24085
  if (postMergeIncomplete) {
24086
- const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-8HIeS_J6.js");
24086
+ const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-3u_rA4R0.js");
24087
24087
  const action = enqueuePostMergeLifecycle(issueId, project.projectPath, branch);
24088
24088
  if (action) actions.push(action);
24089
24089
  continue;
@@ -24095,7 +24095,7 @@ async function reconcileStaleMergeStatus() {
24095
24095
  } catch {}
24096
24096
  if (!isMerged) isMerged = (await observeGitHubBranchMerge(issueId, branch, project.projectPath)).merged;
24097
24097
  if (shouldObserveForge && mergeRelevant) try {
24098
- const observation = await (await import("./merge-completeness-BLbB5-6n.js")).observeForgeMergeState(issueId);
24098
+ const observation = await (await import("./merge-completeness-CghMbyX7.js")).observeForgeMergeState(issueId);
24099
24099
  const blocker = observation.repos.find((repo) => repo.state === "unverifiable");
24100
24100
  if (blocker) {
24101
24101
  console.warn(`[deacon] ${issueId}: forge merge state is unverifiable — ${blocker.reason}`);
@@ -24122,7 +24122,7 @@ async function reconcileStaleMergeStatus() {
24122
24122
  const msg = `Reconciled stale mergeStatus for ${issueId} — branch ${branch} is merged to main`;
24123
24123
  actions.push(msg);
24124
24124
  console.log(`[deacon] ${msg}`);
24125
- const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-8HIeS_J6.js");
24125
+ const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-3u_rA4R0.js");
24126
24126
  const action = enqueuePostMergeLifecycle(issueId, project.projectPath, branch);
24127
24127
  if (action) actions.push(action);
24128
24128
  }
@@ -24145,7 +24145,7 @@ const falseMergedReset = /* @__PURE__ */ new Set();
24145
24145
  async function reconcileFalseMerged() {
24146
24146
  const actions = [];
24147
24147
  try {
24148
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-Bmg4R9mv.js");
24148
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-DIE8BkHI.js");
24149
24149
  if (!isGitHubAppConfigured()) return actions;
24150
24150
  const statuses = loadReviewStatuses();
24151
24151
  for (const [issueId, status] of Object.entries(statuses)) {
@@ -24190,7 +24190,7 @@ const CLOSED_PR_RECONCILE_COOLDOWN_MS = 600 * 1e3;
24190
24190
  async function reconcileClosedPrReadyForMerge() {
24191
24191
  const actions = [];
24192
24192
  try {
24193
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-Bmg4R9mv.js");
24193
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-DIE8BkHI.js");
24194
24194
  if (!isGitHubAppConfigured()) return actions;
24195
24195
  const statuses = loadReviewStatuses();
24196
24196
  const now = Date.now();
@@ -24262,7 +24262,7 @@ const STALE_MERGE_BLOCKER_COOLDOWN_MS = 120 * 1e3;
24262
24262
  async function reconcileStaleMergeBlockers() {
24263
24263
  const actions = [];
24264
24264
  try {
24265
- const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-CX80JYYS.js");
24265
+ const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-BSTlwCtF.js");
24266
24266
  const statuses = loadReviewStatuses();
24267
24267
  const now = Date.now();
24268
24268
  const deps = buildRealConflictGateDeps();
@@ -24405,7 +24405,7 @@ async function checkFailedMergeRetry() {
24405
24405
  if (ciEntry.count === 5) {
24406
24406
  console.log(`[deacon] CI check failure for ${issueId} — retries exhausted, notifying work agent`);
24407
24407
  const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
24408
- const { writeFeedbackFile } = await import("./feedback-writer-CoB9Z6aU.js");
24408
+ const { writeFeedbackFile } = await import("./feedback-writer-CY91ckuw.js");
24409
24409
  const ciFileResult = await Effect.runPromise(writeFeedbackFile({
24410
24410
  issueId,
24411
24411
  specialist: "merge-agent",
@@ -24437,7 +24437,7 @@ async function checkFailedMergeRetry() {
24437
24437
  ciRetryMap.set(issueId, ciEntry);
24438
24438
  console.log(`[deacon] CI check failure for ${issueId} — notifying agent to re-submit (attempt ${ciEntry.count}/5)`);
24439
24439
  const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
24440
- const { writeFeedbackFile } = await import("./feedback-writer-CoB9Z6aU.js");
24440
+ const { writeFeedbackFile } = await import("./feedback-writer-CY91ckuw.js");
24441
24441
  const ciFileResult2 = await Effect.runPromise(writeFeedbackFile({
24442
24442
  issueId,
24443
24443
  specialist: "merge-agent",
@@ -24465,7 +24465,7 @@ async function checkFailedMergeRetry() {
24465
24465
  const lastNudge = timeoutNudgeCooldowns.get(issueIdForFb);
24466
24466
  if (!lastNudge || now - lastNudge >= TIMEOUT_NUDGE_COOLDOWN_MS) {
24467
24467
  const timeoutNotes = status.mergeNotes;
24468
- const { writeFeedbackFile } = await import("./feedback-writer-CoB9Z6aU.js");
24468
+ const { writeFeedbackFile } = await import("./feedback-writer-CY91ckuw.js");
24469
24469
  await Effect.runPromise(writeFeedbackFile({
24470
24470
  issueId: issueIdForFb,
24471
24471
  specialist: "merge-agent",
@@ -24570,7 +24570,7 @@ async function autoCloseOut(now = /* @__PURE__ */ new Date()) {
24570
24570
  } } : {}
24571
24571
  };
24572
24572
  try {
24573
- const { closeOut } = await import("./workflows-DtDX08ed.js");
24573
+ const { closeOut } = await import("./workflows-DN6NyVGd.js");
24574
24574
  const result = await Effect.runPromise(closeOut(ctx));
24575
24575
  if (!result.success) {
24576
24576
  const failed = result.steps.find((step) => !step.success && !step.skipped);
@@ -24913,8 +24913,8 @@ async function checkPostReviewCommits() {
24913
24913
  if (!project) continue;
24914
24914
  const workspacePath = join$1(project.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
24915
24915
  if (!existsSync(workspacePath)) continue;
24916
- const { formatAnchorShort, rehydrateHeadAnchor } = await import("./git-utils-Xg4PFN45.js");
24917
- const { evaluateWorkspaceAnchorDrift } = await import("./workspace-anchor-drift-pwz23TI1.js");
24916
+ const { formatAnchorShort, rehydrateHeadAnchor } = await import("./git-utils-CedsVume.js");
24917
+ const { evaluateWorkspaceAnchorDrift } = await import("./workspace-anchor-drift-19cJ1bH5.js");
24918
24918
  const verdict = await evaluateWorkspaceAnchorDrift(issueId, workspacePath, rehydrateHeadAnchor(reviewedAnchor));
24919
24919
  if (verdict.kind === "unreadable" || verdict.kind === "current") {
24920
24920
  blockedReviewDriftObservations.delete(issueId);
@@ -24964,7 +24964,7 @@ async function checkPostReviewCommits() {
24964
24964
  actions.push(`Deferred post-review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
24965
24965
  logDeaconEventSync(`checkPostReviewCommits: deferred review for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
24966
24966
  } else if (freshStatus?.reviewStatus === "pending") {
24967
- const { spawnReviewRoleForIssue } = await import("./review-agent-BTCNkq2h.js");
24967
+ const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
24968
24968
  const branch = `feature/${issueId.toLowerCase()}`;
24969
24969
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
24970
24970
  issueId,
@@ -25345,7 +25345,7 @@ function reviewConvoyLiveness(issueId) {
25345
25345
  */
25346
25346
  async function recoverUnhealthyTestStack(issueId, workspacePath) {
25347
25347
  const key = issueId.toUpperCase();
25348
- const { getWorkspaceStackHealth } = await import("./stack-health-BikqHSjn.js");
25348
+ const { getWorkspaceStackHealth } = await import("./stack-health-CoWAhA99.js");
25349
25349
  const health = await Effect.runPromise(getWorkspaceStackHealth(issueId, { workspacePath }));
25350
25350
  if (health.healthy) {
25351
25351
  testStackRebuildState.delete(key);
@@ -25377,7 +25377,7 @@ async function recoverUnhealthyTestStack(issueId, workspacePath) {
25377
25377
  record.attempts += 1;
25378
25378
  testStackRebuildState.set(key, record);
25379
25379
  console.log(`[deacon] Test stack for ${key} unhealthy (${health.reasons.join("; ")}) — rebuilding (attempt ${record.attempts}/${TEST_STACK_REBUILD_MAX_ATTEMPTS})`);
25380
- const { rebuildWorkspaceStack } = await import("./rebuild-stack-DqcOVmJO.js");
25380
+ const { rebuildWorkspaceStack } = await import("./rebuild-stack-BKYpIPDL.js");
25381
25381
  const result = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[deacon] ${key} stack rebuild: ${m}`) }));
25382
25382
  if (!result.success) {
25383
25383
  console.warn(`[deacon] Test stack rebuild failed for ${key}: ${result.error}`);
@@ -25545,7 +25545,7 @@ async function handleReviewCoordinatorDied(issueId, _sessionName, _reason) {
25545
25545
  return actions;
25546
25546
  }
25547
25547
  try {
25548
- const { spawnReviewRoleForIssue } = await import("./review-agent-BTCNkq2h.js");
25548
+ const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
25549
25549
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
25550
25550
  issueId,
25551
25551
  workspace,
@@ -25620,7 +25620,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
25620
25620
  const issueLower = issueId.toLowerCase();
25621
25621
  const workspace = getAgentStateSync(`agent-${issueLower}`)?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
25622
25622
  if (workspace) try {
25623
- if ((options.readWorkspaceHead ? await options.readWorkspaceHead(workspace) : await (await import("./git-utils-Xg4PFN45.js")).snapshotWorkspaceHeadsPromise(issueId, workspace)) === status.lastVerifiedCommit) {
25623
+ if ((options.readWorkspaceHead ? await options.readWorkspaceHead(workspace) : await (await import("./git-utils-CedsVume.js")).snapshotWorkspaceHeadsPromise(issueId, workspace)) === status.lastVerifiedCommit) {
25624
25624
  setReviewStatusSync(issueId, {
25625
25625
  reviewStatus: "pending",
25626
25626
  reviewNotes: void 0
@@ -25642,7 +25642,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
25642
25642
  if (project) {
25643
25643
  const workspacePath = join$1(project.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
25644
25644
  if (existsSync(workspacePath)) {
25645
- const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-Xg4PFN45.js");
25645
+ const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-CedsVume.js");
25646
25646
  reviewUpdate["reviewedAtCommit"] = await snapshotWorkspaceHeadsPromise(issueId, workspacePath);
25647
25647
  }
25648
25648
  }
@@ -25697,7 +25697,7 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
25697
25697
  const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
25698
25698
  if (workspace && resolved && !tryReserveAdvancingSlot() && !await tryYieldForAdvancingDispatch("review", issueId)) actions.push(`Deferred review re-dispatch for ${issueId} — advancing-role concurrency ceiling reached`);
25699
25699
  else if (workspace && resolved) try {
25700
- const { spawnReviewRoleForIssue } = await import("./review-agent-BTCNkq2h.js");
25700
+ const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
25701
25701
  const dispatchResult = await Effect.runPromise(spawnReviewRoleForIssue({
25702
25702
  issueId,
25703
25703
  workspace,
@@ -25722,8 +25722,8 @@ async function reconcileReviewStatusOrphan(issueId, rawStatus, options = {}) {
25722
25722
  const workspace = agentState?.workspace || (resolved ? findWorkspacePath(resolved.projectPath, issueLower) : null);
25723
25723
  if (workspace && resolved) {
25724
25724
  const branch = `feature/${issueLower}`;
25725
- const { spawnRun } = await import("./agents-ePFVoZbu.js");
25726
- const { buildTestRolePrompt } = await import("./test-agent-queue-A_-p-i0I.js");
25725
+ const { spawnRun } = await import("./agents-Dnn4XgdB.js");
25726
+ const { buildTestRolePrompt } = await import("./test-agent-queue-DmSIqays.js");
25727
25727
  const stackRecovery = await recoverUnhealthyTestStack(issueId, workspace);
25728
25728
  if (stackRecovery === "cooldown" || stackRecovery === "exhausted") {
25729
25729
  setReviewStatusSync(issueId, { testStatus: "dispatch_failed" });
@@ -25862,7 +25862,7 @@ async function recoverStalledReviewConvoys(getCanonicalState = getAutoCloseOutCa
25862
25862
  record.lastAttempt = now;
25863
25863
  record.attempts += 1;
25864
25864
  stalledReviewConvoyRecoveryState.set(key, record);
25865
- const { spawnReviewRoleForIssue } = await import("./review-agent-BTCNkq2h.js");
25865
+ const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
25866
25866
  try {
25867
25867
  const result = await Effect.runPromise(spawnReviewRoleForIssue({
25868
25868
  issueId,
@@ -25933,7 +25933,7 @@ async function checkMissingReviewStatuses() {
25933
25933
  continue;
25934
25934
  }
25935
25935
  try {
25936
- const { spawnReviewRoleForIssue } = await import("./review-agent-BTCNkq2h.js");
25936
+ const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
25937
25937
  await Effect.runPromise(spawnReviewRoleForIssue({
25938
25938
  issueId,
25939
25939
  workspace,
@@ -25961,11 +25961,14 @@ async function checkMissingReviewStatuses() {
25961
25961
  //#endregion
25962
25962
  //#region ../../lib/cloister/deacon-review-unsignaled.ts
25963
25963
  init_agents$1();
25964
+ init_activity_logger();
25964
25965
  init_projects();
25965
25966
  init_review_status();
25966
25967
  init_specialists();
25967
25968
  init_tmux();
25968
25969
  init_review_convoy_liveness();
25970
+ init_review_verdict_feedback();
25971
+ init_review_verdict_report();
25969
25972
  /**
25970
25973
  * Detect issues stuck in `reviewing` status with no active review session.
25971
25974
  *
@@ -25984,7 +25987,7 @@ async function checkStuckReviewing() {
25984
25987
  const actions = [];
25985
25988
  const REVIEW_STUCK_THRESHOLD_MS = 1800 * 1e3;
25986
25989
  try {
25987
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-Dma9SFaN.js");
25990
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-CacDM78F.js");
25988
25991
  const statuses = loadReviewStatuses();
25989
25992
  const now = Date.now();
25990
25993
  const activeReviewIssues = /* @__PURE__ */ new Set();
@@ -26042,25 +26045,183 @@ async function checkStuckReviewing() {
26042
26045
  * - Only nudges once per review cycle (tracked by runId in the review dir)
26043
26046
  */
26044
26047
  const unsignaledReviewNudges = /* @__PURE__ */ new Map();
26045
- function isSynthesisForActiveReviewRun(dirPath, status, synthesisMtimeMs) {
26048
+ const pendingVerdictNudges = /* @__PURE__ */ new Map();
26049
+ function reviewAnchorFromContext(context) {
26050
+ if (context.repos) {
26051
+ if (context.repos.length === 0) return void 0;
26052
+ const heads = [];
26053
+ for (const repo of context.repos) {
26054
+ if (!repo.repoKey?.trim() || !repo.headSha?.trim()) return void 0;
26055
+ heads.push(`${repo.repoKey.trim()}@${repo.headSha.trim()}`);
26056
+ }
26057
+ return heads.join(" ");
26058
+ }
26059
+ return context.headSha?.trim() || void 0;
26060
+ }
26061
+ function shellQuote(value) {
26062
+ return `'${value.replaceAll("'", "'\\''")}'`;
26063
+ }
26064
+ function buildReviewCompletionCommand(issueId, verdict, notes, runId) {
26065
+ let command = `pan admin specialists done review ${shellQuote(issueId)} --status ${shellQuote(verdict)}`;
26066
+ if (verdict === "blocked" || verdict === "failed") command += ` --notes ${shellQuote(notes)}`;
26067
+ return `${command} --run-id ${shellQuote(runId)}`;
26068
+ }
26069
+ function isReviewContextForActiveRun(context, status, reportMtimeMs) {
26046
26070
  if (!status.reviewSpawnedAt) return true;
26047
26071
  const spawnedAtMs = reviewTimestampMs(status.reviewSpawnedAt);
26048
26072
  if (!Number.isFinite(spawnedAtMs)) return true;
26049
- if (synthesisMtimeMs < spawnedAtMs) return false;
26073
+ if (reportMtimeMs < spawnedAtMs) return false;
26074
+ if (context.generatedAt) {
26075
+ const generatedAtMs = Date.parse(context.generatedAt);
26076
+ if (Number.isFinite(generatedAtMs) && generatedAtMs < spawnedAtMs) return false;
26077
+ }
26078
+ const reviewedAnchor = reviewAnchorFromContext(context);
26079
+ return !status.lastVerifiedCommit || !reviewedAnchor || reviewedAnchor === status.lastVerifiedCommit;
26080
+ }
26081
+ function isSynthesisForActiveReviewRun(dirPath, status, synthesisMtimeMs) {
26082
+ if (!status.reviewSpawnedAt) return true;
26050
26083
  const contextPath = join$1(dirPath, "context.json");
26051
26084
  if (!existsSync(contextPath)) return false;
26052
- let context;
26053
26085
  try {
26054
- context = JSON.parse(readFileSync(contextPath, "utf8"));
26086
+ return isReviewContextForActiveRun(JSON.parse(readFileSync(contextPath, "utf8")), status, synthesisMtimeMs);
26055
26087
  } catch {
26056
26088
  return false;
26057
26089
  }
26058
- if (context.generatedAt) {
26059
- const generatedAtMs = Date.parse(context.generatedAt);
26060
- if (Number.isFinite(generatedAtMs) && generatedAtMs < spawnedAtMs) return false;
26090
+ }
26091
+ /**
26092
+ * Apply settled review verdicts that reached disk after their runtime status
26093
+ * was reset to pending. The live review parent gets one chance to signal the
26094
+ * verdict itself; a dead parent, or one still unsignaled after 30 minutes, is
26095
+ * reconciled directly through the review-status and feedback write doors.
26096
+ */
26097
+ async function reconcileUnappliedReviewVerdicts() {
26098
+ const actions = [];
26099
+ const VERDICT_SETTLE_MS = 300 * 1e3;
26100
+ const NUDGE_GRACE_MS = 1800 * 1e3;
26101
+ try {
26102
+ const statuses = loadReviewStatuses();
26103
+ const now = Date.now();
26104
+ for (const [issueId, status] of Object.entries(statuses)) {
26105
+ if (status.reviewStatus !== "pending" || !status.reviewSpawnedAt) continue;
26106
+ try {
26107
+ const resolved = resolveProjectFromIssueSync(issueId);
26108
+ if (!resolved) continue;
26109
+ const wsPath = findWorkspacePath(resolved.projectPath, issueId.toLowerCase());
26110
+ if (!wsPath) continue;
26111
+ const reviewBaseDir = join$1(wsPath, ".pan", "review");
26112
+ let reviewEntries;
26113
+ try {
26114
+ reviewEntries = await readdir(reviewBaseDir);
26115
+ } catch {
26116
+ continue;
26117
+ }
26118
+ let latestDir = null;
26119
+ let latestReport = null;
26120
+ let latestContext = null;
26121
+ let latestMtime = 0;
26122
+ for (const entry of reviewEntries) {
26123
+ if (!entry.startsWith(`agent-${issueId.toLowerCase()}-review`)) continue;
26124
+ const dirPath = join$1(reviewBaseDir, entry);
26125
+ try {
26126
+ const report = await findVerdictReportAsync(dirPath);
26127
+ if (!report) continue;
26128
+ const [reportStat, contextContent] = await Promise.all([stat$1(report.path), readFile(join$1(dirPath, "context.json"), "utf8")]);
26129
+ const context = JSON.parse(contextContent);
26130
+ if (!isReviewContextForActiveRun(context, status, reportStat.mtimeMs)) continue;
26131
+ if (reportStat.mtimeMs > latestMtime) {
26132
+ latestDir = dirPath;
26133
+ latestReport = report;
26134
+ latestContext = context;
26135
+ latestMtime = reportStat.mtimeMs;
26136
+ }
26137
+ } catch (error) {
26138
+ const msg = error instanceof Error ? error.message : String(error);
26139
+ console.error(`[deacon] Error reading review run ${dirPath}:`, msg);
26140
+ }
26141
+ }
26142
+ if (!latestDir || !latestReport || !latestContext) continue;
26143
+ if (now - latestMtime < VERDICT_SETTLE_MS) continue;
26144
+ const requestedAtMs = status.reviewRequestedAt ? Date.parse(status.reviewRequestedAt) : NaN;
26145
+ if (Number.isFinite(requestedAtMs) && requestedAtMs > latestMtime) continue;
26146
+ let currentHead;
26147
+ let reviewedHead;
26148
+ try {
26149
+ const { rehydrateHeadAnchor, snapshotWorkspaceHeadsPromise } = await import("./git-utils-CedsVume.js");
26150
+ currentHead = await snapshotWorkspaceHeadsPromise(issueId, wsPath);
26151
+ const persistedAnchor = reviewAnchorFromContext(latestContext);
26152
+ reviewedHead = persistedAnchor ? rehydrateHeadAnchor(persistedAnchor) : void 0;
26153
+ } catch {
26154
+ continue;
26155
+ }
26156
+ if (!reviewedHead || currentHead !== reviewedHead) continue;
26157
+ let parsed;
26158
+ try {
26159
+ parsed = parseVerdictReport(await readFile(latestReport.path, "utf8"));
26160
+ } catch {
26161
+ continue;
26162
+ }
26163
+ if (!parsed) continue;
26164
+ const reviewSession = `agent-${issueId.toLowerCase()}-review`;
26165
+ const sessionAlive = sessionExistsSync(reviewSession);
26166
+ const paneDead = sessionAlive ? await Effect.runPromise(isPaneDead(reviewSession)).catch(() => true) : true;
26167
+ if (sessionAlive && !paneDead) {
26168
+ const lastNudged = pendingVerdictNudges.get(latestDir);
26169
+ if (!lastNudged) {
26170
+ const notes = parsed.topBlocker || `See ${latestReport.filename}`;
26171
+ const nudge = `Your review verdict is already written on disk but review status is still pending. Your ONLY remaining task is to execute this Bash command immediately — do not analyze, do not summarize, do not ask questions, just run it:\n\n${buildReviewCompletionCommand(issueId, parsed.verdict, notes, basename$1(latestDir))}\n\nRun this command NOW. Do not write any other response before executing it.`;
26172
+ try {
26173
+ const { messageAgent } = await import("./agents-Dnn4XgdB.js");
26174
+ await messageAgent(reviewSession, nudge);
26175
+ pendingVerdictNudges.set(latestDir, now);
26176
+ const action = `Nudged ${reviewSession} to apply pending ${parsed.verdict} verdict from ${latestReport.filename}`;
26177
+ actions.push(action);
26178
+ console.log(`[deacon] ${action}`);
26179
+ } catch (err) {
26180
+ console.error(`[deacon] Failed to nudge ${reviewSession}:`, err instanceof Error ? err.message : String(err));
26181
+ }
26182
+ continue;
26183
+ }
26184
+ if (now - lastNudged < NUDGE_GRACE_MS) continue;
26185
+ }
26186
+ const attribution = `applied by deacon sweep from on-disk ${latestReport.filename}`;
26187
+ const reviewNotes = parsed.topBlocker ? `${parsed.topBlocker} — ${attribution}` : `Review ${parsed.verdict} ${attribution}`;
26188
+ setReviewStatusSync(issueId, {
26189
+ reviewStatus: parsed.verdict,
26190
+ reviewNotes,
26191
+ ...(parsed.verdict === "passed" || parsed.verdict === "blocked") && currentHead ? { reviewedAtCommit: currentHead } : {}
26192
+ });
26193
+ if (parsed.verdict === "blocked") try {
26194
+ await Effect.runPromise(deliverReviewVerdictFeedback({
26195
+ issueId,
26196
+ verdict: "blocked",
26197
+ notes: parsed.topBlocker || reviewNotes,
26198
+ workspacePath: wsPath,
26199
+ prUrl: status.prUrl,
26200
+ runId: basename$1(latestDir)
26201
+ }));
26202
+ } catch (err) {
26203
+ console.error(`[deacon] Failed to deliver reconciled review verdict for ${issueId}:`, err instanceof Error ? err.message : String(err));
26204
+ }
26205
+ pendingVerdictNudges.delete(latestDir);
26206
+ const action = `reconcileUnappliedReviewVerdicts deacon sweep applied ${parsed.verdict} for ${issueId} from ${latestReport.filename}`;
26207
+ actions.push(action);
26208
+ emitActivityEntrySync({
26209
+ source: "cloister",
26210
+ level: "warn",
26211
+ message: action,
26212
+ issueId
26213
+ });
26214
+ console.log(`[deacon] ${action}`);
26215
+ } catch (error) {
26216
+ const msg = error instanceof Error ? error.message : String(error);
26217
+ console.error(`[deacon] Error reconciling unapplied review verdict for ${issueId}:`, msg);
26218
+ }
26219
+ }
26220
+ } catch (error) {
26221
+ const msg = error instanceof Error ? error.message : String(error);
26222
+ console.error("[deacon] Error reconciling unapplied review verdicts:", msg);
26061
26223
  }
26062
- if (status.lastVerifiedCommit && context.headSha && context.headSha !== status.lastVerifiedCommit) return false;
26063
- return true;
26224
+ return actions;
26064
26225
  }
26065
26226
  async function checkCompletedButUnsignaledReviews() {
26066
26227
  const actions = [];
@@ -26077,20 +26238,22 @@ async function checkCompletedButUnsignaledReviews() {
26077
26238
  const reviewBaseDir = join$1(wsPath, ".pan", "review");
26078
26239
  if (!existsSync(reviewBaseDir)) continue;
26079
26240
  let latestDir = null;
26241
+ let latestReport = null;
26080
26242
  let latestMtime = 0;
26081
26243
  for (const entry of readdirSync(reviewBaseDir)) {
26082
26244
  if (!entry.startsWith(`agent-${issueId.toLowerCase()}-review`)) continue;
26083
26245
  const dirPath = join$1(reviewBaseDir, entry);
26084
- const synthPath = join$1(dirPath, "synthesis.md");
26085
- if (!existsSync(synthPath)) continue;
26086
- const mtime = statSync(synthPath).mtimeMs;
26246
+ const report = findVerdictReport(dirPath);
26247
+ if (!report) continue;
26248
+ const mtime = statSync(report.path).mtimeMs;
26087
26249
  if (!isSynthesisForActiveReviewRun(dirPath, status, mtime)) continue;
26088
26250
  if (mtime > latestMtime) {
26089
26251
  latestMtime = mtime;
26090
26252
  latestDir = dirPath;
26253
+ latestReport = report;
26091
26254
  }
26092
26255
  }
26093
- if (!latestDir) continue;
26256
+ if (!latestDir || !latestReport) continue;
26094
26257
  if (now - latestMtime < SYNTHESIS_SETTLE_MS) continue;
26095
26258
  const lastNudged = unsignaledReviewNudges.get(latestDir);
26096
26259
  if (lastNudged && now - lastNudged < 1800 * 1e3) continue;
@@ -26099,40 +26262,31 @@ async function checkCompletedButUnsignaledReviews() {
26099
26262
  const paneDead = sessionAlive ? await Effect.runPromise(isPaneDead(reviewSession)).catch(() => true) : true;
26100
26263
  const activeReviewState = sessionAlive && !paneDead ? getAgentStateSync(reviewSession) : null;
26101
26264
  if (activeReviewState?.reviewRunId && latestDir !== join$1(reviewBaseDir, activeReviewState.reviewRunId)) continue;
26102
- const synthesisPath = join$1(latestDir, "synthesis.md");
26103
- let verdict = null;
26104
- let topBlocker = "";
26265
+ let parsed;
26105
26266
  try {
26106
- const content = readFileSync(synthesisPath, "utf8");
26107
- const verdictLine = content.match(/## Verdict:\s*(.+)/i);
26108
- if (verdictLine) {
26109
- const v = verdictLine[1].trim().toUpperCase();
26110
- if (v === "PASSED") verdict = "passed";
26111
- else if (v === "CHANGES REQUESTED") verdict = "blocked";
26112
- else if (v === "FAILED") verdict = "failed";
26113
- }
26114
- const blockerMatch = content.match(/## Blocking Findings\s*\n\s*###\s*\[[^\]]+\]\s*(.+)/);
26115
- if (blockerMatch) topBlocker = blockerMatch[1].slice(0, 120);
26267
+ parsed = parseVerdictReport(readFileSync(latestReport.path, "utf8"));
26116
26268
  } catch {
26117
26269
  continue;
26118
26270
  }
26119
- if (!verdict) continue;
26271
+ if (!parsed) continue;
26272
+ const { verdict, topBlocker } = parsed;
26120
26273
  if (sessionAlive && !paneDead) {
26121
26274
  if (lastNudged) {
26122
26275
  setReviewStatusSync(issueId, {
26123
26276
  reviewStatus: verdict,
26124
- reviewNotes: topBlocker || `Review auto-completed by deacon: ${verdict} (agent alive but unresponsive after nudge, synthesis exists)`
26277
+ reviewNotes: topBlocker || `Review auto-completed by deacon: ${verdict} (agent alive but unresponsive after nudge, ${latestReport.filename} exists)`
26125
26278
  });
26126
- actions.push(`Auto-completed review for ${issueId}: ${verdict} (alive but unresponsive after nudge, synthesis written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
26279
+ actions.push(`Auto-completed review for ${issueId}: ${verdict} (alive but unresponsive after nudge, ${latestReport.filename} written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
26127
26280
  console.log(`[deacon] Auto-completed review for ${issueId}: ${verdict} (alive but unresponsive after nudge)`);
26128
26281
  continue;
26129
26282
  }
26130
- const nudge = `Your review synthesis is already written and saved. Your ONLY remaining task is to execute this Bash command immediately — do not analyze, do not summarize, do not ask questions, just run it:\n\n${`pan admin specialists done review ${issueId} --status ${verdict}${verdict === "blocked" || verdict === "failed" ? ` --notes "${topBlocker || "See synthesis.md"}"` : ""} --run-id "${basename$1(latestDir)}"`}\n\nRun this command NOW. Do not write any other response before executing it.`;
26283
+ const cmd = buildReviewCompletionCommand(issueId, verdict, topBlocker || `See ${latestReport.filename}`, basename$1(latestDir));
26284
+ const nudge = `Your review verdict in ${latestReport.filename} is already written and saved. Your ONLY remaining task is to execute this Bash command immediately — do not analyze, do not summarize, do not ask questions, just run it:\n\n${cmd}\n\nRun this command NOW. Do not write any other response before executing it.`;
26131
26285
  try {
26132
- const { messageAgent } = await import("./agents-ePFVoZbu.js");
26286
+ const { messageAgent } = await import("./agents-Dnn4XgdB.js");
26133
26287
  await messageAgent(reviewSession, nudge);
26134
26288
  unsignaledReviewNudges.set(latestDir, now);
26135
- actions.push(`Nudged ${reviewSession} to signal ${verdict} (synthesis written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
26289
+ actions.push(`Nudged ${reviewSession} to signal ${verdict} (${latestReport.filename} written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
26136
26290
  console.log(`[deacon] Nudged ${reviewSession} to signal ${verdict}`);
26137
26291
  } catch (err) {
26138
26292
  console.error(`[deacon] Failed to nudge ${reviewSession}:`, err instanceof Error ? err.message : String(err));
@@ -26140,9 +26294,9 @@ async function checkCompletedButUnsignaledReviews() {
26140
26294
  } else {
26141
26295
  setReviewStatusSync(issueId, {
26142
26296
  reviewStatus: verdict,
26143
- reviewNotes: topBlocker || `Review auto-completed by deacon: ${verdict} (agent dead, synthesis exists)`
26297
+ reviewNotes: topBlocker || `Review auto-completed by deacon: ${verdict} (agent dead, ${latestReport.filename} exists)`
26144
26298
  });
26145
- actions.push(`Auto-completed review for ${issueId}: ${verdict} (dead agent, synthesis written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
26299
+ actions.push(`Auto-completed review for ${issueId}: ${verdict} (dead agent, ${latestReport.filename} written ${Math.round((now - latestMtime) / 6e4)}min ago)`);
26146
26300
  console.log(`[deacon] Auto-completed review for ${issueId}: ${verdict} (dead agent)`);
26147
26301
  }
26148
26302
  }
@@ -26157,6 +26311,7 @@ async function checkCompletedButUnsignaledReviews() {
26157
26311
  init_context_overflow();
26158
26312
  init_agents$1();
26159
26313
  init_review_verdict_feedback();
26314
+ init_review_verdict_report();
26160
26315
  init_paths();
26161
26316
  init_review_status();
26162
26317
  init_persistent_logger();
@@ -26238,7 +26393,7 @@ async function respawnIdleReviewer(state, agentId) {
26238
26393
  return false;
26239
26394
  }
26240
26395
  try {
26241
- const { spawnReviewSubRoleForIssue } = await import("./review-agent-BTCNkq2h.js");
26396
+ const { spawnReviewSubRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
26242
26397
  const contextManifestPath = join$1(dirname$1(outputPath), "context.json");
26243
26398
  const result = await Effect.runPromise(spawnReviewSubRoleForIssue({
26244
26399
  issueId: state.issueId,
@@ -26276,7 +26431,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
26276
26431
  const status = getReviewStatusSync(state.issueId);
26277
26432
  if (!status || status.reviewStatus !== "reviewing") continue;
26278
26433
  const reviewDir = join$1(state.workspace, ".pan", "review", state.reviewRunId);
26279
- const synthesisAlreadyWritten = existsSync(join$1(reviewDir, "synthesis.md"));
26434
+ const synthesisAlreadyWritten = findVerdictReport(reviewDir) !== null;
26280
26435
  const startedMs = Date.parse(state.startedAt);
26281
26436
  const readyLines = [];
26282
26437
  const reports = [];
@@ -26324,7 +26479,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
26324
26479
  writeFileSync(join$1(reviewDir, "synthesis.md"), synthesis.body);
26325
26480
  let fallbackHead;
26326
26481
  try {
26327
- const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-Xg4PFN45.js");
26482
+ const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-CedsVume.js");
26328
26483
  fallbackHead = await snapshotWorkspaceHeadsPromise(state.issueId, state.workspace);
26329
26484
  } catch {}
26330
26485
  const anchoredVerdicts = Object.fromEntries(Object.entries(synthesis.reviewerVerdicts).map(([subRole, v]) => [subRole, {
@@ -26363,7 +26518,7 @@ async function nudgeSynthesisForCompleteReviewerReports(states) {
26363
26518
  "Read the four reports, write synthesis.md, then signal review status exactly as roles/review.md instructs."
26364
26519
  ].join("\n");
26365
26520
  try {
26366
- const { messageAgent } = await import("./agents-ePFVoZbu.js");
26521
+ const { messageAgent } = await import("./agents-Dnn4XgdB.js");
26367
26522
  await messageAgent(state.id, message);
26368
26523
  reviewReportsPresentNudges.set(nudgeKey, now);
26369
26524
  const action = `Nudged ${state.id} to synthesize from ${REVIEW_SUB_ROLES.length} reviewer reports`;
@@ -26449,7 +26604,7 @@ async function monitorReviewConvoySignals() {
26449
26604
  if (!signal) continue;
26450
26605
  const message = signal === "ready" ? `REVIEWER_READY ${state.reviewSubRole} ${outputPath}` : signal === "timeout" ? `REVIEWER_TIMEOUT ${state.reviewSubRole} ${reason}` : `REVIEWER_FAILED ${state.reviewSubRole} ${reason}`;
26451
26606
  try {
26452
- const { messageAgent } = await import("./agents-ePFVoZbu.js");
26607
+ const { messageAgent } = await import("./agents-Dnn4XgdB.js");
26453
26608
  await messageAgent(state.reviewSynthesisAgentId, message);
26454
26609
  state.reviewMonitorSignaled = signal;
26455
26610
  saveAgentStateSync(state);
@@ -26457,7 +26612,7 @@ async function monitorReviewConvoySignals() {
26457
26612
  actions.push(action);
26458
26613
  logDeaconEventSync(`monitorReviewConvoySignals: ${action}`);
26459
26614
  if (signal === "ready") try {
26460
- const { notifyPipelineSync } = await import("./pipeline-notifier-DT6xLFao.js");
26615
+ const { notifyPipelineSync } = await import("./pipeline-notifier-BmwrVKsO.js");
26461
26616
  notifyPipelineSync({
26462
26617
  type: "reviewer_completed",
26463
26618
  issueId: state.issueId,
@@ -26465,7 +26620,7 @@ async function monitorReviewConvoySignals() {
26465
26620
  });
26466
26621
  } catch {}
26467
26622
  else if (signal === "timeout") try {
26468
- const { notifyPipelineSync } = await import("./pipeline-notifier-DT6xLFao.js");
26623
+ const { notifyPipelineSync } = await import("./pipeline-notifier-BmwrVKsO.js");
26469
26624
  notifyPipelineSync({
26470
26625
  type: "reviewer_timed_out",
26471
26626
  issueId: state.issueId,
@@ -26565,7 +26720,7 @@ const FORK_CACHE_CHECK_DELAY_MS = 180 * 1e3;
26565
26720
  async function checkStalledReviewDiscovery() {
26566
26721
  const actions = [];
26567
26722
  try {
26568
- const { listAgentStates } = await import("./agents-ePFVoZbu.js");
26723
+ const { listAgentStates } = await import("./agents-Dnn4XgdB.js");
26569
26724
  const states = listAgentStates();
26570
26725
  const now = Date.now();
26571
26726
  for (const state of states) {
@@ -26574,7 +26729,7 @@ async function checkStalledReviewDiscovery() {
26574
26729
  const aged = Number.isFinite(startedMs) && now - startedMs > 48e4;
26575
26730
  const dead = !await Effect.runPromise(sessionExists(state.id)).catch(() => false) || await Effect.runPromise(isPaneDead(state.id)).catch(() => true);
26576
26731
  if (!aged && !dead) continue;
26577
- const { handleReviewDiscoveryReady } = await import("./review-agent-BTCNkq2h.js");
26732
+ const { handleReviewDiscoveryReady } = await import("./review-agent-UpAM4DmT.js");
26578
26733
  const result = await handleReviewDiscoveryReady(state.issueId, { source: dead ? "deacon-backstop (parent dead)" : "deacon-backstop (discovery timeout)" });
26579
26734
  actions.push(result.message);
26580
26735
  logDeaconEventSync(`checkStalledReviewDiscovery: ${result.message}`);
@@ -26597,8 +26752,8 @@ async function checkStalledReviewDiscovery() {
26597
26752
  async function checkStalledReviewParents() {
26598
26753
  const actions = [];
26599
26754
  try {
26600
- const { listAgentStates, markAgentStoppedState } = await import("./agents-ePFVoZbu.js");
26601
- const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-BTCNkq2h.js");
26755
+ const { listAgentStates, markAgentStoppedState } = await import("./agents-Dnn4XgdB.js");
26756
+ const { PARENT_REVIEW_TIMEOUT_MS } = await import("./review-agent-UpAM4DmT.js");
26602
26757
  const states = listAgentStates();
26603
26758
  const now = Date.now();
26604
26759
  for (const state of states) {
@@ -26647,8 +26802,8 @@ async function checkStalledReviewParents() {
26647
26802
  async function checkReviewForkCacheMisses() {
26648
26803
  const actions = [];
26649
26804
  try {
26650
- const { listAgentStates, saveAgentState } = await import("./agents-ePFVoZbu.js");
26651
- const { readEventsSync } = await import("./events-CF8QDbuV.js");
26805
+ const { listAgentStates, saveAgentState } = await import("./agents-Dnn4XgdB.js");
26806
+ const { readEventsSync } = await import("./events-ChEFB7Jp.js");
26652
26807
  const { emitActivityEntrySync } = await import("./activity-logger-CMthG6Vd.js");
26653
26808
  const states = listAgentStates();
26654
26809
  const now = Date.now();
@@ -27511,7 +27666,7 @@ async function nudgeStalledResumeWorkAgents() {
27511
27666
  const message = buildStalledResumePrompt(state);
27512
27667
  if (!message) continue;
27513
27668
  try {
27514
- const { messageAgent } = await import("./agents-ePFVoZbu.js");
27669
+ const { messageAgent } = await import("./agents-Dnn4XgdB.js");
27515
27670
  await messageAgent(agentId, message);
27516
27671
  recordCooldown(agentId, ".last-stalled-resume-nudge");
27517
27672
  const action = `Re-sent stalled resume prompt to ${agentId} (${state.issueId})`;
@@ -27625,7 +27780,7 @@ async function nudgeIdleWorkAgentsWithOpenBeads() {
27625
27780
  "Continue the per-item workflow without asking — claim it (`pan task claim <item-id>`), implement, commit, push, then complete it through `pan task done <item-id>`. Inspection is conditional on metadata.requiresInspection (default false; check the plan item before deciding to call `pan inspect`). Do NOT end your turn with a multi-paragraph summary; just advance to the next bead."
27626
27781
  ].join("\n");
27627
27782
  try {
27628
- const { messageAgent } = await import("./agents-ePFVoZbu.js");
27783
+ const { messageAgent } = await import("./agents-Dnn4XgdB.js");
27629
27784
  await messageAgent(agentId, message);
27630
27785
  writeFileSync(join$1(getAgentDir(agentId), ".last-bead-nudge"), String(Date.now()), "utf-8");
27631
27786
  const action = `Nudged idle ${agentId} (${state.issueId}) — ${openTasks.length} ready task(s)`;
@@ -28843,8 +28998,8 @@ async function cleanupStaleAgentState() {
28843
28998
  */
28844
28999
  async function cleanupAbandonedFeedback() {
28845
29000
  const actions = [];
28846
- const { getReviewStatusSync } = await import("./review-status-Dma9SFaN.js");
28847
- const { clearFeedbackFiles } = await import("./feedback-writer-CoB9Z6aU.js");
29001
+ const { getReviewStatusSync } = await import("./review-status-CacDM78F.js");
29002
+ const { clearFeedbackFiles } = await import("./feedback-writer-CY91ckuw.js");
28848
29003
  for (const { issueId, workspacePath } of listFeatureWorkspaces()) {
28849
29004
  const panFeedbackDir = join$1(workspacePath, ".pan", "feedback");
28850
29005
  if (!existsSync(panFeedbackDir)) continue;
@@ -28915,7 +29070,7 @@ async function handleOrphanReviewerSession(sessionName, sessions, creationTimes,
28915
29070
  if (!issueId) return null;
28916
29071
  const agentSession = `agent-${issueId.toLowerCase()}`;
28917
29072
  if (sessions.includes(agentSession)) return null;
28918
- const { getReviewStatusSync } = await import("./review-status-Dma9SFaN.js");
29073
+ const { getReviewStatusSync } = await import("./review-status-CacDM78F.js");
28919
29074
  try {
28920
29075
  if (getReviewStatusSync(issueId)?.reviewStatus === "reviewing") return null;
28921
29076
  } catch {}
@@ -29037,7 +29192,7 @@ async function checkOrphanedCompletions() {
29037
29192
  async function checkPendingTestDispatch() {
29038
29193
  const actions = [];
29039
29194
  try {
29040
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-Dma9SFaN.js");
29195
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-CacDM78F.js");
29041
29196
  const statuses = loadReviewStatuses();
29042
29197
  const now = Date.now();
29043
29198
  for (const [issueId, status] of Object.entries(statuses)) {
@@ -29085,8 +29240,8 @@ async function checkPendingTestDispatch() {
29085
29240
  logDeaconEventSync(`checkPendingTestDispatch: deferred test for ${issueId} — advancing ceiling reached (PAN-1665) — ${describeRunningAgents()}`);
29086
29241
  continue;
29087
29242
  }
29088
- const { spawnRun } = await import("./agents-ePFVoZbu.js");
29089
- const { buildTestRolePrompt } = await import("./test-agent-queue-A_-p-i0I.js");
29243
+ const { spawnRun } = await import("./agents-Dnn4XgdB.js");
29244
+ const { buildTestRolePrompt } = await import("./test-agent-queue-DmSIqays.js");
29090
29245
  try {
29091
29246
  const run = await spawnRun(issueId, "test", {
29092
29247
  workspace,
@@ -29210,7 +29365,7 @@ async function checkCompletedButUnsignaledTests() {
29210
29365
  const cmd = `pan admin specialists done test ${issueId} --status ${decision.status}${noteArg}`;
29211
29366
  const nudge = `Your test verdict (${decision.status}) is already written to .pan/test/result.json. Your ONLY remaining task is to execute this Bash command immediately — do not analyze, do not summarize, do not ask questions, just run it:\n\n${cmd}\n\nRun this command NOW. Do not write any other response before executing it.`;
29212
29367
  try {
29213
- const { messageAgent } = await import("./agents-ePFVoZbu.js");
29368
+ const { messageAgent } = await import("./agents-Dnn4XgdB.js");
29214
29369
  await messageAgent(testSession, nudge);
29215
29370
  unsignaledTestNudges.set(testSession, now);
29216
29371
  const msg = `Nudged ${testSession} to signal ${decision.status} (verdict artifact present)`;
@@ -29224,7 +29379,7 @@ async function checkCompletedButUnsignaledTests() {
29224
29379
  case "nudge-write": {
29225
29380
  const nudge = `Your test run for ${issueId} looks finished but no verdict was recorded. Decide the verdict from the gates/UAT you ran, then do BOTH of these now: (1) write the workspace file .pan/test/result.json as {"status":"passed"|"failed","notes":"<evidence>"}, and (2) run: pan admin specialists done test ${issueId} --status passed|failed. Do this immediately — do not summarize or ask questions, just write the file and run the command.`;
29226
29381
  try {
29227
- const { messageAgent } = await import("./agents-ePFVoZbu.js");
29382
+ const { messageAgent } = await import("./agents-Dnn4XgdB.js");
29228
29383
  await messageAgent(testSession, nudge);
29229
29384
  unsignaledTestNudges.set(testSession, now);
29230
29385
  const msg = `Nudged ${testSession} to write+signal a test verdict (no artifact yet)`;
@@ -29247,7 +29402,7 @@ async function checkCompletedButUnsignaledTests() {
29247
29402
  async function checkVerificationReviewContradiction() {
29248
29403
  const actions = [];
29249
29404
  try {
29250
- const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-Dma9SFaN.js");
29405
+ const { loadReviewStatuses, setReviewStatusSync } = await import("./review-status-CacDM78F.js");
29251
29406
  const { resolveProjectFromIssueSync } = await import("./projects-_n3Zui6K.js");
29252
29407
  const statuses = loadReviewStatuses();
29253
29408
  for (const [issueId, status] of Object.entries(statuses)) if (status.verificationStatus === "passed" && status.reviewStatus === "reviewing" && status.stuckReason === "review_infrastructure_failure") {
@@ -29257,7 +29412,7 @@ async function checkVerificationReviewContradiction() {
29257
29412
  if (project) {
29258
29413
  const workspacePath = join$1(project.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
29259
29414
  if (existsSync(workspacePath)) {
29260
- const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-Xg4PFN45.js");
29415
+ const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-CedsVume.js");
29261
29416
  reviewedAtCommit = await snapshotWorkspaceHeadsPromise(issueId, workspacePath);
29262
29417
  }
29263
29418
  }
@@ -29353,7 +29508,7 @@ async function checkReadyForMergeStuck() {
29353
29508
  const testStatusGreenCiReconcileCooldowns = /* @__PURE__ */ new Map();
29354
29509
  const TEST_STATUS_GREEN_CI_RECONCILE_COOLDOWN_MS = 300 * 1e3;
29355
29510
  async function reconcileTestStatusFromGreenCi() {
29356
- const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-Bmg4R9mv.js");
29511
+ const { getCiCheckRunsState, getPullRequestHeadState, isGitHubAppConfigured } = await import("./github-app-DIE8BkHI.js");
29357
29512
  return reconcileTestStatusFromGreenCiWithDeps({
29358
29513
  isGitHubAppConfigured,
29359
29514
  loadReviewStatuses,
@@ -29719,8 +29874,8 @@ async function checkWorkspaceContainerHealth(sharedState) {
29719
29874
  async function checkMergedWorkSessions() {
29720
29875
  const actions = [];
29721
29876
  try {
29722
- const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-4Xg9NGA8.js");
29723
- const { setAgentPaused } = await import("./agents-ePFVoZbu.js");
29877
+ const { selectMergedWorkSessions } = await import("./reap-terminal-sessions-DvFqQUnq.js");
29878
+ const { setAgentPaused } = await import("./agents-Dnn4XgdB.js");
29724
29879
  const toKill = selectMergedWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
29725
29880
  for (const session of toKill) try {
29726
29881
  await Effect.runPromise(setAgentPaused(session, "merged — awaiting close-out (verify on main)", true));
@@ -29760,7 +29915,7 @@ const AWAITING_TEST_IDLE_REAP_MS = 600 * 1e3;
29760
29915
  async function checkAwaitingTestWorkSessions() {
29761
29916
  const actions = [];
29762
29917
  try {
29763
- const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-4Xg9NGA8.js");
29918
+ const { selectAwaitingTestWorkSessions } = await import("./reap-terminal-sessions-DvFqQUnq.js");
29764
29919
  const candidates = selectAwaitingTestWorkSessions(loadReviewStatuses(), [...await Effect.runPromise(listSessionNames())]);
29765
29920
  const now = Date.now();
29766
29921
  for (const session of candidates) {
@@ -29813,26 +29968,26 @@ async function runPatrol() {
29813
29968
  hasLoggedGlobalPauseSkip = false;
29814
29969
  addLog("info", `Patrol cycle ${state.patrolCycle} — checking per-project specialists`, state.patrolCycle);
29815
29970
  console.log(`[deacon] Patrol cycle ${state.patrolCycle} - checking per-project specialists`);
29816
- for (const a of await (await import("./stale-task-claims-Cab_Fo_Z.js")).patrolStaleTaskClaims()) {
29971
+ for (const a of await (await import("./stale-task-claims-D1Ll8fI5.js")).patrolStaleTaskClaims()) {
29817
29972
  actions.push(a);
29818
29973
  addLog("action", a, state.patrolCycle);
29819
29974
  }
29820
29975
  const stuckRemediationActions = await checkStuckAgentRemediation();
29821
29976
  actions.push(...stuckRemediationActions);
29822
29977
  for (const a of stuckRemediationActions) addLog("action", a, state.patrolCycle);
29823
- const { reconcileInFlightJournals } = await import("./advancing-selfheal-BNwqxseD.js");
29978
+ const { reconcileInFlightJournals } = await import("./advancing-selfheal-DieFp3qi.js");
29824
29979
  const reconciledJournalActions = await reconcileInFlightJournals();
29825
29980
  actions.push(...reconciledJournalActions);
29826
29981
  for (const a of reconciledJournalActions) addLog("action", a, state.patrolCycle);
29827
29982
  try {
29828
29983
  const pendingFile = join$1(OVERDECK_HOME, "pending-post-merge.json");
29829
- const { processPendingLifecycleForPatrol } = await import("./deacon-pending-lifecycle-B-Io84AP.js");
29984
+ const { processPendingLifecycleForPatrol } = await import("./deacon-pending-lifecycle-2ZflPxgo.js");
29830
29985
  const action = await processPendingLifecycleForPatrol(pendingFile);
29831
29986
  if (action) actions.push(action);
29832
29987
  } catch (err) {
29833
29988
  console.warn(`[deacon] Failed to process pending lifecycle: ${err.message}`);
29834
29989
  }
29835
- if (state.patrolCycle % 5 === 0) await (await import("./deploy-patrol-sYgOxLeb.js")).runScheduledDeployPatrol();
29990
+ if (state.patrolCycle % 5 === 0) await (await import("./deploy-patrol-BNjeCL8u.js")).runScheduledDeployPatrol();
29836
29991
  const livenessActions = await reconcileAgentLiveness();
29837
29992
  actions.push(...livenessActions);
29838
29993
  for (const a of livenessActions) addLog("action", a, state.patrolCycle);
@@ -29848,7 +30003,7 @@ async function runPatrol() {
29848
30003
  const idleStackActions = await reconcileIdleWorkspaceStacks();
29849
30004
  actions.push(...idleStackActions);
29850
30005
  for (const a of idleStackActions) addLog("action", a, state.patrolCycle);
29851
- for (const a of await (await import("./bridge-pool-patrol-CYH2OLb5.js")).patrolDockerBridgePool()) {
30006
+ for (const a of await (await import("./bridge-pool-patrol-DsPj6F7t.js")).patrolDockerBridgePool()) {
29852
30007
  actions.push(a);
29853
30008
  addLog("action", a, state.patrolCycle);
29854
30009
  }
@@ -29888,7 +30043,7 @@ async function runPatrol() {
29888
30043
  } catch (err) {
29889
30044
  console.warn(`[deacon] Failed to check workspace existence: ${err.message}`);
29890
30045
  }
29891
- const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-BNwqxseD.js");
30046
+ const { checkMergedAdvancingSessions } = await import("./advancing-selfheal-DieFp3qi.js");
29892
30047
  const reapedWorkActions = await checkMergedWorkSessions();
29893
30048
  actions.push(...reapedWorkActions);
29894
30049
  for (const a of reapedWorkActions) addLog("action", a, state.patrolCycle);
@@ -29896,7 +30051,7 @@ async function runPatrol() {
29896
30051
  actions.push(...reapedMergedAdvancingActions);
29897
30052
  for (const a of reapedMergedAdvancingActions) addLog("action", a, state.patrolCycle);
29898
30053
  try {
29899
- const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-CwAp79EC.js");
30054
+ const { refreshClaudeCredentialsForActiveRemoteAgents } = await import("./remote-completion-BtmZ42aP.js");
29900
30055
  const remoteCredentialActions = await refreshClaudeCredentialsForActiveRemoteAgents();
29901
30056
  actions.push(...remoteCredentialActions);
29902
30057
  for (const a of remoteCredentialActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
@@ -29904,7 +30059,7 @@ async function runPatrol() {
29904
30059
  addLog("warn", `Remote credential refresh patrol failed: ${err.message}`, state.patrolCycle);
29905
30060
  }
29906
30061
  try {
29907
- const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-CLZB3Coc.js");
30062
+ const { refreshHostHeartbeatForEphemeralVms } = await import("./remote-agents-kwsEZvXu.js");
29908
30063
  const heartbeatActions = await refreshHostHeartbeatForEphemeralVms();
29909
30064
  actions.push(...heartbeatActions);
29910
30065
  for (const a of heartbeatActions) addLog(a.includes("failed") ? "warn" : "action", a, state.patrolCycle);
@@ -29912,7 +30067,7 @@ async function runPatrol() {
29912
30067
  addLog("warn", `Remote heartbeat refresh patrol failed: ${err.message}`, state.patrolCycle);
29913
30068
  }
29914
30069
  try {
29915
- const { reapCompletedRemoteAgents } = await import("./remote-completion-CwAp79EC.js");
30070
+ const { reapCompletedRemoteAgents } = await import("./remote-completion-BtmZ42aP.js");
29916
30071
  const remoteReap = await reapCompletedRemoteAgents();
29917
30072
  for (const r of remoteReap) if (r.status === "handed-off" || r.status === "error") {
29918
30073
  const msg = `Remote reap ${r.issueId}: ${r.status} (${r.details.join("; ")})`;
@@ -29961,6 +30116,9 @@ async function runPatrol() {
29961
30116
  const unsignaledReviewActions = await checkCompletedButUnsignaledReviews();
29962
30117
  actions.push(...unsignaledReviewActions);
29963
30118
  for (const a of unsignaledReviewActions) addLog("action", a, state.patrolCycle);
30119
+ const unappliedReviewActions = await reconcileUnappliedReviewVerdicts();
30120
+ actions.push(...unappliedReviewActions);
30121
+ for (const a of unappliedReviewActions) addLog("action", a, state.patrolCycle);
29964
30122
  const verifContradictionActions = await checkVerificationReviewContradiction();
29965
30123
  actions.push(...verifContradictionActions);
29966
30124
  for (const a of verifContradictionActions) addLog("action", a, state.patrolCycle);
@@ -30119,7 +30277,7 @@ async function runPatrol() {
30119
30277
  mergeStatus: "merged",
30120
30278
  readyForMerge: false
30121
30279
  });
30122
- const { postMergeLifecycle } = await import("./merge-agent-DQTXZk8z.js");
30280
+ const { postMergeLifecycle } = await import("./merge-agent-C1-9zbP_.js");
30123
30281
  postMergeLifecycle(issueId, resolved.projectPath).catch((err) => console.warn(`[deacon] postMergeLifecycle failed for ${issueId}: ${err}`));
30124
30282
  actions.push(`Auto-completed stale merge for ${issueId}`);
30125
30283
  } else {
@@ -30299,7 +30457,7 @@ function startDeacon() {
30299
30457
  logDeaconEventSync(`startDeacon: health monitor starting (patrol every ${config.patrolIntervalMs / 1e3}s)`);
30300
30458
  (async () => {
30301
30459
  await reconcileAgentLiveness();
30302
- const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-BNwqxseD.js");
30460
+ const { runBootAdvancingSelfHeal } = await import("./advancing-selfheal-DieFp3qi.js");
30303
30461
  await runBootAdvancingSelfHeal();
30304
30462
  runScheduledPatrol("startup");
30305
30463
  })().catch((err) => {
@@ -30369,6 +30527,6 @@ function assessDeaconPatrolFreshness(params) {
30369
30527
  };
30370
30528
  }
30371
30529
  //#endregion
30372
- export { checkStuckReviewing as $, reconcileTestStatusFromGreenCi as A, classifyMemoryPressure as At, isRapidPostResumeDeath as B, isSmeeConfiguredSync as Bt, handleAgentHeartbeatDeadEvent as C, contextProactiveCompactState as Ct, loadConfig as D, INSPECT_TIMEOUT_MS as Dt, isDeaconRunning as E, paneShowsClaudeBootBlockingScreen as Et, setAgentStoppedNotifier as F, getAcceptedSystemHealthSnapshot as Ft, isAutoResumableRole as G, nudgeStalledResumeWorkAgents as H, classifyAgentHealth as Ht, setMergeReadyNotifier as I, getDeployStaleness as It, startBootReconciliation as J, isBootReconciliationCandidate as K, startDeacon as L, getResourceConfig as Lt, runPatrol as M, formatUptime as Mt, saveState as N, getContainerHistory as Nt, loadState as O, checkInspectAgentTimeouts as Ot, setAgentStatusChangedNotifier as P, getCurrentDockerStats as Pt, checkCompletedButUnsignaledReviews as Q, stopDeacon as R, getSystemHealthEvidenceSnapshot as Rt, getLastPatrolResult as S, contextOverflowRecoveryState as St, handleAgentStoppedForOrphanReviewerSessions as T, deliverOrchestratedCompact as Tt, redeliverUndeliveredKickoffs as U, nudgeIdleWorkAgentsWithOpenBeads as V, startSmeeProcessSync as Vt, extendBootReconciliationGrace as W, monitorReviewConvoySignals as X, cleanupOrphanedReviewSessions as Y, synthesizeReviewFromReports as Z, cleanupOrphanedPlanningSessions as _, reconcileStaleMergeStatus as _t, checkCompletedButUnsignaledTests as a, recoverStalledReviewConvoys as at, getDeaconLogs as b, reconcileStuckMergingStates as bt, checkMergedWorkSessions as c, checkPostReviewCommits as ct, checkReadyForMergeStuck as d, checkFirstCompletionAgents as dt, isSynthesisForActiveReviewRun as et, checkStuckWorkAgents as f, ciRetryMap as ft, cleanupOrphanReviewerSessions as g, reconcileStaleMergeBlockers as gt, cleanupAbandonedFeedback as h, reconcileMergedButReviewing as ht, checkAwaitingTestWorkSessions as i, handleWorkCompleted as it, resetPatrolHeartbeatForStartup as j, getResourceStacks as jt, reconcileAgentLiveness as k, WORK_LAUNCHER_GRACE_MS as kt, checkOrphanedCompletions as l, autoCloseOut as lt, checkWorkspaceContainerHealth as m, reconcileFalseMerged as mt, assessDeaconPatrolFreshness as n, checkOrphanedReviewStatuses as nt, checkDeadEndAgents as o, reviewConvoyLiveness as ot, checkVerificationReviewContradiction as p, reconcileClosedPrReadyForMerge as pt, listBootReconciliationCandidates as q, checkAndSuspendIdleAgents as r, handleReviewCoordinatorDied as rt, checkMassDeath as s, stalledReviewConvoyRecoveryState as st, applyBootReconciliationDecision as t, checkMissingReviewStatuses as tt, checkPendingTestDispatch as u, checkFailedMergeRetry as ut, cleanupStaleAgentState as v, reconcileStuckReadyForMerge as vt, handleAgentStoppedEvent as w, stuckOverflowNativeRecoveryState as wt, getDeaconStatus as x, checkApiErrorAgents as xt, containerRestartBackoffMs as y, reconcileAutoMergeRows as yt, isPreKickoffLaunchDeath as z, getSystemHealthSnapshot as zt };
30530
+ export { checkStuckReviewing as $, reconcileTestStatusFromGreenCi as A, WORK_LAUNCHER_GRACE_MS as At, isRapidPostResumeDeath as B, getSystemHealthSnapshot as Bt, handleAgentHeartbeatDeadEvent as C, contextOverflowRecoveryState as Ct, loadConfig as D, paneShowsClaudeBootBlockingScreen as Dt, isDeaconRunning as E, deliverOrchestratedCompact as Et, setAgentStoppedNotifier as F, getCurrentDockerStats as Ft, isAutoResumableRole as G, nudgeStalledResumeWorkAgents as H, startSmeeProcessSync as Ht, setMergeReadyNotifier as I, getAcceptedSystemHealthSnapshot as It, startBootReconciliation as J, isBootReconciliationCandidate as K, startDeacon as L, getDeployStaleness as Lt, runPatrol as M, getResourceStacks as Mt, saveState as N, formatUptime as Nt, loadState as O, INSPECT_TIMEOUT_MS as Ot, setAgentStatusChangedNotifier as P, getContainerHistory as Pt, checkCompletedButUnsignaledReviews as Q, stopDeacon as R, getResourceConfig as Rt, getLastPatrolResult as S, checkApiErrorAgents as St, handleAgentStoppedForOrphanReviewerSessions as T, stuckOverflowNativeRecoveryState as Tt, redeliverUndeliveredKickoffs as U, classifyAgentHealth as Ut, nudgeIdleWorkAgentsWithOpenBeads as V, isSmeeConfiguredSync as Vt, extendBootReconciliationGrace as W, monitorReviewConvoySignals as X, cleanupOrphanedReviewSessions as Y, synthesizeReviewFromReports as Z, cleanupOrphanedPlanningSessions as _, reconcileStaleMergeBlockers as _t, checkCompletedButUnsignaledTests as a, handleWorkCompleted as at, getDeaconLogs as b, reconcileAutoMergeRows as bt, checkMergedWorkSessions as c, stalledReviewConvoyRecoveryState as ct, checkReadyForMergeStuck as d, checkFailedMergeRetry as dt, isSynthesisForActiveReviewRun as et, checkStuckWorkAgents as f, checkFirstCompletionAgents as ft, cleanupOrphanReviewerSessions as g, reconcileMergedButReviewing as gt, cleanupAbandonedFeedback as h, reconcileFalseMerged as ht, checkAwaitingTestWorkSessions as i, handleReviewCoordinatorDied as it, resetPatrolHeartbeatForStartup as j, classifyMemoryPressure as jt, reconcileAgentLiveness as k, checkInspectAgentTimeouts as kt, checkOrphanedCompletions as l, checkPostReviewCommits as lt, checkWorkspaceContainerHealth as m, reconcileClosedPrReadyForMerge as mt, assessDeaconPatrolFreshness as n, checkMissingReviewStatuses as nt, checkDeadEndAgents as o, recoverStalledReviewConvoys as ot, checkVerificationReviewContradiction as p, ciRetryMap as pt, listBootReconciliationCandidates as q, checkAndSuspendIdleAgents as r, checkOrphanedReviewStatuses as rt, checkMassDeath as s, reviewConvoyLiveness as st, applyBootReconciliationDecision as t, reconcileUnappliedReviewVerdicts as tt, checkPendingTestDispatch as u, autoCloseOut as ut, cleanupStaleAgentState as v, reconcileStaleMergeStatus as vt, handleAgentStoppedEvent as w, contextProactiveCompactState as wt, getDeaconStatus as x, reconcileStuckMergingStates as xt, containerRestartBackoffMs as y, reconcileStuckReadyForMerge as yt, isPreKickoffLaunchDeath as z, getSystemHealthEvidenceSnapshot as zt };
30373
30531
 
30374
- //# sourceMappingURL=deacon-pLRLbPvR.js.map
30532
+ //# sourceMappingURL=deacon-B1LD5cJU.js.map