@overdeck/desktop 0.47.1 → 0.48.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 (444) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +59 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-Cd7ZGZCq.js → acceptance-criteria-DmtLDbtt.js} +2 -2
  4. package/server/{activity-logger-CyteR4JO.js → activity-logger-Co5qljIj.js} +55 -4
  5. package/server/activity-logger-K7FYGF_z.js +3 -0
  6. package/server/{advancing-selfheal-DieFp3qi.js → advancing-selfheal-8AR68Asf.js} +6 -6
  7. package/server/{agent-gc-BMcgTDl7.js → agent-gc-BmYeT6eH.js} +5 -5
  8. package/server/agent-state-Dq3s84-P.js +3 -0
  9. package/server/{agent-state-service-DFO6qvHp.js → agent-state-service-DK1Vay1E.js} +1 -1
  10. package/server/{agent-state-service-BOzQhLjU.js → agent-state-service-rjnzpHDx.js} +6 -6
  11. package/server/{agent-state-source-Ca_zCaII.js → agent-state-source-Ds968-j6.js} +1 -1
  12. package/server/{agents-CtACUuVG.js → agents-Dls7tfJH.js} +5 -5
  13. package/server/agents-IPSa5kzn.js +3 -0
  14. package/server/{archive-planning-Binfb99i.js → archive-planning-Cq7cyinS.js} +51 -24
  15. package/server/archive-planning-MbkGCBIY.js +2 -0
  16. package/server/{artifact-index-jobs-Jn7BGOtV.js → artifact-index-jobs-Dj_8kpTd.js} +3 -3
  17. package/server/{assemble-DsqK9OAq.js → assemble-BTCmbcfH.js} +20 -13
  18. package/server/{auto-spawn-consent-BooqhC3L.js → auto-spawn-consent-lXqRJ1Dr.js} +304 -121
  19. package/server/{backlog-auto-trigger-BADGPxov.js → backlog-auto-trigger-Dn-amzt6.js} +3 -3
  20. package/server/{behavior-B7biGtFT.js → behavior-DIMQMRzs.js} +2 -2
  21. package/server/{boot-reconciled-stop-events-bQUzU8ns.js → boot-reconciled-stop-events-D6SeUTIr.js} +1 -1
  22. package/server/{bridge-pool-patrol-DsPj6F7t.js → bridge-pool-patrol-BEjt-xF3.js} +2 -2
  23. package/server/{briefing-freshness-CUerZqWd.js → briefing-freshness-3PNmL_p3.js} +2 -2
  24. package/server/{build-info-D0q_i8WM.js → build-info-CJg813Hm.js} +3 -3
  25. package/server/{build-info-Du74MKiP.js → build-info-CXyeFsXu.js} +1 -1
  26. package/server/{checkpoint-manager-Cu-R5Uzg.js → checkpoint-manager-9t7G5c1V.js} +1 -1
  27. package/server/{checkpoint-manager-R5tnaxEY.js → checkpoint-manager-B2G38R3p.js} +3 -3
  28. package/server/checkpoint-worker.js +1 -1
  29. package/server/{checkpoints-wF84ubZ8.js → checkpoints-CuBgiXO-.js} +1 -1
  30. package/server/{checkpoints-DYtLu-PB.js → checkpoints-VTZMd4Qm.js} +2 -2
  31. package/server/{claude-hooks-provision-DXI3Wqlm.js → claude-hooks-provision-55SyQaPz.js} +2 -2
  32. package/server/{claude-hooks-provision-UKxCeOyj.js → claude-hooks-provision-CEUT-CZd.js} +1 -1
  33. package/server/{claude-permissions-DYVLnX9t.js → claude-permissions-Cn0dIu2i.js} +2 -2
  34. package/server/{claude-settings-overlay-DxP2F_gY.js → claude-settings-overlay-B19hdzSA.js} +1 -1
  35. package/server/{claude-settings-overlay-DsbpIq2d.js → claude-settings-overlay-Yg_ANh81.js} +2 -2
  36. package/server/{cli-DzRKxxP_.js → cli-C9S84iTy.js} +79 -22
  37. package/server/cli-M1cwZ__d.js +3 -0
  38. package/server/{cliproxy-CG4meRFc.js → cliproxy-CJq3KXU6.js} +2 -2
  39. package/server/{cliproxy-Cwzw39yN.js → cliproxy-DgEZlr7Y.js} +1 -1
  40. package/server/{close-issue-BX1bATJy.js → close-issue-DPxRddGR.js} +5 -5
  41. package/server/{closed-issue-reaper-hLt0W86J.js → closed-issue-reaper-C5Zn4GRS.js} +13 -13
  42. package/server/{closed-issue-reaper-DvnTSN6a.js → closed-issue-reaper-D-2B48Ri.js} +1 -1
  43. package/server/{codex-rnJN3v3_.js → codex-B3n_rkwn.js} +1 -1
  44. package/server/{codex-BYwi1uyW.js → codex-CjkD1PJu.js} +6 -6
  45. package/server/{codex-parser-Poyz29GE.js → codex-parser-DpB1Il-P.js} +2 -2
  46. package/server/{compaction-continuation-DtMfHN0f.js → compaction-continuation-DZD9ukSE.js} +3 -3
  47. package/server/{config-R793W0yA.js → config-C5saf4Ja.js} +1 -1
  48. package/server/{config-CX4vk1CV.js → config-DnLJATZk.js} +2 -2
  49. package/server/{config-ktAVnp4s.js → config-DvM8jtQK.js} +2 -2
  50. package/server/{config-yaml-CxdwhAIA.js → config-yaml-BSCqwmX0.js} +11299 -10972
  51. package/server/{conflict-gate-BSTlwCtF.js → conflict-gate-DXa_L28t.js} +1 -1
  52. package/server/{conflict-gate-BNv6UolH.js → conflict-gate-WfVqgalf.js} +4 -4
  53. package/server/{context-layers-DCdaGsRG.js → context-layers-D7UqH9Ab.js} +2 -2
  54. package/server/{context-layers-DlWsDiRF.js → context-layers-Dpz3Vd6d.js} +3 -3
  55. package/server/{control-settings-qYYHrIqy.js → control-settings-DVf6pKyv.js} +4 -4
  56. package/server/{conversation-compaction-BxUKObHb.js → conversation-compaction-5XuH6OBn.js} +1 -1
  57. package/server/{conversation-compaction-CXQrN3I_.js → conversation-compaction-COrbnX1J.js} +8 -8
  58. package/server/{conversation-service-CZiUE8Uw.js → conversation-service-BufdtnZF.js} +169 -10
  59. package/server/{conversation-service-CDnQ3ayN.js → conversation-service-DnUyIiLb.js} +1 -1
  60. package/server/{conversations-D7lR670u.js → conversations-B4rxz-Wl.js} +17 -10
  61. package/server/{conversations-DXl5YTf4.js → conversations-D1bwxQMy.js} +1 -1
  62. package/server/{cost-Aat8HfO_.js → cost-CpFDrJUS.js} +46 -2
  63. package/server/{cost-CWvN9FP2.js → cost-KLuwKCW9.js} +3 -3
  64. package/server/{cost-sync-DiUBXwl6.js → cost-sync-cesi9dp8.js} +3 -3
  65. package/server/{dag-5QlmH0oC.js → dag-BYiFMqpU.js} +2 -2
  66. package/server/{dangerous-git-ops-DWX6Og8c.js → dangerous-git-ops-BKvd3-Hk.js} +1 -1
  67. package/server/dashboard-db-worker.js +7 -7
  68. package/server/{deacon-PW_bg4uL.js → deacon-BbsWw8a6.js} +3 -3
  69. package/server/{deacon-B1LD5cJU.js → deacon-HdEh0Esp.js} +672 -181
  70. package/server/deacon-event-client-C93rvOT7.js +237 -0
  71. package/server/deacon-event-client-Ck5Ei7Mn.js +3 -0
  72. package/server/{deacon-nudge-log-DPHsO14z.js → deacon-nudge-log-BND_97Wo.js} +4 -3
  73. package/server/{deacon-pending-lifecycle-2ZflPxgo.js → deacon-pending-lifecycle-CD3YsiQK.js} +3 -3
  74. package/server/deacon-swarm-DgWADWd_.js +2 -0
  75. package/server/{deacon-swarm-DwGUgSVp.js → deacon-swarm-rqrl4TMs.js} +39 -18
  76. package/server/deacon.js +12 -210
  77. package/server/{dead-end-trip-B06RFIr2.js → dead-end-trip-DSF23CLX.js} +4 -3
  78. package/server/dead-end-trip-zKlS4v6f.js +2 -0
  79. package/server/delivery-CsbQdZkS.js +3 -0
  80. package/server/{deploy-patrol-BNjeCL8u.js → deploy-patrol-kARAkji4.js} +17 -21
  81. package/server/{deploy-queue-CKT_Ia9p.js → deploy-queue-Bj0HJT1i.js} +2 -2
  82. package/server/{deploy-queue-DMMYhFC8.js → deploy-queue-rjTUy1RM.js} +1 -1
  83. package/server/{deploy-window-DC8lze3d.js → deploy-window-B2IM-9G5.js} +10 -44
  84. package/server/{deploy-window-D_AimdNN.js → deploy-window-BNFWnA8D.js} +1 -1
  85. package/server/{dev-supervisor-C4F0vbno.js → dev-supervisor-B1mZYXz4.js} +2 -2
  86. package/server/{devcontainer-renderer-66sqMQIi.js → devcontainer-renderer-B-o68Z5B.js} +3 -3
  87. package/server/{dist-C5FT9lTG.js → dist-3W--cGMa.js} +1 -1
  88. package/server/dist-BR0QtwmS.js +3 -0
  89. package/server/{dist-src-B-AlGWSl.js → dist-src-C-Vk2jNk.js} +1 -1
  90. package/server/{docker-BxrFhTZ_.js → docker-DH3jUYg1.js} +1 -1
  91. package/server/{docker-CoAT8R0J.js → docker-meuLKLzV.js} +27 -20
  92. package/server/{dod-Bg6wsKTV.js → dod-D7-9dCOD.js} +1 -1
  93. package/server/{driver-CKVGi51s.js → driver-CmsY2RLl.js} +1 -1
  94. package/server/{durable-review-pipeline-D_DcfIGP.js → durable-review-pipeline-CStTgOAf.js} +1 -1
  95. package/server/{durable-review-pipeline-HkAgnx0L.js → durable-review-pipeline-Chq0lzjL.js} +1 -1
  96. package/server/{ensure-devcontainer-Bg5HJAcO.js → ensure-devcontainer-BE3llBWP.js} +1 -1
  97. package/server/{ensure-devcontainer-DTxChVuA.js → ensure-devcontainer-BXrY7C2Z.js} +4 -4
  98. package/server/{esm-shims-CaBWIR7f.js → esm-shims-Bzy4ZzNU.js} +1 -1
  99. package/server/event-store-COd2tOx8.js +3 -0
  100. package/server/{event-store-CrHcVC5_.js → event-store-D_AR-Y78.js} +184 -11
  101. package/server/{events-ChEFB7Jp.js → events-CCkFWa7X.js} +1 -1
  102. package/server/{events-DhRN-6vM.js → events-zjDQozet.js} +3 -3
  103. package/server/{factory-BezSPaTd.js → factory-DhavwKVc.js} +5 -5
  104. package/server/{feature-registry-population-DhswNiXx.js → feature-registry-population-DWGBKyWd.js} +4 -4
  105. package/server/{feature-registry-storage-CUVNpAso.js → feature-registry-storage-C5DkXmCM.js} +3 -3
  106. package/server/{features-B2CfNPFw.js → features-CC47YcCX.js} +2 -2
  107. package/server/{feedback-target-CMrEAoeA.js → feedback-target-D9Tex35_.js} +1 -1
  108. package/server/{feedback-target-VBr9gKgX.js → feedback-target-DoRCR3L-.js} +8 -8
  109. package/server/{feedback-writer-CY91ckuw.js → feedback-writer-CTSuA6lw.js} +1 -1
  110. package/server/{feedback-writer-xpFgU632.js → feedback-writer-DdsBdtNL.js} +5 -5
  111. package/server/{flywheel-DsICCjTR.js → flywheel-DHWHzaYK.js} +1 -1
  112. package/server/{flywheel-DQqsSm7P.js → flywheel-DJQa9az8.js} +14 -14
  113. package/server/{flywheel-CTVY3yCG.js → flywheel-TacAI9MA.js} +21 -17
  114. package/server/{flywheel-merge-order-C-TI4JGu.js → flywheel-merge-order-D2foPh88.js} +1 -1
  115. package/server/{flywheel-merge-order-CMGz-imq.js → flywheel-merge-order-DRtex2Dt.js} +7 -7
  116. package/server/forge-CdlCG9aS.js +3 -0
  117. package/server/{forge-RTNqJe6a.js → forge-c8LeC-tw.js} +2 -2
  118. package/server/{from-DxGcivc9.js → from-BogSwvr2.js} +1 -1
  119. package/server/{fs-lock-Bre3sGoz.js → fs-lock-D_GeJtXl.js} +3 -3
  120. package/server/{fts-operations-BuTdlZFA.js → fts-operations-DP9R-8Q3.js} +3 -3
  121. package/server/{git-utils-CedsVume.js → git-utils-C31x1lpE.js} +1 -1
  122. package/server/{git-utils-DtdoEXJk.js → git-utils-xQ74FoSn.js} +5 -4
  123. package/server/{github-app-DIE8BkHI.js → github-app-CpQSDlv8.js} +1 -1
  124. package/server/{github-app-gVnZcP9B.js → github-app-D2QuvZ3j.js} +3 -3
  125. package/server/{github-client-BrAC6ELh.js → github-client-D9YvJX5D.js} +3 -3
  126. package/server/{github-client-CBOkvBUl.js → github-client-Tpi3PmKX.js} +1 -1
  127. package/server/{github-pr-lookup-CgMULTPf.js → github-pr-lookup-DvBMv-IW.js} +2 -2
  128. package/server/{harness-binary-CnBHpd57.js → harness-binary-BHxWf_sX.js} +7 -6
  129. package/server/{harness-resolve-BVj6sI8m.js → harness-resolve-bj9WMABA.js} +4 -4
  130. package/server/{health-events-BBWO_Dh9.js → health-events-bCDPn59Z.js} +2 -2
  131. package/server/{health-events-Der6bOkm.js → health-events-qo7Ss34U.js} +1 -1
  132. package/server/{hooks-BOavco-e.js → hooks-Dyxtg5fk.js} +2 -2
  133. package/server/{hooks-BJNal-bs.js → hooks-X2XHBB2b.js} +1 -1
  134. package/server/{hume-DBocJFkA.js → hume-DrZEGpqc.js} +2 -2
  135. package/server/hume-YPsy4UA8.js +3 -0
  136. package/server/{idle-stack-reaper-DQFh8rDh.js → idle-stack-reaper-CJ1ygW0p.js} +37 -7
  137. package/server/{idle-stack-reaper-CyGxXOfC.js → idle-stack-reaper-uJGOb-vu.js} +1 -1
  138. package/server/{in-flight-guard-nXEKoxI7.js → in-flight-guard-CG2Eo-rr.js} +1 -1
  139. package/server/{infra-BDQDRopn.js → infra-CTrmVqc_.js} +111 -6
  140. package/server/{injection-DfFFEMKL.js → injection-BisQ0lpX.js} +1 -1
  141. package/server/{injection-CCopdUKz.js → injection-C9sxqbc2.js} +73 -193
  142. package/server/{inspect-agent-FCDlNT_i.js → inspect-agent-BoSO51YC.js} +12 -12
  143. package/server/inspect-agent-BykeOH4a.js +2 -0
  144. package/server/{internal-token-BG6yQKNL.js → internal-token-AvXePaQT.js} +2 -2
  145. package/server/{internal-token-BJZa40Ld.js → internal-token-Djkj-yqK.js} +1 -1
  146. package/server/{io-C0NV7y6C.js → io-mxOWMZ7I.js} +6 -6
  147. package/server/{issue-closed-CNNGbhWm.js → issue-closed-Bj_bCv_0.js} +7 -7
  148. package/server/{issue-lifecycle-DSH0GpWC.js → issue-lifecycle-A5YIpDZE.js} +1 -1
  149. package/server/{issue-lifecycle-BXfzxFCD.js → issue-lifecycle-BXUqaHzF.js} +32 -28
  150. package/server/{issue-service-singleton-F3A5VP6M.js → issue-service-singleton-BPNEXczv.js} +11 -11
  151. package/server/{issue-service-singleton-lwFJ4dHk.js → issue-service-singleton-CcaHjKPR.js} +1 -1
  152. package/server/{issues-DA-U_MpR.js → issues-AX-YBeAQ.js} +2 -2
  153. package/server/{jsonl-parser-BXiGANOh.js → jsonl-parser-CgYWQ20q.js} +7 -3
  154. package/server/kimi-code-BYbme0aV.js +579 -0
  155. package/server/kimi-code-D_Ppt82c.js +3 -0
  156. package/server/kimi-parser-B-JBg3Pv.js +147 -0
  157. package/server/{label-cleanup-BnxRk0Eo.js → label-cleanup-sXUlgdM0.js} +3 -3
  158. package/server/{lifecycle-DOgGnpIv.js → lifecycle-D2X3al0D.js} +2 -2
  159. package/server/{lifecycle-Di48-w4x.js → lifecycle-DjlljAZ1.js} +6 -6
  160. package/server/{lifecycle-io-eVG6v_8-.js → lifecycle-io-C5nVk55o.js} +1 -1
  161. package/server/{lifecycle-io-1XSeczTr.js → lifecycle-io-NPm1YtIG.js} +5 -5
  162. package/server/{linear-client-CvGo9n7M.js → linear-client--luYwCZg.js} +1 -1
  163. package/server/{linear-client-CYZRrcjp.js → linear-client-B8pLegW1.js} +3 -3
  164. package/server/{linear-mcp-auth-Cp0XaP96.js → linear-mcp-auth-BQVWV0I3.js} +6 -6
  165. package/server/{linear-mcp-auth-DoJnjdPZ.js → linear-mcp-auth-Dx81Zl4G.js} +1 -1
  166. package/server/memory-fts-worker.js +1 -1
  167. package/server/{merge-DO14mOr3.js → merge-Bx5Bh9pi.js} +3 -3
  168. package/server/{merge-ZF99ig6A.js → merge-Dqmh_zja.js} +1 -1
  169. package/server/{merge-agent-gpiRkcvj.js → merge-agent-DP9AUY29.js} +33 -33
  170. package/server/{merge-agent-C1-9zbP_.js → merge-agent-DWd0KfiS.js} +1 -1
  171. package/server/{merge-batch-C11ocNkO.js → merge-batch-BdmvTEAC.js} +1 -1
  172. package/server/{merge-completeness-CghMbyX7.js → merge-completeness-BfRwFjRx.js} +1 -1
  173. package/server/{merge-completeness-BUzPZy0E.js → merge-completeness-C1FevcDT.js} +4 -4
  174. package/server/merge-ops-B98tKc1e.js +2 -0
  175. package/server/merge-rebase-BLykMwPO.js +2 -0
  176. package/server/{merge-rebase-iwlUzZjr.js → merge-rebase-BX1xKsrE.js} +2 -2
  177. package/server/{merge-set-Dbnx4chw.js → merge-set-DsLjjLEV.js} +4 -4
  178. package/server/{merge-set-BymrheTj.js → merge-set-H6epHOsw.js} +1 -1
  179. package/server/{merge-sync-CM978zez.js → merge-sync-BEdfsQV4.js} +2 -2
  180. package/server/{merge-sync-CqEtqjI2.js → merge-sync-BebcWWGA.js} +1 -1
  181. package/server/{merge-train-DvLcAn1G.js → merge-train-D1I0lNOT.js} +4 -4
  182. package/server/{merge-train-deps-Cl_kcRbO.js → merge-train-deps-D_-C0Pk2.js} +4 -4
  183. package/server/{merge-verification-c9Y9mllw.js → merge-verification-DN1Ov9bU.js} +6 -6
  184. package/server/{merged-docker-cleanup-worker-CGiDOdv8.js → merged-docker-cleanup-worker-CfXSr2pA.js} +4 -4
  185. package/server/{merged-docker-cleanup-worker-DgsLOx3E.js → merged-docker-cleanup-worker-ybsPyHjB.js} +1 -1
  186. package/server/{multipart-parser-D0twwRjz.js → multipart-parser-CL5QG8iv.js} +2 -2
  187. package/server/{no-resume-mode-DZvP0M_S.js → no-resume-mode-DUR7Hi98.js} +1 -1
  188. package/server/node_modules/.package-lock.json +7 -7
  189. package/server/node_modules/brace-expansion/README.md +23 -1
  190. package/server/node_modules/brace-expansion/index.js +206 -85
  191. package/server/node_modules/brace-expansion/package.json +1 -1
  192. package/server/node_modules/msgpackr/dist/index-no-eval.cjs +34 -28
  193. package/server/node_modules/msgpackr/dist/index-no-eval.cjs.map +1 -1
  194. package/server/node_modules/msgpackr/dist/index-no-eval.min.js +1 -1
  195. package/server/node_modules/msgpackr/dist/index-no-eval.min.js.map +1 -1
  196. package/server/node_modules/msgpackr/dist/index.js +34 -28
  197. package/server/node_modules/msgpackr/dist/index.js.map +1 -1
  198. package/server/node_modules/msgpackr/dist/index.min.js +1 -1
  199. package/server/node_modules/msgpackr/dist/index.min.js.map +1 -1
  200. package/server/node_modules/msgpackr/dist/node.cjs +36 -29
  201. package/server/node_modules/msgpackr/dist/node.cjs.map +1 -1
  202. package/server/node_modules/msgpackr/dist/test.js +63 -32
  203. package/server/node_modules/msgpackr/dist/test.js.map +1 -1
  204. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs +34 -28
  205. package/server/node_modules/msgpackr/dist/unpack-no-eval.cjs.map +1 -1
  206. package/server/node_modules/msgpackr/package.json +1 -1
  207. package/server/node_modules/msgpackr/unpack.js +34 -28
  208. package/server/{orphan-proposed-reconciler-6r2OEfYd.js → orphan-proposed-reconciler-CEW1maPl.js} +1 -1
  209. package/server/{orphan-proposed-reconciler-DtQP6oE_.js → orphan-proposed-reconciler-DfqHZftT.js} +23 -22
  210. package/server/package-lock.json +8 -8
  211. package/server/package.json +1 -1
  212. package/server/{pan-dir-DAOb1V2-.js → pan-dir-DhgKfO86.js} +21 -6
  213. package/server/{paths-DuATV5iE.js → paths-BUuhi6jM.js} +17 -17
  214. package/server/{pending-lifecycle-claim-DQUHIDfX.js → pending-lifecycle-claim-DJlA1rTR.js} +2 -2
  215. package/server/{persistent-logger-CBj016pT.js → persistent-logger-s8cbpFNV.js} +2 -2
  216. package/server/{pickup-zXZl5lQI.js → pickup-2AxtB3dW.js} +1 -1
  217. package/server/{pipeline-membership-DHOXmvba.js → pipeline-membership-2_okL5bm.js} +1 -1
  218. package/server/{pipeline-membership-B2yUcBz7.js → pipeline-membership-Dqv6_0ig.js} +1 -1
  219. package/server/{pipeline-membership-gather-OkLXuvxR.js → pipeline-membership-gather-4F1-tXKI.js} +1 -1
  220. package/server/{pipeline-membership-gather-BIcJ-N0W.js → pipeline-membership-gather-CtJ_7aGf.js} +149 -17
  221. package/server/{pipeline-notifier-BmwrVKsO.js → pipeline-notifier-CO9rxJgB.js} +1 -1
  222. package/server/{pipeline-notifier-CxMes51i.js → pipeline-notifier-DDfVBJhJ.js} +2 -2
  223. package/server/{post-merge-lifecycle-worker-3u_rA4R0.js → post-merge-lifecycle-worker-DmSOkeNp.js} +3 -3
  224. package/server/{project-pipelines-C3SPFJ38.js → project-pipelines-72WE8GVK.js} +2 -2
  225. package/server/{project-repos-BOpBzkO6.js → project-repos-BAqDwtvi.js} +16 -11
  226. package/server/project-repos-Df90Zw7Y.js +3 -0
  227. package/server/projects-WqMWCdpa.js +3 -0
  228. package/server/{prompts-B0TtboFm.js → prompts-XkL10m8M.js} +2 -2
  229. package/server/{providers-O2smCvSz.js → providers-ClGPGkQ8.js} +15 -12
  230. package/server/providers-DFUOed8u.js +3 -0
  231. package/server/public/assets/{chunk-BO2N2NFS-D_pGACYN.js → chunk-BO2N2NFS-CeQUdPxr.js} +4 -4
  232. package/server/public/assets/{diagram-OG6HWLK6-BO6fe3hH.js → diagram-OG6HWLK6-B7rgk4yT.js} +1 -1
  233. package/server/public/assets/{dist-5zingMiA.js → dist-2RPazfXY.js} +3 -3
  234. package/server/public/assets/{dist-CVxhbI2E.js → dist-B9NInrVZ.js} +1 -1
  235. package/server/public/assets/{ganttDiagram-6RSMTGT7-Bgj4A7kp.js → ganttDiagram-6RSMTGT7-Bxp0gV14.js} +1 -1
  236. package/server/public/assets/{highlighted-body-OFNGDK62-DNPK7_cm.js → highlighted-body-OFNGDK62-CzoRTVlC.js} +1 -1
  237. package/server/public/assets/index-Cml-kHo6.css +1 -0
  238. package/server/public/assets/{index-DEpY-D1O.js → index-CvN8cEgs.js} +216 -215
  239. package/server/public/assets/{linear-BB0jQT16.js → linear-CFEEl3ND.js} +1 -1
  240. package/server/public/assets/mermaid-GHXKKRXX-CpV7nCBM.js +1 -0
  241. package/server/public/assets/{pieDiagram-4H26LBE5-DeGIzzpZ.js → pieDiagram-4H26LBE5-BeR8R0cr.js} +1 -1
  242. package/server/public/assets/{prod-XBLvikex.js → prod-CYjzjCrn.js} +4 -4
  243. package/server/public/assets/{quadrantDiagram-W4KKPZXB-BV9SLeWz.js → quadrantDiagram-W4KKPZXB-BpcTkFuW.js} +1 -1
  244. package/server/public/assets/{sankeyDiagram-5OEKKPKP-Dwja0gj8.js → sankeyDiagram-5OEKKPKP-Bx2ETEV5.js} +1 -1
  245. package/server/public/assets/{xychartDiagram-2RQKCTM6-DCB4qvfw.js → xychartDiagram-2RQKCTM6-BKgEAFaj.js} +1 -1
  246. package/server/public/index.html +2 -2
  247. package/server/{pull-requests-BonZ4WVG.js → pull-requests-B-KrUph5.js} +3 -3
  248. package/server/{pull-requests-DNcJUVWA.js → pull-requests-DK5k92B4.js} +1 -1
  249. package/server/{queries-DCX27GRr.js → queries-DVpl1vsU.js} +1212 -193
  250. package/server/{rally-Cxe7lKYX.js → rally-DbE561hD.js} +3 -3
  251. package/server/rally-O_st_X7n.js +3 -0
  252. package/server/{rally-api-CzkKenoi.js → rally-api-CZLeEd2C.js} +2 -2
  253. package/server/{rally-api-Cp50exEi.js → rally-api-DaHtn5QN.js} +1 -1
  254. package/server/{rally-client-Bu3Cekkw.js → rally-client-C-MAl8ur.js} +1 -1
  255. package/server/{rally-client-CyBBEDHu.js → rally-client-Ch3zRsBX.js} +5 -5
  256. package/server/{reap-terminal-sessions-CtAhr6L0.js → reap-terminal-sessions-C1n0ALRb.js} +2 -2
  257. package/server/{reap-terminal-sessions-DvFqQUnq.js → reap-terminal-sessions-DegFS2p1.js} +2 -2
  258. package/server/{rebuild-stack-hCQtprWC.js → rebuild-stack-C9Li44A3.js} +20 -10
  259. package/server/{rebuild-stack-BKYpIPDL.js → rebuild-stack-qC0jCNm6.js} +2 -2
  260. package/server/{reconstruct-cache-CF2avArx.js → reconstruct-cache-BHyiAg02.js} +7 -7
  261. package/server/record-aVzu-LGm.js +3 -0
  262. package/server/record-update-CZh46a2f.js +617 -0
  263. package/server/{record-update-DhI7eySG.js → record-update-DtdJK2Iw.js} +1 -1
  264. package/server/recovery-trip-CSNWSLDn.js +77 -0
  265. package/server/recovery-trip-_16hFKv4.js +3 -0
  266. package/server/{release-engine-_eO3VFth.js → release-engine-Be5MX5GP.js} +5 -5
  267. package/server/{release-set-vxgZwwZV.js → release-set-DJv_O6PS.js} +3 -3
  268. package/server/{remote-BienmcrZ.js → remote-BMM3uH2J.js} +3 -3
  269. package/server/{remote-CVPCc7Vy.js → remote-C0xVTHA5.js} +3 -3
  270. package/server/{remote-agents-kwsEZvXu.js → remote-agents-BIIoc5pD.js} +1 -1
  271. package/server/{remote-agents-kxraOCGT.js → remote-agents-EUiZ26bj.js} +7 -7
  272. package/server/{remote-completion-BtmZ42aP.js → remote-completion-BS4tJUn8.js} +13 -13
  273. package/server/resolver-BvHd6RE4.js +163 -0
  274. package/server/resume-9thEqAQR.js +3 -0
  275. package/server/{review-agent-CIRr0yYt.js → review-agent-BHGaBoBu.js} +29 -29
  276. package/server/{review-agent-UpAM4DmT.js → review-agent-CD3RQ-tc.js} +1 -1
  277. package/server/{review-artifacts-BCODM9ww.js → review-artifacts-DyhajWso.js} +6 -6
  278. package/server/{review-context-BBsNrDri.js → review-context-B-dlsPnx.js} +9 -9
  279. package/server/{review-convoy-liveness-l06_LYCt.js → review-convoy-liveness-D7M-s_nS.js} +2 -2
  280. package/server/{review-status-CacDM78F.js → review-status-B6wYcOtP.js} +1 -1
  281. package/server/{review-status-CwhA9wmd.js → review-status-CKLk5aZ-.js} +306 -59
  282. package/server/{review-status-emit-BPJwYcRy.js → review-status-emit-CJ7UmEVU.js} +3 -3
  283. package/server/{review-status-enrichment-DvyZAbGR.js → review-status-enrichment-DJRgGX7-.js} +3 -3
  284. package/server/review-status-limits-4EJDCGHO.js +7 -0
  285. package/server/{review-status-source-DWnFE0b6.js → review-status-source-7nU3Z2wL.js} +1 -1
  286. package/server/{review-status-source-B70ekARK.js → review-status-source-BsDYGfyv.js} +1 -1
  287. package/server/{review-status-sync-B0IS6Beh.js → review-status-sync-BLssMTEW.js} +1 -1
  288. package/server/{review-status-sync-h2CJX6ju.js → review-status-sync-BxBeHRde.js} +35 -11
  289. package/server/{review-verdict-feedback-yrrmgps_.js → review-verdict-feedback-5jWuzgpc.js} +22 -10
  290. package/server/{review-verdict-feedback-qRohbFG2.js → review-verdict-feedback-HRY9P4bN.js} +1 -1
  291. package/server/{rollup-CUoav0Op.js → rollup-BGIrCEkU.js} +79 -44
  292. package/server/rollup-CZB4UL9q.js +3 -0
  293. package/server/{scanner-ChURu_b-.js → scanner-DydjXPrz.js} +16 -9
  294. package/server/search-DdtIjAiu.js +395 -0
  295. package/server/{sequence-io-D9ITDxzq.js → sequence-io-Fw-cLyDs.js} +4 -4
  296. package/server/{sequencer-agent-m7gmaakW.js → sequencer-agent-BcpGMt5x.js} +15 -10
  297. package/server/server.js +1258 -438
  298. package/server/{service-BzFG0Us_.js → service-BFFkGsG4.js} +58 -58
  299. package/server/{session-fork-KBq4HIHF.js → session-fork-D0V-3e5P.js} +2 -2
  300. package/server/{session-history-C_EMhIIF.js → session-history-Bta5l9jY.js} +5 -5
  301. package/server/{settings-DejgzzLs.js → settings-Ce8B1daF.js} +2 -2
  302. package/server/{settings-BLbcDqUp.js → settings-E3FnEIUx.js} +3 -3
  303. package/server/settings-eOOJpxi_.js +2 -0
  304. package/server/{shadow-engineering-D8R9I8Yl.js → shadow-engineering-Mt9nJO4i.js} +3 -3
  305. package/server/{shadow-state-C0Af4clN.js → shadow-state-Bzj_AZCV.js} +1 -1
  306. package/server/{shadow-state-fzIqIMDD.js → shadow-state-DrkhoVSx.js} +2 -2
  307. package/server/{shadow-utils-Ugca_9ND.js → shadow-utils-H1GfqP06.js} +2 -2
  308. package/server/{ship-log-VAv-lHrF.js → ship-log-CFUIo4PR.js} +1 -1
  309. package/server/{smart-compaction-BcYY_Suf.js → smart-compaction-DSTq-Wua.js} +1 -1
  310. package/server/{smart-compaction-B2Xu5XEb.js → smart-compaction-Hzp3KCJX.js} +7 -7
  311. package/server/{spawn-planning-session-Dsv-350T.js → spawn-planning-session-C0uSA2SL.js} +2 -2
  312. package/server/{spawn-planning-session-DhCoBPct.js → spawn-planning-session-DN4son31.js} +23 -21
  313. package/server/{specialist-completion-z6v3ZqJE.js → specialist-completion-Cf6tpIh1.js} +1 -1
  314. package/server/{specialist-context-CrA5azkJ.js → specialist-context-DEUEkjIQ.js} +5 -5
  315. package/server/{specialist-handoff-logger-CmpZYJMB.js → specialist-handoff-logger-D_LmQDj3.js} +2 -2
  316. package/server/{specialist-logs-BorrIu0x.js → specialist-logs-7Ynue0R7.js} +3 -3
  317. package/server/{specialists-ZdrifiKx.js → specialists-CQwBEGlD.js} +1 -1
  318. package/server/{specialists-2yLmqph9.js → specialists-DAjPgYs_.js} +504 -238
  319. package/server/{specialists-Dfx9_Wzb.js → specialists-Hr6iW9fU.js} +18 -18
  320. package/server/{specialists-CH6ah6D-.js → specialists-MOoeB4A8.js} +1 -1
  321. package/server/specs-Dl88cbKY.js +3 -0
  322. package/server/{src-B948bGVR.js → src-BYdwL_n-.js} +668 -64
  323. package/server/{src-Dm_NV7f6.js → src-DQnkPN2i.js} +3 -3
  324. package/server/{src-B2e5rGu2.js → src-DhfDV0o4.js} +6 -6
  325. package/server/{stack-health-Bf2WdG4E.js → stack-health-D_iKwNRg.js} +107 -16
  326. package/server/stack-health-deVSdDwn.js +3 -0
  327. package/server/{stale-task-claims-D1Ll8fI5.js → stale-task-claims-BYJGqhLI.js} +5 -5
  328. package/server/{staleness-CuED1Psm.js → staleness-CopBDKnA.js} +1 -1
  329. package/server/{staleness-45qZ_a60.js → staleness-D8WeMUHd.js} +1 -1
  330. package/server/{state-home-B4EWfIxF.js → state-home-DjN8qduI.js} +24 -3
  331. package/server/{state-mapping-BEONzr8P.js → state-mapping-DlM7OYRW.js} +1 -1
  332. package/server/{state-migrate-Cd8BH33U.js → state-migrate-a2p1gtD7.js} +4 -4
  333. package/server/state-mirror-Cv_XgvT5.js +121 -0
  334. package/server/{stuck-remediation-ChcooZuk.js → stuck-remediation-CXJX_kki.js} +1 -1
  335. package/server/{stuck-remediation-DmY5UJLg.js → stuck-remediation-CbCRSz1v.js} +31 -732
  336. package/server/{substrate-bug-weights-service-BvTWrFUz.js → substrate-bug-weights-service-DxpopNd9.js} +3 -3
  337. package/server/{summary-fork--Jr8duYh.js → summary-fork-B61fjRJn.js} +2 -2
  338. package/server/{summary-fork-Ct514_Jl.js → summary-fork-B9pszUJN.js} +91 -10
  339. package/server/supervisor/{injection-budget-B3UyEONL.js → injection-budget-Ar7hgyJq.js} +1 -1
  340. package/server/supervisor/pty-supervisor.js +12 -3
  341. package/server/supervisor/{pty-token-CWRffcCa.js → pty-token-CXCFU0Z8.js} +1 -1
  342. package/server/{supervisor-B7BHGcNA.js → supervisor-BvnxbuuF.js} +6 -4
  343. package/server/supervisor-C69kpqvd.js +2 -0
  344. package/server/{swarm-readiness-MNE5O8hn.js → swarm-readiness-vTw1kqGa.js} +3 -3
  345. package/server/{system-prerequisites-Cin9ZgDx.js → system-prerequisites-LLzTEqsK.js} +3 -3
  346. package/server/{teardown-workspace-CvBpvc85.js → teardown-workspace-CqKKVJr1.js} +15 -15
  347. package/server/{test-agent-queue-DmSIqays.js → test-agent-queue-CWMq7oyG.js} +8 -7
  348. package/server/{test-verdict-BieVDAV1.js → test-verdict-NdtgRBuA.js} +1 -1
  349. package/server/{test-verdict-Cy2jJGTe.js → test-verdict-diIWE6hz.js} +15 -3
  350. package/server/{tldr-daemon-Ca0eovh3.js → tldr-daemon-B1Jhrtc8.js} +1 -1
  351. package/server/{tldr-daemon-IOssGwg7.js → tldr-daemon-Bpls1CJB.js} +2 -2
  352. package/server/{tmux-CfDHob9M.js → tmux-CImZaX4q.js} +10 -16
  353. package/server/tmux-Cjpx8L8u.js +4 -0
  354. package/server/{token-B10VFNOD.js → token-Bgpjo3tE.js} +2 -2
  355. package/server/token-util-BsjFll-k.js +3 -0
  356. package/server/{token-util-CZ8WPtdk.js → token-util-BymbpkJp.js} +1 -1
  357. package/server/{tracker-config-CHbrjg6m.js → tracker-config-4DaKVTfc.js} +2 -2
  358. package/server/{tracker-utils-DZZq_C0R.js → tracker-utils-BDeAXC-q.js} +2 -2
  359. package/server/{traefik-connect-GHomyBaD.js → traefik-connect-CC5FyxYj.js} +1 -1
  360. package/server/{tunnel-Dz7y434T.js → tunnel-CDWkeceJ.js} +1 -1
  361. package/server/{tunnel-Bdyb-sNq.js → tunnel-CPf5M-Pc.js} +3 -3
  362. package/server/{typed-errors-Bn_2WRU7.js → typed-errors-9K7Dq_Vn.js} +1 -1
  363. package/server/{typed-errors-BR_RmPS_.js → typed-errors-DrS5fb5z.js} +1 -1
  364. package/server/{types-D2ETIB8T.js → types-DzlUKiuf.js} +4 -3
  365. package/server/{types-Dh6RI5Vj.js → types-kI9ik8XO.js} +1 -1
  366. package/server/{uat-promote-verification-DyvQXvIn.js → uat-promote-verification-c_pxoxEc.js} +5 -5
  367. package/server/{uat-train-Dv0Bxer7.js → uat-train-CWGxBdJO.js} +0 -0
  368. package/server/{uat-train-diX_7shd.js → uat-train-CfCYd2ve.js} +1 -1
  369. package/server/{validate-606KcYZC.js → validate-f3ItVCfm.js} +3 -3
  370. package/server/{validation-Cf7aaV5A.js → validation-5G_wQtea.js} +1 -1
  371. package/server/{validation-CnrDul1x.js → validation-7tSiCM82.js} +4 -4
  372. package/server/{verification-artifact-GOaj8u2s.js → verification-artifact-9h9dH8uX.js} +1 -1
  373. package/server/{verification-artifact-D4b-bio9.js → verification-artifact-C_4WJnf6.js} +1 -1
  374. package/server/{verification-runner-DiPaUP-C.js → verification-runner-BV5F6wrA.js} +1 -1
  375. package/server/{verification-runner-B5MVxDvU.js → verification-runner-D58KmBhK.js} +18 -38
  376. package/server/{vtt-parser-CMU5EZ5R.js → vtt-parser-2iT9OHa9.js} +1 -1
  377. package/server/{work-agent-prompt-Csb3fbVR.js → work-agent-prompt-D03s4DD1.js} +9 -9
  378. package/server/{workflows-D87ajwV6.js → workflows-BMBwLYPV.js} +281 -98
  379. package/server/workflows-BOmWGpIh.js +2 -0
  380. package/server/{workspace-iD8oULqu.js → workspace-BgflNCH0.js} +3 -3
  381. package/server/{workspace-AIOM7n00.js → workspace-Cn9ywfSW.js} +1 -1
  382. package/server/{workspace-anchor-drift-19cJ1bH5.js → workspace-anchor-drift-C8Fy3shi.js} +1 -1
  383. package/server/{workspace-anchor-drift-C3mK5wNI.js → workspace-anchor-drift-CMiNncwq.js} +5 -8
  384. package/server/{workspace-config-CJ7RqQiP.js → workspace-config-aUc2nIz6.js} +1 -1
  385. package/server/{workspace-manager-CXfrw4rR.js → workspace-manager-Bem7ZBs9.js} +521 -292
  386. package/server/workspace-manager-C0CpNh3t.js +3 -0
  387. package/server/{workspace-metadata-BuMRco5P.js → workspace-metadata-C5iSlPRo.js} +1 -1
  388. package/server/{workspace-metadata-eHSj_NsP.js → workspace-metadata-UKmTYmDQ.js} +2 -2
  389. package/server/{workspaces-DbtMX2TM.js → workspaces-DqxgwDZ8.js} +143 -113
  390. package/sync-sources/hooks/notification-hook +12 -1
  391. package/sync-sources/hooks/pan-hook-lib.sh +226 -0
  392. package/sync-sources/hooks/session-start-hook +31 -4
  393. package/sync-sources/hooks/work-agent-stop-hook +23 -1
  394. package/sync-sources/skills/pan-memory/SKILL.md +19 -3
  395. package/sync-sources/skills/pan-projects/SKILL.md +9 -0
  396. package/sync-sources/skills/pan-restart/SKILL.md +26 -7
  397. package/sync-sources/skills/pan-workspace/SKILL.md +77 -0
  398. package/server/activity-logger-CMthG6Vd.js +0 -3
  399. package/server/agent-state-DyZJia9f.js +0 -3
  400. package/server/agents-Dnn4XgdB.js +0 -3
  401. package/server/archive-planning-BHCd_eL5.js +0 -2
  402. package/server/cli-D6mRfUE6.js +0 -3
  403. package/server/deacon-swarm-BkKR7SXu.js +0 -2
  404. package/server/delivery-C2M73sBg.js +0 -3
  405. package/server/dist-qcf9gAP0.js +0 -3
  406. package/server/event-store-5UKzh9Jf.js +0 -3
  407. package/server/forge-D647IMNa.js +0 -3
  408. package/server/fts-db-wROfFfje.js +0 -146
  409. package/server/hume-DtWN8oV5.js +0 -3
  410. package/server/inspect-agent-CPqXI81t.js +0 -2
  411. package/server/merge-ops-7QqziXAh.js +0 -2
  412. package/server/merge-rebase-B4pgzvQJ.js +0 -2
  413. package/server/node_modules/brace-expansion/.tap/coverage/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -757
  414. package/server/node_modules/brace-expansion/.tap/processinfo/8b906b8c-e21f-40b5-8c0d-214d8c2682c5.json +0 -719
  415. package/server/node_modules/brace-expansion/ADVISORY-CVE-2026-14257.md +0 -107
  416. package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts +0 -8
  417. package/server/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +0 -1
  418. package/server/node_modules/brace-expansion/dist/commonjs/index.js +0 -263
  419. package/server/node_modules/brace-expansion/dist/commonjs/index.js.map +0 -1
  420. package/server/node_modules/brace-expansion/dist/commonjs/package.json +0 -3
  421. package/server/node_modules/brace-expansion/dist/esm/index.d.ts +0 -8
  422. package/server/node_modules/brace-expansion/dist/esm/index.d.ts.map +0 -1
  423. package/server/node_modules/brace-expansion/dist/esm/index.js +0 -259
  424. package/server/node_modules/brace-expansion/dist/esm/index.js.map +0 -1
  425. package/server/node_modules/brace-expansion/dist/esm/package.json +0 -3
  426. package/server/project-repos-BgW4lcIa.js +0 -3
  427. package/server/projects-_n3Zui6K.js +0 -3
  428. package/server/providers-BI1mOBQ4.js +0 -3
  429. package/server/public/assets/index-Ddkcz3WT.css +0 -1
  430. package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +0 -1
  431. package/server/rally-x6ztTQo4.js +0 -3
  432. package/server/record-BTwWhtBb.js +0 -3
  433. package/server/record-update-DaOKS7Wb.js +0 -277
  434. package/server/recovery-trip-D-wM9EfB.js +0 -44
  435. package/server/resume-DXIIfJNk.js +0 -3
  436. package/server/rollup-DxCjJaAM.js +0 -3
  437. package/server/settings-9jSGHBPY.js +0 -2
  438. package/server/specs-DKV3jIEs.js +0 -3
  439. package/server/stack-health-CoWAhA99.js +0 -3
  440. package/server/supervisor-CyR_mW5B.js +0 -2
  441. package/server/tmux-Ctk6RV5l.js +0 -3
  442. package/server/token-util-CrfQ2FKf.js +0 -3
  443. package/server/workflows-DN6NyVGd.js +0 -2
  444. package/server/workspace-manager-B38rFWA1.js +0 -3
@@ -1,20 +1,22 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Cn as resolveStateReadHomeSync, Gn as init_projects, Lt as readIssueRecord, Mn as findProjectByPathSync, Mt as getIssueWorkspacePath, Pt as init_record, Sn as init_state_read_home, ar as resolveProjectFromIssueSync, ci as getOverdeckHome, di as packageRoot, f as loadConfigSync, li as init_paths, t as init_config_yaml, zn as getProjectSync, zt as readIssueRecordSync } from "./config-yaml-CxdwhAIA.js";
3
- import { i as emitActivityTtsSync, o as init_activity_logger, r as emitActivityEntrySync } from "./activity-logger-CyteR4JO.js";
4
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BDQDRopn.js";
5
- import { i as updateIssueRecord, r as init_record_update } from "./record-update-DaOKS7Wb.js";
6
- import { r as registerFeedbackAgentStateReader, t as init_agent_state_source } from "./agent-state-source-Ca_zCaII.js";
7
- import { d as init_cost_sync, i as getCostBreakdownByStageAndModelSync, o as getCostForIssueSync } from "./cost-sync-DiUBXwl6.js";
8
- import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-CxMes51i.js";
9
- import { c as init_review_status_sync, d as init_review_status_normalize, f as normalizeReviewStatusSync, l as markWorkspaceStuck$1, n as deleteReviewStatus, o as getReviewStatusFromDbSync, r as getAllReviewStatusesFromDb, s as getReviewStatusesFromDb, t as clearWorkspaceStuck$1, u as upsertReviewStatusSync } from "./review-status-sync-h2CJX6ju.js";
10
- import { a as registerCanonicalReviewStatusResolver, n as init_review_status_source, o as registerReviewStatusMapReader } from "./review-status-source-DWnFE0b6.js";
11
- import { a as PAN_DIRNAME, d as WORKSPACE_RUNTIME_DIRNAME, p as init_types$3, r as PAN_CONTINUES_DIRNAME } from "./types-D2ETIB8T.js";
12
- import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-Dbnx4chw.js";
13
- import { o as init_lifecycle, r as XBRIEF_FILENAME_SUFFIX, t as LEGACY_VBRIEF_FILENAME_SUFFIX } from "./lifecycle-DOgGnpIv.js";
2
+ import { Bt as resolveStateReadHomeSync, G as getIssueWorkspacePath, Q as readIssueRecordSync, Sn as resolveProjectFromIssueSync, X as readIssueRecord, Yt as findProjectByPathSync, _i as packageRoot, cn as init_projects, f as loadConfigSync, hi as init_paths, mi as getOverdeckHome, nn as getProjectSync, q as init_record, t as init_config_yaml, zt as init_state_read_home } from "./config-yaml-BSCqwmX0.js";
3
+ import { a as emitActivityEntrySync, c as init_activity_logger, o as emitActivityTtsSync } from "./activity-logger-Co5qljIj.js";
4
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CTrmVqc_.js";
5
+ import { i as updateIssueRecord, r as init_record_update } from "./record-update-CZh46a2f.js";
6
+ import { a as getWorkspaceForIssue, o as init_resolver } from "./resolver-BvHd6RE4.js";
7
+ import { t as init_review_status_limits } from "./review-status-limits-4EJDCGHO.js";
8
+ import { r as registerFeedbackAgentStateReader, t as init_agent_state_source } from "./agent-state-source-Ds968-j6.js";
9
+ import { d as init_cost_sync, i as getCostBreakdownByStageAndModelSync, o as getCostForIssueSync } from "./cost-sync-cesi9dp8.js";
10
+ import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-DDfVBJhJ.js";
11
+ import { c as init_review_status_sync, d as init_review_status_normalize, f as normalizeReviewStatusSync, l as markWorkspaceStuck$1, n as deleteReviewStatus, o as getReviewStatusFromDbSync, r as getAllReviewStatusesFromDb, s as getReviewStatusesFromDb, t as clearWorkspaceStuck$1, u as upsertReviewStatusSync } from "./review-status-sync-BxBeHRde.js";
12
+ import { a as registerCanonicalReviewStatusResolver, n as init_review_status_source, o as registerReviewStatusMapReader } from "./review-status-source-7nU3Z2wL.js";
13
+ import { a as PAN_DIRNAME, f as WORKSPACE_RUNTIME_DIRNAME, m as init_types$3, r as PAN_CONTINUES_DIRNAME } from "./types-DzlUKiuf.js";
14
+ import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-DsLjjLEV.js";
15
+ import { o as init_lifecycle, r as XBRIEF_FILENAME_SUFFIX, t as LEGACY_VBRIEF_FILENAME_SUFFIX } from "./lifecycle-D2X3al0D.js";
14
16
  import { basename, dirname, join } from "node:path";
15
17
  import { Data, Effect } from "effect";
16
18
  import { existsSync, readFileSync, readdirSync, statSync } from "fs";
17
- import { dirname as dirname$1, isAbsolute as isAbsolute$1, join as join$1, posix, relative as relative$1, sep as sep$1 } from "path";
19
+ import { dirname as dirname$1, isAbsolute as isAbsolute$1, join as join$1, posix as posix$1, relative as relative$1, sep as sep$1 } from "path";
18
20
  import { homedir } from "os";
19
21
  import { hostname } from "node:os";
20
22
  import { chmodSync as chmodSync$1, createReadStream as createReadStream$1, existsSync as existsSync$1, linkSync, mkdirSync as mkdirSync$1, promises as promises$1, readFileSync as readFileSync$1, readdirSync as readdirSync$1, renameSync as renameSync$1, rmSync as rmSync$1, statSync as statSync$1, writeFileSync as writeFileSync$1 } from "node:fs";
@@ -48,6 +50,7 @@ function overdeckRowToAgentState(row) {
48
50
  id: row.id,
49
51
  issueId: row.issue_id,
50
52
  workspace: row.workspace,
53
+ workspaceId: row.workspace_id ?? void 0,
51
54
  role: row.role,
52
55
  model: row.model ?? "",
53
56
  status: row.status,
@@ -105,6 +108,7 @@ function stateToOverdeckParamsForDb(state, updatedAt) {
105
108
  state.role,
106
109
  state.status,
107
110
  state.workspace,
111
+ state.workspaceId ?? getWorkspaceForIssue(state.issueId)?.id ?? null,
108
112
  state.sessionId ?? null,
109
113
  state.harness ?? "",
110
114
  state.model ?? "",
@@ -167,6 +171,7 @@ function saveOverdeckAgentStateSync(state) {
167
171
  var AGENT_COLUMNS_FOR_DB, SELECT_AGENT_SQL;
168
172
  var init_agent_state_sync = __esmMin((() => {
169
173
  init_agent_state_source();
174
+ init_resolver();
170
175
  init_infra();
171
176
  AGENT_COLUMNS_FOR_DB = [
172
177
  "id",
@@ -174,6 +179,7 @@ var init_agent_state_sync = __esmMin((() => {
174
179
  "role",
175
180
  "status",
176
181
  "workspace",
182
+ "workspace_id",
177
183
  "session_id",
178
184
  "harness",
179
185
  "model",
@@ -223,6 +229,164 @@ var init_agent_state_sync = __esmMin((() => {
223
229
  registerFeedbackAgentStateReader(listOverdeckAgentStatesSync);
224
230
  }));
225
231
  //#endregion
232
+ //#region ../../lib/pan-dir/pipeline-verdict-merge.ts
233
+ function fields(pipeline) {
234
+ return pipeline;
235
+ }
236
+ function isTerminal(gate, value) {
237
+ return typeof value === "string" && TERMINAL_GATE_VALUES[gate].includes(value);
238
+ }
239
+ /** Milliseconds for an ISO/epoch cycle marker, or undefined when it does not parse. */
240
+ function cycleMs(value) {
241
+ if (typeof value === "number") return Number.isFinite(value) ? value : void 0;
242
+ if (typeof value !== "string") return void 0;
243
+ const parsed = Date.parse(value);
244
+ return Number.isNaN(parsed) ? void 0 : parsed;
245
+ }
246
+ /**
247
+ * Merge a freshly-read on-disk pipeline over a rebuilt one without losing a
248
+ * terminal verdict the rebuild carries.
249
+ *
250
+ * Order of rules:
251
+ * 1. Either side lacks `updatedAt` → the rebuilt block wins (PAN-2587 guard).
252
+ * 2. The rebuilt block is at least as new → it wins outright (PAN-2587).
253
+ * 3. Otherwise `fresh` is the base — newer-wins for every non-verdict field.
254
+ * 4. `fresh` belongs to a strictly newer review cycle → it wins wholesale;
255
+ * a new cycle legitimately resets the previous cycle's verdicts.
256
+ * 5. Any gate where `rebuilt` holds a terminal verdict and the base does not
257
+ * keeps the rebuilt status plus its companion fields.
258
+ */
259
+ function mergePipelineVerdictAware(rebuilt, fresh) {
260
+ if (!fresh?.updatedAt || !rebuilt?.updatedAt) return rebuilt;
261
+ if (!(rebuilt.updatedAt < fresh.updatedAt)) return rebuilt;
262
+ const rebuiltCycle = cycleMs(rebuilt.reviewSpawnedAt);
263
+ const freshCycle = cycleMs(fresh.reviewSpawnedAt);
264
+ if (rebuiltCycle !== void 0 && freshCycle !== void 0 && freshCycle > rebuiltCycle) return fresh;
265
+ let merged;
266
+ for (const gate of GATE_NAMES) {
267
+ if (!isTerminal(gate, fields(rebuilt)[gate]) || isTerminal(gate, fields(fresh)[gate])) continue;
268
+ merged ??= structuredClone(fresh);
269
+ const target = fields(merged);
270
+ const source = fields(rebuilt);
271
+ for (const field of [gate, ...GATE_COMPANIONS[gate]]) if (source[field] === void 0) delete target[field];
272
+ else target[field] = source[field];
273
+ }
274
+ return merged ?? fresh;
275
+ }
276
+ /**
277
+ * Does this status update drive some gate to a terminal verdict it was not
278
+ * already at? That is the write an agent cannot cheaply retry — losing it
279
+ * strands the verdict in the agent's pane — so the journal writer waits out lock
280
+ * contention for it instead of dropping to the workspace fallback on the first
281
+ * collision (PAN-3092). Bookkeeping writes stay single-shot; retrying those
282
+ * would only add lock pressure.
283
+ */
284
+ function carriesNewTerminalVerdict(previous, update) {
285
+ return GATE_NAMES.some((gate) => {
286
+ const next = update[gate];
287
+ return next !== void 0 && next !== previous[gate] && isTerminal(gate, next);
288
+ });
289
+ }
290
+ /**
291
+ * Has the journal settled every gate the workspace fallback holds a terminal
292
+ * verdict for? The drain asks this before deleting a fallback as superseded: a
293
+ * newer-but-verdict-free journal write must not consume a verdict that never
294
+ * landed anywhere (PAN-3092; MIN-902 lost its review verdict exactly this way).
295
+ *
296
+ * Coverage is per-gate VALUE equality, not merely "the journal reached some
297
+ * terminal value". `pipeline.updatedAt` is restamped by unrelated bookkeeping —
298
+ * the root defect this issue exists for — so a later whole-pipeline timestamp is
299
+ * no evidence that a journal's differing terminal value is the newer one; it may
300
+ * be an older verdict carried forward while the newer specialist result waits in
301
+ * the fallback. When the values differ the fallback is folded instead, and
302
+ * `mergePipelineVerdictAware` decides the winner from per-gate evidence.
303
+ */
304
+ function pipelineCoversFallbackVerdicts(journal, fallback) {
305
+ const journalCycle = cycleMs(journal.reviewSpawnedAt);
306
+ const fallbackWrittenMs = cycleMs(fallback.updatedAt);
307
+ if (journalCycle !== void 0 && fallbackWrittenMs !== void 0 && journalCycle > fallbackWrittenMs) return true;
308
+ const journalFields = fields(journal);
309
+ const fallbackFields = fields(fallback.pipeline);
310
+ for (const gate of GATE_NAMES) {
311
+ const held = fallbackFields[gate];
312
+ if (!isTerminal(gate, held)) continue;
313
+ if (journalFields[gate] !== held) return false;
314
+ }
315
+ return true;
316
+ }
317
+ /**
318
+ * Which gates hold DIFFERENT terminal verdicts in the journal and the fallback,
319
+ * within the same review cycle?
320
+ *
321
+ * This is the one case the drain cannot resolve: two written terminal verdicts
322
+ * for one gate, and no per-gate timestamp to order them by. The whole-pipeline
323
+ * `updatedAt` is restamped by unrelated bookkeeping, so "the journal's is newer"
324
+ * is exactly the inference PAN-3092 exists to stop making. Callers preserve the
325
+ * fallback and let the stranded-fallback sweep put the conflict in front of an
326
+ * operator rather than picking a winner.
327
+ */
328
+ function findFallbackVerdictConflicts(journal, fallback) {
329
+ const journalCycle = cycleMs(journal.reviewSpawnedAt);
330
+ const fallbackWrittenMs = cycleMs(fallback.updatedAt);
331
+ if (journalCycle !== void 0 && fallbackWrittenMs !== void 0 && journalCycle > fallbackWrittenMs) return [];
332
+ const journalFields = fields(journal);
333
+ const fallbackFields = fields(fallback.pipeline);
334
+ const conflicts = [];
335
+ for (const gate of GATE_NAMES) {
336
+ const held = fallbackFields[gate];
337
+ if (!isTerminal(gate, held)) continue;
338
+ const settled = journalFields[gate];
339
+ if (!isTerminal(gate, settled) || settled === held) continue;
340
+ conflicts.push({
341
+ gate,
342
+ journalValue: String(settled),
343
+ fallbackValue: String(held)
344
+ });
345
+ }
346
+ return conflicts;
347
+ }
348
+ /** Boolean form of {@link findFallbackVerdictConflicts} for the drain's withhold decision. */
349
+ function pipelineConflictsWithFallbackVerdicts(journal, fallback) {
350
+ return findFallbackVerdictConflicts(journal, fallback).length > 0;
351
+ }
352
+ var TERMINAL_GATE_VALUES, GATE_COMPANIONS, GATE_NAMES;
353
+ var init_pipeline_verdict_merge = __esmMin((() => {
354
+ TERMINAL_GATE_VALUES = {
355
+ reviewStatus: [
356
+ "passed",
357
+ "blocked",
358
+ "failed",
359
+ "skipped"
360
+ ],
361
+ testStatus: ["passed", "failed"],
362
+ uatStatus: ["passed", "failed"],
363
+ verificationStatus: [
364
+ "passed",
365
+ "failed",
366
+ "skipped"
367
+ ],
368
+ inspectStatus: [
369
+ "passed",
370
+ "blocked",
371
+ "failed"
372
+ ],
373
+ mergeStatus: ["merged", "failed"]
374
+ };
375
+ GATE_COMPANIONS = {
376
+ reviewStatus: [
377
+ "reviewNotes",
378
+ "reviewedAtCommit",
379
+ "reviewerVerdicts"
380
+ ],
381
+ testStatus: ["testNotes"],
382
+ uatStatus: ["uatNotes"],
383
+ verificationStatus: ["verificationNotes", "lastVerifiedCommit"],
384
+ inspectStatus: ["inspectNotes"],
385
+ mergeStatus: ["mergeNotes", "mergeStep"]
386
+ };
387
+ GATE_NAMES = Object.keys(TERMINAL_GATE_VALUES);
388
+ }));
389
+ //#endregion
226
390
  //#region ../../lib/pan-dir/records.ts
227
391
  /**
228
392
  * PAN-1908 / PAN-1919: per-issue permanent-record builder.
@@ -247,6 +411,7 @@ function projectPipeline(issueId, status, existing) {
247
411
  issueId,
248
412
  reviewStatus: status?.reviewStatus ?? "pending",
249
413
  testStatus: status?.testStatus ?? "pending",
414
+ uatStatus: status?.uatStatus,
250
415
  verificationStatus: status?.verificationStatus,
251
416
  inspectStatus: status?.inspectStatus,
252
417
  mergeStatus: status?.mergeStatus,
@@ -263,6 +428,7 @@ function projectPipeline(issueId, status, existing) {
263
428
  ...base,
264
429
  reviewNotes: status.reviewNotes,
265
430
  testNotes: status.testNotes,
431
+ uatNotes: status.uatNotes,
266
432
  verificationNotes: status.verificationNotes,
267
433
  inspectNotes: status.inspectNotes,
268
434
  mergeNotes: status.mergeNotes,
@@ -394,10 +560,15 @@ async function buildIssueRecord(project, issueId, opts = {}) {
394
560
  * the status the rebuild projects — observed clobbering PAN-399's passed
395
561
  * verdict back to a pre-verdict snapshot. Same newer-wins rule (ISO `updatedAt`
396
562
  * comparison) the journal readers use.
563
+ *
564
+ * PAN-3092: newer-wins alone conflates write-recency with verdict-truth, because
565
+ * `projectPipeline` stamps `updatedAt` on every write, verdict or not. The
566
+ * comparison now runs through `mergePipelineVerdictAware`, which keeps
567
+ * newer-wins for every non-verdict field but refuses to drop a terminal verdict
568
+ * in favour of a same-cycle verdict-free write.
397
569
  */
398
570
  function pickNewerPipeline(rebuilt, fresh) {
399
- if (!fresh?.updatedAt || !rebuilt?.updatedAt) return rebuilt;
400
- return rebuilt.updatedAt < fresh.updatedAt ? fresh : rebuilt;
571
+ return mergePipelineVerdictAware(rebuilt, fresh);
401
572
  }
402
573
  /**
403
574
  * PAN-1908 / PAN-1919: rebuild and queue the per-issue permanent record for a
@@ -441,19 +612,46 @@ var init_records = __esmMin((() => {
441
612
  init_agent_state_sync();
442
613
  init_record();
443
614
  init_record_update();
615
+ init_pipeline_verdict_merge();
444
616
  }));
445
617
  //#endregion
446
618
  //#region ../../lib/overdeck/review-status-record-sync.ts
447
- function updateIssueRecordForReviewStatusSync(issueId, status) {
448
- const write = Promise.resolve(updateIssueRecordForIssue(issueId, status)).then((landed) => {
449
- if (landed === false) {
450
- writeWorkspaceVerdictFallbackSync(issueId, status);
451
- scheduleVerdictFallbackDrain(issueId);
452
- } else if (landed === true) trackVerdictFallbackDrain(issueId);
453
- }).catch(() => {
619
+ function verdictWriteBackoffDelaysMs() {
620
+ const raw = process.env.OVERDECK_VERDICT_BACKOFF_DELAYS_MS;
621
+ if (!raw) return DEFAULT_VERDICT_BACKOFF_DELAYS_MS;
622
+ const parsed = raw.split(",").map((part) => Number(part.trim())).filter((ms) => Number.isFinite(ms) && ms >= 0);
623
+ return parsed.length > 0 ? parsed : DEFAULT_VERDICT_BACKOFF_DELAYS_MS;
624
+ }
625
+ /**
626
+ * One journal-write attempt. `false` means the durable write definitively
627
+ * failed; `undefined` (a test double, say) is "unknown", not "failed", and only
628
+ * a definite `true` is safe to treat as a landed write.
629
+ */
630
+ async function attemptJournalWrite(issueId, status) {
631
+ try {
632
+ return await updateIssueRecordForIssue(issueId, status);
633
+ } catch {
634
+ return false;
635
+ }
636
+ }
637
+ function updateIssueRecordForReviewStatusSync(issueId, status, options) {
638
+ const delays = options?.verdictWrite ? verdictWriteBackoffDelaysMs() : [];
639
+ const write = (async () => {
640
+ for (let attempt = 0;; attempt += 1) {
641
+ const landed = await attemptJournalWrite(issueId, status);
642
+ if (landed !== false) {
643
+ if (landed === true) trackVerdictFallbackDrain(issueId);
644
+ return;
645
+ }
646
+ const delay = delays[attempt];
647
+ if (delay === void 0) break;
648
+ await new Promise((resolve) => {
649
+ setTimeout(resolve, delay);
650
+ });
651
+ }
454
652
  writeWorkspaceVerdictFallbackSync(issueId, status);
455
653
  scheduleVerdictFallbackDrain(issueId);
456
- });
654
+ })();
457
655
  pendingJournalWrites.add(write);
458
656
  write.finally(() => pendingJournalWrites.delete(write));
459
657
  }
@@ -494,6 +692,7 @@ function enrichReviewNotesFromRecordSync(issueId, status) {
494
692
  ...status,
495
693
  reviewNotes: pipeline.reviewNotes ?? status.reviewNotes,
496
694
  testNotes: pipeline.testNotes ?? status.testNotes,
695
+ uatNotes: pipeline.uatNotes ?? status.uatNotes,
497
696
  mergeNotes: pipeline.mergeNotes ?? status.mergeNotes,
498
697
  inspectNotes: pipeline.inspectNotes ?? status.inspectNotes,
499
698
  verificationNotes: pipeline.verificationNotes ?? status.verificationNotes,
@@ -510,6 +709,8 @@ function durableSubset(p) {
510
709
  return {
511
710
  reviewStatus: p.reviewStatus,
512
711
  testStatus: p.testStatus,
712
+ uatStatus: p.uatStatus ?? void 0,
713
+ uatNotes: p.uatNotes,
513
714
  mergeStatus: p.mergeStatus ?? void 0,
514
715
  mergeStep: p.mergeStep,
515
716
  inspectStatus: p.inspectStatus ?? void 0,
@@ -711,6 +912,21 @@ async function readWorkspaceVerdictFallback(issueId) {
711
912
  * write was in flight stays at the live path for its own drain schedule, and
712
913
  * no step ever renames onto a path another process may have just created.
713
914
  */
915
+ /**
916
+ * PAN-3092: why is a fallback still pending? A failed drain returns `false` for
917
+ * two materially different reasons — the record write lost to a contended lock,
918
+ * or the fold was deliberately withheld because the journal and the fallback
919
+ * hold different terminal verdicts for one gate. Only the first clears on its
920
+ * own; the second is permanent until an operator picks a verdict, so the sweep
921
+ * must be able to tell them apart before it tells anyone to wait.
922
+ *
923
+ * Read-only and lock-free: the caller is already reporting lock contention.
924
+ */
925
+ async function findWorkspaceVerdictConflicts(issueId, fallback) {
926
+ const journal = await readPipeline(issueId);
927
+ if (!journal?.updatedAt || journal.updatedAt < fallback.updatedAt) return [];
928
+ return findFallbackVerdictConflicts(journal, fallback);
929
+ }
714
930
  async function drainWorkspaceVerdictFallback(issueId) {
715
931
  const claims = claimWorkspaceVerdictFallbackSync(issueId);
716
932
  if (!claims) return true;
@@ -719,16 +935,19 @@ async function drainWorkspaceVerdictFallback(issueId) {
719
935
  const losers = claims.filter((claim) => claim !== winner);
720
936
  const { fallback } = winner;
721
937
  const journal = readPipelineSync(issueId);
722
- if (journal?.updatedAt && !(journal.updatedAt < fallback.updatedAt)) {
938
+ const journalAtLeastAsNew = !!journal?.updatedAt && !(journal.updatedAt < fallback.updatedAt);
939
+ if (journalAtLeastAsNew && pipelineCoversFallbackVerdicts(journal, fallback)) {
723
940
  for (const claim of claims) rmSync$1(claim.claimPath, { force: true });
724
941
  return true;
725
942
  }
726
- if (await updateIssueRecordForIssue(issueId, {
943
+ const conflicted = journalAtLeastAsNew && pipelineConflictsWithFallbackVerdicts(journal, fallback);
944
+ const status = {
727
945
  issueId: fallback.issueId,
728
946
  ...fallback.pipeline,
729
947
  updatedAt: fallback.updatedAt,
730
948
  readyForMerge: false
731
- })) {
949
+ };
950
+ if (conflicted ? false : await updateIssueRecordForIssue(issueId, status)) {
732
951
  for (const claim of claims) rmSync$1(claim.claimPath, { force: true });
733
952
  return true;
734
953
  }
@@ -818,12 +1037,21 @@ async function readJournalStatus(issueId) {
818
1037
  const [pipeline, fallback] = await Promise.all([readPipeline(issueId), readWorkspaceVerdictFallback(issueId)]);
819
1038
  return projectJournalStatus(pipeline, fallback);
820
1039
  }
821
- var pendingJournalWrites, FALLBACK_CLEARABLE_FIELDS, drainClaimCounter, DRAIN_RETRY_DELAYS_MS, drainTimers;
1040
+ var pendingJournalWrites, DEFAULT_VERDICT_BACKOFF_DELAYS_MS, FALLBACK_CLEARABLE_FIELDS, drainClaimCounter, DRAIN_RETRY_DELAYS_MS, drainTimers;
822
1041
  var init_review_status_record_sync = __esmMin((() => {
823
1042
  init_records();
824
1043
  init_record();
1044
+ init_pipeline_verdict_merge();
825
1045
  init_projects();
826
1046
  pendingJournalWrites = /* @__PURE__ */ new Set();
1047
+ DEFAULT_VERDICT_BACKOFF_DELAYS_MS = [
1048
+ 2e3,
1049
+ 5e3,
1050
+ 1e4,
1051
+ 2e4,
1052
+ 4e4,
1053
+ 8e4
1054
+ ];
827
1055
  FALLBACK_CLEARABLE_FIELDS = [
828
1056
  "strikeTransportRetryCount",
829
1057
  "strikeNextAttemptAt",
@@ -1049,6 +1277,7 @@ var init_review_status_reconcile = __esmMin((() => {
1049
1277
  init_review_status_sync();
1050
1278
  init_review_convergence();
1051
1279
  init_projects();
1280
+ init_review_status_limits();
1052
1281
  }));
1053
1282
  //#endregion
1054
1283
  //#region ../../lib/review-dispatch-decision.ts
@@ -1119,7 +1348,7 @@ function createGetModuleFromFilename(basePath = process.argv[1] ? dirname$1(proc
1119
1348
  return (filename) => {
1120
1349
  if (!filename) return;
1121
1350
  const normalizedFilename = isWindows ? normalizeWindowsPath(filename) : filename;
1122
- let { dir, base: file, ext } = posix.parse(normalizedFilename);
1351
+ let { dir, base: file, ext } = posix$1.parse(normalizedFilename);
1123
1352
  if (".js" === ext || ".mjs" === ext || ".cjs" === ext) file = file.slice(0, -1 * ext.length);
1124
1353
  const decodedFile = decodeURIComponent(file);
1125
1354
  if (!dir) dir = ".";
@@ -6859,9 +7088,9 @@ var init_service = __esmMin((() => {
6859
7088
  //#region ../../lib/telemetry/pipeline.ts
6860
7089
  async function readCanonicalPipelineMembership(issueId) {
6861
7090
  const [membershipModule, gatherModule, recordModule] = await Promise.all([
6862
- import("./pipeline-membership-DHOXmvba.js"),
6863
- import("./pipeline-membership-gather-OkLXuvxR.js"),
6864
- import("./record-BTwWhtBb.js")
7091
+ import("./pipeline-membership-2_okL5bm.js"),
7092
+ import("./pipeline-membership-gather-4F1-tXKI.js"),
7093
+ import("./record-aVzu-LGm.js")
6865
7094
  ]);
6866
7095
  const project = recordModule.resolveProjectForIssue(issueId);
6867
7096
  if (!project) return false;
@@ -6912,11 +7141,16 @@ var init_pipeline = __esmMin((() => {
6912
7141
  "claude-code",
6913
7142
  "ohmypi",
6914
7143
  "codex",
6915
- "acp"
7144
+ "acp",
7145
+ "kimi-code"
6916
7146
  ]);
6917
7147
  }));
6918
7148
  //#endregion
6919
7149
  //#region ../../lib/review-status.ts
7150
+ function truncateHistoryNote(notes) {
7151
+ if (!notes || notes.length <= 500) return notes;
7152
+ return notes.slice(0, 499) + "…";
7153
+ }
6920
7154
  /**
6921
7155
  * Authoritative "allowed to merge" predicate (PAN-1759). The flywheel
6922
7156
  * orchestrator's pipeline verb says it INTENDS to merge an issue; this record
@@ -7045,49 +7279,59 @@ function setReviewStatusSync(issueId, update, existing) {
7045
7279
  "failed",
7046
7280
  "skipped"
7047
7281
  ].includes(update.reviewStatus ?? "") && merged.reviewRequestedAt && (!merged.reviewSpawnedAt || Date.parse(merged.reviewRequestedAt) <= new Date(merged.reviewSpawnedAt).getTime())) merged.reviewRequestedAt = void 0;
7048
- const history = [...status.history || []];
7049
7282
  const now = (/* @__PURE__ */ new Date()).toISOString();
7050
- if (update.reviewStatus && update.reviewStatus !== status.reviewStatus) history.push({
7283
+ const rawHistory = [...status.history || []];
7284
+ if (update.reviewStatus && update.reviewStatus !== status.reviewStatus) rawHistory.push({
7051
7285
  type: "review",
7052
7286
  status: update.reviewStatus,
7053
7287
  timestamp: now,
7054
- notes: update.reviewNotes
7288
+ ...update.reviewNotes ? { notes: update.reviewNotes } : {}
7055
7289
  });
7056
- if (update.testStatus && update.testStatus !== status.testStatus) history.push({
7290
+ if (update.testStatus && update.testStatus !== status.testStatus) rawHistory.push({
7057
7291
  type: "test",
7058
7292
  status: update.testStatus,
7059
7293
  timestamp: now,
7060
- notes: update.testNotes
7294
+ ...update.testNotes ? { notes: update.testNotes } : {}
7061
7295
  });
7062
- if (update.uatStatus && update.uatStatus !== status.uatStatus) history.push({
7296
+ if (update.uatStatus && update.uatStatus !== status.uatStatus) rawHistory.push({
7063
7297
  type: "uat",
7064
7298
  status: update.uatStatus,
7065
7299
  timestamp: now,
7066
- notes: update.uatNotes
7300
+ ...update.uatNotes ? { notes: update.uatNotes } : {}
7067
7301
  });
7068
- if (update.mergeStatus && update.mergeStatus !== status.mergeStatus) history.push({
7302
+ if (update.mergeStatus && update.mergeStatus !== status.mergeStatus) rawHistory.push({
7069
7303
  type: "merge",
7070
7304
  status: update.mergeStatus,
7071
7305
  timestamp: now
7072
7306
  });
7073
- if (update.releaseStatus && update.releaseStatus !== status.releaseStatus) history.push({
7307
+ if (update.releaseStatus && update.releaseStatus !== status.releaseStatus) rawHistory.push({
7074
7308
  type: "release",
7075
7309
  status: update.releaseStatus,
7076
7310
  timestamp: now,
7077
- notes: update.releaseNotes
7311
+ ...update.releaseNotes ? { notes: update.releaseNotes } : {}
7078
7312
  });
7079
- while (history.length > 10) history.shift();
7080
7313
  const readyForMerge = (merged.blockerReasons?.length ?? 0) > 0 ? false : update.readyForMerge !== void 0 ? update.readyForMerge : reviewGatesPassedSync(merged);
7314
+ const boundedHistory = rawHistory.slice(-20).map((entry) => ({
7315
+ ...entry,
7316
+ notes: entry.notes ? truncateHistoryNote(entry.notes) : void 0
7317
+ }));
7318
+ const dbStatus = normalizeReviewStatusSync({
7319
+ ...merged,
7320
+ issueId,
7321
+ updatedAt: now,
7322
+ readyForMerge,
7323
+ history: rawHistory
7324
+ });
7081
7325
  const updated = normalizeReviewStatusSync({
7082
7326
  ...merged,
7083
7327
  issueId,
7084
7328
  updatedAt: now,
7085
7329
  readyForMerge,
7086
- history
7330
+ history: boundedHistory
7087
7331
  });
7088
7332
  if (readyForMerge && !status.readyForMerge && updated.prUrl) (async () => {
7089
7333
  try {
7090
- const { isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-DIE8BkHI.js");
7334
+ const { isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-CpQSDlv8.js");
7091
7335
  if (!isGitHubAppConfigured()) return;
7092
7336
  const prMatch = updated.prUrl.match(/github\.com\/([^/]+)\/([^/]+)\/pull/);
7093
7337
  if (!prMatch) return;
@@ -7107,9 +7351,10 @@ function setReviewStatusSync(issueId, update, existing) {
7107
7351
  console.warn(`[review-status] Failed to report commit status: ${err.message}`);
7108
7352
  }
7109
7353
  })();
7110
- updateIssueRecordForReviewStatusSync(issueId, updated);
7354
+ const verdictWrite = carriesNewTerminalVerdict(status, update);
7355
+ updateIssueRecordForReviewStatusSync(issueId, updated, { verdictWrite });
7111
7356
  try {
7112
- upsertReviewStatusSync(updated);
7357
+ upsertReviewStatusSync(dbStatus);
7113
7358
  } catch (err) {
7114
7359
  const msg = err instanceof Error ? err.message : String(err);
7115
7360
  console.warn(`[review-status] DB cache write skipped for ${issueId} (${msg}); journal holds the verdict, host will reconcile on read.`);
@@ -7341,8 +7586,8 @@ function emitReactiveLifecycleEvent(type, issueId) {
7341
7586
  }
7342
7587
  async function deliverReviewVerdictFeedbackHostSide(issueId, status) {
7343
7588
  try {
7344
- const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-qRohbFG2.js");
7345
- const { getAgentStateSync } = await import("./agents-Dnn4XgdB.js");
7589
+ const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-HRY9P4bN.js");
7590
+ const { getAgentStateSync } = await import("./agents-IPSa5kzn.js");
7346
7591
  const runId = getAgentStateSync(`agent-${issueId.toLowerCase()}-review`)?.reviewRunId;
7347
7592
  if ((await Effect.runPromise(deliverReviewVerdictFeedback({
7348
7593
  issueId,
@@ -7385,7 +7630,7 @@ function maybeAutoDispatchReviewHostSide(issueId, status) {
7385
7630
  }
7386
7631
  async function dispatchReviewHostSide(issueId, prUrl) {
7387
7632
  try {
7388
- const { hasDurableReviewPipelineHandler, startDurableReviewPipelineHostSide } = await import("./durable-review-pipeline-D_DcfIGP.js");
7633
+ const { hasDurableReviewPipelineHandler, startDurableReviewPipelineHostSide } = await import("./durable-review-pipeline-CStTgOAf.js");
7389
7634
  if (!hasDurableReviewPipelineHandler()) {
7390
7635
  if (!loggedMissingPipelineHandler) {
7391
7636
  loggedMissingPipelineHandler = true;
@@ -7393,7 +7638,7 @@ async function dispatchReviewHostSide(issueId, prUrl) {
7393
7638
  }
7394
7639
  return;
7395
7640
  }
7396
- const { spawnReviewRoleForIssue } = await import("./review-agent-UpAM4DmT.js");
7641
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CD3RQ-tc.js");
7397
7642
  if (!await startDurableReviewPipelineHostSide({
7398
7643
  issueId,
7399
7644
  ...prUrl ? { prUrl } : {},
@@ -7415,13 +7660,13 @@ function maybeRecoverTestVerdictHostSide(issueId, status) {
7415
7660
  }
7416
7661
  async function recoverTestVerdictHostSide(issueId) {
7417
7662
  try {
7418
- const { resolveProjectFromIssueSync } = await import("./projects-_n3Zui6K.js");
7663
+ const { resolveProjectFromIssueSync } = await import("./projects-WqMWCdpa.js");
7419
7664
  const resolved = resolveProjectFromIssueSync(issueId);
7420
7665
  if (!resolved) return;
7421
7666
  const { existsSync } = await import("fs");
7422
7667
  const workspace = join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
7423
7668
  if (!existsSync(workspace)) return;
7424
- const { readTestVerdictArtifact } = await import("./test-verdict-BieVDAV1.js");
7669
+ const { readTestVerdictArtifact } = await import("./test-verdict-NdtgRBuA.js");
7425
7670
  const artifact = readTestVerdictArtifact(workspace);
7426
7671
  if (!artifact) return;
7427
7672
  setReviewStatusSync(issueId, {
@@ -7468,13 +7713,13 @@ function resetPipelineVerdictsForWorkStartSync(issueId, options = {}) {
7468
7713
  }
7469
7714
  async function deliverTestFailureToWorkAgentHostSide(issueId, status) {
7470
7715
  try {
7471
- const { resolveProjectFromIssueSync } = await import("./projects-_n3Zui6K.js");
7716
+ const { resolveProjectFromIssueSync } = await import("./projects-WqMWCdpa.js");
7472
7717
  const resolved = resolveProjectFromIssueSync(issueId);
7473
7718
  const workspace = resolved ? join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`) : void 0;
7474
7719
  const notes = status.testNotes;
7475
7720
  let feedbackPath;
7476
7721
  try {
7477
- const { writeFeedbackFile } = await import("./feedback-writer-CY91ckuw.js");
7722
+ const { writeFeedbackFile } = await import("./feedback-writer-CTSuA6lw.js");
7478
7723
  const r = await Effect.runPromise(writeFeedbackFile({
7479
7724
  issueId,
7480
7725
  workspacePath: workspace,
@@ -7486,10 +7731,10 @@ async function deliverTestFailureToWorkAgentHostSide(issueId, status) {
7486
7731
  if (r.success) feedbackPath = r.filePath;
7487
7732
  } catch {}
7488
7733
  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.`;
7489
- const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-CMrEAoeA.js");
7734
+ const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-D9Tex35_.js");
7490
7735
  const target = await resolveIssueFeedbackTarget(issueId);
7491
7736
  if ("agentId" in target) {
7492
- const { messageAgent } = await import("./agents-Dnn4XgdB.js");
7737
+ const { messageAgent } = await import("./agents-IPSa5kzn.js");
7493
7738
  await messageAgent(target.agentId, message, "internal", { owesRework: true });
7494
7739
  console.log(`[review-status] delivered test failure to ${target.agentId} for ${issueId} (host-side)`);
7495
7740
  } else await surfaceIssueFeedbackNeedsYou(issueId, target.reason, {
@@ -7692,8 +7937,10 @@ var init_review_status = __esmMin((() => {
7692
7937
  init_review_status_source();
7693
7938
  init_review_status_normalize();
7694
7939
  init_review_status_record_sync();
7940
+ init_pipeline_verdict_merge();
7695
7941
  init_review_status_reconcile();
7696
7942
  init_review_dispatch_decision();
7943
+ init_review_status_limits();
7697
7944
  init_review_status_read();
7698
7945
  init_pipeline();
7699
7946
  registerReviewStatusMapReader(() => getAllReviewStatusesFromDb());
@@ -7735,6 +7982,6 @@ var init_review_status = __esmMin((() => {
7735
7982
  });
7736
7983
  }));
7737
7984
  //#endregion
7738
- export { synchronizeAnalyticsServices as A, reviewGatesPassedSync as B, setReviewStatusSync as C, resolvePipelineTelemetryContext as D, init_pipeline as E, telemetryEnvironmentForcesOff as F, readJournalStatus as G, findBlockingFindings as H, init_pipeline_agent_reader as I, getOverdeckAgentStateSync as J, readJournalStatusSync as K, registerPipelineTelemetryAgentReader as L, init_install_id as M, init_config as N, getAnalyticsService as O, resolveTelemetryEnabled as P, stateToOverdeckParamsForDb as Q, init_review_dispatch_decision as R, setReviewStatus as S, capturePipelineStageForIssue as T, init_review_findings as U, verificationSatisfied as V, init_review_status_record_sync as W, listOverdeckAgentStatesSync as X, init_agent_state_sync as Y, saveOverdeckAgentStateSync as Z, markWorkspaceStuck as _, clearStuckMergeStatuses as a, setAutoMerge as b, fixStuckCommentedReviews as c, getReviewStatusSync as d, getReviewStatusesSync as f, loadReviewStatusesForIssues as g, loadReviewStatuses as h, clearReviewStatus as i, getOrCreateInstallId as j, init_service as k, fixStuckReadyForMerge as l, loadReadyForMergeFlags as m, ReviewStatusError as n, clearWorkspaceStuck as o, init_review_status as p, AGENT_COLUMNS_FOR_DB as q, clearFeedbackDeliveryStuck as r, dispatchReviewHostSide as s, FEEDBACK_DELIVERY_STUCK_REASON as t, getReviewStatus as u, mergeGateEligibility as v, capturePipelineStage as w, setDeaconIgnored as x, resetPipelineVerdictsForWorkStartSync as y, needsReviewDispatch as z };
7985
+ export { listOverdeckAgentStatesSync as $, synchronizeAnalyticsServices as A, reviewGatesPassedSync as B, setReviewStatusSync as C, resolvePipelineTelemetryContext as D, init_pipeline as E, telemetryEnvironmentForcesOff as F, findWorkspaceVerdictConflicts as G, findBlockingFindings as H, init_pipeline_agent_reader as I, readJournalStatusSync as J, init_review_status_record_sync as K, registerPipelineTelemetryAgentReader as L, init_install_id as M, init_config as N, getAnalyticsService as O, resolveTelemetryEnabled as P, init_agent_state_sync as Q, init_review_dispatch_decision as R, setReviewStatus as S, capturePipelineStageForIssue as T, init_review_findings as U, verificationSatisfied as V, drainWorkspaceVerdictFallback as W, AGENT_COLUMNS_FOR_DB as X, readWorkspaceVerdictFallback as Y, getOverdeckAgentStateSync as Z, markWorkspaceStuck as _, clearStuckMergeStatuses as a, setAutoMerge as b, fixStuckCommentedReviews as c, getReviewStatusSync as d, saveOverdeckAgentStateSync as et, getReviewStatusesSync as f, loadReviewStatusesForIssues as g, loadReviewStatuses as h, clearReviewStatus as i, getOrCreateInstallId as j, init_service as k, fixStuckReadyForMerge as l, loadReadyForMergeFlags as m, ReviewStatusError as n, clearWorkspaceStuck as o, init_review_status as p, readJournalStatus as q, clearFeedbackDeliveryStuck as r, dispatchReviewHostSide as s, FEEDBACK_DELIVERY_STUCK_REASON as t, stateToOverdeckParamsForDb as tt, getReviewStatus as u, mergeGateEligibility as v, capturePipelineStage as w, setDeaconIgnored as x, resetPipelineVerdictsForWorkStartSync as y, needsReviewDispatch as z };
7739
7986
 
7740
- //# sourceMappingURL=review-status-CwhA9wmd.js.map
7987
+ //# sourceMappingURL=review-status-CKLk5aZ-.js.map
@@ -1,5 +1,5 @@
1
- import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CwhA9wmd.js";
2
- import { t as enrichReviewStatus } from "./review-status-enrichment-DvyZAbGR.js";
1
+ import { d as getReviewStatusSync, p as init_review_status } from "./review-status-CKLk5aZ-.js";
2
+ import { t as enrichReviewStatus } from "./review-status-enrichment-DJRgGX7-.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-BPJwYcRy.js.map
50
+ //# sourceMappingURL=review-status-emit-CJ7UmEVU.js.map
@@ -1,5 +1,5 @@
1
- import { Gn as init_projects, ar as resolveProjectFromIssueSync } from "./config-yaml-CxdwhAIA.js";
2
- import { M as listSessionNames, w as init_tmux } from "./tmux-CfDHob9M.js";
1
+ import { Sn as resolveProjectFromIssueSync, cn as init_projects } from "./config-yaml-BSCqwmX0.js";
2
+ import { C as init_tmux, j as listSessionNames } from "./tmux-CImZaX4q.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-DvyZAbGR.js.map
127
+ //# sourceMappingURL=review-status-enrichment-DJRgGX7-.js.map