@overdeck/desktop 0.45.24 → 0.47.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 (528) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +36 -1
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-DDCnXF58.js → acceptance-criteria-10Ur5Dne.js} +2 -2
  4. package/server/activity-logger-CMthG6Vd.js +3 -0
  5. package/server/{activity-logger-DDlOIAML.js → activity-logger-CyteR4JO.js} +24 -13
  6. package/server/{advancing-selfheal-BVwW4qRn.js → advancing-selfheal-BNwqxseD.js} +6 -6
  7. package/server/{agent-gc-CHcnvonI.js → agent-gc-C3h9Or3a.js} +5 -5
  8. package/server/agent-state-CYXJVG72.js +3 -0
  9. package/server/agent-state-service-C63p_ftq.js +2 -0
  10. package/server/{agent-state-service-BsgWxZuB.js → agent-state-service-Ds6OeFvo.js} +15 -9
  11. package/server/{agents-EbI0zCJl.js → agents-J5mEnekq.js} +23 -16
  12. package/server/agents-ePFVoZbu.js +3 -0
  13. package/server/archive-planning-B2XplFzT.js +2 -0
  14. package/server/{archive-planning-Du25Jtst.js → archive-planning-BwhxeP7C.js} +22 -26
  15. package/server/{artifact-index-jobs-CbEDfCDu.js → artifact-index-jobs-D1q_vR3V.js} +2 -2
  16. package/server/{assemble-J2ZZ2C15.js → assemble-Bgwqv-Ro.js} +2 -2
  17. package/server/auto-spawn-consent-CQ9Bi9q6.js +1141 -0
  18. package/server/{backlog-auto-trigger-2R2jog7n.js → backlog-auto-trigger-n1lzPgN4.js} +3 -3
  19. package/server/{behavior-B3exJ42O.js → behavior-td6-xhQk.js} +2 -2
  20. package/server/boot-reconciled-stop-events-C7gGe3oB.js +44 -0
  21. package/server/bridge-pool-patrol-CYH2OLb5.js +136 -0
  22. package/server/{briefing-freshness-D1wzUIWv.js → briefing-freshness-DRqZ8lAz.js} +2 -2
  23. package/server/{build-info-Ie_D0_BT.js → build-info-7yiEpl6u.js} +5 -3
  24. package/server/{build-info-CZk_TITh.js → build-info-CpG__c63.js} +1 -1
  25. package/server/{checkpoint-manager-DwbQoqrC.js → checkpoint-manager-CkKmB0wZ.js} +1 -1
  26. package/server/{checkpoint-manager-BI1Wxoku.js → checkpoint-manager-DBcyNR8w.js} +2 -2
  27. package/server/checkpoint-worker.js +1 -1
  28. package/server/{checkpoints-CQB1h765.js → checkpoints-D95apurL.js} +2 -2
  29. package/server/{checkpoints-BJIs5QIA.js → checkpoints-Wm963lm8.js} +1 -1
  30. package/server/{claude-hooks-provision-8Ngo8TpT.js → claude-hooks-provision-4RPxNkE8.js} +1 -1
  31. package/server/{claude-hooks-provision-D8GXF3_s.js → claude-hooks-provision-Bjitl9aI.js} +13 -2
  32. package/server/{claude-permissions-DNWEVV6z.js → claude-permissions-CpbpvUQ2.js} +2 -2
  33. package/server/{claude-settings-overlay-DWy-Bb4Y.js → claude-settings-overlay-BzkHYDwR.js} +1 -1
  34. package/server/{claude-settings-overlay-CEdaqpWI.js → claude-settings-overlay-_H9Yrzab.js} +2 -2
  35. package/server/cli-CjOCSnfj.js +3 -0
  36. package/server/{cli-RoOx5DUf.js → cli-Cte9ZFGn.js} +9 -9
  37. package/server/{cliproxy-C8a1vtTU.js → cliproxy-C5fMJ7rY.js} +2 -2
  38. package/server/{cliproxy-fHfIeiGd.js → cliproxy-DaAbWMjC.js} +1 -1
  39. package/server/{close-issue-DoOifFIK.js → close-issue-BPh1ARCF.js} +5 -5
  40. package/server/{closed-issue-reaper-CktPXo8m.js → closed-issue-reaper-DHRfRMrp.js} +1 -1
  41. package/server/{closed-issue-reaper-Bk3SU4RC.js → closed-issue-reaper-DoOZqGFK.js} +88 -17
  42. package/server/{codex-BZXGhUVB.js → codex-BzGDW_d3.js} +36 -7
  43. package/server/{codex-GcHuUF-k.js → codex-o8FJwzmy.js} +1 -1
  44. package/server/{codex-parser-CFZ1_1Jl.js → codex-parser-Dt-ycU8L.js} +2 -2
  45. package/server/compaction-continuation-CvXpbZ4w.js +200 -0
  46. package/server/{config-CKxYiCmX.js → config-Bi3u1VK7.js} +4 -3
  47. package/server/{config-BZ0sHTju.js → config-BvLe652W.js} +2 -2
  48. package/server/{config-DzV30TOm.js → config-CL3Gyvja.js} +1 -1
  49. package/server/{config-yaml-DySPNmKN.js → config-yaml-CxdwhAIA.js} +276 -14
  50. package/server/conflict-gate-CX80JYYS.js +3 -0
  51. package/server/{conflict-gate-BaCVrH-N.js → conflict-gate-E4nt7ZeS.js} +60 -14
  52. package/server/{context-layers-igZ4FI4_.js → context-layers-C_IIysnm.js} +3 -3
  53. package/server/{context-layers-BrPmE__h.js → context-layers-DAG83UZt.js} +2 -2
  54. package/server/{control-settings-BQp7_4uD.js → control-settings-CiqGxXnc.js} +56 -19
  55. package/server/{conversation-compaction-eQB5CkOe.js → conversation-compaction-BE3CNtHF.js} +1 -1
  56. package/server/{conversation-compaction-CgrR8YYp.js → conversation-compaction-D6-yLtqt.js} +8 -8
  57. package/server/{conversation-service-DPJ71F33.js → conversation-service-DBxoYMDl.js} +10 -8
  58. package/server/conversation-service-D_TS2b1r.js +3 -0
  59. package/server/{conversations-CAsJF9kh.js → conversations-BKDVpB-3.js} +1 -1
  60. package/server/{conversations-6AfUfbwc.js → conversations-D0UEdLtk.js} +4 -4
  61. package/server/{cost-R-m6Yi-W.js → cost-DS1s0DbG.js} +3 -3
  62. package/server/{cost-B2ddP6wq.js → cost-DpgYmYqR.js} +12 -2
  63. package/server/{cost-sync-BsN6ER0n.js → cost-sync-tOCCGnEt.js} +3 -3
  64. package/server/{dag-B1ucnjDU.js → dag-BtkgLeqY.js} +2 -2
  65. package/server/{dangerous-git-ops-BXqeWVSf.js → dangerous-git-ops-CFLykHWt.js} +1 -1
  66. package/server/dashboard-db-worker.js +7 -7
  67. package/server/deacon-BIblC-WX.js +4 -0
  68. package/server/{deacon-nudge-log-6wVqAaqz.js → deacon-nudge-log-B08gF0mh.js} +3 -3
  69. package/server/{deacon-CU_cAYSR.js → deacon-pLRLbPvR.js} +3308 -2707
  70. package/server/deacon-pending-lifecycle-B-Io84AP.js +33 -0
  71. package/server/deacon-swarm-B1XkIvfr.js +2 -0
  72. package/server/{deacon-swarm-BXZZ1Z2-.js → deacon-swarm-v5PMun-m.js} +15 -14
  73. package/server/deacon.js +14 -19
  74. package/server/dead-end-trip-D8A3msX9.js +13 -0
  75. package/server/delivery-BX9HR4wQ.js +3 -0
  76. package/server/{deploy-patrol-AiFoP8dw.js → deploy-patrol-sYgOxLeb.js} +69 -18
  77. package/server/deploy-queue-VfohaPN_.js +169 -0
  78. package/server/deploy-queue-gHJBycaF.js +3 -0
  79. package/server/deploy-window-CFRZ0-kt.js +3 -0
  80. package/server/{deploy-window-C3F-tihF.js → deploy-window-D4DQb8VP.js} +40 -16
  81. package/server/{dev-supervisor-bcOWqdQE.js → dev-supervisor-DiOBDM1c.js} +2 -2
  82. package/server/{devcontainer-renderer-_d6XhyND.js → devcontainer-renderer-BUOIlfgD.js} +3 -3
  83. package/server/dist-B3YPQa5A.js +3 -0
  84. package/server/{dist-Cb_0uvpS.js → dist-C3A8B8wM.js} +1 -1
  85. package/server/{dist-src-BSoS7mkd.js → dist-src-C0adpegX.js} +1 -1
  86. package/server/{docker-DcMTFTUC.js → docker-BJzlkqYB.js} +2 -2
  87. package/server/docker-Y3PElJb0.js +3 -0
  88. package/server/dod-DlNtcH6n.js +91 -0
  89. package/server/durable-review-pipeline-Cibps-Rg.js +20 -0
  90. package/server/durable-review-pipeline-DP6bIcOY.js +3 -0
  91. package/server/{ensure-devcontainer-DNi-ono3.js → ensure-devcontainer-BAofzBPv.js} +4 -4
  92. package/server/{ensure-devcontainer-BZgOhRo7.js → ensure-devcontainer-DMAbWqtQ.js} +1 -1
  93. package/server/{esm-shims-OSHAYaS1.js → esm-shims-BeObUkaw.js} +1 -1
  94. package/server/{event-store-EV2cMiXj.js → event-store-5UKzh9Jf.js} +1 -1
  95. package/server/{event-store-CQL6NeqB.js → event-store-CrHcVC5_.js} +23 -4
  96. package/server/{events-DTfAe4My.js → events-BNrvchBg.js} +3 -3
  97. package/server/{events-BTdrdEq8.js → events-CF8QDbuV.js} +1 -1
  98. package/server/{factory-CFibJuaw.js → factory-Cmm9Hsho.js} +5 -5
  99. package/server/{feature-registry-population-DKZFMbFt.js → feature-registry-population-B6HpNWRy.js} +4 -4
  100. package/server/{feature-registry-storage-BdPuLcBX.js → feature-registry-storage-DJEFx1Pf.js} +2 -2
  101. package/server/{features-ez2271oH.js → features-D5km80UI.js} +2 -2
  102. package/server/{feedback-target-CoFDHiM8.js → feedback-target-BJ5ZADsu.js} +1 -1
  103. package/server/{feedback-target-7mqqwrX6.js → feedback-target-DSxEL6lP.js} +8 -8
  104. package/server/{feedback-writer-CY5L1lB7.js → feedback-writer-C27Hak8a.js} +5 -5
  105. package/server/{feedback-writer-D3a22RCd.js → feedback-writer-CoB9Z6aU.js} +1 -1
  106. package/server/{flywheel-DHrgCphM.js → flywheel-BHx8XuMr.js} +47 -20
  107. package/server/{flywheel-SVF02Jpq.js → flywheel-DZZdtiOL.js} +1 -1
  108. package/server/{flywheel-DzGtWnJ1.js → flywheel-f662Q-y2.js} +16 -15
  109. package/server/flywheel-merge-order-D_xLMbJU.js +462 -0
  110. package/server/flywheel-merge-order-Dil0LmdN.js +2 -0
  111. package/server/forge-B5o319qI.js +3 -0
  112. package/server/forge-BaKGCya6.js +383 -0
  113. package/server/{from-kNxT0bZC.js → from-B3tZbB55.js} +1 -1
  114. package/server/fs-lock-Bre3sGoz.js +130 -0
  115. package/server/{fts-db-CE46vDkZ.js → fts-db-IVc4_M3f.js} +2 -2
  116. package/server/{fts-operations-CqY6zl-i.js → fts-operations-B9jG8wa3.js} +2 -2
  117. package/server/{git-utils-CRw2zLPC.js → git-utils-CsvYfJU3.js} +30 -5
  118. package/server/git-utils-Xg4PFN45.js +3 -0
  119. package/server/{github-app-ClZ2lk8D.js → github-app-Bmg4R9mv.js} +1 -1
  120. package/server/{github-app-C3QrAUd0.js → github-app-CmNk0zLU.js} +3 -3
  121. package/server/{github-client-DfQYVUaw.js → github-client-B6KM9_wA.js} +1 -1
  122. package/server/{github-client-BnIsSrEN.js → github-client-qazkPrg0.js} +3 -3
  123. package/server/github-pr-lookup-DAcVeRLK.js +58 -0
  124. package/server/{harness-binary-DPUi-Pv8.js → harness-binary-BSpiXaLw.js} +2 -2
  125. package/server/{harness-resolve-3lNZkyT4.js → harness-resolve-BAJu5MX8.js} +4 -4
  126. package/server/{health-events-BDOHby5Q.js → health-events-2Z6Wa9SM.js} +1 -1
  127. package/server/{health-events-BBcTYQKU.js → health-events-BwX32k8d.js} +2 -2
  128. package/server/{hooks-DPVX1rwQ.js → hooks-D1g1jKLI.js} +1 -1
  129. package/server/{hooks-CKZgXlJb.js → hooks-DbtbimEf.js} +2 -2
  130. package/server/{hume-Cz8igP9E.js → hume-DXNiu6nQ.js} +2 -2
  131. package/server/hume-VUCNbTgn.js +3 -0
  132. package/server/{idle-stack-reaper-CuLF0j2H.js → idle-stack-reaper-CRA1e0jr.js} +1 -1
  133. package/server/{idle-stack-reaper-DDIRwxUY.js → idle-stack-reaper-Cy-dQzW4.js} +99 -6
  134. package/server/in-flight-guard-D-sSkADM.js +45 -0
  135. package/server/{infra-BEqFxlJc.js → infra-BDQDRopn.js} +81 -5
  136. package/server/{injection-C8aiVJrF.js → injection-6AGnXxlj.js} +7 -7
  137. package/server/{injection-CPUIqNhI.js → injection-Bl8d_jHZ.js} +1 -1
  138. package/server/inspect-agent-CUwVmr2h.js +2 -0
  139. package/server/{inspect-agent-BLuJ1AkT.js → inspect-agent-nXdIptyh.js} +26 -25
  140. package/server/{internal-token-s0-oKybJ.js → internal-token-DzK385vD.js} +2 -2
  141. package/server/{internal-token-BrcU6qfe.js → internal-token-Ias7N8Kg.js} +1 -1
  142. package/server/{io-C9kF1wtJ.js → io-B00PBNku.js} +44 -27
  143. package/server/{issue-closed-CDJk4pIp.js → issue-closed-BehTG1be.js} +8 -8
  144. package/server/{issue-lifecycle-ojZAzDBP.js → issue-lifecycle-Birk-ifu.js} +42 -30
  145. package/server/{issue-lifecycle-B8sZHVHh.js → issue-lifecycle-BqSuQvbn.js} +1 -1
  146. package/server/{issue-service-singleton-BvJ09SaR.js → issue-service-singleton-B2wXiIlw.js} +1 -1
  147. package/server/{issue-service-singleton-Yx5DdmVJ.js → issue-service-singleton-C6ZduvuY.js} +10 -10
  148. package/server/{issues-BMmP_77e.js → issues-DQ5-LatB.js} +2 -2
  149. package/server/{jsonl-parser-BXSlHwEh.js → jsonl-parser-BDpnGFCl.js} +5 -4
  150. package/server/{label-cleanup-B0UJwnv5.js → label-cleanup-Dwnky8FG.js} +3 -3
  151. package/server/{lifecycle-xmBfK2GJ.js → lifecycle-B3s4sM1G.js} +6 -7
  152. package/server/{lifecycle-yPd___5E.js → lifecycle-B4Xdb4cY.js} +2 -2
  153. package/server/{lifecycle-io-DPo7x11I.js → lifecycle-io-CzTHEooc.js} +1 -1
  154. package/server/{lifecycle-io-BREGpnLk.js → lifecycle-io-DCo6s6ks.js} +5 -5
  155. package/server/{linear-client-BsuUvkdA.js → linear-client-9uq7fhiV.js} +3 -3
  156. package/server/{linear-client-CTskEeT_.js → linear-client-CnbtHiic.js} +1 -1
  157. package/server/linear-mcp-auth-BxUOzswy.js +280 -0
  158. package/server/linear-mcp-auth-D46fBCLf.js +2 -0
  159. package/server/memory-fts-worker.js +1 -1
  160. package/server/{merge-CefQNAnq.js → merge-DiW9RdSB.js} +13 -11
  161. package/server/{merge-agent-4WOWlSYA.js → merge-agent-BLUgRsz3.js} +234 -84
  162. package/server/{merge-agent-CKkgIBPB.js → merge-agent-DQTXZk8z.js} +1 -1
  163. package/server/{merge-batch-ClFn2T-y.js → merge-batch-Cp_j9BGk.js} +1 -1
  164. package/server/merge-completeness-B46KqhtY.js +277 -0
  165. package/server/merge-completeness-BLbB5-6n.js +3 -0
  166. package/server/merge-ops-1abz6O_P.js +2 -0
  167. package/server/merge-rebase-CJJVAJuz.js +2 -0
  168. package/server/{merge-rebase-BfaTyXsw.js → merge-rebase-DIkBjgwq.js} +3 -3
  169. package/server/{merge-set-DJ8-UErs.js → merge-set-CBgHfwM0.js} +11 -5
  170. package/server/merge-set-DeUxFsC3.js +3 -0
  171. package/server/{merge-B1DiziGU.js → merge-sr8Nrnmi.js} +1 -1
  172. package/server/merge-sync-CpGmk6Ch.js +3 -0
  173. package/server/{merge-sync-VPV28g0g.js → merge-sync-kr4vqyjM.js} +409 -153
  174. package/server/{merge-train-CHopycP0.js → merge-train-Dmrcus12.js} +18 -8
  175. package/server/{merge-train-deps-D1cOZzy2.js → merge-train-deps-D_uGX91G.js} +21 -15
  176. package/server/merge-verification-NvaAd8CZ.js +220 -0
  177. package/server/merged-docker-cleanup-worker-DH_hrGPI.js +3 -0
  178. package/server/merged-docker-cleanup-worker-Y1R06TEl.js +107 -0
  179. package/server/{multipart-parser-duPAfSBw.js → multipart-parser-R-oC8dQg.js} +2 -2
  180. package/server/{no-resume-mode-Nw29vaFb.js → no-resume-mode-BgD0JUmM.js} +1 -1
  181. package/server/node_modules/.package-lock.json +30 -30
  182. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  183. package/server/node_modules/@google-cloud/common/package.json +2 -2
  184. package/server/node_modules/@types/node/README.md +1 -1
  185. package/server/node_modules/@types/node/crypto.d.ts +1 -1
  186. package/server/node_modules/@types/node/package.json +2 -2
  187. package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  188. package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  189. package/server/node_modules/gaxios/package.json +1 -1
  190. package/server/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
  191. package/server/node_modules/google-auth-library/package.json +1 -1
  192. package/server/node_modules/google-gax/build/protos/google/api/auth.proto +2 -1
  193. package/server/node_modules/google-gax/build/protos/google/api/backend.proto +12 -1
  194. package/server/node_modules/google-gax/build/protos/google/api/billing.proto +1 -1
  195. package/server/node_modules/google-gax/build/protos/google/api/client.proto +165 -53
  196. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1/resources.proto +1 -1
  197. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/quota_adjuster_settings.proto +7 -3
  198. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/resources.proto +1 -1
  199. package/server/node_modules/google-gax/build/protos/google/api/config_change.proto +1 -1
  200. package/server/node_modules/google-gax/build/protos/google/api/context.proto +1 -1
  201. package/server/node_modules/google-gax/build/protos/google/api/control.proto +3 -3
  202. package/server/node_modules/google-gax/build/protos/google/api/distribution.proto +1 -1
  203. package/server/node_modules/google-gax/build/protos/google/api/documentation.proto +1 -1
  204. package/server/node_modules/google-gax/build/protos/google/api/endpoint.proto +1 -1
  205. package/server/node_modules/google-gax/build/protos/google/api/error_reason.proto +186 -1
  206. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/checked.proto +31 -3
  207. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/eval.proto +8 -9
  208. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/explain.proto +1 -2
  209. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/syntax.proto +20 -22
  210. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/value.proto +2 -3
  211. package/server/node_modules/google-gax/build/protos/google/api/field_behavior.proto +1 -1
  212. package/server/node_modules/google-gax/build/protos/google/api/field_info.proto +1 -1
  213. package/server/node_modules/google-gax/build/protos/google/api/http.proto +1 -1
  214. package/server/node_modules/google-gax/build/protos/google/api/httpbody.proto +1 -1
  215. package/server/node_modules/google-gax/build/protos/google/api/label.proto +1 -1
  216. package/server/node_modules/google-gax/build/protos/google/api/launch_stage.proto +1 -1
  217. package/server/node_modules/google-gax/build/protos/google/api/log.proto +1 -1
  218. package/server/node_modules/google-gax/build/protos/google/api/logging.proto +1 -1
  219. package/server/node_modules/google-gax/build/protos/google/api/metric.proto +1 -1
  220. package/server/node_modules/google-gax/build/protos/google/api/monitored_resource.proto +1 -1
  221. package/server/node_modules/google-gax/build/protos/google/api/monitoring.proto +1 -1
  222. package/server/node_modules/google-gax/build/protos/google/api/policy.proto +1 -1
  223. package/server/node_modules/google-gax/build/protos/google/api/quota.proto +1 -1
  224. package/server/node_modules/google-gax/build/protos/google/api/resource.proto +1 -1
  225. package/server/node_modules/google-gax/build/protos/google/api/routing.proto +8 -4
  226. package/server/node_modules/google-gax/build/protos/google/api/service.proto +2 -3
  227. package/server/node_modules/google-gax/build/protos/google/api/source_info.proto +1 -1
  228. package/server/node_modules/google-gax/build/protos/google/api/system_parameter.proto +1 -1
  229. package/server/node_modules/google-gax/build/protos/google/api/usage.proto +7 -27
  230. package/server/node_modules/google-gax/build/protos/google/api/visibility.proto +1 -1
  231. package/server/node_modules/google-gax/build/protos/google/longrunning/operations.proto +20 -1
  232. package/server/node_modules/google-gax/build/protos/google/protobuf/any.proto +52 -108
  233. package/server/node_modules/google-gax/build/protos/google/protobuf/compiler/ruby/ruby_generated_code.proto +2 -0
  234. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_features.proto +21 -1
  235. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_file_options.proto +24 -0
  236. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_options.proto +15 -0
  237. package/server/node_modules/google-gax/build/protos/google/protobuf/descriptor.proto +118 -30
  238. package/server/node_modules/google-gax/build/protos/google/protobuf/field_mask.proto +16 -18
  239. package/server/node_modules/google-gax/build/protos/google/protobuf/internal_options.proto +8 -1
  240. package/server/node_modules/google-gax/build/protos/google/protobuf/json/json_enumval_custom_string.proto +26 -0
  241. package/server/node_modules/google-gax/build/protos/google/protobuf/json_enumvalue_options.proto +29 -0
  242. package/server/node_modules/google-gax/build/protos/google/protobuf/json_options.proto +14 -0
  243. package/server/node_modules/google-gax/build/protos/google/protobuf/struct.proto +38 -22
  244. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/forced_micro_string.proto +3 -0
  245. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/repeated_field_proxy_import_message.proto +14 -0
  246. package/server/node_modules/google-gax/build/protos/google/protobuf/timestamp.proto +9 -8
  247. package/server/node_modules/google-gax/build/protos/google/protobuf/util/json_format_proto3.proto +18 -0
  248. package/server/node_modules/google-gax/build/protos/google/rpc/code.proto +1 -1
  249. package/server/node_modules/google-gax/build/protos/google/rpc/context/attribute_context.proto +7 -2
  250. package/server/node_modules/google-gax/build/protos/google/rpc/context/audit_context.proto +1 -1
  251. package/server/node_modules/google-gax/build/protos/google/rpc/error_details.proto +5 -5
  252. package/server/node_modules/google-gax/build/protos/google/rpc/http.proto +1 -1
  253. package/server/node_modules/google-gax/build/protos/google/rpc/status.proto +1 -2
  254. package/server/node_modules/google-gax/build/protos/google/type/calendar_period.proto +1 -1
  255. package/server/node_modules/google-gax/build/protos/google/type/color.proto +9 -10
  256. package/server/node_modules/google-gax/build/protos/google/type/date.proto +11 -9
  257. package/server/node_modules/google-gax/build/protos/google/type/datetime.proto +17 -17
  258. package/server/node_modules/google-gax/build/protos/google/type/dayofweek.proto +1 -1
  259. package/server/node_modules/google-gax/build/protos/google/type/decimal.proto +11 -13
  260. package/server/node_modules/google-gax/build/protos/google/type/expr.proto +1 -1
  261. package/server/node_modules/google-gax/build/protos/google/type/fraction.proto +1 -1
  262. package/server/node_modules/google-gax/build/protos/google/type/interval.proto +1 -2
  263. package/server/node_modules/google-gax/build/protos/google/type/latlng.proto +4 -5
  264. package/server/node_modules/google-gax/build/protos/google/type/localized_text.proto +3 -3
  265. package/server/node_modules/google-gax/build/protos/google/type/money.proto +1 -2
  266. package/server/node_modules/google-gax/build/protos/google/type/month.proto +1 -1
  267. package/server/node_modules/google-gax/build/protos/google/type/phone_number.proto +20 -15
  268. package/server/node_modules/google-gax/build/protos/google/type/postal_address.proto +39 -39
  269. package/server/node_modules/google-gax/build/protos/google/type/quaternion.proto +4 -4
  270. package/server/node_modules/google-gax/build/protos/google/type/timeofday.proto +11 -8
  271. package/server/node_modules/google-gax/package.json +5 -5
  272. package/server/node_modules/retry-request/package.json +4 -4
  273. package/server/node_modules/teeny-request/package.json +5 -5
  274. package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
  275. package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  276. package/server/node_modules/undici/lib/core/request.js +12 -1
  277. package/server/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
  278. package/server/node_modules/undici/lib/global.js +36 -16
  279. package/server/node_modules/undici/lib/handler/cache-handler.js +236 -116
  280. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
  281. package/server/node_modules/undici/lib/handler/retry-handler.js +24 -0
  282. package/server/node_modules/undici/lib/interceptor/cache.js +152 -62
  283. package/server/node_modules/undici/lib/interceptor/decompress.js +5 -2
  284. package/server/node_modules/undici/lib/util/cache.js +328 -66
  285. package/server/node_modules/undici/lib/util/date.js +23 -6
  286. package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
  287. package/server/node_modules/undici/package.json +1 -1
  288. package/server/{orphan-proposed-reconciler-BvKkWMJQ.js → orphan-proposed-reconciler-B6vJHxtX.js} +242 -34
  289. package/server/{orphan-proposed-reconciler-CTSGcK8p.js → orphan-proposed-reconciler-DcgTPPFY.js} +1 -1
  290. package/server/package-lock.json +31 -31
  291. package/server/package.json +1 -1
  292. package/server/{pan-dir-B0c3w0Ya.js → pan-dir-DMzF5wne.js} +25 -11
  293. package/server/{paths-D-xWGHdh.js → paths-sJBSb7Ul.js} +2 -2
  294. package/server/pending-lifecycle-claim-DilzGfgk.js +110 -0
  295. package/server/persistent-logger-H_VjuOu7.js +57 -0
  296. package/server/{pickup-DUCLWrJY.js → pickup-DWhqzliO.js} +4 -3
  297. package/server/pipeline-membership-C88VBnhJ.js +3 -0
  298. package/server/pipeline-membership-D9SBvItj.js +57 -0
  299. package/server/pipeline-membership-gather-4eR-7Tqy.js +3 -0
  300. package/server/pipeline-membership-gather-CeVGnNJ2.js +593 -0
  301. package/server/{pipeline-notifier-BXkJzDC4.js → pipeline-notifier-D0ALV6Nw.js} +2 -2
  302. package/server/{pipeline-notifier-BJr8gQX6.js → pipeline-notifier-DT6xLFao.js} +1 -1
  303. package/server/post-merge-lifecycle-worker-8HIeS_J6.js +50 -0
  304. package/server/{project-pipelines-C0MWUeCU.js → project-pipelines-9SKt2bEc.js} +2 -2
  305. package/server/{project-repos-B6GycDh9.js → project-repos-B5pIphKg.js} +7 -3
  306. package/server/project-repos-DPjOdfPa.js +3 -0
  307. package/server/projects-_n3Zui6K.js +3 -0
  308. package/server/{prompts-DxzFXuLl.js → prompts-CgzMBvQF.js} +2 -2
  309. package/server/{providers-u4Ga0jOr.js → providers-BI1mOBQ4.js} +1 -1
  310. package/server/{providers-qQAwGQDW.js → providers-BJQSnAAp.js} +7 -7
  311. package/server/public/assets/{chunk-BO2N2NFS-BamJdinX.js → chunk-BO2N2NFS-D_pGACYN.js} +4 -4
  312. package/server/public/assets/{diagram-OG6HWLK6-DfOB8-w4.js → diagram-OG6HWLK6-BO6fe3hH.js} +1 -1
  313. package/server/public/assets/{dist-ByIuzMQW.js → dist-5zingMiA.js} +3 -3
  314. package/server/public/assets/{dist-D7zYSEA6.js → dist-CVxhbI2E.js} +1 -1
  315. package/server/public/assets/{ganttDiagram-6RSMTGT7-EdmRyXL3.js → ganttDiagram-6RSMTGT7-Bgj4A7kp.js} +1 -1
  316. package/server/public/assets/{highlighted-body-OFNGDK62-MerOfTX8.js → highlighted-body-OFNGDK62-DNPK7_cm.js} +1 -1
  317. package/server/public/assets/index-DEpY-D1O.js +807 -0
  318. package/server/public/assets/index-Ddkcz3WT.css +1 -0
  319. package/server/public/assets/{linear-BBbArIcK.js → linear-BB0jQT16.js} +1 -1
  320. package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +1 -0
  321. package/server/public/assets/{pieDiagram-4H26LBE5-BKIddiJN.js → pieDiagram-4H26LBE5-DeGIzzpZ.js} +1 -1
  322. package/server/public/assets/{prod-B8vYiu52.js → prod-XBLvikex.js} +4 -4
  323. package/server/public/assets/{quadrantDiagram-W4KKPZXB-D6RtoULk.js → quadrantDiagram-W4KKPZXB-BV9SLeWz.js} +1 -1
  324. package/server/public/assets/{sankeyDiagram-5OEKKPKP-CLrCedZX.js → sankeyDiagram-5OEKKPKP-Dwja0gj8.js} +1 -1
  325. package/server/public/assets/{xychartDiagram-2RQKCTM6-hznR8DYl.js → xychartDiagram-2RQKCTM6-DCB4qvfw.js} +1 -1
  326. package/server/public/index.html +2 -2
  327. package/server/{pull-requests-_lHueOHW.js → pull-requests-7BgLDsIo.js} +19 -10
  328. package/server/{pull-requests-7N8WKseP.js → pull-requests-Dq0y6IxE.js} +1 -1
  329. package/server/{queries-CjNIf-Ub.js → queries-C-MUZaIy.js} +824 -192
  330. package/server/{rally-CyWT_lNO.js → rally-CPysR4T_.js} +3 -3
  331. package/server/rally-D_VW4bJv.js +3 -0
  332. package/server/{rally-api-C8e_1JRi.js → rally-api-8Ptlp2os.js} +2 -2
  333. package/server/{rally-api-ClOSd-Tt.js → rally-api-CgosKdKL.js} +1 -1
  334. package/server/{rally-client-sgtVqzNU.js → rally-client-CCX0hADj.js} +1 -1
  335. package/server/{rally-client-lc-nokqr.js → rally-client-iYMHWQD7.js} +5 -5
  336. package/server/{reap-terminal-sessions-7KeHv1R1.js → reap-terminal-sessions-4Xg9NGA8.js} +2 -2
  337. package/server/{reap-terminal-sessions-BtHPo6Xc.js → reap-terminal-sessions-Qf-9LVQc.js} +2 -2
  338. package/server/{rebuild-stack-lwtsW0GO.js → rebuild-stack-CMdgaylx.js} +16 -7
  339. package/server/{rebuild-stack-CFvcBHsS.js → rebuild-stack-DqcOVmJO.js} +2 -2
  340. package/server/{reconstruct-cache-C3Ui7ojV.js → reconstruct-cache-CMZJ_Vjq.js} +9 -7
  341. package/server/record-BTwWhtBb.js +3 -0
  342. package/server/{record-update-dE1Aw83j.js → record-update-DaOKS7Wb.js} +124 -157
  343. package/server/record-update-DhI7eySG.js +3 -0
  344. package/server/{recovery-trip-BvRWfUXM.js → recovery-trip-DDH-02ng.js} +2 -2
  345. package/server/{release-engine-Cx48W7z8.js → release-engine-B2X9AfFC.js} +5 -5
  346. package/server/{release-set-CQfuN9-v.js → release-set-G4XKyQ8K.js} +3 -3
  347. package/server/{remote-C_2hasl7.js → remote-BXarMvqf.js} +3 -3
  348. package/server/{remote-ChgimyYa.js → remote-CUhyqjXk.js} +3 -3
  349. package/server/{remote-agents-By1ige5O.js → remote-agents-Bba-MgSA.js} +311 -48
  350. package/server/{remote-agents-CA3Ihlxj.js → remote-agents-CLZB3Coc.js} +2 -2
  351. package/server/{remote-completion-fVe9e_3u.js → remote-completion-CwAp79EC.js} +13 -13
  352. package/server/resume-mOREjlYu.js +3 -0
  353. package/server/{review-agent-CIGOQYBD.js → review-agent--pOptAEV.js} +65 -50
  354. package/server/{review-agent-DNboMyW4.js → review-agent-BTCNkq2h.js} +1 -1
  355. package/server/{review-artifacts-nRDPuMxd.js → review-artifacts-BNmw8dWE.js} +7 -6
  356. package/server/{review-context-2uj-YQ8J.js → review-context-DFxYOOJW.js} +9 -9
  357. package/server/{in-flight-guard-CAAkqPLu.js → review-convoy-liveness-BgU_1jJf.js} +3 -44
  358. package/server/review-status-CGvlA4o_.js +7737 -0
  359. package/server/review-status-Dma9SFaN.js +3 -0
  360. package/server/review-status-emit-DURrmGYX.js +50 -0
  361. package/server/{review-status-enrichment-Dci-ZwEt.js → review-status-enrichment-8NiNXi5W.js} +4 -4
  362. package/server/review-status-source-BLx_1siH.js +3 -0
  363. package/server/{review-status-source-CxuEjLGg.js → review-status-source-DIk1JSow.js} +24 -3
  364. package/server/{review-status-sync-BTOpxtTC.js → review-status-sync-0GxOqeqF.js} +11 -6
  365. package/server/{review-status-sync-DSDK3OMy.js → review-status-sync-muT-EBp2.js} +1 -1
  366. package/server/{review-verdict-feedback-CTd4QMBu.js → review-verdict-feedback-HwF6ODFy.js} +1 -1
  367. package/server/{review-verdict-feedback-CCjVA7Uk.js → review-verdict-feedback-xJNdqBnX.js} +65 -11
  368. package/server/{rollup-FGsKki9R.js → rollup-BQaol5TX.js} +8 -8
  369. package/server/{rollup-BKQC7jp4.js → rollup-BR4t_wck.js} +1 -1
  370. package/server/{scanner-CnqEZeDy.js → scanner-C-D2cFdX.js} +8 -7
  371. package/server/{sequence-io-D909zgeH.js → sequence-io-Bmf1EZM5.js} +4 -4
  372. package/server/{sequencer-agent-CzkcK6P5.js → sequencer-agent-CigMyKh2.js} +7 -6
  373. package/server/server.js +2005 -614
  374. package/server/{service-CLeAoU6G.js → service-CD0DvFvD.js} +114 -68
  375. package/server/{session-fork-CHI1XvL9.js → session-fork-B6cQ5eya.js} +2 -2
  376. package/server/{session-history-BT3IvqhC.js → session-history-3ON_IJjm.js} +7 -55
  377. package/server/settings-CVmWiJ-r.js +2 -0
  378. package/server/{settings-C0zgxOGf.js → settings-PilbFZAM.js} +3 -2
  379. package/server/{settings-BTMvpNFU.js → settings-VN0qOh4U.js} +3 -3
  380. package/server/{shadow-engineering-BJfgm-hX.js → shadow-engineering-DXvx77oE.js} +3 -3
  381. package/server/{shadow-state-7a-524T8.js → shadow-state-BBk_zacw.js} +2 -2
  382. package/server/{shadow-state-DnDyjujH.js → shadow-state-CZBp7pwq.js} +1 -1
  383. package/server/{shadow-utils-Db3oroFG.js → shadow-utils-DdZ05AJS.js} +2 -2
  384. package/server/{ship-log-D9MlVzYU.js → ship-log-7kJfjUX2.js} +1 -1
  385. package/server/{smart-compaction-CV2ukKND.js → smart-compaction-8fA5k5XN.js} +1 -1
  386. package/server/{smart-compaction-KCYScAU1.js → smart-compaction-ByhL9cRS.js} +8 -7
  387. package/server/{spawn-planning-session-DKpdFyOC.js → spawn-planning-session-pcF-YeFE.js} +38 -50
  388. package/server/spawn-planning-session-vLUJoFjy.js +3 -0
  389. package/server/{specialist-completion-Ky9wCDpb.js → specialist-completion-B07XjWD2.js} +1 -1
  390. package/server/{specialist-context-Bn3dCGS2.js → specialist-context-DJ-zFyL3.js} +5 -5
  391. package/server/{specialist-handoff-logger-CMEwYxa2.js → specialist-handoff-logger-aKSxbIgD.js} +2 -2
  392. package/server/{specialist-logs-C5p8G7tx.js → specialist-logs-Dae-n52_.js} +3 -3
  393. package/server/{specialists-CC4r-c2s.js → specialists-6PWdtWcg.js} +1177 -311
  394. package/server/{specialists-DM6bWjsi.js → specialists-Bz-wFT7R.js} +1 -1
  395. package/server/{specialists-jiuuyVkp.js → specialists-DUiExaxb.js} +18 -18
  396. package/server/{specialists-CShuVGWT.js → specialists-KR3pKulN.js} +1 -1
  397. package/server/specs--enInima.js +3 -0
  398. package/server/src-B948bGVR.js +11452 -0
  399. package/server/{src-CXmtj0im.js → src-rac0Mepv.js} +6 -6
  400. package/server/{src-CdmnTM2m.js → src-vHy2-oCv.js} +3 -3
  401. package/server/{stack-health-Bn3o8FBX.js → stack-health-BikqHSjn.js} +1 -1
  402. package/server/{stack-health-DxSdG9cW.js → stack-health-DqLTiEu4.js} +7 -5
  403. package/server/{stale-task-claims-KJKxxiiQ.js → stale-task-claims-Cab_Fo_Z.js} +5 -4
  404. package/server/{staleness-DPm7ClwA.js → staleness-C-a5rBxF.js} +1 -1
  405. package/server/{staleness-CT34nwr9.js → staleness-CGTZyp6V.js} +1 -1
  406. package/server/{state-home-Cn_Qu8IX.js → state-home-722Dkx92.js} +2 -2
  407. package/server/{state-mapping-BL_-3Yt8.js → state-mapping-CybR81Uf.js} +1 -1
  408. package/server/{state-migrate-BGg2ZaOt.js → state-migrate-2u8wIpoL.js} +4 -4
  409. package/server/{stuck-remediation-DYuPRYYw.js → stuck-remediation-CC6q3eqQ.js} +84 -26
  410. package/server/{stuck-remediation-s9_2qfi6.js → stuck-remediation-r1TJu68G.js} +1 -1
  411. package/server/{substrate-bug-weights-service-B-FwCs5V.js → substrate-bug-weights-service-CzIyyWFT.js} +3 -3
  412. package/server/{summary-fork-DpcxN9tf.js → summary-fork-BqgmgPDt.js} +2 -2
  413. package/server/{summary-fork-D1RAk9rJ.js → summary-fork-Df2WFijM.js} +8 -8
  414. package/server/supervisor/{injection-budget-Csw5tqfJ.js → injection-budget-Cg_KIb3o.js} +1 -1
  415. package/server/supervisor/{paths-DehGY2Fj.js → paths-BBOnCYlO.js} +10 -2
  416. package/server/supervisor/pty-supervisor.js +50 -4
  417. package/server/supervisor/{pty-token-x-ea28Us.js → pty-token-BbjwEUUM.js} +3 -3
  418. package/server/supervisor-B4anCCSm.js +2 -0
  419. package/server/{supervisor-wM4ooB5O.js → supervisor-BxqSpjcN.js} +3 -3
  420. package/server/{swarm-readiness-DlP_UjHq.js → swarm-readiness-DfFxa9-n.js} +3 -3
  421. package/server/{system-prerequisites-DUDj1YHf.js → system-prerequisites-ICLSkhhZ.js} +2 -2
  422. package/server/{teardown-workspace-DeTTImn-.js → teardown-workspace-DRdi_CPa.js} +15 -16
  423. package/server/{test-agent-queue-MbxX5vqq.js → test-agent-queue-A_-p-i0I.js} +8 -7
  424. package/server/{test-verdict-gscuksPv.js → test-verdict-BHgTAwIG.js} +1 -1
  425. package/server/{test-verdict-bWYBtqBg.js → test-verdict-C4i9aqEP.js} +1 -1
  426. package/server/{tldr-daemon-BYFkts95.js → tldr-daemon-CvWXBhX1.js} +1 -1
  427. package/server/{tldr-daemon-C-69c3OI.js → tldr-daemon-wvsU6bKv.js} +2 -2
  428. package/server/{tmux-R7N7y-Mh.js → tmux-CfDHob9M.js} +174 -4
  429. package/server/{tmux-B6z7h_vZ.js → tmux-Ctk6RV5l.js} +1 -1
  430. package/server/{token-BK6t8BIT.js → token-DrxwytsZ.js} +2 -2
  431. package/server/{token-util-DxXu-vd1.js → token-util-B48BlCba.js} +1 -1
  432. package/server/token-util-D411CAq9.js +3 -0
  433. package/server/{tracker-config-G6latr8C.js → tracker-config-BcPMElRB.js} +2 -2
  434. package/server/{tracker-utils-DHv5pSDT.js → tracker-utils-CJ6BHjcD.js} +3 -3
  435. package/server/{traefik-connect-Df2uXPsQ.js → traefik-connect-DZ6nMYMj.js} +1 -1
  436. package/server/{tunnel-DGdUkGoZ.js → tunnel-Bp-dRHZz.js} +1 -1
  437. package/server/{tunnel-CDVKJpRv.js → tunnel-DUbUPElU.js} +3 -3
  438. package/server/{typed-errors-BHhE85Ul.js → typed-errors-CKeoDdU3.js} +1 -1
  439. package/server/{typed-errors-2BTMxkZq.js → typed-errors-DyjseiB6.js} +1 -1
  440. package/server/{types-hraoaQIp.js → types-Cm5ASJbq.js} +1 -1
  441. package/server/{types-5M0lupud.js → types-Di8wdakq.js} +1 -1
  442. package/server/uat-promote-verification-CoJuh7XO.js +92 -0
  443. package/server/uat-train-4Q0k06CQ.js +0 -0
  444. package/server/uat-train-Dewoatps.js +2 -0
  445. package/server/{validate-IfDGkaVR.js → validate-B0C8p66t.js} +8 -6
  446. package/server/{validation-Dw1pzDzr.js → validation-B_kIRfNe.js} +4 -4
  447. package/server/{validation-CC9OPqJZ.js → validation-hVOwQk8T.js} +1 -1
  448. package/server/{verification-artifact-B3itKTxu.js → verification-artifact-BxlxTiYK.js} +1 -1
  449. package/server/{verification-artifact-TVFSz_q1.js → verification-artifact-D70AtckY.js} +1 -1
  450. package/server/{verification-runner-BW4HOKAz.js → verification-runner-Bc3cJvpC.js} +1 -1
  451. package/server/{verification-runner-CkgX6EtI.js → verification-runner-KZTz6u72.js} +40 -18
  452. package/server/{vtt-parser-DYPbKcIJ.js → vtt-parser-CE_i3Bcw.js} +1 -1
  453. package/server/{work-agent-prompt-Du8Vh2aJ.js → work-agent-prompt-ByrPAzOy.js} +20 -9
  454. package/server/{workflows-mbQzh6mQ.js → workflows-D0vP1WrK.js} +252 -99
  455. package/server/workflows-DtDX08ed.js +2 -0
  456. package/server/{workspace--8tnhDI0.js → workspace-COWvdibH.js} +1 -1
  457. package/server/{workspace-BPUws1-_.js → workspace-DQkRPLlQ.js} +3 -3
  458. package/server/workspace-anchor-drift-DXYIAHzr.js +224 -0
  459. package/server/workspace-anchor-drift-pwz23TI1.js +3 -0
  460. package/server/{workspace-config-CIVWZOQr.js → workspace-config-BdZM4PvZ.js} +1 -1
  461. package/server/{workspace-manager-CBhNdzE4.js → workspace-manager-BPgTrG66.js} +157 -118
  462. package/server/workspace-manager-C1F3XsnS.js +3 -0
  463. package/server/{workspace-metadata-BzHnwwX4.js → workspace-metadata-CdjzAP8x.js} +1 -1
  464. package/server/{workspace-metadata-_WygnyoX.js → workspace-metadata-DkO_iTLo.js} +2 -2
  465. package/server/{workspaces-Do_9J0LQ.js → workspaces-CRBJikLp.js} +749 -299
  466. package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
  467. package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
  468. package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
  469. package/sync-sources/skills/pan-close/SKILL.md +5 -3
  470. package/sync-sources/skills/pan-merge/SKILL.md +7 -5
  471. package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
  472. package/sync-sources/skills/pan-release/SKILL.md +57 -0
  473. package/sync-sources/skills/pan-reload/SKILL.md +3 -3
  474. package/sync-sources/skills/pan-restart/SKILL.md +5 -4
  475. package/sync-sources/skills/pan-review/SKILL.md +7 -1
  476. package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
  477. package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
  478. package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
  479. package/server/activity-logger-OEUBdfZ8.js +0 -3
  480. package/server/agent-state-Bc3tzUC8.js +0 -3
  481. package/server/agent-state-service-D5UGKIJL.js +0 -2
  482. package/server/agents-wi9NWzs2.js +0 -3
  483. package/server/archive-planning-BZDgzoEj.js +0 -3
  484. package/server/cli-B86rejVV.js +0 -3
  485. package/server/conflict-gate-BhAY7TUd.js +0 -3
  486. package/server/conversation-service-BLd3MYsG.js +0 -3
  487. package/server/deacon-kiQrb4ZT.js +0 -4
  488. package/server/deacon-swarm-C-GwfjJy.js +0 -2
  489. package/server/deploy-window-DkZraDyj.js +0 -3
  490. package/server/dist-Bzy0y69j.js +0 -3
  491. package/server/dod-C6n9RV3G.js +0 -66
  492. package/server/flywheel-merge-order-UU0tiUld.js +0 -245
  493. package/server/flywheel-merge-order-UUcsCDb6.js +0 -2
  494. package/server/forge-CNFnyqps.js +0 -270
  495. package/server/forge-DXnS_YFH.js +0 -2
  496. package/server/git-utils-D0_yhCgF.js +0 -3
  497. package/server/github-pr-lookup-D16NGsSO.js +0 -44
  498. package/server/hume-ccTf4wTX.js +0 -3
  499. package/server/inspect-agent-Brtz0URj.js +0 -2
  500. package/server/label-reconciler-B4iOAjlC.js +0 -113
  501. package/server/launcher-generator-BBWG_SiS.js +0 -473
  502. package/server/merge-ops-CR44oU9-.js +0 -2
  503. package/server/merge-set-bUqbm3yc.js +0 -3
  504. package/server/merge-sync-BJYeOODr.js +0 -3
  505. package/server/merge-verification-BkaOqPsw.js +0 -124
  506. package/server/pipeline-membership-mY3GprlK.js +0 -420
  507. package/server/project-repos-DXKQsc_m.js +0 -3
  508. package/server/projects-vjjcmiN8.js +0 -3
  509. package/server/public/assets/index-CWeMerGO.js +0 -804
  510. package/server/public/assets/index-CenuJ3Cw.css +0 -1
  511. package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +0 -1
  512. package/server/rally-zhhtXuDP.js +0 -3
  513. package/server/record-CN0pj4_5.js +0 -3
  514. package/server/record-update-bLJxAXH4.js +0 -3
  515. package/server/resume-BFv1PGpA.js +0 -3
  516. package/server/review-status-btEYlaxA.js +0 -3
  517. package/server/review-status-kZj_KyCk.js +0 -1470
  518. package/server/settings-66A6uvIA.js +0 -2
  519. package/server/spawn-planning-session-qUC2VWu3.js +0 -2
  520. package/server/specs-C8Wsn2XO.js +0 -3
  521. package/server/src-DtcUOZCq.js +0 -4826
  522. package/server/supervisor-FTJAIsAK.js +0 -2
  523. package/server/token-util-DuPuNriz.js +0 -3
  524. package/server/tracker-utils-B4ylXZQK.js +0 -3
  525. package/server/uat-train-B05BWkp-.js +0 -2
  526. package/server/uat-train-DDSrSoV1.js +0 -2152
  527. package/server/workflows-BQu4RFQ-.js +0 -2
  528. package/server/workspace-manager-CWT55qeI.js +0 -3
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { fr as TrackerError, mr as init_errors } from "./config-yaml-DySPNmKN.js";
3
- import { a as TrackerAuthError, n as init_rally_api, o as init_interface, r as IssueNotFoundError, t as RallyRestApi } from "./rally-api-C8e_1JRi.js";
2
+ import { Fr as init_errors, Nr as TrackerError } from "./config-yaml-CxdwhAIA.js";
3
+ import { a as TrackerAuthError, n as init_rally_api, o as init_interface, r as IssueNotFoundError, t as RallyRestApi } from "./rally-api-8Ptlp2os.js";
4
4
  import { Effect } from "effect";
5
5
  //#region ../../lib/tracker/rally.ts
6
6
  /**
@@ -504,4 +504,4 @@ var init_rally = __esmMin((() => {
504
504
  //#endregion
505
505
  export { init_rally as n, RallyTracker as t };
506
506
 
507
- //# sourceMappingURL=rally-CyWT_lNO.js.map
507
+ //# sourceMappingURL=rally-CPysR4T_.js.map
@@ -0,0 +1,3 @@
1
+ import { n as init_rally, t as RallyTracker } from "./rally-CPysR4T_.js";
2
+ init_rally();
3
+ export { RallyTracker };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { fr as TrackerError, mr as init_errors } from "./config-yaml-DySPNmKN.js";
2
+ import { Fr as init_errors, Nr as TrackerError } from "./config-yaml-CxdwhAIA.js";
3
3
  import { Data, Effect } from "effect";
4
4
  //#region ../../lib/tracker/interface.ts
5
5
  /**
@@ -162,4 +162,4 @@ var init_rally_api = __esmMin((() => {
162
162
  //#endregion
163
163
  export { TrackerAuthError as a, NotImplementedError as i, init_rally_api as n, init_interface as o, IssueNotFoundError as r, RallyRestApi as t };
164
164
 
165
- //# sourceMappingURL=rally-api-C8e_1JRi.js.map
165
+ //# sourceMappingURL=rally-api-8Ptlp2os.js.map
@@ -1,3 +1,3 @@
1
- import { n as init_rally_api, t as RallyRestApi } from "./rally-api-C8e_1JRi.js";
1
+ import { n as init_rally_api, t as RallyRestApi } from "./rally-api-8Ptlp2os.js";
2
2
  init_rally_api();
3
3
  export { RallyRestApi };
@@ -1,3 +1,3 @@
1
- import { i as init_rally_client, n as RallyClientLive, r as RallyClientOptionalLive, t as RallyClient } from "./rally-client-lc-nokqr.js";
1
+ import { i as init_rally_client, n as RallyClientLive, r as RallyClientOptionalLive, t as RallyClient } from "./rally-client-iYMHWQD7.js";
2
2
  init_rally_client();
3
3
  export { RallyClient, RallyClientLive, RallyClientOptionalLive };
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { a as init_tracker_config, r as getRallyConfig } from "./tracker-config-G6latr8C.js";
3
- import { a as RateLimited, c as TrackerNotConfigured, d as init_typed_errors, r as IssueNotFound, s as TrackerApiError } from "./typed-errors-2BTMxkZq.js";
2
+ import { a as init_tracker_config, r as getRallyConfig } from "./tracker-config-BcPMElRB.js";
3
+ import { a as RateLimited, c as TrackerNotConfigured, d as init_typed_errors, r as IssueNotFound, s as TrackerApiError } from "./typed-errors-DyjseiB6.js";
4
4
  import { Context, Effect, Layer } from "effect";
5
5
  //#region services/rally-client.ts
6
6
  /**
@@ -46,7 +46,7 @@ function makeRallyClientImpl(config) {
46
46
  let tracker = null;
47
47
  async function getTracker() {
48
48
  if (!tracker) {
49
- const { RallyTracker } = await import("./rally-zhhtXuDP.js");
49
+ const { RallyTracker } = await import("./rally-D_VW4bJv.js");
50
50
  tracker = new RallyTracker({
51
51
  apiKey: config.apiKey,
52
52
  server: config.server,
@@ -106,7 +106,7 @@ var init_rally_client = __esmMin((() => {
106
106
  RallyClientLive = Layer.effect(RallyClient, Effect.gen(function* () {
107
107
  const config = getRallyConfig();
108
108
  if (!config) return yield* Effect.fail(new TrackerNotConfigured({ tracker: "rally" }));
109
- const { RallyTracker } = yield* Effect.promise(() => import("./rally-zhhtXuDP.js"));
109
+ const { RallyTracker } = yield* Effect.promise(() => import("./rally-D_VW4bJv.js"));
110
110
  const tracker = new RallyTracker({
111
111
  apiKey: config.apiKey,
112
112
  server: config.server,
@@ -158,4 +158,4 @@ var init_rally_client = __esmMin((() => {
158
158
  //#endregion
159
159
  export { init_rally_client as i, RallyClientLive as n, RallyClientOptionalLive as r, RallyClient as t };
160
160
 
161
- //# sourceMappingURL=rally-client-lc-nokqr.js.map
161
+ //# sourceMappingURL=rally-client-iYMHWQD7.js.map
@@ -1,4 +1,4 @@
1
- import { r as isRoleTerminal } from "./review-status-source-CxuEjLGg.js";
2
- import { i as selectAwaitingTestWorkSessions, o as selectMergedWorkSessions, s as selectNonMergedTerminalAdvancingSessions, t as init_reap_terminal_sessions } from "./reap-terminal-sessions-BtHPo6Xc.js";
1
+ import { r as isRoleTerminal } from "./review-status-source-DIk1JSow.js";
2
+ import { i as selectAwaitingTestWorkSessions, o as selectMergedWorkSessions, s as selectNonMergedTerminalAdvancingSessions, t as init_reap_terminal_sessions } from "./reap-terminal-sessions-Qf-9LVQc.js";
3
3
  init_reap_terminal_sessions();
4
4
  export { isRoleTerminal, selectAwaitingTestWorkSessions, selectMergedWorkSessions, selectNonMergedTerminalAdvancingSessions };
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { n as init_review_status_source, r as isRoleTerminal, t as classifyAdvancingSessionLifecycle } from "./review-status-source-CxuEjLGg.js";
2
+ import { n as init_review_status_source, r as isRoleTerminal, t as classifyAdvancingSessionLifecycle } from "./review-status-source-DIk1JSow.js";
3
3
  //#region ../../lib/cloister/reap-terminal-sessions.ts
4
4
  /**
5
5
  * Of the alive sessions, the ones belonging to `issueId`'s advancing `role`.
@@ -128,4 +128,4 @@ var init_reap_terminal_sessions = __esmMin((() => {
128
128
  //#endregion
129
129
  export { selectMergedAdvancingSessions as a, sessionsToReapForRole as c, selectAwaitingTestWorkSessions as i, isAwaitingTestReapable as n, selectMergedWorkSessions as o, isWorkReapable as r, selectNonMergedTerminalAdvancingSessions as s, init_reap_terminal_sessions as t };
130
130
 
131
- //# sourceMappingURL=reap-terminal-sessions-BtHPo6Xc.js.map
131
+ //# sourceMappingURL=reap-terminal-sessions-Qf-9LVQc.js.map
@@ -1,9 +1,9 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Tn as init_projects, yn as getProjectSync, zn as resolveProjectFromIssueSync } from "./config-yaml-DySPNmKN.js";
3
- import { d as init_docker_stats, f as recordDockerContainerLifecycleSnapshot, n as collectDockerContainerLifecycleSnapshot, o as hasIssueToken, r as composeProjectNameForWorkspace, s as init_stack_health } from "./stack-health-DxSdG9cW.js";
4
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-CDJk4pIp.js";
5
- import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-Df2uXPsQ.js";
6
- import { n as ensureDevcontainerSync, r as init_ensure_devcontainer } from "./ensure-devcontainer-DNi-ono3.js";
2
+ import { Gn as init_projects, ar as resolveProjectFromIssueSync, zn as getProjectSync } from "./config-yaml-CxdwhAIA.js";
3
+ import { d as init_docker_stats, f as recordDockerContainerLifecycleSnapshot, n as collectDockerContainerLifecycleSnapshot, o as hasIssueToken, r as composeProjectNameForWorkspace, s as init_stack_health } from "./stack-health-DqLTiEu4.js";
4
+ import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-BehTG1be.js";
5
+ import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-DZ6nMYMj.js";
6
+ import { n as ensureDevcontainerSync, r as init_ensure_devcontainer } from "./ensure-devcontainer-BAofzBPv.js";
7
7
  import { dirname, join } from "node:path";
8
8
  import { Effect } from "effect";
9
9
  import { existsSync, rmSync } from "node:fs";
@@ -100,10 +100,19 @@ var init_rebuild_stack = __esmMin((() => {
100
100
  error: `Workspace not found: ${workspacePath}`
101
101
  });
102
102
  return Effect.gen(function* () {
103
- if (yield* Effect.promise(() => isIssueClosed(issueId))) return {
103
+ const closed = yield* Effect.promise(() => isIssueClosed(issueId));
104
+ const reviewStatus = closed ? null : yield* Effect.promise(async () => {
105
+ const { resolveCanonicalReviewStatus } = await import("./review-status-source-BLx_1siH.js");
106
+ return resolveCanonicalReviewStatus(issueId);
107
+ });
108
+ if (closed || reviewStatus?.status?.mergeStatus === "merged") return {
104
109
  success: false,
105
110
  error: "Issue is terminal (closed/merged) — skipping stack rebuild"
106
111
  };
112
+ if (!reviewStatus?.available) return {
113
+ success: false,
114
+ error: "Issue terminal status is unavailable — skipping stack rebuild"
115
+ };
107
116
  const composeProjectName = composeProjectNameForWorkspace(workspacePath, normalizedIssueId);
108
117
  const existingComposeFile = findDevcontainerComposeFile(workspacePath);
109
118
  if (existingComposeFile) {
@@ -175,4 +184,4 @@ var init_rebuild_stack = __esmMin((() => {
175
184
  //#endregion
176
185
  export { rebuildWorkspaceStack as n, removeStaleIssueContainers as r, init_rebuild_stack as t };
177
186
 
178
- //# sourceMappingURL=rebuild-stack-lwtsW0GO.js.map
187
+ //# sourceMappingURL=rebuild-stack-CMdgaylx.js.map
@@ -1,4 +1,4 @@
1
- import "./stack-health-DxSdG9cW.js";
2
- import { n as rebuildWorkspaceStack, t as init_rebuild_stack } from "./rebuild-stack-lwtsW0GO.js";
1
+ import "./stack-health-DqLTiEu4.js";
2
+ import { n as rebuildWorkspaceStack, t as init_rebuild_stack } from "./rebuild-stack-CMdgaylx.js";
3
3
  init_rebuild_stack();
4
4
  export { rebuildWorkspaceStack };
@@ -1,8 +1,9 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Ft as resolveProjectForIssue, Ot as init_record, Tn as init_projects, jt as readIssueRecord, kn as listProjectsSync } from "./config-yaml-DySPNmKN.js";
3
- import { c as listAllAgentsSync, o as init_agents, r as backfillAgentsSync } from "./agents-EbI0zCJl.js";
4
- import { b as init_agents$1, i as listRunningAgents } from "./queries-CjNIf-Ub.js";
5
- import { a as gatherProjectLensSignalsForProjects, i as gatherProjectLensSignals, n as init_pipeline_membership, o as init_pipeline_membership_gather, r as resolvePipelineMembership } from "./pipeline-membership-mY3GprlK.js";
2
+ import { Gn as init_projects, Lt as readIssueRecord, Pt as init_record, Vt as resolveProjectForIssue, Yn as listProjectsSync } from "./config-yaml-CxdwhAIA.js";
3
+ import { c as listAllAgentsSync, o as init_agents, r as backfillAgentsSync } from "./agents-J5mEnekq.js";
4
+ import { b as init_agents$1, i as listRunningAgents } from "./queries-C-MUZaIy.js";
5
+ import { a as gatherProjectLensSignals, o as gatherProjectLensSignalsForProjects, s as init_pipeline_membership_gather } from "./pipeline-membership-gather-CeVGnNJ2.js";
6
+ import { n as init_pipeline_membership, r as resolvePipelineMembership } from "./pipeline-membership-D9SBvItj.js";
6
7
  import { Effect } from "effect";
7
8
  //#region ../../lib/reconstruct/enumerate-in-flight.ts
8
9
  async function enumerateInFlightIssuesFromSources(projects, gather = gatherProjectLensSignals) {
@@ -138,7 +139,7 @@ async function loadInFlightIssueIds(projects) {
138
139
  return enumerateInFlightIssuesFromSources(projects);
139
140
  }
140
141
  async function fetchPrState(issueId) {
141
- const { fetchIssuePullRequest } = await import("./pull-requests-7N8WKseP.js");
142
+ const { fetchIssuePullRequest } = await import("./pull-requests-Dq0y6IxE.js");
142
143
  const result = await fetchIssuePullRequest(issueId);
143
144
  if (!result.pr) return {
144
145
  hasPr: false,
@@ -157,7 +158,7 @@ async function fetchPrState(issueId) {
157
158
  */
158
159
  async function reconstructCache(_db, opts) {
159
160
  const verbose = opts?.verbose ?? false;
160
- const { processed: agentsRebuilt } = backfillAgentsSync({
161
+ const { processed: agentsRebuilt, markedStoppedIds = [] } = backfillAgentsSync({
161
162
  verbose,
162
163
  listLiveSessions: opts?.listLiveSessions
163
164
  });
@@ -248,6 +249,7 @@ async function reconstructCache(_db, opts) {
248
249
  return {
249
250
  issuesEnumerated: inFlight.size,
250
251
  agentsRebuilt,
252
+ markedStoppedIds,
251
253
  phaseCounts,
252
254
  agentRuntimeById,
253
255
  agentsById,
@@ -269,4 +271,4 @@ __esmMin((() => {
269
271
  }))();
270
272
  export { reconstructCache, reconstructCacheAuto };
271
273
 
272
- //# sourceMappingURL=reconstruct-cache-C3Ui7ojV.js.map
274
+ //# sourceMappingURL=reconstruct-cache-CMZJ_Vjq.js.map
@@ -0,0 +1,3 @@
1
+ import { $t as writeRecordResumePointSync, At as getIssueRecordPath, Bt as readRecordContinueViewSync, Ct as buildOwnUri, Dt as ensureIssueRecord, Et as clearRecordFeedbackSync, Ft as markRecordPipelineClosedOutSync, Gt as writeCloseOutDodGateSync, Ht as writeAgentHarnessModel, It as queueIssueRecordCommit, Jt as writeRecordDecisions, Kt as writeIssueRecordForWorkspaceSync, Lt as readIssueRecord, Mt as getIssueWorkspacePath, Nt as getProjectConfigFromWorkspacePath, Ot as ensureIssueRecordSync, Pt as init_record, Qt as writeRecordResumePoint, Rt as readIssueRecordForWorkspaceSync, St as appendSessionEntrySync, Tt as clearIssueOwner, Ut as writeAgentHarnessModelSync, Vt as resolveProjectForIssue, Wt as writeCloseOutDodGate, Xt as writeRecordHazards, Yt as writeRecordDecisionsSync, Zt as writeRecordHazardsSync, _t as RECORD_DIRNAME, an as writeStatusOverridesSync, bt as appendFeedbackEntrySync, en as writeRecordScopeDriftSync, in as writeStatusOverrideSync, jt as getIssueRecordPathForWorkspace, kt as getIssueRecordBasePath, nn as writeRecordTieredExecutionOverrideSync, qt as writeIssueRecordSync, rn as writeStatusOverride, tn as writeRecordTieredExecutionOverride, vt as RECORD_SCHEMA_VERSION, wt as claimIssueOwner, xt as appendSessionEntry, yt as appendFeedbackEntry, zt as readIssueRecordSync } from "./config-yaml-CxdwhAIA.js";
2
+ init_record();
3
+ export { RECORD_DIRNAME, RECORD_SCHEMA_VERSION, appendFeedbackEntry, appendFeedbackEntrySync, appendSessionEntry, appendSessionEntrySync, buildOwnUri, claimIssueOwner, clearIssueOwner, clearRecordFeedbackSync, ensureIssueRecord, ensureIssueRecordSync, getIssueRecordBasePath, getIssueRecordPath, getIssueRecordPathForWorkspace, getIssueWorkspacePath, getProjectConfigFromWorkspacePath, markRecordPipelineClosedOutSync, queueIssueRecordCommit, readIssueRecord, readIssueRecordForWorkspaceSync, readIssueRecordSync, readRecordContinueViewSync, resolveProjectForIssue, writeAgentHarnessModel, writeAgentHarnessModelSync, writeCloseOutDodGate, writeCloseOutDodGateSync, writeIssueRecordForWorkspaceSync, writeIssueRecordSync, writeRecordDecisions, writeRecordDecisionsSync, writeRecordHazards, writeRecordHazardsSync, writeRecordResumePoint, writeRecordResumePointSync, writeRecordScopeDriftSync, writeRecordTieredExecutionOverride, writeRecordTieredExecutionOverrideSync, writeStatusOverride, writeStatusOverrideSync, writeStatusOverridesSync };
@@ -1,151 +1,80 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { At as queueIssueRecordCommit, Br as getOverdeckHome, Dt as getProjectConfigFromWorkspacePath, Ft as resolveProjectForIssue, Ht as flushAutoCommits, Nt as readIssueRecordSync, Ot as init_record, Rt as writeIssueRecordSync, St as ensureIssueRecordSync, Tn as init_projects, Ut as init_auto_commit, Vr as init_paths, kn as listProjectsSync, nn as init_state_read_home, rn as resolveStateReadHomeSync, tn as STATE_BRANCH, wt as getIssueRecordPath } from "./config-yaml-DySPNmKN.js";
3
- import { dirname, join, relative } from "node:path";
2
+ import { At as getIssueRecordPath, Cn as resolveStateReadHomeSync, It as queueIssueRecordCommit, Nt as getProjectConfigFromWorkspacePath, Ot as ensureIssueRecordSync, Pt as init_record, Sn as init_state_read_home, Vt as resolveProjectForIssue, cn as flushAutoCommits, ln as init_auto_commit, qt as writeIssueRecordSync, xn as STATE_BRANCH, zt as readIssueRecordSync } from "./config-yaml-CxdwhAIA.js";
3
+ import { a as withRecordFsLock, n as init_fs_lock } from "./fs-lock-Bre3sGoz.js";
4
+ import { relative } from "node:path";
4
5
  import { Effect } from "effect";
5
6
  import { hostname } from "node:os";
6
- import { mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
7
7
  import { execFile } from "node:child_process";
8
8
  import { promisify } from "node:util";
9
- //#region ../../lib/pan-dir/fs-lock.ts
10
- /** Cross-process per-issue record locking (PAN-2648 CD-2). */
11
- function safeSegment(value) {
12
- return value.trim().toLowerCase().replace(/[^a-z0-9._-]+/g, "-");
13
- }
14
- function recordLockPath(project, issueId) {
15
- const configuredKey = listProjectsSync().find(({ config }) => config.path === project.path)?.key;
16
- const projectKey = safeSegment(configuredKey ?? project.name ?? project.path) || "unknown-project";
17
- return join(getOverdeckHome(), "locks", "records", projectKey, `${issueId.toUpperCase()}.lock`);
18
- }
19
- function isPidDead(pid) {
20
- if (!pid || pid <= 0 || pid === process.pid) return false;
21
- try {
22
- process.kill(pid, 0);
23
- return false;
24
- } catch (error) {
25
- return error.code === "ESRCH";
26
- }
27
- }
28
- async function sweepRecordTmpFiles(recordPath) {
29
- try {
30
- const dir = dirname(recordPath);
31
- const base = recordPath.slice(dir.length + 1);
32
- const entries = await readdir(dir);
33
- await Promise.all(entries.filter((entry) => entry.startsWith(`${base}.`) && entry.endsWith(".tmp")).map((entry) => rm(join(dir, entry), { force: true })));
34
- } catch {}
35
- }
36
- async function readOwner(lockPath) {
37
- try {
38
- const owner = JSON.parse(await readFile(join(lockPath, "owner.json"), "utf8"));
39
- return {
40
- description: `${owner.writerId ?? "unknown writer"} pid=${owner.pid ?? "unknown"} acquiredAt=${owner.acquiredAt ?? "unknown"}`,
41
- pid: owner.pid
42
- };
43
- } catch {
44
- return { description: "unknown writer" };
45
- }
9
+ //#region ../../lib/pan-dir/record-update.ts
10
+ /** The single locked read-modify-write door for per-issue records. */
11
+ function recordDurabilityBudgetMs() {
12
+ const parsed = Number(process.env.OVERDECK_RECORD_DURABILITY_BUDGET_MS);
13
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_RECORD_DURABILITY_BUDGET_MS;
46
14
  }
47
- async function acquireRecordLock(lockPath, options) {
48
- await mkdir(dirname(lockPath), {
49
- recursive: true,
50
- mode: 448
51
- });
52
- const delays = options.retryDelaysMs ?? RECORD_LOCK_RETRY_DELAYS_MS;
53
- let lastOwner = "unknown writer";
54
- for (let attempt = 0; attempt <= delays.length; attempt += 1) {
55
- try {
56
- await mkdir(lockPath, { mode: 448 });
57
- const owner = {
58
- writerId: options.writerId,
59
- pid: process.pid,
60
- acquiredAt: (/* @__PURE__ */ new Date()).toISOString()
61
- };
62
- try {
63
- await writeFile(join(lockPath, "owner.json"), JSON.stringify(owner, null, 2), "utf8");
64
- } catch (error) {
65
- try {
66
- await rm(lockPath, {
67
- recursive: true,
68
- force: true
69
- });
70
- } catch {}
71
- throw error;
72
- }
73
- await sweepRecordTmpFiles(options.recordPath);
74
- return owner;
75
- } catch (error) {
76
- if (error.code !== "EEXIST") throw error;
77
- const owner = await readOwner(lockPath);
78
- lastOwner = owner.description;
79
- if (isPidDead(owner.pid)) {
80
- await rm(lockPath, {
81
- recursive: true,
82
- force: true
83
- });
84
- continue;
85
- }
86
- }
87
- const delay = delays[attempt];
88
- if (delay === void 0) break;
89
- await new Promise((resolve) => setTimeout(resolve, delay));
15
+ async function withRecordDurabilityDeadline(issueId, promise, deadlineMs, budgetMs, onTimeout) {
16
+ const remaining = deadlineMs - Date.now();
17
+ if (remaining <= 0) {
18
+ await onTimeout?.().catch(() => void 0);
19
+ throw new RecordDurabilityTimeoutError(issueId, budgetMs);
90
20
  }
91
- throw new RecordLockError(lockPath, lastOwner);
92
- }
93
- async function releaseRecordLock(lockPath) {
94
- await rm(lockPath, {
95
- recursive: true,
96
- force: true
21
+ return await new Promise((resolve, reject) => {
22
+ let settled = false;
23
+ let timingOut = false;
24
+ const timer = setTimeout(() => {
25
+ timingOut = true;
26
+ (onTimeout?.() ?? Promise.resolve()).catch(() => void 0).finally(() => {
27
+ settled = true;
28
+ reject(new RecordDurabilityTimeoutError(issueId, budgetMs));
29
+ });
30
+ }, remaining);
31
+ timer.unref?.();
32
+ promise.then((value) => {
33
+ if (settled || timingOut) return;
34
+ settled = true;
35
+ clearTimeout(timer);
36
+ resolve(value);
37
+ }, (error) => {
38
+ if (settled || timingOut) return;
39
+ settled = true;
40
+ clearTimeout(timer);
41
+ reject(error);
42
+ });
97
43
  });
98
44
  }
99
- async function withRecordFsLock(project, issueId, options, operation) {
100
- const lockPath = recordLockPath(project, issueId);
101
- await acquireRecordLock(lockPath, options);
102
- try {
103
- return await operation();
104
- } finally {
105
- await releaseRecordLock(lockPath);
106
- }
107
- }
108
- var RECORD_LOCK_RETRY_DELAYS_MS, RecordLockError;
109
- var init_fs_lock = __esmMin((() => {
110
- init_paths();
111
- init_projects();
112
- RECORD_LOCK_RETRY_DELAYS_MS = [
113
- 5,
114
- 10,
115
- 20,
116
- 40,
117
- 80,
118
- 160,
119
- 320,
120
- 360
121
- ];
122
- RecordLockError = class extends Error {
123
- constructor(lockPath, owner) {
124
- super(`The per-issue record lock at ${lockPath} is held by ${owner}. Retry the command after that writer finishes.`);
125
- this.lockPath = lockPath;
126
- this.owner = owner;
127
- this.name = "RecordLockError";
128
- }
129
- };
130
- }));
131
- //#endregion
132
- //#region ../../lib/pan-dir/record-update.ts
133
- /** The single locked read-modify-write door for per-issue records. */
134
45
  function updateIssueRecordForWorkspace(workspacePath, issueId, mutator, options = {}) {
135
46
  return updateIssueRecord(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId, mutator, options);
136
47
  }
137
- async function git(gitRoot, args) {
48
+ /**
49
+ * Clear the terminal close-out marker so a reopened issue re-enters the pipeline (sync).
50
+ * Ordinary status writes deliberately preserve closedOut (projectPipeline in records.ts),
51
+ * so reopen needs this explicit inverse of markRecordPipelineClosedOutSync in record.ts
52
+ * (MIN-850, 2026-07-24).
53
+ */
54
+ function clearRecordPipelineClosedOutSync(project, issueId) {
55
+ const record = ensureIssueRecordSync(project, issueId);
56
+ if (!record.pipeline.closedOut && !record.pipeline.closedOutAt) return;
57
+ record.pipeline.closedOut = void 0;
58
+ record.pipeline.closedOutAt = void 0;
59
+ record.pipeline.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
60
+ queueIssueRecordCommit(project, issueId, writeIssueRecordSync(project, issueId, record));
61
+ }
62
+ async function git(gitRoot, args, options = {}) {
138
63
  return (await execFileAsync("git", args, {
139
64
  cwd: gitRoot,
140
65
  encoding: "utf8",
141
- timeout: 3e4,
66
+ timeout: options.timeoutMs ?? 3e4,
142
67
  maxBuffer: 16 * 1024 * 1024,
143
68
  env: {
144
69
  ...process.env,
145
70
  HUSKY: "0"
146
- }
71
+ },
72
+ ...options.signal ? { signal: options.signal } : {}
147
73
  })).stdout.trim();
148
74
  }
75
+ function throwIfDurabilityAborted(signal) {
76
+ if (signal?.aborted) throw new Error("Record durability operation aborted at the deadline");
77
+ }
149
78
  function gitFailureMessage(error) {
150
79
  if (error && typeof error === "object") {
151
80
  const failure = error;
@@ -156,18 +85,21 @@ function gitFailureMessage(error) {
156
85
  function isRemoteRefRaceError(message) {
157
86
  return /non-fast-forward|fetch first|stale info|cannot lock ref.*expected|failed to update ref/i.test(message);
158
87
  }
159
- async function abortRebase(gitRoot) {
88
+ async function abortRebase(gitRoot, options = {}) {
160
89
  try {
161
- await git(gitRoot, ["rebase", "--abort"]);
90
+ await git(gitRoot, ["rebase", "--abort"], {
91
+ timeoutMs: 5e3,
92
+ ...options
93
+ });
162
94
  } catch {}
163
95
  }
164
- async function replayConflictedRecord(project, issueId, mutator, gitRoot, recordPath) {
96
+ async function replayConflictedRecord(project, issueId, mutator, gitRoot, recordPath, signal) {
165
97
  const relativeRecordPath = relative(gitRoot, recordPath).replace(/\\/g, "/");
166
98
  const conflicts = (await git(gitRoot, [
167
99
  "diff",
168
100
  "--name-only",
169
101
  "--diff-filter=U"
170
- ])).split("\n").map((path) => path.trim()).filter(Boolean);
102
+ ], { signal })).split("\n").map((path) => path.trim()).filter(Boolean);
171
103
  if (conflicts.length !== 1 || conflicts[0] !== relativeRecordPath) throw new Error(`state rebase conflicted outside ${relativeRecordPath}: ${conflicts.join(", ") || "unknown conflict"}`);
172
104
  await git(gitRoot, [
173
105
  "restore",
@@ -175,43 +107,49 @@ async function replayConflictedRecord(project, issueId, mutator, gitRoot, record
175
107
  "--worktree",
176
108
  "--",
177
109
  relativeRecordPath
178
- ]);
110
+ ], { signal });
179
111
  const remoteRecord = readIssueRecordSync(project, issueId);
180
112
  if (!remoteRecord) throw new Error(`Remote ${issueId} state record is unreadable`);
181
- writeIssueRecordSync(project, issueId, await mutator(remoteRecord) ?? remoteRecord);
113
+ const result = await mutator(remoteRecord);
114
+ throwIfDurabilityAborted(signal);
115
+ writeIssueRecordSync(project, issueId, result ?? remoteRecord);
182
116
  await git(gitRoot, [
183
117
  "add",
184
118
  "--",
185
119
  relativeRecordPath
186
- ]);
120
+ ], { signal });
121
+ throwIfDurabilityAborted(signal);
187
122
  await git(gitRoot, [
188
123
  "-c",
189
124
  "core.editor=true",
190
125
  "rebase",
191
126
  "--continue"
192
- ]);
127
+ ], { signal });
193
128
  }
194
- async function restoreRetryableRecord(project, issueId, original, recordPath) {
129
+ async function restoreRetryableRecord(project, issueId, original, recordPath, signal) {
195
130
  const stateHome = resolveStateReadHomeSync(project);
196
131
  const gitRoot = stateHome.root;
197
132
  const relativeRecordPath = relative(gitRoot, recordPath).replace(/\\/g, "/");
198
- await abortRebase(gitRoot);
133
+ await abortRebase(gitRoot, { signal });
199
134
  let restored = structuredClone(original);
200
- const branch = stateHome.migrated ? STATE_BRANCH : await git(gitRoot, ["branch", "--show-current"]);
135
+ const branch = stateHome.migrated ? STATE_BRANCH : await git(gitRoot, ["branch", "--show-current"], { signal });
201
136
  try {
202
137
  await git(gitRoot, [
203
138
  "fetch",
204
139
  "origin",
205
140
  branch
206
- ]);
207
- restored = JSON.parse(await git(gitRoot, ["show", `origin/${branch}:${relativeRecordPath}`]));
208
- } catch {}
141
+ ], { signal });
142
+ restored = JSON.parse(await git(gitRoot, ["show", `origin/${branch}:${relativeRecordPath}`], { signal }));
143
+ } catch (fetchError) {
144
+ throwIfDurabilityAborted(signal);
145
+ }
146
+ throwIfDurabilityAborted(signal);
209
147
  writeIssueRecordSync(project, issueId, restored);
210
148
  await git(gitRoot, [
211
149
  "add",
212
150
  "--",
213
151
  relativeRecordPath
214
- ]);
152
+ ], { signal });
215
153
  try {
216
154
  await git(gitRoot, [
217
155
  "diff",
@@ -219,32 +157,36 @@ async function restoreRetryableRecord(project, issueId, original, recordPath) {
219
157
  "--quiet",
220
158
  "--",
221
159
  relativeRecordPath
222
- ]);
160
+ ], { signal });
223
161
  return;
224
- } catch {}
162
+ } catch (diffError) {
163
+ throwIfDurabilityAborted(signal);
164
+ }
225
165
  await git(gitRoot, [
226
166
  "commit",
227
167
  "-m",
228
168
  `chore(records): restore ${issueId} after failed state push`,
229
169
  "--",
230
170
  relativeRecordPath
231
- ]);
171
+ ], { signal });
232
172
  }
233
- async function reconcileStatePush(project, issueId, mutator, recordPath) {
173
+ async function reconcileStatePush(project, issueId, mutator, recordPath, signal) {
234
174
  const gitRoot = resolveStateReadHomeSync(project).root;
235
175
  for (let attempt = 0; attempt < MAX_STATE_PUSH_RECONCILIATIONS; attempt += 1) {
176
+ throwIfDurabilityAborted(signal);
236
177
  await git(gitRoot, [
237
178
  "fetch",
238
179
  "origin",
239
180
  STATE_BRANCH
240
- ]);
181
+ ], { signal });
241
182
  try {
242
- await git(gitRoot, ["rebase", `origin/${STATE_BRANCH}`]);
183
+ await git(gitRoot, ["rebase", `origin/${STATE_BRANCH}`], { signal });
243
184
  } catch (error) {
185
+ throwIfDurabilityAborted(signal);
244
186
  try {
245
- await replayConflictedRecord(project, issueId, mutator, gitRoot, recordPath);
187
+ await replayConflictedRecord(project, issueId, mutator, gitRoot, recordPath, signal);
246
188
  } catch (replayError) {
247
- await abortRebase(gitRoot);
189
+ await abortRebase(gitRoot, { signal });
248
190
  throw new Error(`Failed to reconcile ${issueId} state after push race: ${gitFailureMessage(replayError)}`, { cause: error });
249
191
  }
250
192
  }
@@ -253,11 +195,12 @@ async function reconcileStatePush(project, issueId, mutator, recordPath) {
253
195
  "push",
254
196
  "origin",
255
197
  STATE_BRANCH
256
- ]);
198
+ ], { signal });
257
199
  const record = readIssueRecordSync(project, issueId);
258
200
  if (!record) throw new Error(`Reconciled ${issueId} state record is unreadable`);
259
201
  return record;
260
202
  } catch (error) {
203
+ throwIfDurabilityAborted(signal);
261
204
  const message = gitFailureMessage(error);
262
205
  if (!isRemoteRefRaceError(message)) throw new Error(`Failed to push reconciled ${issueId} state: ${message}`, { cause: error });
263
206
  }
@@ -276,26 +219,43 @@ async function updateIssueRecord(project, issueId, mutator, options = {}) {
276
219
  const next = await mutator(current) ?? current;
277
220
  const path = writeIssueRecordSync(project, normalizedIssueId, next);
278
221
  if (options.autoCommit === false) return readIssueRecordSync(project, normalizedIssueId) ?? next;
222
+ const budgetMs = recordDurabilityBudgetMs();
223
+ const deadlineMs = Date.now() + budgetMs;
279
224
  try {
280
225
  const commitRoot = queueIssueRecordCommit(project, normalizedIssueId, path);
281
- const flushed = await Effect.runPromise(flushAutoCommits(commitRoot));
226
+ const flushed = await withRecordDurabilityDeadline(normalizedIssueId, Effect.runPromise(flushAutoCommits(commitRoot)), deadlineMs, budgetMs);
282
227
  if (flushed.pushed === false) {
283
- if (resolveStateReadHomeSync(project).migrated && isRemoteRefRaceError(flushed.reason ?? "")) return await reconcileStatePush(project, normalizedIssueId, mutator, path);
228
+ if (resolveStateReadHomeSync(project).migrated && isRemoteRefRaceError(flushed.reason ?? "")) {
229
+ const reconcileAbort = new AbortController();
230
+ const reconcilePromise = reconcileStatePush(project, normalizedIssueId, mutator, path, reconcileAbort.signal);
231
+ return await withRecordDurabilityDeadline(normalizedIssueId, reconcilePromise, deadlineMs, budgetMs, async () => {
232
+ reconcileAbort.abort();
233
+ await reconcilePromise.catch(() => void 0);
234
+ await abortRebase(resolveStateReadHomeSync(project).root);
235
+ });
236
+ }
284
237
  throw new Error(`Failed to push ${normalizedIssueId} state: ${flushed.reason ?? "unknown push failure"}`);
285
238
  }
286
239
  if (!flushed.committed && !["no diff", "no pending"].includes(flushed.reason ?? "")) throw new Error(`Failed to commit ${normalizedIssueId} state: ${flushed.reason ?? "unknown commit failure"}`);
287
240
  return readIssueRecordSync(project, normalizedIssueId) ?? next;
288
241
  } catch (error) {
242
+ if (error instanceof RecordDurabilityTimeoutError) throw error;
289
243
  try {
290
- await restoreRetryableRecord(project, normalizedIssueId, original, path);
244
+ const restoreAbort = new AbortController();
245
+ const restorePromise = restoreRetryableRecord(project, normalizedIssueId, original, path, restoreAbort.signal);
246
+ await withRecordDurabilityDeadline(normalizedIssueId, restorePromise, deadlineMs, budgetMs, async () => {
247
+ restoreAbort.abort();
248
+ await restorePromise.catch(() => void 0);
249
+ });
291
250
  } catch (restoreError) {
251
+ if (restoreError instanceof RecordDurabilityTimeoutError) throw restoreError;
292
252
  throw new Error(`Failed to persist ${normalizedIssueId} state and restore retryability: ${gitFailureMessage(restoreError)}`, { cause: error });
293
253
  }
294
254
  throw error;
295
255
  }
296
256
  });
297
257
  }
298
- var execFileAsync, MAX_STATE_PUSH_RECONCILIATIONS;
258
+ var execFileAsync, MAX_STATE_PUSH_RECONCILIATIONS, DEFAULT_RECORD_DURABILITY_BUDGET_MS, RecordDurabilityTimeoutError;
299
259
  var init_record_update = __esmMin((() => {
300
260
  init_state_read_home();
301
261
  init_auto_commit();
@@ -303,8 +263,15 @@ var init_record_update = __esmMin((() => {
303
263
  init_record();
304
264
  execFileAsync = promisify(execFile);
305
265
  MAX_STATE_PUSH_RECONCILIATIONS = 3;
266
+ DEFAULT_RECORD_DURABILITY_BUDGET_MS = 3e4;
267
+ RecordDurabilityTimeoutError = class extends Error {
268
+ constructor(issueId, budgetMs) {
269
+ super(`Durability wait for ${issueId} state exceeded ${budgetMs}ms; releasing the record lock. The mutation remains in the local record and the flush continues in the background; callers with a fallback (e.g. the review-verdict fallback and drain) reconcile through it, other writers must retry the write.`);
270
+ this.name = "RecordDurabilityTimeoutError";
271
+ }
272
+ };
306
273
  }));
307
274
  //#endregion
308
- export { isPidDead as a, init_fs_lock as i, updateIssueRecord as n, updateIssueRecordForWorkspace as r, init_record_update as t };
275
+ export { updateIssueRecordForWorkspace as a, updateIssueRecord as i, clearRecordPipelineClosedOutSync as n, init_record_update as r, RecordDurabilityTimeoutError as t };
309
276
 
310
- //# sourceMappingURL=record-update-dE1Aw83j.js.map
277
+ //# sourceMappingURL=record-update-DaOKS7Wb.js.map
@@ -0,0 +1,3 @@
1
+ import { i as updateIssueRecord, r as init_record_update } from "./record-update-DaOKS7Wb.js";
2
+ init_record_update();
3
+ export { updateIssueRecord };
@@ -1,4 +1,4 @@
1
- import { r as updateIssueRecordForWorkspace, t as init_record_update } from "./record-update-dE1Aw83j.js";
1
+ import { a as updateIssueRecordForWorkspace, r as init_record_update } from "./record-update-DaOKS7Wb.js";
2
2
  //#region ../../lib/cloister/recovery-trip.ts
3
3
  init_record_update();
4
4
  async function recordRecoveryFailure(workspacePath, issue, recoveryPath, obligationGeneration, threshold = 25, now = /* @__PURE__ */ new Date()) {
@@ -41,4 +41,4 @@ async function recordRecoveryFailure(workspacePath, issue, recoveryPath, obligat
41
41
  //#endregion
42
42
  export { recordRecoveryFailure as t };
43
43
 
44
- //# sourceMappingURL=recovery-trip-BvRWfUXM.js.map
44
+ //# sourceMappingURL=recovery-trip-DDH-02ng.js.map