@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.
- package/drizzle/overdeck/0000_overdeck_init.sql +36 -1
- package/package.json +1 -1
- package/server/{acceptance-criteria-DDCnXF58.js → acceptance-criteria-10Ur5Dne.js} +2 -2
- package/server/activity-logger-CMthG6Vd.js +3 -0
- package/server/{activity-logger-DDlOIAML.js → activity-logger-CyteR4JO.js} +24 -13
- package/server/{advancing-selfheal-BVwW4qRn.js → advancing-selfheal-BNwqxseD.js} +6 -6
- package/server/{agent-gc-CHcnvonI.js → agent-gc-C3h9Or3a.js} +5 -5
- package/server/agent-state-CYXJVG72.js +3 -0
- package/server/agent-state-service-C63p_ftq.js +2 -0
- package/server/{agent-state-service-BsgWxZuB.js → agent-state-service-Ds6OeFvo.js} +15 -9
- package/server/{agents-EbI0zCJl.js → agents-J5mEnekq.js} +23 -16
- package/server/agents-ePFVoZbu.js +3 -0
- package/server/archive-planning-B2XplFzT.js +2 -0
- package/server/{archive-planning-Du25Jtst.js → archive-planning-BwhxeP7C.js} +22 -26
- package/server/{artifact-index-jobs-CbEDfCDu.js → artifact-index-jobs-D1q_vR3V.js} +2 -2
- package/server/{assemble-J2ZZ2C15.js → assemble-Bgwqv-Ro.js} +2 -2
- package/server/auto-spawn-consent-CQ9Bi9q6.js +1141 -0
- package/server/{backlog-auto-trigger-2R2jog7n.js → backlog-auto-trigger-n1lzPgN4.js} +3 -3
- package/server/{behavior-B3exJ42O.js → behavior-td6-xhQk.js} +2 -2
- package/server/boot-reconciled-stop-events-C7gGe3oB.js +44 -0
- package/server/bridge-pool-patrol-CYH2OLb5.js +136 -0
- package/server/{briefing-freshness-D1wzUIWv.js → briefing-freshness-DRqZ8lAz.js} +2 -2
- package/server/{build-info-Ie_D0_BT.js → build-info-7yiEpl6u.js} +5 -3
- package/server/{build-info-CZk_TITh.js → build-info-CpG__c63.js} +1 -1
- package/server/{checkpoint-manager-DwbQoqrC.js → checkpoint-manager-CkKmB0wZ.js} +1 -1
- package/server/{checkpoint-manager-BI1Wxoku.js → checkpoint-manager-DBcyNR8w.js} +2 -2
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-CQB1h765.js → checkpoints-D95apurL.js} +2 -2
- package/server/{checkpoints-BJIs5QIA.js → checkpoints-Wm963lm8.js} +1 -1
- package/server/{claude-hooks-provision-8Ngo8TpT.js → claude-hooks-provision-4RPxNkE8.js} +1 -1
- package/server/{claude-hooks-provision-D8GXF3_s.js → claude-hooks-provision-Bjitl9aI.js} +13 -2
- package/server/{claude-permissions-DNWEVV6z.js → claude-permissions-CpbpvUQ2.js} +2 -2
- package/server/{claude-settings-overlay-DWy-Bb4Y.js → claude-settings-overlay-BzkHYDwR.js} +1 -1
- package/server/{claude-settings-overlay-CEdaqpWI.js → claude-settings-overlay-_H9Yrzab.js} +2 -2
- package/server/cli-CjOCSnfj.js +3 -0
- package/server/{cli-RoOx5DUf.js → cli-Cte9ZFGn.js} +9 -9
- package/server/{cliproxy-C8a1vtTU.js → cliproxy-C5fMJ7rY.js} +2 -2
- package/server/{cliproxy-fHfIeiGd.js → cliproxy-DaAbWMjC.js} +1 -1
- package/server/{close-issue-DoOifFIK.js → close-issue-BPh1ARCF.js} +5 -5
- package/server/{closed-issue-reaper-CktPXo8m.js → closed-issue-reaper-DHRfRMrp.js} +1 -1
- package/server/{closed-issue-reaper-Bk3SU4RC.js → closed-issue-reaper-DoOZqGFK.js} +88 -17
- package/server/{codex-BZXGhUVB.js → codex-BzGDW_d3.js} +36 -7
- package/server/{codex-GcHuUF-k.js → codex-o8FJwzmy.js} +1 -1
- package/server/{codex-parser-CFZ1_1Jl.js → codex-parser-Dt-ycU8L.js} +2 -2
- package/server/compaction-continuation-CvXpbZ4w.js +200 -0
- package/server/{config-CKxYiCmX.js → config-Bi3u1VK7.js} +4 -3
- package/server/{config-BZ0sHTju.js → config-BvLe652W.js} +2 -2
- package/server/{config-DzV30TOm.js → config-CL3Gyvja.js} +1 -1
- package/server/{config-yaml-DySPNmKN.js → config-yaml-CxdwhAIA.js} +276 -14
- package/server/conflict-gate-CX80JYYS.js +3 -0
- package/server/{conflict-gate-BaCVrH-N.js → conflict-gate-E4nt7ZeS.js} +60 -14
- package/server/{context-layers-igZ4FI4_.js → context-layers-C_IIysnm.js} +3 -3
- package/server/{context-layers-BrPmE__h.js → context-layers-DAG83UZt.js} +2 -2
- package/server/{control-settings-BQp7_4uD.js → control-settings-CiqGxXnc.js} +56 -19
- package/server/{conversation-compaction-eQB5CkOe.js → conversation-compaction-BE3CNtHF.js} +1 -1
- package/server/{conversation-compaction-CgrR8YYp.js → conversation-compaction-D6-yLtqt.js} +8 -8
- package/server/{conversation-service-DPJ71F33.js → conversation-service-DBxoYMDl.js} +10 -8
- package/server/conversation-service-D_TS2b1r.js +3 -0
- package/server/{conversations-CAsJF9kh.js → conversations-BKDVpB-3.js} +1 -1
- package/server/{conversations-6AfUfbwc.js → conversations-D0UEdLtk.js} +4 -4
- package/server/{cost-R-m6Yi-W.js → cost-DS1s0DbG.js} +3 -3
- package/server/{cost-B2ddP6wq.js → cost-DpgYmYqR.js} +12 -2
- package/server/{cost-sync-BsN6ER0n.js → cost-sync-tOCCGnEt.js} +3 -3
- package/server/{dag-B1ucnjDU.js → dag-BtkgLeqY.js} +2 -2
- package/server/{dangerous-git-ops-BXqeWVSf.js → dangerous-git-ops-CFLykHWt.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/deacon-BIblC-WX.js +4 -0
- package/server/{deacon-nudge-log-6wVqAaqz.js → deacon-nudge-log-B08gF0mh.js} +3 -3
- package/server/{deacon-CU_cAYSR.js → deacon-pLRLbPvR.js} +3308 -2707
- package/server/deacon-pending-lifecycle-B-Io84AP.js +33 -0
- package/server/deacon-swarm-B1XkIvfr.js +2 -0
- package/server/{deacon-swarm-BXZZ1Z2-.js → deacon-swarm-v5PMun-m.js} +15 -14
- package/server/deacon.js +14 -19
- package/server/dead-end-trip-D8A3msX9.js +13 -0
- package/server/delivery-BX9HR4wQ.js +3 -0
- package/server/{deploy-patrol-AiFoP8dw.js → deploy-patrol-sYgOxLeb.js} +69 -18
- package/server/deploy-queue-VfohaPN_.js +169 -0
- package/server/deploy-queue-gHJBycaF.js +3 -0
- package/server/deploy-window-CFRZ0-kt.js +3 -0
- package/server/{deploy-window-C3F-tihF.js → deploy-window-D4DQb8VP.js} +40 -16
- package/server/{dev-supervisor-bcOWqdQE.js → dev-supervisor-DiOBDM1c.js} +2 -2
- package/server/{devcontainer-renderer-_d6XhyND.js → devcontainer-renderer-BUOIlfgD.js} +3 -3
- package/server/dist-B3YPQa5A.js +3 -0
- package/server/{dist-Cb_0uvpS.js → dist-C3A8B8wM.js} +1 -1
- package/server/{dist-src-BSoS7mkd.js → dist-src-C0adpegX.js} +1 -1
- package/server/{docker-DcMTFTUC.js → docker-BJzlkqYB.js} +2 -2
- package/server/docker-Y3PElJb0.js +3 -0
- package/server/dod-DlNtcH6n.js +91 -0
- package/server/durable-review-pipeline-Cibps-Rg.js +20 -0
- package/server/durable-review-pipeline-DP6bIcOY.js +3 -0
- package/server/{ensure-devcontainer-DNi-ono3.js → ensure-devcontainer-BAofzBPv.js} +4 -4
- package/server/{ensure-devcontainer-BZgOhRo7.js → ensure-devcontainer-DMAbWqtQ.js} +1 -1
- package/server/{esm-shims-OSHAYaS1.js → esm-shims-BeObUkaw.js} +1 -1
- package/server/{event-store-EV2cMiXj.js → event-store-5UKzh9Jf.js} +1 -1
- package/server/{event-store-CQL6NeqB.js → event-store-CrHcVC5_.js} +23 -4
- package/server/{events-DTfAe4My.js → events-BNrvchBg.js} +3 -3
- package/server/{events-BTdrdEq8.js → events-CF8QDbuV.js} +1 -1
- package/server/{factory-CFibJuaw.js → factory-Cmm9Hsho.js} +5 -5
- package/server/{feature-registry-population-DKZFMbFt.js → feature-registry-population-B6HpNWRy.js} +4 -4
- package/server/{feature-registry-storage-BdPuLcBX.js → feature-registry-storage-DJEFx1Pf.js} +2 -2
- package/server/{features-ez2271oH.js → features-D5km80UI.js} +2 -2
- package/server/{feedback-target-CoFDHiM8.js → feedback-target-BJ5ZADsu.js} +1 -1
- package/server/{feedback-target-7mqqwrX6.js → feedback-target-DSxEL6lP.js} +8 -8
- package/server/{feedback-writer-CY5L1lB7.js → feedback-writer-C27Hak8a.js} +5 -5
- package/server/{feedback-writer-D3a22RCd.js → feedback-writer-CoB9Z6aU.js} +1 -1
- package/server/{flywheel-DHrgCphM.js → flywheel-BHx8XuMr.js} +47 -20
- package/server/{flywheel-SVF02Jpq.js → flywheel-DZZdtiOL.js} +1 -1
- package/server/{flywheel-DzGtWnJ1.js → flywheel-f662Q-y2.js} +16 -15
- package/server/flywheel-merge-order-D_xLMbJU.js +462 -0
- package/server/flywheel-merge-order-Dil0LmdN.js +2 -0
- package/server/forge-B5o319qI.js +3 -0
- package/server/forge-BaKGCya6.js +383 -0
- package/server/{from-kNxT0bZC.js → from-B3tZbB55.js} +1 -1
- package/server/fs-lock-Bre3sGoz.js +130 -0
- package/server/{fts-db-CE46vDkZ.js → fts-db-IVc4_M3f.js} +2 -2
- package/server/{fts-operations-CqY6zl-i.js → fts-operations-B9jG8wa3.js} +2 -2
- package/server/{git-utils-CRw2zLPC.js → git-utils-CsvYfJU3.js} +30 -5
- package/server/git-utils-Xg4PFN45.js +3 -0
- package/server/{github-app-ClZ2lk8D.js → github-app-Bmg4R9mv.js} +1 -1
- package/server/{github-app-C3QrAUd0.js → github-app-CmNk0zLU.js} +3 -3
- package/server/{github-client-DfQYVUaw.js → github-client-B6KM9_wA.js} +1 -1
- package/server/{github-client-BnIsSrEN.js → github-client-qazkPrg0.js} +3 -3
- package/server/github-pr-lookup-DAcVeRLK.js +58 -0
- package/server/{harness-binary-DPUi-Pv8.js → harness-binary-BSpiXaLw.js} +2 -2
- package/server/{harness-resolve-3lNZkyT4.js → harness-resolve-BAJu5MX8.js} +4 -4
- package/server/{health-events-BDOHby5Q.js → health-events-2Z6Wa9SM.js} +1 -1
- package/server/{health-events-BBcTYQKU.js → health-events-BwX32k8d.js} +2 -2
- package/server/{hooks-DPVX1rwQ.js → hooks-D1g1jKLI.js} +1 -1
- package/server/{hooks-CKZgXlJb.js → hooks-DbtbimEf.js} +2 -2
- package/server/{hume-Cz8igP9E.js → hume-DXNiu6nQ.js} +2 -2
- package/server/hume-VUCNbTgn.js +3 -0
- package/server/{idle-stack-reaper-CuLF0j2H.js → idle-stack-reaper-CRA1e0jr.js} +1 -1
- package/server/{idle-stack-reaper-DDIRwxUY.js → idle-stack-reaper-Cy-dQzW4.js} +99 -6
- package/server/in-flight-guard-D-sSkADM.js +45 -0
- package/server/{infra-BEqFxlJc.js → infra-BDQDRopn.js} +81 -5
- package/server/{injection-C8aiVJrF.js → injection-6AGnXxlj.js} +7 -7
- package/server/{injection-CPUIqNhI.js → injection-Bl8d_jHZ.js} +1 -1
- package/server/inspect-agent-CUwVmr2h.js +2 -0
- package/server/{inspect-agent-BLuJ1AkT.js → inspect-agent-nXdIptyh.js} +26 -25
- package/server/{internal-token-s0-oKybJ.js → internal-token-DzK385vD.js} +2 -2
- package/server/{internal-token-BrcU6qfe.js → internal-token-Ias7N8Kg.js} +1 -1
- package/server/{io-C9kF1wtJ.js → io-B00PBNku.js} +44 -27
- package/server/{issue-closed-CDJk4pIp.js → issue-closed-BehTG1be.js} +8 -8
- package/server/{issue-lifecycle-ojZAzDBP.js → issue-lifecycle-Birk-ifu.js} +42 -30
- package/server/{issue-lifecycle-B8sZHVHh.js → issue-lifecycle-BqSuQvbn.js} +1 -1
- package/server/{issue-service-singleton-BvJ09SaR.js → issue-service-singleton-B2wXiIlw.js} +1 -1
- package/server/{issue-service-singleton-Yx5DdmVJ.js → issue-service-singleton-C6ZduvuY.js} +10 -10
- package/server/{issues-BMmP_77e.js → issues-DQ5-LatB.js} +2 -2
- package/server/{jsonl-parser-BXSlHwEh.js → jsonl-parser-BDpnGFCl.js} +5 -4
- package/server/{label-cleanup-B0UJwnv5.js → label-cleanup-Dwnky8FG.js} +3 -3
- package/server/{lifecycle-xmBfK2GJ.js → lifecycle-B3s4sM1G.js} +6 -7
- package/server/{lifecycle-yPd___5E.js → lifecycle-B4Xdb4cY.js} +2 -2
- package/server/{lifecycle-io-DPo7x11I.js → lifecycle-io-CzTHEooc.js} +1 -1
- package/server/{lifecycle-io-BREGpnLk.js → lifecycle-io-DCo6s6ks.js} +5 -5
- package/server/{linear-client-BsuUvkdA.js → linear-client-9uq7fhiV.js} +3 -3
- package/server/{linear-client-CTskEeT_.js → linear-client-CnbtHiic.js} +1 -1
- package/server/linear-mcp-auth-BxUOzswy.js +280 -0
- package/server/linear-mcp-auth-D46fBCLf.js +2 -0
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-CefQNAnq.js → merge-DiW9RdSB.js} +13 -11
- package/server/{merge-agent-4WOWlSYA.js → merge-agent-BLUgRsz3.js} +234 -84
- package/server/{merge-agent-CKkgIBPB.js → merge-agent-DQTXZk8z.js} +1 -1
- package/server/{merge-batch-ClFn2T-y.js → merge-batch-Cp_j9BGk.js} +1 -1
- package/server/merge-completeness-B46KqhtY.js +277 -0
- package/server/merge-completeness-BLbB5-6n.js +3 -0
- package/server/merge-ops-1abz6O_P.js +2 -0
- package/server/merge-rebase-CJJVAJuz.js +2 -0
- package/server/{merge-rebase-BfaTyXsw.js → merge-rebase-DIkBjgwq.js} +3 -3
- package/server/{merge-set-DJ8-UErs.js → merge-set-CBgHfwM0.js} +11 -5
- package/server/merge-set-DeUxFsC3.js +3 -0
- package/server/{merge-B1DiziGU.js → merge-sr8Nrnmi.js} +1 -1
- package/server/merge-sync-CpGmk6Ch.js +3 -0
- package/server/{merge-sync-VPV28g0g.js → merge-sync-kr4vqyjM.js} +409 -153
- package/server/{merge-train-CHopycP0.js → merge-train-Dmrcus12.js} +18 -8
- package/server/{merge-train-deps-D1cOZzy2.js → merge-train-deps-D_uGX91G.js} +21 -15
- package/server/merge-verification-NvaAd8CZ.js +220 -0
- package/server/merged-docker-cleanup-worker-DH_hrGPI.js +3 -0
- package/server/merged-docker-cleanup-worker-Y1R06TEl.js +107 -0
- package/server/{multipart-parser-duPAfSBw.js → multipart-parser-R-oC8dQg.js} +2 -2
- package/server/{no-resume-mode-Nw29vaFb.js → no-resume-mode-BgD0JUmM.js} +1 -1
- package/server/node_modules/.package-lock.json +30 -30
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- package/server/node_modules/@google-cloud/common/package.json +2 -2
- package/server/node_modules/@types/node/README.md +1 -1
- package/server/node_modules/@types/node/crypto.d.ts +1 -1
- package/server/node_modules/@types/node/package.json +2 -2
- package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
- package/server/node_modules/gaxios/package.json +1 -1
- package/server/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
- package/server/node_modules/google-auth-library/package.json +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/auth.proto +2 -1
- package/server/node_modules/google-gax/build/protos/google/api/backend.proto +12 -1
- package/server/node_modules/google-gax/build/protos/google/api/billing.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/client.proto +165 -53
- package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1/resources.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/quota_adjuster_settings.proto +7 -3
- package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/resources.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/config_change.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/context.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/control.proto +3 -3
- package/server/node_modules/google-gax/build/protos/google/api/distribution.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/documentation.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/endpoint.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/error_reason.proto +186 -1
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/checked.proto +31 -3
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/eval.proto +8 -9
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/explain.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/syntax.proto +20 -22
- package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/value.proto +2 -3
- package/server/node_modules/google-gax/build/protos/google/api/field_behavior.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/field_info.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/http.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/httpbody.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/label.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/launch_stage.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/log.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/logging.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/metric.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/monitored_resource.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/monitoring.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/policy.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/quota.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/resource.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/routing.proto +8 -4
- package/server/node_modules/google-gax/build/protos/google/api/service.proto +2 -3
- package/server/node_modules/google-gax/build/protos/google/api/source_info.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/system_parameter.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/api/usage.proto +7 -27
- package/server/node_modules/google-gax/build/protos/google/api/visibility.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/longrunning/operations.proto +20 -1
- package/server/node_modules/google-gax/build/protos/google/protobuf/any.proto +52 -108
- package/server/node_modules/google-gax/build/protos/google/protobuf/compiler/ruby/ruby_generated_code.proto +2 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_features.proto +21 -1
- package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_file_options.proto +24 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_options.proto +15 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/descriptor.proto +118 -30
- package/server/node_modules/google-gax/build/protos/google/protobuf/field_mask.proto +16 -18
- package/server/node_modules/google-gax/build/protos/google/protobuf/internal_options.proto +8 -1
- package/server/node_modules/google-gax/build/protos/google/protobuf/json/json_enumval_custom_string.proto +26 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/json_enumvalue_options.proto +29 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/json_options.proto +14 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/struct.proto +38 -22
- package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/forced_micro_string.proto +3 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/repeated_field_proxy_import_message.proto +14 -0
- package/server/node_modules/google-gax/build/protos/google/protobuf/timestamp.proto +9 -8
- package/server/node_modules/google-gax/build/protos/google/protobuf/util/json_format_proto3.proto +18 -0
- package/server/node_modules/google-gax/build/protos/google/rpc/code.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/rpc/context/attribute_context.proto +7 -2
- package/server/node_modules/google-gax/build/protos/google/rpc/context/audit_context.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/rpc/error_details.proto +5 -5
- package/server/node_modules/google-gax/build/protos/google/rpc/http.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/rpc/status.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/type/calendar_period.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/color.proto +9 -10
- package/server/node_modules/google-gax/build/protos/google/type/date.proto +11 -9
- package/server/node_modules/google-gax/build/protos/google/type/datetime.proto +17 -17
- package/server/node_modules/google-gax/build/protos/google/type/dayofweek.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/decimal.proto +11 -13
- package/server/node_modules/google-gax/build/protos/google/type/expr.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/fraction.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/interval.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/type/latlng.proto +4 -5
- package/server/node_modules/google-gax/build/protos/google/type/localized_text.proto +3 -3
- package/server/node_modules/google-gax/build/protos/google/type/money.proto +1 -2
- package/server/node_modules/google-gax/build/protos/google/type/month.proto +1 -1
- package/server/node_modules/google-gax/build/protos/google/type/phone_number.proto +20 -15
- package/server/node_modules/google-gax/build/protos/google/type/postal_address.proto +39 -39
- package/server/node_modules/google-gax/build/protos/google/type/quaternion.proto +4 -4
- package/server/node_modules/google-gax/build/protos/google/type/timeofday.proto +11 -8
- package/server/node_modules/google-gax/package.json +5 -5
- package/server/node_modules/retry-request/package.json +4 -4
- package/server/node_modules/teeny-request/package.json +5 -5
- package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
- package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
- package/server/node_modules/undici/lib/core/request.js +12 -1
- package/server/node_modules/undici/lib/dispatcher/client-h1.js +11 -2
- package/server/node_modules/undici/lib/global.js +36 -16
- package/server/node_modules/undici/lib/handler/cache-handler.js +236 -116
- package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +3 -3
- package/server/node_modules/undici/lib/handler/retry-handler.js +24 -0
- package/server/node_modules/undici/lib/interceptor/cache.js +152 -62
- package/server/node_modules/undici/lib/interceptor/decompress.js +5 -2
- package/server/node_modules/undici/lib/util/cache.js +328 -66
- package/server/node_modules/undici/lib/util/date.js +23 -6
- package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
- package/server/node_modules/undici/package.json +1 -1
- package/server/{orphan-proposed-reconciler-BvKkWMJQ.js → orphan-proposed-reconciler-B6vJHxtX.js} +242 -34
- package/server/{orphan-proposed-reconciler-CTSGcK8p.js → orphan-proposed-reconciler-DcgTPPFY.js} +1 -1
- package/server/package-lock.json +31 -31
- package/server/package.json +1 -1
- package/server/{pan-dir-B0c3w0Ya.js → pan-dir-DMzF5wne.js} +25 -11
- package/server/{paths-D-xWGHdh.js → paths-sJBSb7Ul.js} +2 -2
- package/server/pending-lifecycle-claim-DilzGfgk.js +110 -0
- package/server/persistent-logger-H_VjuOu7.js +57 -0
- package/server/{pickup-DUCLWrJY.js → pickup-DWhqzliO.js} +4 -3
- package/server/pipeline-membership-C88VBnhJ.js +3 -0
- package/server/pipeline-membership-D9SBvItj.js +57 -0
- package/server/pipeline-membership-gather-4eR-7Tqy.js +3 -0
- package/server/pipeline-membership-gather-CeVGnNJ2.js +593 -0
- package/server/{pipeline-notifier-BXkJzDC4.js → pipeline-notifier-D0ALV6Nw.js} +2 -2
- package/server/{pipeline-notifier-BJr8gQX6.js → pipeline-notifier-DT6xLFao.js} +1 -1
- package/server/post-merge-lifecycle-worker-8HIeS_J6.js +50 -0
- package/server/{project-pipelines-C0MWUeCU.js → project-pipelines-9SKt2bEc.js} +2 -2
- package/server/{project-repos-B6GycDh9.js → project-repos-B5pIphKg.js} +7 -3
- package/server/project-repos-DPjOdfPa.js +3 -0
- package/server/projects-_n3Zui6K.js +3 -0
- package/server/{prompts-DxzFXuLl.js → prompts-CgzMBvQF.js} +2 -2
- package/server/{providers-u4Ga0jOr.js → providers-BI1mOBQ4.js} +1 -1
- package/server/{providers-qQAwGQDW.js → providers-BJQSnAAp.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-BamJdinX.js → chunk-BO2N2NFS-D_pGACYN.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-DfOB8-w4.js → diagram-OG6HWLK6-BO6fe3hH.js} +1 -1
- package/server/public/assets/{dist-ByIuzMQW.js → dist-5zingMiA.js} +3 -3
- package/server/public/assets/{dist-D7zYSEA6.js → dist-CVxhbI2E.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-EdmRyXL3.js → ganttDiagram-6RSMTGT7-Bgj4A7kp.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-MerOfTX8.js → highlighted-body-OFNGDK62-DNPK7_cm.js} +1 -1
- package/server/public/assets/index-DEpY-D1O.js +807 -0
- package/server/public/assets/index-Ddkcz3WT.css +1 -0
- package/server/public/assets/{linear-BBbArIcK.js → linear-BB0jQT16.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-BzPfaQJ1.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-BKIddiJN.js → pieDiagram-4H26LBE5-DeGIzzpZ.js} +1 -1
- package/server/public/assets/{prod-B8vYiu52.js → prod-XBLvikex.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-D6RtoULk.js → quadrantDiagram-W4KKPZXB-BV9SLeWz.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-CLrCedZX.js → sankeyDiagram-5OEKKPKP-Dwja0gj8.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-hznR8DYl.js → xychartDiagram-2RQKCTM6-DCB4qvfw.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests-_lHueOHW.js → pull-requests-7BgLDsIo.js} +19 -10
- package/server/{pull-requests-7N8WKseP.js → pull-requests-Dq0y6IxE.js} +1 -1
- package/server/{queries-CjNIf-Ub.js → queries-C-MUZaIy.js} +824 -192
- package/server/{rally-CyWT_lNO.js → rally-CPysR4T_.js} +3 -3
- package/server/rally-D_VW4bJv.js +3 -0
- package/server/{rally-api-C8e_1JRi.js → rally-api-8Ptlp2os.js} +2 -2
- package/server/{rally-api-ClOSd-Tt.js → rally-api-CgosKdKL.js} +1 -1
- package/server/{rally-client-sgtVqzNU.js → rally-client-CCX0hADj.js} +1 -1
- package/server/{rally-client-lc-nokqr.js → rally-client-iYMHWQD7.js} +5 -5
- package/server/{reap-terminal-sessions-7KeHv1R1.js → reap-terminal-sessions-4Xg9NGA8.js} +2 -2
- package/server/{reap-terminal-sessions-BtHPo6Xc.js → reap-terminal-sessions-Qf-9LVQc.js} +2 -2
- package/server/{rebuild-stack-lwtsW0GO.js → rebuild-stack-CMdgaylx.js} +16 -7
- package/server/{rebuild-stack-CFvcBHsS.js → rebuild-stack-DqcOVmJO.js} +2 -2
- package/server/{reconstruct-cache-C3Ui7ojV.js → reconstruct-cache-CMZJ_Vjq.js} +9 -7
- package/server/record-BTwWhtBb.js +3 -0
- package/server/{record-update-dE1Aw83j.js → record-update-DaOKS7Wb.js} +124 -157
- package/server/record-update-DhI7eySG.js +3 -0
- package/server/{recovery-trip-BvRWfUXM.js → recovery-trip-DDH-02ng.js} +2 -2
- package/server/{release-engine-Cx48W7z8.js → release-engine-B2X9AfFC.js} +5 -5
- package/server/{release-set-CQfuN9-v.js → release-set-G4XKyQ8K.js} +3 -3
- package/server/{remote-C_2hasl7.js → remote-BXarMvqf.js} +3 -3
- package/server/{remote-ChgimyYa.js → remote-CUhyqjXk.js} +3 -3
- package/server/{remote-agents-By1ige5O.js → remote-agents-Bba-MgSA.js} +311 -48
- package/server/{remote-agents-CA3Ihlxj.js → remote-agents-CLZB3Coc.js} +2 -2
- package/server/{remote-completion-fVe9e_3u.js → remote-completion-CwAp79EC.js} +13 -13
- package/server/resume-mOREjlYu.js +3 -0
- package/server/{review-agent-CIGOQYBD.js → review-agent--pOptAEV.js} +65 -50
- package/server/{review-agent-DNboMyW4.js → review-agent-BTCNkq2h.js} +1 -1
- package/server/{review-artifacts-nRDPuMxd.js → review-artifacts-BNmw8dWE.js} +7 -6
- package/server/{review-context-2uj-YQ8J.js → review-context-DFxYOOJW.js} +9 -9
- package/server/{in-flight-guard-CAAkqPLu.js → review-convoy-liveness-BgU_1jJf.js} +3 -44
- package/server/review-status-CGvlA4o_.js +7737 -0
- package/server/review-status-Dma9SFaN.js +3 -0
- package/server/review-status-emit-DURrmGYX.js +50 -0
- package/server/{review-status-enrichment-Dci-ZwEt.js → review-status-enrichment-8NiNXi5W.js} +4 -4
- package/server/review-status-source-BLx_1siH.js +3 -0
- package/server/{review-status-source-CxuEjLGg.js → review-status-source-DIk1JSow.js} +24 -3
- package/server/{review-status-sync-BTOpxtTC.js → review-status-sync-0GxOqeqF.js} +11 -6
- package/server/{review-status-sync-DSDK3OMy.js → review-status-sync-muT-EBp2.js} +1 -1
- package/server/{review-verdict-feedback-CTd4QMBu.js → review-verdict-feedback-HwF6ODFy.js} +1 -1
- package/server/{review-verdict-feedback-CCjVA7Uk.js → review-verdict-feedback-xJNdqBnX.js} +65 -11
- package/server/{rollup-FGsKki9R.js → rollup-BQaol5TX.js} +8 -8
- package/server/{rollup-BKQC7jp4.js → rollup-BR4t_wck.js} +1 -1
- package/server/{scanner-CnqEZeDy.js → scanner-C-D2cFdX.js} +8 -7
- package/server/{sequence-io-D909zgeH.js → sequence-io-Bmf1EZM5.js} +4 -4
- package/server/{sequencer-agent-CzkcK6P5.js → sequencer-agent-CigMyKh2.js} +7 -6
- package/server/server.js +2005 -614
- package/server/{service-CLeAoU6G.js → service-CD0DvFvD.js} +114 -68
- package/server/{session-fork-CHI1XvL9.js → session-fork-B6cQ5eya.js} +2 -2
- package/server/{session-history-BT3IvqhC.js → session-history-3ON_IJjm.js} +7 -55
- package/server/settings-CVmWiJ-r.js +2 -0
- package/server/{settings-C0zgxOGf.js → settings-PilbFZAM.js} +3 -2
- package/server/{settings-BTMvpNFU.js → settings-VN0qOh4U.js} +3 -3
- package/server/{shadow-engineering-BJfgm-hX.js → shadow-engineering-DXvx77oE.js} +3 -3
- package/server/{shadow-state-7a-524T8.js → shadow-state-BBk_zacw.js} +2 -2
- package/server/{shadow-state-DnDyjujH.js → shadow-state-CZBp7pwq.js} +1 -1
- package/server/{shadow-utils-Db3oroFG.js → shadow-utils-DdZ05AJS.js} +2 -2
- package/server/{ship-log-D9MlVzYU.js → ship-log-7kJfjUX2.js} +1 -1
- package/server/{smart-compaction-CV2ukKND.js → smart-compaction-8fA5k5XN.js} +1 -1
- package/server/{smart-compaction-KCYScAU1.js → smart-compaction-ByhL9cRS.js} +8 -7
- package/server/{spawn-planning-session-DKpdFyOC.js → spawn-planning-session-pcF-YeFE.js} +38 -50
- package/server/spawn-planning-session-vLUJoFjy.js +3 -0
- package/server/{specialist-completion-Ky9wCDpb.js → specialist-completion-B07XjWD2.js} +1 -1
- package/server/{specialist-context-Bn3dCGS2.js → specialist-context-DJ-zFyL3.js} +5 -5
- package/server/{specialist-handoff-logger-CMEwYxa2.js → specialist-handoff-logger-aKSxbIgD.js} +2 -2
- package/server/{specialist-logs-C5p8G7tx.js → specialist-logs-Dae-n52_.js} +3 -3
- package/server/{specialists-CC4r-c2s.js → specialists-6PWdtWcg.js} +1177 -311
- package/server/{specialists-DM6bWjsi.js → specialists-Bz-wFT7R.js} +1 -1
- package/server/{specialists-jiuuyVkp.js → specialists-DUiExaxb.js} +18 -18
- package/server/{specialists-CShuVGWT.js → specialists-KR3pKulN.js} +1 -1
- package/server/specs--enInima.js +3 -0
- package/server/src-B948bGVR.js +11452 -0
- package/server/{src-CXmtj0im.js → src-rac0Mepv.js} +6 -6
- package/server/{src-CdmnTM2m.js → src-vHy2-oCv.js} +3 -3
- package/server/{stack-health-Bn3o8FBX.js → stack-health-BikqHSjn.js} +1 -1
- package/server/{stack-health-DxSdG9cW.js → stack-health-DqLTiEu4.js} +7 -5
- package/server/{stale-task-claims-KJKxxiiQ.js → stale-task-claims-Cab_Fo_Z.js} +5 -4
- package/server/{staleness-DPm7ClwA.js → staleness-C-a5rBxF.js} +1 -1
- package/server/{staleness-CT34nwr9.js → staleness-CGTZyp6V.js} +1 -1
- package/server/{state-home-Cn_Qu8IX.js → state-home-722Dkx92.js} +2 -2
- package/server/{state-mapping-BL_-3Yt8.js → state-mapping-CybR81Uf.js} +1 -1
- package/server/{state-migrate-BGg2ZaOt.js → state-migrate-2u8wIpoL.js} +4 -4
- package/server/{stuck-remediation-DYuPRYYw.js → stuck-remediation-CC6q3eqQ.js} +84 -26
- package/server/{stuck-remediation-s9_2qfi6.js → stuck-remediation-r1TJu68G.js} +1 -1
- package/server/{substrate-bug-weights-service-B-FwCs5V.js → substrate-bug-weights-service-CzIyyWFT.js} +3 -3
- package/server/{summary-fork-DpcxN9tf.js → summary-fork-BqgmgPDt.js} +2 -2
- package/server/{summary-fork-D1RAk9rJ.js → summary-fork-Df2WFijM.js} +8 -8
- package/server/supervisor/{injection-budget-Csw5tqfJ.js → injection-budget-Cg_KIb3o.js} +1 -1
- package/server/supervisor/{paths-DehGY2Fj.js → paths-BBOnCYlO.js} +10 -2
- package/server/supervisor/pty-supervisor.js +50 -4
- package/server/supervisor/{pty-token-x-ea28Us.js → pty-token-BbjwEUUM.js} +3 -3
- package/server/supervisor-B4anCCSm.js +2 -0
- package/server/{supervisor-wM4ooB5O.js → supervisor-BxqSpjcN.js} +3 -3
- package/server/{swarm-readiness-DlP_UjHq.js → swarm-readiness-DfFxa9-n.js} +3 -3
- package/server/{system-prerequisites-DUDj1YHf.js → system-prerequisites-ICLSkhhZ.js} +2 -2
- package/server/{teardown-workspace-DeTTImn-.js → teardown-workspace-DRdi_CPa.js} +15 -16
- package/server/{test-agent-queue-MbxX5vqq.js → test-agent-queue-A_-p-i0I.js} +8 -7
- package/server/{test-verdict-gscuksPv.js → test-verdict-BHgTAwIG.js} +1 -1
- package/server/{test-verdict-bWYBtqBg.js → test-verdict-C4i9aqEP.js} +1 -1
- package/server/{tldr-daemon-BYFkts95.js → tldr-daemon-CvWXBhX1.js} +1 -1
- package/server/{tldr-daemon-C-69c3OI.js → tldr-daemon-wvsU6bKv.js} +2 -2
- package/server/{tmux-R7N7y-Mh.js → tmux-CfDHob9M.js} +174 -4
- package/server/{tmux-B6z7h_vZ.js → tmux-Ctk6RV5l.js} +1 -1
- package/server/{token-BK6t8BIT.js → token-DrxwytsZ.js} +2 -2
- package/server/{token-util-DxXu-vd1.js → token-util-B48BlCba.js} +1 -1
- package/server/token-util-D411CAq9.js +3 -0
- package/server/{tracker-config-G6latr8C.js → tracker-config-BcPMElRB.js} +2 -2
- package/server/{tracker-utils-DHv5pSDT.js → tracker-utils-CJ6BHjcD.js} +3 -3
- package/server/{traefik-connect-Df2uXPsQ.js → traefik-connect-DZ6nMYMj.js} +1 -1
- package/server/{tunnel-DGdUkGoZ.js → tunnel-Bp-dRHZz.js} +1 -1
- package/server/{tunnel-CDVKJpRv.js → tunnel-DUbUPElU.js} +3 -3
- package/server/{typed-errors-BHhE85Ul.js → typed-errors-CKeoDdU3.js} +1 -1
- package/server/{typed-errors-2BTMxkZq.js → typed-errors-DyjseiB6.js} +1 -1
- package/server/{types-hraoaQIp.js → types-Cm5ASJbq.js} +1 -1
- package/server/{types-5M0lupud.js → types-Di8wdakq.js} +1 -1
- package/server/uat-promote-verification-CoJuh7XO.js +92 -0
- package/server/uat-train-4Q0k06CQ.js +0 -0
- package/server/uat-train-Dewoatps.js +2 -0
- package/server/{validate-IfDGkaVR.js → validate-B0C8p66t.js} +8 -6
- package/server/{validation-Dw1pzDzr.js → validation-B_kIRfNe.js} +4 -4
- package/server/{validation-CC9OPqJZ.js → validation-hVOwQk8T.js} +1 -1
- package/server/{verification-artifact-B3itKTxu.js → verification-artifact-BxlxTiYK.js} +1 -1
- package/server/{verification-artifact-TVFSz_q1.js → verification-artifact-D70AtckY.js} +1 -1
- package/server/{verification-runner-BW4HOKAz.js → verification-runner-Bc3cJvpC.js} +1 -1
- package/server/{verification-runner-CkgX6EtI.js → verification-runner-KZTz6u72.js} +40 -18
- package/server/{vtt-parser-DYPbKcIJ.js → vtt-parser-CE_i3Bcw.js} +1 -1
- package/server/{work-agent-prompt-Du8Vh2aJ.js → work-agent-prompt-ByrPAzOy.js} +20 -9
- package/server/{workflows-mbQzh6mQ.js → workflows-D0vP1WrK.js} +252 -99
- package/server/workflows-DtDX08ed.js +2 -0
- package/server/{workspace--8tnhDI0.js → workspace-COWvdibH.js} +1 -1
- package/server/{workspace-BPUws1-_.js → workspace-DQkRPLlQ.js} +3 -3
- package/server/workspace-anchor-drift-DXYIAHzr.js +224 -0
- package/server/workspace-anchor-drift-pwz23TI1.js +3 -0
- package/server/{workspace-config-CIVWZOQr.js → workspace-config-BdZM4PvZ.js} +1 -1
- package/server/{workspace-manager-CBhNdzE4.js → workspace-manager-BPgTrG66.js} +157 -118
- package/server/workspace-manager-C1F3XsnS.js +3 -0
- package/server/{workspace-metadata-BzHnwwX4.js → workspace-metadata-CdjzAP8x.js} +1 -1
- package/server/{workspace-metadata-_WygnyoX.js → workspace-metadata-DkO_iTLo.js} +2 -2
- package/server/{workspaces-Do_9J0LQ.js → workspaces-CRBJikLp.js} +749 -299
- package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
- package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
- package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
- package/sync-sources/skills/pan-close/SKILL.md +5 -3
- package/sync-sources/skills/pan-merge/SKILL.md +7 -5
- package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
- package/sync-sources/skills/pan-release/SKILL.md +57 -0
- package/sync-sources/skills/pan-reload/SKILL.md +3 -3
- package/sync-sources/skills/pan-restart/SKILL.md +5 -4
- package/sync-sources/skills/pan-review/SKILL.md +7 -1
- package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
- package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
- package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
- package/server/activity-logger-OEUBdfZ8.js +0 -3
- package/server/agent-state-Bc3tzUC8.js +0 -3
- package/server/agent-state-service-D5UGKIJL.js +0 -2
- package/server/agents-wi9NWzs2.js +0 -3
- package/server/archive-planning-BZDgzoEj.js +0 -3
- package/server/cli-B86rejVV.js +0 -3
- package/server/conflict-gate-BhAY7TUd.js +0 -3
- package/server/conversation-service-BLd3MYsG.js +0 -3
- package/server/deacon-kiQrb4ZT.js +0 -4
- package/server/deacon-swarm-C-GwfjJy.js +0 -2
- package/server/deploy-window-DkZraDyj.js +0 -3
- package/server/dist-Bzy0y69j.js +0 -3
- package/server/dod-C6n9RV3G.js +0 -66
- package/server/flywheel-merge-order-UU0tiUld.js +0 -245
- package/server/flywheel-merge-order-UUcsCDb6.js +0 -2
- package/server/forge-CNFnyqps.js +0 -270
- package/server/forge-DXnS_YFH.js +0 -2
- package/server/git-utils-D0_yhCgF.js +0 -3
- package/server/github-pr-lookup-D16NGsSO.js +0 -44
- package/server/hume-ccTf4wTX.js +0 -3
- package/server/inspect-agent-Brtz0URj.js +0 -2
- package/server/label-reconciler-B4iOAjlC.js +0 -113
- package/server/launcher-generator-BBWG_SiS.js +0 -473
- package/server/merge-ops-CR44oU9-.js +0 -2
- package/server/merge-set-bUqbm3yc.js +0 -3
- package/server/merge-sync-BJYeOODr.js +0 -3
- package/server/merge-verification-BkaOqPsw.js +0 -124
- package/server/pipeline-membership-mY3GprlK.js +0 -420
- package/server/project-repos-DXKQsc_m.js +0 -3
- package/server/projects-vjjcmiN8.js +0 -3
- package/server/public/assets/index-CWeMerGO.js +0 -804
- package/server/public/assets/index-CenuJ3Cw.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +0 -1
- package/server/rally-zhhtXuDP.js +0 -3
- package/server/record-CN0pj4_5.js +0 -3
- package/server/record-update-bLJxAXH4.js +0 -3
- package/server/resume-BFv1PGpA.js +0 -3
- package/server/review-status-btEYlaxA.js +0 -3
- package/server/review-status-kZj_KyCk.js +0 -1470
- package/server/settings-66A6uvIA.js +0 -2
- package/server/spawn-planning-session-qUC2VWu3.js +0 -2
- package/server/specs-C8Wsn2XO.js +0 -3
- package/server/src-DtcUOZCq.js +0 -4826
- package/server/supervisor-FTJAIsAK.js +0 -2
- package/server/token-util-DuPuNriz.js +0 -3
- package/server/tracker-utils-B4ylXZQK.js +0 -3
- package/server/uat-train-B05BWkp-.js +0 -2
- package/server/uat-train-DDSrSoV1.js +0 -2152
- package/server/workflows-BQu4RFQ-.js +0 -2
- package/server/workspace-manager-CWT55qeI.js +0 -3
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { b as init_agents, i as listRunningAgents } from "./queries-
|
|
4
|
-
import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population-
|
|
5
|
-
import { f as init_config, s as getDashboardApiUrlSync } from "./config-
|
|
6
|
-
import { i as loadCloisterConfig, r as init_config$1 } from "./config-
|
|
7
|
-
import { r as getAutoCloseOutCanonicalState, t as pruneStoppedAgentsForIssue } from "./agent-gc-
|
|
8
|
-
import { i as
|
|
9
|
-
import {
|
|
10
|
-
import { t as
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import { t as
|
|
1
|
+
import { Ft as markRecordPipelineClosedOutSync, Gr as OVERDECK_HOME, Lt as readIssueRecord, Nt as getProjectConfigFromWorkspacePath, Pt as init_record, Vt as resolveProjectForIssue, Wt as writeCloseOutDodGate, gr as init_issue_id, hr as extractPrefixSync, li as init_paths, mr as extractNumberSync } from "./config-yaml-CxdwhAIA.js";
|
|
2
|
+
import { D as resolvePipelineTelemetryContext, E as init_pipeline, p as init_review_status, u as getReviewStatus, w as capturePipelineStage } from "./review-status-CGvlA4o_.js";
|
|
3
|
+
import { b as init_agents, i as listRunningAgents } from "./queries-C-MUZaIy.js";
|
|
4
|
+
import { n as recordFeatureRegistryLifecycle, t as init_feature_registry_population } from "./feature-registry-population-B6HpNWRy.js";
|
|
5
|
+
import { f as init_config, s as getDashboardApiUrlSync } from "./config-BvLe652W.js";
|
|
6
|
+
import { i as loadCloisterConfig, r as init_config$1 } from "./config-Bi3u1VK7.js";
|
|
7
|
+
import { r as getAutoCloseOutCanonicalState, t as pruneStoppedAgentsForIssue } from "./agent-gc-C3h9Or3a.js";
|
|
8
|
+
import { i as isTrackerIssueClosed, n as init_issue_closed } from "./issue-closed-BehTG1be.js";
|
|
9
|
+
import { i as findWorkspacePath, t as archivePlanning } from "./archive-planning-BwhxeP7C.js";
|
|
10
|
+
import { a as stepSkipped, i as stepOk, n as init_types, r as stepFailed, t as getLinearApiKey } from "./types-Di8wdakq.js";
|
|
11
|
+
import { i as gatherIssueBranchContainment, s as init_pipeline_membership_gather } from "./pipeline-membership-gather-CeVGnNJ2.js";
|
|
12
|
+
import { t as closeIssue } from "./close-issue-BPh1ARCF.js";
|
|
13
|
+
import { o as init_pull_requests, r as fetchIssuePullRequest, t as fetchCommitCheckRuns } from "./pull-requests-7BgLDsIo.js";
|
|
14
|
+
import { a as canAcceptDodMisses, i as buildAbandonedDodGate, n as DOD_ROWS, r as acceptFlagFor, t as BRANCH_ABSENT_MERGE_ERROR } from "./dod-DlNtcH6n.js";
|
|
15
|
+
import { t as teardownWorkspace } from "./teardown-workspace-DRdi_CPa.js";
|
|
14
16
|
import { resolve } from "node:path";
|
|
15
17
|
import { Effect } from "effect";
|
|
16
18
|
import { existsSync } from "fs";
|
|
@@ -27,13 +29,14 @@ init_issue_id();
|
|
|
27
29
|
init_feature_registry_population();
|
|
28
30
|
init_config$1();
|
|
29
31
|
init_types();
|
|
30
|
-
init_archive_planning();
|
|
31
32
|
/** Mechanical Definition-of-Done row checks. */
|
|
32
33
|
init_agents();
|
|
33
34
|
init_config();
|
|
34
35
|
init_review_status();
|
|
35
36
|
init_record();
|
|
37
|
+
init_issue_closed();
|
|
36
38
|
init_pull_requests();
|
|
39
|
+
init_pipeline_membership_gather();
|
|
37
40
|
const execFileAsync = promisify(execFile);
|
|
38
41
|
const defaultMergedRowDeps = {
|
|
39
42
|
verifyMerged: async () => ({
|
|
@@ -47,9 +50,22 @@ const defaultMergedRowDeps = {
|
|
|
47
50
|
const response = await fetchIssuePullRequest(ctx.issueId);
|
|
48
51
|
if (response.error) throw new Error(response.error);
|
|
49
52
|
return response.pr ?? {};
|
|
53
|
+
},
|
|
54
|
+
readDurableMerges: async (ctx) => {
|
|
55
|
+
return (await readIssueRecord(resolveProjectForIssue(ctx.issueId) ?? getProjectConfigFromWorkspacePath(ctx.projectPath), ctx.issueId))?.closeOut.merges ?? [];
|
|
56
|
+
},
|
|
57
|
+
readBranchContainment: async (ctx) => {
|
|
58
|
+
const project = resolveProjectForIssue(ctx.issueId) ?? getProjectConfigFromWorkspacePath(ctx.projectPath);
|
|
59
|
+
if (!project) return {
|
|
60
|
+
unmergedRefs: [],
|
|
61
|
+
mergedWorkRefs: [],
|
|
62
|
+
pointerRefs: []
|
|
63
|
+
};
|
|
64
|
+
return gatherIssueBranchContainment(project, ctx.issueId);
|
|
50
65
|
}
|
|
51
66
|
};
|
|
52
67
|
const defaultPostMergeRowDeps = {
|
|
68
|
+
readStrikeLanded: async (issueId) => strikeLanded((await loadStatus(issueId, defaultDeps))?.status),
|
|
53
69
|
readCanonicalState: async (ctx) => {
|
|
54
70
|
return getAutoCloseOutCanonicalState(ctx.issueId);
|
|
55
71
|
},
|
|
@@ -65,13 +81,14 @@ const defaultMainVerifyRowDeps = { readCheckRuns: async (ctx, mergeCommit) => {
|
|
|
65
81
|
return fetchCommitCheckRuns(ctx.github.owner, ctx.github.repo, mergeCommit);
|
|
66
82
|
} };
|
|
67
83
|
const defaultEvaluateDodGateDeps = {
|
|
68
|
-
review: checkReviewRow,
|
|
69
|
-
tests: checkTestsRow,
|
|
70
|
-
verification: checkVerificationRow,
|
|
84
|
+
review: (issueId, settlement) => checkReviewRow(issueId, defaultDeps, settlement),
|
|
85
|
+
tests: (issueId, settlement) => checkTestsRow(issueId, defaultDeps, settlement),
|
|
86
|
+
verification: (issueId, settlement) => checkVerificationRow(issueId, defaultDeps, settlement),
|
|
71
87
|
merged: checkMergedRow,
|
|
72
88
|
postMerge: checkPostMergeRow,
|
|
73
89
|
mainVerify: checkMainVerifyRow,
|
|
74
90
|
deploy: checkDeployRow,
|
|
91
|
+
trackerClosed: isTrackerIssueClosed,
|
|
75
92
|
now: () => (/* @__PURE__ */ new Date()).toISOString()
|
|
76
93
|
};
|
|
77
94
|
const defaultDeployRowDeps = {
|
|
@@ -137,30 +154,78 @@ async function loadStatus(issueId, deps) {
|
|
|
137
154
|
return null;
|
|
138
155
|
}
|
|
139
156
|
}
|
|
140
|
-
|
|
157
|
+
/**
|
|
158
|
+
* PAN-3180: `landed` is the strike path's own durable statement that this issue's
|
|
159
|
+
* work reached main through `strike/<id>`. It is written by the server merge door
|
|
160
|
+
* (`mergeCompletionStatus` in `merge-strike.ts`) and mirrored into the per-issue
|
|
161
|
+
* record's `pipeline` block, so it outlives review-status clearing. Every earlier
|
|
162
|
+
* landing state (`ready`/`landing`/`recovering`/`needs_you`) is a strike still in
|
|
163
|
+
* flight and earns no waiver.
|
|
164
|
+
*/
|
|
165
|
+
function strikeLanded(status) {
|
|
166
|
+
return status?.strikeLandingState === "landed";
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* PAN-3180: a strike dispatches neither a review nor a test specialist — that
|
|
170
|
+
* bypass is the whole point of the path. So for a strike-landed issue these rows
|
|
171
|
+
* are `skip` (deliberately not run), never `pass` (ran and succeeded) and never
|
|
172
|
+
* `miss` (outstanding). A reader of the close-out record still sees the real
|
|
173
|
+
* verdict and the reason it was never produced.
|
|
174
|
+
*/
|
|
175
|
+
const STRIKE_BYPASS_NOTE = {
|
|
176
|
+
review: "no review specialist is dispatched for a strike",
|
|
177
|
+
tests: "no test specialist is dispatched for a strike"
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* A specialist that ran and returned a negative verdict is a different fact from
|
|
181
|
+
* one that was never dispatched, so the strike waiver never covers it — those
|
|
182
|
+
* still block until an operator records an explicit `--accept-<row>` override.
|
|
183
|
+
*/
|
|
184
|
+
const NEGATIVE_VERDICTS = new Set([
|
|
185
|
+
"failed",
|
|
186
|
+
"blocked",
|
|
187
|
+
"dispatch_failed"
|
|
188
|
+
]);
|
|
189
|
+
/**
|
|
190
|
+
* PAN-3187: a tracker-closed issue with landed work cannot produce a verdict it
|
|
191
|
+
* never produced while active. Negative test/verification verdicts settle only
|
|
192
|
+
* when main verification proves the landed state green; review negatives remain.
|
|
193
|
+
*/
|
|
194
|
+
function terminalVerdictSettlement(id, value, observed, settlement) {
|
|
195
|
+
if (!settlement?.trackerClosed || !settlement.landedWork) return null;
|
|
196
|
+
if (!NEGATIVE_VERDICTS.has(value ?? "")) return result(id, "skip", `${observed}; settled because the tracker issue is closed and merged work is landed`);
|
|
197
|
+
if (id !== "review" && settlement.mainVerifyStatus === "pass") return result(id, "skip", `${observed}; superseded because the tracker issue is closed, merged work is landed, and main verification passed`);
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
async function checkVerdict(issueId, id, field, deps, settlement) {
|
|
141
201
|
const loaded = await loadStatus(issueId, deps);
|
|
142
202
|
if (!loaded) return result(id, "miss", "no review status or journal record found");
|
|
143
203
|
const value = loaded.status[field];
|
|
144
204
|
const source = loaded.source === "journal" ? " from pipeline journal" : "";
|
|
145
205
|
const observed = `${field}: ${value ?? "missing"}${source}${value === "skipped" ? " (skipped per issue policy)" : ""}`;
|
|
146
|
-
|
|
206
|
+
if (value === "passed" || value === "skipped") return result(id, "pass", observed);
|
|
207
|
+
if (strikeLanded(loaded.status) && !NEGATIVE_VERDICTS.has(value ?? "")) return result(id, "skip", `${observed}; skipped by the strike path (strikeLandingState: landed) — ${STRIKE_BYPASS_NOTE[id]}`);
|
|
208
|
+
return terminalVerdictSettlement(id, value, observed, settlement) ?? result(id, "miss", observed);
|
|
147
209
|
}
|
|
148
|
-
function checkReviewRow(issueId, deps = defaultDeps) {
|
|
149
|
-
return checkVerdict(issueId, "review", "reviewStatus", deps);
|
|
210
|
+
function checkReviewRow(issueId, deps = defaultDeps, settlement) {
|
|
211
|
+
return checkVerdict(issueId, "review", "reviewStatus", deps, settlement);
|
|
150
212
|
}
|
|
151
|
-
function checkTestsRow(issueId, deps = defaultDeps) {
|
|
152
|
-
return checkVerdict(issueId, "tests", "testStatus", deps);
|
|
213
|
+
function checkTestsRow(issueId, deps = defaultDeps, settlement) {
|
|
214
|
+
return checkVerdict(issueId, "tests", "testStatus", deps, settlement);
|
|
153
215
|
}
|
|
154
|
-
async function checkVerificationRow(issueId, deps = defaultDeps) {
|
|
216
|
+
async function checkVerificationRow(issueId, deps = defaultDeps, settlement) {
|
|
155
217
|
const loaded = await loadStatus(issueId, deps);
|
|
156
218
|
if (!loaded) return result("verification", "miss", "no review status or journal record found");
|
|
157
219
|
const value = loaded.status.verificationStatus;
|
|
158
220
|
const commit = loaded.status.lastVerifiedCommit;
|
|
159
|
-
const
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
221
|
+
const accepted = value === "passed" || value === "skipped";
|
|
222
|
+
const notes = [];
|
|
223
|
+
if (loaded.source === "journal") notes.push("from pipeline journal");
|
|
224
|
+
if (value === "skipped") notes.push("skipped per issue policy");
|
|
225
|
+
if (accepted && !commit) notes.push("no lastVerifiedCommit recorded");
|
|
226
|
+
const observed = `verificationStatus: ${value ?? "missing"}${commit ? ` at ${commit}` : ""}${notes.length > 0 ? ` (${notes.join("; ")})` : ""}`;
|
|
227
|
+
if (accepted) return result("verification", "pass", observed);
|
|
228
|
+
return terminalVerdictSettlement("verification", value, observed, settlement) ?? result("verification", "miss", observed);
|
|
164
229
|
}
|
|
165
230
|
async function checkMergedRow(ctx, deps = defaultMergedRowDeps) {
|
|
166
231
|
const verified = await deps.verifyMerged(ctx).catch((error) => ({
|
|
@@ -171,10 +236,19 @@ async function checkMergedRow(ctx, deps = defaultMergedRowDeps) {
|
|
|
171
236
|
}));
|
|
172
237
|
const observed = verified.details?.join("; ") || verified.error || (verified.skipped ? "issue already closed on forge" : "merge not verified");
|
|
173
238
|
const merged = result("merged", verified.success || verified.skipped ? "pass" : "miss", observed);
|
|
174
|
-
|
|
175
|
-
|
|
239
|
+
const branchAbsent = verified.error === BRANCH_ABSENT_MERGE_ERROR;
|
|
240
|
+
let durableMerges = [];
|
|
241
|
+
if (branchAbsent) try {
|
|
242
|
+
durableMerges = await (deps.readDurableMerges ?? defaultMergedRowDeps.readDurableMerges)(ctx);
|
|
243
|
+
} catch (error) {
|
|
244
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
245
|
+
merged.observed = `${merged.observed}; durable merge evidence unavailable: ${message}`;
|
|
246
|
+
}
|
|
247
|
+
let pullRequestState;
|
|
248
|
+
if (ctx.github) try {
|
|
176
249
|
const branchName = `feature/${ctx.issueId.toLowerCase()}`;
|
|
177
250
|
const pullRequest = await deps.readPullRequest(ctx, branchName);
|
|
251
|
+
pullRequestState = pullRequest.state;
|
|
178
252
|
merged.mergedAt = pullRequest.mergedAt;
|
|
179
253
|
merged.mergeCommit = typeof pullRequest.mergeCommit === "string" ? pullRequest.mergeCommit : pullRequest.mergeCommit?.oid;
|
|
180
254
|
const number = pullRequest.number ? `PR #${pullRequest.number}` : "PR";
|
|
@@ -185,9 +259,27 @@ async function checkMergedRow(ctx, deps = defaultMergedRowDeps) {
|
|
|
185
259
|
const message = error instanceof Error ? error.message : String(error);
|
|
186
260
|
merged.observed = `${merged.observed}; forge metadata unavailable: ${message}`;
|
|
187
261
|
}
|
|
262
|
+
if (branchAbsent) {
|
|
263
|
+
const forgeMerged = pullRequestState?.toUpperCase() === "MERGED";
|
|
264
|
+
if (durableMerges.length > 0 || forgeMerged) {
|
|
265
|
+
merged.status = "pass";
|
|
266
|
+
if (durableMerges.length > 0) merged.observed = `${merged.observed}; durable close-out record contains ${durableMerges.length} merge artifact(s)`;
|
|
267
|
+
} else merged.observed = `${merged.observed}; no merged forge artifact or durable close-out merge record found`;
|
|
268
|
+
}
|
|
269
|
+
if (merged.status === "miss") try {
|
|
270
|
+
const containment = await (deps.readBranchContainment ?? defaultMergedRowDeps.readBranchContainment)(ctx);
|
|
271
|
+
if (containment.mergedWorkRefs.length > 0 && containment.unmergedRefs.length === 0) {
|
|
272
|
+
merged.status = "pass";
|
|
273
|
+
merged.evidence = "branch-containment";
|
|
274
|
+
merged.observed = `${merged.observed}; branch work contained in default branch with no merged PR — non-PR landing (membership L2-work lens): ${containment.mergedWorkRefs.join(", ")}`;
|
|
275
|
+
}
|
|
276
|
+
} catch (error) {
|
|
277
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
278
|
+
merged.observed = `${merged.observed}; branch containment evidence unavailable: ${message}`;
|
|
279
|
+
}
|
|
188
280
|
return merged;
|
|
189
281
|
}
|
|
190
|
-
async function checkPostMergeRow(ctx, deps = defaultPostMergeRowDeps) {
|
|
282
|
+
async function checkPostMergeRow(ctx, merged, deps = defaultPostMergeRowDeps) {
|
|
191
283
|
try {
|
|
192
284
|
const canonicalState = await deps.readCanonicalState(ctx);
|
|
193
285
|
const mergeStatus = await deps.readMergeStatus(ctx.issueId);
|
|
@@ -195,7 +287,12 @@ async function checkPostMergeRow(ctx, deps = defaultPostMergeRowDeps) {
|
|
|
195
287
|
const runningAgents = (await deps.listAgents()).filter((agent) => agent.issueId.toUpperCase() === issueId && (agent.role === "work" || agent.role === "plan") && (agent.status === "starting" || agent.status === "running"));
|
|
196
288
|
const stateObserved = canonicalState ? `canonical state: ${canonicalState}` : `canonical state unavailable; mergeStatus: ${mergeStatus ?? "missing"}`;
|
|
197
289
|
const agentsObserved = runningAgents.length > 0 ? `running agents: ${runningAgents.map((agent) => agent.id).join(", ")}` : "no running work/planning agents";
|
|
198
|
-
|
|
290
|
+
if (canonicalState === "done") return result("post-merge", runningAgents.length === 0 ? "pass" : "miss", `terminal canonical state: done — the post-merge lifecycle already ran to close-out; ${agentsObserved}`);
|
|
291
|
+
if (canonicalState === "canceled") return result("post-merge", runningAgents.length === 0 ? "skip" : "miss", `terminal canonical state: canceled — post-merge lifecycle not applicable; ${agentsObserved}`);
|
|
292
|
+
const lifecycleObserved = canonicalState === "verifying_on_main" || mergeStatus === "merged";
|
|
293
|
+
if (!lifecycleObserved && await (deps.readStrikeLanded ?? defaultPostMergeRowDeps.readStrikeLanded)(ctx.issueId)) return result("post-merge", runningAgents.length === 0 ? "skip" : "miss", `strike landing (strikeLandingState: landed) — the work-agent post-merge handoff is not the strike path's lifecycle; ${stateObserved}; ${agentsObserved}`);
|
|
294
|
+
if (!lifecycleObserved && merged?.evidence === "branch-containment") return result("post-merge", runningAgents.length === 0 ? "pass" : "miss", `non-PR landing (branch-containment evidence) — post-merge lifecycle not applicable; ${agentsObserved}`);
|
|
295
|
+
return result("post-merge", lifecycleObserved && runningAgents.length === 0 ? "pass" : "miss", `${stateObserved}; ${agentsObserved}`);
|
|
199
296
|
} catch (error) {
|
|
200
297
|
return result("post-merge", "miss", `post-merge evidence unavailable: ${error instanceof Error ? error.message : String(error)}`);
|
|
201
298
|
}
|
|
@@ -212,6 +309,11 @@ async function checkMainVerifyRow(ctx, mergeCommit, deps = defaultMainVerifyRowD
|
|
|
212
309
|
}
|
|
213
310
|
}
|
|
214
311
|
async function checkDeployRow(ctx, merge, deps = defaultDeployRowDeps) {
|
|
312
|
+
if (!merge.mergeCommit) {
|
|
313
|
+
if (merge.mergedRowStatus === "miss") return result("deploy", "skip", "no merge commit resolved because the merged row missed — deploy ancestry depends on row 4; build ancestry unchecked");
|
|
314
|
+
if (merge.mainVerifyRowStatus === "skip") return result("deploy", "skip", "verified-on-main skipped — no merge commit resolvable, so deploy build-ancestry has no durable anchor either (same landing class as DoD row 6 skip)");
|
|
315
|
+
return result("deploy", "miss", "merged row passed without a resolvable merge commit; build ancestry cannot be checked");
|
|
316
|
+
}
|
|
215
317
|
const baseUrl = deps.dashboardUrl().replace(/\/$/, "");
|
|
216
318
|
let health;
|
|
217
319
|
try {
|
|
@@ -224,8 +326,9 @@ async function checkDeployRow(ctx, merge, deps = defaultDeployRowDeps) {
|
|
|
224
326
|
if (resolve(repoRoot) !== resolve(ctx.projectPath)) return result("deploy", "skip", `live dashboard serves ${repoRoot}, not this project — deploy semantics undefined for ${ctx.projectPath}`);
|
|
225
327
|
const buildCommit = typeof health.buildCommit === "string" && health.buildCommit.trim() ? health.buildCommit : void 0;
|
|
226
328
|
if (!buildCommit) return result("deploy", "miss", `dashboard at ${baseUrl} did not report buildCommit; live deployment cannot be proven`);
|
|
227
|
-
if (!merge.mergeCommit) return result("deploy", "miss", "cannot resolve merge commit; live deployment cannot be proven");
|
|
228
329
|
try {
|
|
330
|
+
if (health.buildDirty === true) return result("deploy", "miss", `live build ${buildCommit.slice(0, 8)} was built from a dirty working tree — uncommitted changes may be serving; redeploy canonically with \`pan reload\``);
|
|
331
|
+
if (!await deps.commitContains(repoRoot, buildCommit, "origin/main")) return result("deploy", "miss", `live build commit ${buildCommit.slice(0, 8)} is not an ancestor of origin/main — the server is running a build of local-only commits; redeploy with \`pan reload\``);
|
|
229
332
|
const contains = await deps.commitContains(repoRoot, merge.mergeCommit, buildCommit);
|
|
230
333
|
const observed = `build commit ${buildCommit.slice(0, 8)} ${contains ? "contains" : "does not contain"} merge ${merge.mergeCommit.slice(0, 8)}`;
|
|
231
334
|
return result("deploy", contains ? "pass" : "miss", observed);
|
|
@@ -237,23 +340,39 @@ async function evaluateDodGate(ctx, opts = {}, deps = defaultEvaluateDodGateDeps
|
|
|
237
340
|
const acceptedRows = new Set(opts.acceptedRows ?? []);
|
|
238
341
|
const overridable = new Set(DOD_ROWS.filter((row) => row.overridable).map((row) => row.id));
|
|
239
342
|
for (const id of acceptedRows) if (!overridable.has(id)) throw new TypeError(`DoD row "${id}" cannot be accepted; valid rows: ${[...overridable].join(", ")}`);
|
|
343
|
+
const by = opts.acceptedBy ?? process.env.OVERDECK_AGENT_ID ?? userInfo().username;
|
|
344
|
+
if (acceptedRows.size > 0 && !canAcceptDodMisses(by)) throw new TypeError("The flywheel orchestrator cannot accept missed Definition-of-Done rows; an operator must apply --accept-<row> overrides.");
|
|
240
345
|
const merged = opts.verifyMerged ? await checkMergedRow(ctx, {
|
|
241
346
|
...defaultMergedRowDeps,
|
|
242
347
|
verifyMerged: opts.verifyMerged
|
|
243
348
|
}) : await deps.merged(ctx);
|
|
244
|
-
const
|
|
245
|
-
|
|
246
|
-
deps.
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
349
|
+
const mainVerify = await deps.mainVerify(ctx, merged.mergeCommit);
|
|
350
|
+
const settlement = {
|
|
351
|
+
trackerClosed: await (deps.trackerClosed ?? defaultEvaluateDodGateDeps.trackerClosed)(ctx.issueId),
|
|
352
|
+
landedWork: merged.status === "pass",
|
|
353
|
+
mainVerifyStatus: mainVerify.status
|
|
354
|
+
};
|
|
355
|
+
const [review, tests, verification, postMerge, deploy] = await Promise.all([
|
|
356
|
+
deps.review(ctx.issueId, settlement),
|
|
357
|
+
deps.tests(ctx.issueId, settlement),
|
|
358
|
+
deps.verification(ctx.issueId, settlement),
|
|
359
|
+
deps.postMerge(ctx, merged),
|
|
251
360
|
deps.deploy(ctx, {
|
|
252
361
|
mergedAt: merged.mergedAt,
|
|
253
|
-
mergeCommit: merged.mergeCommit
|
|
362
|
+
mergeCommit: merged.mergeCommit,
|
|
363
|
+
mergedRowStatus: merged.status,
|
|
364
|
+
mainVerifyRowStatus: mainVerify.status
|
|
254
365
|
})
|
|
255
366
|
]);
|
|
256
|
-
const
|
|
367
|
+
const rows = [
|
|
368
|
+
review,
|
|
369
|
+
tests,
|
|
370
|
+
verification,
|
|
371
|
+
merged,
|
|
372
|
+
postMerge,
|
|
373
|
+
mainVerify,
|
|
374
|
+
deploy
|
|
375
|
+
];
|
|
257
376
|
for (const row of rows) if (row.status === "miss" && acceptedRows.has(row.id)) row.acceptedBy = {
|
|
258
377
|
flag: acceptFlagFor(rowDefinition(row.id)),
|
|
259
378
|
by,
|
|
@@ -277,6 +396,7 @@ async function evaluateDodGate(ctx, opts = {}, deps = defaultEvaluateDodGateDeps
|
|
|
277
396
|
* deepWipe() — Destructive: teardown(deleteBranches) + delete agent state + reset issue
|
|
278
397
|
*/
|
|
279
398
|
init_record();
|
|
399
|
+
init_pipeline();
|
|
280
400
|
const execAsync = promisify$1(exec$1);
|
|
281
401
|
function trackerName(ctx, fallback) {
|
|
282
402
|
const name = ctx.tracker?.name ?? fallback;
|
|
@@ -363,7 +483,19 @@ function closeOut(ctx, opts = {}) {
|
|
|
363
483
|
return Effect.gen(function* () {
|
|
364
484
|
const start = Date.now();
|
|
365
485
|
const allSteps = [];
|
|
366
|
-
const
|
|
486
|
+
const uatEvidenceStep = yield* Effect.promise(async () => {
|
|
487
|
+
try {
|
|
488
|
+
const { healUatPromotionVerification } = await import("./uat-promote-verification-CoJuh7XO.js");
|
|
489
|
+
const evidence = await healUatPromotionVerification(ctx.issueId);
|
|
490
|
+
if (!evidence) return stepSkipped("dod:uat-promotion-evidence", ["No missing UAT-promotion verification evidence found"]);
|
|
491
|
+
return stepOk("dod:uat-promotion-evidence", [`Recorded verification from ${evidence.generation}`, ...evidence.mergeSha ? [`Promoted to main at ${evidence.mergeSha.slice(0, 9)}`] : []]);
|
|
492
|
+
} catch (err) {
|
|
493
|
+
return stepSkipped("dod:uat-promotion-evidence", [`Evidence recovery unavailable: ${err instanceof Error ? err.message : String(err)}`]);
|
|
494
|
+
}
|
|
495
|
+
});
|
|
496
|
+
allSteps.push(uatEvidenceStep);
|
|
497
|
+
const abandon = opts.abandonDisposition;
|
|
498
|
+
const dodGate = abandon ? buildAbandonedDodGate(abandon.reason, abandon.by) : yield* Effect.promise(() => evaluateDodGate(ctx, {
|
|
367
499
|
acceptedRows: opts.dodAcceptedRows,
|
|
368
500
|
acceptedBy: opts.dodAcceptedBy,
|
|
369
501
|
verifyMerged: verifyBranchMergedImpl
|
|
@@ -392,6 +524,13 @@ function closeOut(ctx, opts = {}) {
|
|
|
392
524
|
allSteps.push(stepFailed("close-out:abort", "Stopped — xBRIEF completion failed, workspace preserved"));
|
|
393
525
|
return buildResult("close-out", ctx.issueId, allSteps, start, dodGate);
|
|
394
526
|
}
|
|
527
|
+
const telemetryContext = yield* Effect.promise(async () => {
|
|
528
|
+
try {
|
|
529
|
+
return await resolvePipelineTelemetryContext(ctx.issueId);
|
|
530
|
+
} catch {
|
|
531
|
+
return null;
|
|
532
|
+
}
|
|
533
|
+
});
|
|
395
534
|
const closeOutConfig = (yield* Effect.promise(() => Effect.runPromise(loadCloisterConfig()))).close_out;
|
|
396
535
|
const teardownSteps = yield* teardownWorkspace(ctx, {
|
|
397
536
|
deleteWorkspace: closeOutConfig?.remove_workspace ?? false,
|
|
@@ -410,7 +549,7 @@ function closeOut(ctx, opts = {}) {
|
|
|
410
549
|
});
|
|
411
550
|
const closeSteps = yield* closeIssue(ctx, {
|
|
412
551
|
tracker: opts.tracker,
|
|
413
|
-
comment: ctx.auto ? "Closed via automatic close-out ceremony" : "Closed via close-out ceremony",
|
|
552
|
+
comment: abandon ? `Closed without landing evidence — disposition recorded: ${abandon.reason}` : ctx.auto ? "Closed via automatic close-out ceremony" : "Closed via close-out ceremony",
|
|
414
553
|
applyLabel: true
|
|
415
554
|
});
|
|
416
555
|
allSteps.push(...closeSteps);
|
|
@@ -420,7 +559,7 @@ function closeOut(ctx, opts = {}) {
|
|
|
420
559
|
}
|
|
421
560
|
const markTerminal = yield* markPipelineClosedOutStep(ctx);
|
|
422
561
|
allSteps.push(markTerminal);
|
|
423
|
-
const recordDodGate = yield* recordDodGateStep(ctx, dodGate);
|
|
562
|
+
const recordDodGate = yield* recordDodGateStep(ctx, dodGate, abandon);
|
|
424
563
|
allSteps.push(recordDodGate);
|
|
425
564
|
if (!recordDodGate.success) {
|
|
426
565
|
allSteps.push(stepFailed("close-out:abort", "Stopped — Definition-of-Done audit could not be persisted; review status preserved"));
|
|
@@ -437,7 +576,9 @@ function closeOut(ctx, opts = {}) {
|
|
|
437
576
|
issueId: ctx.issueId,
|
|
438
577
|
status: "archived"
|
|
439
578
|
}));
|
|
440
|
-
|
|
579
|
+
const result = buildResult("close-out", ctx.issueId, allSteps, start, dodGate);
|
|
580
|
+
if (result.success && !markTerminal.skipped) capturePipelineStage("closed_out", telemetryContext);
|
|
581
|
+
return result;
|
|
441
582
|
});
|
|
442
583
|
}
|
|
443
584
|
function markPipelineClosedOutStep(ctx) {
|
|
@@ -450,14 +591,15 @@ function markPipelineClosedOutStep(ctx) {
|
|
|
450
591
|
catch: (err) => err
|
|
451
592
|
}).pipe(Effect.catch((err) => Effect.succeed(stepSkipped(step, [`Pipeline terminal marker failed (non-fatal): ${err.message ?? String(err)}`]))));
|
|
452
593
|
}
|
|
453
|
-
function recordDodGateStep(ctx, dodGate) {
|
|
594
|
+
function recordDodGateStep(ctx, dodGate, abandonDisposition) {
|
|
454
595
|
const step = "close-out:record-dod-gate";
|
|
455
596
|
return Effect.tryPromise({
|
|
456
597
|
try: async () => {
|
|
457
598
|
await writeCloseOutDodGate(getProjectConfigFromWorkspacePath(ctx.projectPath), ctx.issueId.toUpperCase(), {
|
|
458
599
|
evaluatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
459
600
|
rows: dodGate.rows,
|
|
460
|
-
accepted: dodGate.accepted
|
|
601
|
+
accepted: dodGate.accepted,
|
|
602
|
+
...abandonDisposition ? { disposition: abandonDisposition } : {}
|
|
461
603
|
});
|
|
462
604
|
return stepOk(step, ["Recorded Definition-of-Done gate with 8 rows"]);
|
|
463
605
|
},
|
|
@@ -542,7 +684,7 @@ function cancelIssueWorkflow(ctx, opts = {}) {
|
|
|
542
684
|
async function completeXBriefStep(ctx) {
|
|
543
685
|
const step = "close-out:vbrief-completed";
|
|
544
686
|
try {
|
|
545
|
-
const { transitionXBriefOnMain } = await import("./lifecycle-io-
|
|
687
|
+
const { transitionXBriefOnMain } = await import("./lifecycle-io-CzTHEooc.js");
|
|
546
688
|
const result = await Effect.runPromise(transitionXBriefOnMain(ctx.projectPath, ctx.issueId, "completed", "completed", `scope: complete ${ctx.issueId.toUpperCase()} xBRIEF`));
|
|
547
689
|
const details = [result.moved ? "Updated xBRIEF lifecycle to completed" : "xBRIEF lifecycle already completed", result.statusUpdated ? "Updated plan.status to completed" : "plan.status already completed"];
|
|
548
690
|
if (result.committed) details.push("Committed xBRIEF completion on main");
|
|
@@ -556,70 +698,81 @@ async function completeXBriefStep(ctx) {
|
|
|
556
698
|
}
|
|
557
699
|
async function verifyBranchMergedImpl(ctx) {
|
|
558
700
|
const step = "close-out:verify-merged";
|
|
559
|
-
const
|
|
701
|
+
const issueLower = ctx.issueId.toLowerCase();
|
|
702
|
+
const featureBranchName = `feature/${issueLower}`;
|
|
703
|
+
const strikeBranchName = `strike/${issueLower}`;
|
|
560
704
|
try {
|
|
561
705
|
try {
|
|
562
|
-
const { loadReviewStatuses } = await import("./review-status-
|
|
706
|
+
const { loadReviewStatuses } = await import("./review-status-Dma9SFaN.js");
|
|
563
707
|
if (loadReviewStatuses()[ctx.issueId.toUpperCase()]?.mergeStatus === "merged") return stepOk(step, ["Merge specialist confirmed merge completed"]);
|
|
564
708
|
} catch {}
|
|
565
|
-
const
|
|
709
|
+
const featureResult = await verifyConventionBranchMerged(ctx, featureBranchName);
|
|
710
|
+
if (featureResult?.success) return featureResult;
|
|
711
|
+
const strikeResult = await verifyConventionBranchMerged(ctx, strikeBranchName);
|
|
712
|
+
if (strikeResult?.success && !strikeResult.skipped) return stepOk(step, [...strikeResult.details ?? [], `Superseded ${featureBranchName} residual: ${featureResult?.error ?? "Feature branch is absent; positive merge evidence is required"}`]);
|
|
713
|
+
if (featureResult) return featureResult;
|
|
714
|
+
return stepFailed(step, BRANCH_ABSENT_MERGE_ERROR);
|
|
715
|
+
} catch (err) {
|
|
716
|
+
return stepFailed(step, `Could not verify merge: ${err.message}`);
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
async function verifyConventionBranchMerged(ctx, branchName) {
|
|
720
|
+
const step = "close-out:verify-merged";
|
|
721
|
+
const { stdout: branchExists } = await execAsync(`git branch --list "${branchName}" 2>/dev/null || true`, {
|
|
722
|
+
cwd: ctx.projectPath,
|
|
723
|
+
encoding: "utf-8"
|
|
724
|
+
});
|
|
725
|
+
if (branchExists.trim()) try {
|
|
726
|
+
await execAsync(`git merge-base --is-ancestor ${branchName} main`, {
|
|
566
727
|
cwd: ctx.projectPath,
|
|
567
728
|
encoding: "utf-8"
|
|
568
729
|
});
|
|
569
|
-
|
|
570
|
-
|
|
730
|
+
const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
|
|
731
|
+
if (remoteCheck && !remoteCheck.success) return remoteCheck;
|
|
732
|
+
return stepOk(step, ["All commits merged to main", ...remoteCheck?.details ?? []]);
|
|
733
|
+
} catch {
|
|
734
|
+
try {
|
|
735
|
+
const { stdout: codeDiff } = await execAsync(`git diff main...${branchName} -- ':!.planning' ':!docs/prds' ':!.overdeck/prompts' 2>/dev/null || true`, {
|
|
571
736
|
cwd: ctx.projectPath,
|
|
572
737
|
encoding: "utf-8"
|
|
573
738
|
});
|
|
574
|
-
|
|
575
|
-
if (remoteCheck && !remoteCheck.success) return remoteCheck;
|
|
576
|
-
return stepOk(step, ["All commits merged to main", ...remoteCheck?.details ?? []]);
|
|
577
|
-
} catch {
|
|
578
|
-
try {
|
|
579
|
-
const { stdout: codeDiff } = await execAsync(`git diff main...${branchName} -- ':!.planning' ':!docs/prds' ':!.overdeck/prompts' 2>/dev/null || true`, {
|
|
580
|
-
cwd: ctx.projectPath,
|
|
581
|
-
encoding: "utf-8"
|
|
582
|
-
});
|
|
583
|
-
if (!codeDiff.trim()) {
|
|
584
|
-
const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
|
|
585
|
-
if (remoteCheck && !remoteCheck.success) return remoteCheck;
|
|
586
|
-
return stepOk(step, ["Code changes squash-merged to main (only planning artifacts remain on branch)", ...remoteCheck?.details ?? []]);
|
|
587
|
-
}
|
|
588
|
-
} catch {}
|
|
589
|
-
const githubMerged = await verifySquashMergedPrByBranch(ctx, branchName, branchName);
|
|
590
|
-
if (githubMerged?.success) {
|
|
739
|
+
if (!codeDiff.trim()) {
|
|
591
740
|
const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
|
|
592
741
|
if (remoteCheck && !remoteCheck.success) return remoteCheck;
|
|
593
|
-
return stepOk(step, [
|
|
742
|
+
return stepOk(step, ["Code changes squash-merged to main (only planning artifacts remain on branch)", ...remoteCheck?.details ?? []]);
|
|
594
743
|
}
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
if (ctx.github) try {
|
|
602
|
-
const { stdout: issueState } = await execAsync(`gh issue view ${ctx.github.number} --repo ${ctx.github.owner}/${ctx.github.repo} --json state --jq '.state'`, {
|
|
603
|
-
cwd: ctx.projectPath,
|
|
604
|
-
encoding: "utf-8"
|
|
605
|
-
});
|
|
606
|
-
if (issueState.trim().toUpperCase() === "CLOSED") return stepSkipped(step, [`Issue already closed on GitHub; ${count} unmerged commit(s) remain on ${branchName}`]);
|
|
607
|
-
} catch {}
|
|
608
|
-
return stepFailed(step, `${count} unmerged commit(s) on ${branchName}. Merge before closing out.`);
|
|
744
|
+
} catch {}
|
|
745
|
+
const githubMerged = await verifySquashMergedPrByBranch(ctx, branchName, branchName);
|
|
746
|
+
if (githubMerged?.success) {
|
|
747
|
+
const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
|
|
748
|
+
if (remoteCheck && !remoteCheck.success) return remoteCheck;
|
|
749
|
+
return stepOk(step, [...githubMerged.details ?? [], ...remoteCheck?.details ?? []]);
|
|
609
750
|
}
|
|
610
|
-
|
|
751
|
+
if (githubMerged) return githubMerged;
|
|
752
|
+
const { stdout: unmerged } = await execAsync(`git log main..${branchName} --oneline 2>/dev/null || true`, {
|
|
611
753
|
cwd: ctx.projectPath,
|
|
612
754
|
encoding: "utf-8"
|
|
613
755
|
});
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
const
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
756
|
+
const count = unmerged.trim() ? unmerged.trim().split("\n").length : 0;
|
|
757
|
+
if (ctx.github) try {
|
|
758
|
+
const { stdout: issueState } = await execAsync(`gh issue view ${ctx.github.number} --repo ${ctx.github.owner}/${ctx.github.repo} --json state --jq '.state'`, {
|
|
759
|
+
cwd: ctx.projectPath,
|
|
760
|
+
encoding: "utf-8"
|
|
761
|
+
});
|
|
762
|
+
if (issueState.trim().toUpperCase() === "CLOSED") return stepSkipped(step, [`Issue already closed on GitHub; ${count} unmerged commit(s) remain on ${branchName}`]);
|
|
763
|
+
} catch {}
|
|
764
|
+
return stepFailed(step, `${count} unmerged commit(s) on ${branchName}. Merge before closing out.`);
|
|
765
|
+
}
|
|
766
|
+
const { stdout: remoteBranch } = await execAsync(`git ls-remote --heads origin "${branchName}" 2>/dev/null || true`, {
|
|
767
|
+
cwd: ctx.projectPath,
|
|
768
|
+
encoding: "utf-8"
|
|
769
|
+
});
|
|
770
|
+
if (remoteBranch.trim()) {
|
|
771
|
+
await execAsync(`git fetch origin ${branchName}`, { cwd: ctx.projectPath }).catch(() => {});
|
|
772
|
+
const remoteCheck = await verifyRemoteBranchIfPresent(ctx, branchName);
|
|
773
|
+
if (remoteCheck) return remoteCheck;
|
|
622
774
|
}
|
|
775
|
+
return null;
|
|
623
776
|
}
|
|
624
777
|
async function verifyRemoteBranchIfPresent(ctx, branchName) {
|
|
625
778
|
const step = "close-out:verify-merged";
|
|
@@ -783,7 +936,7 @@ async function resetIssueToTodoImpl(ctx) {
|
|
|
783
936
|
*/
|
|
784
937
|
async function resetPostMergeStateForIssue(issueId) {
|
|
785
938
|
try {
|
|
786
|
-
const { resetPostMergeState } = await import("./merge-agent-
|
|
939
|
+
const { resetPostMergeState } = await import("./merge-agent-DQTXZk8z.js");
|
|
787
940
|
resetPostMergeState(issueId);
|
|
788
941
|
resetPostMergeState(issueId.toUpperCase());
|
|
789
942
|
} catch {
|
|
@@ -799,7 +952,7 @@ function clearReviewStatusStep(issueId) {
|
|
|
799
952
|
async function clearReviewStatusStepImpl(issueId) {
|
|
800
953
|
const step = "clear-review-status";
|
|
801
954
|
try {
|
|
802
|
-
const { clearReviewStatus } = await import("./review-status-
|
|
955
|
+
const { clearReviewStatus } = await import("./review-status-Dma9SFaN.js");
|
|
803
956
|
clearReviewStatus(issueId.toUpperCase());
|
|
804
957
|
return stepOk(step, ["Review status cleared"]);
|
|
805
958
|
} catch {
|
|
@@ -866,4 +1019,4 @@ async function resetIssueToCanceledImpl(ctx) {
|
|
|
866
1019
|
//#endregion
|
|
867
1020
|
export { deepWipe as a, closeOut as i, cancelIssueWorkflow as n, resetToTodo as o, close as r, verifyBranchMergedImpl as s, approve as t };
|
|
868
1021
|
|
|
869
|
-
//# sourceMappingURL=workflows-
|
|
1022
|
+
//# sourceMappingURL=workflows-D0vP1WrK.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { i as injectMemoryHookSettings, n as init_workspace, r as injectCavemanSettings, t as determineCavemanVariant } from "./workspace-
|
|
1
|
+
import { i as injectMemoryHookSettings, n as init_workspace, r as injectCavemanSettings, t as determineCavemanVariant } from "./workspace-DQkRPLlQ.js";
|
|
2
2
|
init_workspace();
|
|
3
3
|
export { determineCavemanVariant, injectCavemanSettings, injectMemoryHookSettings };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
3
|
-
import { i as init_settings, t as areMemoryObservationsEnabled } from "./settings-
|
|
2
|
+
import { Fr as init_errors, Tr as FsError } from "./config-yaml-CxdwhAIA.js";
|
|
3
|
+
import { i as init_settings, t as areMemoryObservationsEnabled } from "./settings-VN0qOh4U.js";
|
|
4
4
|
import { Effect } from "effect";
|
|
5
5
|
import { existsSync } from "fs";
|
|
6
6
|
import { join } from "path";
|
|
@@ -238,4 +238,4 @@ var init_workspace = __esmMin((() => {
|
|
|
238
238
|
//#endregion
|
|
239
239
|
export { readCavemanVariant as a, injectMemoryHookSettings as i, init_workspace as n, injectCavemanSettings as r, determineCavemanVariant as t };
|
|
240
240
|
|
|
241
|
-
//# sourceMappingURL=workspace-
|
|
241
|
+
//# sourceMappingURL=workspace-DQkRPLlQ.js.map
|