@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
@@ -16,10 +16,12 @@ allowed-tools:
16
16
  - Read
17
17
  ---
18
18
 
19
- # Overdeck Dashboard Restart (production-safe, detached)
19
+ # Overdeck Dashboard Restart (production-safe)
20
20
 
21
21
  The dashboard the browser talks to is the **pre-built `dist/dashboard/server.js` running under Node 22**, started from the **primary repo checkout** (NOT a `workspaces/feature-*` copy). It serves both the built frontend and the API on one port. **Never** run the production server via `npm run dev`, `tsx`, `vite`, or Bun — that violates the dashboard-node22-only rule (node-pty native addon + circular ESM). `pan dev` is the *development* path (vite HMR for the frontend + Node server); `pan up` is the *production* path.
22
22
 
23
+ The **supervisor sidecar** (`overdeck-supervisor.service`, port 3012) owns the dashboard lifecycle: it health-checks the server and respawns it as a systemd unit with the full env from `config.yaml`. Restart **through** it (`POST :3012/restart-dashboard`) — a manually spawned server is a duplicate it will replace, and racing it costs minutes of churn. The manual detached start below is the fallback for when the supervisor itself is down, and it must carry the Traefik env block (gotcha 7).
24
+
23
25
  ## When to use this skill
24
26
 
25
27
  `pan up` / `pan restart` is the normal path. Reach for this manual procedure **only** when:
@@ -35,33 +37,53 @@ The dashboard the browser talks to is the **pre-built `dist/dashboard/server.js`
35
37
  3. **Exactly ONE server.** Two servers = two deacons racing the same `~/.overdeck` state (the duel), and the PAN-1625 janitor reaps/churns extras. A single port-owner is left alone.
36
38
  4. **Work-agent tmux sessions survive a dashboard restart** — they are separate processes on the `overdeck` socket. Restarting the dashboard does NOT kill agents; the new deacon reconciles them as running.
37
39
  5. **Run from the primary repo**, not a workspace. If `readlink /proc/<pid>/cwd` is a `workspaces/feature-*` path, a workspace dashboard hijacked the port — kill it and restart from the primary checkout.
40
+ 6. **The supervisor sidecar owns the dashboard lifecycle.** `overdeck-supervisor.service` (port 3012) health-checks the dashboard and respawns it as a systemd unit with the full env from `config.yaml`. A manual server you spawn yourself is a duplicate it will replace — so restart THROUGH the supervisor (below) instead of racing it, and never kill a systemd-parented server that carries `OVERDECK_TRAEFIK_*` env: that is the supervisor's correctly-configured replacement, not a stray.
41
+ 7. **A bare `node dist/dashboard/server.js` launch 403s the domain on dists without the config fallback.** `getTrustedOrigins()` reads the launch env; no `OVERDECK_TRAEFIK_*` → only loopback is trusted → `/ws/*` 403s `https://overdeck.localhost` → the dashboard hangs on "Reconnecting to the dashboard…" while `localhost:3011` works. `/api/health` returns 200 the whole time because it does no origin validation. Newer dists fall back to `config.yaml` (commit `e86d125071`), but always launch WITH the env block below — it costs nothing and works on every dist.
38
42
 
39
43
  ## Procedure
40
44
 
41
45
  ```bash
42
46
  cd ~/Projects/overdeck # the PRIMARY checkout
43
47
 
48
+ # 0. Domain comes from config.yaml — the same source pan up / the supervisor use
49
+ DOMAIN=$(awk '/^traefik:/{f=1} f && /^ domain:/{print $2; exit}' ~/.overdeck/config.yaml)
50
+ DOMAIN=${DOMAIN:-overdeck.localhost}
51
+
44
52
  # 1. Rebuild ONLY if you changed server/lib source (the Node 22 dist is what runs)
45
53
  npm run build
46
54
 
47
- # 2. Find the live dashboard port + PID, kill by EXPLICIT PID (never pkill -f self-matching)
48
- PORT_LINE=$(ss -ltnp 2>/dev/null | grep -E ':(3010|3011|3012)\b' | grep node | head -1)
49
- OLD=$(echo "$PORT_LINE" | grep -oE 'pid=[0-9]+' | head -1 | cut -d= -f2)
50
- echo "current server: pid=$OLD"
55
+ # 2. PREFERRED: restart through the supervisor (it owns the lifecycle, sets the
56
+ # correct env from config.yaml, and systemd-manages the result). Skip to step 3
57
+ # only when port 3012 refuses connections.
58
+ curl -s -X POST http://127.0.0.1:3012/restart-dashboard # → 202 Accepted
59
+
60
+ # 3. Supervisor down? Manual detached start — WITH the Traefik env block (gotcha 7).
61
+ # Kill the old server by EXPLICIT PID (never pkill -f self-matching).
62
+ OLD=$(ss -ltnp 2>/dev/null | grep -E ':3011\b' | grep node | grep -oE 'pid=[0-9]+' | head -1 | cut -d= -f2)
51
63
  [ -n "$OLD" ] && kill -TERM "$OLD"
52
64
  for i in $(seq 1 15); do { [ -n "$OLD" ] && kill -0 "$OLD" 2>/dev/null; } && sleep 1 || break; done
53
65
  { [ -n "$OLD" ] && kill -0 "$OLD" 2>/dev/null; } && kill -9 "$OLD"
54
66
 
55
- # 3. Start ONE fully-detached server (survives the shell; not a child of any wrapper).
56
- # PORT is inherited from the environment; set it explicitly if you need a specific port.
57
- setsid bash -c 'exec node dist/dashboard/server.js' > /tmp/pan-dash.log 2>&1 < /dev/null &
67
+ setsid env \
68
+ DASHBOARD_URL="https://${DOMAIN}" OVERDECK_TRAEFIK_ENABLED=1 \
69
+ OVERDECK_TRAEFIK_DOMAIN="${DOMAIN}" OVERDECK_TRUSTED_ORIGINS="https://${DOMAIN}" \
70
+ DASHBOARD_PORT=3010 API_PORT=3011 PORT=3011 OVERDECK_MODE=production \
71
+ bash -c 'exec node dist/dashboard/server.js' > /tmp/pan-dash.log 2>&1 < /dev/null &
58
72
 
59
- # 4. Verify health (Traefik routes overdeck.localhost -> the API port)
73
+ # 4. Verify health AND the WebSocket origin path. /api/health does no origin
74
+ # validation — it returns 200 even while /ws/* 403s the domain (gotcha 7).
75
+ # The WS check is the only one that proves the browser can actually connect.
60
76
  for i in $(seq 1 40); do
61
- code=$(curl -sk -o /dev/null -w '%{http_code}' --max-time 3 https://overdeck.localhost/api/health 2>/dev/null)
77
+ code=$(curl -sk -o /dev/null -w '%{http_code}' --max-time 3 "https://${DOMAIN}/api/health" 2>/dev/null)
62
78
  [ "$code" = 200 ] && { echo "healthy after ${i}s"; break; }
63
79
  sleep 1
64
80
  done
81
+ ws=$(curl -sk -o /dev/null -w '%{http_code}' --http1.1 --max-time 5 \
82
+ -H "Origin: https://${DOMAIN}" -H "Connection: Upgrade" -H "Upgrade: websocket" \
83
+ -H "Sec-WebSocket-Version: 13" -H "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==" \
84
+ "https://${DOMAIN}/ws/rpc")
85
+ [ "$ws" = 101 ] && echo "WS origin OK" \
86
+ || echo "WS origin FAILED (got $ws) — server does not trust the domain; relaunch with the env block (or a dist with the config fallback)"
65
87
 
66
88
  # 5. Confirm SINGLE instance, correct dist path (primary repo, not a workspace)
67
89
  ss -ltnp 2>/dev/null | grep -E ':(3010|3011)\b'
@@ -79,6 +101,7 @@ readlink -f /proc/$NEW/cwd # must be the primary repo path
79
101
  ## Verify success
80
102
 
81
103
  - `overdeck.localhost/api/health` returns `{"status":"ok"}` and `curl http://localhost:<port>/api/health` returns 200.
104
+ - **The WebSocket origin check returns 101** (procedure step 4). Health alone is not success — a server missing its Traefik env is healthy on `/api/health` and dead to the browser at the same time.
82
105
  - Exactly one **host-level** `node dist/dashboard/server.js` process; its `/proc/<pid>/cwd` is the primary repo.
83
106
  **Do not count workspace-container servers.** Each running workspace devcontainer has its own `server` service whose `dist/dashboard/server.js` process is visible in host `ps` — those are legitimate read/UI peers (cwd `/workspaces/overdeck`, parent `containerd-shim`, `OVERDECK_DISABLE_DEACON=1`), NOT duplicate dashboards and NOT a single-deacon hazard. Seeing N+1 server processes with N containers up is the healthy state. Container-aware census:
84
107
  ```bash
@@ -89,6 +112,7 @@ readlink -f /proc/$NEW/cwd # must be the primary repo path
89
112
  done
90
113
  ```
91
114
  Exactly one `HOST` line, with cwd = the primary repo, is success. Multiple `HOST` lines = a real orphan (the deacon's orphan-server reaper, PAN-1625, will also catch it).
115
+ - **Do not kill the supervisor's server.** If a HOST server is parented to systemd and its env contains `OVERDECK_TRAEFIK_DOMAIN`, it is the supervisor's correctly-configured managed instance (gotcha 6). If you spawned a manual server and then see a second one appear, kill YOURS (the one without the Traefik env), never the supervisor's.
92
116
  - Agent tmux sessions (`tmux -L overdeck list-sessions`) are intact.
93
117
  - The deacon log (`/tmp/pan-dash.log` or the dashboard log) shows a single `Deacon started` and patrols advancing — no `received SIGTERM` loop.
94
118
 
@@ -0,0 +1,97 @@
1
+ #!/bin/bash
2
+ # PostToolUse + PostToolUseFailure hook for structured Linear MCP OAuth
3
+ # intervention events (PAN-2997). Registered with matcher mcp__linear__.* for
4
+ # both hook events: PostToolUse fires after a tool call SUCCEEDS, while a
5
+ # failed MCP call — the motivating OAuth-expired case — fires
6
+ # PostToolUseFailure with a top-level `error` field and no tool_response.
7
+ #
8
+ # Never breaks Claude Code: every failure exits 0 silently.
9
+
10
+ set +e
11
+
12
+ INPUT=$(cat 2>/dev/null || echo '{}')
13
+ command -v jq >/dev/null 2>&1 || exit 0
14
+
15
+ TOOL_NAME=$(printf '%s' "$INPUT" | jq -r '.tool_name // ""' 2>/dev/null)
16
+ [[ "$TOOL_NAME" == mcp__linear__* ]] || exit 0
17
+
18
+ EVENT_NAME=$(printf '%s' "$INPUT" | jq -r '.hook_event_name // "PostToolUse"' 2>/dev/null)
19
+
20
+ SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
21
+ # shellcheck source=pan-hook-lib.sh
22
+ . "$SCRIPT_DIR/pan-hook-lib.sh" 2>/dev/null || exit 0
23
+ declare -f pan_resolve_agent_id >/dev/null 2>&1 || exit 0
24
+ pan_resolve_agent_id || exit 0
25
+ declare -f pan_emit_event >/dev/null 2>&1 || exit 0
26
+
27
+ MARKER_DIR="${OVERDECK_HOME:-$HOME/.overdeck}/agents/$AGENT_ID"
28
+ MARKER="$MARKER_DIR/linear-mcp-auth-pending"
29
+
30
+ # Auth-failure classifier. The 401 alternative requires a non-identifier
31
+ # boundary on both sides so ordinary Linear data (MIN-401, "AUR-4015") can
32
+ # never match; prose phrases are matched as words.
33
+ is_auth_error_text() {
34
+ printf '%s' "$1" | grep -Eiq 'requires authentication|not authenticated|unauthorized|(^|[^0-9A-Za-z-])401([^0-9]|$)'
35
+ }
36
+
37
+ emit_required() {
38
+ local auth_url="$1"
39
+ local body
40
+ body=$(jq -n --arg authUrl "$auth_url" '{
41
+ kind: "linear_mcp_auth_required",
42
+ authUrl: (if $authUrl == "" then null else $authUrl end)
43
+ }' 2>/dev/null) || return 0
44
+ pan_emit_event "$AGENT_ID" "$body" >/dev/null 2>&1 || true
45
+ mkdir -p "$MARKER_DIR" 2>/dev/null || true
46
+ : > "$MARKER" 2>/dev/null || true
47
+ }
48
+
49
+ emit_healthy_if_pending() {
50
+ [ -f "$MARKER" ] || return 0
51
+ local body
52
+ body=$(jq -n '{kind: "linear_mcp_auth_healthy"}' 2>/dev/null) || return 0
53
+ pan_emit_event "$AGENT_ID" "$body" >/dev/null 2>&1 || true
54
+ rm -f "$MARKER" 2>/dev/null || true
55
+ }
56
+
57
+ if [ "$EVENT_NAME" = "PostToolUseFailure" ]; then
58
+ # Documented failure-event shape: top-level `error`, no tool_response.
59
+ ERROR_TEXT=$(printf '%s' "$INPUT" | jq -r '.error // ""' 2>/dev/null)
60
+ if is_auth_error_text "$ERROR_TEXT"; then
61
+ emit_required ''
62
+ fi
63
+ exit 0
64
+ fi
65
+
66
+ # PostToolUse — successful tool call.
67
+ RESPONSE=$(printf '%s' "$INPUT" | jq -r '
68
+ (.tool_response // .tool_result // "")
69
+ | if type == "string" then . else tojson end
70
+ ' 2>/dev/null)
71
+ [ -n "$RESPONSE" ] || RESPONSE=''
72
+
73
+ if [ "$TOOL_NAME" = 'mcp__linear__authenticate' ]; then
74
+ AUTH_URL=$(printf '%s\n' "$RESPONSE" \
75
+ | grep -Eo 'https://linear\.app/oauth/authorize[^"[:space:]<>]*' 2>/dev/null \
76
+ | sed -n '1p')
77
+ emit_required "$AUTH_URL"
78
+ exit 0
79
+ fi
80
+
81
+ # An MCP server can report a failure inside a successful hook event as an
82
+ # error-shaped payload (isError: true, or an `error` member). Only those
83
+ # payloads are auth-classified — ordinary successful result data (issue
84
+ # identifiers like MIN-401, titles mentioning 401s or "unauthorized") never
85
+ # reaches this check and simply clears any pending intervention below.
86
+ ERROR_SHAPED=$(printf '%s' "$INPUT" | jq -r '
87
+ (.tool_response // .tool_result // {})
88
+ | if type == "object" and ((.isError == true) or (.error != null)) then "yes" else "" end
89
+ ' 2>/dev/null)
90
+
91
+ if [ -n "$ERROR_SHAPED" ] && is_auth_error_text "$RESPONSE"; then
92
+ emit_required ''
93
+ exit 0
94
+ fi
95
+
96
+ emit_healthy_if_pending
97
+ exit 0
@@ -0,0 +1,9 @@
1
+ ---
2
+ scope: universal
3
+ ---
4
+ ### Make every AskUserQuestion prompt self-contained
5
+
6
+ Every AskUserQuestion must stand alone because the operator may answer from a
7
+ dashboard dialog without the preceding transcript. State the situation in one
8
+ or two sentences, ask for the decision in plain language, and describe each
9
+ option by the consequence of choosing it rather than by a label alone.
@@ -35,15 +35,17 @@ Each overridable row has one explicit acceptance flag:
35
35
  ```text
36
36
  --accept-review Row 1: review passed
37
37
  --accept-tests Row 2: tests passed
38
- --accept-verification Row 3: branch verification passed at lastVerifiedCommit
38
+ --accept-verification Row 3: branch verification passed
39
39
  --accept-merged Row 4: PR merged on the forge
40
40
  --accept-post-merge Row 5: post-merge lifecycle completed
41
41
  --accept-main-verify Row 6: merge commit verified on main
42
42
  --accept-deploy Row 7: live dashboard build includes the merge
43
43
  ```
44
44
 
45
- An acceptance records the flag, operator/agent identity, and timestamp in the
46
- issue close-out record. Use it only when the missing evidence is understood:
45
+ An acceptance records the flag, operator identity, and timestamp in the issue
46
+ close-out record. The autonomous flywheel may run a clean close-out, but it cannot
47
+ use `--accept-*`; an operator must apply every override after reviewing the miss.
48
+ Use an override only when the missing evidence is understood:
47
49
 
48
50
  ```bash
49
51
  pan close PAN-1234 --force
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pan-merge
3
- description: "pan merge — cancel pending Flywheel auto-merges during the cooldown window"
3
+ description: "pan merge — cancel actionable Flywheel auto-merge rows"
4
4
  triggers:
5
5
  - pan merge
6
6
  - cancel auto-merge
@@ -12,7 +12,7 @@ allowed-tools:
12
12
 
13
13
  # pan merge
14
14
 
15
- Use this skill when cancelling a pending Flywheel auto-merge before its cooldown expires.
15
+ Use this skill when cancelling a pending, blocked, or failed Flywheel auto-merge row.
16
16
 
17
17
  ## Commands
18
18
 
@@ -26,12 +26,14 @@ pan merge cancel <id>
26
26
  pan merge cancel PAN-123
27
27
  ```
28
28
 
29
- Cancels a pending Flywheel auto-merge for the issue id. The command calls the dashboard `DELETE /api/flywheel/auto-merge/:id` endpoint, removes the entry from the active pending list, and announces `auto-merge cancelled for <issueId>`.
29
+ Cancels one actionable Flywheel auto-merge row for the issue id. The command calls the dashboard `DELETE /api/flywheel/auto-merge/:id` endpoint, removes that row from the active or problems list, and announces `auto-merge cancelled for <issueId>`.
30
30
 
31
- If the cooldown has already expired and the executor transitioned the entry to `merging`, the command exits non-zero and reports that the merge is already in progress. If there is no active pending auto-merge for the issue, it exits non-zero with `No pending auto-merge for <id>`.
31
+ An issue can hold duplicate rows from separate scheduling attempts. When more actionable rows remain, the success message reports the count and tells you to re-run `pan merge cancel <id>` to clear the next row; repeat until the normal success message contains no remaining-row notice.
32
+
33
+ If the cooldown has already expired and the selected row transitioned to `merging`, the command exits non-zero and reports that the merge is already in progress. If there is no actionable auto-merge row for the issue, it exits non-zero with `No pending auto-merge for <id>`.
32
34
 
33
35
  ## Guardrails
34
36
 
35
- - Use this only during the five-minute auto-merge cooldown window.
37
+ - A pending row is cancellable during the five-minute cooldown; blocked and failed rows remain cancellable afterward.
36
38
  - Do not use raw HTTP when the CLI is available; the CLI supplies the dashboard internal token.
37
39
  - A `merging` entry cannot be cancelled safely; let the merge pipeline finish or fail visibly.
@@ -0,0 +1,195 @@
1
+ ---
2
+ name: pan-peer-review
3
+ description: "Workflow: spawn an independent adversarial reviewer on a different model to verify or refute your own findings. EXPENSIVE — invoke only when the operator explicitly asks for a peer/second-opinion review."
4
+ triggers:
5
+ - peer review my findings
6
+ - get independent feedback
7
+ - second opinion from another model
8
+ - have another model review this
9
+ - adversarial review of my analysis
10
+ allowed-tools:
11
+ - Bash
12
+ - Read
13
+ - Write
14
+ ---
15
+
16
+ # pan peer-review — independent second opinion from another model
17
+
18
+ Spawn a conversation on a **different model family** to adversarially verify or
19
+ refute an analysis you produced, then read its findings back. Use it when a
20
+ conclusion is expensive to get wrong: a root-cause diagnosis about to become a
21
+ PRD, a refactor plan, a security claim, a "this is safe to merge" call.
22
+
23
+ ## ⚠️ Operator-invoked only — never launch this on your own initiative
24
+
25
+ **Do not start a peer review because you think your work would benefit from
26
+ one.** A peer review spawns a second full agent that reads source, burns a
27
+ frontier-model context, and runs for many minutes. That cost is the operator's
28
+ call, not yours.
29
+
30
+ Launch only when the operator explicitly asks — "get a second opinion", "run
31
+ this by another model", "have K3 review it", "peer review this". If you believe
32
+ a review is warranted and they have not asked, say so in one sentence and let
33
+ them decide.
34
+
35
+ Corollary: never chain reviews. One reviewer, one pass. If the reviewer
36
+ disagrees with you, bring the disagreement back to the operator rather than
37
+ spawning a third model to break the tie.
38
+
39
+ ## Why a different model, and what "independent" buys you
40
+
41
+ A reviewer on the same model as the author tends to agree — it reconstructs the
42
+ same reasoning from the same priors. The value comes from a different family
43
+ reading the same source: Opus/Fable reviewing GPT work, K3 reviewing Claude
44
+ work, GPT reviewing Claude work.
45
+
46
+ Pick the reviewer by contrast with whoever produced the analysis:
47
+
48
+ | Author | Good reviewer |
49
+ | --- | --- |
50
+ | Claude (Opus/Fable/Sonnet) | `k3` (Kimi), `gpt-5.6-sol` |
51
+ | GPT | `claude-opus-5`, `k3` |
52
+ | Kimi | `claude-opus-5`, `gpt-5.6-sol` |
53
+
54
+ Never pass `--harness`. Harness routing is config-owned and the operator sets it
55
+ deliberately; `--model` is the only routing flag this workflow uses, and only
56
+ because the operator asked for a specific reviewer.
57
+
58
+ Leave reasoning effort alone. It inherits `high`, which is the right tier —
59
+ never raise it to `xhigh`/`max` for a review.
60
+
61
+ ## The workflow
62
+
63
+ ### 1. Write the brief to a file — never into the focus
64
+
65
+ The `pan handoff` focus is hard-capped at 500 characters. A real review brief is
66
+ thousands. Write it to a file in the reviewer's future cwd and let the focus
67
+ point at it.
68
+
69
+ A brief that produces a useful review has these parts:
70
+
71
+ - **Adversarial framing, stated first.** "Assume each claim may be wrong. A
72
+ claim that survives refutation is worth more than agreement. Do not soften
73
+ findings to be agreeable." Without this you get a politeness echo.
74
+ - **Read-only rules.** No edits to source, no commits, no `pan` commands, no
75
+ POST/DELETE. The reviewer writes exactly one file: its findings.
76
+ - **A glossary** of every term of art before you use it — the reviewer has none
77
+ of your conversation's context.
78
+ - **Absolute paths for evidence outside the worktree** — live workspaces, logs,
79
+ config, API endpoints. The reviewer cannot find them otherwise.
80
+ - **Each claim stated separately**, with the exact file:line it rests on, the
81
+ evidence you used, and the fix you propose.
82
+ - **Per-claim questions that invite refutation** — "does the fix actually
83
+ terminate the loop?", "what is the blast radius?", "would this regress the
84
+ monorepo path?". Generic "please review" produces generic output.
85
+ - **Cross-cutting questions**, including at least one that asks for things you
86
+ did *not* find: "search for every other site with this pattern and report any
87
+ beyond the ones named here."
88
+ - **An explicit output contract** — a verdict vocabulary (CONFIRMED /
89
+ PARTIALLY CONFIRMED / REFUTED / CANNOT VERIFY), where to write findings, and
90
+ a request to also summarize in-conversation.
91
+
92
+ ### 2. Create a detached worktree
93
+
94
+ The reviewer needs the source, isolated from your working tree. Spawned agents
95
+ must never get the primary worktree as their cwd.
96
+
97
+ ```bash
98
+ git worktree add --detach /home/eltmon/Projects/hoff-<slug> main
99
+ ```
100
+
101
+ `--detach` is required: a plain `git worktree add <path> main` fails with
102
+ `fatal: 'main' is already used by worktree at ...` whenever main is checked out
103
+ somewhere, which on a dev machine is always. Detached HEAD is correct here —
104
+ the reviewer never commits.
105
+
106
+ Then write the brief into that worktree.
107
+
108
+ ### 3. Launch the handoff
109
+
110
+ ```bash
111
+ pan handoff --model <reviewer-model> --cwd /home/eltmon/Projects/hoff-<slug> self \
112
+ "Read REVIEW-BRIEF.md in your cwd FIRST and follow it exactly. You are an INDEPENDENT ADVERSARIAL reviewer — verify or refute each claim against real source and critique each proposed fix. Read-only. Write findings to FEEDBACK-<model>.md."
113
+ ```
114
+
115
+ `self` must come before the focus text. Omitting it makes the CLI read your
116
+ focus as a conversation name and fail with `Conversation not found`.
117
+
118
+ **The command can exceed a two-minute tool timeout while the handoff document is
119
+ authored — that is normal and does not mean it failed.** Either run it with
120
+ `run_in_background: true`, or let it time out and verify the spawn afterwards:
121
+
122
+ ```bash
123
+ tmux -L overdeck list-sessions | grep conv-
124
+ ```
125
+
126
+ ### 4. Correct the frame — the step everyone skips
127
+
128
+ `pan handoff` seeds the new conversation with an **authored handoff document
129
+ describing your session's state and open work**. It does not deliver your focus
130
+ as an instruction. The reviewer therefore wakes up believing it is *you,
131
+ continuing your work* — and if your open-work list said "launch a peer review",
132
+ it will try to launch one, recursively.
133
+
134
+ Check what it actually received before assuming it is reviewing:
135
+
136
+ ```bash
137
+ tmux -L overdeck capture-pane -t <conv-id> -p -S -30
138
+ ```
139
+
140
+ If it is acting as a continuation rather than as a reviewer, correct it with
141
+ `pan tell` (never raw tmux keystroke injection):
142
+
143
+ ```bash
144
+ pan tell <conv-id> "STOP. You are NOT continuing that conversation's work. You ARE the independent reviewer it wanted to spawn. Read <brief path> and follow it exactly. Read-only. Begin now."
145
+ ```
146
+
147
+ Budget for this step every time. Treat the handoff document as context the
148
+ reviewer happens to have, and your `pan tell` as the actual task assignment.
149
+
150
+ ### 5. Wait on the artifact, not the pane
151
+
152
+ Poll for the findings file rather than watching output scroll:
153
+
154
+ ```bash
155
+ until [ -s /home/eltmon/Projects/hoff-<slug>/FEEDBACK-<model>.md ]; do sleep 20; done
156
+ ```
157
+
158
+ Run that in the background so you can keep working.
159
+
160
+ ### 6. Read the findings critically, then report
161
+
162
+ The reviewer is not an oracle. Treat REFUTED verdicts as claims to check, the
163
+ same way you asked it to treat yours — a reviewer that misreads a call site can
164
+ be confidently wrong. Verify anything that would change what you do next.
165
+
166
+ Report back to the operator with: what the reviewer confirmed, what it refuted
167
+ and whether you agree, what it found that you missed, and where you still
168
+ disagree after checking. Never launder its output as consensus.
169
+
170
+ ### 7. Clean up
171
+
172
+ ```bash
173
+ git worktree remove /home/eltmon/Projects/hoff-<slug>
174
+ ```
175
+
176
+ Keep the findings file if it is going into an issue or PRD — copy it out before
177
+ removing the worktree.
178
+
179
+ ## Failure modes and what they mean
180
+
181
+ | Symptom | Cause | Fix |
182
+ | --- | --- | --- |
183
+ | `fatal: 'main' is already used by worktree at ...` | `git worktree add` without `--detach` | Add `--detach` |
184
+ | `Conversation not found` | Focus text passed without `self` first | `pan handoff ... self "<focus>"` |
185
+ | `Focus is N characters — the limit is 500`, no conversation created | Brief crammed into the focus | Put the brief in a file, point the focus at it |
186
+ | Handoff command times out at 2 minutes | Handoff document authoring is slow | Normal — verify the spawn with `tmux -L overdeck list-sessions` |
187
+ | Reviewer starts doing your open-work list, or tries to spawn its own review | It received the handoff doc, not your focus | `pan tell` it the real task (step 4) |
188
+ | Reviewer agrees with everything | Brief lacked adversarial framing, or reviewer shares the author's model family | Rewrite the framing; pick a different family |
189
+ | `state.json has no issueId` on `pan tell` | Informational — conversations have no issue | Ignore; the message still delivers |
190
+
191
+ ## Related
192
+
193
+ - `/pan-handoff` — the underlying command and its full semantics
194
+ - `/pan-code-review` — reviewing a *diff*; this skill reviews an *analysis*
195
+ - `/pan-tell` — the sanctioned way to message a running conversation
@@ -88,6 +88,63 @@ First-time setup for a brand-new package (npm org creation, the one-time
88
88
  bootstrap publish, configuring the Trusted Publisher) and full publish
89
89
  troubleshooting live in `docs/RELEASING.md`.
90
90
 
91
+ ## Releasing as an agent (guards you will hit)
92
+
93
+ An agent cutting a release trips guards a human operator never sees. All three
94
+ have sanctioned levers — **never reach for `--no-verify`**, which is a one-way
95
+ door.
96
+
97
+ **1. The commit path guard.** `scripts/guard-flywheel-orchestrator-commit.sh`
98
+ (via `.husky/pre-commit`) refuses a `flywheel-orchestrator` commit that touches
99
+ anything outside `docs/FLYWHEEL-STATE.md` and the state paths — and a release
100
+ commit necessarily touches three `package.json` files. The guard's own
101
+ operator-directed escape hatch is:
102
+
103
+ ```bash
104
+ OVERDECK_OPERATOR_COMMIT=1 pan release stable --version X.Y.Z
105
+ ```
106
+
107
+ It mirrors `OVERDECK_OPERATOR_PUSH=1` for the push guard. Use it only when the
108
+ operator has actually directed the release.
109
+
110
+ **2. The push guard.** `scripts/guard-agent-main-push.sh` exempts `conv-`
111
+ prefixed agent ids but not pipeline roles, so pushing `main` and the tag needs:
112
+
113
+ ```bash
114
+ OVERDECK_OPERATOR_PUSH=1 git push origin main
115
+ OVERDECK_OPERATOR_PUSH=1 git push origin vX.Y.Z
116
+ ```
117
+
118
+ **3. Preflight tests failing for the wrong reason (PAN-3081 / PAN-3189).** The
119
+ per-agent `~/.overdeck/agents/<id>/git-guard` shim used to intercept
120
+ `git reset --hard` and `git rebase` *inside test fixtures that legitimately run
121
+ them against their own temp repos*, so preflight reported failures that did not
122
+ exist — **10 failures with the shim on `PATH`, 0 without.**
123
+
124
+ PAN-3189 fixed both halves at the source: the guard now fires only for git
125
+ commands targeting the agent's own worktree, and each launcher strips any
126
+ inherited guard directory from `PATH` before installing its own. A session
127
+ spawned since that landed needs no workaround.
128
+
129
+ A session started *before* it — or any shell that inherited an old shim — can
130
+ still see the artifact. Check first, and only reach for the workaround if the
131
+ shim is actually there:
132
+
133
+ ```bash
134
+ echo $PATH | tr ':' '\n' | grep git-guard # expect: your own agent's dir, or nothing
135
+ CLEAN=$(echo $PATH | tr ':' '\n' | grep -v git-guard | paste -sd:)
136
+ PATH="$CLEAN" npm test # must be genuinely green
137
+ pan release stable --version X.Y.Z --skip-tests
138
+ ```
139
+
140
+ `--skip-tests` is legitimate **only** when you have run the suite clean and seen
141
+ it pass. It skips a corrupted measurement, not the verification itself.
142
+
143
+ **Ordering note.** If `git push origin main` is rejected because the remote moved
144
+ ahead, merge rather than rebase (`git rebase` is blocked by the agent git guard)
145
+ and push again. Push the tag even if `main` is momentarily behind — the tag is
146
+ its own ref and triggers the publish workflow independently.
147
+
91
148
  ## Notes
92
149
 
93
150
  - Stable is for “ship this to normal users now.”
@@ -11,17 +11,17 @@ Use this after code changes that should run in the local Overdeck dashboard.
11
11
 
12
12
  ```bash
13
13
  pan reload
14
- pan reload --force # explicitly bypass the agent deploy-window gate
14
+ pan reload --force # explicit operator bypass of the deploy-window gate
15
15
  ```
16
16
 
17
- `pan reload` runs `bun install` and then `npm run build` first. If either fails, it leaves the current dashboard running and exits non-zero. If both succeed, it restarts the dashboard and waits for `http://127.0.0.1:3011/api/health`.
17
+ `pan reload` fetches `origin/main`, creates a temporary detached worktree at that commit, and runs `bun install` followed by `npm run build` there — never in the primary working tree. If the primary tree has uncommitted changes or its `HEAD` differs from `origin/main`, the command notes that those changes are excluded and continues with the canonical build. If installation or build fails, it leaves the current dashboard running and exits non-zero; after a successful build, it keeps the detached worktree as the active deployment root and launches its `dist/dashboard/server.js` with its canonical runtime dependencies and workspace packages intact, leaves the primary checkout's `node_modules/` untouched, refreshes the primary `dist/` CLI mirror with a dependency link back to that deployment root, then restarts the dashboard and waits for `http://127.0.0.1:3011/api/health`. Deployments alternate between two fixed generation worktrees. A failure before the new process is left running restores the prior marker and primary `dist/` and removes the failed generation. A health timeout keeps the new deployment active because the dashboard is deliberately left running so a slow boot can finish or a failed boot can be inspected. Retries still reuse one of the two fixed slots, so failures cannot accumulate unbounded dependency trees.
18
18
 
19
19
  `npm run build` already rebuilds the dashboard **server** bundle (via `build-post-cli.mjs` → `build:dashboard:server:bundle`), so `pan reload` picks up server/deacon code changes — you do **not** need a separate `npm run build:dashboard:server`. The `bun install` step runs first so a merge/rebase that added a runtime dependency (e.g. `chokidar`) can't produce a freshly-built server that boot-crashes with `ERR_MODULE_NOT_FOUND`.
20
20
 
21
21
  ## Options
22
22
 
23
23
  - `--skip-build` — restart the current bundle without running `bun install` or `npm run build`.
24
- - `--force` — bypass the deploy-window gate for an agent-issued reload. Without it, active verification, merge, post-merge, flywheel, restart, or `pan dev` ownership refuses the reload because it would disconnect live conversations and terminals.
24
+ - `--force` — explicitly bypass the deploy-window gate. Without it, a refused agent-issued reload queues the deploy, reports its age and distinct verification blockers, and self-fires at the next safe verification boundary. Do not retry-loop or use `--force` to interrupt healthy verification; reserve the bypass for exceptional operator recovery.
25
25
  - `--health-timeout <ms>` — set the dashboard health-check budget. The default is `30000`.
26
26
  - `--no-deacon` — restart without Cloister/Deacon auto-start.
27
27
 
@@ -34,7 +34,7 @@ pan restart --traefik
34
34
  pan restart --full # nuclear — stops & restarts everything
35
35
 
36
36
  # Explicit force cases
37
- pan restart --force # bypass the agent deploy-window gate
37
+ pan restart --force # explicit operator bypass of the deploy-window gate
38
38
  pan restart --cliproxy --force # redownload the pinned CLIProxy binary
39
39
  ```
40
40
 
@@ -61,9 +61,10 @@ server is a failure, not a successful restart.
61
61
  - `pan restart --dashboard` NEVER touches CLIProxy, Traefik, or TLDR — that
62
62
  scope contract is enforced by tests.
63
63
  - Agent-issued dashboard and full restarts consult the deploy-window gate before
64
- acquiring the restart lock. Active verification, merge, post-merge, flywheel,
65
- restart, or `pan dev` ownership refuses the restart because it would disconnect
66
- live conversations and terminals; `--force` explicitly bypasses this gate.
64
+ acquiring the restart lock. A refusal queues the deploy, reports its age and
65
+ distinct verification blockers, and self-fires at the next safe verification
66
+ boundary. Do not retry in a loop or use `--force` to interrupt healthy verification;
67
+ `--force` remains the explicit operator bypass for exceptional recovery.
67
68
  - For `--cliproxy`, `--force` has a separate meaning: it redownloads the binary at
68
69
  the pinned version before restarting it.
69
70
  - If the dashboard restart fails, shared sidecars are left running so recovery
@@ -1,12 +1,13 @@
1
1
  ---
2
2
  name: pan-review
3
- description: "pan review <subcommand> — manage the code review lifecycle: list pending work, set quick/full mode, re-request review, reset/abort/restart review cycles"
3
+ description: "pan review <subcommand> — manage the code review lifecycle: list pending work, re-request review, heal status drift, reset/abort/restart review cycles"
4
4
  triggers:
5
5
  - pan review
6
6
  - review pending
7
7
  - request review
8
8
  - review mode
9
9
  - reset review
10
+ - resync review
10
11
  - restart review
11
12
  - abort review
12
13
  - code review lifecycle
@@ -30,6 +31,7 @@ pan review pending --blocked # List blocked review/test/me
30
31
  pan review request <id> # Re-request review after fixing feedback
31
32
  pan review mode <id> <quick|full> # Set this issue's review mode override
32
33
  pan review reset <id> [--session] # Reset review/test/merge cycles (human override)
34
+ pan review resync <id> # Re-emit canonical status to heal dashboard drift
33
35
  pan review abort <id> # Kill all running reviewers, leave worker idle
34
36
  pan review restart <id> [--model <m>] [--role <r>] # Kill reviewers and dispatch a fresh review pipeline
35
37
  ```
@@ -54,6 +56,9 @@ pan review restart <id> [--model <m>] [--role <r>] # Kill reviewers and dispatch
54
56
  pipeline can be re-dispatched from scratch. Use when the saved state is
55
57
  inconsistent or corrupt. `--session` additionally clears the saved Claude
56
58
  session for each reviewer so they restart with a clean conversation.
59
+ - **`resync <id>`** — Reads the canonical review status and re-emits it without
60
+ changing any verdict. Use when an issue passed review but is missing from
61
+ Awaiting Merge or its actions are wrongly gated by stale dashboard state.
57
62
  - **`abort <id>`** — Kills any currently running reviewer sessions but
58
63
  leaves the work agent alone. Use when reviewers are stuck or running
59
64
  against the wrong commit and you want to halt without resetting state.
@@ -77,6 +82,7 @@ pan review restart <id> [--model <m>] [--role <r>] # Kill reviewers and dispatch
77
82
  | This issue needs the full review convoy | `pan review mode <id> full` |
78
83
  | Return an issue to default quick review | `pan review mode <id> quick` |
79
84
  | Pipeline state is inconsistent, need a clean slate | `pan review reset <id>` |
85
+ | Issue passed but is missing from Awaiting Merge or actions are wrongly gated | `pan review resync <id>` |
80
86
  | Same as above plus reviewer Claude sessions are bad | `pan review reset <id> --session` |
81
87
  | Reviewer is hung, just kill it | `pan review abort <id>` |
82
88
  | Reviewer crashed, want a fresh convoy with a different model | `pan review restart <id> --model gpt-5.4` |