@overdeck/desktop 0.49.1 → 0.50.0

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 (545) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +1 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-Crw-xSJ3.js → acceptance-criteria-B_maCGZv.js} +2 -2
  4. package/server/{active-dashboard-bundle-CLwfD-Om.js → active-dashboard-bundle-CCqpFWiz.js} +2 -2
  5. package/server/activity-logger-B0X2JJwM.js +3 -0
  6. package/server/{activity-logger-BAVLrkR7.js → activity-logger-SlTXYCVf.js} +22 -4
  7. package/server/{advancing-selfheal-BQiJ7mIH.js → advancing-selfheal-BJAfiY-C.js} +12 -7
  8. package/server/{agent-gc-5E0lgxI1.js → agent-gc-bhikjoJ_.js} +11 -11
  9. package/server/agent-idle-D-UQ7gDv.js +745 -0
  10. package/server/agent-state-BrUPf_7Z.js +3 -0
  11. package/server/{agent-state-Bb3UUxQm.js → agent-state-FABw8neJ.js} +682 -454
  12. package/server/{agent-state-service-keg-x1bT.js → agent-state-service-BAQApt97.js} +1 -1
  13. package/server/{agent-state-service-BFbttwRA.js → agent-state-service-rDenYSlD.js} +5 -5
  14. package/server/agents-DixZjXWm.js +3 -0
  15. package/server/{agents-CqQJW75N.js → agents-DzpQidT8.js} +8 -8
  16. package/server/{archive-planning-BwEhu9Oq.js → archive-planning-BL1ABtW0.js} +20 -135
  17. package/server/archive-planning-D3gw32U9.js +2 -0
  18. package/server/{artifact-index-jobs-C6Lg2rKm.js → artifact-index-jobs-Cjdme0jS.js} +3 -3
  19. package/server/{assemble-DyTp2gSB.js → assemble-B_JgnCbG.js} +28 -9
  20. package/server/{auto-spawn-consent-BDfe4qz0.js → auto-spawn-consent-BesWchEi.js} +8 -7
  21. package/server/{backlog-auto-trigger-DuOGpdDW.js → backlog-auto-trigger-COLq639j.js} +3 -3
  22. package/server/{behavior-Bitko0mD.js → behavior-DCg8CIWC.js} +3 -3
  23. package/server/{bridge-pool-patrol-DiHEd13O.js → bridge-pool-patrol-BDohuMRt.js} +2 -2
  24. package/server/{briefing-freshness-CDJcmHHZ.js → briefing-freshness-ENa_hW_V.js} +2 -2
  25. package/server/build-info-Dx2qrVhb.js +2 -0
  26. package/server/{build-info-DTX8JwVP.js → build-info-WuZT6xyi.js} +3 -3
  27. package/server/{checkpoint-manager-BlOOdzLF.js → checkpoint-manager-CSZ7aVQF.js} +26 -9
  28. package/server/{checkpoint-manager-CKg1tn34.js → checkpoint-manager-DXhGRvg4.js} +1 -1
  29. package/server/checkpoint-worker.js +1 -1
  30. package/server/{checkpoints-BGfl0cHM.js → checkpoints-DUkUsPVS.js} +2 -2
  31. package/server/{checkpoints-DRALkfDS.js → checkpoints-tm_w6Y4V.js} +1 -1
  32. package/server/{claude-hooks-provision-B_tv3wzE.js → claude-hooks-provision-CTh9zxEi.js} +1 -1
  33. package/server/{claude-hooks-provision-BlGv6twJ.js → claude-hooks-provision-fRofvhTN.js} +2 -2
  34. package/server/{claude-permissions-aHgDcZi5.js → claude-permissions-DLrb9ovz.js} +18 -3
  35. package/server/{claude-settings-overlay-T2LWLteV.js → claude-settings-overlay-BYnXaTVc.js} +2 -2
  36. package/server/{claude-settings-overlay-CYOvFE3A.js → claude-settings-overlay-CMS5Jab5.js} +1 -1
  37. package/server/cli-BflmtEFM.js +2 -0
  38. package/server/{cli-Do8UpLoI.js → cli-CoQou1t_.js} +11 -11
  39. package/server/{cliproxy-CX6jHRDP.js → cliproxy-DXDQcR3I.js} +52 -17
  40. package/server/cliproxy-DdhFpcXU.js +3 -0
  41. package/server/{close-issue-J0_eWYT1.js → close-issue-CpQ0BWg-.js} +5 -5
  42. package/server/{closed-issue-reaper-bFppuk6F.js → closed-issue-reaper-CdcJRvUx.js} +13 -12
  43. package/server/{closed-issue-reaper-Cl2h9AfT.js → closed-issue-reaper-TymtZM37.js} +1 -1
  44. package/server/{codex-icapA4om.js → codex-BValsmtK.js} +1 -1
  45. package/server/{codex-OOea7lXs.js → codex-DYyZL8JD.js} +16 -10
  46. package/server/{compaction-continuation-D5voR1ME.js → compaction-continuation-CVjbdGKt.js} +3 -3
  47. package/server/{config-Cjleh3_U.js → config-CvKH7r7W.js} +1 -1
  48. package/server/{config-tucKBCCc.js → config-NxI9Yl2f.js} +2 -2
  49. package/server/{config-DC75T4Mr.js → config-_qaa1UXH.js} +2 -2
  50. package/server/{config-yaml-BwOEANMr.js → config-yaml-D60AnTIu.js} +55 -15
  51. package/server/{conflict-gate-DlpWCMd7.js → conflict-gate-0dD1kxjN.js} +1 -1
  52. package/server/{conflict-gate-D2L1kZeL.js → conflict-gate-hAUCL-un.js} +5 -5
  53. package/server/{context-layers-CSPGc2Hb.js → context-layers-CdpabJj0.js} +3 -3
  54. package/server/context-layers-Ds1MnEFI.js +4 -0
  55. package/server/{continue-U3Af0jUq.js → continue-CnvrUfxw.js} +3 -3
  56. package/server/{control-settings-5k6ixdFW.js → control-settings-Db0uXgVM.js} +310 -7
  57. package/server/{conversation-compaction-CSpVpxN6.js → conversation-compaction-B-1KETG9.js} +8 -8
  58. package/server/{conversation-compaction-Ciit9O6k.js → conversation-compaction-DzMXGRiJ.js} +1 -1
  59. package/server/{conversation-service-BxrB5lUT.js → conversation-service-BL-asWPX.js} +1 -1
  60. package/server/{conversation-service-BteE4ELK.js → conversation-service-BxIOd5ay.js} +21 -7
  61. package/server/conversations-CEMfwMt-.js +3 -0
  62. package/server/{conversations-DhwxsOru.js → conversations-nS6QgYpD.js} +12 -7
  63. package/server/cost-3FyqKK56.js +838 -0
  64. package/server/{cost-Bnf9NUC5.js → cost-Cctc-Q9M.js} +3 -3
  65. package/server/{cost-CQKI6OCu.js → cost-DTuIRE4y.js} +2 -2
  66. package/server/{cost-sync-B-ADeXKY.js → cost-sync-DfmvLT9L.js} +3 -3
  67. package/server/{dag-DI9LaK_q.js → dag-o-dUpw1L.js} +6 -19
  68. package/server/{dangerous-git-ops-akhA3iyF.js → dangerous-git-ops-BOtXCFkT.js} +1 -1
  69. package/server/dashboard-db-worker.js +61 -11
  70. package/server/{deacon-TPYssFYt.js → deacon-CsisLmPt.js} +1735 -172
  71. package/server/{deacon-canonical-state-DFYymrDw.js → deacon-canonical-state-DkdkQS5p.js} +3 -3
  72. package/server/deacon-e6py3jkM.js +4 -0
  73. package/server/{deacon-event-client-Te5v10-b.js → deacon-event-client-BCjHiGAY.js} +1 -1
  74. package/server/{deacon-event-client-BKOL4AcL.js → deacon-event-client-CMQswEHX.js} +2 -2
  75. package/server/{deacon-nudge-log-BtlTWgWu.js → deacon-nudge-log-pcliw8Dr.js} +1 -1
  76. package/server/{deacon-pending-lifecycle-DVHjOLje.js → deacon-pending-lifecycle-BzaE76Xo.js} +3 -3
  77. package/server/deacon.js +11 -11
  78. package/server/{dead-end-trip-P0IF1O0E.js → dead-end-trip-Bs3hxIn6.js} +3 -3
  79. package/server/dead-end-trip-DUbiRMtT.js +2 -0
  80. package/server/delivery-DhZGRShH.js +3 -0
  81. package/server/{deploy-patrol-BXjlvoV3.js → deploy-patrol-B8sKkA8h.js} +8 -8
  82. package/server/deploy-queue--smqHLhe.js +2 -0
  83. package/server/{deploy-queue-o7shYg1j.js → deploy-queue-CCGWXFkp.js} +2 -2
  84. package/server/{deploy-window-CNT6fOff.js → deploy-window-YuJewzmC.js} +4 -4
  85. package/server/{deploy-window-BMk5_oX6.js → deploy-window-hgsvZ3UZ.js} +1 -1
  86. package/server/{dev-supervisor-SR1CLOAK.js → dev-supervisor-4SBloJHV.js} +2 -2
  87. package/server/{devcontainer-renderer-enMmNDFa.js → devcontainer-renderer-BiJhwFNi.js} +3 -3
  88. package/server/{dist-CPTO_zMR.js → dist-CoR2sivG.js} +1 -1
  89. package/server/dist-FHv1s5ez.js +3 -0
  90. package/server/{docker-B7qUZptz.js → docker-CWO7dcIP.js} +3 -3
  91. package/server/{docker-KR3zSFKY.js → docker-DQzyMXkd.js} +1 -1
  92. package/server/{dod-gK835UMf.js → dod-BAk5arLF.js} +1 -1
  93. package/server/{done-preflight-CksRvh49.js → done-preflight-CGFA0M1b.js} +1 -1
  94. package/server/{done-preflight-Bk8aExAL.js → done-preflight-Cx9JGznT.js} +5 -5
  95. package/server/{driver-CmsY2RLl.js → driver-BtcFz-qu.js} +14 -3
  96. package/server/durable-review-pipeline-BOEZ0chh.js +3 -0
  97. package/server/{durable-review-pipeline-DgYHucN2.js → durable-review-pipeline-Djx_lvFd.js} +11 -2
  98. package/server/{ensure-devcontainer-BQ4YizSH.js → ensure-devcontainer-Dk6ZMOUC.js} +1 -1
  99. package/server/{ensure-devcontainer-ojerEqQg.js → ensure-devcontainer-DzYBBwnM.js} +4 -4
  100. package/server/{esm-shims-1htPASWs.js → esm-shims-deFq5Hhl.js} +1 -1
  101. package/server/{event-store-BgEjNsvk.js → event-store-C50Qt-f1.js} +1 -1
  102. package/server/{event-store-D7qcJXuZ.js → event-store-DTns2XZP.js} +5 -5
  103. package/server/{event-store-provider-BKvk2rDj.js → event-store-provider-Bu1Qrg6v.js} +1 -1
  104. package/server/{events-BIKGJZOT.js → events-B6xW8Cpm.js} +3 -3
  105. package/server/{dist-src-BM9eudEd.js → factory-CWVKwKFE.js} +714 -2
  106. package/server/{feature-registry-storage-ewNSIVsQ.js → feature-registry-storage-vaxRN3WO.js} +3 -3
  107. package/server/{features-CGopJXdU.js → features-DXWwktJB.js} +2 -2
  108. package/server/{feedback-stuck-retirement-B8-fX7NA.js → feedback-stuck-retirement-CXAYe2rU.js} +2 -2
  109. package/server/{feedback-target-CkyLYohm.js → feedback-target-DSVpi0gT.js} +1 -1
  110. package/server/{feedback-target-Ci6N5p4G.js → feedback-target-yPD_wclF.js} +10 -10
  111. package/server/{feedback-writer-DfuVjvH0.js → feedback-writer-BzN4qvaP.js} +1 -1
  112. package/server/{feedback-writer-D4ULO4qG.js → feedback-writer-Ds1Wjsz4.js} +5 -5
  113. package/server/{flywheel-DXI_WITn.js → flywheel-BCZS-FlW.js} +1 -1
  114. package/server/{flywheel-BwYPDlhK.js → flywheel-CC4gE_rx.js} +15 -15
  115. package/server/{flywheel-C7yek87O.js → flywheel-DWKd7bMc.js} +79 -29
  116. package/server/{flywheel-merge-order-C5m5bYBc.js → flywheel-merge-order-DDT3i57u.js} +1 -1
  117. package/server/{flywheel-merge-order-CXfU4M6l.js → flywheel-merge-order-DJwH2KpL.js} +17 -15
  118. package/server/forge-4VVCRcF7.js +2 -0
  119. package/server/{forge-DYX9sKzG.js → forge-CHADjOFs.js} +2 -2
  120. package/server/{from-DAdMxC29.js → from-C3dzmjSO.js} +1 -1
  121. package/server/{fs-lock-cw25uO_E.js → fs-lock-DQ_gUxfq.js} +2 -2
  122. package/server/{fts-operations-D_rzLxX5.js → fts-operations-asZo2fh1.js} +3 -3
  123. package/server/git-info-DMOSfJ9I.js +148 -0
  124. package/server/{git-utils-Y0zG25ez.js → git-utils-BAMwn9Nf.js} +1 -1
  125. package/server/{git-utils-DV4B9TRl.js → git-utils-BdHk8y7g.js} +4 -4
  126. package/server/{github-app-C33lDk9Z.js → github-app-BWziYCf3.js} +1 -1
  127. package/server/{github-app-4UX8VIr8.js → github-app-BlMSzSTw.js} +2 -2
  128. package/server/{github-client-nPj5ckZO.js → github-client-OK24qpol.js} +1 -1
  129. package/server/{github-client-DkJVR908.js → github-client-w6j5nVlz.js} +3 -3
  130. package/server/{github-pr-lookup-C9Vokb0W.js → github-pr-lookup-bGcsEvLE.js} +2 -2
  131. package/server/{harness-binary-BgXYDo2Z.js → harness-binary-DChiynaB.js} +2 -2
  132. package/server/{harness-resolve-1NZcVx7n.js → harness-resolve-BplBEbwn.js} +4 -4
  133. package/server/{health-events-jMfxrElt.js → health-events-BTqsmunw.js} +1 -1
  134. package/server/{health-events-DlX_FVAB.js → health-events-Bk3LjaJ9.js} +2 -2
  135. package/server/{hooks-NQ19vvlB.js → hooks-DJR1yR9w.js} +2 -2
  136. package/server/{hooks-W3REcb3h.js → hooks-EndRNrx9.js} +1 -1
  137. package/server/{hume-BFkid2PO.js → hume-1FJmNDTq.js} +2 -2
  138. package/server/hume-gXLmRhmN.js +3 -0
  139. package/server/{identity-Bwh6VGeL.js → identity-C3s8lyp0.js} +3 -3
  140. package/server/{idle-stack-reaper-CHtCNpvd.js → idle-stack-reaper-CBelVOE3.js} +1 -1
  141. package/server/{idle-stack-reaper-BeU_KxWx.js → idle-stack-reaper-DtoI4al6.js} +4 -4
  142. package/server/{in-flight-guard-pcwXKLGz.js → in-flight-guard-B7khcBdQ.js} +1 -1
  143. package/server/{infra-KTp9KV9u.js → infra-CJRi_5Wu.js} +36 -7
  144. package/server/{injection-67YyU6SC.js → injection-ADWQ3D0s.js} +8 -8
  145. package/server/{injection-BxbZKPDh.js → injection-BWsgHvrL.js} +1 -1
  146. package/server/{inspect-agent-VHSihlb7.js → inspect-agent-CCfNJjKr.js} +12 -12
  147. package/server/inspect-agent-Dhp3hCGp.js +2 -0
  148. package/server/{internal-token-B-z-sGBH.js → internal-token-BCTEqUCX.js} +1 -1
  149. package/server/{internal-token-zY75jrRJ.js → internal-token-BeIWG_kT.js} +2 -2
  150. package/server/{io-DfvO2xyh.js → io-BCtZoXHo.js} +5 -5
  151. package/server/{issue-closed-dvEWKO7Q.js → issue-closed-CiYAa6bX.js} +7 -7
  152. package/server/{issue-lifecycle-3N8XF7lP.js → issue-lifecycle-BETNVVLq.js} +206 -29
  153. package/server/{issue-lifecycle-BI6jAfp8.js → issue-lifecycle-DaKN57sx.js} +1 -1
  154. package/server/{issue-service-singleton-CL6hESX2.js → issue-service-singleton-1Q0ER8Yc.js} +1 -1
  155. package/server/{issue-service-singleton-BN_2MXp4.js → issue-service-singleton-C_sZ0HjP.js} +124 -11
  156. package/server/issue-title-fallback-B91iD66g.js +120 -0
  157. package/server/{issues-CkvUoAnq.js → issues-RGHQUKhB.js} +2 -2
  158. package/server/{jsonl-parser-CrEb2PWr.js → jsonl-parser-Dfs1dlYE.js} +3 -3
  159. package/server/jsonl-resolver-bFtftCDd.js +324 -0
  160. package/server/{kimi-code-DoMoGqIu.js → kimi-code-BxkDgaj4.js} +1 -1
  161. package/server/{kimi-code-C26gmGxM.js → kimi-code-CNYRA8Dd.js} +14 -12
  162. package/server/{kimi-parser-Dmhy3UlR.js → kimi-parser-OcWwmOqF.js} +2 -2
  163. package/server/{label-cleanup-X2lWfghH.js → label-cleanup-CefxK9tL.js} +3 -3
  164. package/server/{lifecycle-B0rL38D3.js → lifecycle-DDZ7w-BY.js} +6 -6
  165. package/server/{lifecycle-Bg44O-9x.js → lifecycle-DVXyUil2.js} +2 -2
  166. package/server/{lifecycle-io-DQDU0apV.js → lifecycle-io-D1oBiMce.js} +1 -1
  167. package/server/{lifecycle-io-CCBpRv5m.js → lifecycle-io-D7N0vQNj.js} +5 -5
  168. package/server/{linear-client-B0cIkTs4.js → linear-client-DUN7zCeb.js} +3 -3
  169. package/server/{linear-client-6V2E-DSa.js → linear-client-TL32snOy.js} +1 -1
  170. package/server/{linear-mcp-auth-LCo9AWUd.js → linear-mcp-auth-CtRKSHy5.js} +1 -1
  171. package/server/{linear-mcp-auth-Dsu9Io9r.js → linear-mcp-auth-bB0CPyjh.js} +5 -5
  172. package/server/memory-fts-worker.js +1 -1
  173. package/server/{memory-governor-A4O6vI9d.js → memory-governor-Cvv_9K0M.js} +88 -22
  174. package/server/{memory-pressure-patrol-BWlWywmA.js → memory-pressure-patrol-C6DJJQRA.js} +38 -14
  175. package/server/{merge-BGWcBxku.js → merge-DOCR6pHi.js} +1 -1
  176. package/server/{merge-vz80RvSE.js → merge-FTk4LsnM.js} +3 -3
  177. package/server/{merge-agent-GWhmnxFk.js → merge-agent-C-dsN9se.js} +37 -33
  178. package/server/{merge-agent-BRSz26Oh.js → merge-agent-D-4_iQgy.js} +2 -2
  179. package/server/{merge-batch-CFMEtTxv.js → merge-batch-BJjzUUL7.js} +1 -1
  180. package/server/{merge-completeness-CP347umA.js → merge-completeness-BOtBUwTU.js} +4 -4
  181. package/server/{merge-completeness-7ajHAIR-.js → merge-completeness-CoLJxfUY.js} +1 -1
  182. package/server/merge-eligibility-C4rTS97F.js +3 -0
  183. package/server/merge-eligibility-D7wRnJbj.js +51 -0
  184. package/server/merge-ops-Cf02szJ5.js +2 -0
  185. package/server/merge-rebase-Bj7eJAG4.js +2 -0
  186. package/server/{merge-rebase-C5htyEEH.js → merge-rebase-KBw4rdh3.js} +2 -2
  187. package/server/{merge-set-DsGW8fmc.js → merge-set-CVfEM57p.js} +1 -1
  188. package/server/{merge-set-eiE2nC6C.js → merge-set-CyW-xSn4.js} +4 -4
  189. package/server/{merge-sync-CM2-myXu.js → merge-sync-CYGsJy0u.js} +1 -1
  190. package/server/{merge-sync-Ct0-cxMX.js → merge-sync-YLvOPAry.js} +2 -2
  191. package/server/{merge-train-BOu3fN7O.js → merge-train-VxLn8Ms4.js} +4 -4
  192. package/server/{merge-train-deps-LXHGK61n.js → merge-train-deps-D0y4hBB9.js} +4 -4
  193. package/server/{merge-verification-BRp08IzI.js → merge-verification-BfJRNMiD.js} +6 -6
  194. package/server/{merged-docker-cleanup-worker-CwldDjHV.js → merged-docker-cleanup-worker-Bh5fKG_b.js} +4 -4
  195. package/server/{merged-docker-cleanup-worker-C8eGn78a.js → merged-docker-cleanup-worker-Ci9oeFAe.js} +1 -1
  196. package/server/messaging-Dfbhgjd6.js +3 -0
  197. package/server/{multipart-parser-OAuW7824.js → multipart-parser-BYwfKOVU.js} +2 -2
  198. package/server/{no-resume-mode-MWI6pnrK.js → no-resume-mode-DjMQRkId.js} +1 -1
  199. package/server/node_modules/.package-lock.json +24 -24
  200. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/AGENTS.md +14 -0
  201. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/CLAUDE.md +14 -0
  202. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/README.md +10 -3
  203. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/package.json +2 -2
  204. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/40_sql/10_basics.ts +175 -0
  205. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/40_sql/index.md +6 -0
  206. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/10_basics.ts +3 -1
  207. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/20_testing.ts +100 -0
  208. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/fixtures/api/Users.ts +30 -14
  209. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/fixtures/domain/User.ts +15 -6
  210. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/fixtures/server/Authorization.ts +11 -10
  211. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/fixtures/server/Users/http.ts +41 -32
  212. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/51_http-server/fixtures/server/Users.ts +141 -20
  213. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/ai-docs/src/70_cli/10_basics.ts +31 -5
  214. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.d.ts.map +1 -1
  215. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js +10 -9
  216. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js.map +1 -1
  217. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.d.ts.map +1 -1
  218. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.js +12 -9
  219. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeClusterSocket.js.map +1 -1
  220. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocket.js +1 -1
  221. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocket.js.map +1 -1
  222. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocketServer.js +4 -4
  223. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeSocketServer.js.map +1 -1
  224. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeStream.d.ts.map +1 -1
  225. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeStream.js +10 -4
  226. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeStream.js.map +1 -1
  227. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/internal/nodeChildProcessSpawner.d.ts +4 -0
  228. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/internal/nodeChildProcessSpawner.d.ts.map +1 -0
  229. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/internal/nodeChildProcessSpawner.js +10 -0
  230. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/internal/nodeChildProcessSpawner.js.map +1 -0
  231. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +7 -7
  232. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeChildProcessSpawner.ts +16 -11
  233. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeClusterSocket.ts +15 -12
  234. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeSocket.ts +1 -1
  235. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeSocketServer.ts +4 -4
  236. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeStream.ts +10 -4
  237. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/internal/nodeChildProcessSpawner.ts +16 -0
  238. package/server/node_modules/@types/node/README.md +1 -1
  239. package/server/node_modules/@types/node/buffer.buffer.d.ts +5 -5
  240. package/server/node_modules/@types/node/crypto.d.ts +2 -2
  241. package/server/node_modules/@types/node/http.d.ts +16 -0
  242. package/server/node_modules/@types/node/http2.d.ts +10 -2
  243. package/server/node_modules/@types/node/package.json +2 -2
  244. package/server/node_modules/@types/node/process.d.ts +52 -0
  245. package/server/node_modules/@types/node/quic.d.ts +210 -28
  246. package/server/node_modules/@types/node/sqlite.d.ts +6 -2
  247. package/server/node_modules/@types/node/test.d.ts +36 -0
  248. package/server/node_modules/ansi-regex/index.js +3 -2
  249. package/server/node_modules/ansi-regex/package.json +1 -1
  250. package/server/node_modules/effect/node_modules/uuid/README.md +19 -19
  251. package/server/node_modules/effect/node_modules/uuid/dist/v1.js +7 -3
  252. package/server/node_modules/effect/node_modules/uuid/dist/v7.js +5 -2
  253. package/server/node_modules/effect/node_modules/uuid/dist-node/v1.js +7 -3
  254. package/server/node_modules/effect/node_modules/uuid/dist-node/v7.js +5 -2
  255. package/server/node_modules/effect/node_modules/uuid/package.json +4 -3
  256. package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  257. package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  258. package/server/node_modules/gaxios/package.json +3 -3
  259. package/server/node_modules/msgpackr/dist/index-no-eval.cjs +11 -5
  260. package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
  261. package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
  262. package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
  263. package/server/node_modules/msgpackr/dist/index.js +11 -5
  264. package/server/node_modules/msgpackr/dist/index.js.map +1 -1
  265. package/server/node_modules/msgpackr/dist/index.min.js +1 -1
  266. package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
  267. package/server/node_modules/msgpackr/dist/node.cjs +11 -5
  268. package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
  269. package/server/node_modules/msgpackr/dist/test.js +11 -5
  270. package/server/node_modules/msgpackr/dist/test.js.map +1 -1
  271. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +11 -5
  272. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
  273. package/server/node_modules/msgpackr/package.json +1 -1
  274. package/server/node_modules/msgpackr/unpack.js +11 -5
  275. package/server/node_modules/picomatch/lib/parse.js +10 -1
  276. package/server/node_modules/picomatch/lib/scan.js +30 -18
  277. package/server/node_modules/picomatch/package.json +1 -1
  278. package/server/{orphan-proposed-reconciler-BAE5AZ_e.js → orphan-proposed-reconciler-CnP0K2v3.js} +2 -2
  279. package/server/{orphan-proposed-reconciler-cV3URUqk.js → orphan-proposed-reconciler-nFUlquZt.js} +24 -23
  280. package/server/package-lock.json +25 -25
  281. package/server/package.json +1 -1
  282. package/server/{pan-dir-DDd91kMb.js → pan-dir-B4NfzOf3.js} +5 -5
  283. package/server/{deacon-merge-BOGFEV8_.js → parked-residue-8WbU0y1z.js} +188 -69
  284. package/server/{paths-CRLnDgcI.js → paths-rETQhTF2.js} +2 -2
  285. package/server/{pending-lifecycle-claim-CYgMiDAP.js → pending-lifecycle-claim-yAwDuGS4.js} +2 -2
  286. package/server/{pickup-BjJsSX12.js → pickup-Dle6k9Xt.js} +1 -1
  287. package/server/{pipeline-agent-reader-BLc43dVJ.js → pipeline-agent-reader-CeWhQzXC.js} +5 -5
  288. package/server/{pipeline-membership-BHZp_ShY.js → pipeline-membership-BV4hdkHm.js} +1 -1
  289. package/server/{pipeline-membership-5qlRz5Qg.js → pipeline-membership-C9ykcjsn.js} +1 -1
  290. package/server/{pipeline-membership-gather-CGFY1v-y.js → pipeline-membership-gather-Ba0wJNCR.js} +17 -12
  291. package/server/{pipeline-membership-gather-WhRc1yke.js → pipeline-membership-gather-C9E22B2W.js} +1 -1
  292. package/server/{pipeline-notifier-C4fZ2ito.js → pipeline-notifier-B5DPXvnr.js} +1 -1
  293. package/server/{pipeline-notifier-BmsLWM_2.js → pipeline-notifier-p190L97e.js} +2 -2
  294. package/server/{post-merge-lifecycle-worker-KK1RTKRE.js → post-merge-lifecycle-worker-OQoK8Ckg.js} +3 -3
  295. package/server/{post-merge-state-_Lj3LDLh.js → post-merge-state-DFaf7OI1.js} +4 -4
  296. package/server/prd-locations-F2oLSAhy.js +124 -0
  297. package/server/{project-pipelines-CCkebHOu.js → project-pipelines-CUsa6U59.js} +2 -2
  298. package/server/project-repos-BVdi9-ch.js +3 -0
  299. package/server/{project-repos-B4MK48j4.js → project-repos-CsfvLtmr.js} +29 -3
  300. package/server/project-resource-refresh-queue-BehrH4Ai.js +865 -0
  301. package/server/project-resource-refresh-queue-D2110Guc.js +2 -0
  302. package/server/{projects-DvPEAP18.js → projects-BMuEf14J.js} +1 -1
  303. package/server/{prompts-BiS5I2tZ.js → prompts-CKpDt8Jn.js} +2 -2
  304. package/server/providers-Buv2wmFU.js +3 -0
  305. package/server/{providers-DrfK0Ip8.js → providers-CxPKmyif.js} +7 -7
  306. package/server/public/assets/{chunk-BO2N2NFS-GtVe_o56.js → chunk-BO2N2NFS-DZOQVqV1.js} +4 -4
  307. package/server/public/assets/{diagram-OG6HWLK6-BvhcYYHc.js → diagram-OG6HWLK6-oKeXcbO1.js} +1 -1
  308. package/server/public/assets/{dist-CSmUXazd.js → dist-2qPmeRzT.js} +3 -3
  309. package/server/public/assets/{dist-D0ryefak.js → dist-ClBlE-Nm.js} +1 -1
  310. package/server/public/assets/{ganttDiagram-6RSMTGT7-BXA51DzM.js → ganttDiagram-6RSMTGT7-BwdG9fQv.js} +1 -1
  311. package/server/public/assets/{highlighted-body-OFNGDK62-mlV4EpWt.js → highlighted-body-OFNGDK62-BzGNdskQ.js} +1 -1
  312. package/server/public/assets/index-CdPveU3M.css +1 -0
  313. package/server/public/assets/index-Cg6tdZoY.js +860 -0
  314. package/server/public/assets/{linear-BPE7oswm.js → linear-DpEt1TJb.js} +1 -1
  315. package/server/public/assets/mermaid-GHXKKRXX-6KBD_3T_.js +1 -0
  316. package/server/public/assets/{pieDiagram-4H26LBE5-BguGGV3S.js → pieDiagram-4H26LBE5-9BpM4oRJ.js} +1 -1
  317. package/server/public/assets/{prod-aKDYUrXQ.js → prod-CzJiNNEG.js} +4 -4
  318. package/server/public/assets/{quadrantDiagram-W4KKPZXB-Bx3i4B6H.js → quadrantDiagram-W4KKPZXB-BXWVAoZx.js} +1 -1
  319. package/server/public/assets/{sankeyDiagram-5OEKKPKP-B5vuLjA4.js → sankeyDiagram-5OEKKPKP-5oxodGEw.js} +1 -1
  320. package/server/public/assets/{xychartDiagram-2RQKCTM6-HPlpkqsN.js → xychartDiagram-2RQKCTM6-BChDrHxZ.js} +1 -1
  321. package/server/public/index.html +2 -2
  322. package/server/pull-requests-CmlandI7.js +2 -0
  323. package/server/{pull-requests-BcHIsFJv.js → pull-requests-T0OV0Vn4.js} +3 -3
  324. package/server/{rally-B1OMtzch.js → rally-CUqj2oIN.js} +3 -3
  325. package/server/rally-DYIn9R2U.js +3 -0
  326. package/server/{rally-api-ShZ4kvn0.js → rally-api-BFPb2oSq.js} +2 -2
  327. package/server/{rally-api-u_vkr5c_.js → rally-api-BoucQG1u.js} +1 -1
  328. package/server/{rally-client-D6Feq1Ka.js → rally-client-16iObny7.js} +5 -5
  329. package/server/{rally-client-DgZvUZqX.js → rally-client-CsqLjLLa.js} +1 -1
  330. package/server/{reap-terminal-sessions-CRfiXLY0.js → reap-terminal-sessions-BaDSNR-k.js} +2 -2
  331. package/server/{reap-terminal-sessions-D7f3zSE9.js → reap-terminal-sessions-DgEIKMhH.js} +2 -2
  332. package/server/{rebuild-stack-CCwKHZb6.js → rebuild-stack-BcBVFJp3.js} +2 -2
  333. package/server/{rebuild-stack-DKxOnkpE.js → rebuild-stack-CyXMrj6K.js} +7 -7
  334. package/server/reconciler-caYiRnPy.js +657 -0
  335. package/server/{reconstruct-cache-BP8UIKt7.js → reconstruct-cache-3JzPOune.js} +7 -7
  336. package/server/{record-By-wp6pg.js → record-DYOg97Iv.js} +1 -1
  337. package/server/{record-update-D23jPU6b.js → record-update-BPqpBu3O.js} +9 -7
  338. package/server/{record-update-ByGtIlUK.js → record-update-CDPEX7BH.js} +1 -1
  339. package/server/{recovery-trip-C4dTl8DO.js → recovery-trip-CpfW6LCJ.js} +43 -10
  340. package/server/{recovery-trip-qloOYOFz.js → recovery-trip-xqKC07Gy.js} +1 -1
  341. package/server/{release-engine-Crc0Tjx-.js → release-engine-C_OOhCaK.js} +5 -5
  342. package/server/{release-set-DDXwbIK7.js → release-set-DOIDz2vw.js} +3 -3
  343. package/server/{remote-oEMfXlwT.js → remote-BTh-sjpX.js} +3 -3
  344. package/server/{remote-agents-Bgtc2nOO.js → remote-agents-DbbN7vSm.js} +6 -6
  345. package/server/{remote-agents-DQVGZVQ9.js → remote-agents-MuXx2gWm.js} +1 -1
  346. package/server/{remote-completion-DxUJ5HKR.js → remote-completion-LcWCpAm2.js} +13 -13
  347. package/server/{remote-CBpLi4Yy.js → remote-xY0B43Ho.js} +3 -3
  348. package/server/{resolver-CuAULbLs.js → resolver-C2QKOf09.js} +2 -2
  349. package/server/{resolver-C8rooxoz.js → resolver-D4nsxfGo.js} +31 -8
  350. package/server/resume-ByUrJUNX.js +3 -0
  351. package/server/{review-agent-7C2w5CzU.js → review-agent-BRBTm1qE.js} +43 -55
  352. package/server/review-agent-Caodi0PX.js +3 -0
  353. package/server/{review-artifacts-BJeEfm2r.js → review-artifacts-DgaDlbO4.js} +6 -6
  354. package/server/{review-convoy-liveness-DfF9eXjI.js → review-convoy-liveness-BBvyuRLC.js} +20 -11
  355. package/server/{review-run-recovery-ZjuDTNhZ.js → review-run-recovery-DCzWMMvE.js} +1 -1
  356. package/server/{review-run-recovery-7BKt2Es0.js → review-run-recovery-THHMKlXJ.js} +3 -3
  357. package/server/{review-status-CUnjjOUu.js → review-status-Bge_3XTR.js} +1 -1
  358. package/server/{review-status-DBnR5t4z.js → review-status-DpniqzPT.js} +113 -44
  359. package/server/{review-status-emit-Cg4tOb8U.js → review-status-emit-D7sM720S.js} +3 -3
  360. package/server/{review-status-enrichment-D-rQshu6.js → review-status-enrichment-PDI4-faj.js} +3 -3
  361. package/server/{review-status-source-DSn0glLa.js → review-status-source-D2PCWS6E.js} +1 -1
  362. package/server/{review-status-source-Ct912fv_.js → review-status-source-Jq0BXmn3.js} +1 -1
  363. package/server/{review-status-sync-B7V_Gg51.js → review-status-sync-C6ZKTI8f.js} +11 -8
  364. package/server/{review-status-sync-YthpOH_q.js → review-status-sync-CvpHWyvR.js} +1 -1
  365. package/server/{review-verdict-feedback-C-dBon_-.js → review-verdict-feedback-B2ojHFH5.js} +8 -8
  366. package/server/{review-verdict-feedback-DqXTuJk8.js → review-verdict-feedback-tyMoLT2L.js} +1 -1
  367. package/server/{review-verdict-writer-CKaJWp75.js → review-verdict-writer-Cy_1pnIj.js} +7 -7
  368. package/server/{review-verdict-writer-jldSh3Bm.js → review-verdict-writer-DjrJ64eS.js} +1 -1
  369. package/server/{rollup-DZwH4CLs.js → rollup-Cp0KEoOu.js} +1 -1
  370. package/server/{rollup-QCwYcBdP.js → rollup-DU3xBQu2.js} +8 -8
  371. package/server/{scanner-2aHeLC3W.js → scanner-BFKG3Gxv.js} +8 -8
  372. package/server/{search-DwHYaj66.js → search-DhtKwbBC.js} +2 -2
  373. package/server/{secret-redaction-B5G1xZ3k.js → secret-redaction-DLZ-VqHq.js} +1 -1
  374. package/server/{sequence-io-POKWdusG.js → sequence-io-C-Q19Jez.js} +4 -4
  375. package/server/{sequencer-agent-DS00KHVm.js → sequencer-agent-eN2P2lDz.js} +6 -6
  376. package/server/server.js +1499 -1350
  377. package/server/{service-BLb_CyPL.js → service-CThO0Sar.js} +80 -774
  378. package/server/{session-fork-DcTzVwex.js → session-fork-ZYTHtpBh.js} +2 -2
  379. package/server/settings-ByDRfuuE.js +2 -0
  380. package/server/{settings-Clw8UVNs.js → settings-CTywpFw5.js} +2 -2
  381. package/server/{settings-B9-H2K_E.js → settings-nAT-eK56.js} +3 -3
  382. package/server/{shadow-engineering-C6oO_PiR.js → shadow-engineering-BHZKPJhq.js} +3 -3
  383. package/server/{shadow-state-CEGrrECe.js → shadow-state-BTLi4Axs.js} +2 -2
  384. package/server/{shadow-state-e7250VUx.js → shadow-state-CZ_LnPsi.js} +1 -1
  385. package/server/{shadow-utils-xFk2Wusb.js → shadow-utils-CPLlPHdn.js} +2 -2
  386. package/server/{ship-log-7BnQHuKU.js → ship-log-D-CphNZx.js} +1 -1
  387. package/server/{ship-record-CwUX6Afo.js → ship-record-BaBla0l_.js} +7 -7
  388. package/server/{ship-record-BgUPnpT0.js → ship-record-BlvX8-xv.js} +1 -1
  389. package/server/{ship-status-Ce3_3edi.js → ship-status-rQbPQBsF.js} +2 -2
  390. package/server/{smart-compaction-BmfIi3oL.js → smart-compaction-CUXn8mfX.js} +1 -1
  391. package/server/{smart-compaction-Dy0gw1VH.js → smart-compaction-D1CNGdZx.js} +7 -7
  392. package/server/{spawn-planning-session-nH3b4Drz.js → spawn-planning-session-DCmO6COk.js} +19 -19
  393. package/server/{spawn-planning-session-CfhxRJoY.js → spawn-planning-session-DfEWyrVV.js} +2 -2
  394. package/server/{specialist-completion-CC1XJbTx.js → specialist-completion-BMv3K54P.js} +1 -1
  395. package/server/{specialist-context-cHwpcXSh.js → specialist-context-C1-CfYQb.js} +5 -5
  396. package/server/{specialist-handoff-logger-GqnGSYoJ.js → specialist-handoff-logger-BDKoz5Z9.js} +2 -2
  397. package/server/{specialist-logs-5OTnrV91.js → specialist-logs-BJQFkpdG.js} +3 -3
  398. package/server/specialists-CYt1U3Zm.js +4 -0
  399. package/server/{specialists-8LcQi9Np.js → specialists-D6MUU31Q.js} +21 -272
  400. package/server/{specialists-DocAK-7A.js → specialists-DhS79T9v.js} +369 -691
  401. package/server/{specialists-xXcJHAyg.js → specialists-Dx0zRTxX.js} +1 -1
  402. package/server/specialists-registry-BRLCi61y.js +3 -0
  403. package/server/specialists-registry-Bng0OFGH.js +277 -0
  404. package/server/specs-oRGyfz6C.js +3 -0
  405. package/server/{src-C2TAxwki.js → src-C7gGe4KU.js} +6 -6
  406. package/server/{src-DudQNYVw.js → src-CdwN6WY6.js} +344 -7
  407. package/server/{src-DUVvEA8Q.js → src-DMosbuSJ.js} +3 -3
  408. package/server/{stack-health-DKT4ySnA.js → stack-health-BKfNaqMm.js} +3 -3
  409. package/server/{stack-health-CbyiYS9H.js → stack-health-Bz711z1Y.js} +1 -1
  410. package/server/{stale-task-claims-PzFee70R.js → stale-task-claims-DMRLb5R2.js} +5 -5
  411. package/server/{staleness-D8UTEXV5.js → staleness-CxZaIhrn.js} +1 -1
  412. package/server/{staleness-BjOAq9-d.js → staleness-r_dkMyMG.js} +1 -1
  413. package/server/{stall-sweeper-DOyIfeLR.js → stall-sweeper-CBWqSWV2.js} +8 -8
  414. package/server/{state-home-DhAZlk5k.js → state-home-DhsMqg8W.js} +2 -2
  415. package/server/{state-mapping-BVSs84bO.js → state-mapping-D2yC81Vy.js} +1 -1
  416. package/server/{state-migrate-CJKEwpB0.js → state-migrate-C2Ouyd6e.js} +6 -6
  417. package/server/{state-mirror-Do7pag7W.js → state-mirror-BPXciz84.js} +3 -3
  418. package/server/stuck-remediation-DALieAkx.js +2 -0
  419. package/server/stuck-remediation-kta3KN7c.js +774 -0
  420. package/server/{substrate-bug-weights-service-BTNjHBnl.js → substrate-bug-weights-service-D_ICP7TI.js} +3 -3
  421. package/server/{summary-fork-CvB7Oyq9.js → summary-fork-CojrFKb6.js} +2 -2
  422. package/server/{summary-fork-CZ88rhVx.js → summary-fork-DhhaFhxZ.js} +113 -30
  423. package/server/supervisor/{pane-composer-BaLLspSj.js → pane-composer-CoiVkGIt.js} +8 -1
  424. package/server/supervisor/{paths-D6XUcR_g.js → paths-DTGbtcaP.js} +8 -4
  425. package/server/supervisor/pty-supervisor.js +3 -3
  426. package/server/supervisor/{pty-token-DjjHxoCq.js → pty-token-GVqnvU3U.js} +2 -2
  427. package/server/supervisor-DSSWo4M2.js +2 -0
  428. package/server/{supervisor-D4v0WfiQ.js → supervisor-DqH-laVL.js} +4 -4
  429. package/server/{swarm-readiness-D8R-LWX5.js → swarm-readiness-LF8ZF_hc.js} +3 -3
  430. package/server/{synthesis-verdict-N5Z11pg7.js → synthesis-verdict-CGFF8uQI.js} +2 -2
  431. package/server/{synthesis-verdict-B6wvLGcA.js → synthesis-verdict-DSoOFUIV.js} +1 -1
  432. package/server/{system-prerequisites-BbGZ_WHF.js → system-prerequisites-Lsx0jUUV.js} +2 -2
  433. package/server/{teardown-workspace-CYend-KY.js → teardown-workspace-DMwomEG1.js} +16 -16
  434. package/server/{test-agent-queue-BUtWhNcc.js → test-agent-queue-Cu0D6BYe.js} +6 -6
  435. package/server/{test-verdict-BWm3hgDj.js → test-verdict-9mvl7pQn.js} +1 -1
  436. package/server/{test-verdict-BWtRmdiR.js → test-verdict-oNSv1rVr.js} +2 -2
  437. package/server/{tldr-daemon-CneJ24eL.js → tldr-daemon-CRSAkhBx.js} +1 -1
  438. package/server/{tldr-daemon-CMVBT4kT.js → tldr-daemon-McqCk2X7.js} +2 -2
  439. package/server/tmux-CYucGrTl.js +4 -0
  440. package/server/{tmux-BqXzRuaH.js → tmux-wnT_hg-s.js} +91 -19
  441. package/server/{token-CO3INKbh.js → token-BdfZLRg1.js} +2 -2
  442. package/server/{token-util-DyJJyX_B.js → token-util-Crcay9j_.js} +1 -1
  443. package/server/token-util-DfUS3Lpp.js +3 -0
  444. package/server/{tracker-config-DVzhaUxO.js → tracker-config-tfAOWgng.js} +2 -2
  445. package/server/{tracker-utils-xnVJVrrO.js → tracker-utils-Dbg_pVZg.js} +2 -2
  446. package/server/{traefik-connect-A5k54mCv.js → traefik-connect-DoQvQ6oJ.js} +1 -1
  447. package/server/{tunnel-DauSR-rs.js → tunnel-B1MNIgkL.js} +1 -1
  448. package/server/{tunnel-CwOnS-PB.js → tunnel-skW68j9B.js} +3 -3
  449. package/server/{typed-errors-B-gfU2RB.js → typed-errors-CZ3GFBvo.js} +1 -1
  450. package/server/{typed-errors-DzC4zXbI.js → typed-errors-DXqf3RnP.js} +1 -1
  451. package/server/{types-DjpLVpsj.js → types-PW4zkxCM.js} +1 -1
  452. package/server/{types-DbxY2QB6.js → types-pLpbsNto.js} +1 -1
  453. package/server/{uat-failure-feedback-BVqsWlrr.js → uat-failure-feedback-ly8ZwtfC.js} +5 -5
  454. package/server/{uat-promote-verification-DmG097QS.js → uat-promote-verification-BBaMwfdc.js} +5 -5
  455. package/server/{uat-train-DVUNW03P.js → uat-train-BBEiYSep.js} +0 -0
  456. package/server/{uat-train-COSy-vEX.js → uat-train-D7Ran2FB.js} +1 -1
  457. package/server/{validate-Dvv83iBx.js → validate-BYcBcBwg.js} +3 -3
  458. package/server/{validation-DlHafKzu.js → validation-BfG2jW5C.js} +9 -6
  459. package/server/{validation-BdCjzWLN.js → validation-nSrYiYvA.js} +1 -1
  460. package/server/{verification-artifact-CaSbxUVg.js → verification-artifact-Cmhgq4b_.js} +1 -1
  461. package/server/{verification-artifact-0Zku8N-W.js → verification-artifact-DglwaHke.js} +1 -1
  462. package/server/{verification-runner-DwP2fUEF.js → verification-runner-BEq5ZF-h.js} +53 -27
  463. package/server/{verification-runner-C6wdZda2.js → verification-runner-CFjAuv9u.js} +1 -1
  464. package/server/{vtt-parser-luerJpYT.js → vtt-parser-Va--tv27.js} +1 -1
  465. package/server/work-agent-prompt-BnhKNAg7.js +3 -0
  466. package/server/{work-agent-prompt--9AWNYwZ.js → work-agent-prompt-CaD2ue8m.js} +14 -14
  467. package/server/{work-agent-start-BNQO65W7.js → work-agent-start-0nJ-6UeA.js} +2 -2
  468. package/server/{work-agent-start-DkzseQFl.js → work-agent-start-D8NEN5KD.js} +1 -1
  469. package/server/workflows-BtHRlFIm.js +2 -0
  470. package/server/{workflows-BYwR2aIN.js → workflows-C7mxM1qc.js} +114 -41
  471. package/server/{workspace-iTnTycOB.js → workspace-BAhMgMaO.js} +3 -3
  472. package/server/{workspace-B-QJa3Ps.js → workspace-Dbqv9ehn.js} +1 -1
  473. package/server/{workspace-anchor-drift-CHiGg8iu.js → workspace-anchor-drift-B_3kyyxJ.js} +4 -4
  474. package/server/{workspace-anchor-drift-DTt6h2Em.js → workspace-anchor-drift-Bpa3xoni.js} +1 -1
  475. package/server/{workspace-config-D0CavVtz.js → workspace-config-D-bNq2CF.js} +1 -1
  476. package/server/{workspace-manager-5BKPV6SY.js → workspace-manager-BrbX90Rm.js} +1 -1
  477. package/server/{workspace-manager-W1OnbvU5.js → workspace-manager-CM8RCrSc.js} +17 -17
  478. package/server/{workspace-metadata-tbbevEmP.js → workspace-metadata-BEOwJSdK.js} +1 -1
  479. package/server/{workspace-metadata-dJhXvZGQ.js → workspace-metadata-Cu6yfxBS.js} +2 -2
  480. package/server/{workspaces-BlpbOPZ7.js → workspaces-C7LAuZfe.js} +140 -709
  481. package/sync-sources/dev-skills/pan-style-guide/SKILL.md +90 -15
  482. package/sync-sources/hooks/linear-mcp-auth-hook +6 -1
  483. package/sync-sources/rules/agent-message-delivery.md +21 -14
  484. package/sync-sources/rules/handoff-isolate-cwd.md +4 -4
  485. package/sync-sources/rules/pan-handoff-focus-limit.md +14 -5
  486. package/sync-sources/rules/ste-writing.md +17 -0
  487. package/sync-sources/rules/work-agents-via-pan.md +2 -1
  488. package/sync-sources/rules/writing-style.md +3 -2
  489. package/sync-sources/skills/{skill-creator → claude-skill-creator}/SKILL.md +1 -1
  490. package/sync-sources/skills/{skill-creator → claude-skill-creator}/scripts/init_skill.py +1 -1
  491. package/sync-sources/skills/{skill-creator → claude-skill-creator}/scripts/package_skill.py +1 -1
  492. package/sync-sources/skills/pan-gauntlet-loop/SKILL.md +230 -0
  493. package/sync-sources/skills/pan-gauntlet-loop/assets/PROMPT.template.md +92 -0
  494. package/sync-sources/skills/pan-gauntlet-loop/assets/REFERENCE-BAR.template.md +53 -0
  495. package/sync-sources/skills/pan-gauntlet-loop/assets/STYLE.template.md +41 -0
  496. package/sync-sources/skills/pan-gauntlet-loop/assets/gauntlet-index.html +237 -0
  497. package/sync-sources/skills/pan-gauntlet-loop/references/domains.md +106 -0
  498. package/sync-sources/skills/pan-handoff/SKILL.md +24 -6
  499. package/sync-sources/skills/pan-help/SKILL.md +1 -1
  500. package/sync-sources/skills/pan-peer-review/SKILL.md +3 -3
  501. package/sync-sources/skills/pan-restart/SKILL.md +6 -3
  502. package/sync-sources/skills/pan-start/SKILL.md +3 -0
  503. package/sync-sources/skills/pan-swarm/SKILL.md +32 -44
  504. package/sync-sources/skills/pan-sync/SKILL.md +1 -1
  505. package/server/activity-logger-BejO16Am.js +0 -3
  506. package/server/agent-state-DH_-Jkua.js +0 -3
  507. package/server/agents-megfmQHM.js +0 -3
  508. package/server/archive-planning-C-H9cM_J.js +0 -2
  509. package/server/build-info-PQlh_Rhb.js +0 -2
  510. package/server/cli-TaZspPHS.js +0 -2
  511. package/server/cliproxy-36ncAXlu.js +0 -3
  512. package/server/context-layers-CF6zHws4.js +0 -4
  513. package/server/conversations-AnGJ5rtX.js +0 -3
  514. package/server/deacon-BEH-IY0v.js +0 -5
  515. package/server/deacon-swarm-BHX-kR1b.js +0 -2
  516. package/server/deacon-swarm-BiLfNm_v.js +0 -1522
  517. package/server/dead-end-trip-BWpDg1Qd.js +0 -2
  518. package/server/delivery-cJM6zRjJ.js +0 -3
  519. package/server/deploy-queue-CmVBZEja.js +0 -2
  520. package/server/dist-VKBfkdi7.js +0 -3
  521. package/server/durable-review-pipeline-DgcVCYDL.js +0 -3
  522. package/server/factory-D4V2wd_V.js +0 -717
  523. package/server/forge-CrP1L3i6.js +0 -2
  524. package/server/hume-1ubD_6O7.js +0 -3
  525. package/server/inspect-agent-CfxERkNt.js +0 -2
  526. package/server/merge-ops-DtHx17Vd.js +0 -2
  527. package/server/merge-rebase-BvB4UuNS.js +0 -2
  528. package/server/project-repos-BJiShUsN.js +0 -3
  529. package/server/providers-CStNGwze.js +0 -3
  530. package/server/public/assets/index-BFEwfmqX.js +0 -860
  531. package/server/public/assets/index-_USwyTAT.css +0 -1
  532. package/server/public/assets/mermaid-GHXKKRXX-Dsln95SK.js +0 -1
  533. package/server/pull-requests-C1Cqp2yo.js +0 -2
  534. package/server/rally-CjayjUIl.js +0 -3
  535. package/server/resume-D7JuMCRQ.js +0 -3
  536. package/server/review-agent-BUNTVJK2.js +0 -2
  537. package/server/settings-DBWB1gsG.js +0 -2
  538. package/server/specialists-D8gsOCwh.js +0 -3
  539. package/server/specs-BqkrRnU9.js +0 -3
  540. package/server/stuck-remediation-Di5JYkoo.js +0 -1164
  541. package/server/stuck-remediation-TNM1VhZb.js +0 -2
  542. package/server/supervisor-DX8VsPnb.js +0 -2
  543. package/server/tmux-CqNapnrr.js +0 -4
  544. package/server/token-util-Bu8bPF9f.js +0 -3
  545. package/server/workflows-Cf4LAnhg.js +0 -2
@@ -1,9 +1,10 @@
1
- import { c as init_activity_logger, r as emitActivityEntryOnce } from "./activity-logger-BAVLrkR7.js";
2
- import { S as init_tmux } from "./tmux-BqXzRuaH.js";
3
- import { a as init_git_utils, c as rehydrateHeadAnchor, u as snapshotWorkspaceHeadsPromise } from "./git-utils-DV4B9TRl.js";
4
- import { o as init_synthesis_verdict, s as readLatestSynthesisVerdictAsync } from "./synthesis-verdict-N5Z11pg7.js";
5
- import { t as getCloisterEventStore } from "./event-store-provider-BKvk2rDj.js";
6
- import { t as recordReviewVerdict } from "./review-verdict-writer-CKaJWp75.js";
1
+ import { i as emitActivityEntryOnce, l as init_activity_logger } from "./activity-logger-SlTXYCVf.js";
2
+ import { C as init_tmux } from "./tmux-wnT_hg-s.js";
3
+ import { a as init_git_utils, c as rehydrateHeadAnchor, u as snapshotWorkspaceHeadsPromise } from "./git-utils-BdHk8y7g.js";
4
+ import { o as init_synthesis_verdict, s as readLatestSynthesisVerdictAsync } from "./synthesis-verdict-CGFF8uQI.js";
5
+ import { t as getCloisterEventStore } from "./event-store-provider-Bu1Qrg6v.js";
6
+ import { t as getAgentEffectiveLastActivityMs } from "./agent-idle-D-UQ7gDv.js";
7
+ import { t as recordReviewVerdict } from "./review-verdict-writer-Cy_1pnIj.js";
7
8
  import "effect";
8
9
  import "fs";
9
10
  import "path";
@@ -136,7 +137,8 @@ function evaluateReviewConvoyLiveness(issueId, status, agents, now = Date.now())
136
137
  return agentIssue === issueUpper && role === "review";
137
138
  });
138
139
  const coordinatorId = `agent-${issueId.toLowerCase()}-review`;
139
- if (reviewAgents.some((agent) => agent.id === coordinatorId && (agent.status === "stopped" || agent.status === "error"))) return {
140
+ const coordinator = reviewAgents.find((agent) => agent.id === coordinatorId);
141
+ if (coordinator?.status === "stopped" || coordinator?.status === "error") return {
140
142
  active: false,
141
143
  reason: "coordinator stopped"
142
144
  };
@@ -145,10 +147,17 @@ function evaluateReviewConvoyLiveness(issueId, status, agents, now = Date.now())
145
147
  active: false,
146
148
  reason: "review watchdog expired"
147
149
  };
148
- for (const agent of reviewAgents) {
150
+ const currentRunId = coordinator?.reviewRunId;
151
+ const currentReviewAgents = currentRunId ? reviewAgents.filter((agent) => agent.reviewRunId === currentRunId) : reviewAgents;
152
+ for (const agent of currentReviewAgents) {
149
153
  if (agent.status === "stopped" || agent.status === "error") continue;
150
- const lastActivity = reviewTimestampMs(agent.lastActivity ?? void 0);
151
- if (!Number.isFinite(lastActivity) || now - lastActivity < 9e5) return {
154
+ const persistedLastActivity = reviewTimestampMs(agent.lastActivity ?? void 0);
155
+ if (!Number.isFinite(persistedLastActivity) || now - persistedLastActivity < 9e5) return {
156
+ active: true,
157
+ reason: `active review agent ${agent.id}`
158
+ };
159
+ const effectiveLastActivity = getAgentEffectiveLastActivityMs(agent.id);
160
+ if (effectiveLastActivity !== null && now - effectiveLastActivity < 9e5) return {
152
161
  active: true,
153
162
  reason: `active review agent ${agent.id}`
154
163
  };
@@ -161,4 +170,4 @@ function evaluateReviewConvoyLiveness(issueId, status, agents, now = Date.now())
161
170
  //#endregion
162
171
  export { observeActiveReviewArtifact as a, convergeRowFromVerdictOfRecord as i, reviewTimestampMs as n, REVIEW_SUB_ROLES as r, evaluateReviewConvoyLiveness as t };
163
172
 
164
- //# sourceMappingURL=review-convoy-liveness-DfF9eXjI.js.map
173
+ //# sourceMappingURL=review-convoy-liveness-BBvyuRLC.js.map
@@ -1,2 +1,2 @@
1
- import { t as resolveReviewParentRunState } from "./review-run-recovery-7BKt2Es0.js";
1
+ import { t as resolveReviewParentRunState } from "./review-run-recovery-THHMKlXJ.js";
2
2
  export { resolveReviewParentRunState };
@@ -1,5 +1,5 @@
1
- import { D as saveAgentState, h as init_agent_state } from "./agent-state-Bb3UUxQm.js";
2
- import { a as PAN_DIRNAME, m as init_types } from "./types-DbxY2QB6.js";
1
+ import { _ as init_agent_state, k as saveAgentState } from "./agent-state-FABw8neJ.js";
2
+ import { a as PAN_DIRNAME, m as init_types } from "./types-pLpbsNto.js";
3
3
  import { join } from "node:path";
4
4
  import { Effect } from "effect";
5
5
  import { readdir, stat } from "node:fs/promises";
@@ -60,4 +60,4 @@ async function resolveReviewParentRunState(parent, options = {}) {
60
60
  //#endregion
61
61
  export { resolveReviewParentRunState as t };
62
62
 
63
- //# sourceMappingURL=review-run-recovery-7BKt2Es0.js.map
63
+ //# sourceMappingURL=review-run-recovery-THHMKlXJ.js.map
@@ -1,3 +1,3 @@
1
- import { _ as markWorkspaceStuck, d as getReviewStatusSync, f as getReviewStatusesSync, h as loadReviewStatuses, i as clearReviewStatus, p as init_review_status, t as FEEDBACK_DELIVERY_STUCK_REASON, w as setReviewStatusSync } from "./review-status-DBnR5t4z.js";
1
+ import { _ as markWorkspaceStuck, d as getReviewStatusSync, f as getReviewStatusesSync, h as loadReviewStatuses, i as clearReviewStatus, p as init_review_status, t as FEEDBACK_DELIVERY_STUCK_REASON, w as setReviewStatusSync } from "./review-status-DpniqzPT.js";
2
2
  init_review_status();
3
3
  export { FEEDBACK_DELIVERY_STUCK_REASON, clearReviewStatus, getReviewStatusSync, getReviewStatusesSync, loadReviewStatuses, markWorkspaceStuck, setReviewStatusSync };
@@ -1,18 +1,18 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { $ as readIssueRecord, $t as findProjectByPathSync, Fi as init_paths, Ht as init_state_read_home, On as resolveProjectFromIssueSync, Pi as getOverdeckHome, Ri as packageRoot, Wt as resolveStateReadHomeSync, Y as init_record, fn as init_projects, on as getProjectSync, p as loadConfigSync, q as getIssueWorkspacePath, t as init_config_yaml, tt as readIssueRecordSync } from "./config-yaml-BwOEANMr.js";
3
- import { a as emitActivityEntrySync, c as init_activity_logger, o as emitActivityTtsSync } from "./activity-logger-BAVLrkR7.js";
4
- import { a as updateIssueRecord, i as init_record_update } from "./record-update-D23jPU6b.js";
2
+ import { $ as readIssueRecord, $t as findProjectByPathSync, Hi as packageRoot, Ht as init_state_read_home, On as resolveProjectFromIssueSync, Ri as getOverdeckHome, Wt as resolveStateReadHomeSync, Y as init_record, fn as init_projects, on as getProjectSync, p as loadConfigSync, q as getIssueWorkspacePath, t as init_config_yaml, tt as readIssueRecordSync, zi as init_paths } from "./config-yaml-D60AnTIu.js";
3
+ import { l as init_activity_logger, o as emitActivityEntrySync, s as emitActivityTtsSync } from "./activity-logger-SlTXYCVf.js";
4
+ import { a as updateIssueRecord, i as init_record_update } from "./record-update-BPqpBu3O.js";
5
5
  import { n as truncateReviewStatusNote, t as init_review_status_limits } from "./review-status-limits-RG_QNh_k.js";
6
6
  import { n as readActiveReviewArtifactContext, t as init_agent_state_source } from "./agent-state-source-69g8dqMg.js";
7
- import { c as registerWorkStartVerdictAdapter, f as init_agent_state_sync, i as init_work_start_verdicts, n as readPipelineTelemetryAgentState, p as listOverdeckAgentStatesSync, s as registerVerdictPreservationStatusReader, t as init_pipeline_agent_reader } from "./pipeline-agent-reader-BLc43dVJ.js";
8
- import { d as init_cost_sync, i as getCostBreakdownByStageAndModelSync, o as getCostForIssueSync } from "./cost-sync-B-ADeXKY.js";
9
- import { a as registerCanonicalReviewStatusResolver, n as init_review_status_source, o as registerReviewStatusMapReader } from "./review-status-source-Ct912fv_.js";
10
- import { a as PAN_DIRNAME, f as WORKSPACE_RUNTIME_DIRNAME, m as init_types$3, r as PAN_CONTINUES_DIRNAME } from "./types-DbxY2QB6.js";
11
- import { o as init_lifecycle, r as XBRIEF_FILENAME_SUFFIX, t as LEGACY_VBRIEF_FILENAME_SUFFIX } from "./lifecycle-Bg44O-9x.js";
12
- import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-BmsLWM_2.js";
13
- import { c as getReviewStatusesFromDb, h as normalizeReviewStatusSync, i as getAllReviewStatusesFromDb, l as init_review_status_sync, m as init_review_status_normalize, p as upsertReviewStatusSync, r as deleteReviewStatus, s as getReviewStatusFromDbSync, t as clearWorkspaceStuck$1, u as markWorkspaceStuck$1 } from "./review-status-sync-B7V_Gg51.js";
14
- import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-eiE2nC6C.js";
15
- import { c as readMemoizedArtifactVerdict, o as init_synthesis_verdict } from "./synthesis-verdict-N5Z11pg7.js";
7
+ import { c as registerWorkStartVerdictAdapter, f as init_agent_state_sync, i as init_work_start_verdicts, n as readPipelineTelemetryAgentState, p as listOverdeckAgentStatesSync, s as registerVerdictPreservationStatusReader, t as init_pipeline_agent_reader } from "./pipeline-agent-reader-CeWhQzXC.js";
8
+ import { d as init_cost_sync, i as getCostBreakdownByStageAndModelSync, o as getCostForIssueSync } from "./cost-sync-DfmvLT9L.js";
9
+ import { a as registerCanonicalReviewStatusResolver, n as init_review_status_source, o as registerReviewStatusMapReader } from "./review-status-source-Jq0BXmn3.js";
10
+ import { a as PAN_DIRNAME, f as WORKSPACE_RUNTIME_DIRNAME, m as init_types$3, r as PAN_CONTINUES_DIRNAME } from "./types-pLpbsNto.js";
11
+ import { o as init_lifecycle, r as XBRIEF_FILENAME_SUFFIX, t as LEGACY_VBRIEF_FILENAME_SUFFIX } from "./lifecycle-DVXyUil2.js";
12
+ import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-p190L97e.js";
13
+ import { c as getReviewStatusesFromDb, h as normalizeReviewStatusSync, i as getAllReviewStatusesFromDb, l as init_review_status_sync, m as init_review_status_normalize, p as upsertReviewStatusSync, r as deleteReviewStatus, s as getReviewStatusFromDbSync, t as clearWorkspaceStuck$1, u as markWorkspaceStuck$1 } from "./review-status-sync-C6ZKTI8f.js";
14
+ import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-CyW-xSn4.js";
15
+ import { c as readMemoizedArtifactVerdict, o as init_synthesis_verdict } from "./synthesis-verdict-CGFF8uQI.js";
16
16
  import { basename, dirname, join } from "node:path";
17
17
  import { Data, Effect } from "effect";
18
18
  import { existsSync, readFileSync, readdirSync, statSync } from "fs";
@@ -6978,9 +6978,9 @@ var init_service = __esmMin((() => {
6978
6978
  //#region ../../lib/telemetry/pipeline.ts
6979
6979
  async function readCanonicalPipelineMembership(issueId) {
6980
6980
  const [membershipModule, gatherModule, recordModule] = await Promise.all([
6981
- import("./pipeline-membership-5qlRz5Qg.js"),
6982
- import("./pipeline-membership-gather-WhRc1yke.js"),
6983
- import("./record-By-wp6pg.js")
6981
+ import("./pipeline-membership-C9ykcjsn.js"),
6982
+ import("./pipeline-membership-gather-C9E22B2W.js"),
6983
+ import("./record-DYOg97Iv.js")
6984
6984
  ]);
6985
6985
  const project = recordModule.resolveProjectForIssue(issueId);
6986
6986
  if (!project) return false;
@@ -7078,6 +7078,10 @@ function mergeGateEligibility(status) {
7078
7078
  eligible: false,
7079
7079
  reason: "no review record"
7080
7080
  };
7081
+ if (status.retiredAt) return {
7082
+ eligible: false,
7083
+ reason: "retired"
7084
+ };
7081
7085
  if (status.reviewStatus !== "passed" && status.reviewStatus !== "skipped") return {
7082
7086
  eligible: false,
7083
7087
  reason: `review is ${status.reviewStatus}`
@@ -7128,7 +7132,8 @@ function loadReadyForMergeFlags(issueIds) {
7128
7132
  for (const key of journal.clearedFields ?? []) delete merged[key];
7129
7133
  merged.issueId = issueId;
7130
7134
  merged.updatedAt = journal.updatedAt;
7131
- merged.readyForMerge = (merged.blockerReasons?.length ?? 0) > 0 ? false : reviewGatesPassedSync(merged);
7135
+ const hasBlockers = (merged.blockerReasons?.length ?? 0) > 0;
7136
+ merged.readyForMerge = merged.retiredAt || hasBlockers ? false : reviewGatesPassedSync(merged);
7132
7137
  status = normalizeReviewStatusSync(merged);
7133
7138
  }
7134
7139
  }
@@ -7183,10 +7188,12 @@ function setReviewStatusSync(issueId, update, existing) {
7183
7188
  delete update.testStatus;
7184
7189
  delete update.testNotes;
7185
7190
  }
7191
+ const freshPrIdentity = update.prNumber !== void 0 && update.prNumber !== status.prNumber || update.prUrl !== void 0 && update.prUrl !== status.prUrl;
7186
7192
  const merged = settleMergedVerification({
7187
7193
  ...status,
7188
7194
  ...update
7189
7195
  });
7196
+ if (freshPrIdentity) merged.retiredAt = void 0;
7190
7197
  if (update.reviewStatus !== status.reviewStatus && [
7191
7198
  "passed",
7192
7199
  "blocked",
@@ -7224,7 +7231,7 @@ function setReviewStatusSync(issueId, update, existing) {
7224
7231
  timestamp: now,
7225
7232
  ...update.releaseNotes ? { notes: update.releaseNotes } : {}
7226
7233
  });
7227
- const readyForMerge = (merged.blockerReasons?.length ?? 0) > 0 || merged.uatStatus === "failed" ? false : update.readyForMerge !== void 0 ? update.readyForMerge : reviewGatesPassedSync(merged);
7234
+ const readyForMerge = Boolean(merged.retiredAt) || (merged.blockerReasons?.length ?? 0) > 0 || merged.uatStatus === "failed" ? false : update.readyForMerge !== void 0 ? update.readyForMerge : reviewGatesPassedSync(merged);
7228
7235
  const boundedHistory = rawHistory.slice(-20).map((entry) => ({
7229
7236
  ...entry,
7230
7237
  notes: entry.notes ? truncateReviewStatusNote(entry.notes) : void 0
@@ -7243,9 +7250,9 @@ function setReviewStatusSync(issueId, update, existing) {
7243
7250
  readyForMerge,
7244
7251
  history: boundedHistory
7245
7252
  });
7246
- if (readyForMerge && !status.readyForMerge && updated.prUrl) (async () => {
7253
+ if (readyForMerge && !status.readyForMerge && !updated.retiredAt && updated.prUrl) (async () => {
7247
7254
  try {
7248
- const { isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-C33lDk9Z.js");
7255
+ const { isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-BWziYCf3.js");
7249
7256
  if (!isGitHubAppConfigured()) return;
7250
7257
  const prMatch = updated.prUrl.match(/github\.com\/([^/]+)\/([^/]+)\/pull/);
7251
7258
  if (!prMatch) return;
@@ -7514,6 +7521,61 @@ async function deliverReviewVerdictFeedbackHostSide(issueId, status) {
7514
7521
  console.warn(`[review-status] host-side review feedback delivery for ${issueId} did not complete (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
7515
7522
  }
7516
7523
  }
7524
+ /**
7525
+ * PAN-3674: a pending review whose dispatch already ran (reviewSpawnedAt set)
7526
+ * but produced no live reviewer sessions is stranded by a failed spawn — the
7527
+ * 2026-08-13 PAN-3668 incident sat like this for 5h while the dashboard showed
7528
+ * a benign 'Pending'. needsReviewDispatch stands down once spawnedAt covers the
7529
+ * request, so without this repair nothing ever retries.
7530
+ */
7531
+ function isStrandedPendingReview(status, now = Date.now()) {
7532
+ if (status.reviewStatus !== "pending") return false;
7533
+ if (status.readyForMerge === true || status.mergeStatus === "merged") return false;
7534
+ if (status.verificationStatus !== "passed" && status.verificationStatus !== "skipped") return false;
7535
+ const spawned = status.reviewSpawnedAt;
7536
+ if (spawned === void 0 || spawned === null) return false;
7537
+ const spawnedMs = typeof spawned === "number" ? spawned : Date.parse(spawned);
7538
+ if (!Number.isFinite(spawnedMs)) return false;
7539
+ return now - spawnedMs >= STRANDED_REVIEW_SPAWN_AGE_MS;
7540
+ }
7541
+ function maybeRedispatchStrandedReviewHostSide(issueId, status) {
7542
+ if (!isStrandedPendingReview(status)) return;
7543
+ const last = strandedReviewRedispatchAt.get(issueId) ?? 0;
7544
+ if (Date.now() - last < STRANDED_REDISPATCH_COOLDOWN_MS) return;
7545
+ strandedReviewRedispatchAt.set(issueId, Date.now());
7546
+ redispatchStrandedReviewHostSide(issueId, status);
7547
+ }
7548
+ async function redispatchStrandedReviewHostSide(issueId, status) {
7549
+ try {
7550
+ const { listSessions } = await import("./tmux-CYucGrTl.js");
7551
+ const { isReviewSessionForIssue } = await import("./specialists-registry-BRLCi61y.js");
7552
+ if ((await Effect.runPromise(listSessions()).catch(() => [])).some((s) => isReviewSessionForIssue(s.name, void 0, issueId))) return;
7553
+ const { resolveProjectFromIssueSync } = await import("./projects-BMuEf14J.js");
7554
+ const resolved = resolveProjectFromIssueSync(issueId);
7555
+ if (!resolved) return;
7556
+ const { existsSync } = await import("fs");
7557
+ const workspace = join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
7558
+ if (!existsSync(workspace)) return;
7559
+ const { dispatchRegisteredReviewHostSide } = await import("./durable-review-pipeline-BOEZ0chh.js");
7560
+ const result = await dispatchRegisteredReviewHostSide({
7561
+ issueId,
7562
+ workspace,
7563
+ branch: `feature/${issueId.toLowerCase()}`,
7564
+ ...status.prUrl ? { prUrl: status.prUrl } : {}
7565
+ });
7566
+ if (!result) return;
7567
+ const message = result.success ? `${issueId} — stranded pending review re-dispatched after a failed spawn (PAN-3674): ${result.message ?? "ok"}` : `${issueId} — stranded pending review re-dispatch failed (PAN-3674): ${result.error ?? result.message ?? "unknown"}`;
7568
+ console.log(`[review-status] ${message}`);
7569
+ emitActivityEntrySync({
7570
+ source: "review",
7571
+ level: result.success ? "info" : "warn",
7572
+ issueId,
7573
+ message
7574
+ });
7575
+ } catch (err) {
7576
+ console.warn(`[review-status] stranded review re-dispatch for ${issueId} did not complete (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
7577
+ }
7578
+ }
7517
7579
  function maybeAutoDispatchReviewHostSide(issueId, status) {
7518
7580
  if (!needsReviewDispatch({
7519
7581
  reviewRequestedAt: status.reviewRequestedAt,
@@ -7522,6 +7584,7 @@ function maybeAutoDispatchReviewHostSide(issueId, status) {
7522
7584
  mergeStatus: status.mergeStatus,
7523
7585
  readyForMerge: status.readyForMerge
7524
7586
  })) {
7587
+ maybeRedispatchStrandedReviewHostSide(issueId, status);
7525
7588
  if (!isReviewRequestStale({ reviewRequestedAt: status.reviewRequestedAt }) || staleReviewRequestClearAttemptedAt.has(issueId)) return;
7526
7589
  staleReviewRequestClearAttemptedAt.set(issueId, Date.now());
7527
7590
  try {
@@ -7544,7 +7607,7 @@ function maybeAutoDispatchReviewHostSide(issueId, status) {
7544
7607
  }
7545
7608
  async function dispatchReviewHostSide(issueId, prUrl) {
7546
7609
  try {
7547
- const { hasDurableReviewPipelineDispatch, startRegisteredDurableReviewPipelineHostSide } = await import("./durable-review-pipeline-DgcVCYDL.js");
7610
+ const { hasDurableReviewPipelineDispatch, startRegisteredDurableReviewPipelineHostSide } = await import("./durable-review-pipeline-BOEZ0chh.js");
7548
7611
  if (!hasDurableReviewPipelineDispatch()) {
7549
7612
  if (!loggedMissingPipelineHandler) {
7550
7613
  loggedMissingPipelineHandler = true;
@@ -7572,13 +7635,13 @@ function maybeRecoverTestVerdictHostSide(issueId, status) {
7572
7635
  }
7573
7636
  async function recoverTestVerdictHostSide(issueId) {
7574
7637
  try {
7575
- const { resolveProjectFromIssueSync } = await import("./projects-DvPEAP18.js");
7638
+ const { resolveProjectFromIssueSync } = await import("./projects-BMuEf14J.js");
7576
7639
  const resolved = resolveProjectFromIssueSync(issueId);
7577
7640
  if (!resolved) return;
7578
7641
  const { existsSync } = await import("fs");
7579
7642
  const workspace = join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
7580
7643
  if (!existsSync(workspace)) return;
7581
- const { readTestVerdictArtifact } = await import("./test-verdict-BWm3hgDj.js");
7644
+ const { readTestVerdictArtifact } = await import("./test-verdict-9mvl7pQn.js");
7582
7645
  const artifact = readTestVerdictArtifact(workspace);
7583
7646
  if (!artifact) return;
7584
7647
  setReviewStatusSync(issueId, {
@@ -7619,12 +7682,13 @@ function resetPipelineVerdictsForWorkStartSync(issueId, options = {}) {
7619
7682
  reviewRequestedAt: void 0,
7620
7683
  reviewSpawnedAt: void 0,
7621
7684
  conflictResolutionDispatchedAt: void 0,
7622
- blockerReasons: void 0
7685
+ blockerReasons: void 0,
7686
+ retiredAt: void 0
7623
7687
  });
7624
7688
  }
7625
7689
  async function deliverUatFailureToWorkAgentHostSide(issueId, status) {
7626
7690
  try {
7627
- const { relayUatFailureFeedbackPromise } = await import("./uat-failure-feedback-BVqsWlrr.js");
7691
+ const { relayUatFailureFeedbackPromise } = await import("./uat-failure-feedback-ly8ZwtfC.js");
7628
7692
  await relayUatFailureFeedbackPromise({
7629
7693
  issueId,
7630
7694
  uatNotes: status.uatNotes,
@@ -7636,7 +7700,7 @@ async function deliverUatFailureToWorkAgentHostSide(issueId, status) {
7636
7700
  }
7637
7701
  async function clearUatFailureAnchorHostSide(issueId) {
7638
7702
  try {
7639
- const { clearUatFailureFeedbackAnchor } = await import("./uat-failure-feedback-BVqsWlrr.js");
7703
+ const { clearUatFailureFeedbackAnchor } = await import("./uat-failure-feedback-ly8ZwtfC.js");
7640
7704
  clearUatFailureFeedbackAnchor(issueId);
7641
7705
  } catch (err) {
7642
7706
  console.warn(`[review-status] host-side UAT-failure anchor clear for ${issueId} did not complete (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
@@ -7644,13 +7708,13 @@ async function clearUatFailureAnchorHostSide(issueId) {
7644
7708
  }
7645
7709
  async function deliverTestFailureToWorkAgentHostSide(issueId, status) {
7646
7710
  try {
7647
- const { resolveProjectFromIssueSync } = await import("./projects-DvPEAP18.js");
7711
+ const { resolveProjectFromIssueSync } = await import("./projects-BMuEf14J.js");
7648
7712
  const resolved = resolveProjectFromIssueSync(issueId);
7649
7713
  const workspace = resolved ? join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`) : void 0;
7650
7714
  const notes = status.testNotes;
7651
7715
  let feedbackPath;
7652
7716
  try {
7653
- const { writeFeedbackFile } = await import("./feedback-writer-DfuVjvH0.js");
7717
+ const { writeFeedbackFile } = await import("./feedback-writer-BzN4qvaP.js");
7654
7718
  const r = await Effect.runPromise(writeFeedbackFile({
7655
7719
  issueId,
7656
7720
  workspacePath: workspace,
@@ -7662,10 +7726,10 @@ async function deliverTestFailureToWorkAgentHostSide(issueId, status) {
7662
7726
  if (r.success) feedbackPath = r.filePath;
7663
7727
  } catch {}
7664
7728
  const message = `SPECIALIST FEEDBACK: test-agent reported FAILED for ${issueId}.\n\n${feedbackPath ? `MUST READ: ${feedbackPath}\n\n` : ""}${notes ? `${notes.slice(0, 400)}\n\n` : ""}Fix the failing tests, commit and push, then re-run pan done ${issueId}. Do NOT stop at the prompt.`;
7665
- const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-CkyLYohm.js");
7729
+ const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-DSVpi0gT.js");
7666
7730
  const target = await resolveIssueFeedbackTarget(issueId);
7667
7731
  if ("agentId" in target) {
7668
- const { messageAgent } = await import("./agents-megfmQHM.js");
7732
+ const { messageAgent } = await import("./agents-DixZjXWm.js");
7669
7733
  await messageAgent(target.agentId, message, "internal", { owesRework: true });
7670
7734
  console.log(`[review-status] delivered test failure to ${target.agentId} for ${issueId} (host-side)`);
7671
7735
  } else await surfaceIssueFeedbackNeedsYou(issueId, target.reason, {
@@ -7720,24 +7784,26 @@ function clearStuckMergeStatuses() {
7720
7784
  }
7721
7785
  }
7722
7786
  /**
7723
- * On server startup, fix any issues where review+test both passed and
7724
- * verificationStatus is not 'failed', but readyForMerge is stuck at false.
7725
- *
7726
- * This happens when:
7727
- * 1. A merge attempt was made (merging → verifying)
7728
- * 2. The server restarted while verifying — clearStuckMergeStatuses reset mergeStatus to 'pending'
7729
- * 3. At restart time, verificationStatus was 'pending' (reset by the request-review cycle)
7730
- * 4. The old verificationSatisfied check blocked readyForMerge because of 'pending' status
7731
- *
7732
- * With verificationSatisfied now only blocking on 'failed', these issues should be
7733
- * re-evaluated and readyForMerge restored so they reappear on the Awaiting Merge page.
7787
+ * Restore merge eligibility after a restart only when every gate passes and
7788
+ * canonical pipeline membership confirms that the issue still has an open PR.
7734
7789
  */
7735
- function fixStuckReadyForMerge() {
7790
+ async function fixStuckReadyForMerge(gatherEligibility) {
7736
7791
  const statuses = loadReviewStatuses();
7737
- const stuck = Object.values(statuses).filter((s) => s.readyForMerge === false && s.reviewStatus === "passed" && (s.testStatus === "passed" || s.testStatus === "skipped") && verificationSatisfied(s) && (s.mergeStatus === "pending" || s.mergeStatus === "queued" || s.mergeStatus === void 0 || s.mergeStatus === null) && (s.uatStatus === void 0 || s.uatStatus === "passed"));
7792
+ const stuck = Object.values(statuses).filter((s) => !s.retiredAt && s.readyForMerge === false && s.reviewStatus === "passed" && (s.testStatus === "passed" || s.testStatus === "skipped") && verificationSatisfied(s) && (s.mergeStatus === "pending" || s.mergeStatus === "queued" || s.mergeStatus === void 0 || s.mergeStatus === null) && (s.uatStatus === void 0 || s.uatStatus === "passed"));
7738
7793
  if (stuck.length === 0) return;
7794
+ const mergeEligibility = await import("./merge-eligibility-C4rTS97F.js");
7795
+ const memberships = await (gatherEligibility ?? mergeEligibility.gatherMergeEligibility)(stuck.map((status) => status.issueId));
7739
7796
  console.log(`[review-status] Restoring readyForMerge for ${stuck.length} issue(s) with passed review+test`);
7740
7797
  for (const s of stuck) {
7798
+ const membership = memberships.get(s.issueId.toUpperCase());
7799
+ if (!membership || !mergeEligibility.isMergeEligible(membership)) {
7800
+ if (membership) setReviewStatusSync(s.issueId, {
7801
+ readyForMerge: false,
7802
+ retiredAt: (/* @__PURE__ */ new Date()).toISOString()
7803
+ });
7804
+ console.log(`[review-status] skipping ${s.issueId} — pipeline membership is ${membership?.bucket ?? "unavailable"}, not merge-eligible`);
7805
+ continue;
7806
+ }
7741
7807
  console.log(`[review-status] Restoring readyForMerge=true for ${s.issueId} (verif=${s.verificationStatus}, merge=${s.mergeStatus})`);
7742
7808
  setReviewStatusSync(s.issueId, { readyForMerge: true });
7743
7809
  }
@@ -7861,7 +7927,7 @@ function setAutoMerge(issueId, autoMerge) {
7861
7927
  console.error(`[review-status] Failed to set autoMerge for ${issueId}:`, err);
7862
7928
  }
7863
7929
  }
7864
- var DEFAULT_STATUS_FILE, reviewVerdictFeedbackDelivery, reviewDispatchAttemptAt, staleReviewRequestClearAttemptedAt, REVIEW_AUTO_DISPATCH_THROTTLE_MS, loggedMissingPipelineHandler, testVerdictRecoveryAt, TEST_VERDICT_RECOVERY_THROTTLE_MS, FEEDBACK_DELIVERY_STUCK_REASON, ReviewStatusError, setReviewStatus, getReviewStatus;
7930
+ var DEFAULT_STATUS_FILE, reviewVerdictFeedbackDelivery, reviewDispatchAttemptAt, staleReviewRequestClearAttemptedAt, REVIEW_AUTO_DISPATCH_THROTTLE_MS, STRANDED_REVIEW_SPAWN_AGE_MS, STRANDED_REDISPATCH_COOLDOWN_MS, strandedReviewRedispatchAt, loggedMissingPipelineHandler, testVerdictRecoveryAt, TEST_VERDICT_RECOVERY_THROTTLE_MS, FEEDBACK_DELIVERY_STUCK_REASON, ReviewStatusError, setReviewStatus, getReviewStatus;
7865
7931
  var init_review_status = __esmMin((() => {
7866
7932
  init_pipeline_notifier();
7867
7933
  init_activity_logger();
@@ -7895,6 +7961,9 @@ var init_review_status = __esmMin((() => {
7895
7961
  reviewDispatchAttemptAt = /* @__PURE__ */ new Map();
7896
7962
  staleReviewRequestClearAttemptedAt = /* @__PURE__ */ new Map();
7897
7963
  REVIEW_AUTO_DISPATCH_THROTTLE_MS = 3e4;
7964
+ STRANDED_REVIEW_SPAWN_AGE_MS = 20 * 6e4;
7965
+ STRANDED_REDISPATCH_COOLDOWN_MS = 10 * 6e4;
7966
+ strandedReviewRedispatchAt = /* @__PURE__ */ new Map();
7898
7967
  loggedMissingPipelineHandler = false;
7899
7968
  testVerdictRecoveryAt = /* @__PURE__ */ new Map();
7900
7969
  TEST_VERDICT_RECOVERY_THROTTLE_MS = 6e4;
@@ -7930,4 +7999,4 @@ var init_review_status = __esmMin((() => {
7930
7999
  //#endregion
7931
8000
  export { resolvePipelineTelemetryContext as A, needsReviewDispatch as B, setReviewStatus as C, capturePipelineStage as D, init_review_verdict_guards as E, init_install_id as F, findBlockingFindings as G, init_review_status_reconcile as H, init_config as I, findWorkspaceVerdictConflicts as J, init_review_findings as K, resolveTelemetryEnabled as L, init_service as M, synchronizeAnalyticsServices as N, capturePipelineStageForIssue as O, getOrCreateInstallId as P, readWorkspaceVerdictFallback as Q, telemetryEnvironmentForcesOff as R, setDeaconIgnored as S, clearSupersededReviewInfrastructureFailure as T, reviewGatesPassedSync as U, MERGED_VERIFICATION_REASON as V, verificationSatisfied as W, readJournalStatus as X, init_review_status_record_sync as Y, readJournalStatusSync as Z, markWorkspaceStuck as _, clearStuckMergeStatuses as a, resetPipelineVerdictsForWorkStartSync as b, fixStuckCommentedReviews as c, getReviewStatusSync as d, getReviewStatusesSync as f, loadReviewStatusesForIssues as g, loadReviewStatuses as h, clearReviewStatus as i, getAnalyticsService as j, init_pipeline as k, fixStuckReadyForMerge as l, loadReadyForMergeFlags as m, ReviewStatusError as n, clearWorkspaceStuck as o, init_review_status as p, drainWorkspaceVerdictFallback as q, clearFeedbackDeliveryStuck as r, dispatchReviewHostSide as s, FEEDBACK_DELIVERY_STUCK_REASON as t, getReviewStatus as u, mergeGateEligibility as v, setReviewStatusSync as w, setAutoMerge as x, registerReviewVerdictFeedbackDelivery as y, init_review_dispatch_decision as z };
7932
8001
 
7933
- //# sourceMappingURL=review-status-DBnR5t4z.js.map
8002
+ //# sourceMappingURL=review-status-DpniqzPT.js.map
@@ -1,5 +1,5 @@
1
- import { d as getReviewStatusSync, p as init_review_status } from "./review-status-DBnR5t4z.js";
2
- import { t as enrichReviewStatus } from "./review-status-enrichment-D-rQshu6.js";
1
+ import { d as getReviewStatusSync, p as init_review_status } from "./review-status-DpniqzPT.js";
2
+ import { t as enrichReviewStatus } from "./review-status-enrichment-PDI4-faj.js";
3
3
  import { Effect } from "effect";
4
4
  import { isDeepStrictEqual } from "node:util";
5
5
  //#region review-status-emit.ts
@@ -47,4 +47,4 @@ function emitReviewStatusChanged(append, issueId, status) {
47
47
  //#endregion
48
48
  export { sameCanonicalReviewStatus as n, emitReviewStatusChanged as t };
49
49
 
50
- //# sourceMappingURL=review-status-emit-Cg4tOb8U.js.map
50
+ //# sourceMappingURL=review-status-emit-D7sM720S.js.map
@@ -1,5 +1,5 @@
1
- import { On as resolveProjectFromIssueSync, fn as init_projects } from "./config-yaml-BwOEANMr.js";
2
- import { A as listSessionNames, S as init_tmux } from "./tmux-BqXzRuaH.js";
1
+ import { On as resolveProjectFromIssueSync, fn as init_projects } from "./config-yaml-D60AnTIu.js";
2
+ import { C as init_tmux, j as listSessionNames } from "./tmux-wnT_hg-s.js";
3
3
  import { Data, Effect } from "effect";
4
4
  import { existsSync } from "fs";
5
5
  import { join } from "path";
@@ -124,4 +124,4 @@ const enrichReviewStatus = (issueId, status) => Effect.tryPromise({
124
124
  //#endregion
125
125
  export { enrichReviewStatusFromSessions as n, enrichReviewStatus as t };
126
126
 
127
- //# sourceMappingURL=review-status-enrichment-D-rQshu6.js.map
127
+ //# sourceMappingURL=review-status-enrichment-PDI4-faj.js.map
@@ -1,3 +1,3 @@
1
- import { n as init_review_status_source, s as resolveCanonicalReviewStatus } from "./review-status-source-Ct912fv_.js";
1
+ import { n as init_review_status_source, s as resolveCanonicalReviewStatus } from "./review-status-source-Jq0BXmn3.js";
2
2
  init_review_status_source();
3
3
  export { resolveCanonicalReviewStatus };
@@ -57,4 +57,4 @@ var init_review_status_source = __esmMin((() => {
57
57
  //#endregion
58
58
  export { registerCanonicalReviewStatusResolver as a, readReviewStatusMap as i, init_review_status_source as n, registerReviewStatusMapReader as o, isRoleTerminal as r, resolveCanonicalReviewStatus as s, classifyAdvancingSessionLifecycle as t };
59
59
 
60
- //# sourceMappingURL=review-status-source-Ct912fv_.js.map
60
+ //# sourceMappingURL=review-status-source-Jq0BXmn3.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-KTp9KV9u.js";
2
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CJRi_5Wu.js";
3
3
  import { t as init_review_status_limits } from "./review-status-limits-RG_QNh_k.js";
4
4
  import { Effect } from "effect";
5
5
  //#region ../../lib/review-status-normalize.ts
@@ -63,6 +63,7 @@ function rowToReviewStatus(row, history) {
63
63
  releaseNotes: row.release_notes ?? void 0,
64
64
  updatedAt: msToIso(row.updated_at) ?? (/* @__PURE__ */ new Date(0)).toISOString(),
65
65
  readyForMerge: row.ready_for_merge === 1,
66
+ retiredAt: msToIso(row.retired_at),
66
67
  autoRequeueCount: row.auto_requeue_count ?? void 0,
67
68
  mergeRetryCount: row.merge_retry_count ?? void 0,
68
69
  prUrl: row.pr_url ?? void 0,
@@ -132,9 +133,9 @@ function upsertReviewStatusSync(status) {
132
133
  strike_ready_head, strike_ready_at, strike_landing_state,
133
134
  strike_recovery_count, strike_transport_retry_count,
134
135
  strike_next_attempt_at, strike_landing_attempts,
135
- review_cycle_history
136
+ review_cycle_history, retired_at
136
137
  ) VALUES (
137
- ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
138
+ ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
138
139
  )
139
140
  ON CONFLICT(issue_id) DO UPDATE SET
140
141
  review_status = excluded.review_status,
@@ -187,8 +188,9 @@ function upsertReviewStatusSync(status) {
187
188
  strike_transport_retry_count = excluded.strike_transport_retry_count,
188
189
  strike_next_attempt_at = excluded.strike_next_attempt_at,
189
190
  strike_landing_attempts = excluded.strike_landing_attempts,
190
- review_cycle_history = excluded.review_cycle_history
191
- `).run(s.issueId, s.reviewStatus, s.testStatus, s.uatStatus ?? null, s.mergeStatus ?? null, s.inspectStatus ?? null, null, isoToMs(s.inspectStartedAt), s.inspectBeadId ?? null, s.inspectOwnerSession ?? null, s.verificationStatus ?? null, null, s.verificationCycleCount ?? null, s.verificationMaxCycles ?? null, null, null, null, null, s.releaseStatus ?? null, s.releaseNotes ?? null, isoToMs(s.updatedAt) ?? Date.now(), s.readyForMerge ? 1 : 0, s.autoRequeueCount ?? null, s.mergeRetryCount ?? null, s.prUrl ?? null, s.prHeadSha ?? null, s.prNumber ?? null, s.stuck ? 1 : 0, s.stuckReason ?? null, isoToMs(s.stuckAt), s.stuckDetails ?? null, s.reviewedAtCommit ?? null, isoToMs(s.reviewSpawnedAt), isoToMs(s.conflictResolutionDispatchedAt), s.testRetryCount ?? null, s.reviewRetryCount ?? null, isoToMs(s.recoveryStartedAt), s.deaconIgnored ? 1 : 0, isoToMs(s.deaconIgnoredAt), s.deaconIgnoredReason ?? null, s.blockerReasons ? JSON.stringify(s.blockerReasons) : null, s.lastVerifiedCommit ?? null, s.mergeStep ?? null, s.autoMerge === void 0 ? null : s.autoMerge ? 1 : 0, s.strikeReadyHead ?? null, isoToMs(s.strikeReadyAt), s.strikeLandingState ?? null, s.strikeRecoveryCount ?? null, s.strikeTransportRetryCount ?? null, isoToMs(s.strikeNextAttemptAt), s.strikeLandingAttempts ? JSON.stringify(s.strikeLandingAttempts) : null, s.reviewCycleHistory ? JSON.stringify(s.reviewCycleHistory) : null);
191
+ review_cycle_history = excluded.review_cycle_history,
192
+ retired_at = excluded.retired_at
193
+ `).run(s.issueId, s.reviewStatus, s.testStatus, s.uatStatus ?? null, s.mergeStatus ?? null, s.inspectStatus ?? null, null, isoToMs(s.inspectStartedAt), s.inspectBeadId ?? null, s.inspectOwnerSession ?? null, s.verificationStatus ?? null, null, s.verificationCycleCount ?? null, s.verificationMaxCycles ?? null, null, null, null, null, s.releaseStatus ?? null, s.releaseNotes ?? null, isoToMs(s.updatedAt) ?? Date.now(), s.readyForMerge ? 1 : 0, s.autoRequeueCount ?? null, s.mergeRetryCount ?? null, s.prUrl ?? null, s.prHeadSha ?? null, s.prNumber ?? null, s.stuck ? 1 : 0, s.stuckReason ?? null, isoToMs(s.stuckAt), s.stuckDetails ?? null, s.reviewedAtCommit ?? null, isoToMs(s.reviewSpawnedAt), isoToMs(s.conflictResolutionDispatchedAt), s.testRetryCount ?? null, s.reviewRetryCount ?? null, isoToMs(s.recoveryStartedAt), s.deaconIgnored ? 1 : 0, isoToMs(s.deaconIgnoredAt), s.deaconIgnoredReason ?? null, s.blockerReasons ? JSON.stringify(s.blockerReasons) : null, s.lastVerifiedCommit ?? null, s.mergeStep ?? null, s.autoMerge === void 0 ? null : s.autoMerge ? 1 : 0, s.strikeReadyHead ?? null, isoToMs(s.strikeReadyAt), s.strikeLandingState ?? null, s.strikeRecoveryCount ?? null, s.strikeTransportRetryCount ?? null, isoToMs(s.strikeNextAttemptAt), s.strikeLandingAttempts ? JSON.stringify(s.strikeLandingAttempts) : null, s.reviewCycleHistory ? JSON.stringify(s.reviewCycleHistory) : null, isoToMs(s.retiredAt));
192
194
  if (s.history && s.history.length > 0) {
193
195
  const insertHistory = db.prepare(`INSERT OR IGNORE INTO status_history (issue_id, type, status, timestamp, notes)
194
196
  VALUES (?, ?, ?, ?, ?)`);
@@ -333,10 +335,11 @@ function getMergeBlockerReconcileCandidatesSync() {
333
335
  return getOverdeckDatabaseSync().prepare(`
334
336
  SELECT issue_id, pr_url, blocker_reasons, ready_for_merge
335
337
  FROM review_status
336
- WHERE ready_for_merge = 1
338
+ WHERE retired_at IS NULL AND (
339
+ ready_for_merge = 1
337
340
  OR blocker_reasons LIKE '%merge_conflict%'
338
341
  OR blocker_reasons LIKE '%not_mergeable%'
339
- OR blocker_reasons LIKE '%failing_checks%'
342
+ OR blocker_reasons LIKE '%failing_checks%')
340
343
  `).all().map((row) => ({
341
344
  issueId: row.issue_id.toUpperCase(),
342
345
  prUrl: row.pr_url ?? void 0,
@@ -362,4 +365,4 @@ var init_review_status_sync = __esmMin((() => {
362
365
  //#endregion
363
366
  export { getMergeBlockerReconcileCandidates as a, getReviewStatusesFromDb as c, setAutoMerge as d, setDeaconIgnored as f, normalizeReviewStatusSync as h, getAllReviewStatusesFromDb as i, init_review_status_sync as l, init_review_status_normalize as m, clearWorkspaceStuckAndResetHistory as n, getMergeBlockerReconcileCandidatesSync as o, upsertReviewStatusSync as p, deleteReviewStatus as r, getReviewStatusFromDbSync as s, clearWorkspaceStuck as t, markWorkspaceStuck as u };
364
367
 
365
- //# sourceMappingURL=review-status-sync-B7V_Gg51.js.map
368
+ //# sourceMappingURL=review-status-sync-C6ZKTI8f.js.map
@@ -1,3 +1,3 @@
1
- import { a as getMergeBlockerReconcileCandidates, c as getReviewStatusesFromDb, d as setAutoMerge, f as setDeaconIgnored, i as getAllReviewStatusesFromDb, l as init_review_status_sync, n as clearWorkspaceStuckAndResetHistory, o as getMergeBlockerReconcileCandidatesSync, p as upsertReviewStatusSync, r as deleteReviewStatus, s as getReviewStatusFromDbSync, t as clearWorkspaceStuck, u as markWorkspaceStuck } from "./review-status-sync-B7V_Gg51.js";
1
+ import { a as getMergeBlockerReconcileCandidates, c as getReviewStatusesFromDb, d as setAutoMerge, f as setDeaconIgnored, i as getAllReviewStatusesFromDb, l as init_review_status_sync, n as clearWorkspaceStuckAndResetHistory, o as getMergeBlockerReconcileCandidatesSync, p as upsertReviewStatusSync, r as deleteReviewStatus, s as getReviewStatusFromDbSync, t as clearWorkspaceStuck, u as markWorkspaceStuck } from "./review-status-sync-C6ZKTI8f.js";
2
2
  init_review_status_sync();
3
3
  export { clearWorkspaceStuck, clearWorkspaceStuckAndResetHistory, deleteReviewStatus, getAllReviewStatusesFromDb, getMergeBlockerReconcileCandidates, getMergeBlockerReconcileCandidatesSync, getReviewStatusFromDbSync, getReviewStatusesFromDb, markWorkspaceStuck, setAutoMerge, setDeaconIgnored, upsertReviewStatusSync };
@@ -1,10 +1,10 @@
1
- import { On as resolveProjectFromIssueSync, fn as init_projects } from "./config-yaml-BwOEANMr.js";
2
- import { Lt as init_messaging, Rt as messageAgent, h as init_agent_state, m as getAgentStateSync } from "./agent-state-Bb3UUxQm.js";
3
- import { a as PAN_DIRNAME, m as init_types } from "./types-DbxY2QB6.js";
4
- import { d as getReviewStatusSync, p as init_review_status, r as clearFeedbackDeliveryStuck } from "./review-status-DBnR5t4z.js";
5
- import { d as init_review_verdict_report, l as findVerdictReport } from "./synthesis-verdict-N5Z11pg7.js";
6
- import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-D4ULO4qG.js";
7
- import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-Ci6N5p4G.js";
1
+ import { On as resolveProjectFromIssueSync, fn as init_projects } from "./config-yaml-D60AnTIu.js";
2
+ import { Ht as init_messaging, Ut as messageAgent, _ as init_agent_state, g as getAgentStateSync } from "./agent-state-FABw8neJ.js";
3
+ import { a as PAN_DIRNAME, m as init_types } from "./types-pLpbsNto.js";
4
+ import { d as getReviewStatusSync, p as init_review_status, r as clearFeedbackDeliveryStuck } from "./review-status-DpniqzPT.js";
5
+ import { d as init_review_verdict_report, l as findVerdictReport } from "./synthesis-verdict-CGFF8uQI.js";
6
+ import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-Ds1Wjsz4.js";
7
+ import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-yPD_wclF.js";
8
8
  import { join } from "node:path";
9
9
  import { Effect } from "effect";
10
10
  import { existsSync } from "node:fs";
@@ -228,4 +228,4 @@ async function deliverReviewVerdictFeedbackFromStatus(issueId, status) {
228
228
  //#endregion
229
229
  export { deliverReviewVerdictFeedbackFromStatus as n, postPrComment as r, deliverReviewVerdictFeedback as t };
230
230
 
231
- //# sourceMappingURL=review-verdict-feedback-C-dBon_-.js.map
231
+ //# sourceMappingURL=review-verdict-feedback-B2ojHFH5.js.map
@@ -1,2 +1,2 @@
1
- import { t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-C-dBon_-.js";
1
+ import { t as deliverReviewVerdictFeedback } from "./review-verdict-feedback-B2ojHFH5.js";
2
2
  export { deliverReviewVerdictFeedback };
@@ -1,9 +1,9 @@
1
- import { On as resolveProjectFromIssueSync, fn as init_projects } from "./config-yaml-BwOEANMr.js";
2
- import { a as emitActivityEntrySync, c as init_activity_logger } from "./activity-logger-BAVLrkR7.js";
3
- import { a as init_git_utils, n as formatAnchorShort, o as parseCompositeSnapshot } from "./git-utils-DV4B9TRl.js";
4
- import { i as init_project_repos, u as resolveWorkspaceRepoRootsSync } from "./project-repos-B4MK48j4.js";
5
- import { d as getReviewStatusSync, p as init_review_status, w as setReviewStatusSync } from "./review-status-DBnR5t4z.js";
6
- import { t as getCloisterEventStore } from "./event-store-provider-BKvk2rDj.js";
1
+ import { On as resolveProjectFromIssueSync, fn as init_projects } from "./config-yaml-D60AnTIu.js";
2
+ import { l as init_activity_logger, o as emitActivityEntrySync } from "./activity-logger-SlTXYCVf.js";
3
+ import { a as init_git_utils, n as formatAnchorShort, o as parseCompositeSnapshot } from "./git-utils-BdHk8y7g.js";
4
+ import { d as resolveWorkspaceRepoRootsSync, i as init_project_repos } from "./project-repos-CsfvLtmr.js";
5
+ import { d as getReviewStatusSync, p as init_review_status, w as setReviewStatusSync } from "./review-status-DpniqzPT.js";
6
+ import { t as getCloisterEventStore } from "./event-store-provider-Bu1Qrg6v.js";
7
7
  import { join } from "path";
8
8
  import { execFile } from "child_process";
9
9
  import { promisify } from "util";
@@ -205,4 +205,4 @@ async function recordReviewVerdict(issueId, input) {
205
205
  //#endregion
206
206
  export { recordReviewVerdict as t };
207
207
 
208
- //# sourceMappingURL=review-verdict-writer-CKaJWp75.js.map
208
+ //# sourceMappingURL=review-verdict-writer-Cy_1pnIj.js.map
@@ -1,2 +1,2 @@
1
- import { t as recordReviewVerdict } from "./review-verdict-writer-CKaJWp75.js";
1
+ import { t as recordReviewVerdict } from "./review-verdict-writer-Cy_1pnIj.js";
2
2
  export { recordReviewVerdict };
@@ -1,2 +1,2 @@
1
- import { c as synthesizeStatusRollup, n as commitStatusRollup } from "./rollup-QCwYcBdP.js";
1
+ import { c as synthesizeStatusRollup, n as commitStatusRollup } from "./rollup-DU3xBQu2.js";
2
2
  export { commitStatusRollup, synthesizeStatusRollup };
@@ -1,7 +1,7 @@
1
- import { k as MemoryStatus, t as init_src } from "./src-DudQNYVw.js";
2
- import { a as resolveArchiveDir, f as resolveStatusFile, i as init_paths, l as resolveObservationsFile, n as ensureDir, r as ensureParentDir, u as resolvePendingDir } from "./paths-CRLnDgcI.js";
3
- import { i as init_settings, n as getMemoryRollupPendingThreshold } from "./settings-B9-H2K_E.js";
4
- import { i as updateMemoryHealth, n as extractWithProviderPolicy, r as init_health, t as init_providers } from "./providers-DrfK0Ip8.js";
1
+ import { k as MemoryStatus, t as init_src } from "./src-CdwN6WY6.js";
2
+ import { a as resolveArchiveDir, f as resolveStatusFile, i as init_paths, l as resolveObservationsFile, n as ensureDir, r as ensureParentDir, u as resolvePendingDir } from "./paths-rETQhTF2.js";
3
+ import { i as init_settings, n as getMemoryRollupPendingThreshold } from "./settings-nAT-eK56.js";
4
+ import { i as updateMemoryHealth, n as extractWithProviderPolicy, r as init_health, t as init_providers } from "./providers-CxPKmyif.js";
5
5
  import { Result, Schema } from "effect";
6
6
  import { dirname } from "path";
7
7
  import { randomUUID } from "crypto";
@@ -100,8 +100,8 @@ function pendingTurnRangeKey(turn) {
100
100
  return `${safeFileSegment(turn.identity.sessionId)}_${turn.fromOffset}_${turn.toOffset}`;
101
101
  }
102
102
  async function enqueueStatusRollupEvent(job) {
103
- const { initEventStore } = await import("./event-store-BgEjNsvk.js");
104
- const { synthesizeStatusRollup, commitStatusRollup } = await import("./rollup-DZwH4CLs.js");
103
+ const { initEventStore } = await import("./event-store-C50Qt-f1.js");
104
+ const { synthesizeStatusRollup, commitStatusRollup } = await import("./rollup-Cp0KEoOu.js");
105
105
  const store = await initEventStore();
106
106
  const eventIssueId = job.identity.issueId ?? job.identity.workspaceId;
107
107
  await store.appendAsync({
@@ -386,7 +386,7 @@ async function clearPendingTurns(projectId, workspaceId, pendingTurns) {
386
386
  return cleared;
387
387
  }
388
388
  async function emitStatusUpdatedEvent(event) {
389
- const { initEventStore } = await import("./event-store-BgEjNsvk.js");
389
+ const { initEventStore } = await import("./event-store-C50Qt-f1.js");
390
390
  await (await initEventStore()).appendAsync({
391
391
  type: "memory.status_updated",
392
392
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
@@ -470,4 +470,4 @@ function isEnoent(error) {
470
470
  //#endregion
471
471
  export { readCurrentStatus as a, synthesizeStatusRollup as c, readArchivedStatuses as i, maybeTriggerStatusRollup as l, commitStatusRollup as n, readObservationsSince as o, readArchivedStatusEntries as r, readRecentObservations as s, buildStatusRollupPrompt as t, writePendingTurn as u };
472
472
 
473
- //# sourceMappingURL=rollup-QCwYcBdP.js.map
473
+ //# sourceMappingURL=rollup-DU3xBQu2.js.map