@overdeck/desktop 0.45.23 → 0.46.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 (549) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +34 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-DOA0KgXx.js → acceptance-criteria-CCwFGICj.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-BBu6DSNm.js → advancing-selfheal-De1L-Sb4.js} +6 -6
  7. package/server/{agent-gc-BV1q_2EV.js → agent-gc-CBULruzm.js} +5 -5
  8. package/server/agent-state-VQk8fY9F.js +3 -0
  9. package/server/{agent-state-service-HoK8U4jW.js → agent-state-service-BlnSkRFA.js} +5 -5
  10. package/server/{agent-state-service-CnzFKSAQ.js → agent-state-service-hZpxIw1E.js} +1 -1
  11. package/server/agents-BKKkxKgK.js +3 -0
  12. package/server/{agents-B4Bjbkfv.js → agents-C5rWYhb6.js} +4 -4
  13. package/server/archive-planning-0FJ6Xd3b.js +2 -0
  14. package/server/{archive-planning-DYrYojxl.js → archive-planning-C0lAbNB_.js} +16 -24
  15. package/server/{artifact-index-jobs-C-xy7Z5v.js → artifact-index-jobs-ug6ZxIP5.js} +2 -2
  16. package/server/assemble-DnffNpOo.js +339 -0
  17. package/server/{backlog-auto-trigger-GtG71X8H.js → backlog-auto-trigger-Dh-i9PQf.js} +3 -3
  18. package/server/{behavior-B_-4EKF3.js → behavior-CfIg6pKp.js} +2 -2
  19. package/server/bridge-pool-patrol-CUFmjVDN.js +136 -0
  20. package/server/{briefing-freshness-DWdW7vUm.js → briefing-freshness-DHmCSLar.js} +2 -2
  21. package/server/{build-info-DgTqZkL5.js → build-info-BP160gU7.js} +1 -1
  22. package/server/{build-info-BT096lEl.js → build-info-CuFfxZxp.js} +5 -3
  23. package/server/{checkpoint-manager-DDqcGyu8.js → checkpoint-manager-DEWD82qK.js} +2 -2
  24. package/server/{checkpoint-manager-B7Bt29J0.js → checkpoint-manager-Dxh0FYsv.js} +1 -1
  25. package/server/checkpoint-worker.js +1 -1
  26. package/server/{checkpoints-C-AXLfYT.js → checkpoints-CZvbtLnr.js} +2 -2
  27. package/server/{checkpoints-CpgCjAlN.js → checkpoints-DMTgXuLG.js} +1 -1
  28. package/server/{claude-hooks-provision-C8wdRnN1.js → claude-hooks-provision-CN-xo-do.js} +1 -1
  29. package/server/{claude-hooks-provision-but-_qGY.js → claude-hooks-provision-fvy4RD2b.js} +13 -2
  30. package/server/{claude-permissions-H_5wHQZQ.js → claude-permissions-CN0cSCPp.js} +2 -2
  31. package/server/{claude-settings-overlay-CbSz0Dvb.js → claude-settings-overlay-CJn35FHQ.js} +2 -2
  32. package/server/{claude-settings-overlay-BTENVmYf.js → claude-settings-overlay-Dabi9slj.js} +1 -1
  33. package/server/cli-DmXETsw-.js +3 -0
  34. package/server/{cli-vBeXbPrq.js → cli-oCWYA1pE.js} +9 -9
  35. package/server/{cliproxy-Bgb2XCqi.js → cliproxy-C8mB3KuB.js} +2 -2
  36. package/server/{cliproxy-DW0V86F8.js → cliproxy-PGwTX_o8.js} +1 -1
  37. package/server/{close-issue-Dn_4c4G8.js → close-issue-D5MF5GqF.js} +5 -5
  38. package/server/{closed-issue-reaper-CWpY2uBw.js → closed-issue-reaper-CJ24u0Zt.js} +1 -1
  39. package/server/{closed-issue-reaper-hANY_ehE.js → closed-issue-reaper-Cltx86x5.js} +37 -16
  40. package/server/{codex-Dg7Is5yb.js → codex-BdEsUFWh.js} +1 -1
  41. package/server/{codex-TmSi-yTv.js → codex-Drlf5Xhf.js} +37 -8
  42. package/server/{codex-parser-C4gSH-IR.js → codex-parser-DpB89Vqa.js} +2 -2
  43. package/server/compaction-continuation-K2AxQX4H.js +200 -0
  44. package/server/{config-DjLOdbgT.js → config-B2IMcBxx.js} +4 -3
  45. package/server/{config-DUIhMN_T.js → config-DV-grfQc.js} +1 -1
  46. package/server/{config-CCvjQf27.js → config-Dr3pW6w6.js} +2 -2
  47. package/server/{config-yaml-DvyMuOle.js → config-yaml-CmOPzmBb.js} +290 -22
  48. package/server/{conflict-gate-CmrYpa47.js → conflict-gate-B9cN3SBi.js} +4 -4
  49. package/server/{conflict-gate-BSJkNTdp.js → conflict-gate-Dh754uyA.js} +1 -1
  50. package/server/context-layers-D6LZo3l1.js +4 -0
  51. package/server/context-layers-dR5YxHYB.js +37 -0
  52. package/server/{control-settings-aP1ANIlI.js → control-settings-C7DUehE1.js} +49 -19
  53. package/server/{conversation-compaction-CNbTLB86.js → conversation-compaction-BoqdDXWF.js} +8 -8
  54. package/server/{conversation-compaction-DiG5zWQq.js → conversation-compaction-Dj4FAKoZ.js} +1 -1
  55. package/server/{conversation-service-Du-MTNpJ.js → conversation-service-5aCnq1zR.js} +331 -20
  56. package/server/conversation-service-BCxl4f8Z.js +3 -0
  57. package/server/{conversations-DbOs1e9Q.js → conversations-BUpYsOZg.js} +5 -5
  58. package/server/{conversations-6mPANqvL.js → conversations-C34dyIb9.js} +1 -1
  59. package/server/{cost-Ca0YTWDw.js → cost-Bgcub5kW.js} +12 -2
  60. package/server/{cost-CW4WSe72.js → cost-CvxRrucd.js} +3 -3
  61. package/server/{cost-sync-C0VdGme1.js → cost-sync-Dv3LUaNW.js} +3 -3
  62. package/server/{dag-CdOjJVDT.js → dag-ombYYt4s.js} +2 -2
  63. package/server/{dangerous-git-ops-CT-IypG3.js → dangerous-git-ops-BcJPC5Rr.js} +1 -1
  64. package/server/dashboard-db-worker.js +7 -7
  65. package/server/deacon-DrXqT9LQ.js +4 -0
  66. package/server/{deacon-pRnyD5w9.js → deacon-hi9KLPLT.js} +2998 -2659
  67. package/server/{deacon-nudge-log-Bjg8U4Y9.js → deacon-nudge-log-BNBebzeL.js} +3 -3
  68. package/server/deacon-pending-lifecycle-Cpk0k7Hi.js +33 -0
  69. package/server/{deacon-swarm-DftYRDo8.js → deacon-swarm-DBxUaO-A.js} +13 -13
  70. package/server/deacon-swarm-I2JfX5Tg.js +2 -0
  71. package/server/deacon.js +14 -19
  72. package/server/dead-end-trip-CQcP70ND.js +13 -0
  73. package/server/delivery-Da0zEMY4.js +3 -0
  74. package/server/{deploy-patrol-Bjsho_ha.js → deploy-patrol-Df-Tmaq0.js} +69 -18
  75. package/server/deploy-queue-9SrhZR63.js +3 -0
  76. package/server/deploy-queue-UjKGYsDe.js +169 -0
  77. package/server/deploy-window-jOiPRHL0.js +3 -0
  78. package/server/{deploy-window-DeP_OIRk.js → deploy-window-rpqpWqHA.js} +40 -16
  79. package/server/{dev-supervisor-BpMoHlkR.js → dev-supervisor-CC46Ig8q.js} +2 -2
  80. package/server/{devcontainer-renderer-CtUgrVKW.js → devcontainer-renderer-68CSCRnu.js} +3 -3
  81. package/server/{dist-DyRx4cI7.js → dist-CJy72uEg.js} +1 -1
  82. package/server/dist-DSlxIU1H.js +3 -0
  83. package/server/{dist-src-BSoS7mkd.js → dist-src-Bik83hFi.js} +1 -1
  84. package/server/docker-BMVTSFL5.js +3 -0
  85. package/server/{docker-BK7HIcBj.js → docker-Dam7mbIB.js} +2 -2
  86. package/server/{dod-BrSfUHm0.js → dod-Dar-yheg.js} +8 -4
  87. package/server/durable-review-pipeline-CGZ5QBxh.js +17 -0
  88. package/server/durable-review-pipeline-jpgCJZFp.js +3 -0
  89. package/server/{ensure-devcontainer-DseivYEy.js → ensure-devcontainer-B057YA81.js} +4 -4
  90. package/server/{ensure-devcontainer-DRqaAkBR.js → ensure-devcontainer-C98V8yW-.js} +1 -1
  91. package/server/{esm-shims-CbI3BVkl.js → esm-shims-Br9BPdkR.js} +1 -1
  92. package/server/{event-store-Cr5PQwFC.js → event-store-ELqkVOn0.js} +1 -1
  93. package/server/{event-store-tdiY5eDZ.js → event-store-zY5MJHgF.js} +23 -4
  94. package/server/{events-CvvGK6LT.js → events-D6pyqhzM.js} +1 -1
  95. package/server/{events-CC1dgUpx.js → events-D9PR1IC0.js} +3 -3
  96. package/server/{factory-CynerjXO.js → factory-CRoOpGsF.js} +5 -5
  97. package/server/{feature-registry-population-B0pmAz0a.js → feature-registry-population--YUXU999.js} +4 -4
  98. package/server/{feature-registry-storage-_wUBRD3J.js → feature-registry-storage-BORBTo0y.js} +2 -2
  99. package/server/{features-Dhxz-wLc.js → features--nFkJY8v.js} +2 -2
  100. package/server/{feedback-target-iygZwmMc.js → feedback-target-C0ZzyHvU.js} +1 -1
  101. package/server/{feedback-target-CPS15Vte.js → feedback-target-Dt9BsapX.js} +8 -8
  102. package/server/{feedback-writer-C9b6ccN1.js → feedback-writer-BG0RUZiu.js} +5 -5
  103. package/server/{feedback-writer-qmiMbqTZ.js → feedback-writer-D1fm-5Z8.js} +1 -1
  104. package/server/flywheel-BekukH4i.js +2 -0
  105. package/server/flywheel-BiT3odRb.js +1092 -0
  106. package/server/flywheel-CLVB55Be.js +478 -0
  107. package/server/flywheel-merge-order-BJv1DZz1.js +462 -0
  108. package/server/flywheel-merge-order-BKw9o6ku.js +2 -0
  109. package/server/forge-CZbSg6Ds.js +383 -0
  110. package/server/forge-DK3blQb_.js +3 -0
  111. package/server/{from-CJ_aH5jD.js → from-D_4_dk7i.js} +1 -1
  112. package/server/{fts-db-CKgg0VKg.js → fts-db-BeOomFa-.js} +2 -2
  113. package/server/{fts-operations-BrL_VTRr.js → fts-operations-BdewJ_g9.js} +2 -2
  114. package/server/git-utils-CI6cwyyC.js +3 -0
  115. package/server/{git-utils-BVa07a4a.js → git-utils-ameCgDdy.js} +93 -3
  116. package/server/{github-app-CMBdIFBQ.js → github-app-CQ1Lo6LA.js} +19 -8
  117. package/server/{github-app-CPfoFAdV.js → github-app-DtAsvwzK.js} +1 -1
  118. package/server/{github-client--XVlDpwM.js → github-client-BfyDxuRN.js} +2 -2
  119. package/server/{github-client-B4QsdE-X.js → github-client-Cj0yl_07.js} +1 -1
  120. package/server/github-pr-lookup-BDq6Wznz.js +58 -0
  121. package/server/{harness-binary-CVio2m-u.js → harness-binary-DqkftwTb.js} +32 -6
  122. package/server/{harness-resolve-qHJBhy3Z.js → harness-resolve-CqMqM1Mb.js} +18 -9
  123. package/server/{health-events-C9B8y1Hm.js → health-events-CazRxJUS.js} +2 -2
  124. package/server/{health-events-CpfvuVmm.js → health-events-_xfTaOUs.js} +1 -1
  125. package/server/{hooks-DUXw8A0-.js → hooks-BO3QT1sn.js} +2 -2
  126. package/server/{hooks-ltecuFqZ.js → hooks-BnJsxlSq.js} +1 -1
  127. package/server/{hume-BEq0bUDg.js → hume-CDYJxqx-.js} +2 -2
  128. package/server/hume-Dq--7rOQ.js +3 -0
  129. package/server/{idle-stack-reaper-D7w9t3fE.js → idle-stack-reaper-BYqERdkE.js} +1 -1
  130. package/server/{idle-stack-reaper-w1ISSlhs.js → idle-stack-reaper-CnGx_PO_.js} +99 -6
  131. package/server/in-flight-guard-Bq3epG58.js +45 -0
  132. package/server/{infra-CzaSOgul.js → infra-BjuxvjdS.js} +80 -5
  133. package/server/{injection-oNZeoDhL.js → injection-DZxlV2al.js} +1 -1
  134. package/server/{injection-DZ0PfYa4.js → injection-UCf8EsjX.js} +191 -183
  135. package/server/{inspect-agent-DJKLWcVT.js → inspect-agent-6kylZnrm.js} +139 -82
  136. package/server/inspect-agent-BVwDrVrz.js +2 -0
  137. package/server/{internal-token-Bb4XeV2x.js → internal-token-DvMTQSOS.js} +2 -2
  138. package/server/{internal-token-DXdfprGr.js → internal-token-M9omeXM1.js} +1 -1
  139. package/server/{io-B3_AHDfr.js → io-VHvc0Ssp.js} +43 -26
  140. package/server/{issue-closed-zhdvQicO.js → issue-closed-B6KJkmHZ.js} +7 -7
  141. package/server/{issue-lifecycle-Dy4vd0Oa.js → issue-lifecycle-9gk3fnXN.js} +1 -1
  142. package/server/{issue-lifecycle-CreaCkjW.js → issue-lifecycle-C4Zj0WmE.js} +34 -28
  143. package/server/{issue-service-singleton-B5ushCvE.js → issue-service-singleton-DmCh7EHj.js} +10 -10
  144. package/server/{issue-service-singleton-DabvBWUp.js → issue-service-singleton-PMx8F1jr.js} +1 -1
  145. package/server/{issues-B6ToV6x1.js → issues-CgnQ1OGQ.js} +2 -2
  146. package/server/{jsonl-parser-Dhflo1SH.js → jsonl-parser-DJOH_O-w.js} +5 -4
  147. package/server/{label-cleanup-BKPJm4Hv.js → label-cleanup-Dv7AV_R1.js} +3 -3
  148. package/server/{label-reconciler-DdWbHEBu.js → label-reconciler--F85rufp.js} +4 -4
  149. package/server/{lifecycle-DfeyBDwA.js → lifecycle-CTdOWYMi.js} +2 -2
  150. package/server/{lifecycle-sycO16hj.js → lifecycle-DDN8ApVY.js} +6 -7
  151. package/server/{lifecycle-io-D8iNBcux.js → lifecycle-io-D-lGdzK3.js} +5 -5
  152. package/server/{lifecycle-io-Bsnr2K4F.js → lifecycle-io-D_zTLvP1.js} +1 -1
  153. package/server/{linear-client-D4zqMnX7.js → linear-client-BQU36QqE.js} +2 -2
  154. package/server/{linear-client-DqhDQO9k.js → linear-client-CY4O_Tu3.js} +1 -1
  155. package/server/linear-mcp-auth-BnU4TYfY.js +280 -0
  156. package/server/linear-mcp-auth-NYBq_oHZ.js +2 -0
  157. package/server/memory-fts-worker.js +1 -1
  158. package/server/{merge-C_ZEhbqI.js → merge-Bpx4jjht.js} +13 -11
  159. package/server/{merge-agent-XrB80vfT.js → merge-agent-DdMVSV2Y.js} +233 -83
  160. package/server/{merge-agent-BQM3a8z5.js → merge-agent-DrXa1CpW.js} +1 -1
  161. package/server/{merge-batch-Bwoyr8Je.js → merge-batch-C5q1c1GX.js} +1 -1
  162. package/server/merge-completeness-BMm8tMyZ.js +277 -0
  163. package/server/merge-completeness-D0ljXbk3.js +3 -0
  164. package/server/{merge-DK23JEdS.js → merge-idOG--29.js} +1 -1
  165. package/server/merge-ops-DdpTiEMt.js +2 -0
  166. package/server/merge-rebase-DGQpYJU3.js +2 -0
  167. package/server/{merge-rebase-C1KIVr0s.js → merge-rebase-xLnMlw5h.js} +3 -3
  168. package/server/merge-set-DH7ot3yz.js +89 -0
  169. package/server/merge-set-DzsOTBg5.js +3 -0
  170. package/server/{merge-sync-DZ9dojJn.js → merge-sync-CQ-LgZ1_.js} +406 -153
  171. package/server/merge-sync-Ca7F5JnQ.js +3 -0
  172. package/server/{merge-train-DxDfBTjr.js → merge-train-DTEMyIu4.js} +18 -8
  173. package/server/{merge-train-deps-CyYQUksx.js → merge-train-deps-CNPJzepw.js} +4 -4
  174. package/server/merge-verification-x3JO8Dtz.js +220 -0
  175. package/server/merged-docker-cleanup-worker-CTpC27Bs.js +107 -0
  176. package/server/merged-docker-cleanup-worker-Cdi9apm-.js +3 -0
  177. package/server/{multipart-parser-Dt8YPN5S.js → multipart-parser-IMSBfePV.js} +2 -2
  178. package/server/{no-resume-mode-Cx3K0hHi.js → no-resume-mode-C5ULAXwO.js} +1 -1
  179. package/server/node_modules/.package-lock.json +27 -27
  180. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  181. package/server/node_modules/@google-cloud/common/package.json +2 -2
  182. package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  183. package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  184. package/server/node_modules/gaxios/package.json +1 -1
  185. package/server/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
  186. package/server/node_modules/google-auth-library/package.json +1 -1
  187. package/server/node_modules/google-gax/build/protos/google/api/auth.proto +2 -1
  188. package/server/node_modules/google-gax/build/protos/google/api/backend.proto +12 -1
  189. package/server/node_modules/google-gax/build/protos/google/api/billing.proto +1 -1
  190. package/server/node_modules/google-gax/build/protos/google/api/client.proto +165 -53
  191. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1/resources.proto +1 -1
  192. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/quota_adjuster_settings.proto +7 -3
  193. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/resources.proto +1 -1
  194. package/server/node_modules/google-gax/build/protos/google/api/config_change.proto +1 -1
  195. package/server/node_modules/google-gax/build/protos/google/api/context.proto +1 -1
  196. package/server/node_modules/google-gax/build/protos/google/api/control.proto +3 -3
  197. package/server/node_modules/google-gax/build/protos/google/api/distribution.proto +1 -1
  198. package/server/node_modules/google-gax/build/protos/google/api/documentation.proto +1 -1
  199. package/server/node_modules/google-gax/build/protos/google/api/endpoint.proto +1 -1
  200. package/server/node_modules/google-gax/build/protos/google/api/error_reason.proto +186 -1
  201. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/checked.proto +31 -3
  202. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/eval.proto +8 -9
  203. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/explain.proto +1 -2
  204. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/syntax.proto +20 -22
  205. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/value.proto +2 -3
  206. package/server/node_modules/google-gax/build/protos/google/api/field_behavior.proto +1 -1
  207. package/server/node_modules/google-gax/build/protos/google/api/field_info.proto +1 -1
  208. package/server/node_modules/google-gax/build/protos/google/api/http.proto +1 -1
  209. package/server/node_modules/google-gax/build/protos/google/api/httpbody.proto +1 -1
  210. package/server/node_modules/google-gax/build/protos/google/api/label.proto +1 -1
  211. package/server/node_modules/google-gax/build/protos/google/api/launch_stage.proto +1 -1
  212. package/server/node_modules/google-gax/build/protos/google/api/log.proto +1 -1
  213. package/server/node_modules/google-gax/build/protos/google/api/logging.proto +1 -1
  214. package/server/node_modules/google-gax/build/protos/google/api/metric.proto +1 -1
  215. package/server/node_modules/google-gax/build/protos/google/api/monitored_resource.proto +1 -1
  216. package/server/node_modules/google-gax/build/protos/google/api/monitoring.proto +1 -1
  217. package/server/node_modules/google-gax/build/protos/google/api/policy.proto +1 -1
  218. package/server/node_modules/google-gax/build/protos/google/api/quota.proto +1 -1
  219. package/server/node_modules/google-gax/build/protos/google/api/resource.proto +1 -1
  220. package/server/node_modules/google-gax/build/protos/google/api/routing.proto +8 -4
  221. package/server/node_modules/google-gax/build/protos/google/api/service.proto +2 -3
  222. package/server/node_modules/google-gax/build/protos/google/api/source_info.proto +1 -1
  223. package/server/node_modules/google-gax/build/protos/google/api/system_parameter.proto +1 -1
  224. package/server/node_modules/google-gax/build/protos/google/api/usage.proto +7 -27
  225. package/server/node_modules/google-gax/build/protos/google/api/visibility.proto +1 -1
  226. package/server/node_modules/google-gax/build/protos/google/longrunning/operations.proto +20 -1
  227. package/server/node_modules/google-gax/build/protos/google/protobuf/any.proto +52 -108
  228. package/server/node_modules/google-gax/build/protos/google/protobuf/compiler/ruby/ruby_generated_code.proto +2 -0
  229. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_features.proto +21 -1
  230. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_file_options.proto +24 -0
  231. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_options.proto +15 -0
  232. package/server/node_modules/google-gax/build/protos/google/protobuf/descriptor.proto +118 -30
  233. package/server/node_modules/google-gax/build/protos/google/protobuf/field_mask.proto +16 -18
  234. package/server/node_modules/google-gax/build/protos/google/protobuf/internal_options.proto +8 -1
  235. package/server/node_modules/google-gax/build/protos/google/protobuf/json/json_enumval_custom_string.proto +26 -0
  236. package/server/node_modules/google-gax/build/protos/google/protobuf/json_enumvalue_options.proto +29 -0
  237. package/server/node_modules/google-gax/build/protos/google/protobuf/json_options.proto +14 -0
  238. package/server/node_modules/google-gax/build/protos/google/protobuf/struct.proto +38 -22
  239. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/forced_micro_string.proto +3 -0
  240. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/repeated_field_proxy_import_message.proto +14 -0
  241. package/server/node_modules/google-gax/build/protos/google/protobuf/timestamp.proto +9 -8
  242. package/server/node_modules/google-gax/build/protos/google/protobuf/util/json_format_proto3.proto +18 -0
  243. package/server/node_modules/google-gax/build/protos/google/rpc/code.proto +1 -1
  244. package/server/node_modules/google-gax/build/protos/google/rpc/context/attribute_context.proto +7 -2
  245. package/server/node_modules/google-gax/build/protos/google/rpc/context/audit_context.proto +1 -1
  246. package/server/node_modules/google-gax/build/protos/google/rpc/error_details.proto +5 -5
  247. package/server/node_modules/google-gax/build/protos/google/rpc/http.proto +1 -1
  248. package/server/node_modules/google-gax/build/protos/google/rpc/status.proto +1 -2
  249. package/server/node_modules/google-gax/build/protos/google/type/calendar_period.proto +1 -1
  250. package/server/node_modules/google-gax/build/protos/google/type/color.proto +9 -10
  251. package/server/node_modules/google-gax/build/protos/google/type/date.proto +11 -9
  252. package/server/node_modules/google-gax/build/protos/google/type/datetime.proto +17 -17
  253. package/server/node_modules/google-gax/build/protos/google/type/dayofweek.proto +1 -1
  254. package/server/node_modules/google-gax/build/protos/google/type/decimal.proto +11 -13
  255. package/server/node_modules/google-gax/build/protos/google/type/expr.proto +1 -1
  256. package/server/node_modules/google-gax/build/protos/google/type/fraction.proto +1 -1
  257. package/server/node_modules/google-gax/build/protos/google/type/interval.proto +1 -2
  258. package/server/node_modules/google-gax/build/protos/google/type/latlng.proto +4 -5
  259. package/server/node_modules/google-gax/build/protos/google/type/localized_text.proto +3 -3
  260. package/server/node_modules/google-gax/build/protos/google/type/money.proto +1 -2
  261. package/server/node_modules/google-gax/build/protos/google/type/month.proto +1 -1
  262. package/server/node_modules/google-gax/build/protos/google/type/phone_number.proto +20 -15
  263. package/server/node_modules/google-gax/build/protos/google/type/postal_address.proto +39 -39
  264. package/server/node_modules/google-gax/build/protos/google/type/quaternion.proto +4 -4
  265. package/server/node_modules/google-gax/build/protos/google/type/timeofday.proto +11 -8
  266. package/server/node_modules/google-gax/package.json +5 -5
  267. package/server/node_modules/retry-request/package.json +4 -4
  268. package/server/node_modules/teeny-request/package.json +5 -5
  269. package/server/node_modules/undici/README.md +5 -0
  270. package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
  271. package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
  272. package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
  273. package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
  274. package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
  275. package/server/node_modules/undici/docs/docs/index.md +5 -0
  276. package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
  277. package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  278. package/server/node_modules/undici/lib/core/request.js +13 -2
  279. package/server/node_modules/undici/lib/core/util.js +6 -1
  280. package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
  281. package/server/node_modules/undici/lib/dispatcher/client-h1.js +42 -8
  282. package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
  283. package/server/node_modules/undici/lib/global.js +36 -16
  284. package/server/node_modules/undici/lib/handler/cache-handler.js +269 -61
  285. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +13 -3
  286. package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
  287. package/server/node_modules/undici/lib/handler/retry-handler.js +30 -4
  288. package/server/node_modules/undici/lib/interceptor/cache.js +159 -52
  289. package/server/node_modules/undici/lib/interceptor/decompress.js +9 -2
  290. package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
  291. package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
  292. package/server/node_modules/undici/lib/util/cache.js +372 -68
  293. package/server/node_modules/undici/lib/util/date.js +23 -6
  294. package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
  295. package/server/node_modules/undici/lib/web/fetch/body.js +2 -1
  296. package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
  297. package/server/node_modules/undici/package.json +2 -2
  298. package/server/node_modules/undici/types/client.d.ts +2 -2
  299. package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
  300. package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
  301. package/server/{orphan-proposed-reconciler-BTkDrl4R.js → orphan-proposed-reconciler-CWmOdM9-.js} +1 -1
  302. package/server/{orphan-proposed-reconciler-neK8dHQk.js → orphan-proposed-reconciler-Dg6U4ADZ.js} +24 -15
  303. package/server/package-lock.json +28 -28
  304. package/server/package.json +1 -1
  305. package/server/{pan-dir-DeVUgwA7.js → pan-dir-ubraCiUg.js} +24 -10
  306. package/server/{paths-_zEts6wc.js → paths-cXmOwSbh.js} +2 -2
  307. package/server/pending-lifecycle-claim-DEteYdS9.js +110 -0
  308. package/server/{pickup-Dd0Znxxy.js → pickup-D8xtG1J2.js} +17 -16
  309. package/server/pipeline-membership-BGSvkT2M.js +3 -0
  310. package/server/pipeline-membership-CrAPLYtf.js +57 -0
  311. package/server/{pipeline-membership-0HaEGDlH.js → pipeline-membership-gather-CET40frr.js} +177 -109
  312. package/server/pipeline-membership-gather-DTfcgxLl.js +3 -0
  313. package/server/{pipeline-notifier-D0ykk59O.js → pipeline-notifier-BuQ0e4hF.js} +2 -2
  314. package/server/{pipeline-notifier-6iCJplFZ.js → pipeline-notifier-ImNXknf0.js} +1 -1
  315. package/server/post-merge-lifecycle-worker-DbO10pum.js +50 -0
  316. package/server/{project-pipelines-2sK1apsO.js → project-pipelines-Bim6bThI.js} +2 -2
  317. package/server/project-repos-C0nuoBGv.js +98 -0
  318. package/server/project-repos-CRE6Ykow.js +3 -0
  319. package/server/projects-B03Wr-xc.js +3 -0
  320. package/server/{prompts-Dp4Tpk39.js → prompts-BEx08AIu.js} +2 -2
  321. package/server/{providers-DKkBXhxU.js → providers-D7IluJe0.js} +1 -1
  322. package/server/{providers-DV7ec8l7.js → providers-evXhiQeg.js} +7 -7
  323. package/server/public/assets/{chunk-BO2N2NFS-CltymLRg.js → chunk-BO2N2NFS-D1s4-Sqp.js} +4 -4
  324. package/server/public/assets/{diagram-OG6HWLK6-D2f6pjgA.js → diagram-OG6HWLK6-1gdMoSF7.js} +1 -1
  325. package/server/public/assets/{dist-BWR4qFiV.js → dist-CxAOHbil.js} +1 -1
  326. package/server/public/assets/{dist-DEmlBBNQ.js → dist-DqDRYW6P.js} +3 -3
  327. package/server/public/assets/{ganttDiagram-6RSMTGT7-DnfiViPK.js → ganttDiagram-6RSMTGT7-BYex-Ec7.js} +1 -1
  328. package/server/public/assets/{highlighted-body-OFNGDK62-B8Wrmj9H.js → highlighted-body-OFNGDK62-DlVkiG0S.js} +1 -1
  329. package/server/public/assets/index-Cc7cnFC4.css +1 -0
  330. package/server/public/assets/index-K0hAYCgV.js +807 -0
  331. package/server/public/assets/{linear-C9zFQpkX.js → linear-B4cuEFmO.js} +1 -1
  332. package/server/public/assets/mermaid-GHXKKRXX-DyDHFXHV.js +1 -0
  333. package/server/public/assets/{pieDiagram-4H26LBE5-lR8H7Yjd.js → pieDiagram-4H26LBE5-CBHNBIJQ.js} +1 -1
  334. package/server/public/assets/{prod-B1jCQihw.js → prod-CN2nHBvX.js} +4 -4
  335. package/server/public/assets/{quadrantDiagram-W4KKPZXB-CVQ2guem.js → quadrantDiagram-W4KKPZXB-Bom87VOQ.js} +1 -1
  336. package/server/public/assets/{sankeyDiagram-5OEKKPKP-eD1RB4gm.js → sankeyDiagram-5OEKKPKP-UrBeyLxk.js} +1 -1
  337. package/server/public/assets/{xychartDiagram-2RQKCTM6-ChEC6dQn.js → xychartDiagram-2RQKCTM6-DhkbrIxR.js} +1 -1
  338. package/server/public/index.html +2 -2
  339. package/server/{pull-requests--Ib2jTgy.js → pull-requests-Cv7LxzUN.js} +1 -1
  340. package/server/{pull-requests-CXIhdCYD.js → pull-requests-DHWiKxo7.js} +19 -10
  341. package/server/{queries-6d7Cdtm7.js → queries-DHJm7bTd.js} +1134 -203
  342. package/server/{rally-B708-nZn.js → rally-B71M9f4o.js} +3 -3
  343. package/server/rally-YDjU513q.js +3 -0
  344. package/server/{rally-api-yjQ0TfHd.js → rally-api-D5uXN08-.js} +1 -1
  345. package/server/{rally-api-nY0ZANw3.js → rally-api-Dkqmok65.js} +2 -2
  346. package/server/{rally-client-B1EJhfV0.js → rally-client-Bfqm6XI4.js} +4 -4
  347. package/server/{rally-client-CULK2XAY.js → rally-client-CxsA6ExK.js} +1 -1
  348. package/server/{reap-terminal-sessions-MWnqdLCJ.js → reap-terminal-sessions-BQ23nriz.js} +2 -2
  349. package/server/{reap-terminal-sessions-N3BTkmX_.js → reap-terminal-sessions-CvmwaqKv.js} +2 -2
  350. package/server/{rebuild-stack-Dp4eLkt4.js → rebuild-stack-0EEYReVZ.js} +36 -36
  351. package/server/rebuild-stack-qeRqHZxH.js +4 -0
  352. package/server/{reconstruct-cache-uWbZfjms.js → reconstruct-cache-BbYFsqLa.js} +7 -6
  353. package/server/record-CtroO946.js +3 -0
  354. package/server/record-update-DH6dLJID.js +3 -0
  355. package/server/{record-update-Dq0t2uBG.js → record-update-Z0QCxmMp.js} +124 -34
  356. package/server/{recovery-trip-BJtIQuag.js → recovery-trip-eJe26h-f.js} +2 -2
  357. package/server/{release-engine-DZpmGGzb.js → release-engine-lPUp-MTd.js} +5 -5
  358. package/server/{release-set-hnXd_kga.js → release-set-BwGeyZKX.js} +3 -3
  359. package/server/{remote-Br-ZWVIP.js → remote-BCd02Es1.js} +3 -3
  360. package/server/{remote-4tiENDaI.js → remote-CVGUhXMV.js} +3 -3
  361. package/server/{remote-agents-CRCg1L4H.js → remote-agents-C1bssi41.js} +2 -2
  362. package/server/{remote-agents-nmty1mLu.js → remote-agents-C_VxssLU.js} +300 -46
  363. package/server/{remote-completion-BbWNd10K.js → remote-completion-DAB0P706.js} +12 -12
  364. package/server/resume-u9byntrq.js +3 -0
  365. package/server/{review-agent-DJRO8EG8.js → review-agent-CD4RCI0Y.js} +1 -1
  366. package/server/{review-agent-sKkE1FEL.js → review-agent-CHhI66UP.js} +61 -44
  367. package/server/{review-artifacts-BLbSC4ke.js → review-artifacts-DSMRIfuJ.js} +7 -6
  368. package/server/{review-context-BgX3lcCx.js → review-context-oFuBbiEE.js} +69 -25
  369. package/server/{in-flight-guard-aQ1IxeI3.js → review-convoy-liveness-CpzrcJ5F.js} +3 -44
  370. package/server/review-status-BZH8h-6W.js +3 -0
  371. package/server/review-status-emit-CUExtHd5.js +50 -0
  372. package/server/{review-status-enrichment-tbOn_A_u.js → review-status-enrichment-QV_hQkgS.js} +4 -4
  373. package/server/{review-status-source-CxuEjLGg.js → review-status-source-CpvJnvnQ.js} +24 -3
  374. package/server/review-status-source-ylw5QZUR.js +3 -0
  375. package/server/{review-status-sync-BhSQ0d0l.js → review-status-sync-483sujRo.js} +10 -5
  376. package/server/{review-status-sync-To3-iS-N.js → review-status-sync-NaWvI9Xf.js} +1 -1
  377. package/server/review-status-yljtTd-q.js +7521 -0
  378. package/server/{review-verdict-feedback-C1Kg8n7t.js → review-verdict-feedback-BPDn4li_.js} +1 -1
  379. package/server/{review-verdict-feedback-CTRNtzXO.js → review-verdict-feedback-CELeUinh.js} +48 -8
  380. package/server/{rollup-WA0VD-Rr.js → rollup-DTNvelz9.js} +8 -8
  381. package/server/{rollup-B53Y81xK.js → rollup-DYZfq1c4.js} +1 -1
  382. package/server/{scanner-D2743cp8.js → scanner-CV35oSn4.js} +42 -14
  383. package/server/{sequence-io-Cg0zYj_E.js → sequence-io-DF_8iuhV.js} +4 -4
  384. package/server/{sequencer-agent-BGY8gjg-.js → sequencer-agent-B2WeCtGi.js} +5 -5
  385. package/server/server.js +3899 -672
  386. package/server/{service-DCpB_SGd.js → service-Br9rpBNA.js} +83 -65
  387. package/server/{session-fork-BQ8_6H32.js → session-fork-D0LY152N.js} +2 -2
  388. package/server/{session-history-CVZDpS3c.js → session-history-BUyK29eq.js} +4 -4
  389. package/server/{settings-BZ5m1UCl.js → settings-Bse1Pdcj.js} +3 -3
  390. package/server/settings-CdvIF84R.js +2 -0
  391. package/server/{settings-ylxwqwQG.js → settings-CvVGqNEs.js} +3 -2
  392. package/server/{shadow-engineering-BlxG6Xye.js → shadow-engineering-BWLa8ODz.js} +2 -2
  393. package/server/{shadow-state-Dh-HzF2J.js → shadow-state-B4fpKxOO.js} +2 -2
  394. package/server/{shadow-state-C2_epgx2.js → shadow-state-FV6PHfEW.js} +1 -1
  395. package/server/{shadow-utils-4bvjn9b3.js → shadow-utils-D7asqxOZ.js} +2 -2
  396. package/server/{ship-log-ClSMIzZX.js → ship-log-xplJ8t75.js} +1 -1
  397. package/server/{smart-compaction-CHIxLr_d.js → smart-compaction-CPp2Ykf6.js} +1 -1
  398. package/server/{smart-compaction-r4pHQBIr.js → smart-compaction-D3U_79f-.js} +8 -7
  399. package/server/{spawn-planning-session-KC_UduxD.js → spawn-planning-session-1nFi3gfk.js} +1 -1
  400. package/server/{spawn-planning-session-DWAorh2B.js → spawn-planning-session-DGfZ5B8D.js} +30 -23
  401. package/server/{specialist-completion-BXhav38U.js → specialist-completion-Br48eiDP.js} +1 -1
  402. package/server/{specialist-context-DtrYvGJ-.js → specialist-context-cVbGnTa3.js} +5 -5
  403. package/server/{specialist-handoff-logger-C45ouoZ6.js → specialist-handoff-logger-DK-GTz4s.js} +2 -2
  404. package/server/{specialist-logs-DJ3RzKxW.js → specialist-logs-Cl5-hqT8.js} +3 -3
  405. package/server/{specialists-JVO00bs7.js → specialists-CNfYO3G2.js} +1634 -457
  406. package/server/{specialists-DyFeedjn.js → specialists-Cicieuzu.js} +21 -19
  407. package/server/{specialists-D5fRZXmN.js → specialists-JHsdU3pA.js} +1 -1
  408. package/server/{specialists-DVj0hvaL.js → specialists-Tdezg_6N.js} +1 -1
  409. package/server/specs-Bt7WJDoC.js +3 -0
  410. package/server/src-CRmCHlma.js +11408 -0
  411. package/server/{src-CG9mCkP6.js → src-Ck028hjO.js} +6 -6
  412. package/server/{src-CMTQGyCK.js → src-UWcGe0Ix.js} +5 -5
  413. package/server/stack-health-CJLMrLBl.js +3 -0
  414. package/server/{stack-health-puygdaMd.js → stack-health-DqSqx0zv.js} +68 -12
  415. package/server/{stale-task-claims-BbFwCTb0.js → stale-task-claims-CYFOUNlT.js} +4 -4
  416. package/server/{staleness-Cbl_w4Bw.js → staleness-BQ-0gMYK.js} +1 -1
  417. package/server/{staleness-Bpy41ngS.js → staleness-D47CUJok.js} +1 -1
  418. package/server/{state-home-CIGjwNfJ.js → state-home-BYV7qZTW.js} +2 -2
  419. package/server/{state-mapping-BL_-3Yt8.js → state-mapping-BVldLhBf.js} +1 -1
  420. package/server/{state-migrate-Dkzaxvny.js → state-migrate-CvvBtS0Y.js} +4 -4
  421. package/server/{stuck-remediation-sY_MHHgQ.js → stuck-remediation-Wt0UVvu1.js} +1 -1
  422. package/server/{stuck-remediation-CzEov_fq.js → stuck-remediation-mkLC6G_t.js} +360 -26
  423. package/server/{substrate-bug-weights-service-BH66lhm7.js → substrate-bug-weights-service-XfLAKnmK.js} +3 -3
  424. package/server/{summary-fork-D8bXjCr7.js → summary-fork-CD7GOts0.js} +2 -2
  425. package/server/{summary-fork-DHhJIsAL.js → summary-fork-xiXBnWG9.js} +78 -12
  426. package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-B5SbvDx2.js} +2 -41
  427. package/server/supervisor/{paths-DehGY2Fj.js → paths-K3noE4N_.js} +1 -1
  428. package/server/supervisor/pty-supervisor.js +49 -2
  429. package/server/supervisor/pty-token-B7lp0ElT.js +43 -0
  430. package/server/{supervisor-BO-Zk_h-.js → supervisor-DL788vos.js} +3 -3
  431. package/server/supervisor-UWiQNK-y.js +2 -0
  432. package/server/{swarm-readiness-CQ_fwUWF.js → swarm-readiness-BV14DF5N.js} +3 -3
  433. package/server/{system-prerequisites-Bza0ffAh.js → system-prerequisites-pdWG6ZQs.js} +56 -29
  434. package/server/{teardown-workspace-CEgauF4U.js → teardown-workspace-l2F4_zim.js} +15 -16
  435. package/server/{test-agent-queue-DXDt0Xa-.js → test-agent-queue-qakFIIGz.js} +6 -6
  436. package/server/{test-verdict-CmUBK5cT.js → test-verdict-BJYDggMm.js} +1 -1
  437. package/server/{test-verdict-DFjjIHR5.js → test-verdict-Gw-btEfb.js} +1 -1
  438. package/server/{tldr-daemon-DL566HbH.js → tldr-daemon-BKOYB616.js} +1 -1
  439. package/server/{tldr-daemon-BDtLOIlO.js → tldr-daemon-CBaWkV9k.js} +2 -2
  440. package/server/{tmux-ftABRAmc.js → tmux-B1Wbxz5o.js} +3 -3
  441. package/server/{tmux-DoThH6aj.js → tmux-DQ6jB76i.js} +1 -1
  442. package/server/tmux-dedup-DbN6MGzM.js +892 -0
  443. package/server/{token-CsOhvw42.js → token-Cxbk023d.js} +2 -2
  444. package/server/{token-util-CTmczIfW.js → token-util-CLq2MmQt.js} +1 -1
  445. package/server/token-util-zlz9U0ki.js +3 -0
  446. package/server/{tracker-config-B4itFzDo.js → tracker-config-DZ8Zn2nQ.js} +2 -2
  447. package/server/{tracker-utils-tnxxqROg.js → tracker-utils-L0FKtjq2.js} +3 -3
  448. package/server/{traefik-connect-m73vGebA.js → traefik-connect-bNX6jKkb.js} +1 -1
  449. package/server/{tunnel-B2vxjx_b.js → tunnel-BAm1XgjG.js} +3 -3
  450. package/server/{tunnel-Cgj-IGIl.js → tunnel-CjSnHdTc.js} +1 -1
  451. package/server/{types-BBNjPcqU.js → types-q67TYYg5.js} +1 -1
  452. package/server/uat-promote-verification-CKB9ZrKC.js +92 -0
  453. package/server/uat-train-Cu-4nvbf.js +2 -0
  454. package/server/uat-train-D5UjcyAa.js +0 -0
  455. package/server/validate-Cxsx5Uz1.js +179 -0
  456. package/server/{validation-CIi6pnI2.js → validation-DEaTZafj.js} +1 -1
  457. package/server/{validation-B5JxoPUS.js → validation-VZgJxmqc.js} +4 -4
  458. package/server/{verification-artifact-C-lIHfUa.js → verification-artifact-C85cRTc_.js} +1 -1
  459. package/server/{verification-artifact-BcnIbigL.js → verification-artifact-g3yuxQDL.js} +1 -1
  460. package/server/{verification-runner-CDj4lD4t.js → verification-runner-DlZI8yhw.js} +1 -1
  461. package/server/{verification-runner-Br0S_Ous.js → verification-runner-KDZIsBj4.js} +114 -107
  462. package/server/{vtt-parser-DKpNNW5i.js → vtt-parser-Jr94BF3Y.js} +1 -1
  463. package/server/{work-agent-prompt-Yb2bd3Fq.js → work-agent-prompt-C-vuP3_J.js} +20 -9
  464. package/server/workflows-CHrx_hcW.js +2 -0
  465. package/server/{workflows-C9WmILql.js → workflows-D0oip4eV.js} +161 -78
  466. package/server/{workspace-DuUdndHe.js → workspace-BqFg__wH.js} +1 -1
  467. package/server/{workspace-BVl4rihN.js → workspace-C0fH3aek.js} +3 -3
  468. package/server/workspace-anchor-drift-B4gMRHl4.js +3 -0
  469. package/server/workspace-anchor-drift-CZKofakh.js +224 -0
  470. package/server/{workspace-config-cEGcO6UT.js → workspace-config-B123aZl-.js} +1 -1
  471. package/server/workspace-manager-CDTKjjdU.js +3 -0
  472. package/server/{workspace-manager-hLUv3ADC.js → workspace-manager-CwO-Hek7.js} +206 -116
  473. package/server/{workspace-metadata-CskwzzhL.js → workspace-metadata-CQv00QwK.js} +2 -2
  474. package/server/{workspace-metadata-DNpMixRq.js → workspace-metadata-D4M8BM4W.js} +1 -1
  475. package/server/{workspaces-hWvy9eKs.js → workspaces-j1e_6aAT.js} +736 -290
  476. package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
  477. package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
  478. package/sync-sources/hooks/record-cost-event.js +6 -4
  479. package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
  480. package/sync-sources/skills/okf/README.md +11 -3
  481. package/sync-sources/skills/okf/SKILL.md +12 -1
  482. package/sync-sources/skills/okf/docs/USAGE.md +15 -0
  483. package/sync-sources/skills/okf/references/overdeck.md +28 -0
  484. package/sync-sources/skills/pan-close/SKILL.md +5 -3
  485. package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
  486. package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
  487. package/sync-sources/skills/pan-orders/SKILL.md +33 -0
  488. package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
  489. package/sync-sources/skills/pan-reload/SKILL.md +3 -3
  490. package/sync-sources/skills/pan-restart/SKILL.md +5 -4
  491. package/sync-sources/skills/pan-review/SKILL.md +7 -1
  492. package/sync-sources/skills/pan-start/SKILL.md +4 -0
  493. package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
  494. package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
  495. package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
  496. package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
  497. package/server/activity-logger-OEUBdfZ8.js +0 -3
  498. package/server/agent-state-Bg0lhqwj.js +0 -3
  499. package/server/agents-FlIgQ3ql.js +0 -3
  500. package/server/archive-planning-zkJb3BeM.js +0 -3
  501. package/server/cli-BsVIHwzC.js +0 -3
  502. package/server/context-layers-B3Nt58jl.js +0 -4
  503. package/server/context-layers-ZYFcWiyc.js +0 -165
  504. package/server/conversation-service-Up7FEzIC.js +0 -3
  505. package/server/deacon-DYSEJb48.js +0 -4
  506. package/server/deacon-swarm-9jRLS5Ke.js +0 -2
  507. package/server/deploy-window-CM6W1-c6.js +0 -3
  508. package/server/dist-Bd3vn0Hw.js +0 -3
  509. package/server/flywheel-DMCUzDWg.js +0 -2
  510. package/server/flywheel-DSSpWmqF.js +0 -522
  511. package/server/flywheel-DcBkQvgE.js +0 -207
  512. package/server/flywheel-merge-order-C-6zRLvM.js +0 -2
  513. package/server/flywheel-merge-order-DxbQKE1d.js +0 -244
  514. package/server/forge-B-ZWyTRm.js +0 -2
  515. package/server/forge-Ch9gCFod.js +0 -270
  516. package/server/git-utils-Dry_Ka_D.js +0 -3
  517. package/server/github-pr-lookup-BRbDW-qk.js +0 -44
  518. package/server/hume-B_DbflNM.js +0 -3
  519. package/server/inspect-agent-ch-F-5Ci.js +0 -2
  520. package/server/launcher-generator-CHVm7bGT.js +0 -379
  521. package/server/layers-DzxSTGNA.js +0 -93
  522. package/server/merge-blockers-BsFjGrQ8.js +0 -41
  523. package/server/merge-ops-DlB1IM0Y.js +0 -2
  524. package/server/merge-set-DLz0MkGT.js +0 -139
  525. package/server/merge-set-DnSYdBEp.js +0 -3
  526. package/server/merge-sync-SSv3E-pl.js +0 -3
  527. package/server/merge-verification-CSizH3HY.js +0 -124
  528. package/server/projects-9SkRpES9.js +0 -3
  529. package/server/public/assets/index-CUr1xv8w.css +0 -1
  530. package/server/public/assets/index-CsSuZQBI.js +0 -802
  531. package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +0 -1
  532. package/server/rally-njs_mJrt.js +0 -3
  533. package/server/rebuild-stack-kA7XngID.js +0 -3
  534. package/server/record-t6V-3Dcj.js +0 -3
  535. package/server/record-update-DACtKh6_.js +0 -3
  536. package/server/resume-CcKqnTvE.js +0 -3
  537. package/server/review-status-A7quS5KJ.js +0 -1454
  538. package/server/review-status-C6n6-9f_.js +0 -3
  539. package/server/settings-D0OSwos5.js +0 -2
  540. package/server/specs-nN45DG2X.js +0 -3
  541. package/server/src-U7_kTPEE.js +0 -4733
  542. package/server/stack-health-Df0YEZKa.js +0 -3
  543. package/server/supervisor-BPy-o1A8.js +0 -2
  544. package/server/token-util-DrHg8abn.js +0 -3
  545. package/server/tracker-utils-BePq_oj-.js +0 -3
  546. package/server/uat-train-CuEn0t9M.js +0 -2152
  547. package/server/uat-train-cKfM-_WW.js +0 -2
  548. package/server/workflows-D90rMOya.js +0 -2
  549. package/server/workspace-manager-ZTdJAy9M.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-DvyMuOle.js";
3
- import { a as TrackerAuthError, n as init_rally_api, o as init_interface, r as IssueNotFoundError, t as RallyRestApi } from "./rally-api-nY0ZANw3.js";
2
+ import { Fr as init_errors, Nr as TrackerError } from "./config-yaml-CmOPzmBb.js";
3
+ import { a as TrackerAuthError, n as init_rally_api, o as init_interface, r as IssueNotFoundError, t as RallyRestApi } from "./rally-api-Dkqmok65.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-B708-nZn.js.map
507
+ //# sourceMappingURL=rally-B71M9f4o.js.map
@@ -0,0 +1,3 @@
1
+ import { n as init_rally, t as RallyTracker } from "./rally-B71M9f4o.js";
2
+ init_rally();
3
+ export { RallyTracker };
@@ -1,3 +1,3 @@
1
- import { n as init_rally_api, t as RallyRestApi } from "./rally-api-nY0ZANw3.js";
1
+ import { n as init_rally_api, t as RallyRestApi } from "./rally-api-Dkqmok65.js";
2
2
  init_rally_api();
3
3
  export { RallyRestApi };
@@ -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-DvyMuOle.js";
2
+ import { Fr as init_errors, Nr as TrackerError } from "./config-yaml-CmOPzmBb.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-nY0ZANw3.js.map
165
+ //# sourceMappingURL=rally-api-Dkqmok65.js.map
@@ -1,5 +1,5 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { a as init_tracker_config, r as getRallyConfig } from "./tracker-config-B4itFzDo.js";
2
+ import { a as init_tracker_config, r as getRallyConfig } from "./tracker-config-DZ8Zn2nQ.js";
3
3
  import { a as RateLimited, c as TrackerNotConfigured, d as init_typed_errors, r as IssueNotFound, s as TrackerApiError } from "./typed-errors-2BTMxkZq.js";
4
4
  import { Context, Effect, Layer } from "effect";
5
5
  //#region services/rally-client.ts
@@ -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-njs_mJrt.js");
49
+ const { RallyTracker } = await import("./rally-YDjU513q.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-njs_mJrt.js"));
109
+ const { RallyTracker } = yield* Effect.promise(() => import("./rally-YDjU513q.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-B1EJhfV0.js.map
161
+ //# sourceMappingURL=rally-client-Bfqm6XI4.js.map
@@ -1,3 +1,3 @@
1
- import { i as init_rally_client, n as RallyClientLive, r as RallyClientOptionalLive, t as RallyClient } from "./rally-client-B1EJhfV0.js";
1
+ import { i as init_rally_client, n as RallyClientLive, r as RallyClientOptionalLive, t as RallyClient } from "./rally-client-Bfqm6XI4.js";
2
2
  init_rally_client();
3
3
  export { RallyClient, RallyClientLive, RallyClientOptionalLive };
@@ -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-N3BTkmX_.js";
1
+ import { r as isRoleTerminal } from "./review-status-source-CpvJnvnQ.js";
2
+ import { i as selectAwaitingTestWorkSessions, o as selectMergedWorkSessions, s as selectNonMergedTerminalAdvancingSessions, t as init_reap_terminal_sessions } from "./reap-terminal-sessions-CvmwaqKv.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-CpvJnvnQ.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-N3BTkmX_.js.map
131
+ //# sourceMappingURL=reap-terminal-sessions-CvmwaqKv.js.map
@@ -1,12 +1,12 @@
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-DvyMuOle.js";
3
- import { a as init_stack_health, c as init_docker_stats, l as recordDockerContainerLifecycleSnapshot, n as collectDockerContainerLifecycleSnapshot } from "./stack-health-puygdaMd.js";
4
- import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-zhdvQicO.js";
5
- import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-m73vGebA.js";
6
- import { n as ensureDevcontainerSync, r as init_ensure_devcontainer } from "./ensure-devcontainer-DseivYEy.js";
2
+ import { Gn as init_projects, ar as resolveProjectFromIssueSync, zn as getProjectSync } from "./config-yaml-CmOPzmBb.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-DqSqx0zv.js";
4
+ import { n as init_issue_closed, r as isIssueClosed } from "./issue-closed-B6KJkmHZ.js";
5
+ import { n as reconcileTraefikNetworks, t as init_traefik_connect } from "./traefik-connect-bNX6jKkb.js";
6
+ import { n as ensureDevcontainerSync, r as init_ensure_devcontainer } from "./ensure-devcontainer-B057YA81.js";
7
7
  import { dirname, join } from "node:path";
8
8
  import { Effect } from "effect";
9
- import { existsSync, readFileSync, rmSync } from "node:fs";
9
+ import { existsSync, rmSync } from "node:fs";
10
10
  import { execFile } from "node:child_process";
11
11
  import { promisify } from "node:util";
12
12
  //#region ../../lib/workspace/rebuild-stack.ts
@@ -27,32 +27,6 @@ import { promisify } from "node:util";
27
27
  * the result, not the error channel, to preserve the existing API contract
28
28
  * where callers branch on `success`).
29
29
  */
30
- function declaredComposeProjectName(content, featureFolder) {
31
- const templatedMatch = content.match(/COMPOSE_PROJECT_NAME="([^$"]*)\$\{FEATURE_FOLDER\}"/);
32
- if (templatedMatch) return `${templatedMatch[1]}${featureFolder}`;
33
- return content.match(/COMPOSE_PROJECT_NAME="([^"]+)"/)?.[1] ?? null;
34
- }
35
- /**
36
- * Derive the canonical `COMPOSE_PROJECT_NAME` for a workspace, refusing the
37
- * rebuild if the workspace declares a name that does not match — a mismatch
38
- * means `docker compose down` would target the wrong stack.
39
- */
40
- function composeProjectNameForWorkspace(workspacePath, issueId) {
41
- const featureFolder = `feature-${issueId.toLowerCase()}`;
42
- const fallback = `overdeck-${featureFolder}`;
43
- for (const devPath of [join(workspacePath, ".devcontainer", "dev"), join(workspacePath, "dev")]) {
44
- if (!existsSync(devPath)) continue;
45
- try {
46
- const declared = declaredComposeProjectName(readFileSync(devPath, "utf-8"), featureFolder);
47
- if (!declared) continue;
48
- if (!declared.endsWith(featureFolder)) throw new Error(`Refusing workspace rebuild: ${devPath} declares COMPOSE_PROJECT_NAME=${declared}, expected a name ending in ${featureFolder}`);
49
- return declared;
50
- } catch (err) {
51
- if (err?.message?.startsWith("Refusing workspace rebuild:")) throw err;
52
- }
53
- }
54
- return fallback;
55
- }
56
30
  function findDevcontainerComposeFile(workspacePath) {
57
31
  const devcontainerDir = join(workspacePath, ".devcontainer");
58
32
  for (const file of COMPOSE_FILES) {
@@ -61,7 +35,7 @@ function findDevcontainerComposeFile(workspacePath) {
61
35
  }
62
36
  return null;
63
37
  }
64
- var execFileAsync, COMPOSE_FILES, dockerCompose, EXTERNAL_WORKSPACE_NETWORK, ensureExternalNetwork, rebuildWorkspaceStack;
38
+ var execFileAsync, COMPOSE_FILES, dockerCompose, EXTERNAL_WORKSPACE_NETWORK, ensureExternalNetwork, removeStaleIssueContainers, rebuildWorkspaceStack;
65
39
  var init_rebuild_stack = __esmMin((() => {
66
40
  init_docker_stats();
67
41
  init_projects();
@@ -92,6 +66,21 @@ var init_rebuild_stack = __esmMin((() => {
92
66
  "create",
93
67
  EXTERNAL_WORKSPACE_NETWORK
94
68
  ], { timeout: 3e4 }).then(() => void 0).catch(() => void 0));
69
+ removeStaleIssueContainers = (issueId, composeProjectName) => Effect.promise(async () => {
70
+ const containers = await Effect.runPromise(collectDockerContainerLifecycleSnapshot());
71
+ let removed = 0;
72
+ for (const container of containers) {
73
+ if (container.composeProject === composeProjectName) continue;
74
+ if (!hasIssueToken(container.name, issueId)) continue;
75
+ if (container.state?.toLowerCase() === "running" || /^up\b/i.test(container.status)) continue;
76
+ if (await execFileAsync("docker", [
77
+ "rm",
78
+ "-f",
79
+ container.id
80
+ ], { timeout: 3e4 }).then(() => true).catch(() => false)) removed += 1;
81
+ }
82
+ return removed;
83
+ });
95
84
  rebuildWorkspaceStack = (issueId, options = {}) => {
96
85
  const progress = options.onProgress ?? (() => {});
97
86
  const normalizedIssueId = issueId.toLowerCase();
@@ -111,10 +100,19 @@ var init_rebuild_stack = __esmMin((() => {
111
100
  error: `Workspace not found: ${workspacePath}`
112
101
  });
113
102
  return Effect.gen(function* () {
114
- 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-ylw5QZUR.js");
106
+ return resolveCanonicalReviewStatus(issueId);
107
+ });
108
+ if (closed || reviewStatus?.status?.mergeStatus === "merged") return {
115
109
  success: false,
116
110
  error: "Issue is terminal (closed/merged) — skipping stack rebuild"
117
111
  };
112
+ if (!reviewStatus?.available) return {
113
+ success: false,
114
+ error: "Issue terminal status is unavailable — skipping stack rebuild"
115
+ };
118
116
  const composeProjectName = composeProjectNameForWorkspace(workspacePath, normalizedIssueId);
119
117
  const existingComposeFile = findDevcontainerComposeFile(workspacePath);
120
118
  if (existingComposeFile) {
@@ -163,6 +161,8 @@ var init_rebuild_stack = __esmMin((() => {
163
161
  "--build"
164
162
  ], dirname(composeFile));
165
163
  recordDockerContainerLifecycleSnapshot(yield* collectDockerContainerLifecycleSnapshot());
164
+ progress("Removing stale containers from previous stack projects...");
165
+ yield* removeStaleIssueContainers(normalizedIssueId, composeProjectName);
166
166
  progress("Connecting traefik to workspace network...");
167
167
  yield* Effect.promise(() => reconcileTraefikNetworks());
168
168
  return {
@@ -182,6 +182,6 @@ var init_rebuild_stack = __esmMin((() => {
182
182
  };
183
183
  }));
184
184
  //#endregion
185
- export { init_rebuild_stack as n, rebuildWorkspaceStack as r, composeProjectNameForWorkspace as t };
185
+ export { rebuildWorkspaceStack as n, removeStaleIssueContainers as r, init_rebuild_stack as t };
186
186
 
187
- //# sourceMappingURL=rebuild-stack-Dp4eLkt4.js.map
187
+ //# sourceMappingURL=rebuild-stack-0EEYReVZ.js.map
@@ -0,0 +1,4 @@
1
+ import "./stack-health-DqSqx0zv.js";
2
+ import { n as rebuildWorkspaceStack, t as init_rebuild_stack } from "./rebuild-stack-0EEYReVZ.js";
3
+ init_rebuild_stack();
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-DvyMuOle.js";
3
- import { c as listAllAgentsSync, o as init_agents, r as backfillAgentsSync } from "./agents-B4Bjbkfv.js";
4
- import { b as init_agents$1, i as listRunningAgents } from "./queries-6d7Cdtm7.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-0HaEGDlH.js";
2
+ import { Gn as init_projects, Lt as readIssueRecord, Pt as init_record, Vt as resolveProjectForIssue, Yn as listProjectsSync } from "./config-yaml-CmOPzmBb.js";
3
+ import { c as listAllAgentsSync, o as init_agents, r as backfillAgentsSync } from "./agents-C5rWYhb6.js";
4
+ import { b as init_agents$1, i as listRunningAgents } from "./queries-DHJm7bTd.js";
5
+ import { a as gatherProjectLensSignals, o as gatherProjectLensSignalsForProjects, s as init_pipeline_membership_gather } from "./pipeline-membership-gather-CET40frr.js";
6
+ import { n as init_pipeline_membership, r as resolvePipelineMembership } from "./pipeline-membership-CrAPLYtf.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--Ib2jTgy.js");
142
+ const { fetchIssuePullRequest } = await import("./pull-requests-Cv7LxzUN.js");
142
143
  const result = await fetchIssuePullRequest(issueId);
143
144
  if (!result.pr) return {
144
145
  hasPr: false,
@@ -269,4 +270,4 @@ __esmMin((() => {
269
270
  }))();
270
271
  export { reconstructCache, reconstructCacheAuto };
271
272
 
272
- //# sourceMappingURL=reconstruct-cache-uWbZfjms.js.map
273
+ //# sourceMappingURL=reconstruct-cache-BbYFsqLa.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-CmOPzmBb.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 };
@@ -0,0 +1,3 @@
1
+ import { i as updateIssueRecord, r as init_record_update } from "./record-update-Z0QCxmMp.js";
2
+ init_record_update();
3
+ export { updateIssueRecord };
@@ -1,5 +1,5 @@
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-DvyMuOle.js";
2
+ import { At as getIssueRecordPath, Cn as resolveStateReadHomeSync, Gn as init_projects, It as queueIssueRecordCommit, Nt as getProjectConfigFromWorkspacePath, Ot as ensureIssueRecordSync, Pt as init_record, Sn as init_state_read_home, Vt as resolveProjectForIssue, Yn as listProjectsSync, ci as init_paths, cn as flushAutoCommits, ln as init_auto_commit, qt as writeIssueRecordSync, si as getOverdeckHome, xn as STATE_BRANCH, zt as readIssueRecordSync } from "./config-yaml-CmOPzmBb.js";
3
3
  import { dirname, join, relative } from "node:path";
4
4
  import { Effect } from "effect";
5
5
  import { hostname } from "node:os";
@@ -131,21 +131,73 @@ var init_fs_lock = __esmMin((() => {
131
131
  //#endregion
132
132
  //#region ../../lib/pan-dir/record-update.ts
133
133
  /** The single locked read-modify-write door for per-issue records. */
134
+ function recordDurabilityBudgetMs() {
135
+ const parsed = Number(process.env.OVERDECK_RECORD_DURABILITY_BUDGET_MS);
136
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : DEFAULT_RECORD_DURABILITY_BUDGET_MS;
137
+ }
138
+ async function withRecordDurabilityDeadline(issueId, promise, deadlineMs, budgetMs, onTimeout) {
139
+ const remaining = deadlineMs - Date.now();
140
+ if (remaining <= 0) {
141
+ await onTimeout?.().catch(() => void 0);
142
+ throw new RecordDurabilityTimeoutError(issueId, budgetMs);
143
+ }
144
+ return await new Promise((resolve, reject) => {
145
+ let settled = false;
146
+ let timingOut = false;
147
+ const timer = setTimeout(() => {
148
+ timingOut = true;
149
+ (onTimeout?.() ?? Promise.resolve()).catch(() => void 0).finally(() => {
150
+ settled = true;
151
+ reject(new RecordDurabilityTimeoutError(issueId, budgetMs));
152
+ });
153
+ }, remaining);
154
+ timer.unref?.();
155
+ promise.then((value) => {
156
+ if (settled || timingOut) return;
157
+ settled = true;
158
+ clearTimeout(timer);
159
+ resolve(value);
160
+ }, (error) => {
161
+ if (settled || timingOut) return;
162
+ settled = true;
163
+ clearTimeout(timer);
164
+ reject(error);
165
+ });
166
+ });
167
+ }
134
168
  function updateIssueRecordForWorkspace(workspacePath, issueId, mutator, options = {}) {
135
169
  return updateIssueRecord(resolveProjectForIssue(issueId) ?? getProjectConfigFromWorkspacePath(workspacePath), issueId, mutator, options);
136
170
  }
137
- async function git(gitRoot, args) {
171
+ /**
172
+ * Clear the terminal close-out marker so a reopened issue re-enters the pipeline (sync).
173
+ * Ordinary status writes deliberately preserve closedOut (projectPipeline in records.ts),
174
+ * so reopen needs this explicit inverse of markRecordPipelineClosedOutSync in record.ts
175
+ * (MIN-850, 2026-07-24).
176
+ */
177
+ function clearRecordPipelineClosedOutSync(project, issueId) {
178
+ const record = ensureIssueRecordSync(project, issueId);
179
+ if (!record.pipeline.closedOut && !record.pipeline.closedOutAt) return;
180
+ record.pipeline.closedOut = void 0;
181
+ record.pipeline.closedOutAt = void 0;
182
+ record.pipeline.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
183
+ queueIssueRecordCommit(project, issueId, writeIssueRecordSync(project, issueId, record));
184
+ }
185
+ async function git(gitRoot, args, options = {}) {
138
186
  return (await execFileAsync("git", args, {
139
187
  cwd: gitRoot,
140
188
  encoding: "utf8",
141
- timeout: 3e4,
189
+ timeout: options.timeoutMs ?? 3e4,
142
190
  maxBuffer: 16 * 1024 * 1024,
143
191
  env: {
144
192
  ...process.env,
145
193
  HUSKY: "0"
146
- }
194
+ },
195
+ ...options.signal ? { signal: options.signal } : {}
147
196
  })).stdout.trim();
148
197
  }
198
+ function throwIfDurabilityAborted(signal) {
199
+ if (signal?.aborted) throw new Error("Record durability operation aborted at the deadline");
200
+ }
149
201
  function gitFailureMessage(error) {
150
202
  if (error && typeof error === "object") {
151
203
  const failure = error;
@@ -156,18 +208,21 @@ function gitFailureMessage(error) {
156
208
  function isRemoteRefRaceError(message) {
157
209
  return /non-fast-forward|fetch first|stale info|cannot lock ref.*expected|failed to update ref/i.test(message);
158
210
  }
159
- async function abortRebase(gitRoot) {
211
+ async function abortRebase(gitRoot, options = {}) {
160
212
  try {
161
- await git(gitRoot, ["rebase", "--abort"]);
213
+ await git(gitRoot, ["rebase", "--abort"], {
214
+ timeoutMs: 5e3,
215
+ ...options
216
+ });
162
217
  } catch {}
163
218
  }
164
- async function replayConflictedRecord(project, issueId, mutator, gitRoot, recordPath) {
219
+ async function replayConflictedRecord(project, issueId, mutator, gitRoot, recordPath, signal) {
165
220
  const relativeRecordPath = relative(gitRoot, recordPath).replace(/\\/g, "/");
166
221
  const conflicts = (await git(gitRoot, [
167
222
  "diff",
168
223
  "--name-only",
169
224
  "--diff-filter=U"
170
- ])).split("\n").map((path) => path.trim()).filter(Boolean);
225
+ ], { signal })).split("\n").map((path) => path.trim()).filter(Boolean);
171
226
  if (conflicts.length !== 1 || conflicts[0] !== relativeRecordPath) throw new Error(`state rebase conflicted outside ${relativeRecordPath}: ${conflicts.join(", ") || "unknown conflict"}`);
172
227
  await git(gitRoot, [
173
228
  "restore",
@@ -175,43 +230,49 @@ async function replayConflictedRecord(project, issueId, mutator, gitRoot, record
175
230
  "--worktree",
176
231
  "--",
177
232
  relativeRecordPath
178
- ]);
233
+ ], { signal });
179
234
  const remoteRecord = readIssueRecordSync(project, issueId);
180
235
  if (!remoteRecord) throw new Error(`Remote ${issueId} state record is unreadable`);
181
- writeIssueRecordSync(project, issueId, await mutator(remoteRecord) ?? remoteRecord);
236
+ const result = await mutator(remoteRecord);
237
+ throwIfDurabilityAborted(signal);
238
+ writeIssueRecordSync(project, issueId, result ?? remoteRecord);
182
239
  await git(gitRoot, [
183
240
  "add",
184
241
  "--",
185
242
  relativeRecordPath
186
- ]);
243
+ ], { signal });
244
+ throwIfDurabilityAborted(signal);
187
245
  await git(gitRoot, [
188
246
  "-c",
189
247
  "core.editor=true",
190
248
  "rebase",
191
249
  "--continue"
192
- ]);
250
+ ], { signal });
193
251
  }
194
- async function restoreRetryableRecord(project, issueId, original, recordPath) {
252
+ async function restoreRetryableRecord(project, issueId, original, recordPath, signal) {
195
253
  const stateHome = resolveStateReadHomeSync(project);
196
254
  const gitRoot = stateHome.root;
197
255
  const relativeRecordPath = relative(gitRoot, recordPath).replace(/\\/g, "/");
198
- await abortRebase(gitRoot);
256
+ await abortRebase(gitRoot, { signal });
199
257
  let restored = structuredClone(original);
200
- const branch = stateHome.migrated ? STATE_BRANCH : await git(gitRoot, ["branch", "--show-current"]);
258
+ const branch = stateHome.migrated ? STATE_BRANCH : await git(gitRoot, ["branch", "--show-current"], { signal });
201
259
  try {
202
260
  await git(gitRoot, [
203
261
  "fetch",
204
262
  "origin",
205
263
  branch
206
- ]);
207
- restored = JSON.parse(await git(gitRoot, ["show", `origin/${branch}:${relativeRecordPath}`]));
208
- } catch {}
264
+ ], { signal });
265
+ restored = JSON.parse(await git(gitRoot, ["show", `origin/${branch}:${relativeRecordPath}`], { signal }));
266
+ } catch (fetchError) {
267
+ throwIfDurabilityAborted(signal);
268
+ }
269
+ throwIfDurabilityAborted(signal);
209
270
  writeIssueRecordSync(project, issueId, restored);
210
271
  await git(gitRoot, [
211
272
  "add",
212
273
  "--",
213
274
  relativeRecordPath
214
- ]);
275
+ ], { signal });
215
276
  try {
216
277
  await git(gitRoot, [
217
278
  "diff",
@@ -219,32 +280,36 @@ async function restoreRetryableRecord(project, issueId, original, recordPath) {
219
280
  "--quiet",
220
281
  "--",
221
282
  relativeRecordPath
222
- ]);
283
+ ], { signal });
223
284
  return;
224
- } catch {}
285
+ } catch (diffError) {
286
+ throwIfDurabilityAborted(signal);
287
+ }
225
288
  await git(gitRoot, [
226
289
  "commit",
227
290
  "-m",
228
291
  `chore(records): restore ${issueId} after failed state push`,
229
292
  "--",
230
293
  relativeRecordPath
231
- ]);
294
+ ], { signal });
232
295
  }
233
- async function reconcileStatePush(project, issueId, mutator, recordPath) {
296
+ async function reconcileStatePush(project, issueId, mutator, recordPath, signal) {
234
297
  const gitRoot = resolveStateReadHomeSync(project).root;
235
298
  for (let attempt = 0; attempt < MAX_STATE_PUSH_RECONCILIATIONS; attempt += 1) {
299
+ throwIfDurabilityAborted(signal);
236
300
  await git(gitRoot, [
237
301
  "fetch",
238
302
  "origin",
239
303
  STATE_BRANCH
240
- ]);
304
+ ], { signal });
241
305
  try {
242
- await git(gitRoot, ["rebase", `origin/${STATE_BRANCH}`]);
306
+ await git(gitRoot, ["rebase", `origin/${STATE_BRANCH}`], { signal });
243
307
  } catch (error) {
308
+ throwIfDurabilityAborted(signal);
244
309
  try {
245
- await replayConflictedRecord(project, issueId, mutator, gitRoot, recordPath);
310
+ await replayConflictedRecord(project, issueId, mutator, gitRoot, recordPath, signal);
246
311
  } catch (replayError) {
247
- await abortRebase(gitRoot);
312
+ await abortRebase(gitRoot, { signal });
248
313
  throw new Error(`Failed to reconcile ${issueId} state after push race: ${gitFailureMessage(replayError)}`, { cause: error });
249
314
  }
250
315
  }
@@ -253,11 +318,12 @@ async function reconcileStatePush(project, issueId, mutator, recordPath) {
253
318
  "push",
254
319
  "origin",
255
320
  STATE_BRANCH
256
- ]);
321
+ ], { signal });
257
322
  const record = readIssueRecordSync(project, issueId);
258
323
  if (!record) throw new Error(`Reconciled ${issueId} state record is unreadable`);
259
324
  return record;
260
325
  } catch (error) {
326
+ throwIfDurabilityAborted(signal);
261
327
  const message = gitFailureMessage(error);
262
328
  if (!isRemoteRefRaceError(message)) throw new Error(`Failed to push reconciled ${issueId} state: ${message}`, { cause: error });
263
329
  }
@@ -276,26 +342,43 @@ async function updateIssueRecord(project, issueId, mutator, options = {}) {
276
342
  const next = await mutator(current) ?? current;
277
343
  const path = writeIssueRecordSync(project, normalizedIssueId, next);
278
344
  if (options.autoCommit === false) return readIssueRecordSync(project, normalizedIssueId) ?? next;
345
+ const budgetMs = recordDurabilityBudgetMs();
346
+ const deadlineMs = Date.now() + budgetMs;
279
347
  try {
280
348
  const commitRoot = queueIssueRecordCommit(project, normalizedIssueId, path);
281
- const flushed = await Effect.runPromise(flushAutoCommits(commitRoot));
349
+ const flushed = await withRecordDurabilityDeadline(normalizedIssueId, Effect.runPromise(flushAutoCommits(commitRoot)), deadlineMs, budgetMs);
282
350
  if (flushed.pushed === false) {
283
- if (resolveStateReadHomeSync(project).migrated && isRemoteRefRaceError(flushed.reason ?? "")) return await reconcileStatePush(project, normalizedIssueId, mutator, path);
351
+ if (resolveStateReadHomeSync(project).migrated && isRemoteRefRaceError(flushed.reason ?? "")) {
352
+ const reconcileAbort = new AbortController();
353
+ const reconcilePromise = reconcileStatePush(project, normalizedIssueId, mutator, path, reconcileAbort.signal);
354
+ return await withRecordDurabilityDeadline(normalizedIssueId, reconcilePromise, deadlineMs, budgetMs, async () => {
355
+ reconcileAbort.abort();
356
+ await reconcilePromise.catch(() => void 0);
357
+ await abortRebase(resolveStateReadHomeSync(project).root);
358
+ });
359
+ }
284
360
  throw new Error(`Failed to push ${normalizedIssueId} state: ${flushed.reason ?? "unknown push failure"}`);
285
361
  }
286
362
  if (!flushed.committed && !["no diff", "no pending"].includes(flushed.reason ?? "")) throw new Error(`Failed to commit ${normalizedIssueId} state: ${flushed.reason ?? "unknown commit failure"}`);
287
363
  return readIssueRecordSync(project, normalizedIssueId) ?? next;
288
364
  } catch (error) {
365
+ if (error instanceof RecordDurabilityTimeoutError) throw error;
289
366
  try {
290
- await restoreRetryableRecord(project, normalizedIssueId, original, path);
367
+ const restoreAbort = new AbortController();
368
+ const restorePromise = restoreRetryableRecord(project, normalizedIssueId, original, path, restoreAbort.signal);
369
+ await withRecordDurabilityDeadline(normalizedIssueId, restorePromise, deadlineMs, budgetMs, async () => {
370
+ restoreAbort.abort();
371
+ await restorePromise.catch(() => void 0);
372
+ });
291
373
  } catch (restoreError) {
374
+ if (restoreError instanceof RecordDurabilityTimeoutError) throw restoreError;
292
375
  throw new Error(`Failed to persist ${normalizedIssueId} state and restore retryability: ${gitFailureMessage(restoreError)}`, { cause: error });
293
376
  }
294
377
  throw error;
295
378
  }
296
379
  });
297
380
  }
298
- var execFileAsync, MAX_STATE_PUSH_RECONCILIATIONS;
381
+ var execFileAsync, MAX_STATE_PUSH_RECONCILIATIONS, DEFAULT_RECORD_DURABILITY_BUDGET_MS, RecordDurabilityTimeoutError;
299
382
  var init_record_update = __esmMin((() => {
300
383
  init_state_read_home();
301
384
  init_auto_commit();
@@ -303,8 +386,15 @@ var init_record_update = __esmMin((() => {
303
386
  init_record();
304
387
  execFileAsync = promisify(execFile);
305
388
  MAX_STATE_PUSH_RECONCILIATIONS = 3;
389
+ DEFAULT_RECORD_DURABILITY_BUDGET_MS = 3e4;
390
+ RecordDurabilityTimeoutError = class extends Error {
391
+ constructor(issueId, budgetMs) {
392
+ 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.`);
393
+ this.name = "RecordDurabilityTimeoutError";
394
+ }
395
+ };
306
396
  }));
307
397
  //#endregion
308
- export { isPidDead as a, init_fs_lock as i, updateIssueRecord as n, updateIssueRecordForWorkspace as r, init_record_update as t };
398
+ export { updateIssueRecordForWorkspace as a, updateIssueRecord as i, clearRecordPipelineClosedOutSync as n, init_fs_lock as o, init_record_update as r, isPidDead as s, RecordDurabilityTimeoutError as t };
309
399
 
310
- //# sourceMappingURL=record-update-Dq0t2uBG.js.map
400
+ //# sourceMappingURL=record-update-Z0QCxmMp.js.map
@@ -1,4 +1,4 @@
1
- import { r as updateIssueRecordForWorkspace, t as init_record_update } from "./record-update-Dq0t2uBG.js";
1
+ import { a as updateIssueRecordForWorkspace, r as init_record_update } from "./record-update-Z0QCxmMp.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-BJtIQuag.js.map
44
+ //# sourceMappingURL=recovery-trip-eJe26h-f.js.map
@@ -1,8 +1,8 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Tn as init_projects, fn as findProjectByPathSync, yn as getProjectSync } from "./config-yaml-DvyMuOle.js";
3
- import { b as setReviewStatusSync, l as init_review_status } from "./review-status-A7quS5KJ.js";
4
- import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-DLz0MkGT.js";
5
- import { i as withComponentStateSync, n as init_release_set, r as upsertReleaseSetSync } from "./release-set-hnXd_kga.js";
2
+ import { Gn as init_projects, Mn as findProjectByPathSync, zn as getProjectSync } from "./config-yaml-CmOPzmBb.js";
3
+ import { S as setReviewStatusSync, f as init_review_status } from "./review-status-yljtTd-q.js";
4
+ import { i as init_merge_set, r as getMergeSetSync } from "./merge-set-DH7ot3yz.js";
5
+ import { i as withComponentStateSync, n as init_release_set, r as upsertReleaseSetSync } from "./release-set-BwGeyZKX.js";
6
6
  import { exec } from "node:child_process";
7
7
  import { promisify } from "node:util";
8
8
  //#region ../../lib/release/release-plan.ts
@@ -303,4 +303,4 @@ __esmMin((() => {
303
303
  }))();
304
304
  export { runRelease };
305
305
 
306
- //# sourceMappingURL=release-engine-DZpmGGzb.js.map
306
+ //# sourceMappingURL=release-engine-lPUp-MTd.js.map
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { $n as resolveIssueIdSync, Yn as init_issue_id } from "./config-yaml-DvyMuOle.js";
3
- import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-CzaSOgul.js";
2
+ import { br as resolveIssueIdSync, gr as init_issue_id } from "./config-yaml-CmOPzmBb.js";
3
+ import { d as getOverdeckDatabaseSync, f as init_infra } from "./infra-BjuxvjdS.js";
4
4
  import "effect";
5
5
  //#region ../../lib/overdeck/release-sync.ts
6
6
  function isoFromMillis(value) {
@@ -122,4 +122,4 @@ var init_release_set = __esmMin((() => {
122
122
  //#endregion
123
123
  export { withComponentStateSync as i, init_release_set as n, upsertReleaseSetSync as r, getReleaseSetSync as t };
124
124
 
125
- //# sourceMappingURL=release-set-hnXd_kga.js.map
125
+ //# sourceMappingURL=release-set-BwGeyZKX.js.map
@@ -1,5 +1,5 @@
1
- import "./workspace-metadata-CskwzzhL.js";
2
- import { C as init_fly_provider, S as createFlyProvider, s as init_remote_agents } from "./remote-agents-nmty1mLu.js";
1
+ import "./workspace-metadata-CQv00QwK.js";
2
+ import { C as createFlyProvider, s as init_remote_agents, w as init_fly_provider } from "./remote-agents-C_VxssLU.js";
3
3
  import { Effect } from "effect";
4
4
  //#region ../../lib/remote/index.ts
5
5
  init_fly_provider();
@@ -52,4 +52,4 @@ function createFlyProviderFromConfig(remoteConfig, tierOverride) {
52
52
  //#endregion
53
53
  export { getRemoteProvider as n, isRemoteAvailable as r, createFlyProviderFromConfig as t };
54
54
 
55
- //# sourceMappingURL=remote-Br-ZWVIP.js.map
55
+ //# sourceMappingURL=remote-BCd02Es1.js.map