@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,28 +1,34 @@
1
- import { Fi as init_paths, On as resolveProjectFromIssueSync, fn as init_projects, si as AGENTS_DIR } from "./config-yaml-BwOEANMr.js";
2
- import { a as emitActivityEntrySync, c as init_activity_logger } from "./activity-logger-BAVLrkR7.js";
3
- import { L as sendKeys, S as init_tmux, V as sessionExistsSync } from "./tmux-BqXzRuaH.js";
4
- import { G as init_agents, H as getAgentRuntimeStateSync, m as getAgentStateSync, un as listRunningAgentsSync } from "./agent-state-Bb3UUxQm.js";
5
- import { i as loadCloisterConfig, r as init_config } from "./config-DC75T4Mr.js";
6
- import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-xnVJVrrO.js";
7
- import { _ as markMerged, c as init_merge_sync, f as listActiveAutoMerges, m as listProblemAutoMerges, t as cancelPending } from "./merge-sync-Ct0-cxMX.js";
8
- import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-eiE2nC6C.js";
9
- import { U as reviewGatesPassedSync, Y as init_review_status_record_sync, Z as readJournalStatusSync, h as loadReviewStatuses, p as init_review_status, w as setReviewStatusSync } from "./review-status-DBnR5t4z.js";
10
- import { M as withConcurrencyLimit, j as init_concurrency } from "./github-app-4UX8VIr8.js";
11
- import { o as isAgentIdleForNudge } from "./stuck-remediation-Di5JYkoo.js";
12
- import { n as sweepAutoCloseOutCache, t as getAutoCloseOutCanonicalState } from "./deacon-canonical-state-DFYymrDw.js";
13
- import { n as getForgeAdapter } from "./forge-DYX9sKzG.js";
14
- import { i as observeForgeMergeState } from "./merge-completeness-CP347umA.js";
1
+ import { Ht as init_state_read_home, On as resolveProjectFromIssueSync, Wt as resolveStateReadHomeSync, Y as init_record, fn as init_projects, j as RECORD_DIRNAME, ui as AGENTS_DIR, zi as init_paths } from "./config-yaml-D60AnTIu.js";
2
+ import { l as init_activity_logger, o as emitActivityEntrySync } from "./activity-logger-SlTXYCVf.js";
3
+ import { B as sendKeys, C as init_tmux, W as sessionExistsSync } from "./tmux-wnT_hg-s.js";
4
+ import { W as getAgentRuntimeStateSync, _ as init_agent_state, a as clearAgentOperatorGatesForIssuesSync, g as getAgentStateSync, q as init_agents, yn as listRunningAgentsSync } from "./agent-state-FABw8neJ.js";
5
+ import { i as loadCloisterConfig, r as init_config } from "./config-_qaa1UXH.js";
6
+ import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-Dbg_pVZg.js";
7
+ import { _ as markMerged, c as init_merge_sync, f as listActiveAutoMerges, m as listProblemAutoMerges, t as cancelPending } from "./merge-sync-YLvOPAry.js";
8
+ import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-CyW-xSn4.js";
9
+ import { U as reviewGatesPassedSync, Y as init_review_status_record_sync, Z as readJournalStatusSync, h as loadReviewStatuses, p as init_review_status, w as setReviewStatusSync } from "./review-status-DpniqzPT.js";
10
+ import { M as withConcurrencyLimit, j as init_concurrency } from "./github-app-BlMSzSTw.js";
11
+ import { r as isAgentIdleForNudge } from "./agent-idle-D-UQ7gDv.js";
12
+ import { n as sweepAutoCloseOutCache, t as getAutoCloseOutCanonicalState } from "./deacon-canonical-state-DkdkQS5p.js";
13
+ import { n as getForgeAdapter } from "./forge-CHADjOFs.js";
14
+ import { i as observeForgeMergeState } from "./merge-completeness-BOtBUwTU.js";
15
+ import { r as init_recovery_trip, t as acknowledgeAllOpenRecoveryTrips } from "./recovery-trip-CpfW6LCJ.js";
16
+ import { join } from "node:path";
15
17
  import { Effect } from "effect";
16
18
  import { existsSync, readdirSync } from "fs";
17
- import { join } from "path";
19
+ import { join as join$1 } from "path";
20
+ import { promises as promises$1 } from "node:fs";
18
21
  import { exec, execFile } from "node:child_process";
19
22
  import { promisify } from "node:util";
20
23
  import { promisify as promisify$1 } from "util";
21
24
  //#region ../../lib/cloister/deacon-stuck-merging.ts
22
25
  init_paths();
26
+ init_state_read_home();
27
+ init_record();
23
28
  init_activity_logger();
24
29
  init_tmux();
25
30
  init_config();
31
+ init_agent_state();
26
32
  init_merge_sync();
27
33
  init_review_status_record_sync();
28
34
  init_concurrency();
@@ -70,7 +76,7 @@ function isStuckMergingState(status, now) {
70
76
  }
71
77
  async function readSpecStatus(projectPath, issueId) {
72
78
  try {
73
- const { findSpecByIssue } = await import("./specs-BqkrRnU9.js");
79
+ const { findSpecByIssue } = await import("./specs-oRGyfz6C.js");
74
80
  return (await Effect.runPromise(findSpecByIssue(projectPath, issueId)))?.status;
75
81
  } catch {
76
82
  return;
@@ -152,7 +158,7 @@ async function reconcileStuckMergingStates() {
152
158
  reviewGatesPassed: reviewGatesPassedSync,
153
159
  setReviewStatus: setReviewStatusSync,
154
160
  enqueuePostMerge: async (issueId, projectPath, branch) => {
155
- const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-KK1RTKRE.js");
161
+ const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-OQoK8Ckg.js");
156
162
  return enqueuePostMergeLifecycle(issueId, projectPath, branch);
157
163
  },
158
164
  warn: (message) => console.warn(message)
@@ -377,7 +383,7 @@ async function reconcileStaleMergeStatus() {
377
383
  const statuses = loadReviewStatuses();
378
384
  for (const [issueId, status] of Object.entries(statuses)) {
379
385
  const postMergeIncomplete = status.mergeStatus === "merged" && status.mergeStep === "post-merge-cleanup";
380
- if (status.mergeStatus === "merged" && !postMergeIncomplete) continue;
386
+ if (status.retiredAt || status.mergeStatus === "merged" && !postMergeIncomplete) continue;
381
387
  if (isStuckMergingState(status, Date.now())) continue;
382
388
  if (!postMergeIncomplete && staleMergeReconciled.has(issueId)) continue;
383
389
  const project = resolveProjectFromIssueSync(issueId);
@@ -392,7 +398,7 @@ async function reconcileStaleMergeStatus() {
392
398
  ].includes(status.mergeStatus ?? "") || ["merging", "failed"].includes(mergeSet?.status ?? "");
393
399
  let specStatus;
394
400
  try {
395
- const { findSpecByIssue } = await import("./specs-BqkrRnU9.js");
401
+ const { findSpecByIssue } = await import("./specs-oRGyfz6C.js");
396
402
  const spec = await Effect.runPromise(findSpecByIssue(project.projectPath, issueId));
397
403
  specStatus = spec?.status;
398
404
  if (spec && (spec.status === "completed" || spec.status === "cancelled")) {
@@ -402,7 +408,7 @@ async function reconcileStaleMergeStatus() {
402
408
  } catch {}
403
409
  const branch = `feature/${issueId.toLowerCase()}`;
404
410
  if (postMergeIncomplete) {
405
- const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-KK1RTKRE.js");
411
+ const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-OQoK8Ckg.js");
406
412
  const action = enqueuePostMergeLifecycle(issueId, project.projectPath, branch);
407
413
  if (action) actions.push(action);
408
414
  continue;
@@ -414,7 +420,7 @@ async function reconcileStaleMergeStatus() {
414
420
  } catch {}
415
421
  if (!isMerged) isMerged = (await observeGitHubBranchMerge(issueId, branch, project.projectPath)).merged;
416
422
  if (shouldObserveForge && mergeRelevant) try {
417
- const observation = await (await import("./merge-completeness-7ajHAIR-.js")).observeForgeMergeState(issueId);
423
+ const observation = await (await import("./merge-completeness-CoLJxfUY.js")).observeForgeMergeState(issueId);
418
424
  const blocker = observation.repos.find((repo) => repo.state === "unverifiable");
419
425
  if (blocker) {
420
426
  console.warn(`[deacon] ${issueId}: forge merge state is unverifiable — ${blocker.reason}`);
@@ -441,7 +447,7 @@ async function reconcileStaleMergeStatus() {
441
447
  const msg = `Reconciled stale mergeStatus for ${issueId} — branch ${branch} is merged to main`;
442
448
  actions.push(msg);
443
449
  console.log(`[deacon] ${msg}`);
444
- const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-KK1RTKRE.js");
450
+ const { enqueuePostMergeLifecycle } = await import("./post-merge-lifecycle-worker-OQoK8Ckg.js");
445
451
  const action = enqueuePostMergeLifecycle(issueId, project.projectPath, branch);
446
452
  if (action) actions.push(action);
447
453
  }
@@ -464,11 +470,11 @@ const falseMergedReset = /* @__PURE__ */ new Set();
464
470
  async function reconcileFalseMerged() {
465
471
  const actions = [];
466
472
  try {
467
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-C33lDk9Z.js");
473
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BWziYCf3.js");
468
474
  if (!isGitHubAppConfigured()) return actions;
469
475
  const statuses = loadReviewStatuses();
470
476
  for (const [issueId, status] of Object.entries(statuses)) {
471
- if (status.mergeStatus !== "merged") continue;
477
+ if (status.retiredAt || status.mergeStatus !== "merged") continue;
472
478
  if (!status.prUrl) continue;
473
479
  if (falseMergedReset.has(issueId)) continue;
474
480
  const prRef = status.prUrl.match(/github\.com\/([^/]+)\/([^/]+)\/pull\/(\d+)/);
@@ -509,12 +515,12 @@ const CLOSED_PR_RECONCILE_COOLDOWN_MS = 600 * 1e3;
509
515
  async function reconcileClosedPrReadyForMerge() {
510
516
  const actions = [];
511
517
  try {
512
- const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-C33lDk9Z.js");
518
+ const { getPullRequestState, isGitHubAppConfigured } = await import("./github-app-BWziYCf3.js");
513
519
  if (!isGitHubAppConfigured()) return actions;
514
520
  const statuses = loadReviewStatuses();
515
521
  const now = Date.now();
516
522
  for (const [issueId, status] of Object.entries(statuses)) {
517
- if (!status.readyForMerge) continue;
523
+ if (status.retiredAt || !status.readyForMerge) continue;
518
524
  if (!status.prUrl) continue;
519
525
  const cooledUntil = closedPrReadyReconcileCooldowns.get(issueId);
520
526
  if (cooledUntil && now < cooledUntil) continue;
@@ -538,7 +544,7 @@ async function reconcileClosedPrReadyForMerge() {
538
544
  } else {
539
545
  setReviewStatusSync(issueId, {
540
546
  readyForMerge: false,
541
- mergeStatus: "failed",
547
+ retiredAt: new Date(now).toISOString(),
542
548
  mergeNotes: `PR #${prNumber} was closed without merging — reopen the PR or reset review state to re-queue this issue`
543
549
  });
544
550
  const msg = `Reset readyForMerge for ${issueId} — PR #${prNumber} is ${prState.state} (not OPEN)`;
@@ -578,23 +584,34 @@ const STALE_MERGE_BLOCKER_COOLDOWN_MS = 120 * 1e3;
578
584
  * cooldown bounds the git-probe cost; resolveConflictGate also caches its
579
585
  * mergeability probe.
580
586
  */
581
- async function reconcileStaleMergeBlockers() {
587
+ async function reconcileStaleMergeBlockers(gatherEligibility = async (ids) => (await import("./merge-eligibility-C4rTS97F.js")).gatherMergeEligibility(ids), workspaceExists = existsSync, resolveWorkspace = (issueId) => {
588
+ const resolved = resolveProjectFromIssueSync(issueId);
589
+ return resolved ? join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`) : null;
590
+ }) {
582
591
  const actions = [];
583
592
  try {
584
- const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-DlpWCMd7.js");
593
+ const { resolveConflictGate, buildRealConflictGateDeps } = await import("./conflict-gate-0dD1kxjN.js");
585
594
  const statuses = loadReviewStatuses();
586
595
  const now = Date.now();
587
596
  const deps = buildRealConflictGateDeps();
588
- for (const [issueId, status] of Object.entries(statuses)) {
589
- if (status.mergeStatus === "merged") continue;
590
- if (!(status.blockerReasons ?? []).some((b) => b.type === "merge_conflict" || b.type === "not_mergeable")) continue;
597
+ const candidates = Object.entries(statuses).filter(([, status]) => !status.retiredAt && status.mergeStatus !== "merged" && (status.blockerReasons ?? []).some((b) => b.type === "merge_conflict" || b.type === "not_mergeable"));
598
+ const memberships = await gatherEligibility(candidates.map(([issueId]) => issueId));
599
+ for (const [issueId] of candidates) {
591
600
  const cooledUntil = staleMergeBlockerCooldowns.get(issueId);
592
601
  if (cooledUntil && now < cooledUntil) continue;
593
602
  staleMergeBlockerCooldowns.set(issueId, now + STALE_MERGE_BLOCKER_COOLDOWN_MS);
594
- const resolved = resolveProjectFromIssueSync(issueId);
595
- if (!resolved) continue;
596
- const workspacePath = join(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
597
- if (!existsSync(workspacePath)) continue;
603
+ const membership = memberships.get(issueId.toUpperCase());
604
+ if (!membership || membership.bucket !== "in_flight") {
605
+ if (membership) setReviewStatusSync(issueId, {
606
+ readyForMerge: false,
607
+ retiredAt: new Date(now).toISOString()
608
+ });
609
+ console.log(`[deacon] skipping ${issueId} — pipeline membership is ${membership?.bucket ?? "unavailable"}, not merge-eligible`);
610
+ continue;
611
+ }
612
+ const workspacePath = resolveWorkspace(issueId);
613
+ if (!workspacePath) continue;
614
+ if (!workspaceExists(workspacePath)) continue;
598
615
  try {
599
616
  if ((await resolveConflictGate(issueId, workspacePath, "main", deps)).clearedStaleBlocker) {
600
617
  const msg = `Cleared stale merge blocker for ${issueId} — branch is mergeable again; readyForMerge will recompute`;
@@ -613,31 +630,24 @@ async function reconcileStaleMergeBlockers() {
613
630
  /**
614
631
  * Reconciler (PAN-2198): periodic twin of the boot-only fixStuckReadyForMerge,
615
632
  * for the NO-BLOCKER strand of "stuck after review".
616
- *
617
- * readyForMerge is re-derived on every setReviewStatusSync write. When the last
618
- * write left it false and there is NO merge-blocker, nothing re-derives it until
619
- * the next write — so a PR whose review+test+verify all passed but whose
620
- * readyForMerge was left false (e.g. a verdict that landed via a write path that
621
- * didn't recompute, or a gate that was transiently non-final) converges ONLY on
622
- * server restart (PAN-1758: "readyForMerge only flips via the startup repair
623
- * sweep"). This patrol re-derives it on the 60s deacon tick instead.
624
- *
625
- * Blocker strands are deliberately excluded — those are owned by
626
- * reconcileStaleMergeBlockers, and excluding them also avoids fighting the
627
- * setReviewStatus deriver's hasBlockers override (which would flip readyForMerge
628
- * straight back to false). Loop-safe: it writes ONLY readyForMerge (no
629
- * review/test status transition, so no review/test re-dispatch events fire), and
630
- * is idempotent — once flipped true, the readyForMerge!==false guard excludes the
631
- * issue, so steady state is zero writes. Flipping readyForMerge=true only makes
632
- * the issue merge-ELIGIBLE; the merge train / MERGE button remains the trigger.
633
+ * Blocker strands remain owned by reconcileStaleMergeBlockers. Membership
634
+ * prevents restoration without an open PR; successful restoration is idempotent.
633
635
  */
634
- function reconcileStuckReadyForMerge() {
636
+ async function reconcileStuckReadyForMerge(gatherEligibility = async (ids) => (await import("./merge-eligibility-C4rTS97F.js")).gatherMergeEligibility(ids)) {
635
637
  const actions = [];
636
638
  try {
637
- for (const [issueId, status] of Object.entries(loadReviewStatuses())) {
638
- if (status.readyForMerge !== false) continue;
639
- if ((status.blockerReasons?.length ?? 0) > 0) continue;
640
- if (!reviewGatesPassedSync(status)) continue;
639
+ const candidates = Object.entries(loadReviewStatuses()).filter(([, status]) => !status.retiredAt && status.readyForMerge === false && (status.blockerReasons?.length ?? 0) === 0 && reviewGatesPassedSync(status));
640
+ const memberships = await gatherEligibility(candidates.map(([issueId]) => issueId));
641
+ for (const [issueId] of candidates) {
642
+ const membership = memberships.get(issueId.toUpperCase());
643
+ if (!membership || membership.bucket !== "in_flight") {
644
+ if (membership) setReviewStatusSync(issueId, {
645
+ readyForMerge: false,
646
+ retiredAt: (/* @__PURE__ */ new Date()).toISOString()
647
+ });
648
+ console.log(`[deacon] skipping ${issueId} — pipeline membership is ${membership?.bucket ?? "unavailable"}, not merge-eligible`);
649
+ continue;
650
+ }
641
651
  setReviewStatusSync(issueId, { readyForMerge: true });
642
652
  const msg = `Restored readyForMerge for ${issueId} — review+test+verify passed, no blocker (was stuck false)`;
643
653
  actions.push(msg);
@@ -659,7 +669,7 @@ async function reconcileMergedButReviewing() {
659
669
  null
660
670
  ]);
661
671
  for (const [issueId, status] of Object.entries(statuses)) {
662
- if (status.mergeStatus !== "merged") continue;
672
+ if (status.retiredAt || status.mergeStatus !== "merged") continue;
663
673
  const reviewNonTerminal = nonTerminal.has(status.reviewStatus);
664
674
  const testNonTerminal = nonTerminal.has(status.testStatus);
665
675
  if (!reviewNonTerminal && !testNonTerminal) continue;
@@ -724,7 +734,7 @@ async function checkFailedMergeRetry() {
724
734
  if (ciEntry.count === 5) {
725
735
  console.log(`[deacon] CI check failure for ${issueId} — retries exhausted, notifying work agent`);
726
736
  const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
727
- const { writeFeedbackFile } = await import("./feedback-writer-DfuVjvH0.js");
737
+ const { writeFeedbackFile } = await import("./feedback-writer-BzN4qvaP.js");
728
738
  const ciFileResult = await Effect.runPromise(writeFeedbackFile({
729
739
  issueId,
730
740
  specialist: "merge-agent",
@@ -756,7 +766,7 @@ async function checkFailedMergeRetry() {
756
766
  ciRetryMap.set(issueId, ciEntry);
757
767
  console.log(`[deacon] CI check failure for ${issueId} — notifying agent to re-submit (attempt ${ciEntry.count}/5)`);
758
768
  const ciNotes = status.mergeNotes || "CI checks are failing on the PR";
759
- const { writeFeedbackFile } = await import("./feedback-writer-DfuVjvH0.js");
769
+ const { writeFeedbackFile } = await import("./feedback-writer-BzN4qvaP.js");
760
770
  const ciFileResult2 = await Effect.runPromise(writeFeedbackFile({
761
771
  issueId,
762
772
  specialist: "merge-agent",
@@ -784,7 +794,7 @@ async function checkFailedMergeRetry() {
784
794
  const lastNudge = timeoutNudgeCooldowns.get(issueIdForFb);
785
795
  if (!lastNudge || now - lastNudge >= TIMEOUT_NUDGE_COOLDOWN_MS) {
786
796
  const timeoutNotes = status.mergeNotes;
787
- const { writeFeedbackFile } = await import("./feedback-writer-DfuVjvH0.js");
797
+ const { writeFeedbackFile } = await import("./feedback-writer-BzN4qvaP.js");
788
798
  await Effect.runPromise(writeFeedbackFile({
789
799
  issueId: issueIdForFb,
790
800
  specialist: "merge-agent",
@@ -889,7 +899,7 @@ async function autoCloseOut(now = /* @__PURE__ */ new Date()) {
889
899
  } } : {}
890
900
  };
891
901
  try {
892
- const { closeOut } = await import("./workflows-Cf4LAnhg.js");
902
+ const { closeOut } = await import("./workflows-BtHRlFIm.js");
893
903
  const result = await Effect.runPromise(closeOut(ctx));
894
904
  if (!result.success) {
895
905
  const failed = result.steps.find((step) => !step.success && !step.skipped);
@@ -936,8 +946,8 @@ async function checkFirstCompletionAgents() {
936
946
  const agentId = agent.id;
937
947
  if (!agentId || !agentId.startsWith("agent-") || !agent.tmuxActive) continue;
938
948
  if (agentId.startsWith("specialist-")) continue;
939
- const completedFile = join(AGENTS_DIR, agent.id, "completed");
940
- const processedMarker = join(AGENTS_DIR, agent.id, "completed.processed");
949
+ const completedFile = join$1(AGENTS_DIR, agent.id, "completed");
950
+ const processedMarker = join$1(AGENTS_DIR, agent.id, "completed.processed");
941
951
  if (existsSync(completedFile) || existsSync(processedMarker)) continue;
942
952
  if (!isAgentIdleForNudge(agent.id, FIRST_COMPLETION_IDLE_MS)) continue;
943
953
  const runtimeState = getAgentRuntimeStateSync(agent.id);
@@ -958,7 +968,7 @@ async function checkFirstCompletionAgents() {
958
968
  } catch {}
959
969
  const agentStateForGate = getAgentStateSync(agent.id);
960
970
  if (agentStateForGate?.workspace) {
961
- const feedbackDir = join(agentStateForGate.workspace, ".pan", "feedback");
971
+ const feedbackDir = join$1(agentStateForGate.workspace, ".pan", "feedback");
962
972
  if (existsSync(feedbackDir)) try {
963
973
  const feedbackFiles = readdirSync(feedbackDir);
964
974
  if (feedbackFiles.length > 0) {
@@ -981,7 +991,7 @@ async function checkFirstCompletionAgents() {
981
991
  try {
982
992
  const subdirs = readdirSync(agentState.workspace, { withFileTypes: true }).filter((d) => d.isDirectory() && !d.name.startsWith("."));
983
993
  for (const sub of subdirs) try {
984
- const { stdout: subLog } = await execAsync("git log --oneline -3 2>/dev/null", { cwd: join(agentState.workspace, sub.name) });
994
+ const { stdout: subLog } = await execAsync("git log --oneline -3 2>/dev/null", { cwd: join$1(agentState.workspace, sub.name) });
985
995
  if (subLog.trim().length > 0) {
986
996
  hasCommits = true;
987
997
  break;
@@ -1009,6 +1019,115 @@ async function checkFirstCompletionAgents() {
1009
1019
  return actions;
1010
1020
  }
1011
1021
  //#endregion
1012
- export { ciRetryMap as a, reconcileMergedButReviewing as c, reconcileStuckReadyForMerge as d, reconcileAutoMergeRows as f, checkReadyForMergeStuck as i, reconcileStaleMergeBlockers as l, checkFailedMergeRetry as n, reconcileClosedPrReadyForMerge as o, reconcileStuckMergingStates as p, checkFirstCompletionAgents as r, reconcileFalseMerged as s, autoCloseOut as t, reconcileStaleMergeStatus as u };
1022
+ //#region ../../lib/pan-dir/record-list.ts
1023
+ /** Canonical bounded enumeration facet of the issue-record read door. */
1024
+ async function readIssueRecordDirectory(recordsDir, records) {
1025
+ const entries = await promises$1.readdir(recordsDir, { withFileTypes: true }).catch(() => []);
1026
+ await Promise.all(entries.filter((entry) => entry.isFile() && entry.name.endsWith(".json")).map(async (entry) => {
1027
+ try {
1028
+ const record = JSON.parse(await promises$1.readFile(join(recordsDir, entry.name), "utf-8"));
1029
+ if (record.issueId) records.set(record.issueId.toUpperCase(), record);
1030
+ } catch (error) {
1031
+ console.warn(`[record] Preserving unreadable issue record ${join(recordsDir, entry.name)} during enumeration: ${error instanceof Error ? error.message : String(error)}`);
1032
+ }
1033
+ }));
1034
+ }
1035
+ async function listIssueRecords(project) {
1036
+ const stateHome = resolveStateReadHomeSync(project);
1037
+ const records = /* @__PURE__ */ new Map();
1038
+ if (stateHome.migrated) {
1039
+ await readIssueRecordDirectory(join(stateHome.root, RECORD_DIRNAME), records);
1040
+ return [...records.values()];
1041
+ }
1042
+ await readIssueRecordDirectory(join(project.path, ".pan", RECORD_DIRNAME), records);
1043
+ const workspacesDir = join(project.path, "workspaces");
1044
+ const workspaces = await promises$1.readdir(workspacesDir, { withFileTypes: true }).catch(() => []);
1045
+ await Promise.all(workspaces.filter((entry) => entry.isDirectory()).map((entry) => readIssueRecordDirectory(join(workspacesDir, entry.name, ".pan", RECORD_DIRNAME), records)));
1046
+ return [...records.values()];
1047
+ }
1048
+ //#endregion
1049
+ //#region ../../lib/cloister/parked-residue.ts
1050
+ init_recovery_trip();
1051
+ /**
1052
+ * Record-level terminality: closedOut is the durable close-out marker, and a
1053
+ * mergeStatus of 'merged' with no reopenedAt means the issue merged and was
1054
+ * never reopened afterward (reopen drops the stale mergeStatus — see
1055
+ * clearRecordPipelineClosedOut in record-update.ts). Shared with the parked
1056
+ * resolver's record-first terminality check (PAN-3727) so both surfaces agree
1057
+ * by construction on what counts as terminal.
1058
+ */
1059
+ function isRecordPipelineTerminal(record) {
1060
+ if (!record.pipeline) return false;
1061
+ return record.pipeline.closedOut === true || record.pipeline.mergeStatus === "merged" && !record.pipeline.reopenedAt;
1062
+ }
1063
+ function defaultDeps() {
1064
+ return {
1065
+ listRecords: listIssueRecords,
1066
+ ackTrips: acknowledgeAllOpenRecoveryTrips,
1067
+ clearGatesForIssues: clearAgentOperatorGatesForIssuesSync
1068
+ };
1069
+ }
1070
+ /**
1071
+ * Sweep every project's terminal-issue records for parked-population residue
1072
+ * left over from before close-out started acknowledging it (PAN-3727): open
1073
+ * recovery trips and operator-gate flags (stoppedByUser/paused/troubled) on a
1074
+ * terminal issue's stopped agent rows. Runs on the state-plane patrol cadence
1075
+ * so the backlog existing before this fix self-heals without a manual sweep,
1076
+ * and any future leak path is caught on the next cycle.
1077
+ *
1078
+ * Three passes, each isolating its own failure mode (review findings,
1079
+ * PAN-3727):
1080
+ * 1. Gather every terminal record across every project. A project whose
1081
+ * record listing fails is warned and skipped — it must never abort the
1082
+ * sweep for the remaining projects.
1083
+ * 2. Clear operator-gate residue for every terminal issue in ONE batched
1084
+ * agent-table scan (not one scan per issue — cost scales with the agent
1085
+ * table once per patrol run, not with the number of terminal issues).
1086
+ * 3. Acknowledge open recovery trips per issue (the record-write door is
1087
+ * inherently per-record). A trip-ack failure for one issue is isolated
1088
+ * to that issue and never suppresses the gate clearing already done in
1089
+ * pass 2 — the two cleanup operations are independent residue.
1090
+ */
1091
+ async function reconcileTerminalIssueResidue(projects, deps = defaultDeps()) {
1092
+ const actions = [];
1093
+ const terminalIssueIds = [];
1094
+ for (const { config } of projects) {
1095
+ if (!config.path) continue;
1096
+ let records;
1097
+ try {
1098
+ records = await deps.listRecords(config);
1099
+ } catch (error) {
1100
+ actions.push({
1101
+ message: `Failed to list records for ${config.name ?? config.path}: ${error instanceof Error ? error.message : String(error)}`,
1102
+ level: "warn"
1103
+ });
1104
+ continue;
1105
+ }
1106
+ for (const record of records) if (isRecordPipelineTerminal(record)) terminalIssueIds.push(record.issueId.toUpperCase());
1107
+ }
1108
+ if (terminalIssueIds.length === 0) return actions;
1109
+ const gatesByIssue = deps.clearGatesForIssues(new Set(terminalIssueIds));
1110
+ for (const issueId of terminalIssueIds) {
1111
+ const gates = gatesByIssue.get(issueId) ?? [];
1112
+ let trips = 0;
1113
+ try {
1114
+ trips = await deps.ackTrips(issueId);
1115
+ } catch (error) {
1116
+ const message = error instanceof Error ? error.message : String(error);
1117
+ actions.push({
1118
+ message: `Failed to acknowledge open trips for ${issueId}: ${message}` + (gates.length > 0 ? `; cleared operator gates on ${gates.length} agent row(s)` : ""),
1119
+ level: "warn"
1120
+ });
1121
+ continue;
1122
+ }
1123
+ if (trips > 0 || gates.length > 0) actions.push({
1124
+ message: `Cleaned parked residue for ${issueId}: acked ${trips} open trip(s), cleared operator gates on ${gates.length} agent row(s)`,
1125
+ level: "action"
1126
+ });
1127
+ }
1128
+ return actions;
1129
+ }
1130
+ //#endregion
1131
+ export { checkFailedMergeRetry as a, ciRetryMap as c, reconcileMergedButReviewing as d, reconcileStaleMergeBlockers as f, reconcileStuckMergingStates as g, reconcileAutoMergeRows as h, autoCloseOut as i, reconcileClosedPrReadyForMerge as l, reconcileStuckReadyForMerge as m, reconcileTerminalIssueResidue as n, checkFirstCompletionAgents as o, reconcileStaleMergeStatus as p, listIssueRecords as r, checkReadyForMergeStuck as s, isRecordPipelineTerminal as t, reconcileFalseMerged as u };
1013
1132
 
1014
- //# sourceMappingURL=deacon-merge-BOGFEV8_.js.map
1133
+ //# sourceMappingURL=parked-residue-8WbU0y1z.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Fi as init_paths$1, Pi as getOverdeckHome } from "./config-yaml-BwOEANMr.js";
2
+ import { Ri as getOverdeckHome, zi as init_paths$1 } from "./config-yaml-D60AnTIu.js";
3
3
  import { dirname, isAbsolute, join, relative, resolve } from "path";
4
4
  import { mkdir } from "fs/promises";
5
5
  //#region ../../lib/memory/paths.ts
@@ -62,4 +62,4 @@ var init_paths = __esmMin((() => {
62
62
  //#endregion
63
63
  export { resolveArchiveDir as a, resolveMemoryRoot as c, resolveRagRunsFile as d, resolveStatusFile as f, init_paths as i, resolveObservationsFile as l, resolveWorkspaceMemoryRoot as m, ensureDir as n, resolveFtsDbPath as o, resolveSummariesDir as p, ensureParentDir as r, resolveMemoryBase as s, assertMemorySafeSegment as t, resolvePendingDir as u };
64
64
 
65
- //# sourceMappingURL=paths-CRLnDgcI.js.map
65
+ //# sourceMappingURL=paths-rETQhTF2.js.map
@@ -1,4 +1,4 @@
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
  import { basename, dirname, join } from "node:path";
3
3
  import { readFile, readdir, rename, unlink } from "node:fs/promises";
4
4
  import { randomUUID } from "node:crypto";
@@ -107,4 +107,4 @@ async function settlePendingLifecycleClaim(claim, issueId, succeeded) {
107
107
  //#endregion
108
108
  export { settlePendingLifecycleClaim as n, claimPendingLifecycleFile as t };
109
109
 
110
- //# sourceMappingURL=pending-lifecycle-claim-CYgMiDAP.js.map
110
+ //# sourceMappingURL=pending-lifecycle-claim-yAwDuGS4.js.map
@@ -187,4 +187,4 @@ var init_pickup = __esmMin((() => {
187
187
  //#endregion
188
188
  export { normalizeGate as _, PARKED_LABEL as a, VETOED_LABEL as c, computeEpicGroups as d, computeLanes as f, isAutoPickable as g, init_pickup as h, OBJECTION_LABEL as i, classifyIssue as l, computeWaves as m, EPIC_LABEL as n, READY_LABEL as o, computeStats as p, LEGACY_PARKED_LABELS as r, RELEASED_LABEL as s, BLOCKS_MAIN_LABEL as t, computeCohort as u, selectNeedsPlanning as v };
189
189
 
190
- //# sourceMappingURL=pickup-BjJsSX12.js.map
190
+ //# sourceMappingURL=pickup-Dle6k9Xt.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-KTp9KV9u.js";
3
- import { a as getWorkspaceForIssue, o as init_resolver } from "./resolver-CuAULbLs.js";
2
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CJRi_5Wu.js";
3
+ import { a as getWorkspaceForIssue, o as init_resolver } from "./resolver-C2QKOf09.js";
4
4
  import { a as registerFeedbackAgentStateReader, i as registerActiveReviewArtifactContextReader, t as init_agent_state_source } from "./agent-state-source-69g8dqMg.js";
5
5
  //#region ../../lib/overdeck/agent-state-sync.ts
6
6
  function isoFromMillis(value) {
@@ -125,11 +125,11 @@ function stateToOverdeckParamsForDb(state, updatedAt) {
125
125
  ];
126
126
  }
127
127
  function getOverdeckAgentStateSync(agentId) {
128
- const row = getOverdeckDatabaseSync().prepare(`${SELECT_AGENT_SQL} WHERE id = ?`).get(agentId);
128
+ const row = getOverdeckDatabaseSync(void 0, { readOnly: true }).prepare(`${SELECT_AGENT_SQL} WHERE id = ?`).get(agentId);
129
129
  return row ? overdeckRowToAgentState(row) : null;
130
130
  }
131
131
  function listOverdeckAgentStatesSync() {
132
- return getOverdeckDatabaseSync().prepare(SELECT_AGENT_SQL).all().map(overdeckRowToAgentState);
132
+ return getOverdeckDatabaseSync(void 0, { readOnly: true }).prepare(SELECT_AGENT_SQL).all().map(overdeckRowToAgentState);
133
133
  }
134
134
  function saveOverdeckAgentStateSync(state) {
135
135
  const db = getOverdeckDatabaseSync();
@@ -241,4 +241,4 @@ var init_pipeline_agent_reader = __esmMin((() => {
241
241
  //#endregion
242
242
  export { readVerdictPreservationStatus as a, registerWorkStartVerdictAdapter as c, getOverdeckAgentStateSync as d, init_agent_state_sync as f, stateToOverdeckParamsForDb as h, init_work_start_verdicts as i, resetWorkStartPipelineVerdicts as l, saveOverdeckAgentStateSync as m, readPipelineTelemetryAgentState as n, refreshWorkStartReviewedAnchor as o, listOverdeckAgentStatesSync as p, registerPipelineTelemetryAgentReader as r, registerVerdictPreservationStatusReader as s, init_pipeline_agent_reader as t, AGENT_COLUMNS_FOR_DB as u };
243
243
 
244
- //# sourceMappingURL=pipeline-agent-reader-BLc43dVJ.js.map
244
+ //# sourceMappingURL=pipeline-agent-reader-CeWhQzXC.js.map
@@ -57,4 +57,4 @@ var init_pipeline_membership = __esmMin((() => {
57
57
  //#endregion
58
58
  export { init_pipeline_membership as n, resolvePipelineMembership as r, PLANNED_BACKLOG_SPEC_ONLY_REASON as t };
59
59
 
60
- //# sourceMappingURL=pipeline-membership-BHZp_ShY.js.map
60
+ //# sourceMappingURL=pipeline-membership-BV4hdkHm.js.map
@@ -1,3 +1,3 @@
1
- import { n as init_pipeline_membership, r as resolvePipelineMembership, t as PLANNED_BACKLOG_SPEC_ONLY_REASON } from "./pipeline-membership-BHZp_ShY.js";
1
+ import { n as init_pipeline_membership, r as resolvePipelineMembership, t as PLANNED_BACKLOG_SPEC_ONLY_REASON } from "./pipeline-membership-BV4hdkHm.js";
2
2
  init_pipeline_membership();
3
3
  export { PLANNED_BACKLOG_SPEC_ONLY_REASON, resolvePipelineMembership };
@@ -1,12 +1,12 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { $ as readIssueRecord, Y as init_record, et as readIssueRecordForWorkspaceSync, fn as init_projects, rn as getIssuePrefix, vn as listProjectsSync } from "./config-yaml-BwOEANMr.js";
3
- import { h as loadConfigSync, p as init_config } from "./config-tucKBCCc.js";
4
- import { r as init_factory, t as createTracker } from "./factory-D4V2wd_V.js";
5
- import { C as init_specs, w as listSpecs } from "./io-DfvO2xyh.js";
6
- import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-xnVJVrrO.js";
7
- import { i as init_project_repos, n as getRepoForge, r as inferProjectForgeSync } from "./project-repos-B4MK48j4.js";
8
- import { A as createSettledTtlPromiseCache, N as withConcurrencyLimitPromise, _ as listOpenIssuesWithLabelsPromise, f as init_github_app, h as listIssuesWithAnyLabelPromise, j as init_concurrency } from "./github-app-4UX8VIr8.js";
9
- import { a as PARKED_LABEL, c as VETOED_LABEL, h as init_pickup, i as OBJECTION_LABEL, o as READY_LABEL, s as RELEASED_LABEL, t as BLOCKS_MAIN_LABEL } from "./pickup-BjJsSX12.js";
2
+ import { $ as readIssueRecord, Y as init_record, et as readIssueRecordForWorkspaceSync, fn as init_projects, rn as getIssuePrefix, vn as listProjectsSync } from "./config-yaml-D60AnTIu.js";
3
+ import { h as loadConfigSync, p as init_config } from "./config-NxI9Yl2f.js";
4
+ import { r as init_factory, t as createTracker } from "./factory-CWVKwKFE.js";
5
+ import { C as init_specs, w as listSpecs } from "./io-BCtZoXHo.js";
6
+ import { i as init_project_repos, n as getRepoForge, r as inferProjectForgeSync } from "./project-repos-CsfvLtmr.js";
7
+ import { n as resolveGitHubIssueSync, t as init_tracker_utils } from "./tracker-utils-Dbg_pVZg.js";
8
+ import { A as createSettledTtlPromiseCache, N as withConcurrencyLimitPromise, _ as listOpenIssuesWithLabelsPromise, f as init_github_app, h as listIssuesWithAnyLabelPromise, j as init_concurrency } from "./github-app-BlMSzSTw.js";
9
+ import { a as PARKED_LABEL, c as VETOED_LABEL, h as init_pickup, i as OBJECTION_LABEL, o as READY_LABEL, s as RELEASED_LABEL, t as BLOCKS_MAIN_LABEL } from "./pickup-Dle6k9Xt.js";
10
10
  import { join, resolve } from "node:path";
11
11
  import { Effect } from "effect";
12
12
  import { realpath } from "node:fs/promises";
@@ -488,14 +488,15 @@ async function gatherIssueBranchContainment(project, issueId, run = defaultDeps.
488
488
  const result = {
489
489
  unmergedRefs: [],
490
490
  mergedWorkRefs: [],
491
- pointerRefs: []
491
+ pointerRefs: [],
492
+ mergedWorkHeads: []
492
493
  };
493
494
  for (const { repository, snapshot } of snapshots) {
494
495
  const unmergedSet = new Set(snapshot.unmergedRefs.split("\n").map((ref) => ref.trim()).filter(Boolean));
495
496
  const firstParentShas = new Set(snapshot.firstParentShas.split("\n").map((sha) => sha.trim()).filter(Boolean));
496
497
  const refLines = snapshot.refs.split("\n").map((line) => line.trim()).filter(Boolean);
497
498
  for (const line of refLines) {
498
- const { ref } = parseBranchRefLine(line);
499
+ const { ref, tipSha } = parseBranchRefLine(line);
499
500
  const qualifiedRef = `${repository.path}:${ref}`;
500
501
  switch (classifyBranchRefLine(line, unmergedSet, firstParentShas)) {
501
502
  case "unmerged":
@@ -503,6 +504,10 @@ async function gatherIssueBranchContainment(project, issueId, run = defaultDeps.
503
504
  break;
504
505
  case "merged-work":
505
506
  result.mergedWorkRefs.push(qualifiedRef);
507
+ if (tipSha) result.mergedWorkHeads.push({
508
+ ref: qualifiedRef,
509
+ head: tipSha
510
+ });
506
511
  break;
507
512
  case "pointer":
508
513
  result.pointerRefs.push(qualifiedRef);
@@ -727,7 +732,7 @@ var init_pipeline_membership_gather = __esmMin((() => {
727
732
  },
728
733
  batchHasTerminalCloseOutRecords: async (project, issueIds) => {
729
734
  const result = /* @__PURE__ */ new Map();
730
- const { batchReadIssueRecords } = await import("./record-By-wp6pg.js");
735
+ const { batchReadIssueRecords } = await import("./record-DYOg97Iv.js");
731
736
  const batchResults = await batchReadIssueRecords(project, issueIds);
732
737
  for (const id of issueIds) {
733
738
  const record = batchResults.get(id);
@@ -750,4 +755,4 @@ var init_pipeline_membership_gather = __esmMin((() => {
750
755
  //#endregion
751
756
  export { removeIssueParkedLabel as A, applyIssueParkedLabel as C, init_label_ops as D, applyIssueVetoedLabel as E, removeIssueReleasedLabel as M, removeIssueVetoedLabel as N, removeIssueBlocksMainLabel as O, applyIssueObjectionLabel as S, applyIssueReleasedLabel as T, init_gitlab_merge_requests as _, gatherProjectLensSignals as a, reconcilePipelineLabelsPatrol as b, listIssueStatesBatched as c, mapPipelineProjects as d, projectRepositories as f, parseIssueIdFromTextSync as g, init_resource_utils as h, gatherIssueBranchContainment as i, removeIssueReadyLabel as j, removeIssueObjectionLabel as k, listMergedPullRequestHeadsBatched as l, snapshotBranchRefs as m, PipelineMembershipUnavailableError as n, gatherProjectLensSignalsForProjects as o, resolveRepositoryDefaultBranch as p, classifyBranchRefLine as r, init_pipeline_membership_gather as s, PIPELINE_PROJECT_CONCURRENCY as t, listOpenPullRequestsSnapshot as u, listOpenGitLabMergeRequests as v, applyIssueReadyLabel as w, applyIssueBlocksMainLabel as x, init_label_reconciler as y };
752
757
 
753
- //# sourceMappingURL=pipeline-membership-gather-CGFY1v-y.js.map
758
+ //# sourceMappingURL=pipeline-membership-gather-Ba0wJNCR.js.map
@@ -1,3 +1,3 @@
1
- import { a as gatherProjectLensSignals, c as listIssueStatesBatched, d as mapPipelineProjects, f as projectRepositories, i as gatherIssueBranchContainment, l as listMergedPullRequestHeadsBatched, m as snapshotBranchRefs, n as PipelineMembershipUnavailableError, o as gatherProjectLensSignalsForProjects, p as resolveRepositoryDefaultBranch, r as classifyBranchRefLine, s as init_pipeline_membership_gather, t as PIPELINE_PROJECT_CONCURRENCY, u as listOpenPullRequestsSnapshot } from "./pipeline-membership-gather-CGFY1v-y.js";
1
+ import { a as gatherProjectLensSignals, c as listIssueStatesBatched, d as mapPipelineProjects, f as projectRepositories, i as gatherIssueBranchContainment, l as listMergedPullRequestHeadsBatched, m as snapshotBranchRefs, n as PipelineMembershipUnavailableError, o as gatherProjectLensSignalsForProjects, p as resolveRepositoryDefaultBranch, r as classifyBranchRefLine, s as init_pipeline_membership_gather, t as PIPELINE_PROJECT_CONCURRENCY, u as listOpenPullRequestsSnapshot } from "./pipeline-membership-gather-Ba0wJNCR.js";
2
2
  init_pipeline_membership_gather();
3
3
  export { PIPELINE_PROJECT_CONCURRENCY, PipelineMembershipUnavailableError, classifyBranchRefLine, gatherIssueBranchContainment, gatherProjectLensSignals, gatherProjectLensSignalsForProjects, listIssueStatesBatched, listMergedPullRequestHeadsBatched, listOpenPullRequestsSnapshot, mapPipelineProjects, projectRepositories, resolveRepositoryDefaultBranch, snapshotBranchRefs };
@@ -1,3 +1,3 @@
1
- import { a as setPipelineHandlerSync, i as setPipelineHandler, n as notifyPipeline, r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-BmsLWM_2.js";
1
+ import { a as setPipelineHandlerSync, i as setPipelineHandler, n as notifyPipeline, r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-p190L97e.js";
2
2
  init_pipeline_notifier();
3
3
  export { notifyPipeline, notifyPipelineSync, setPipelineHandler, setPipelineHandlerSync };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-zY75jrRJ.js";
2
+ import { o as getInternalTokenSync, s as init_internal_token, t as INTERNAL_TOKEN_HEADER } from "./internal-token-BeIWG_kT.js";
3
3
  import { Effect } from "effect";
4
4
  //#region ../../lib/pipeline-notifier.ts
5
5
  /**
@@ -60,4 +60,4 @@ var init_pipeline_notifier = __esmMin((() => {
60
60
  //#endregion
61
61
  export { setPipelineHandlerSync as a, setPipelineHandler as i, notifyPipeline as n, notifyPipelineSync as r, init_pipeline_notifier as t };
62
62
 
63
- //# sourceMappingURL=pipeline-notifier-BmsLWM_2.js.map
63
+ //# sourceMappingURL=pipeline-notifier-p190L97e.js.map
@@ -1,4 +1,4 @@
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
  //#region ../../lib/cloister/post-merge-lifecycle-worker.ts
3
3
  init_review_status_source();
4
4
  const queue = /* @__PURE__ */ new Map();
@@ -15,7 +15,7 @@ async function drainQueue() {
15
15
  continue;
16
16
  }
17
17
  try {
18
- const { postMergeLifecycle } = await import("./merge-agent-BRSz26Oh.js");
18
+ const { postMergeLifecycle } = await import("./merge-agent-D-4_iQgy.js");
19
19
  await postMergeLifecycle(entry.issueId, entry.projectPath, entry.sourceBranch, { skipDeploy: true });
20
20
  console.log(`[deacon] Completed pending post-merge lifecycle for ${entry.issueId}`);
21
21
  } catch (error) {
@@ -47,4 +47,4 @@ function enqueuePostMergeLifecycle(issueId, projectPath, sourceBranch) {
47
47
  //#endregion
48
48
  export { enqueuePostMergeLifecycle };
49
49
 
50
- //# sourceMappingURL=post-merge-lifecycle-worker-KK1RTKRE.js.map
50
+ //# sourceMappingURL=post-merge-lifecycle-worker-OQoK8Ckg.js.map