@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,16 +1,17 @@
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-DvyMuOle.js";
2
- import { l as init_review_status, s as getReviewStatus } from "./review-status-A7quS5KJ.js";
3
- import { b as init_agents, i as listRunningAgents } from "./queries-6d7Cdtm7.js";
4
- import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population-B0pmAz0a.js";
5
- import { f as init_config, s as getDashboardApiUrlSync } from "./config-CCvjQf27.js";
6
- import { i as loadCloisterConfig, r as init_config$1 } from "./config-DjLOdbgT.js";
7
- import { r as getAutoCloseOutCanonicalState, t as pruneStoppedAgentsForIssue } from "./agent-gc-BV1q_2EV.js";
8
- import { i as findWorkspacePath, o as init_archive_planning, t as archivePlanning } from "./archive-planning-DYrYojxl.js";
9
- import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed, t as getLinearApiKey } from "./types-BBNjPcqU.js";
10
- import { t as closeIssue } from "./close-issue-Dn_4c4G8.js";
11
- import { o as init_pull_requests, r as fetchIssuePullRequest, t as fetchCommitCheckRuns } from "./pull-requests-CXIhdCYD.js";
12
- import { n as acceptFlagFor, t as DOD_ROWS } from "./dod-BrSfUHm0.js";
13
- import { t as teardownWorkspace } from "./teardown-workspace-CEgauF4U.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, ci as init_paths, gr as init_issue_id, hr as extractPrefixSync, mr as extractNumberSync } from "./config-yaml-CmOPzmBb.js";
2
+ import { C as capturePipelineStage, E as resolvePipelineTelemetryContext, T as init_pipeline, f as init_review_status, l as getReviewStatus } from "./review-status-yljtTd-q.js";
3
+ import { b as init_agents, i as listRunningAgents } from "./queries-DHJm7bTd.js";
4
+ import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population--YUXU999.js";
5
+ import { f as init_config, s as getDashboardApiUrlSync } from "./config-Dr3pW6w6.js";
6
+ import { i as loadCloisterConfig, r as init_config$1 } from "./config-B2IMcBxx.js";
7
+ import { r as getAutoCloseOutCanonicalState, t as pruneStoppedAgentsForIssue } from "./agent-gc-CBULruzm.js";
8
+ import { i as findWorkspacePath, t as archivePlanning } from "./archive-planning-C0lAbNB_.js";
9
+ import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed, t as getLinearApiKey } from "./types-q67TYYg5.js";
10
+ import { t as closeIssue } from "./close-issue-D5MF5GqF.js";
11
+ import { i as gatherIssueBranchContainment, s as init_pipeline_membership_gather } from "./pipeline-membership-gather-CET40frr.js";
12
+ import { o as init_pull_requests, r as fetchIssuePullRequest, t as fetchCommitCheckRuns } from "./pull-requests-DHWiKxo7.js";
13
+ import { i as canAcceptDodMisses, n as DOD_ROWS, r as acceptFlagFor, t as BRANCH_ABSENT_MERGE_ERROR } from "./dod-Dar-yheg.js";
14
+ import { t as teardownWorkspace } from "./teardown-workspace-l2F4_zim.js";
14
15
  import { resolve } from "node:path";
15
16
  import { Effect } from "effect";
16
17
  import { existsSync } from "fs";
@@ -27,13 +28,13 @@ init_issue_id();
27
28
  init_feature_registry_population();
28
29
  init_config$1();
29
30
  init_types();
30
- init_archive_planning();
31
31
  /** Mechanical Definition-of-Done row checks. */
32
32
  init_agents();
33
33
  init_config();
34
34
  init_review_status();
35
35
  init_record();
36
36
  init_pull_requests();
37
+ init_pipeline_membership_gather();
37
38
  const execFileAsync = promisify(execFile);
38
39
  const defaultMergedRowDeps = {
39
40
  verifyMerged: async () => ({
@@ -47,6 +48,18 @@ const defaultMergedRowDeps = {
47
48
  const response = await fetchIssuePullRequest(ctx.issueId);
48
49
  if (response.error) throw new Error(response.error);
49
50
  return response.pr ?? {};
51
+ },
52
+ readDurableMerges: async (ctx) => {
53
+ return (await readIssueRecord(resolveProjectForIssue(ctx.issueId) ?? getProjectConfigFromWorkspacePath(ctx.projectPath), ctx.issueId))?.closeOut.merges ?? [];
54
+ },
55
+ readBranchContainment: async (ctx) => {
56
+ const project = resolveProjectForIssue(ctx.issueId) ?? getProjectConfigFromWorkspacePath(ctx.projectPath);
57
+ if (!project) return {
58
+ unmergedRefs: [],
59
+ mergedWorkRefs: [],
60
+ pointerRefs: []
61
+ };
62
+ return gatherIssueBranchContainment(project, ctx.issueId);
50
63
  }
51
64
  };
52
65
  const defaultPostMergeRowDeps = {
@@ -156,11 +169,13 @@ async function checkVerificationRow(issueId, deps = defaultDeps) {
156
169
  if (!loaded) return result("verification", "miss", "no review status or journal record found");
157
170
  const value = loaded.status.verificationStatus;
158
171
  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);
172
+ const accepted = value === "passed" || value === "skipped";
173
+ const notes = [];
174
+ if (loaded.source === "journal") notes.push("from pipeline journal");
175
+ if (value === "skipped") notes.push("skipped per issue policy");
176
+ if (accepted && !commit) notes.push("no lastVerifiedCommit recorded");
177
+ const observed = `verificationStatus: ${value ?? "missing"}${commit ? ` at ${commit}` : ""}${notes.length > 0 ? ` (${notes.join("; ")})` : ""}`;
178
+ return result("verification", accepted ? "pass" : "miss", observed);
164
179
  }
165
180
  async function checkMergedRow(ctx, deps = defaultMergedRowDeps) {
166
181
  const verified = await deps.verifyMerged(ctx).catch((error) => ({
@@ -171,10 +186,19 @@ async function checkMergedRow(ctx, deps = defaultMergedRowDeps) {
171
186
  }));
172
187
  const observed = verified.details?.join("; ") || verified.error || (verified.skipped ? "issue already closed on forge" : "merge not verified");
173
188
  const merged = result("merged", verified.success || verified.skipped ? "pass" : "miss", observed);
174
- if (!ctx.github) return merged;
175
- try {
189
+ const branchAbsent = verified.error === BRANCH_ABSENT_MERGE_ERROR;
190
+ let durableMerges = [];
191
+ if (branchAbsent) try {
192
+ durableMerges = await (deps.readDurableMerges ?? defaultMergedRowDeps.readDurableMerges)(ctx);
193
+ } catch (error) {
194
+ const message = error instanceof Error ? error.message : String(error);
195
+ merged.observed = `${merged.observed}; durable merge evidence unavailable: ${message}`;
196
+ }
197
+ let pullRequestState;
198
+ if (ctx.github) try {
176
199
  const branchName = `feature/${ctx.issueId.toLowerCase()}`;
177
200
  const pullRequest = await deps.readPullRequest(ctx, branchName);
201
+ pullRequestState = pullRequest.state;
178
202
  merged.mergedAt = pullRequest.mergedAt;
179
203
  merged.mergeCommit = typeof pullRequest.mergeCommit === "string" ? pullRequest.mergeCommit : pullRequest.mergeCommit?.oid;
180
204
  const number = pullRequest.number ? `PR #${pullRequest.number}` : "PR";
@@ -185,9 +209,27 @@ async function checkMergedRow(ctx, deps = defaultMergedRowDeps) {
185
209
  const message = error instanceof Error ? error.message : String(error);
186
210
  merged.observed = `${merged.observed}; forge metadata unavailable: ${message}`;
187
211
  }
212
+ if (branchAbsent) {
213
+ const forgeMerged = pullRequestState?.toUpperCase() === "MERGED";
214
+ if (durableMerges.length > 0 || forgeMerged) {
215
+ merged.status = "pass";
216
+ if (durableMerges.length > 0) merged.observed = `${merged.observed}; durable close-out record contains ${durableMerges.length} merge artifact(s)`;
217
+ } else merged.observed = `${merged.observed}; no merged forge artifact or durable close-out merge record found`;
218
+ }
219
+ if (merged.status === "miss") try {
220
+ const containment = await (deps.readBranchContainment ?? defaultMergedRowDeps.readBranchContainment)(ctx);
221
+ if (containment.mergedWorkRefs.length > 0 && containment.unmergedRefs.length === 0) {
222
+ merged.status = "pass";
223
+ merged.evidence = "branch-containment";
224
+ merged.observed = `${merged.observed}; branch work contained in default branch with no merged PR — non-PR landing (membership L2-work lens): ${containment.mergedWorkRefs.join(", ")}`;
225
+ }
226
+ } catch (error) {
227
+ const message = error instanceof Error ? error.message : String(error);
228
+ merged.observed = `${merged.observed}; branch containment evidence unavailable: ${message}`;
229
+ }
188
230
  return merged;
189
231
  }
190
- async function checkPostMergeRow(ctx, deps = defaultPostMergeRowDeps) {
232
+ async function checkPostMergeRow(ctx, merged, deps = defaultPostMergeRowDeps) {
191
233
  try {
192
234
  const canonicalState = await deps.readCanonicalState(ctx);
193
235
  const mergeStatus = await deps.readMergeStatus(ctx.issueId);
@@ -195,7 +237,9 @@ async function checkPostMergeRow(ctx, deps = defaultPostMergeRowDeps) {
195
237
  const runningAgents = (await deps.listAgents()).filter((agent) => agent.issueId.toUpperCase() === issueId && (agent.role === "work" || agent.role === "plan") && (agent.status === "starting" || agent.status === "running"));
196
238
  const stateObserved = canonicalState ? `canonical state: ${canonicalState}` : `canonical state unavailable; mergeStatus: ${mergeStatus ?? "missing"}`;
197
239
  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}`);
240
+ const lifecycleObserved = canonicalState === "verifying_on_main" || mergeStatus === "merged";
241
+ 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}`);
242
+ return result("post-merge", lifecycleObserved && runningAgents.length === 0 ? "pass" : "miss", `${stateObserved}; ${agentsObserved}`);
199
243
  } catch (error) {
200
244
  return result("post-merge", "miss", `post-merge evidence unavailable: ${error instanceof Error ? error.message : String(error)}`);
201
245
  }
@@ -212,6 +256,10 @@ async function checkMainVerifyRow(ctx, mergeCommit, deps = defaultMainVerifyRowD
212
256
  }
213
257
  }
214
258
  async function checkDeployRow(ctx, merge, deps = defaultDeployRowDeps) {
259
+ if (!merge.mergeCommit) {
260
+ 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");
261
+ return result("deploy", "miss", "merged row passed without a resolvable merge commit; build ancestry cannot be checked");
262
+ }
215
263
  const baseUrl = deps.dashboardUrl().replace(/\/$/, "");
216
264
  let health;
217
265
  try {
@@ -224,8 +272,9 @@ async function checkDeployRow(ctx, merge, deps = defaultDeployRowDeps) {
224
272
  if (resolve(repoRoot) !== resolve(ctx.projectPath)) return result("deploy", "skip", `live dashboard serves ${repoRoot}, not this project — deploy semantics undefined for ${ctx.projectPath}`);
225
273
  const buildCommit = typeof health.buildCommit === "string" && health.buildCommit.trim() ? health.buildCommit : void 0;
226
274
  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
275
  try {
276
+ 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\``);
277
+ 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
278
  const contains = await deps.commitContains(repoRoot, merge.mergeCommit, buildCommit);
230
279
  const observed = `build commit ${buildCommit.slice(0, 8)} ${contains ? "contains" : "does not contain"} merge ${merge.mergeCommit.slice(0, 8)}`;
231
280
  return result("deploy", contains ? "pass" : "miss", observed);
@@ -237,6 +286,8 @@ async function evaluateDodGate(ctx, opts = {}, deps = defaultEvaluateDodGateDeps
237
286
  const acceptedRows = new Set(opts.acceptedRows ?? []);
238
287
  const overridable = new Set(DOD_ROWS.filter((row) => row.overridable).map((row) => row.id));
239
288
  for (const id of acceptedRows) if (!overridable.has(id)) throw new TypeError(`DoD row "${id}" cannot be accepted; valid rows: ${[...overridable].join(", ")}`);
289
+ const by = opts.acceptedBy ?? process.env.OVERDECK_AGENT_ID ?? userInfo().username;
290
+ 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
291
  const merged = opts.verifyMerged ? await checkMergedRow(ctx, {
241
292
  ...defaultMergedRowDeps,
242
293
  verifyMerged: opts.verifyMerged
@@ -246,14 +297,14 @@ async function evaluateDodGate(ctx, opts = {}, deps = defaultEvaluateDodGateDeps
246
297
  deps.tests(ctx.issueId),
247
298
  deps.verification(ctx.issueId),
248
299
  Promise.resolve(merged),
249
- deps.postMerge(ctx),
300
+ deps.postMerge(ctx, merged),
250
301
  deps.mainVerify(ctx, merged.mergeCommit),
251
302
  deps.deploy(ctx, {
252
303
  mergedAt: merged.mergedAt,
253
- mergeCommit: merged.mergeCommit
304
+ mergeCommit: merged.mergeCommit,
305
+ mergedRowStatus: merged.status
254
306
  })
255
307
  ]);
256
- const by = opts.acceptedBy ?? process.env.OVERDECK_AGENT_ID ?? userInfo().username;
257
308
  for (const row of rows) if (row.status === "miss" && acceptedRows.has(row.id)) row.acceptedBy = {
258
309
  flag: acceptFlagFor(rowDefinition(row.id)),
259
310
  by,
@@ -277,6 +328,7 @@ async function evaluateDodGate(ctx, opts = {}, deps = defaultEvaluateDodGateDeps
277
328
  * deepWipe() — Destructive: teardown(deleteBranches) + delete agent state + reset issue
278
329
  */
279
330
  init_record();
331
+ init_pipeline();
280
332
  const execAsync = promisify$1(exec$1);
281
333
  function trackerName(ctx, fallback) {
282
334
  const name = ctx.tracker?.name ?? fallback;
@@ -363,6 +415,17 @@ function closeOut(ctx, opts = {}) {
363
415
  return Effect.gen(function* () {
364
416
  const start = Date.now();
365
417
  const allSteps = [];
418
+ const uatEvidenceStep = yield* Effect.promise(async () => {
419
+ try {
420
+ const { healUatPromotionVerification } = await import("./uat-promote-verification-CKB9ZrKC.js");
421
+ const evidence = await healUatPromotionVerification(ctx.issueId);
422
+ if (!evidence) return stepSkipped("dod:uat-promotion-evidence", ["No missing UAT-promotion verification evidence found"]);
423
+ return stepOk("dod:uat-promotion-evidence", [`Recorded verification from ${evidence.generation}`, ...evidence.mergeSha ? [`Promoted to main at ${evidence.mergeSha.slice(0, 9)}`] : []]);
424
+ } catch (err) {
425
+ return stepSkipped("dod:uat-promotion-evidence", [`Evidence recovery unavailable: ${err instanceof Error ? err.message : String(err)}`]);
426
+ }
427
+ });
428
+ allSteps.push(uatEvidenceStep);
366
429
  const dodGate = yield* Effect.promise(() => evaluateDodGate(ctx, {
367
430
  acceptedRows: opts.dodAcceptedRows,
368
431
  acceptedBy: opts.dodAcceptedBy,
@@ -392,6 +455,13 @@ function closeOut(ctx, opts = {}) {
392
455
  allSteps.push(stepFailed("close-out:abort", "Stopped — xBRIEF completion failed, workspace preserved"));
393
456
  return buildResult("close-out", ctx.issueId, allSteps, start, dodGate);
394
457
  }
458
+ const telemetryContext = yield* Effect.promise(async () => {
459
+ try {
460
+ return await resolvePipelineTelemetryContext(ctx.issueId);
461
+ } catch {
462
+ return null;
463
+ }
464
+ });
395
465
  const closeOutConfig = (yield* Effect.promise(() => Effect.runPromise(loadCloisterConfig()))).close_out;
396
466
  const teardownSteps = yield* teardownWorkspace(ctx, {
397
467
  deleteWorkspace: closeOutConfig?.remove_workspace ?? false,
@@ -437,7 +507,9 @@ function closeOut(ctx, opts = {}) {
437
507
  issueId: ctx.issueId,
438
508
  status: "archived"
439
509
  }));
440
- return buildResult("close-out", ctx.issueId, allSteps, start, dodGate);
510
+ const result = buildResult("close-out", ctx.issueId, allSteps, start, dodGate);
511
+ if (result.success && !markTerminal.skipped) capturePipelineStage("closed_out", telemetryContext);
512
+ return result;
441
513
  });
442
514
  }
443
515
  function markPipelineClosedOutStep(ctx) {
@@ -542,7 +614,7 @@ function cancelIssueWorkflow(ctx, opts = {}) {
542
614
  async function completeXBriefStep(ctx) {
543
615
  const step = "close-out:vbrief-completed";
544
616
  try {
545
- const { transitionXBriefOnMain } = await import("./lifecycle-io-Bsnr2K4F.js");
617
+ const { transitionXBriefOnMain } = await import("./lifecycle-io-D_zTLvP1.js");
546
618
  const result = await Effect.runPromise(transitionXBriefOnMain(ctx.projectPath, ctx.issueId, "completed", "completed", `scope: complete ${ctx.issueId.toUpperCase()} xBRIEF`));
547
619
  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
620
  if (result.committed) details.push("Committed xBRIEF completion on main");
@@ -556,70 +628,81 @@ async function completeXBriefStep(ctx) {
556
628
  }
557
629
  async function verifyBranchMergedImpl(ctx) {
558
630
  const step = "close-out:verify-merged";
559
- const branchName = `feature/${ctx.issueId.toLowerCase()}`;
631
+ const issueLower = ctx.issueId.toLowerCase();
632
+ const featureBranchName = `feature/${issueLower}`;
633
+ const strikeBranchName = `strike/${issueLower}`;
560
634
  try {
561
635
  try {
562
- const { loadReviewStatuses } = await import("./review-status-C6n6-9f_.js");
636
+ const { loadReviewStatuses } = await import("./review-status-BZH8h-6W.js");
563
637
  if (loadReviewStatuses()[ctx.issueId.toUpperCase()]?.mergeStatus === "merged") return stepOk(step, ["Merge specialist confirmed merge completed"]);
564
638
  } catch {}
565
- const { stdout: branchExists } = await execAsync(`git branch --list "${branchName}" 2>/dev/null || true`, {
639
+ const featureResult = await verifyConventionBranchMerged(ctx, featureBranchName);
640
+ if (featureResult?.success) return featureResult;
641
+ const strikeResult = await verifyConventionBranchMerged(ctx, strikeBranchName);
642
+ if (strikeResult?.success && !strikeResult.skipped) return stepOk(step, [...strikeResult.details ?? [], `Superseded ${featureBranchName} residual: ${featureResult?.error ?? "Feature branch is absent; positive merge evidence is required"}`]);
643
+ if (featureResult) return featureResult;
644
+ return stepFailed(step, BRANCH_ABSENT_MERGE_ERROR);
645
+ } catch (err) {
646
+ return stepFailed(step, `Could not verify merge: ${err.message}`);
647
+ }
648
+ }
649
+ async function verifyConventionBranchMerged(ctx, branchName) {
650
+ const step = "close-out:verify-merged";
651
+ const { stdout: branchExists } = await execAsync(`git branch --list "${branchName}" 2>/dev/null || true`, {
652
+ cwd: ctx.projectPath,
653
+ encoding: "utf-8"
654
+ });
655
+ if (branchExists.trim()) try {
656
+ await execAsync(`git merge-base --is-ancestor ${branchName} main`, {
566
657
  cwd: ctx.projectPath,
567
658
  encoding: "utf-8"
568
659
  });
569
- if (branchExists.trim()) try {
570
- await execAsync(`git merge-base --is-ancestor ${branchName} main`, {
660
+ const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
661
+ if (remoteCheck && !remoteCheck.success) return remoteCheck;
662
+ return stepOk(step, ["All commits merged to main", ...remoteCheck?.details ?? []]);
663
+ } catch {
664
+ try {
665
+ const { stdout: codeDiff } = await execAsync(`git diff main...${branchName} -- ':!.planning' ':!docs/prds' ':!.overdeck/prompts' 2>/dev/null || true`, {
571
666
  cwd: ctx.projectPath,
572
667
  encoding: "utf-8"
573
668
  });
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) {
669
+ if (!codeDiff.trim()) {
591
670
  const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
592
671
  if (remoteCheck && !remoteCheck.success) return remoteCheck;
593
- return stepOk(step, [...githubMerged.details ?? [], ...remoteCheck?.details ?? []]);
672
+ return stepOk(step, ["Code changes squash-merged to main (only planning artifacts remain on branch)", ...remoteCheck?.details ?? []]);
594
673
  }
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.`);
674
+ } catch {}
675
+ const githubMerged = await verifySquashMergedPrByBranch(ctx, branchName, branchName);
676
+ if (githubMerged?.success) {
677
+ const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
678
+ if (remoteCheck && !remoteCheck.success) return remoteCheck;
679
+ return stepOk(step, [...githubMerged.details ?? [], ...remoteCheck?.details ?? []]);
609
680
  }
610
- const { stdout: remoteBranch } = await execAsync(`git ls-remote --heads origin "${branchName}" 2>/dev/null || true`, {
681
+ if (githubMerged) return githubMerged;
682
+ const { stdout: unmerged } = await execAsync(`git log main..${branchName} --oneline 2>/dev/null || true`, {
611
683
  cwd: ctx.projectPath,
612
684
  encoding: "utf-8"
613
685
  });
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}`);
686
+ const count = unmerged.trim() ? unmerged.trim().split("\n").length : 0;
687
+ if (ctx.github) try {
688
+ const { stdout: issueState } = await execAsync(`gh issue view ${ctx.github.number} --repo ${ctx.github.owner}/${ctx.github.repo} --json state --jq '.state'`, {
689
+ cwd: ctx.projectPath,
690
+ encoding: "utf-8"
691
+ });
692
+ if (issueState.trim().toUpperCase() === "CLOSED") return stepSkipped(step, [`Issue already closed on GitHub; ${count} unmerged commit(s) remain on ${branchName}`]);
693
+ } catch {}
694
+ return stepFailed(step, `${count} unmerged commit(s) on ${branchName}. Merge before closing out.`);
695
+ }
696
+ const { stdout: remoteBranch } = await execAsync(`git ls-remote --heads origin "${branchName}" 2>/dev/null || true`, {
697
+ cwd: ctx.projectPath,
698
+ encoding: "utf-8"
699
+ });
700
+ if (remoteBranch.trim()) {
701
+ await execAsync(`git fetch origin ${branchName}`, { cwd: ctx.projectPath }).catch(() => {});
702
+ const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
703
+ if (remoteCheck) return remoteCheck;
622
704
  }
705
+ return null;
623
706
  }
624
707
  async function verifyRemoteBranchIfPresent(ctx, branchName) {
625
708
  const step = "close-out:verify-merged";
@@ -783,7 +866,7 @@ async function resetIssueToTodoImpl(ctx) {
783
866
  */
784
867
  async function resetPostMergeStateForIssue(issueId) {
785
868
  try {
786
- const { resetPostMergeState } = await import("./merge-agent-BQM3a8z5.js");
869
+ const { resetPostMergeState } = await import("./merge-agent-DrXa1CpW.js");
787
870
  resetPostMergeState(issueId);
788
871
  resetPostMergeState(issueId.toUpperCase());
789
872
  } catch {
@@ -799,7 +882,7 @@ function clearReviewStatusStep(issueId) {
799
882
  async function clearReviewStatusStepImpl(issueId) {
800
883
  const step = "clear-review-status";
801
884
  try {
802
- const { clearReviewStatus } = await import("./review-status-C6n6-9f_.js");
885
+ const { clearReviewStatus } = await import("./review-status-BZH8h-6W.js");
803
886
  clearReviewStatus(issueId.toUpperCase());
804
887
  return stepOk(step, ["Review status cleared"]);
805
888
  } catch {
@@ -866,4 +949,4 @@ async function resetIssueToCanceledImpl(ctx) {
866
949
  //#endregion
867
950
  export { deepWipe as a, closeOut as i, cancelIssueWorkflow as n, resetToTodo as o, close as r, verifyBranchMergedImpl as s, approve as t };
868
951
 
869
- //# sourceMappingURL=workflows-C9WmILql.js.map
952
+ //# sourceMappingURL=workflows-D0oip4eV.js.map
@@ -1,3 +1,3 @@
1
- import { i as injectMemoryHookSettings, n as init_workspace, r as injectCavemanSettings, t as determineCavemanVariant } from "./workspace-BVl4rihN.js";
1
+ import { i as injectMemoryHookSettings, n as init_workspace, r as injectCavemanSettings, t as determineCavemanVariant } from "./workspace-C0fH3aek.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-DvyMuOle.js";
3
- import { i as init_settings, t as areMemoryObservationsEnabled } from "./settings-BZ5m1UCl.js";
2
+ import { Fr as init_errors, Tr as FsError } from "./config-yaml-CmOPzmBb.js";
3
+ import { i as init_settings, t as areMemoryObservationsEnabled } from "./settings-Bse1Pdcj.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-BVl4rihN.js.map
241
+ //# sourceMappingURL=workspace-C0fH3aek.js.map
@@ -0,0 +1,3 @@
1
+ import { n as init_workspace_anchor_drift, t as evaluateWorkspaceAnchorDrift } from "./workspace-anchor-drift-CZKofakh.js";
2
+ init_workspace_anchor_drift();
3
+ export { evaluateWorkspaceAnchorDrift };
@@ -0,0 +1,224 @@
1
+ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
+ import { _n as isStatePlanePath, hn as init_state_plane, pn as STATE_PLANE_PATHS } from "./config-yaml-CmOPzmBb.js";
3
+ import { a as init_git_utils, o as parseCompositeSnapshot, u as snapshotWorkspaceHeadsPromise } from "./git-utils-ameCgDdy.js";
4
+ import { execFile, spawn } from "child_process";
5
+ import { promisify } from "util";
6
+ //#region ../../lib/pipeline-state-paths.ts
7
+ function isPipelineStatePath(relativePath) {
8
+ return isStatePlanePath(relativePath);
9
+ }
10
+ async function getEffectiveCodeCommit(workspacePath, headCommit = "HEAD") {
11
+ let current = (await gitStdout(workspacePath, ["rev-parse", headCommit])).trim();
12
+ const seen = /* @__PURE__ */ new Set();
13
+ while (current && !seen.has(current)) {
14
+ seen.add(current);
15
+ let parent;
16
+ try {
17
+ parent = (await gitStdout(workspacePath, ["rev-parse", `${current}^`])).trim();
18
+ } catch {
19
+ return current;
20
+ }
21
+ const changedPaths = await changedPathsBetween(workspacePath, parent, current);
22
+ if (changedPaths.length > 0 && changedPaths.every(isPipelineStatePath)) {
23
+ current = parent;
24
+ continue;
25
+ }
26
+ return current;
27
+ }
28
+ return current;
29
+ }
30
+ async function haveSameEffectiveCodeCommit(workspacePath, leftCommit, rightCommit) {
31
+ const [leftEffective, rightEffective] = await Promise.all([getEffectiveCodeCommit(workspacePath, leftCommit), getEffectiveCodeCommit(workspacePath, rightCommit)]);
32
+ return leftEffective === rightEffective;
33
+ }
34
+ /**
35
+ * True when `leftCommit` and `rightCommit` introduce the same non-state-plane
36
+ * contribution relative to their own merge-base with `baseRef`.
37
+ *
38
+ * A rebase onto a newer base rewrites every commit SHA on the branch, so the
39
+ * SHA-based `haveSameEffectiveCodeCommit` reports a change even though the patch
40
+ * the branch applies is byte-for-byte identical. Comparing the merge-base-
41
+ * relative diff by git patch-id — content, not SHA — recognises such a rebase as
42
+ * benign, so a passed review is not needlessly invalidated (PAN-2468). Returns
43
+ * false if either contribution cannot be computed.
44
+ */
45
+ async function haveSameCodeContribution(workspacePath, leftCommit, rightCommit, baseRef = "origin/main") {
46
+ const [left, right] = await Promise.all([codeContributionPatchId(workspacePath, leftCommit, baseRef), codeContributionPatchId(workspacePath, rightCommit, baseRef)]);
47
+ return left !== null && right !== null && left === right;
48
+ }
49
+ /**
50
+ * git patch-id of the non-state-plane diff `commit` introduces relative to its
51
+ * merge-base with `baseRef`. Returns a stable sentinel when the contribution has
52
+ * no code changes, or null when it cannot be computed (missing base, git error).
53
+ */
54
+ async function codeContributionPatchId(workspacePath, commit, baseRef) {
55
+ let base;
56
+ try {
57
+ base = (await gitStdout(workspacePath, [
58
+ "merge-base",
59
+ baseRef,
60
+ commit
61
+ ])).trim();
62
+ } catch {
63
+ return null;
64
+ }
65
+ if (!base) return null;
66
+ let diff;
67
+ try {
68
+ diff = await gitStdout(workspacePath, [
69
+ "diff",
70
+ `${base}..${commit}`,
71
+ "--",
72
+ ".",
73
+ ...STATE_PLANE_DIFF_EXCLUDES
74
+ ]);
75
+ } catch {
76
+ return null;
77
+ }
78
+ if (!diff.trim()) return "no-code-contribution";
79
+ return patchIdOfDiff(workspacePath, diff);
80
+ }
81
+ /** Reduce a unified diff to a stable git patch-id (content hash of the patch). */
82
+ function patchIdOfDiff(workspacePath, diff) {
83
+ return new Promise((resolve) => {
84
+ const child = spawn("git", ["patch-id", "--stable"], { cwd: workspacePath });
85
+ let out = "";
86
+ child.stdout.on("data", (chunk) => out += chunk);
87
+ child.on("error", () => resolve(null));
88
+ child.on("close", () => {
89
+ resolve((out.trim().split(/\s+/)[0] ?? "") || null);
90
+ });
91
+ child.stdin.on("error", () => resolve(null));
92
+ child.stdin.end(diff);
93
+ });
94
+ }
95
+ async function changedPathsBetween(workspacePath, baseCommit, headCommit) {
96
+ return (await gitStdout(workspacePath, [
97
+ "diff",
98
+ "--name-only",
99
+ baseCommit,
100
+ headCommit
101
+ ])).split("\n").map((line) => line.trim()).filter(Boolean);
102
+ }
103
+ async function gitStdout(workspacePath, args) {
104
+ const result = await execFileAsync$1("git", args, {
105
+ cwd: workspacePath,
106
+ encoding: "utf-8",
107
+ maxBuffer: 64 * 1024 * 1024
108
+ });
109
+ if (typeof result === "string") return result;
110
+ return String(result.stdout ?? "");
111
+ }
112
+ var execFileAsync$1, STATE_PLANE_DIFF_EXCLUDES;
113
+ var init_pipeline_state_paths = __esmMin((() => {
114
+ init_state_plane();
115
+ execFileAsync$1 = promisify(execFile);
116
+ STATE_PLANE_DIFF_EXCLUDES = STATE_PLANE_PATHS.map((path) => `:(exclude)${path.replace(/\/$/, "")}`);
117
+ }));
118
+ //#endregion
119
+ //#region ../../lib/workspace-anchor-drift.ts
120
+ async function haveSameTree(repoPath, leftCommit, rightCommit) {
121
+ const [left, right] = await Promise.all([execFileAsync("git", ["rev-parse", `${leftCommit}^{tree}`], {
122
+ cwd: repoPath,
123
+ encoding: "utf-8"
124
+ }), execFileAsync("git", ["rev-parse", `${rightCommit}^{tree}`], {
125
+ cwd: repoPath,
126
+ encoding: "utf-8"
127
+ })]);
128
+ return left.stdout.trim() === right.stdout.trim();
129
+ }
130
+ async function isBenignMove(repoPath, leftCommit, rightCommit, baseRef, checks) {
131
+ try {
132
+ if (await checks.sameTree(repoPath, leftCommit, rightCommit)) return true;
133
+ } catch {}
134
+ try {
135
+ if (await checks.sameEffectiveCode(repoPath, leftCommit, rightCommit)) return true;
136
+ } catch {}
137
+ try {
138
+ return await checks.sameCodeContribution(repoPath, leftCommit, rightCommit, baseRef);
139
+ } catch {
140
+ return false;
141
+ }
142
+ }
143
+ /** Compare a persisted workspace anchor with a fresh producer-issued snapshot. */
144
+ async function evaluateWorkspaceAnchorDrift(issueId, workspacePath, storedAnchor, checks = DEFAULT_CHECKS) {
145
+ const currentAnchor = await snapshotWorkspaceHeadsPromise(issueId, workspacePath);
146
+ if (!currentAnchor) return { kind: "unreadable" };
147
+ if (storedAnchor === currentAnchor) return {
148
+ kind: "current",
149
+ currentAnchor
150
+ };
151
+ const storedHeads = parseCompositeSnapshot(storedAnchor);
152
+ const currentHeads = parseCompositeSnapshot(currentAnchor);
153
+ const storedIsComposite = storedHeads.size > 0;
154
+ if (storedIsComposite !== currentHeads.size > 0) return {
155
+ kind: "drifted",
156
+ currentAnchor
157
+ };
158
+ try {
159
+ const { resolveWorkspaceRepoRootsSync } = await import("./project-repos-CRE6Ykow.js");
160
+ const roots = resolveWorkspaceRepoRootsSync(issueId, workspacePath);
161
+ if (!storedIsComposite) {
162
+ const root = roots[0];
163
+ if (!root) return {
164
+ kind: "drifted",
165
+ currentAnchor
166
+ };
167
+ return await isBenignMove(root.dir, storedAnchor, currentAnchor, `origin/${root.targetBranch}`, checks) ? {
168
+ kind: "benign",
169
+ currentAnchor
170
+ } : {
171
+ kind: "drifted",
172
+ currentAnchor
173
+ };
174
+ }
175
+ const allRepoKeys = new Set([...storedHeads.keys(), ...currentHeads.keys()]);
176
+ if (storedHeads.size !== currentHeads.size || [...allRepoKeys].some((repoKey) => !storedHeads.has(repoKey) || !currentHeads.has(repoKey))) return {
177
+ kind: "drifted",
178
+ currentAnchor,
179
+ changedRepos: [...allRepoKeys].sort()
180
+ };
181
+ const changedRepos = [...allRepoKeys].filter((repoKey) => storedHeads.get(repoKey) !== currentHeads.get(repoKey)).sort();
182
+ const rootsByKey = new Map(roots.map((root) => [root.repoKey, root]));
183
+ for (const repoKey of changedRepos) {
184
+ const root = rootsByKey.get(repoKey);
185
+ const storedHead = storedHeads.get(repoKey);
186
+ const currentHead = currentHeads.get(repoKey);
187
+ if (!root || !storedHead || !currentHead) return {
188
+ kind: "drifted",
189
+ currentAnchor,
190
+ changedRepos
191
+ };
192
+ if (!await isBenignMove(root.dir, storedHead, currentHead, `origin/${root.targetBranch}`, checks)) return {
193
+ kind: "drifted",
194
+ currentAnchor,
195
+ changedRepos
196
+ };
197
+ }
198
+ return {
199
+ kind: "benign",
200
+ currentAnchor,
201
+ changedRepos
202
+ };
203
+ } catch {
204
+ return {
205
+ kind: "drifted",
206
+ currentAnchor
207
+ };
208
+ }
209
+ }
210
+ var execFileAsync, DEFAULT_CHECKS;
211
+ var init_workspace_anchor_drift = __esmMin((() => {
212
+ init_git_utils();
213
+ init_pipeline_state_paths();
214
+ execFileAsync = promisify(execFile);
215
+ DEFAULT_CHECKS = {
216
+ sameTree: haveSameTree,
217
+ sameEffectiveCode: haveSameEffectiveCodeCommit,
218
+ sameCodeContribution: haveSameCodeContribution
219
+ };
220
+ }));
221
+ //#endregion
222
+ export { init_workspace_anchor_drift as n, evaluateWorkspaceAnchorDrift as t };
223
+
224
+ //# sourceMappingURL=workspace-anchor-drift-CZKofakh.js.map