@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,16 +1,18 @@
1
- import { Dt as getProjectConfigFromWorkspacePath, Ft as resolveProjectForIssue, Jn as extractPrefixSync, Lt as writeCloseOutDodGate, Ot as init_record, Vr as init_paths, Yn as init_issue_id, jt as readIssueRecord, kt as markRecordPipelineClosedOutSync, qn as extractNumberSync, wr as OVERDECK_HOME } from "./config-yaml-DySPNmKN.js";
2
- import { l as init_review_status, s as getReviewStatus } from "./review-status-kZj_KyCk.js";
3
- import { b as init_agents, i as listRunningAgents } from "./queries-CjNIf-Ub.js";
4
- import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population-DKZFMbFt.js";
5
- import { f as init_config, s as getDashboardApiUrlSync } from "./config-BZ0sHTju.js";
6
- import { i as loadCloisterConfig, r as init_config$1 } from "./config-CKxYiCmX.js";
7
- import { r as getAutoCloseOutCanonicalState, t as pruneStoppedAgentsForIssue } from "./agent-gc-CHcnvonI.js";
8
- import { i as findWorkspacePath, o as init_archive_planning, t as archivePlanning } from "./archive-planning-Du25Jtst.js";
9
- import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed, t as getLinearApiKey } from "./types-5M0lupud.js";
10
- import { t as closeIssue } from "./close-issue-DoOifFIK.js";
11
- import { o as init_pull_requests, r as fetchIssuePullRequest, t as fetchCommitCheckRuns } from "./pull-requests-_lHueOHW.js";
12
- import { n as acceptFlagFor, t as DOD_ROWS } from "./dod-C6n9RV3G.js";
13
- import { t as teardownWorkspace } from "./teardown-workspace-DeTTImn-.js";
1
+ import { Ft as markRecordPipelineClosedOutSync, Gr as OVERDECK_HOME, Lt as readIssueRecord, Nt as getProjectConfigFromWorkspacePath, Pt as init_record, Vt as resolveProjectForIssue, Wt as writeCloseOutDodGate, gr as init_issue_id, hr as extractPrefixSync, li as init_paths, mr as extractNumberSync } from "./config-yaml-CxdwhAIA.js";
2
+ import { D as resolvePipelineTelemetryContext, E as init_pipeline, p as init_review_status, u as getReviewStatus, w as capturePipelineStage } from "./review-status-CGvlA4o_.js";
3
+ import { b as init_agents, i as listRunningAgents } from "./queries-C-MUZaIy.js";
4
+ import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population-B6HpNWRy.js";
5
+ import { f as init_config, s as getDashboardApiUrlSync } from "./config-BvLe652W.js";
6
+ import { i as loadCloisterConfig, r as init_config$1 } from "./config-Bi3u1VK7.js";
7
+ import { r as getAutoCloseOutCanonicalState, t as pruneStoppedAgentsForIssue } from "./agent-gc-C3h9Or3a.js";
8
+ import { i as isTrackerIssueClosed, n as init_issue_closed } from "./issue-closed-BehTG1be.js";
9
+ import { i as findWorkspacePath, t as archivePlanning } from "./archive-planning-BwhxeP7C.js";
10
+ import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed, t as getLinearApiKey } from "./types-Di8wdakq.js";
11
+ import { i as gatherIssueBranchContainment, s as init_pipeline_membership_gather } from "./pipeline-membership-gather-CeVGnNJ2.js";
12
+ import { t as closeIssue } from "./close-issue-BPh1ARCF.js";
13
+ import { o as init_pull_requests, r as fetchIssuePullRequest, t as fetchCommitCheckRuns } from "./pull-requests-7BgLDsIo.js";
14
+ import { a as canAcceptDodMisses, i as buildAbandonedDodGate, n as DOD_ROWS, r as acceptFlagFor, t as BRANCH_ABSENT_MERGE_ERROR } from "./dod-DlNtcH6n.js";
15
+ import { t as teardownWorkspace } from "./teardown-workspace-DRdi_CPa.js";
14
16
  import { resolve } from "node:path";
15
17
  import { Effect } from "effect";
16
18
  import { existsSync } from "fs";
@@ -27,13 +29,14 @@ init_issue_id();
27
29
  init_feature_registry_population();
28
30
  init_config$1();
29
31
  init_types();
30
- init_archive_planning();
31
32
  /** Mechanical Definition-of-Done row checks. */
32
33
  init_agents();
33
34
  init_config();
34
35
  init_review_status();
35
36
  init_record();
37
+ init_issue_closed();
36
38
  init_pull_requests();
39
+ init_pipeline_membership_gather();
37
40
  const execFileAsync = promisify(execFile);
38
41
  const defaultMergedRowDeps = {
39
42
  verifyMerged: async () => ({
@@ -47,9 +50,22 @@ const defaultMergedRowDeps = {
47
50
  const response = await fetchIssuePullRequest(ctx.issueId);
48
51
  if (response.error) throw new Error(response.error);
49
52
  return response.pr ?? {};
53
+ },
54
+ readDurableMerges: async (ctx) => {
55
+ return (await readIssueRecord(resolveProjectForIssue(ctx.issueId) ?? getProjectConfigFromWorkspacePath(ctx.projectPath), ctx.issueId))?.closeOut.merges ?? [];
56
+ },
57
+ readBranchContainment: async (ctx) => {
58
+ const project = resolveProjectForIssue(ctx.issueId) ?? getProjectConfigFromWorkspacePath(ctx.projectPath);
59
+ if (!project) return {
60
+ unmergedRefs: [],
61
+ mergedWorkRefs: [],
62
+ pointerRefs: []
63
+ };
64
+ return gatherIssueBranchContainment(project, ctx.issueId);
50
65
  }
51
66
  };
52
67
  const defaultPostMergeRowDeps = {
68
+ readStrikeLanded: async (issueId) => strikeLanded((await loadStatus(issueId, defaultDeps))?.status),
53
69
  readCanonicalState: async (ctx) => {
54
70
  return getAutoCloseOutCanonicalState(ctx.issueId);
55
71
  },
@@ -65,13 +81,14 @@ const defaultMainVerifyRowDeps = { readCheckRuns: async (ctx, mergeCommit) => {
65
81
  return fetchCommitCheckRuns(ctx.github.owner, ctx.github.repo, mergeCommit);
66
82
  } };
67
83
  const defaultEvaluateDodGateDeps = {
68
- review: checkReviewRow,
69
- tests: checkTestsRow,
70
- verification: checkVerificationRow,
84
+ review: (issueId, settlement) => checkReviewRow(issueId, defaultDeps, settlement),
85
+ tests: (issueId, settlement) => checkTestsRow(issueId, defaultDeps, settlement),
86
+ verification: (issueId, settlement) => checkVerificationRow(issueId, defaultDeps, settlement),
71
87
  merged: checkMergedRow,
72
88
  postMerge: checkPostMergeRow,
73
89
  mainVerify: checkMainVerifyRow,
74
90
  deploy: checkDeployRow,
91
+ trackerClosed: isTrackerIssueClosed,
75
92
  now: () => (/* @__PURE__ */ new Date()).toISOString()
76
93
  };
77
94
  const defaultDeployRowDeps = {
@@ -137,30 +154,78 @@ async function loadStatus(issueId, deps) {
137
154
  return null;
138
155
  }
139
156
  }
140
- async function checkVerdict(issueId, id, field, deps) {
157
+ /**
158
+ * PAN-3180: `landed` is the strike path's own durable statement that this issue's
159
+ * work reached main through `strike/<id>`. It is written by the server merge door
160
+ * (`mergeCompletionStatus` in `merge-strike.ts`) and mirrored into the per-issue
161
+ * record's `pipeline` block, so it outlives review-status clearing. Every earlier
162
+ * landing state (`ready`/`landing`/`recovering`/`needs_you`) is a strike still in
163
+ * flight and earns no waiver.
164
+ */
165
+ function strikeLanded(status) {
166
+ return status?.strikeLandingState === "landed";
167
+ }
168
+ /**
169
+ * PAN-3180: a strike dispatches neither a review nor a test specialist — that
170
+ * bypass is the whole point of the path. So for a strike-landed issue these rows
171
+ * are `skip` (deliberately not run), never `pass` (ran and succeeded) and never
172
+ * `miss` (outstanding). A reader of the close-out record still sees the real
173
+ * verdict and the reason it was never produced.
174
+ */
175
+ const STRIKE_BYPASS_NOTE = {
176
+ review: "no review specialist is dispatched for a strike",
177
+ tests: "no test specialist is dispatched for a strike"
178
+ };
179
+ /**
180
+ * A specialist that ran and returned a negative verdict is a different fact from
181
+ * one that was never dispatched, so the strike waiver never covers it — those
182
+ * still block until an operator records an explicit `--accept-<row>` override.
183
+ */
184
+ const NEGATIVE_VERDICTS = new Set([
185
+ "failed",
186
+ "blocked",
187
+ "dispatch_failed"
188
+ ]);
189
+ /**
190
+ * PAN-3187: a tracker-closed issue with landed work cannot produce a verdict it
191
+ * never produced while active. Negative test/verification verdicts settle only
192
+ * when main verification proves the landed state green; review negatives remain.
193
+ */
194
+ function terminalVerdictSettlement(id, value, observed, settlement) {
195
+ if (!settlement?.trackerClosed || !settlement.landedWork) return null;
196
+ if (!NEGATIVE_VERDICTS.has(value ?? "")) return result(id, "skip", `${observed}; settled because the tracker issue is closed and merged work is landed`);
197
+ if (id !== "review" && settlement.mainVerifyStatus === "pass") return result(id, "skip", `${observed}; superseded because the tracker issue is closed, merged work is landed, and main verification passed`);
198
+ return null;
199
+ }
200
+ async function checkVerdict(issueId, id, field, deps, settlement) {
141
201
  const loaded = await loadStatus(issueId, deps);
142
202
  if (!loaded) return result(id, "miss", "no review status or journal record found");
143
203
  const value = loaded.status[field];
144
204
  const source = loaded.source === "journal" ? " from pipeline journal" : "";
145
205
  const observed = `${field}: ${value ?? "missing"}${source}${value === "skipped" ? " (skipped per issue policy)" : ""}`;
146
- return result(id, value === "passed" || value === "skipped" ? "pass" : "miss", observed);
206
+ if (value === "passed" || value === "skipped") return result(id, "pass", observed);
207
+ if (strikeLanded(loaded.status) && !NEGATIVE_VERDICTS.has(value ?? "")) return result(id, "skip", `${observed}; skipped by the strike path (strikeLandingState: landed) — ${STRIKE_BYPASS_NOTE[id]}`);
208
+ return terminalVerdictSettlement(id, value, observed, settlement) ?? result(id, "miss", observed);
147
209
  }
148
- function checkReviewRow(issueId, deps = defaultDeps) {
149
- return checkVerdict(issueId, "review", "reviewStatus", deps);
210
+ function checkReviewRow(issueId, deps = defaultDeps, settlement) {
211
+ return checkVerdict(issueId, "review", "reviewStatus", deps, settlement);
150
212
  }
151
- function checkTestsRow(issueId, deps = defaultDeps) {
152
- return checkVerdict(issueId, "tests", "testStatus", deps);
213
+ function checkTestsRow(issueId, deps = defaultDeps, settlement) {
214
+ return checkVerdict(issueId, "tests", "testStatus", deps, settlement);
153
215
  }
154
- async function checkVerificationRow(issueId, deps = defaultDeps) {
216
+ async function checkVerificationRow(issueId, deps = defaultDeps, settlement) {
155
217
  const loaded = await loadStatus(issueId, deps);
156
218
  if (!loaded) return result("verification", "miss", "no review status or journal record found");
157
219
  const value = loaded.status.verificationStatus;
158
220
  const commit = loaded.status.lastVerifiedCommit;
159
- const source = loaded.source === "journal" ? " from pipeline journal" : "";
160
- const policy = value === "skipped" ? " (skipped per issue policy)" : "";
161
- const commitNote = commit ? ` at ${commit}` : "";
162
- const observed = `verificationStatus: ${value ?? "missing"}${commitNote}${source}${policy}`;
163
- return result("verification", (value === "passed" || value === "skipped") && Boolean(commit) ? "pass" : "miss", observed);
221
+ const accepted = value === "passed" || value === "skipped";
222
+ const notes = [];
223
+ if (loaded.source === "journal") notes.push("from pipeline journal");
224
+ if (value === "skipped") notes.push("skipped per issue policy");
225
+ if (accepted && !commit) notes.push("no lastVerifiedCommit recorded");
226
+ const observed = `verificationStatus: ${value ?? "missing"}${commit ? ` at ${commit}` : ""}${notes.length > 0 ? ` (${notes.join("; ")})` : ""}`;
227
+ if (accepted) return result("verification", "pass", observed);
228
+ return terminalVerdictSettlement("verification", value, observed, settlement) ?? result("verification", "miss", observed);
164
229
  }
165
230
  async function checkMergedRow(ctx, deps = defaultMergedRowDeps) {
166
231
  const verified = await deps.verifyMerged(ctx).catch((error) => ({
@@ -171,10 +236,19 @@ async function checkMergedRow(ctx, deps = defaultMergedRowDeps) {
171
236
  }));
172
237
  const observed = verified.details?.join("; ") || verified.error || (verified.skipped ? "issue already closed on forge" : "merge not verified");
173
238
  const merged = result("merged", verified.success || verified.skipped ? "pass" : "miss", observed);
174
- if (!ctx.github) return merged;
175
- try {
239
+ const branchAbsent = verified.error === BRANCH_ABSENT_MERGE_ERROR;
240
+ let durableMerges = [];
241
+ if (branchAbsent) try {
242
+ durableMerges = await (deps.readDurableMerges ?? defaultMergedRowDeps.readDurableMerges)(ctx);
243
+ } catch (error) {
244
+ const message = error instanceof Error ? error.message : String(error);
245
+ merged.observed = `${merged.observed}; durable merge evidence unavailable: ${message}`;
246
+ }
247
+ let pullRequestState;
248
+ if (ctx.github) try {
176
249
  const branchName = `feature/${ctx.issueId.toLowerCase()}`;
177
250
  const pullRequest = await deps.readPullRequest(ctx, branchName);
251
+ pullRequestState = pullRequest.state;
178
252
  merged.mergedAt = pullRequest.mergedAt;
179
253
  merged.mergeCommit = typeof pullRequest.mergeCommit === "string" ? pullRequest.mergeCommit : pullRequest.mergeCommit?.oid;
180
254
  const number = pullRequest.number ? `PR #${pullRequest.number}` : "PR";
@@ -185,9 +259,27 @@ async function checkMergedRow(ctx, deps = defaultMergedRowDeps) {
185
259
  const message = error instanceof Error ? error.message : String(error);
186
260
  merged.observed = `${merged.observed}; forge metadata unavailable: ${message}`;
187
261
  }
262
+ if (branchAbsent) {
263
+ const forgeMerged = pullRequestState?.toUpperCase() === "MERGED";
264
+ if (durableMerges.length > 0 || forgeMerged) {
265
+ merged.status = "pass";
266
+ if (durableMerges.length > 0) merged.observed = `${merged.observed}; durable close-out record contains ${durableMerges.length} merge artifact(s)`;
267
+ } else merged.observed = `${merged.observed}; no merged forge artifact or durable close-out merge record found`;
268
+ }
269
+ if (merged.status === "miss") try {
270
+ const containment = await (deps.readBranchContainment ?? defaultMergedRowDeps.readBranchContainment)(ctx);
271
+ if (containment.mergedWorkRefs.length > 0 && containment.unmergedRefs.length === 0) {
272
+ merged.status = "pass";
273
+ merged.evidence = "branch-containment";
274
+ merged.observed = `${merged.observed}; branch work contained in default branch with no merged PR — non-PR landing (membership L2-work lens): ${containment.mergedWorkRefs.join(", ")}`;
275
+ }
276
+ } catch (error) {
277
+ const message = error instanceof Error ? error.message : String(error);
278
+ merged.observed = `${merged.observed}; branch containment evidence unavailable: ${message}`;
279
+ }
188
280
  return merged;
189
281
  }
190
- async function checkPostMergeRow(ctx, deps = defaultPostMergeRowDeps) {
282
+ async function checkPostMergeRow(ctx, merged, deps = defaultPostMergeRowDeps) {
191
283
  try {
192
284
  const canonicalState = await deps.readCanonicalState(ctx);
193
285
  const mergeStatus = await deps.readMergeStatus(ctx.issueId);
@@ -195,7 +287,12 @@ async function checkPostMergeRow(ctx, deps = defaultPostMergeRowDeps) {
195
287
  const runningAgents = (await deps.listAgents()).filter((agent) => agent.issueId.toUpperCase() === issueId && (agent.role === "work" || agent.role === "plan") && (agent.status === "starting" || agent.status === "running"));
196
288
  const stateObserved = canonicalState ? `canonical state: ${canonicalState}` : `canonical state unavailable; mergeStatus: ${mergeStatus ?? "missing"}`;
197
289
  const agentsObserved = runningAgents.length > 0 ? `running agents: ${runningAgents.map((agent) => agent.id).join(", ")}` : "no running work/planning agents";
198
- return result("post-merge", (canonicalState === "verifying_on_main" || mergeStatus === "merged") && runningAgents.length === 0 ? "pass" : "miss", `${stateObserved}; ${agentsObserved}`);
290
+ if (canonicalState === "done") return result("post-merge", runningAgents.length === 0 ? "pass" : "miss", `terminal canonical state: done — the post-merge lifecycle already ran to close-out; ${agentsObserved}`);
291
+ if (canonicalState === "canceled") return result("post-merge", runningAgents.length === 0 ? "skip" : "miss", `terminal canonical state: canceled — post-merge lifecycle not applicable; ${agentsObserved}`);
292
+ const lifecycleObserved = canonicalState === "verifying_on_main" || mergeStatus === "merged";
293
+ if (!lifecycleObserved && await (deps.readStrikeLanded ?? defaultPostMergeRowDeps.readStrikeLanded)(ctx.issueId)) return result("post-merge", runningAgents.length === 0 ? "skip" : "miss", `strike landing (strikeLandingState: landed) — the work-agent post-merge handoff is not the strike path's lifecycle; ${stateObserved}; ${agentsObserved}`);
294
+ if (!lifecycleObserved && merged?.evidence === "branch-containment") return result("post-merge", runningAgents.length === 0 ? "pass" : "miss", `non-PR landing (branch-containment evidence) — post-merge lifecycle not applicable; ${agentsObserved}`);
295
+ return result("post-merge", lifecycleObserved && runningAgents.length === 0 ? "pass" : "miss", `${stateObserved}; ${agentsObserved}`);
199
296
  } catch (error) {
200
297
  return result("post-merge", "miss", `post-merge evidence unavailable: ${error instanceof Error ? error.message : String(error)}`);
201
298
  }
@@ -212,6 +309,11 @@ async function checkMainVerifyRow(ctx, mergeCommit, deps = defaultMainVerifyRowD
212
309
  }
213
310
  }
214
311
  async function checkDeployRow(ctx, merge, deps = defaultDeployRowDeps) {
312
+ if (!merge.mergeCommit) {
313
+ if (merge.mergedRowStatus === "miss") return result("deploy", "skip", "no merge commit resolved because the merged row missed — deploy ancestry depends on row 4; build ancestry unchecked");
314
+ if (merge.mainVerifyRowStatus === "skip") return result("deploy", "skip", "verified-on-main skipped — no merge commit resolvable, so deploy build-ancestry has no durable anchor either (same landing class as DoD row 6 skip)");
315
+ return result("deploy", "miss", "merged row passed without a resolvable merge commit; build ancestry cannot be checked");
316
+ }
215
317
  const baseUrl = deps.dashboardUrl().replace(/\/$/, "");
216
318
  let health;
217
319
  try {
@@ -224,8 +326,9 @@ async function checkDeployRow(ctx, merge, deps = defaultDeployRowDeps) {
224
326
  if (resolve(repoRoot) !== resolve(ctx.projectPath)) return result("deploy", "skip", `live dashboard serves ${repoRoot}, not this project — deploy semantics undefined for ${ctx.projectPath}`);
225
327
  const buildCommit = typeof health.buildCommit === "string" && health.buildCommit.trim() ? health.buildCommit : void 0;
226
328
  if (!buildCommit) return result("deploy", "miss", `dashboard at ${baseUrl} did not report buildCommit; live deployment cannot be proven`);
227
- if (!merge.mergeCommit) return result("deploy", "miss", "cannot resolve merge commit; live deployment cannot be proven");
228
329
  try {
330
+ if (health.buildDirty === true) return result("deploy", "miss", `live build ${buildCommit.slice(0, 8)} was built from a dirty working tree — uncommitted changes may be serving; redeploy canonically with \`pan reload\``);
331
+ if (!await deps.commitContains(repoRoot, buildCommit, "origin/main")) return result("deploy", "miss", `live build commit ${buildCommit.slice(0, 8)} is not an ancestor of origin/main — the server is running a build of local-only commits; redeploy with \`pan reload\``);
229
332
  const contains = await deps.commitContains(repoRoot, merge.mergeCommit, buildCommit);
230
333
  const observed = `build commit ${buildCommit.slice(0, 8)} ${contains ? "contains" : "does not contain"} merge ${merge.mergeCommit.slice(0, 8)}`;
231
334
  return result("deploy", contains ? "pass" : "miss", observed);
@@ -237,23 +340,39 @@ async function evaluateDodGate(ctx, opts = {}, deps = defaultEvaluateDodGateDeps
237
340
  const acceptedRows = new Set(opts.acceptedRows ?? []);
238
341
  const overridable = new Set(DOD_ROWS.filter((row) => row.overridable).map((row) => row.id));
239
342
  for (const id of acceptedRows) if (!overridable.has(id)) throw new TypeError(`DoD row "${id}" cannot be accepted; valid rows: ${[...overridable].join(", ")}`);
343
+ const by = opts.acceptedBy ?? process.env.OVERDECK_AGENT_ID ?? userInfo().username;
344
+ if (acceptedRows.size > 0 && !canAcceptDodMisses(by)) throw new TypeError("The flywheel orchestrator cannot accept missed Definition-of-Done rows; an operator must apply --accept-<row> overrides.");
240
345
  const merged = opts.verifyMerged ? await checkMergedRow(ctx, {
241
346
  ...defaultMergedRowDeps,
242
347
  verifyMerged: opts.verifyMerged
243
348
  }) : await deps.merged(ctx);
244
- const rows = await Promise.all([
245
- deps.review(ctx.issueId),
246
- deps.tests(ctx.issueId),
247
- deps.verification(ctx.issueId),
248
- Promise.resolve(merged),
249
- deps.postMerge(ctx),
250
- deps.mainVerify(ctx, merged.mergeCommit),
349
+ const mainVerify = await deps.mainVerify(ctx, merged.mergeCommit);
350
+ const settlement = {
351
+ trackerClosed: await (deps.trackerClosed ?? defaultEvaluateDodGateDeps.trackerClosed)(ctx.issueId),
352
+ landedWork: merged.status === "pass",
353
+ mainVerifyStatus: mainVerify.status
354
+ };
355
+ const [review, tests, verification, postMerge, deploy] = await Promise.all([
356
+ deps.review(ctx.issueId, settlement),
357
+ deps.tests(ctx.issueId, settlement),
358
+ deps.verification(ctx.issueId, settlement),
359
+ deps.postMerge(ctx, merged),
251
360
  deps.deploy(ctx, {
252
361
  mergedAt: merged.mergedAt,
253
- mergeCommit: merged.mergeCommit
362
+ mergeCommit: merged.mergeCommit,
363
+ mergedRowStatus: merged.status,
364
+ mainVerifyRowStatus: mainVerify.status
254
365
  })
255
366
  ]);
256
- const by = opts.acceptedBy ?? process.env.OVERDECK_AGENT_ID ?? userInfo().username;
367
+ const rows = [
368
+ review,
369
+ tests,
370
+ verification,
371
+ merged,
372
+ postMerge,
373
+ mainVerify,
374
+ deploy
375
+ ];
257
376
  for (const row of rows) if (row.status === "miss" && acceptedRows.has(row.id)) row.acceptedBy = {
258
377
  flag: acceptFlagFor(rowDefinition(row.id)),
259
378
  by,
@@ -277,6 +396,7 @@ async function evaluateDodGate(ctx, opts = {}, deps = defaultEvaluateDodGateDeps
277
396
  * deepWipe() — Destructive: teardown(deleteBranches) + delete agent state + reset issue
278
397
  */
279
398
  init_record();
399
+ init_pipeline();
280
400
  const execAsync = promisify$1(exec$1);
281
401
  function trackerName(ctx, fallback) {
282
402
  const name = ctx.tracker?.name ?? fallback;
@@ -363,7 +483,19 @@ function closeOut(ctx, opts = {}) {
363
483
  return Effect.gen(function* () {
364
484
  const start = Date.now();
365
485
  const allSteps = [];
366
- const dodGate = yield* Effect.promise(() => evaluateDodGate(ctx, {
486
+ const uatEvidenceStep = yield* Effect.promise(async () => {
487
+ try {
488
+ const { healUatPromotionVerification } = await import("./uat-promote-verification-CoJuh7XO.js");
489
+ const evidence = await healUatPromotionVerification(ctx.issueId);
490
+ if (!evidence) return stepSkipped("dod:uat-promotion-evidence", ["No missing UAT-promotion verification evidence found"]);
491
+ return stepOk("dod:uat-promotion-evidence", [`Recorded verification from ${evidence.generation}`, ...evidence.mergeSha ? [`Promoted to main at ${evidence.mergeSha.slice(0, 9)}`] : []]);
492
+ } catch (err) {
493
+ return stepSkipped("dod:uat-promotion-evidence", [`Evidence recovery unavailable: ${err instanceof Error ? err.message : String(err)}`]);
494
+ }
495
+ });
496
+ allSteps.push(uatEvidenceStep);
497
+ const abandon = opts.abandonDisposition;
498
+ const dodGate = abandon ? buildAbandonedDodGate(abandon.reason, abandon.by) : yield* Effect.promise(() => evaluateDodGate(ctx, {
367
499
  acceptedRows: opts.dodAcceptedRows,
368
500
  acceptedBy: opts.dodAcceptedBy,
369
501
  verifyMerged: verifyBranchMergedImpl
@@ -392,6 +524,13 @@ function closeOut(ctx, opts = {}) {
392
524
  allSteps.push(stepFailed("close-out:abort", "Stopped — xBRIEF completion failed, workspace preserved"));
393
525
  return buildResult("close-out", ctx.issueId, allSteps, start, dodGate);
394
526
  }
527
+ const telemetryContext = yield* Effect.promise(async () => {
528
+ try {
529
+ return await resolvePipelineTelemetryContext(ctx.issueId);
530
+ } catch {
531
+ return null;
532
+ }
533
+ });
395
534
  const closeOutConfig = (yield* Effect.promise(() => Effect.runPromise(loadCloisterConfig()))).close_out;
396
535
  const teardownSteps = yield* teardownWorkspace(ctx, {
397
536
  deleteWorkspace: closeOutConfig?.remove_workspace ?? false,
@@ -410,7 +549,7 @@ function closeOut(ctx, opts = {}) {
410
549
  });
411
550
  const closeSteps = yield* closeIssue(ctx, {
412
551
  tracker: opts.tracker,
413
- comment: ctx.auto ? "Closed via automatic close-out ceremony" : "Closed via close-out ceremony",
552
+ comment: abandon ? `Closed without landing evidence — disposition recorded: ${abandon.reason}` : ctx.auto ? "Closed via automatic close-out ceremony" : "Closed via close-out ceremony",
414
553
  applyLabel: true
415
554
  });
416
555
  allSteps.push(...closeSteps);
@@ -420,7 +559,7 @@ function closeOut(ctx, opts = {}) {
420
559
  }
421
560
  const markTerminal = yield* markPipelineClosedOutStep(ctx);
422
561
  allSteps.push(markTerminal);
423
- const recordDodGate = yield* recordDodGateStep(ctx, dodGate);
562
+ const recordDodGate = yield* recordDodGateStep(ctx, dodGate, abandon);
424
563
  allSteps.push(recordDodGate);
425
564
  if (!recordDodGate.success) {
426
565
  allSteps.push(stepFailed("close-out:abort", "Stopped — Definition-of-Done audit could not be persisted; review status preserved"));
@@ -437,7 +576,9 @@ function closeOut(ctx, opts = {}) {
437
576
  issueId: ctx.issueId,
438
577
  status: "archived"
439
578
  }));
440
- return buildResult("close-out", ctx.issueId, allSteps, start, dodGate);
579
+ const result = buildResult("close-out", ctx.issueId, allSteps, start, dodGate);
580
+ if (result.success && !markTerminal.skipped) capturePipelineStage("closed_out", telemetryContext);
581
+ return result;
441
582
  });
442
583
  }
443
584
  function markPipelineClosedOutStep(ctx) {
@@ -450,14 +591,15 @@ function markPipelineClosedOutStep(ctx) {
450
591
  catch: (err) => err
451
592
  }).pipe(Effect.catch((err) => Effect.succeed(stepSkipped(step, [`Pipeline terminal marker failed (non-fatal): ${err.message ?? String(err)}`]))));
452
593
  }
453
- function recordDodGateStep(ctx, dodGate) {
594
+ function recordDodGateStep(ctx, dodGate, abandonDisposition) {
454
595
  const step = "close-out:record-dod-gate";
455
596
  return Effect.tryPromise({
456
597
  try: async () => {
457
598
  await writeCloseOutDodGate(getProjectConfigFromWorkspacePath(ctx.projectPath), ctx.issueId.toUpperCase(), {
458
599
  evaluatedAt: (/* @__PURE__ */ new Date()).toISOString(),
459
600
  rows: dodGate.rows,
460
- accepted: dodGate.accepted
601
+ accepted: dodGate.accepted,
602
+ ...abandonDisposition ? { disposition: abandonDisposition } : {}
461
603
  });
462
604
  return stepOk(step, ["Recorded Definition-of-Done gate with 8 rows"]);
463
605
  },
@@ -542,7 +684,7 @@ function cancelIssueWorkflow(ctx, opts = {}) {
542
684
  async function completeXBriefStep(ctx) {
543
685
  const step = "close-out:vbrief-completed";
544
686
  try {
545
- const { transitionXBriefOnMain } = await import("./lifecycle-io-DPo7x11I.js");
687
+ const { transitionXBriefOnMain } = await import("./lifecycle-io-CzTHEooc.js");
546
688
  const result = await Effect.runPromise(transitionXBriefOnMain(ctx.projectPath, ctx.issueId, "completed", "completed", `scope: complete ${ctx.issueId.toUpperCase()} xBRIEF`));
547
689
  const details = [result.moved ? "Updated xBRIEF lifecycle to completed" : "xBRIEF lifecycle already completed", result.statusUpdated ? "Updated plan.status to completed" : "plan.status already completed"];
548
690
  if (result.committed) details.push("Committed xBRIEF completion on main");
@@ -556,70 +698,81 @@ async function completeXBriefStep(ctx) {
556
698
  }
557
699
  async function verifyBranchMergedImpl(ctx) {
558
700
  const step = "close-out:verify-merged";
559
- const branchName = `feature/${ctx.issueId.toLowerCase()}`;
701
+ const issueLower = ctx.issueId.toLowerCase();
702
+ const featureBranchName = `feature/${issueLower}`;
703
+ const strikeBranchName = `strike/${issueLower}`;
560
704
  try {
561
705
  try {
562
- const { loadReviewStatuses } = await import("./review-status-btEYlaxA.js");
706
+ const { loadReviewStatuses } = await import("./review-status-Dma9SFaN.js");
563
707
  if (loadReviewStatuses()[ctx.issueId.toUpperCase()]?.mergeStatus === "merged") return stepOk(step, ["Merge specialist confirmed merge completed"]);
564
708
  } catch {}
565
- const { stdout: branchExists } = await execAsync(`git branch --list "${branchName}" 2>/dev/null || true`, {
709
+ const featureResult = await verifyConventionBranchMerged(ctx, featureBranchName);
710
+ if (featureResult?.success) return featureResult;
711
+ const strikeResult = await verifyConventionBranchMerged(ctx, strikeBranchName);
712
+ if (strikeResult?.success && !strikeResult.skipped) return stepOk(step, [...strikeResult.details ?? [], `Superseded ${featureBranchName} residual: ${featureResult?.error ?? "Feature branch is absent; positive merge evidence is required"}`]);
713
+ if (featureResult) return featureResult;
714
+ return stepFailed(step, BRANCH_ABSENT_MERGE_ERROR);
715
+ } catch (err) {
716
+ return stepFailed(step, `Could not verify merge: ${err.message}`);
717
+ }
718
+ }
719
+ async function verifyConventionBranchMerged(ctx, branchName) {
720
+ const step = "close-out:verify-merged";
721
+ const { stdout: branchExists } = await execAsync(`git branch --list "${branchName}" 2>/dev/null || true`, {
722
+ cwd: ctx.projectPath,
723
+ encoding: "utf-8"
724
+ });
725
+ if (branchExists.trim()) try {
726
+ await execAsync(`git merge-base --is-ancestor ${branchName} main`, {
566
727
  cwd: ctx.projectPath,
567
728
  encoding: "utf-8"
568
729
  });
569
- if (branchExists.trim()) try {
570
- await execAsync(`git merge-base --is-ancestor ${branchName} main`, {
730
+ const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
731
+ if (remoteCheck && !remoteCheck.success) return remoteCheck;
732
+ return stepOk(step, ["All commits merged to main", ...remoteCheck?.details ?? []]);
733
+ } catch {
734
+ try {
735
+ const { stdout: codeDiff } = await execAsync(`git diff main...${branchName} -- ':!.planning' ':!docs/prds' ':!.overdeck/prompts' 2>/dev/null || true`, {
571
736
  cwd: ctx.projectPath,
572
737
  encoding: "utf-8"
573
738
  });
574
- const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
575
- if (remoteCheck && !remoteCheck.success) return remoteCheck;
576
- return stepOk(step, ["All commits merged to main", ...remoteCheck?.details ?? []]);
577
- } catch {
578
- try {
579
- const { stdout: codeDiff } = await execAsync(`git diff main...${branchName} -- ':!.planning' ':!docs/prds' ':!.overdeck/prompts' 2>/dev/null || true`, {
580
- cwd: ctx.projectPath,
581
- encoding: "utf-8"
582
- });
583
- if (!codeDiff.trim()) {
584
- const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
585
- if (remoteCheck && !remoteCheck.success) return remoteCheck;
586
- return stepOk(step, ["Code changes squash-merged to main (only planning artifacts remain on branch)", ...remoteCheck?.details ?? []]);
587
- }
588
- } catch {}
589
- const githubMerged = await verifySquashMergedPrByBranch(ctx, branchName, branchName);
590
- if (githubMerged?.success) {
739
+ if (!codeDiff.trim()) {
591
740
  const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
592
741
  if (remoteCheck && !remoteCheck.success) return remoteCheck;
593
- return stepOk(step, [...githubMerged.details ?? [], ...remoteCheck?.details ?? []]);
742
+ return stepOk(step, ["Code changes squash-merged to main (only planning artifacts remain on branch)", ...remoteCheck?.details ?? []]);
594
743
  }
595
- if (githubMerged) return githubMerged;
596
- const { stdout: unmerged } = await execAsync(`git log main..${branchName} --oneline 2>/dev/null || true`, {
597
- cwd: ctx.projectPath,
598
- encoding: "utf-8"
599
- });
600
- const count = unmerged.trim() ? unmerged.trim().split("\n").length : 0;
601
- if (ctx.github) try {
602
- const { stdout: issueState } = await execAsync(`gh issue view ${ctx.github.number} --repo ${ctx.github.owner}/${ctx.github.repo} --json state --jq '.state'`, {
603
- cwd: ctx.projectPath,
604
- encoding: "utf-8"
605
- });
606
- if (issueState.trim().toUpperCase() === "CLOSED") return stepSkipped(step, [`Issue already closed on GitHub; ${count} unmerged commit(s) remain on ${branchName}`]);
607
- } catch {}
608
- return stepFailed(step, `${count} unmerged commit(s) on ${branchName}. Merge before closing out.`);
744
+ } catch {}
745
+ const githubMerged = await verifySquashMergedPrByBranch(ctx, branchName, branchName);
746
+ if (githubMerged?.success) {
747
+ const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
748
+ if (remoteCheck && !remoteCheck.success) return remoteCheck;
749
+ return stepOk(step, [...githubMerged.details ?? [], ...remoteCheck?.details ?? []]);
609
750
  }
610
- const { stdout: remoteBranch } = await execAsync(`git ls-remote --heads origin "${branchName}" 2>/dev/null || true`, {
751
+ if (githubMerged) return githubMerged;
752
+ const { stdout: unmerged } = await execAsync(`git log main..${branchName} --oneline 2>/dev/null || true`, {
611
753
  cwd: ctx.projectPath,
612
754
  encoding: "utf-8"
613
755
  });
614
- if (remoteBranch.trim()) {
615
- await execAsync(`git fetch origin ${branchName}`, { cwd: ctx.projectPath }).catch(() => {});
616
- const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
617
- if (remoteCheck) return remoteCheck;
618
- }
619
- return stepOk(step, ["Branch already cleaned up (squash-merged)"]);
620
- } catch (err) {
621
- return stepFailed(step, `Could not verify merge: ${err.message}`);
756
+ const count = unmerged.trim() ? unmerged.trim().split("\n").length : 0;
757
+ if (ctx.github) try {
758
+ const { stdout: issueState } = await execAsync(`gh issue view ${ctx.github.number} --repo ${ctx.github.owner}/${ctx.github.repo} --json state --jq '.state'`, {
759
+ cwd: ctx.projectPath,
760
+ encoding: "utf-8"
761
+ });
762
+ if (issueState.trim().toUpperCase() === "CLOSED") return stepSkipped(step, [`Issue already closed on GitHub; ${count} unmerged commit(s) remain on ${branchName}`]);
763
+ } catch {}
764
+ return stepFailed(step, `${count} unmerged commit(s) on ${branchName}. Merge before closing out.`);
765
+ }
766
+ const { stdout: remoteBranch } = await execAsync(`git ls-remote --heads origin "${branchName}" 2>/dev/null || true`, {
767
+ cwd: ctx.projectPath,
768
+ encoding: "utf-8"
769
+ });
770
+ if (remoteBranch.trim()) {
771
+ await execAsync(`git fetch origin ${branchName}`, { cwd: ctx.projectPath }).catch(() => {});
772
+ const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
773
+ if (remoteCheck) return remoteCheck;
622
774
  }
775
+ return null;
623
776
  }
624
777
  async function verifyRemoteBranchIfPresent(ctx, branchName) {
625
778
  const step = "close-out:verify-merged";
@@ -783,7 +936,7 @@ async function resetIssueToTodoImpl(ctx) {
783
936
  */
784
937
  async function resetPostMergeStateForIssue(issueId) {
785
938
  try {
786
- const { resetPostMergeState } = await import("./merge-agent-CKkgIBPB.js");
939
+ const { resetPostMergeState } = await import("./merge-agent-DQTXZk8z.js");
787
940
  resetPostMergeState(issueId);
788
941
  resetPostMergeState(issueId.toUpperCase());
789
942
  } catch {
@@ -799,7 +952,7 @@ function clearReviewStatusStep(issueId) {
799
952
  async function clearReviewStatusStepImpl(issueId) {
800
953
  const step = "clear-review-status";
801
954
  try {
802
- const { clearReviewStatus } = await import("./review-status-btEYlaxA.js");
955
+ const { clearReviewStatus } = await import("./review-status-Dma9SFaN.js");
803
956
  clearReviewStatus(issueId.toUpperCase());
804
957
  return stepOk(step, ["Review status cleared"]);
805
958
  } catch {
@@ -866,4 +1019,4 @@ async function resetIssueToCanceledImpl(ctx) {
866
1019
  //#endregion
867
1020
  export { deepWipe as a, closeOut as i, cancelIssueWorkflow as n, resetToTodo as o, close as r, verifyBranchMergedImpl as s, approve as t };
868
1021
 
869
- //# sourceMappingURL=workflows-mbQzh6mQ.js.map
1022
+ //# sourceMappingURL=workflows-D0vP1WrK.js.map
@@ -0,0 +1,2 @@
1
+ import { a as deepWipe, i as closeOut } from "./workflows-D0vP1WrK.js";
2
+ export { closeOut, deepWipe };
@@ -1,3 +1,3 @@
1
- import { i as injectMemoryHookSettings, n as init_workspace, r as injectCavemanSettings, t as determineCavemanVariant } from "./workspace-BPUws1-_.js";
1
+ import { i as injectMemoryHookSettings, n as init_workspace, r as injectCavemanSettings, t as determineCavemanVariant } from "./workspace-DQkRPLlQ.js";
2
2
  init_workspace();
3
3
  export { determineCavemanVariant, injectCavemanSettings, injectMemoryHookSettings };
@@ -1,6 +1,6 @@
1
1
  import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { ir as FsError, mr as init_errors } from "./config-yaml-DySPNmKN.js";
3
- import { i as init_settings, t as areMemoryObservationsEnabled } from "./settings-BTMvpNFU.js";
2
+ import { Fr as init_errors, Tr as FsError } from "./config-yaml-CxdwhAIA.js";
3
+ import { i as init_settings, t as areMemoryObservationsEnabled } from "./settings-VN0qOh4U.js";
4
4
  import { Effect } from "effect";
5
5
  import { existsSync } from "fs";
6
6
  import { join } from "path";
@@ -238,4 +238,4 @@ var init_workspace = __esmMin((() => {
238
238
  //#endregion
239
239
  export { readCavemanVariant as a, injectMemoryHookSettings as i, init_workspace as n, injectCavemanSettings as r, determineCavemanVariant as t };
240
240
 
241
- //# sourceMappingURL=workspace-BPUws1-_.js.map
241
+ //# sourceMappingURL=workspace-DQkRPLlQ.js.map