@overdeck/desktop 0.47.0 → 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-10Ur5Dne.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-BNwqxseD.js → advancing-selfheal-8AR68Asf.js} +6 -6
  7. package/server/{agent-gc-C3h9Or3a.js → agent-gc-BmYeT6eH.js} +5 -5
  8. package/server/agent-state-Dq3s84-P.js +3 -0
  9. package/server/{agent-state-service-C63p_ftq.js → agent-state-service-DK1Vay1E.js} +1 -1
  10. package/server/{agent-state-service-Ds6OeFvo.js → agent-state-service-rjnzpHDx.js} +6 -6
  11. package/server/agent-state-source-Ds968-j6.js +21 -0
  12. package/server/{agents-J5mEnekq.js → agents-Dls7tfJH.js} +5 -5
  13. package/server/agents-IPSa5kzn.js +3 -0
  14. package/server/{archive-planning-BwhxeP7C.js → archive-planning-Cq7cyinS.js} +51 -24
  15. package/server/archive-planning-MbkGCBIY.js +2 -0
  16. package/server/{artifact-index-jobs-D1q_vR3V.js → artifact-index-jobs-Dj_8kpTd.js} +3 -3
  17. package/server/{assemble-Bgwqv-Ro.js → assemble-BTCmbcfH.js} +20 -13
  18. package/server/{auto-spawn-consent-CQ9Bi9q6.js → auto-spawn-consent-lXqRJ1Dr.js} +304 -121
  19. package/server/{backlog-auto-trigger-n1lzPgN4.js → backlog-auto-trigger-Dn-amzt6.js} +3 -3
  20. package/server/{behavior-td6-xhQk.js → behavior-DIMQMRzs.js} +2 -2
  21. package/server/{boot-reconciled-stop-events-C7gGe3oB.js → boot-reconciled-stop-events-D6SeUTIr.js} +1 -1
  22. package/server/{bridge-pool-patrol-CYH2OLb5.js → bridge-pool-patrol-BEjt-xF3.js} +2 -2
  23. package/server/{briefing-freshness-DRqZ8lAz.js → briefing-freshness-3PNmL_p3.js} +2 -2
  24. package/server/{build-info-7yiEpl6u.js → build-info-CJg813Hm.js} +3 -3
  25. package/server/{build-info-CpG__c63.js → build-info-CXyeFsXu.js} +1 -1
  26. package/server/{checkpoint-manager-CkKmB0wZ.js → checkpoint-manager-9t7G5c1V.js} +1 -1
  27. package/server/{checkpoint-manager-DBcyNR8w.js → checkpoint-manager-B2G38R3p.js} +3 -3
  28. package/server/checkpoint-worker.js +1 -1
  29. package/server/{checkpoints-Wm963lm8.js → checkpoints-CuBgiXO-.js} +1 -1
  30. package/server/{checkpoints-D95apurL.js → checkpoints-VTZMd4Qm.js} +2 -2
  31. package/server/{claude-hooks-provision-Bjitl9aI.js → claude-hooks-provision-55SyQaPz.js} +2 -2
  32. package/server/{claude-hooks-provision-4RPxNkE8.js → claude-hooks-provision-CEUT-CZd.js} +1 -1
  33. package/server/{claude-permissions-CpbpvUQ2.js → claude-permissions-Cn0dIu2i.js} +2 -2
  34. package/server/{claude-settings-overlay-BzkHYDwR.js → claude-settings-overlay-B19hdzSA.js} +1 -1
  35. package/server/{claude-settings-overlay-_H9Yrzab.js → claude-settings-overlay-Yg_ANh81.js} +2 -2
  36. package/server/{cli-Cte9ZFGn.js → cli-C9S84iTy.js} +79 -22
  37. package/server/cli-M1cwZ__d.js +3 -0
  38. package/server/{cliproxy-C5fMJ7rY.js → cliproxy-CJq3KXU6.js} +2 -2
  39. package/server/{cliproxy-DaAbWMjC.js → cliproxy-DgEZlr7Y.js} +1 -1
  40. package/server/{close-issue-BPh1ARCF.js → close-issue-DPxRddGR.js} +5 -5
  41. package/server/{closed-issue-reaper-DoOZqGFK.js → closed-issue-reaper-C5Zn4GRS.js} +13 -13
  42. package/server/{closed-issue-reaper-DHRfRMrp.js → closed-issue-reaper-D-2B48Ri.js} +1 -1
  43. package/server/{codex-o8FJwzmy.js → codex-B3n_rkwn.js} +1 -1
  44. package/server/{codex-BzGDW_d3.js → codex-CjkD1PJu.js} +6 -6
  45. package/server/{codex-parser-Dt-ycU8L.js → codex-parser-DpB1Il-P.js} +2 -2
  46. package/server/{compaction-continuation-CvXpbZ4w.js → compaction-continuation-DZD9ukSE.js} +3 -3
  47. package/server/{config-CL3Gyvja.js → config-C5saf4Ja.js} +1 -1
  48. package/server/{config-BvLe652W.js → config-DnLJATZk.js} +2 -2
  49. package/server/{config-Bi3u1VK7.js → config-DvM8jtQK.js} +2 -2
  50. package/server/{config-yaml-CxdwhAIA.js → config-yaml-BSCqwmX0.js} +11299 -10972
  51. package/server/{conflict-gate-CX80JYYS.js → conflict-gate-DXa_L28t.js} +1 -1
  52. package/server/{conflict-gate-E4nt7ZeS.js → conflict-gate-WfVqgalf.js} +4 -4
  53. package/server/{context-layers-DAG83UZt.js → context-layers-D7UqH9Ab.js} +2 -2
  54. package/server/{context-layers-C_IIysnm.js → context-layers-Dpz3Vd6d.js} +3 -3
  55. package/server/{control-settings-CiqGxXnc.js → control-settings-DVf6pKyv.js} +4 -4
  56. package/server/{conversation-compaction-BE3CNtHF.js → conversation-compaction-5XuH6OBn.js} +1 -1
  57. package/server/{conversation-compaction-D6-yLtqt.js → conversation-compaction-COrbnX1J.js} +8 -8
  58. package/server/{conversation-service-DBxoYMDl.js → conversation-service-BufdtnZF.js} +169 -10
  59. package/server/{conversation-service-D_TS2b1r.js → conversation-service-DnUyIiLb.js} +1 -1
  60. package/server/{conversations-D0UEdLtk.js → conversations-B4rxz-Wl.js} +17 -10
  61. package/server/{conversations-BKDVpB-3.js → conversations-D1bwxQMy.js} +1 -1
  62. package/server/{cost-DpgYmYqR.js → cost-CpFDrJUS.js} +46 -2
  63. package/server/{cost-DS1s0DbG.js → cost-KLuwKCW9.js} +3 -3
  64. package/server/{cost-sync-tOCCGnEt.js → cost-sync-cesi9dp8.js} +3 -3
  65. package/server/{dag-BtkgLeqY.js → dag-BYiFMqpU.js} +2 -2
  66. package/server/{dangerous-git-ops-CFLykHWt.js → dangerous-git-ops-BKvd3-Hk.js} +1 -1
  67. package/server/dashboard-db-worker.js +7 -7
  68. package/server/{deacon-BIblC-WX.js → deacon-BbsWw8a6.js} +3 -3
  69. package/server/{deacon-pLRLbPvR.js → deacon-HdEh0Esp.js} +863 -214
  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-B08gF0mh.js → deacon-nudge-log-BND_97Wo.js} +4 -3
  73. package/server/{deacon-pending-lifecycle-B-Io84AP.js → deacon-pending-lifecycle-CD3YsiQK.js} +3 -3
  74. package/server/deacon-swarm-DgWADWd_.js +2 -0
  75. package/server/{deacon-swarm-v5PMun-m.js → deacon-swarm-rqrl4TMs.js} +39 -18
  76. package/server/deacon.js +12 -210
  77. package/server/{dead-end-trip-D8A3msX9.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-sYgOxLeb.js → deploy-patrol-kARAkji4.js} +17 -21
  81. package/server/{deploy-queue-VfohaPN_.js → deploy-queue-Bj0HJT1i.js} +2 -2
  82. package/server/{deploy-queue-gHJBycaF.js → deploy-queue-rjTUy1RM.js} +1 -1
  83. package/server/{deploy-window-D4DQb8VP.js → deploy-window-B2IM-9G5.js} +10 -44
  84. package/server/{deploy-window-CFRZ0-kt.js → deploy-window-BNFWnA8D.js} +1 -1
  85. package/server/{dev-supervisor-DiOBDM1c.js → dev-supervisor-B1mZYXz4.js} +2 -2
  86. package/server/{devcontainer-renderer-BUOIlfgD.js → devcontainer-renderer-B-o68Z5B.js} +3 -3
  87. package/server/{dist-C3A8B8wM.js → dist-3W--cGMa.js} +1 -1
  88. package/server/dist-BR0QtwmS.js +3 -0
  89. package/server/{dist-src-C0adpegX.js → dist-src-C-Vk2jNk.js} +1 -1
  90. package/server/{docker-Y3PElJb0.js → docker-DH3jUYg1.js} +1 -1
  91. package/server/{docker-BJzlkqYB.js → docker-meuLKLzV.js} +27 -20
  92. package/server/{dod-DlNtcH6n.js → dod-D7-9dCOD.js} +1 -1
  93. package/server/{driver-CKVGi51s.js → driver-CmsY2RLl.js} +1 -1
  94. package/server/{durable-review-pipeline-DP6bIcOY.js → durable-review-pipeline-CStTgOAf.js} +1 -1
  95. package/server/{durable-review-pipeline-Cibps-Rg.js → durable-review-pipeline-Chq0lzjL.js} +1 -1
  96. package/server/{ensure-devcontainer-DMAbWqtQ.js → ensure-devcontainer-BE3llBWP.js} +1 -1
  97. package/server/{ensure-devcontainer-BAofzBPv.js → ensure-devcontainer-BXrY7C2Z.js} +4 -4
  98. package/server/{esm-shims-BeObUkaw.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-CF8QDbuV.js → events-CCkFWa7X.js} +1 -1
  102. package/server/{events-BNrvchBg.js → events-zjDQozet.js} +3 -3
  103. package/server/{factory-Cmm9Hsho.js → factory-DhavwKVc.js} +5 -5
  104. package/server/{feature-registry-population-B6HpNWRy.js → feature-registry-population-DWGBKyWd.js} +4 -4
  105. package/server/{feature-registry-storage-DJEFx1Pf.js → feature-registry-storage-C5DkXmCM.js} +3 -3
  106. package/server/{features-D5km80UI.js → features-CC47YcCX.js} +2 -2
  107. package/server/{feedback-target-BJ5ZADsu.js → feedback-target-D9Tex35_.js} +1 -1
  108. package/server/{feedback-target-DSxEL6lP.js → feedback-target-DoRCR3L-.js} +18 -7
  109. package/server/{feedback-writer-CoB9Z6aU.js → feedback-writer-CTSuA6lw.js} +1 -1
  110. package/server/{feedback-writer-C27Hak8a.js → feedback-writer-DdsBdtNL.js} +5 -5
  111. package/server/{flywheel-DZZdtiOL.js → flywheel-DHWHzaYK.js} +1 -1
  112. package/server/{flywheel-f662Q-y2.js → flywheel-DJQa9az8.js} +14 -14
  113. package/server/{flywheel-BHx8XuMr.js → flywheel-TacAI9MA.js} +21 -17
  114. package/server/{flywheel-merge-order-Dil0LmdN.js → flywheel-merge-order-D2foPh88.js} +1 -1
  115. package/server/{flywheel-merge-order-D_xLMbJU.js → flywheel-merge-order-DRtex2Dt.js} +7 -7
  116. package/server/forge-CdlCG9aS.js +3 -0
  117. package/server/{forge-BaKGCya6.js → forge-c8LeC-tw.js} +2 -2
  118. package/server/{from-B3tZbB55.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-B9jG8wa3.js → fts-operations-DP9R-8Q3.js} +3 -3
  121. package/server/{git-utils-Xg4PFN45.js → git-utils-C31x1lpE.js} +1 -1
  122. package/server/{git-utils-CsvYfJU3.js → git-utils-xQ74FoSn.js} +5 -4
  123. package/server/{github-app-Bmg4R9mv.js → github-app-CpQSDlv8.js} +1 -1
  124. package/server/{github-app-CmNk0zLU.js → github-app-D2QuvZ3j.js} +3 -3
  125. package/server/{github-client-qazkPrg0.js → github-client-D9YvJX5D.js} +3 -3
  126. package/server/{github-client-B6KM9_wA.js → github-client-Tpi3PmKX.js} +1 -1
  127. package/server/{github-pr-lookup-DAcVeRLK.js → github-pr-lookup-DvBMv-IW.js} +2 -2
  128. package/server/{harness-binary-BSpiXaLw.js → harness-binary-BHxWf_sX.js} +7 -6
  129. package/server/{harness-resolve-BAJu5MX8.js → harness-resolve-bj9WMABA.js} +4 -4
  130. package/server/{health-events-BwX32k8d.js → health-events-bCDPn59Z.js} +2 -2
  131. package/server/{health-events-2Z6Wa9SM.js → health-events-qo7Ss34U.js} +1 -1
  132. package/server/{hooks-DbtbimEf.js → hooks-Dyxtg5fk.js} +2 -2
  133. package/server/{hooks-D1g1jKLI.js → hooks-X2XHBB2b.js} +1 -1
  134. package/server/{hume-DXNiu6nQ.js → hume-DrZEGpqc.js} +2 -2
  135. package/server/hume-YPsy4UA8.js +3 -0
  136. package/server/{idle-stack-reaper-Cy-dQzW4.js → idle-stack-reaper-CJ1ygW0p.js} +37 -7
  137. package/server/{idle-stack-reaper-CRA1e0jr.js → idle-stack-reaper-uJGOb-vu.js} +1 -1
  138. package/server/{in-flight-guard-D-sSkADM.js → in-flight-guard-CG2Eo-rr.js} +1 -1
  139. package/server/{infra-BDQDRopn.js → infra-CTrmVqc_.js} +111 -6
  140. package/server/{injection-Bl8d_jHZ.js → injection-BisQ0lpX.js} +1 -1
  141. package/server/{injection-6AGnXxlj.js → injection-C9sxqbc2.js} +73 -193
  142. package/server/{inspect-agent-nXdIptyh.js → inspect-agent-BoSO51YC.js} +12 -12
  143. package/server/inspect-agent-BykeOH4a.js +2 -0
  144. package/server/{internal-token-DzK385vD.js → internal-token-AvXePaQT.js} +2 -2
  145. package/server/{internal-token-Ias7N8Kg.js → internal-token-Djkj-yqK.js} +1 -1
  146. package/server/{io-B00PBNku.js → io-mxOWMZ7I.js} +6 -6
  147. package/server/{issue-closed-BehTG1be.js → issue-closed-Bj_bCv_0.js} +7 -7
  148. package/server/{issue-lifecycle-BqSuQvbn.js → issue-lifecycle-A5YIpDZE.js} +1 -1
  149. package/server/{issue-lifecycle-Birk-ifu.js → issue-lifecycle-BXUqaHzF.js} +32 -28
  150. package/server/{issue-service-singleton-C6ZduvuY.js → issue-service-singleton-BPNEXczv.js} +11 -11
  151. package/server/{issue-service-singleton-B2wXiIlw.js → issue-service-singleton-CcaHjKPR.js} +1 -1
  152. package/server/{issues-DQ5-LatB.js → issues-AX-YBeAQ.js} +2 -2
  153. package/server/{jsonl-parser-BDpnGFCl.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-Dwnky8FG.js → label-cleanup-sXUlgdM0.js} +3 -3
  158. package/server/{lifecycle-B4Xdb4cY.js → lifecycle-D2X3al0D.js} +2 -2
  159. package/server/{lifecycle-B3s4sM1G.js → lifecycle-DjlljAZ1.js} +6 -6
  160. package/server/{lifecycle-io-CzTHEooc.js → lifecycle-io-C5nVk55o.js} +1 -1
  161. package/server/{lifecycle-io-DCo6s6ks.js → lifecycle-io-NPm1YtIG.js} +5 -5
  162. package/server/{linear-client-CnbtHiic.js → linear-client--luYwCZg.js} +1 -1
  163. package/server/{linear-client-9uq7fhiV.js → linear-client-B8pLegW1.js} +3 -3
  164. package/server/{linear-mcp-auth-BxUOzswy.js → linear-mcp-auth-BQVWV0I3.js} +6 -6
  165. package/server/{linear-mcp-auth-D46fBCLf.js → linear-mcp-auth-Dx81Zl4G.js} +1 -1
  166. package/server/memory-fts-worker.js +1 -1
  167. package/server/{merge-DiW9RdSB.js → merge-Bx5Bh9pi.js} +3 -3
  168. package/server/{merge-sr8Nrnmi.js → merge-Dqmh_zja.js} +1 -1
  169. package/server/{merge-agent-BLUgRsz3.js → merge-agent-DP9AUY29.js} +33 -33
  170. package/server/{merge-agent-DQTXZk8z.js → merge-agent-DWd0KfiS.js} +1 -1
  171. package/server/{merge-batch-Cp_j9BGk.js → merge-batch-BdmvTEAC.js} +1 -1
  172. package/server/{merge-completeness-BLbB5-6n.js → merge-completeness-BfRwFjRx.js} +1 -1
  173. package/server/{merge-completeness-B46KqhtY.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-DIkBjgwq.js → merge-rebase-BX1xKsrE.js} +2 -2
  177. package/server/{merge-set-CBgHfwM0.js → merge-set-DsLjjLEV.js} +4 -4
  178. package/server/{merge-set-DeUxFsC3.js → merge-set-H6epHOsw.js} +1 -1
  179. package/server/{merge-sync-kr4vqyjM.js → merge-sync-BEdfsQV4.js} +2 -2
  180. package/server/{merge-sync-CpGmk6Ch.js → merge-sync-BebcWWGA.js} +1 -1
  181. package/server/{merge-train-Dmrcus12.js → merge-train-D1I0lNOT.js} +4 -4
  182. package/server/{merge-train-deps-D_uGX91G.js → merge-train-deps-D_-C0Pk2.js} +4 -4
  183. package/server/{merge-verification-NvaAd8CZ.js → merge-verification-DN1Ov9bU.js} +6 -6
  184. package/server/{merged-docker-cleanup-worker-Y1R06TEl.js → merged-docker-cleanup-worker-CfXSr2pA.js} +4 -4
  185. package/server/{merged-docker-cleanup-worker-DH_hrGPI.js → merged-docker-cleanup-worker-ybsPyHjB.js} +1 -1
  186. package/server/{multipart-parser-R-oC8dQg.js → multipart-parser-CL5QG8iv.js} +2 -2
  187. package/server/{no-resume-mode-BgD0JUmM.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-DcgTPPFY.js → orphan-proposed-reconciler-CEW1maPl.js} +1 -1
  209. package/server/{orphan-proposed-reconciler-B6vJHxtX.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-DMzF5wne.js → pan-dir-DhgKfO86.js} +21 -6
  213. package/server/{paths-sJBSb7Ul.js → paths-BUuhi6jM.js} +17 -17
  214. package/server/{pending-lifecycle-claim-DilzGfgk.js → pending-lifecycle-claim-DJlA1rTR.js} +2 -2
  215. package/server/{persistent-logger-H_VjuOu7.js → persistent-logger-s8cbpFNV.js} +2 -2
  216. package/server/{pickup-DWhqzliO.js → pickup-2AxtB3dW.js} +1 -1
  217. package/server/{pipeline-membership-C88VBnhJ.js → pipeline-membership-2_okL5bm.js} +1 -1
  218. package/server/{pipeline-membership-D9SBvItj.js → pipeline-membership-Dqv6_0ig.js} +1 -1
  219. package/server/{pipeline-membership-gather-4eR-7Tqy.js → pipeline-membership-gather-4F1-tXKI.js} +1 -1
  220. package/server/{pipeline-membership-gather-CeVGnNJ2.js → pipeline-membership-gather-CtJ_7aGf.js} +149 -17
  221. package/server/{pipeline-notifier-DT6xLFao.js → pipeline-notifier-CO9rxJgB.js} +1 -1
  222. package/server/{pipeline-notifier-D0ALV6Nw.js → pipeline-notifier-DDfVBJhJ.js} +2 -2
  223. package/server/{post-merge-lifecycle-worker-8HIeS_J6.js → post-merge-lifecycle-worker-DmSOkeNp.js} +3 -3
  224. package/server/{project-pipelines-9SKt2bEc.js → project-pipelines-72WE8GVK.js} +2 -2
  225. package/server/{project-repos-B5pIphKg.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-CgzMBvQF.js → prompts-XkL10m8M.js} +2 -2
  229. package/server/{providers-BJQSnAAp.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-7BgLDsIo.js → pull-requests-B-KrUph5.js} +3 -3
  248. package/server/{pull-requests-Dq0y6IxE.js → pull-requests-DK5k92B4.js} +1 -1
  249. package/server/{queries-C-MUZaIy.js → queries-DVpl1vsU.js} +1212 -193
  250. package/server/{rally-CPysR4T_.js → rally-DbE561hD.js} +3 -3
  251. package/server/rally-O_st_X7n.js +3 -0
  252. package/server/{rally-api-8Ptlp2os.js → rally-api-CZLeEd2C.js} +2 -2
  253. package/server/{rally-api-CgosKdKL.js → rally-api-DaHtn5QN.js} +1 -1
  254. package/server/{rally-client-CCX0hADj.js → rally-client-C-MAl8ur.js} +1 -1
  255. package/server/{rally-client-iYMHWQD7.js → rally-client-Ch3zRsBX.js} +5 -5
  256. package/server/{reap-terminal-sessions-Qf-9LVQc.js → reap-terminal-sessions-C1n0ALRb.js} +2 -2
  257. package/server/{reap-terminal-sessions-4Xg9NGA8.js → reap-terminal-sessions-DegFS2p1.js} +2 -2
  258. package/server/{rebuild-stack-CMdgaylx.js → rebuild-stack-C9Li44A3.js} +20 -10
  259. package/server/{rebuild-stack-DqcOVmJO.js → rebuild-stack-qC0jCNm6.js} +2 -2
  260. package/server/{reconstruct-cache-CMZJ_Vjq.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-B2X9AfFC.js → release-engine-Be5MX5GP.js} +5 -5
  267. package/server/{release-set-G4XKyQ8K.js → release-set-DJv_O6PS.js} +3 -3
  268. package/server/{remote-BXarMvqf.js → remote-BMM3uH2J.js} +3 -3
  269. package/server/{remote-CUhyqjXk.js → remote-C0xVTHA5.js} +3 -3
  270. package/server/{remote-agents-CLZB3Coc.js → remote-agents-BIIoc5pD.js} +1 -1
  271. package/server/{remote-agents-Bba-MgSA.js → remote-agents-EUiZ26bj.js} +7 -7
  272. package/server/{remote-completion-CwAp79EC.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--pOptAEV.js → review-agent-BHGaBoBu.js} +29 -29
  276. package/server/{review-agent-BTCNkq2h.js → review-agent-CD3RQ-tc.js} +1 -1
  277. package/server/{review-artifacts-BNmw8dWE.js → review-artifacts-DyhajWso.js} +6 -6
  278. package/server/{review-context-DFxYOOJW.js → review-context-B-dlsPnx.js} +9 -9
  279. package/server/{review-convoy-liveness-BgU_1jJf.js → review-convoy-liveness-D7M-s_nS.js} +2 -2
  280. package/server/{review-status-Dma9SFaN.js → review-status-B6wYcOtP.js} +1 -1
  281. package/server/{review-status-CGvlA4o_.js → review-status-CKLk5aZ-.js} +308 -58
  282. package/server/{review-status-emit-DURrmGYX.js → review-status-emit-CJ7UmEVU.js} +3 -3
  283. package/server/{review-status-enrichment-8NiNXi5W.js → review-status-enrichment-DJRgGX7-.js} +3 -3
  284. package/server/review-status-limits-4EJDCGHO.js +7 -0
  285. package/server/{review-status-source-DIk1JSow.js → review-status-source-7nU3Z2wL.js} +1 -1
  286. package/server/{review-status-source-BLx_1siH.js → review-status-source-BsDYGfyv.js} +1 -1
  287. package/server/{review-status-sync-muT-EBp2.js → review-status-sync-BLssMTEW.js} +1 -1
  288. package/server/{review-status-sync-0GxOqeqF.js → review-status-sync-BxBeHRde.js} +35 -11
  289. package/server/{review-verdict-feedback-xJNdqBnX.js → review-verdict-feedback-5jWuzgpc.js} +90 -16
  290. package/server/{review-verdict-feedback-HwF6ODFy.js → review-verdict-feedback-HRY9P4bN.js} +1 -1
  291. package/server/{rollup-BQaol5TX.js → rollup-BGIrCEkU.js} +79 -44
  292. package/server/rollup-CZB4UL9q.js +3 -0
  293. package/server/{scanner-C-D2cFdX.js → scanner-DydjXPrz.js} +16 -9
  294. package/server/search-DdtIjAiu.js +395 -0
  295. package/server/{sequence-io-Bmf1EZM5.js → sequence-io-Fw-cLyDs.js} +4 -4
  296. package/server/{sequencer-agent-CigMyKh2.js → sequencer-agent-BcpGMt5x.js} +15 -10
  297. package/server/server.js +1258 -438
  298. package/server/{service-CD0DvFvD.js → service-BFFkGsG4.js} +58 -58
  299. package/server/{session-fork-B6cQ5eya.js → session-fork-D0V-3e5P.js} +2 -2
  300. package/server/{session-history-3ON_IJjm.js → session-history-Bta5l9jY.js} +5 -5
  301. package/server/{settings-PilbFZAM.js → settings-Ce8B1daF.js} +2 -2
  302. package/server/{settings-VN0qOh4U.js → settings-E3FnEIUx.js} +3 -3
  303. package/server/settings-eOOJpxi_.js +2 -0
  304. package/server/{shadow-engineering-DXvx77oE.js → shadow-engineering-Mt9nJO4i.js} +3 -3
  305. package/server/{shadow-state-CZBp7pwq.js → shadow-state-Bzj_AZCV.js} +1 -1
  306. package/server/{shadow-state-BBk_zacw.js → shadow-state-DrkhoVSx.js} +2 -2
  307. package/server/{shadow-utils-DdZ05AJS.js → shadow-utils-H1GfqP06.js} +2 -2
  308. package/server/{ship-log-7kJfjUX2.js → ship-log-CFUIo4PR.js} +1 -1
  309. package/server/{smart-compaction-8fA5k5XN.js → smart-compaction-DSTq-Wua.js} +1 -1
  310. package/server/{smart-compaction-ByhL9cRS.js → smart-compaction-Hzp3KCJX.js} +7 -7
  311. package/server/{spawn-planning-session-vLUJoFjy.js → spawn-planning-session-C0uSA2SL.js} +2 -2
  312. package/server/{spawn-planning-session-pcF-YeFE.js → spawn-planning-session-DN4son31.js} +23 -21
  313. package/server/{specialist-completion-B07XjWD2.js → specialist-completion-Cf6tpIh1.js} +1 -1
  314. package/server/{specialist-context-DJ-zFyL3.js → specialist-context-DEUEkjIQ.js} +5 -5
  315. package/server/{specialist-handoff-logger-aKSxbIgD.js → specialist-handoff-logger-D_LmQDj3.js} +2 -2
  316. package/server/{specialist-logs-Dae-n52_.js → specialist-logs-7Ynue0R7.js} +3 -3
  317. package/server/{specialists-KR3pKulN.js → specialists-CQwBEGlD.js} +1 -1
  318. package/server/{specialists-6PWdtWcg.js → specialists-DAjPgYs_.js} +504 -238
  319. package/server/{specialists-DUiExaxb.js → specialists-Hr6iW9fU.js} +18 -18
  320. package/server/{specialists-Bz-wFT7R.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-vHy2-oCv.js → src-DQnkPN2i.js} +3 -3
  324. package/server/{src-rac0Mepv.js → src-DhfDV0o4.js} +6 -6
  325. package/server/{stack-health-DqLTiEu4.js → stack-health-D_iKwNRg.js} +107 -16
  326. package/server/stack-health-deVSdDwn.js +3 -0
  327. package/server/{stale-task-claims-Cab_Fo_Z.js → stale-task-claims-BYJGqhLI.js} +5 -5
  328. package/server/{staleness-CGTZyp6V.js → staleness-CopBDKnA.js} +1 -1
  329. package/server/{staleness-C-a5rBxF.js → staleness-D8WeMUHd.js} +1 -1
  330. package/server/{state-home-722Dkx92.js → state-home-DjN8qduI.js} +24 -3
  331. package/server/{state-mapping-CybR81Uf.js → state-mapping-DlM7OYRW.js} +1 -1
  332. package/server/{state-migrate-2u8wIpoL.js → state-migrate-a2p1gtD7.js} +4 -4
  333. package/server/state-mirror-Cv_XgvT5.js +121 -0
  334. package/server/{stuck-remediation-r1TJu68G.js → stuck-remediation-CXJX_kki.js} +1 -1
  335. package/server/{stuck-remediation-CC6q3eqQ.js → stuck-remediation-CbCRSz1v.js} +31 -732
  336. package/server/{substrate-bug-weights-service-CzIyyWFT.js → substrate-bug-weights-service-DxpopNd9.js} +3 -3
  337. package/server/{summary-fork-BqgmgPDt.js → summary-fork-B61fjRJn.js} +2 -2
  338. package/server/{summary-fork-Df2WFijM.js → summary-fork-B9pszUJN.js} +91 -10
  339. package/server/supervisor/{injection-budget-Cg_KIb3o.js → injection-budget-Ar7hgyJq.js} +1 -1
  340. package/server/supervisor/pty-supervisor.js +12 -3
  341. package/server/supervisor/{pty-token-BbjwEUUM.js → pty-token-CXCFU0Z8.js} +1 -1
  342. package/server/{supervisor-BxqSpjcN.js → supervisor-BvnxbuuF.js} +6 -4
  343. package/server/supervisor-C69kpqvd.js +2 -0
  344. package/server/{swarm-readiness-DfFxa9-n.js → swarm-readiness-vTw1kqGa.js} +3 -3
  345. package/server/{system-prerequisites-ICLSkhhZ.js → system-prerequisites-LLzTEqsK.js} +3 -3
  346. package/server/{teardown-workspace-DRdi_CPa.js → teardown-workspace-CqKKVJr1.js} +15 -15
  347. package/server/{test-agent-queue-A_-p-i0I.js → test-agent-queue-CWMq7oyG.js} +8 -7
  348. package/server/{test-verdict-BHgTAwIG.js → test-verdict-NdtgRBuA.js} +1 -1
  349. package/server/{test-verdict-C4i9aqEP.js → test-verdict-diIWE6hz.js} +15 -3
  350. package/server/{tldr-daemon-CvWXBhX1.js → tldr-daemon-B1Jhrtc8.js} +1 -1
  351. package/server/{tldr-daemon-wvsU6bKv.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-DrxwytsZ.js → token-Bgpjo3tE.js} +2 -2
  355. package/server/token-util-BsjFll-k.js +3 -0
  356. package/server/{token-util-B48BlCba.js → token-util-BymbpkJp.js} +1 -1
  357. package/server/{tracker-config-BcPMElRB.js → tracker-config-4DaKVTfc.js} +2 -2
  358. package/server/{tracker-utils-CJ6BHjcD.js → tracker-utils-BDeAXC-q.js} +2 -2
  359. package/server/{traefik-connect-DZ6nMYMj.js → traefik-connect-CC5FyxYj.js} +1 -1
  360. package/server/{tunnel-Bp-dRHZz.js → tunnel-CDWkeceJ.js} +1 -1
  361. package/server/{tunnel-DUbUPElU.js → tunnel-CPf5M-Pc.js} +3 -3
  362. package/server/{typed-errors-DyjseiB6.js → typed-errors-9K7Dq_Vn.js} +1 -1
  363. package/server/{typed-errors-CKeoDdU3.js → typed-errors-DrS5fb5z.js} +1 -1
  364. package/server/{types-Cm5ASJbq.js → types-DzlUKiuf.js} +4 -3
  365. package/server/{types-Di8wdakq.js → types-kI9ik8XO.js} +1 -1
  366. package/server/{uat-promote-verification-CoJuh7XO.js → uat-promote-verification-c_pxoxEc.js} +5 -5
  367. package/server/{uat-train-4Q0k06CQ.js → uat-train-CWGxBdJO.js} +0 -0
  368. package/server/{uat-train-Dewoatps.js → uat-train-CfCYd2ve.js} +1 -1
  369. package/server/{validate-B0C8p66t.js → validate-f3ItVCfm.js} +3 -3
  370. package/server/{validation-hVOwQk8T.js → validation-5G_wQtea.js} +1 -1
  371. package/server/{validation-B_kIRfNe.js → validation-7tSiCM82.js} +4 -4
  372. package/server/{verification-artifact-BxlxTiYK.js → verification-artifact-9h9dH8uX.js} +1 -1
  373. package/server/{verification-artifact-D70AtckY.js → verification-artifact-C_4WJnf6.js} +1 -1
  374. package/server/{verification-runner-Bc3cJvpC.js → verification-runner-BV5F6wrA.js} +1 -1
  375. package/server/{verification-runner-KZTz6u72.js → verification-runner-D58KmBhK.js} +18 -38
  376. package/server/{vtt-parser-CE_i3Bcw.js → vtt-parser-2iT9OHa9.js} +1 -1
  377. package/server/{work-agent-prompt-ByrPAzOy.js → work-agent-prompt-D03s4DD1.js} +9 -9
  378. package/server/{workflows-D0vP1WrK.js → workflows-BMBwLYPV.js} +281 -98
  379. package/server/workflows-BOmWGpIh.js +2 -0
  380. package/server/{workspace-DQkRPLlQ.js → workspace-BgflNCH0.js} +3 -3
  381. package/server/{workspace-COWvdibH.js → workspace-Cn9ywfSW.js} +1 -1
  382. package/server/{workspace-anchor-drift-pwz23TI1.js → workspace-anchor-drift-C8Fy3shi.js} +1 -1
  383. package/server/{workspace-anchor-drift-DXYIAHzr.js → workspace-anchor-drift-CMiNncwq.js} +5 -8
  384. package/server/{workspace-config-BdZM4PvZ.js → workspace-config-aUc2nIz6.js} +1 -1
  385. package/server/{workspace-manager-BPgTrG66.js → workspace-manager-Bem7ZBs9.js} +521 -292
  386. package/server/workspace-manager-C0CpNh3t.js +3 -0
  387. package/server/{workspace-metadata-CdjzAP8x.js → workspace-metadata-C5iSlPRo.js} +1 -1
  388. package/server/{workspace-metadata-DkO_iTLo.js → workspace-metadata-UKmTYmDQ.js} +2 -2
  389. package/server/{workspaces-CRBJikLp.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-CYXJVG72.js +0 -3
  400. package/server/agents-ePFVoZbu.js +0 -3
  401. package/server/archive-planning-B2XplFzT.js +0 -2
  402. package/server/cli-CjOCSnfj.js +0 -3
  403. package/server/deacon-swarm-B1XkIvfr.js +0 -2
  404. package/server/delivery-BX9HR4wQ.js +0 -3
  405. package/server/dist-B3YPQa5A.js +0 -3
  406. package/server/event-store-5UKzh9Jf.js +0 -3
  407. package/server/forge-B5o319qI.js +0 -3
  408. package/server/fts-db-IVc4_M3f.js +0 -146
  409. package/server/hume-VUCNbTgn.js +0 -3
  410. package/server/inspect-agent-CUwVmr2h.js +0 -2
  411. package/server/merge-ops-1abz6O_P.js +0 -2
  412. package/server/merge-rebase-CJJVAJuz.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-DPjOdfPa.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-D_VW4bJv.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-DDH-02ng.js +0 -44
  435. package/server/resume-mOREjlYu.js +0 -3
  436. package/server/rollup-BR4t_wck.js +0 -3
  437. package/server/settings-CVmWiJ-r.js +0 -2
  438. package/server/specs--enInima.js +0 -3
  439. package/server/stack-health-BikqHSjn.js +0 -3
  440. package/server/supervisor-B4anCCSm.js +0 -2
  441. package/server/tmux-Ctk6RV5l.js +0 -3
  442. package/server/token-util-D411CAq9.js +0 -3
  443. package/server/workflows-DtDX08ed.js +0 -2
  444. package/server/workspace-manager-C1F3XsnS.js +0 -3
@@ -1,19 +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 { d as init_cost_sync, i as getCostBreakdownByStageAndModelSync, o as getCostForIssueSync } from "./cost-sync-tOCCGnEt.js";
7
- import { r as notifyPipelineSync, t as init_pipeline_notifier } from "./pipeline-notifier-D0ALV6Nw.js";
8
- 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-0GxOqeqF.js";
9
- import { a as registerCanonicalReviewStatusResolver, n as init_review_status_source, o as registerReviewStatusMapReader } from "./review-status-source-DIk1JSow.js";
10
- import { a as PAN_DIRNAME, d as WORKSPACE_RUNTIME_DIRNAME, p as init_types$3, r as PAN_CONTINUES_DIRNAME } from "./types-Cm5ASJbq.js";
11
- import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-CBgHfwM0.js";
12
- import { o as init_lifecycle, r as XBRIEF_FILENAME_SUFFIX, t as LEGACY_VBRIEF_FILENAME_SUFFIX } from "./lifecycle-B4Xdb4cY.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";
13
16
  import { basename, dirname, join } from "node:path";
14
17
  import { Data, Effect } from "effect";
15
18
  import { existsSync, readFileSync, readdirSync, statSync } from "fs";
16
- 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";
17
20
  import { homedir } from "os";
18
21
  import { hostname } from "node:os";
19
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";
@@ -47,6 +50,7 @@ function overdeckRowToAgentState(row) {
47
50
  id: row.id,
48
51
  issueId: row.issue_id,
49
52
  workspace: row.workspace,
53
+ workspaceId: row.workspace_id ?? void 0,
50
54
  role: row.role,
51
55
  model: row.model ?? "",
52
56
  status: row.status,
@@ -104,6 +108,7 @@ function stateToOverdeckParamsForDb(state, updatedAt) {
104
108
  state.role,
105
109
  state.status,
106
110
  state.workspace,
111
+ state.workspaceId ?? getWorkspaceForIssue(state.issueId)?.id ?? null,
107
112
  state.sessionId ?? null,
108
113
  state.harness ?? "",
109
114
  state.model ?? "",
@@ -165,6 +170,8 @@ function saveOverdeckAgentStateSync(state) {
165
170
  }
166
171
  var AGENT_COLUMNS_FOR_DB, SELECT_AGENT_SQL;
167
172
  var init_agent_state_sync = __esmMin((() => {
173
+ init_agent_state_source();
174
+ init_resolver();
168
175
  init_infra();
169
176
  AGENT_COLUMNS_FOR_DB = [
170
177
  "id",
@@ -172,6 +179,7 @@ var init_agent_state_sync = __esmMin((() => {
172
179
  "role",
173
180
  "status",
174
181
  "workspace",
182
+ "workspace_id",
175
183
  "session_id",
176
184
  "harness",
177
185
  "model",
@@ -218,6 +226,165 @@ var init_agent_state_sync = __esmMin((() => {
218
226
  "updated_at"
219
227
  ];
220
228
  SELECT_AGENT_SQL = `SELECT ${AGENT_COLUMNS_FOR_DB.join(", ")} FROM agents`;
229
+ registerFeedbackAgentStateReader(listOverdeckAgentStatesSync);
230
+ }));
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);
221
388
  }));
222
389
  //#endregion
223
390
  //#region ../../lib/pan-dir/records.ts
@@ -244,6 +411,7 @@ function projectPipeline(issueId, status, existing) {
244
411
  issueId,
245
412
  reviewStatus: status?.reviewStatus ?? "pending",
246
413
  testStatus: status?.testStatus ?? "pending",
414
+ uatStatus: status?.uatStatus,
247
415
  verificationStatus: status?.verificationStatus,
248
416
  inspectStatus: status?.inspectStatus,
249
417
  mergeStatus: status?.mergeStatus,
@@ -260,6 +428,7 @@ function projectPipeline(issueId, status, existing) {
260
428
  ...base,
261
429
  reviewNotes: status.reviewNotes,
262
430
  testNotes: status.testNotes,
431
+ uatNotes: status.uatNotes,
263
432
  verificationNotes: status.verificationNotes,
264
433
  inspectNotes: status.inspectNotes,
265
434
  mergeNotes: status.mergeNotes,
@@ -391,10 +560,15 @@ async function buildIssueRecord(project, issueId, opts = {}) {
391
560
  * the status the rebuild projects — observed clobbering PAN-399's passed
392
561
  * verdict back to a pre-verdict snapshot. Same newer-wins rule (ISO `updatedAt`
393
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.
394
569
  */
395
570
  function pickNewerPipeline(rebuilt, fresh) {
396
- if (!fresh?.updatedAt || !rebuilt?.updatedAt) return rebuilt;
397
- return rebuilt.updatedAt < fresh.updatedAt ? fresh : rebuilt;
571
+ return mergePipelineVerdictAware(rebuilt, fresh);
398
572
  }
399
573
  /**
400
574
  * PAN-1908 / PAN-1919: rebuild and queue the per-issue permanent record for a
@@ -438,19 +612,46 @@ var init_records = __esmMin((() => {
438
612
  init_agent_state_sync();
439
613
  init_record();
440
614
  init_record_update();
615
+ init_pipeline_verdict_merge();
441
616
  }));
442
617
  //#endregion
443
618
  //#region ../../lib/overdeck/review-status-record-sync.ts
444
- function updateIssueRecordForReviewStatusSync(issueId, status) {
445
- const write = Promise.resolve(updateIssueRecordForIssue(issueId, status)).then((landed) => {
446
- if (landed === false) {
447
- writeWorkspaceVerdictFallbackSync(issueId, status);
448
- scheduleVerdictFallbackDrain(issueId);
449
- } else if (landed === true) trackVerdictFallbackDrain(issueId);
450
- }).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
+ }
451
652
  writeWorkspaceVerdictFallbackSync(issueId, status);
452
653
  scheduleVerdictFallbackDrain(issueId);
453
- });
654
+ })();
454
655
  pendingJournalWrites.add(write);
455
656
  write.finally(() => pendingJournalWrites.delete(write));
456
657
  }
@@ -491,6 +692,7 @@ function enrichReviewNotesFromRecordSync(issueId, status) {
491
692
  ...status,
492
693
  reviewNotes: pipeline.reviewNotes ?? status.reviewNotes,
493
694
  testNotes: pipeline.testNotes ?? status.testNotes,
695
+ uatNotes: pipeline.uatNotes ?? status.uatNotes,
494
696
  mergeNotes: pipeline.mergeNotes ?? status.mergeNotes,
495
697
  inspectNotes: pipeline.inspectNotes ?? status.inspectNotes,
496
698
  verificationNotes: pipeline.verificationNotes ?? status.verificationNotes,
@@ -507,6 +709,8 @@ function durableSubset(p) {
507
709
  return {
508
710
  reviewStatus: p.reviewStatus,
509
711
  testStatus: p.testStatus,
712
+ uatStatus: p.uatStatus ?? void 0,
713
+ uatNotes: p.uatNotes,
510
714
  mergeStatus: p.mergeStatus ?? void 0,
511
715
  mergeStep: p.mergeStep,
512
716
  inspectStatus: p.inspectStatus ?? void 0,
@@ -708,6 +912,21 @@ async function readWorkspaceVerdictFallback(issueId) {
708
912
  * write was in flight stays at the live path for its own drain schedule, and
709
913
  * no step ever renames onto a path another process may have just created.
710
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
+ }
711
930
  async function drainWorkspaceVerdictFallback(issueId) {
712
931
  const claims = claimWorkspaceVerdictFallbackSync(issueId);
713
932
  if (!claims) return true;
@@ -716,16 +935,19 @@ async function drainWorkspaceVerdictFallback(issueId) {
716
935
  const losers = claims.filter((claim) => claim !== winner);
717
936
  const { fallback } = winner;
718
937
  const journal = readPipelineSync(issueId);
719
- if (journal?.updatedAt && !(journal.updatedAt < fallback.updatedAt)) {
938
+ const journalAtLeastAsNew = !!journal?.updatedAt && !(journal.updatedAt < fallback.updatedAt);
939
+ if (journalAtLeastAsNew && pipelineCoversFallbackVerdicts(journal, fallback)) {
720
940
  for (const claim of claims) rmSync$1(claim.claimPath, { force: true });
721
941
  return true;
722
942
  }
723
- if (await updateIssueRecordForIssue(issueId, {
943
+ const conflicted = journalAtLeastAsNew && pipelineConflictsWithFallbackVerdicts(journal, fallback);
944
+ const status = {
724
945
  issueId: fallback.issueId,
725
946
  ...fallback.pipeline,
726
947
  updatedAt: fallback.updatedAt,
727
948
  readyForMerge: false
728
- })) {
949
+ };
950
+ if (conflicted ? false : await updateIssueRecordForIssue(issueId, status)) {
729
951
  for (const claim of claims) rmSync$1(claim.claimPath, { force: true });
730
952
  return true;
731
953
  }
@@ -815,12 +1037,21 @@ async function readJournalStatus(issueId) {
815
1037
  const [pipeline, fallback] = await Promise.all([readPipeline(issueId), readWorkspaceVerdictFallback(issueId)]);
816
1038
  return projectJournalStatus(pipeline, fallback);
817
1039
  }
818
- 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;
819
1041
  var init_review_status_record_sync = __esmMin((() => {
820
1042
  init_records();
821
1043
  init_record();
1044
+ init_pipeline_verdict_merge();
822
1045
  init_projects();
823
1046
  pendingJournalWrites = /* @__PURE__ */ new Set();
1047
+ DEFAULT_VERDICT_BACKOFF_DELAYS_MS = [
1048
+ 2e3,
1049
+ 5e3,
1050
+ 1e4,
1051
+ 2e4,
1052
+ 4e4,
1053
+ 8e4
1054
+ ];
824
1055
  FALLBACK_CLEARABLE_FIELDS = [
825
1056
  "strikeTransportRetryCount",
826
1057
  "strikeNextAttemptAt",
@@ -1046,6 +1277,7 @@ var init_review_status_reconcile = __esmMin((() => {
1046
1277
  init_review_status_sync();
1047
1278
  init_review_convergence();
1048
1279
  init_projects();
1280
+ init_review_status_limits();
1049
1281
  }));
1050
1282
  //#endregion
1051
1283
  //#region ../../lib/review-dispatch-decision.ts
@@ -1116,7 +1348,7 @@ function createGetModuleFromFilename(basePath = process.argv[1] ? dirname$1(proc
1116
1348
  return (filename) => {
1117
1349
  if (!filename) return;
1118
1350
  const normalizedFilename = isWindows ? normalizeWindowsPath(filename) : filename;
1119
- let { dir, base: file, ext } = posix.parse(normalizedFilename);
1351
+ let { dir, base: file, ext } = posix$1.parse(normalizedFilename);
1120
1352
  if (".js" === ext || ".mjs" === ext || ".cjs" === ext) file = file.slice(0, -1 * ext.length);
1121
1353
  const decodedFile = decodeURIComponent(file);
1122
1354
  if (!dir) dir = ".";
@@ -6856,9 +7088,9 @@ var init_service = __esmMin((() => {
6856
7088
  //#region ../../lib/telemetry/pipeline.ts
6857
7089
  async function readCanonicalPipelineMembership(issueId) {
6858
7090
  const [membershipModule, gatherModule, recordModule] = await Promise.all([
6859
- import("./pipeline-membership-C88VBnhJ.js"),
6860
- import("./pipeline-membership-gather-4eR-7Tqy.js"),
6861
- 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")
6862
7094
  ]);
6863
7095
  const project = recordModule.resolveProjectForIssue(issueId);
6864
7096
  if (!project) return false;
@@ -6909,11 +7141,16 @@ var init_pipeline = __esmMin((() => {
6909
7141
  "claude-code",
6910
7142
  "ohmypi",
6911
7143
  "codex",
6912
- "acp"
7144
+ "acp",
7145
+ "kimi-code"
6913
7146
  ]);
6914
7147
  }));
6915
7148
  //#endregion
6916
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
+ }
6917
7154
  /**
6918
7155
  * Authoritative "allowed to merge" predicate (PAN-1759). The flywheel
6919
7156
  * orchestrator's pipeline verb says it INTENDS to merge an issue; this record
@@ -7042,49 +7279,59 @@ function setReviewStatusSync(issueId, update, existing) {
7042
7279
  "failed",
7043
7280
  "skipped"
7044
7281
  ].includes(update.reviewStatus ?? "") && merged.reviewRequestedAt && (!merged.reviewSpawnedAt || Date.parse(merged.reviewRequestedAt) <= new Date(merged.reviewSpawnedAt).getTime())) merged.reviewRequestedAt = void 0;
7045
- const history = [...status.history || []];
7046
7282
  const now = (/* @__PURE__ */ new Date()).toISOString();
7047
- if (update.reviewStatus && update.reviewStatus !== status.reviewStatus) history.push({
7283
+ const rawHistory = [...status.history || []];
7284
+ if (update.reviewStatus && update.reviewStatus !== status.reviewStatus) rawHistory.push({
7048
7285
  type: "review",
7049
7286
  status: update.reviewStatus,
7050
7287
  timestamp: now,
7051
- notes: update.reviewNotes
7288
+ ...update.reviewNotes ? { notes: update.reviewNotes } : {}
7052
7289
  });
7053
- if (update.testStatus && update.testStatus !== status.testStatus) history.push({
7290
+ if (update.testStatus && update.testStatus !== status.testStatus) rawHistory.push({
7054
7291
  type: "test",
7055
7292
  status: update.testStatus,
7056
7293
  timestamp: now,
7057
- notes: update.testNotes
7294
+ ...update.testNotes ? { notes: update.testNotes } : {}
7058
7295
  });
7059
- if (update.uatStatus && update.uatStatus !== status.uatStatus) history.push({
7296
+ if (update.uatStatus && update.uatStatus !== status.uatStatus) rawHistory.push({
7060
7297
  type: "uat",
7061
7298
  status: update.uatStatus,
7062
7299
  timestamp: now,
7063
- notes: update.uatNotes
7300
+ ...update.uatNotes ? { notes: update.uatNotes } : {}
7064
7301
  });
7065
- if (update.mergeStatus && update.mergeStatus !== status.mergeStatus) history.push({
7302
+ if (update.mergeStatus && update.mergeStatus !== status.mergeStatus) rawHistory.push({
7066
7303
  type: "merge",
7067
7304
  status: update.mergeStatus,
7068
7305
  timestamp: now
7069
7306
  });
7070
- if (update.releaseStatus && update.releaseStatus !== status.releaseStatus) history.push({
7307
+ if (update.releaseStatus && update.releaseStatus !== status.releaseStatus) rawHistory.push({
7071
7308
  type: "release",
7072
7309
  status: update.releaseStatus,
7073
7310
  timestamp: now,
7074
- notes: update.releaseNotes
7311
+ ...update.releaseNotes ? { notes: update.releaseNotes } : {}
7075
7312
  });
7076
- while (history.length > 10) history.shift();
7077
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
+ });
7078
7325
  const updated = normalizeReviewStatusSync({
7079
7326
  ...merged,
7080
7327
  issueId,
7081
7328
  updatedAt: now,
7082
7329
  readyForMerge,
7083
- history
7330
+ history: boundedHistory
7084
7331
  });
7085
7332
  if (readyForMerge && !status.readyForMerge && updated.prUrl) (async () => {
7086
7333
  try {
7087
- const { isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-Bmg4R9mv.js");
7334
+ const { isGitHubAppConfigured, reportCommitStatus } = await import("./github-app-CpQSDlv8.js");
7088
7335
  if (!isGitHubAppConfigured()) return;
7089
7336
  const prMatch = updated.prUrl.match(/github\.com\/([^/]+)\/([^/]+)\/pull/);
7090
7337
  if (!prMatch) return;
@@ -7104,9 +7351,10 @@ function setReviewStatusSync(issueId, update, existing) {
7104
7351
  console.warn(`[review-status] Failed to report commit status: ${err.message}`);
7105
7352
  }
7106
7353
  })();
7107
- updateIssueRecordForReviewStatusSync(issueId, updated);
7354
+ const verdictWrite = carriesNewTerminalVerdict(status, update);
7355
+ updateIssueRecordForReviewStatusSync(issueId, updated, { verdictWrite });
7108
7356
  try {
7109
- upsertReviewStatusSync(updated);
7357
+ upsertReviewStatusSync(dbStatus);
7110
7358
  } catch (err) {
7111
7359
  const msg = err instanceof Error ? err.message : String(err);
7112
7360
  console.warn(`[review-status] DB cache write skipped for ${issueId} (${msg}); journal holds the verdict, host will reconcile on read.`);
@@ -7338,8 +7586,8 @@ function emitReactiveLifecycleEvent(type, issueId) {
7338
7586
  }
7339
7587
  async function deliverReviewVerdictFeedbackHostSide(issueId, status) {
7340
7588
  try {
7341
- const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-HwF6ODFy.js");
7342
- const { getAgentStateSync } = await import("./agents-ePFVoZbu.js");
7589
+ const { deliverReviewVerdictFeedback } = await import("./review-verdict-feedback-HRY9P4bN.js");
7590
+ const { getAgentStateSync } = await import("./agents-IPSa5kzn.js");
7343
7591
  const runId = getAgentStateSync(`agent-${issueId.toLowerCase()}-review`)?.reviewRunId;
7344
7592
  if ((await Effect.runPromise(deliverReviewVerdictFeedback({
7345
7593
  issueId,
@@ -7382,7 +7630,7 @@ function maybeAutoDispatchReviewHostSide(issueId, status) {
7382
7630
  }
7383
7631
  async function dispatchReviewHostSide(issueId, prUrl) {
7384
7632
  try {
7385
- const { hasDurableReviewPipelineHandler, startDurableReviewPipelineHostSide } = await import("./durable-review-pipeline-DP6bIcOY.js");
7633
+ const { hasDurableReviewPipelineHandler, startDurableReviewPipelineHostSide } = await import("./durable-review-pipeline-CStTgOAf.js");
7386
7634
  if (!hasDurableReviewPipelineHandler()) {
7387
7635
  if (!loggedMissingPipelineHandler) {
7388
7636
  loggedMissingPipelineHandler = true;
@@ -7390,7 +7638,7 @@ async function dispatchReviewHostSide(issueId, prUrl) {
7390
7638
  }
7391
7639
  return;
7392
7640
  }
7393
- const { spawnReviewRoleForIssue } = await import("./review-agent-BTCNkq2h.js");
7641
+ const { spawnReviewRoleForIssue } = await import("./review-agent-CD3RQ-tc.js");
7394
7642
  if (!await startDurableReviewPipelineHostSide({
7395
7643
  issueId,
7396
7644
  ...prUrl ? { prUrl } : {},
@@ -7412,13 +7660,13 @@ function maybeRecoverTestVerdictHostSide(issueId, status) {
7412
7660
  }
7413
7661
  async function recoverTestVerdictHostSide(issueId) {
7414
7662
  try {
7415
- const { resolveProjectFromIssueSync } = await import("./projects-_n3Zui6K.js");
7663
+ const { resolveProjectFromIssueSync } = await import("./projects-WqMWCdpa.js");
7416
7664
  const resolved = resolveProjectFromIssueSync(issueId);
7417
7665
  if (!resolved) return;
7418
7666
  const { existsSync } = await import("fs");
7419
7667
  const workspace = join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`);
7420
7668
  if (!existsSync(workspace)) return;
7421
- const { readTestVerdictArtifact } = await import("./test-verdict-BHgTAwIG.js");
7669
+ const { readTestVerdictArtifact } = await import("./test-verdict-NdtgRBuA.js");
7422
7670
  const artifact = readTestVerdictArtifact(workspace);
7423
7671
  if (!artifact) return;
7424
7672
  setReviewStatusSync(issueId, {
@@ -7465,13 +7713,13 @@ function resetPipelineVerdictsForWorkStartSync(issueId, options = {}) {
7465
7713
  }
7466
7714
  async function deliverTestFailureToWorkAgentHostSide(issueId, status) {
7467
7715
  try {
7468
- const { resolveProjectFromIssueSync } = await import("./projects-_n3Zui6K.js");
7716
+ const { resolveProjectFromIssueSync } = await import("./projects-WqMWCdpa.js");
7469
7717
  const resolved = resolveProjectFromIssueSync(issueId);
7470
7718
  const workspace = resolved ? join$1(resolved.projectPath, "workspaces", `feature-${issueId.toLowerCase()}`) : void 0;
7471
7719
  const notes = status.testNotes;
7472
7720
  let feedbackPath;
7473
7721
  try {
7474
- const { writeFeedbackFile } = await import("./feedback-writer-CoB9Z6aU.js");
7722
+ const { writeFeedbackFile } = await import("./feedback-writer-CTSuA6lw.js");
7475
7723
  const r = await Effect.runPromise(writeFeedbackFile({
7476
7724
  issueId,
7477
7725
  workspacePath: workspace,
@@ -7483,10 +7731,10 @@ async function deliverTestFailureToWorkAgentHostSide(issueId, status) {
7483
7731
  if (r.success) feedbackPath = r.filePath;
7484
7732
  } catch {}
7485
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.`;
7486
- const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-BJ5ZADsu.js");
7734
+ const { resolveIssueFeedbackTarget, surfaceIssueFeedbackNeedsYou } = await import("./feedback-target-D9Tex35_.js");
7487
7735
  const target = await resolveIssueFeedbackTarget(issueId);
7488
7736
  if ("agentId" in target) {
7489
- const { messageAgent } = await import("./agents-ePFVoZbu.js");
7737
+ const { messageAgent } = await import("./agents-IPSa5kzn.js");
7490
7738
  await messageAgent(target.agentId, message, "internal", { owesRework: true });
7491
7739
  console.log(`[review-status] delivered test failure to ${target.agentId} for ${issueId} (host-side)`);
7492
7740
  } else await surfaceIssueFeedbackNeedsYou(issueId, target.reason, {
@@ -7689,8 +7937,10 @@ var init_review_status = __esmMin((() => {
7689
7937
  init_review_status_source();
7690
7938
  init_review_status_normalize();
7691
7939
  init_review_status_record_sync();
7940
+ init_pipeline_verdict_merge();
7692
7941
  init_review_status_reconcile();
7693
7942
  init_review_dispatch_decision();
7943
+ init_review_status_limits();
7694
7944
  init_review_status_read();
7695
7945
  init_pipeline();
7696
7946
  registerReviewStatusMapReader(() => getAllReviewStatusesFromDb());
@@ -7732,6 +7982,6 @@ var init_review_status = __esmMin((() => {
7732
7982
  });
7733
7983
  }));
7734
7984
  //#endregion
7735
- 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 };
7736
7986
 
7737
- //# sourceMappingURL=review-status-CGvlA4o_.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-CGvlA4o_.js";
2
- import { t as enrichReviewStatus } from "./review-status-enrichment-8NiNXi5W.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-DURrmGYX.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-8NiNXi5W.js.map
127
+ //# sourceMappingURL=review-status-enrichment-DJRgGX7-.js.map