@overdeck/desktop 0.45.23 → 0.45.24
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 +2 -0
- package/package.json +1 -1
- package/server/{acceptance-criteria-DOA0KgXx.js → acceptance-criteria-DDCnXF58.js} +2 -2
- package/server/{advancing-selfheal-BBu6DSNm.js → advancing-selfheal-BVwW4qRn.js} +6 -6
- package/server/{agent-gc-BV1q_2EV.js → agent-gc-CHcnvonI.js} +4 -4
- package/server/agent-state-Bc3tzUC8.js +3 -0
- package/server/{agent-state-service-HoK8U4jW.js → agent-state-service-BsgWxZuB.js} +5 -5
- package/server/{agent-state-service-CnzFKSAQ.js → agent-state-service-D5UGKIJL.js} +1 -1
- package/server/{agents-B4Bjbkfv.js → agents-EbI0zCJl.js} +4 -4
- package/server/agents-wi9NWzs2.js +3 -0
- package/server/{archive-planning-zkJb3BeM.js → archive-planning-BZDgzoEj.js} +1 -1
- package/server/{archive-planning-DYrYojxl.js → archive-planning-Du25Jtst.js} +4 -4
- package/server/{artifact-index-jobs-C-xy7Z5v.js → artifact-index-jobs-CbEDfCDu.js} +2 -2
- package/server/assemble-J2ZZ2C15.js +339 -0
- package/server/{backlog-auto-trigger-GtG71X8H.js → backlog-auto-trigger-2R2jog7n.js} +3 -3
- package/server/{behavior-B_-4EKF3.js → behavior-B3exJ42O.js} +2 -2
- package/server/{briefing-freshness-DWdW7vUm.js → briefing-freshness-D1wzUIWv.js} +2 -2
- package/server/{build-info-DgTqZkL5.js → build-info-CZk_TITh.js} +1 -1
- package/server/{build-info-BT096lEl.js → build-info-Ie_D0_BT.js} +3 -3
- package/server/{checkpoint-manager-DDqcGyu8.js → checkpoint-manager-BI1Wxoku.js} +2 -2
- package/server/{checkpoint-manager-B7Bt29J0.js → checkpoint-manager-DwbQoqrC.js} +1 -1
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-CpgCjAlN.js → checkpoints-BJIs5QIA.js} +1 -1
- package/server/{checkpoints-C-AXLfYT.js → checkpoints-CQB1h765.js} +2 -2
- package/server/{claude-hooks-provision-C8wdRnN1.js → claude-hooks-provision-8Ngo8TpT.js} +1 -1
- package/server/{claude-hooks-provision-but-_qGY.js → claude-hooks-provision-D8GXF3_s.js} +2 -2
- package/server/{claude-permissions-H_5wHQZQ.js → claude-permissions-DNWEVV6z.js} +2 -2
- package/server/{claude-settings-overlay-CbSz0Dvb.js → claude-settings-overlay-CEdaqpWI.js} +2 -2
- package/server/{claude-settings-overlay-BTENVmYf.js → claude-settings-overlay-DWy-Bb4Y.js} +1 -1
- package/server/cli-B86rejVV.js +3 -0
- package/server/{cli-vBeXbPrq.js → cli-RoOx5DUf.js} +9 -9
- package/server/{cliproxy-Bgb2XCqi.js → cliproxy-C8a1vtTU.js} +2 -2
- package/server/{cliproxy-DW0V86F8.js → cliproxy-fHfIeiGd.js} +1 -1
- package/server/{close-issue-Dn_4c4G8.js → close-issue-DoOifFIK.js} +5 -5
- package/server/{closed-issue-reaper-hANY_ehE.js → closed-issue-reaper-Bk3SU4RC.js} +9 -9
- package/server/{closed-issue-reaper-CWpY2uBw.js → closed-issue-reaper-CktPXo8m.js} +1 -1
- package/server/{codex-TmSi-yTv.js → codex-BZXGhUVB.js} +7 -7
- package/server/{codex-Dg7Is5yb.js → codex-GcHuUF-k.js} +1 -1
- package/server/{codex-parser-C4gSH-IR.js → codex-parser-CFZ1_1Jl.js} +2 -2
- package/server/{config-CCvjQf27.js → config-BZ0sHTju.js} +2 -2
- package/server/{config-DjLOdbgT.js → config-CKxYiCmX.js} +2 -2
- package/server/{config-DUIhMN_T.js → config-DzV30TOm.js} +1 -1
- package/server/{config-yaml-DvyMuOle.js → config-yaml-DySPNmKN.js} +23 -9
- package/server/{conflict-gate-CmrYpa47.js → conflict-gate-BaCVrH-N.js} +3 -3
- package/server/{conflict-gate-BSJkNTdp.js → conflict-gate-BhAY7TUd.js} +1 -1
- package/server/context-layers-BrPmE__h.js +4 -0
- package/server/context-layers-igZ4FI4_.js +37 -0
- package/server/{control-settings-aP1ANIlI.js → control-settings-BQp7_4uD.js} +4 -4
- package/server/{conversation-compaction-CNbTLB86.js → conversation-compaction-CgrR8YYp.js} +8 -8
- package/server/{conversation-compaction-DiG5zWQq.js → conversation-compaction-eQB5CkOe.js} +1 -1
- package/server/{conversation-service-Up7FEzIC.js → conversation-service-BLd3MYsG.js} +1 -1
- package/server/{conversation-service-Du-MTNpJ.js → conversation-service-DPJ71F33.js} +329 -19
- package/server/{conversations-DbOs1e9Q.js → conversations-6AfUfbwc.js} +5 -5
- package/server/{conversations-6mPANqvL.js → conversations-CAsJF9kh.js} +1 -1
- package/server/{cost-Ca0YTWDw.js → cost-B2ddP6wq.js} +2 -2
- package/server/{cost-CW4WSe72.js → cost-R-m6Yi-W.js} +3 -3
- package/server/{cost-sync-C0VdGme1.js → cost-sync-BsN6ER0n.js} +3 -3
- package/server/{dag-CdOjJVDT.js → dag-B1ucnjDU.js} +2 -2
- package/server/{dangerous-git-ops-CT-IypG3.js → dangerous-git-ops-BXqeWVSf.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-pRnyD5w9.js → deacon-CU_cAYSR.js} +254 -144
- package/server/{deacon-DYSEJb48.js → deacon-kiQrb4ZT.js} +3 -3
- package/server/{deacon-nudge-log-Bjg8U4Y9.js → deacon-nudge-log-6wVqAaqz.js} +3 -3
- package/server/{deacon-swarm-DftYRDo8.js → deacon-swarm-BXZZ1Z2-.js} +13 -13
- package/server/deacon-swarm-C-GwfjJy.js +2 -0
- package/server/deacon.js +8 -8
- package/server/{deploy-patrol-Bjsho_ha.js → deploy-patrol-AiFoP8dw.js} +6 -6
- package/server/{deploy-window-DeP_OIRk.js → deploy-window-C3F-tihF.js} +6 -6
- package/server/{deploy-window-CM6W1-c6.js → deploy-window-DkZraDyj.js} +1 -1
- package/server/{dev-supervisor-BpMoHlkR.js → dev-supervisor-bcOWqdQE.js} +2 -2
- package/server/{devcontainer-renderer-CtUgrVKW.js → devcontainer-renderer-_d6XhyND.js} +3 -3
- package/server/dist-Bzy0y69j.js +3 -0
- package/server/{dist-DyRx4cI7.js → dist-Cb_0uvpS.js} +1 -1
- package/server/{docker-BK7HIcBj.js → docker-DcMTFTUC.js} +2 -2
- package/server/{dod-BrSfUHm0.js → dod-C6n9RV3G.js} +1 -1
- package/server/{ensure-devcontainer-DRqaAkBR.js → ensure-devcontainer-BZgOhRo7.js} +1 -1
- package/server/{ensure-devcontainer-DseivYEy.js → ensure-devcontainer-DNi-ono3.js} +4 -4
- package/server/{esm-shims-CbI3BVkl.js → esm-shims-OSHAYaS1.js} +1 -1
- package/server/{event-store-tdiY5eDZ.js → event-store-CQL6NeqB.js} +3 -3
- package/server/{event-store-Cr5PQwFC.js → event-store-EV2cMiXj.js} +1 -1
- package/server/{events-CvvGK6LT.js → events-BTdrdEq8.js} +1 -1
- package/server/{events-CC1dgUpx.js → events-DTfAe4My.js} +3 -3
- package/server/{factory-CynerjXO.js → factory-CFibJuaw.js} +4 -4
- package/server/{feature-registry-population-B0pmAz0a.js → feature-registry-population-DKZFMbFt.js} +4 -4
- package/server/{feature-registry-storage-_wUBRD3J.js → feature-registry-storage-BdPuLcBX.js} +2 -2
- package/server/{features-Dhxz-wLc.js → features-ez2271oH.js} +2 -2
- package/server/{feedback-target-CPS15Vte.js → feedback-target-7mqqwrX6.js} +7 -7
- package/server/{feedback-target-iygZwmMc.js → feedback-target-CoFDHiM8.js} +1 -1
- package/server/{feedback-writer-C9b6ccN1.js → feedback-writer-CY5L1lB7.js} +5 -5
- package/server/{feedback-writer-qmiMbqTZ.js → feedback-writer-D3a22RCd.js} +1 -1
- package/server/flywheel-DHrgCphM.js +1084 -0
- package/server/flywheel-DzGtWnJ1.js +477 -0
- package/server/flywheel-SVF02Jpq.js +2 -0
- package/server/{flywheel-merge-order-DxbQKE1d.js → flywheel-merge-order-UU0tiUld.js} +9 -8
- package/server/{flywheel-merge-order-C-6zRLvM.js → flywheel-merge-order-UUcsCDb6.js} +1 -1
- package/server/{forge-Ch9gCFod.js → forge-CNFnyqps.js} +2 -2
- package/server/forge-DXnS_YFH.js +2 -0
- package/server/{from-CJ_aH5jD.js → from-kNxT0bZC.js} +1 -1
- package/server/{fts-db-CKgg0VKg.js → fts-db-CE46vDkZ.js} +2 -2
- package/server/{fts-operations-BrL_VTRr.js → fts-operations-CqY6zl-i.js} +2 -2
- package/server/{git-utils-BVa07a4a.js → git-utils-CRw2zLPC.js} +68 -3
- package/server/git-utils-D0_yhCgF.js +3 -0
- package/server/{github-app-CMBdIFBQ.js → github-app-C3QrAUd0.js} +18 -7
- package/server/{github-app-CPfoFAdV.js → github-app-ClZ2lk8D.js} +1 -1
- package/server/{github-client--XVlDpwM.js → github-client-BnIsSrEN.js} +2 -2
- package/server/{github-client-B4QsdE-X.js → github-client-DfQYVUaw.js} +1 -1
- package/server/{github-pr-lookup-BRbDW-qk.js → github-pr-lookup-D16NGsSO.js} +2 -2
- package/server/{harness-binary-CVio2m-u.js → harness-binary-DPUi-Pv8.js} +32 -6
- package/server/{harness-resolve-qHJBhy3Z.js → harness-resolve-3lNZkyT4.js} +18 -9
- package/server/{health-events-C9B8y1Hm.js → health-events-BBcTYQKU.js} +2 -2
- package/server/{health-events-CpfvuVmm.js → health-events-BDOHby5Q.js} +1 -1
- package/server/{hooks-DUXw8A0-.js → hooks-CKZgXlJb.js} +2 -2
- package/server/{hooks-ltecuFqZ.js → hooks-DPVX1rwQ.js} +1 -1
- package/server/{hume-BEq0bUDg.js → hume-Cz8igP9E.js} +2 -2
- package/server/hume-ccTf4wTX.js +3 -0
- package/server/{idle-stack-reaper-D7w9t3fE.js → idle-stack-reaper-CuLF0j2H.js} +1 -1
- package/server/{idle-stack-reaper-w1ISSlhs.js → idle-stack-reaper-DDIRwxUY.js} +2 -2
- package/server/{in-flight-guard-aQ1IxeI3.js → in-flight-guard-CAAkqPLu.js} +2 -2
- package/server/{infra-CzaSOgul.js → infra-BEqFxlJc.js} +14 -4
- package/server/{injection-DZ0PfYa4.js → injection-C8aiVJrF.js} +191 -183
- package/server/{injection-oNZeoDhL.js → injection-CPUIqNhI.js} +1 -1
- package/server/{inspect-agent-DJKLWcVT.js → inspect-agent-BLuJ1AkT.js} +135 -79
- package/server/inspect-agent-Brtz0URj.js +2 -0
- package/server/{internal-token-DXdfprGr.js → internal-token-BrcU6qfe.js} +1 -1
- package/server/{internal-token-Bb4XeV2x.js → internal-token-s0-oKybJ.js} +2 -2
- package/server/{io-B3_AHDfr.js → io-C9kF1wtJ.js} +3 -3
- package/server/{issue-closed-zhdvQicO.js → issue-closed-CDJk4pIp.js} +7 -7
- package/server/{issue-lifecycle-Dy4vd0Oa.js → issue-lifecycle-B8sZHVHh.js} +1 -1
- package/server/{issue-lifecycle-CreaCkjW.js → issue-lifecycle-ojZAzDBP.js} +21 -21
- package/server/{issue-service-singleton-DabvBWUp.js → issue-service-singleton-BvJ09SaR.js} +1 -1
- package/server/{issue-service-singleton-B5ushCvE.js → issue-service-singleton-Yx5DdmVJ.js} +8 -8
- package/server/{issues-B6ToV6x1.js → issues-BMmP_77e.js} +2 -2
- package/server/{jsonl-parser-Dhflo1SH.js → jsonl-parser-BXSlHwEh.js} +3 -3
- package/server/{label-cleanup-BKPJm4Hv.js → label-cleanup-B0UJwnv5.js} +3 -3
- package/server/{label-reconciler-DdWbHEBu.js → label-reconciler-B4iOAjlC.js} +4 -4
- package/server/{launcher-generator-CHVm7bGT.js → launcher-generator-BBWG_SiS.js} +101 -7
- package/server/{lifecycle-io-D8iNBcux.js → lifecycle-io-BREGpnLk.js} +5 -5
- package/server/{lifecycle-io-Bsnr2K4F.js → lifecycle-io-DPo7x11I.js} +1 -1
- package/server/{lifecycle-sycO16hj.js → lifecycle-xmBfK2GJ.js} +6 -6
- package/server/{lifecycle-DfeyBDwA.js → lifecycle-yPd___5E.js} +2 -2
- package/server/{linear-client-D4zqMnX7.js → linear-client-BsuUvkdA.js} +2 -2
- package/server/{linear-client-DqhDQO9k.js → linear-client-CTskEeT_.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-DK23JEdS.js → merge-B1DiziGU.js} +1 -1
- package/server/{merge-C_ZEhbqI.js → merge-CefQNAnq.js} +3 -3
- package/server/{merge-agent-XrB80vfT.js → merge-agent-4WOWlSYA.js} +28 -28
- package/server/{merge-agent-BQM3a8z5.js → merge-agent-CKkgIBPB.js} +1 -1
- package/server/{merge-batch-Bwoyr8Je.js → merge-batch-ClFn2T-y.js} +1 -1
- package/server/merge-ops-CR44oU9-.js +2 -0
- package/server/{merge-rebase-C1KIVr0s.js → merge-rebase-BfaTyXsw.js} +2 -2
- package/server/merge-set-DJ8-UErs.js +83 -0
- package/server/{merge-set-DnSYdBEp.js → merge-set-bUqbm3yc.js} +1 -1
- package/server/{merge-sync-SSv3E-pl.js → merge-sync-BJYeOODr.js} +1 -1
- package/server/{merge-sync-DZ9dojJn.js → merge-sync-VPV28g0g.js} +2 -2
- package/server/{merge-train-DxDfBTjr.js → merge-train-CHopycP0.js} +3 -3
- package/server/{merge-train-deps-CyYQUksx.js → merge-train-deps-D1cOZzy2.js} +4 -4
- package/server/{merge-verification-CSizH3HY.js → merge-verification-BkaOqPsw.js} +4 -4
- package/server/{multipart-parser-Dt8YPN5S.js → multipart-parser-duPAfSBw.js} +2 -2
- package/server/{no-resume-mode-Cx3K0hHi.js → no-resume-mode-Nw29vaFb.js} +1 -1
- package/server/node_modules/.package-lock.json +8 -8
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
- package/server/node_modules/undici/README.md +5 -0
- package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
- package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
- package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
- package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
- package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
- package/server/node_modules/undici/docs/docs/index.md +5 -0
- package/server/node_modules/undici/lib/core/request.js +1 -1
- package/server/node_modules/undici/lib/core/util.js +6 -1
- package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
- package/server/node_modules/undici/lib/dispatcher/client-h1.js +31 -6
- package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
- package/server/node_modules/undici/lib/handler/cache-handler.js +93 -5
- package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +10 -0
- package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
- package/server/node_modules/undici/lib/handler/retry-handler.js +6 -4
- package/server/node_modules/undici/lib/interceptor/cache.js +21 -4
- package/server/node_modules/undici/lib/interceptor/decompress.js +4 -0
- package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
- package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
- package/server/node_modules/undici/lib/util/cache.js +49 -7
- package/server/node_modules/undici/lib/web/fetch/body.js +2 -1
- package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
- package/server/node_modules/undici/package.json +2 -2
- package/server/node_modules/undici/types/client.d.ts +2 -2
- package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
- package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
- package/server/{orphan-proposed-reconciler-neK8dHQk.js → orphan-proposed-reconciler-BvKkWMJQ.js} +12 -12
- package/server/{orphan-proposed-reconciler-BTkDrl4R.js → orphan-proposed-reconciler-CTSGcK8p.js} +1 -1
- package/server/package-lock.json +9 -9
- package/server/package.json +1 -1
- package/server/{pan-dir-DeVUgwA7.js → pan-dir-B0c3w0Ya.js} +3 -3
- package/server/{paths-_zEts6wc.js → paths-D-xWGHdh.js} +2 -2
- package/server/{pickup-Dd0Znxxy.js → pickup-DUCLWrJY.js} +17 -16
- package/server/{pipeline-membership-0HaEGDlH.js → pipeline-membership-mY3GprlK.js} +7 -7
- package/server/{pipeline-notifier-6iCJplFZ.js → pipeline-notifier-BJr8gQX6.js} +1 -1
- package/server/{pipeline-notifier-D0ykk59O.js → pipeline-notifier-BXkJzDC4.js} +2 -2
- package/server/{project-pipelines-2sK1apsO.js → project-pipelines-C0MWUeCU.js} +2 -2
- package/server/project-repos-B6GycDh9.js +94 -0
- package/server/project-repos-DXKQsc_m.js +3 -0
- package/server/{projects-9SkRpES9.js → projects-vjjcmiN8.js} +1 -1
- package/server/{prompts-Dp4Tpk39.js → prompts-DxzFXuLl.js} +2 -2
- package/server/{providers-DV7ec8l7.js → providers-qQAwGQDW.js} +7 -7
- package/server/{providers-DKkBXhxU.js → providers-u4Ga0jOr.js} +1 -1
- package/server/public/assets/{chunk-BO2N2NFS-CltymLRg.js → chunk-BO2N2NFS-BamJdinX.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-D2f6pjgA.js → diagram-OG6HWLK6-DfOB8-w4.js} +1 -1
- package/server/public/assets/{dist-DEmlBBNQ.js → dist-ByIuzMQW.js} +3 -3
- package/server/public/assets/{dist-BWR4qFiV.js → dist-D7zYSEA6.js} +1 -1
- package/server/public/assets/{ganttDiagram-6RSMTGT7-DnfiViPK.js → ganttDiagram-6RSMTGT7-EdmRyXL3.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-B8Wrmj9H.js → highlighted-body-OFNGDK62-MerOfTX8.js} +1 -1
- package/server/public/assets/{index-CsSuZQBI.js → index-CWeMerGO.js} +146 -144
- package/server/public/assets/{index-CUr1xv8w.css → index-CenuJ3Cw.css} +1 -1
- package/server/public/assets/{linear-C9zFQpkX.js → linear-BBbArIcK.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-CpPWAFwE.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-lR8H7Yjd.js → pieDiagram-4H26LBE5-BKIddiJN.js} +1 -1
- package/server/public/assets/{prod-B1jCQihw.js → prod-B8vYiu52.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-CVQ2guem.js → quadrantDiagram-W4KKPZXB-D6RtoULk.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-eD1RB4gm.js → sankeyDiagram-5OEKKPKP-CLrCedZX.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-ChEC6dQn.js → xychartDiagram-2RQKCTM6-hznR8DYl.js} +1 -1
- package/server/public/index.html +2 -2
- package/server/{pull-requests--Ib2jTgy.js → pull-requests-7N8WKseP.js} +1 -1
- package/server/{pull-requests-CXIhdCYD.js → pull-requests-_lHueOHW.js} +3 -3
- package/server/{queries-6d7Cdtm7.js → queries-CjNIf-Ub.js} +576 -166
- package/server/{rally-B708-nZn.js → rally-CyWT_lNO.js} +3 -3
- package/server/{rally-api-nY0ZANw3.js → rally-api-C8e_1JRi.js} +2 -2
- package/server/{rally-api-yjQ0TfHd.js → rally-api-ClOSd-Tt.js} +1 -1
- package/server/{rally-client-B1EJhfV0.js → rally-client-lc-nokqr.js} +4 -4
- package/server/{rally-client-CULK2XAY.js → rally-client-sgtVqzNU.js} +1 -1
- package/server/rally-zhhtXuDP.js +3 -0
- package/server/{reap-terminal-sessions-MWnqdLCJ.js → reap-terminal-sessions-7KeHv1R1.js} +1 -1
- package/server/{reap-terminal-sessions-N3BTkmX_.js → reap-terminal-sessions-BtHPo6Xc.js} +1 -1
- package/server/rebuild-stack-CFvcBHsS.js +4 -0
- package/server/{rebuild-stack-Dp4eLkt4.js → rebuild-stack-lwtsW0GO.js} +26 -35
- package/server/{reconstruct-cache-uWbZfjms.js → reconstruct-cache-C3Ui7ojV.js} +6 -6
- package/server/{record-t6V-3Dcj.js → record-CN0pj4_5.js} +1 -1
- package/server/{record-update-DACtKh6_.js → record-update-bLJxAXH4.js} +1 -1
- package/server/{record-update-Dq0t2uBG.js → record-update-dE1Aw83j.js} +2 -2
- package/server/{recovery-trip-BJtIQuag.js → recovery-trip-BvRWfUXM.js} +2 -2
- package/server/{release-engine-DZpmGGzb.js → release-engine-Cx48W7z8.js} +5 -5
- package/server/{release-set-hnXd_kga.js → release-set-CQfuN9-v.js} +3 -3
- package/server/{remote-Br-ZWVIP.js → remote-C_2hasl7.js} +3 -3
- package/server/{remote-4tiENDaI.js → remote-ChgimyYa.js} +3 -3
- package/server/{remote-agents-nmty1mLu.js → remote-agents-By1ige5O.js} +6 -6
- package/server/{remote-agents-CRCg1L4H.js → remote-agents-CA3Ihlxj.js} +1 -1
- package/server/{remote-completion-BbWNd10K.js → remote-completion-fVe9e_3u.js} +12 -12
- package/server/resume-BFv1PGpA.js +3 -0
- package/server/{review-agent-sKkE1FEL.js → review-agent-CIGOQYBD.js} +29 -25
- package/server/{review-agent-DJRO8EG8.js → review-agent-DNboMyW4.js} +1 -1
- package/server/{review-artifacts-BLbSC4ke.js → review-artifacts-nRDPuMxd.js} +5 -5
- package/server/{review-context-BgX3lcCx.js → review-context-2uj-YQ8J.js} +69 -25
- package/server/{review-status-C6n6-9f_.js → review-status-btEYlaxA.js} +1 -1
- package/server/{review-status-enrichment-tbOn_A_u.js → review-status-enrichment-Dci-ZwEt.js} +3 -3
- package/server/{review-status-A7quS5KJ.js → review-status-kZj_KyCk.js} +42 -26
- package/server/{review-status-sync-BhSQ0d0l.js → review-status-sync-BTOpxtTC.js} +10 -5
- package/server/{review-status-sync-To3-iS-N.js → review-status-sync-DSDK3OMy.js} +1 -1
- package/server/{review-verdict-feedback-CTRNtzXO.js → review-verdict-feedback-CCjVA7Uk.js} +6 -6
- package/server/{review-verdict-feedback-C1Kg8n7t.js → review-verdict-feedback-CTd4QMBu.js} +1 -1
- package/server/{rollup-B53Y81xK.js → rollup-BKQC7jp4.js} +1 -1
- package/server/{rollup-WA0VD-Rr.js → rollup-FGsKki9R.js} +8 -8
- package/server/{scanner-D2743cp8.js → scanner-CnqEZeDy.js} +41 -14
- package/server/{sequence-io-Cg0zYj_E.js → sequence-io-D909zgeH.js} +4 -4
- package/server/{sequencer-agent-BGY8gjg-.js → sequencer-agent-CzkcK6P5.js} +5 -5
- package/server/server.js +2194 -341
- package/server/{service-DCpB_SGd.js → service-CLeAoU6G.js} +51 -50
- package/server/{session-fork-BQ8_6H32.js → session-fork-CHI1XvL9.js} +2 -2
- package/server/{session-history-CVZDpS3c.js → session-history-BT3IvqhC.js} +4 -4
- package/server/settings-66A6uvIA.js +2 -0
- package/server/{settings-BZ5m1UCl.js → settings-BTMvpNFU.js} +3 -3
- package/server/{settings-ylxwqwQG.js → settings-C0zgxOGf.js} +2 -2
- package/server/{shadow-engineering-BlxG6Xye.js → shadow-engineering-BJfgm-hX.js} +2 -2
- package/server/{shadow-state-Dh-HzF2J.js → shadow-state-7a-524T8.js} +2 -2
- package/server/{shadow-state-C2_epgx2.js → shadow-state-DnDyjujH.js} +1 -1
- package/server/{shadow-utils-4bvjn9b3.js → shadow-utils-Db3oroFG.js} +2 -2
- package/server/{ship-log-ClSMIzZX.js → ship-log-D9MlVzYU.js} +1 -1
- package/server/{smart-compaction-CHIxLr_d.js → smart-compaction-CV2ukKND.js} +1 -1
- package/server/{smart-compaction-r4pHQBIr.js → smart-compaction-KCYScAU1.js} +7 -7
- package/server/{spawn-planning-session-DWAorh2B.js → spawn-planning-session-DKpdFyOC.js} +30 -23
- package/server/{spawn-planning-session-KC_UduxD.js → spawn-planning-session-qUC2VWu3.js} +1 -1
- package/server/{specialist-completion-BXhav38U.js → specialist-completion-Ky9wCDpb.js} +1 -1
- package/server/{specialist-context-DtrYvGJ-.js → specialist-context-Bn3dCGS2.js} +5 -5
- package/server/{specialist-handoff-logger-C45ouoZ6.js → specialist-handoff-logger-CMEwYxa2.js} +2 -2
- package/server/{specialist-logs-DJ3RzKxW.js → specialist-logs-C5p8G7tx.js} +3 -3
- package/server/{specialists-JVO00bs7.js → specialists-CC4r-c2s.js} +776 -347
- package/server/{specialists-D5fRZXmN.js → specialists-CShuVGWT.js} +1 -1
- package/server/{specialists-DVj0hvaL.js → specialists-DM6bWjsi.js} +1 -1
- package/server/{specialists-DyFeedjn.js → specialists-jiuuyVkp.js} +21 -19
- package/server/specs-C8Wsn2XO.js +3 -0
- package/server/{src-CG9mCkP6.js → src-CXmtj0im.js} +6 -6
- package/server/{src-CMTQGyCK.js → src-CdmnTM2m.js} +5 -5
- package/server/{src-U7_kTPEE.js → src-DtcUOZCq.js} +111 -18
- package/server/stack-health-Bn3o8FBX.js +3 -0
- package/server/{stack-health-puygdaMd.js → stack-health-DxSdG9cW.js} +63 -9
- package/server/{stale-task-claims-BbFwCTb0.js → stale-task-claims-KJKxxiiQ.js} +4 -4
- package/server/{staleness-Cbl_w4Bw.js → staleness-CT34nwr9.js} +1 -1
- package/server/{staleness-Bpy41ngS.js → staleness-DPm7ClwA.js} +1 -1
- package/server/{state-home-CIGjwNfJ.js → state-home-Cn_Qu8IX.js} +2 -2
- package/server/{state-migrate-Dkzaxvny.js → state-migrate-BGg2ZaOt.js} +4 -4
- package/server/{stuck-remediation-CzEov_fq.js → stuck-remediation-DYuPRYYw.js} +300 -23
- package/server/{stuck-remediation-sY_MHHgQ.js → stuck-remediation-s9_2qfi6.js} +1 -1
- package/server/{substrate-bug-weights-service-BH66lhm7.js → substrate-bug-weights-service-B-FwCs5V.js} +3 -3
- package/server/{summary-fork-DHhJIsAL.js → summary-fork-D1RAk9rJ.js} +78 -12
- package/server/{summary-fork-D8bXjCr7.js → summary-fork-DpcxN9tf.js} +2 -2
- package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-Csw5tqfJ.js} +2 -41
- package/server/supervisor/pty-supervisor.js +2 -1
- package/server/supervisor/pty-token-x-ea28Us.js +43 -0
- package/server/supervisor-FTJAIsAK.js +2 -0
- package/server/{supervisor-BO-Zk_h-.js → supervisor-wM4ooB5O.js} +3 -3
- package/server/{swarm-readiness-CQ_fwUWF.js → swarm-readiness-DlP_UjHq.js} +3 -3
- package/server/{system-prerequisites-Bza0ffAh.js → system-prerequisites-DUDj1YHf.js} +56 -29
- package/server/{teardown-workspace-CEgauF4U.js → teardown-workspace-DeTTImn-.js} +15 -15
- package/server/{test-agent-queue-DXDt0Xa-.js → test-agent-queue-MbxX5vqq.js} +6 -6
- package/server/{test-verdict-CmUBK5cT.js → test-verdict-bWYBtqBg.js} +1 -1
- package/server/{test-verdict-DFjjIHR5.js → test-verdict-gscuksPv.js} +1 -1
- package/server/{tldr-daemon-DL566HbH.js → tldr-daemon-BYFkts95.js} +1 -1
- package/server/{tldr-daemon-BDtLOIlO.js → tldr-daemon-C-69c3OI.js} +2 -2
- package/server/{tmux-DoThH6aj.js → tmux-B6z7h_vZ.js} +1 -1
- package/server/{tmux-ftABRAmc.js → tmux-R7N7y-Mh.js} +2 -2
- package/server/{token-CsOhvw42.js → token-BK6t8BIT.js} +2 -2
- package/server/token-util-DuPuNriz.js +3 -0
- package/server/{token-util-CTmczIfW.js → token-util-DxXu-vd1.js} +1 -1
- package/server/{tracker-config-B4itFzDo.js → tracker-config-G6latr8C.js} +2 -2
- package/server/{tracker-utils-BePq_oj-.js → tracker-utils-B4ylXZQK.js} +1 -1
- package/server/{tracker-utils-tnxxqROg.js → tracker-utils-DHv5pSDT.js} +2 -2
- package/server/{traefik-connect-m73vGebA.js → traefik-connect-Df2uXPsQ.js} +1 -1
- package/server/{tunnel-B2vxjx_b.js → tunnel-CDVKJpRv.js} +3 -3
- package/server/{tunnel-Cgj-IGIl.js → tunnel-DGdUkGoZ.js} +1 -1
- package/server/{types-BBNjPcqU.js → types-5M0lupud.js} +1 -1
- package/server/{uat-train-cKfM-_WW.js → uat-train-B05BWkp-.js} +1 -1
- package/server/{uat-train-CuEn0t9M.js → uat-train-DDSrSoV1.js} +25 -25
- package/server/validate-IfDGkaVR.js +177 -0
- package/server/{validation-CIi6pnI2.js → validation-CC9OPqJZ.js} +1 -1
- package/server/{validation-B5JxoPUS.js → validation-Dw1pzDzr.js} +4 -4
- package/server/{verification-artifact-C-lIHfUa.js → verification-artifact-B3itKTxu.js} +1 -1
- package/server/{verification-artifact-BcnIbigL.js → verification-artifact-TVFSz_q1.js} +1 -1
- package/server/{verification-runner-CDj4lD4t.js → verification-runner-BW4HOKAz.js} +1 -1
- package/server/{verification-runner-Br0S_Ous.js → verification-runner-CkgX6EtI.js} +91 -106
- package/server/{vtt-parser-DKpNNW5i.js → vtt-parser-DYPbKcIJ.js} +1 -1
- package/server/{work-agent-prompt-Yb2bd3Fq.js → work-agent-prompt-Du8Vh2aJ.js} +9 -9
- package/server/workflows-BQu4RFQ-.js +2 -0
- package/server/{workflows-C9WmILql.js → workflows-mbQzh6mQ.js} +18 -18
- package/server/{workspace-DuUdndHe.js → workspace--8tnhDI0.js} +1 -1
- package/server/{workspace-BVl4rihN.js → workspace-BPUws1-_.js} +3 -3
- package/server/{workspace-config-cEGcO6UT.js → workspace-config-CIVWZOQr.js} +1 -1
- package/server/{workspace-manager-hLUv3ADC.js → workspace-manager-CBhNdzE4.js} +66 -15
- package/server/workspace-manager-CWT55qeI.js +3 -0
- package/server/{workspace-metadata-DNpMixRq.js → workspace-metadata-BzHnwwX4.js} +1 -1
- package/server/{workspace-metadata-CskwzzhL.js → workspace-metadata-_WygnyoX.js} +2 -2
- package/server/{workspaces-hWvy9eKs.js → workspaces-Do_9J0LQ.js} +130 -111
- package/sync-sources/hooks/record-cost-event.js +6 -4
- package/sync-sources/skills/okf/README.md +11 -3
- package/sync-sources/skills/okf/SKILL.md +12 -1
- package/sync-sources/skills/okf/docs/USAGE.md +15 -0
- package/sync-sources/skills/okf/references/overdeck.md +28 -0
- package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
- package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
- package/sync-sources/skills/pan-orders/SKILL.md +33 -0
- package/sync-sources/skills/pan-start/SKILL.md +4 -0
- package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
- package/server/agent-state-Bg0lhqwj.js +0 -3
- package/server/agents-FlIgQ3ql.js +0 -3
- package/server/cli-BsVIHwzC.js +0 -3
- package/server/context-layers-B3Nt58jl.js +0 -4
- package/server/context-layers-ZYFcWiyc.js +0 -165
- package/server/deacon-swarm-9jRLS5Ke.js +0 -2
- package/server/dist-Bd3vn0Hw.js +0 -3
- package/server/flywheel-DMCUzDWg.js +0 -2
- package/server/flywheel-DSSpWmqF.js +0 -522
- package/server/flywheel-DcBkQvgE.js +0 -207
- package/server/forge-B-ZWyTRm.js +0 -2
- package/server/git-utils-Dry_Ka_D.js +0 -3
- package/server/hume-B_DbflNM.js +0 -3
- package/server/inspect-agent-ch-F-5Ci.js +0 -2
- package/server/layers-DzxSTGNA.js +0 -93
- package/server/merge-blockers-BsFjGrQ8.js +0 -41
- package/server/merge-ops-DlB1IM0Y.js +0 -2
- package/server/merge-set-DLz0MkGT.js +0 -139
- package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +0 -1
- package/server/rally-njs_mJrt.js +0 -3
- package/server/rebuild-stack-kA7XngID.js +0 -3
- package/server/resume-CcKqnTvE.js +0 -3
- package/server/settings-D0OSwos5.js +0 -2
- package/server/specs-nN45DG2X.js +0 -3
- package/server/stack-health-Df0YEZKa.js +0 -3
- package/server/supervisor-BPy-o1A8.js +0 -2
- package/server/token-util-DrHg8abn.js +0 -3
- package/server/workflows-D90rMOya.js +0 -2
- package/server/workspace-manager-ZTdJAy9M.js +0 -3
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { c as init_review_status_sync, r as getAllReviewStatusesFromDb } from "./review-status-sync-BTOpxtTC.js";
|
|
2
|
+
import { H as liveOrderIssueLookup, V as listBooks } from "./flywheel-DHrgCphM.js";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { existsSync, readdirSync, statSync } from "node:fs";
|
|
5
|
+
//#region ../../lib/cloister/merge-blockers.ts
|
|
6
|
+
init_review_status_sync();
|
|
7
|
+
/**
|
|
8
|
+
* PRs that passed review but cannot merge for a GitHub-native reason (PAN-1620):
|
|
9
|
+
* merge_conflict / failing_checks / not_mergeable. These sit forever unless rebased.
|
|
10
|
+
*
|
|
11
|
+
* Reads `review_status` directly from SQLite — NO HTTP — so it works inside a
|
|
12
|
+
* network-sandboxed harness (e.g. codex's bwrap sandbox) where a `curl` to the
|
|
13
|
+
* dashboard's `/api/flywheel/merge-blockers` cannot reach `127.0.0.1:3011`.
|
|
14
|
+
* Shared by the dashboard route and the `pan flywheel merge-blockers` CLI so the
|
|
15
|
+
* two surfaces can never disagree.
|
|
16
|
+
*/
|
|
17
|
+
const MERGE_BLOCKER_TYPES = new Set([
|
|
18
|
+
"merge_conflict",
|
|
19
|
+
"failing_checks",
|
|
20
|
+
"not_mergeable"
|
|
21
|
+
]);
|
|
22
|
+
function getMergeBlockersPayload() {
|
|
23
|
+
const statuses = getAllReviewStatusesFromDb();
|
|
24
|
+
const out = [];
|
|
25
|
+
for (const [issueId, status] of Object.entries(statuses)) {
|
|
26
|
+
if (status.reviewStatus !== "passed") continue;
|
|
27
|
+
if (status.mergeStatus === "merged") continue;
|
|
28
|
+
const reasons = (status.blockerReasons ?? []).filter((b) => MERGE_BLOCKER_TYPES.has(b.type));
|
|
29
|
+
if (reasons.length === 0) continue;
|
|
30
|
+
out.push({
|
|
31
|
+
issueId,
|
|
32
|
+
prUrl: status.prUrl,
|
|
33
|
+
reasons: reasons.map((b) => ({
|
|
34
|
+
type: b.type,
|
|
35
|
+
summary: b.summary
|
|
36
|
+
}))
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
return out;
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
//#region ../../lib/orders/validate.ts
|
|
43
|
+
function hasNonEmptyFile(path) {
|
|
44
|
+
try {
|
|
45
|
+
return existsSync(path) && statSync(path).isFile() && statSync(path).size > 0;
|
|
46
|
+
} catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function issuePattern(issueId) {
|
|
51
|
+
const escaped = issueId.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
52
|
+
return new RegExp(`(?:^|[-_])${escaped}(?:[-_.]|$)`, "i");
|
|
53
|
+
}
|
|
54
|
+
function nonEmptyFileNames(directory) {
|
|
55
|
+
if (!existsSync(directory)) return [];
|
|
56
|
+
return readdirSync(directory).filter((name) => hasNonEmptyFile(join(directory, name)));
|
|
57
|
+
}
|
|
58
|
+
function createOrderPrdLookup(stateRoot) {
|
|
59
|
+
const draftNames = new Set([...nonEmptyFileNames(join(stateRoot, "drafts")), ...nonEmptyFileNames(join(stateRoot, ".pan", "drafts"))].map((name) => name.toLowerCase()));
|
|
60
|
+
const specNames = [...nonEmptyFileNames(join(stateRoot, "specs")), ...nonEmptyFileNames(join(stateRoot, ".pan", "specs"))];
|
|
61
|
+
return (issueId) => {
|
|
62
|
+
const lower = issueId.toLowerCase();
|
|
63
|
+
if (draftNames.has(`${lower}.md`)) return true;
|
|
64
|
+
const pattern = issuePattern(issueId);
|
|
65
|
+
return specNames.some((name) => pattern.test(name));
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function hasOrderIssuePrd(stateRoot, issueId) {
|
|
69
|
+
const lower = issueId.toLowerCase();
|
|
70
|
+
if ([join(stateRoot, "drafts", `${lower}.md`), join(stateRoot, ".pan", "drafts", `${lower}.md`)].some(hasNonEmptyFile)) return true;
|
|
71
|
+
for (const specsDir of [join(stateRoot, "specs"), join(stateRoot, ".pan", "specs")]) {
|
|
72
|
+
if (!existsSync(specsDir)) continue;
|
|
73
|
+
const pattern = issuePattern(issueId);
|
|
74
|
+
if (readdirSync(specsDir).some((name) => pattern.test(name) && hasNonEmptyFile(join(specsDir, name)))) return true;
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
function findCycle(book) {
|
|
79
|
+
const issues = new Set(book.items.map((item) => item.issue.toUpperCase()));
|
|
80
|
+
const edges = new Map(book.items.map((item) => [item.issue.toUpperCase(), item.prereqs.map((prereq) => prereq.toUpperCase()).filter((prereq) => issues.has(prereq))]));
|
|
81
|
+
const visiting = /* @__PURE__ */ new Set();
|
|
82
|
+
const visited = /* @__PURE__ */ new Set();
|
|
83
|
+
const path = [];
|
|
84
|
+
const visit = (issue) => {
|
|
85
|
+
if (visiting.has(issue)) {
|
|
86
|
+
const start = path.indexOf(issue);
|
|
87
|
+
return [...path.slice(start), issue];
|
|
88
|
+
}
|
|
89
|
+
if (visited.has(issue)) return null;
|
|
90
|
+
visiting.add(issue);
|
|
91
|
+
path.push(issue);
|
|
92
|
+
for (const prereq of edges.get(issue) ?? []) {
|
|
93
|
+
const cycle = visit(prereq);
|
|
94
|
+
if (cycle) return cycle;
|
|
95
|
+
}
|
|
96
|
+
path.pop();
|
|
97
|
+
visiting.delete(issue);
|
|
98
|
+
visited.add(issue);
|
|
99
|
+
return null;
|
|
100
|
+
};
|
|
101
|
+
for (const issue of issues) {
|
|
102
|
+
const cycle = visit(issue);
|
|
103
|
+
if (cycle) return cycle;
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
function validateBookForStart(stateRoot, book, options = {}) {
|
|
108
|
+
const blocks = [];
|
|
109
|
+
const warns = [];
|
|
110
|
+
if (book.items.length === 0) blocks.push({
|
|
111
|
+
code: "empty-book",
|
|
112
|
+
issue: book.id,
|
|
113
|
+
message: "Order book must contain at least one issue"
|
|
114
|
+
});
|
|
115
|
+
const issueLookup = options.issueLookup ?? liveOrderIssueLookup;
|
|
116
|
+
const ids = /* @__PURE__ */ new Set();
|
|
117
|
+
for (const item of book.items) {
|
|
118
|
+
ids.add(item.issue.toUpperCase());
|
|
119
|
+
item.prereqs.forEach((prereq) => ids.add(prereq.toUpperCase()));
|
|
120
|
+
}
|
|
121
|
+
const issueState = issueLookup([...ids]);
|
|
122
|
+
for (const item of book.items) {
|
|
123
|
+
const issue = item.issue.toUpperCase();
|
|
124
|
+
const state = issueState.get(issue);
|
|
125
|
+
if (!state?.open) blocks.push({
|
|
126
|
+
code: "issue-not-open",
|
|
127
|
+
issue,
|
|
128
|
+
message: state ? `${issue} is not open` : `${issue} could not be resolved as an open issue`
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
for (const other of options.books ?? listBooks(stateRoot)) {
|
|
132
|
+
if (other.id === book.id || other.status === "complete") continue;
|
|
133
|
+
for (const item of other.items) {
|
|
134
|
+
const issue = item.issue.toUpperCase();
|
|
135
|
+
if (!ids.has(issue) || !book.items.some((candidate) => candidate.issue.toUpperCase() === issue)) continue;
|
|
136
|
+
blocks.push({
|
|
137
|
+
code: "duplicate-membership",
|
|
138
|
+
issue,
|
|
139
|
+
message: `${issue} already belongs to non-complete order book ${other.id}`
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const bookIssues = new Set(book.items.map((item) => item.issue.toUpperCase()));
|
|
144
|
+
for (const item of book.items) for (const rawPrereq of item.prereqs) {
|
|
145
|
+
const prereq = rawPrereq.toUpperCase();
|
|
146
|
+
if (!bookIssues.has(prereq) && !issueState.has(prereq)) blocks.push({
|
|
147
|
+
code: "unresolved-prerequisite",
|
|
148
|
+
issue: item.issue,
|
|
149
|
+
message: `${item.issue} prerequisite ${prereq} could not be resolved`
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
const cycle = findCycle(book);
|
|
153
|
+
if (cycle) blocks.push({
|
|
154
|
+
code: "prerequisite-cycle",
|
|
155
|
+
issue: cycle[0],
|
|
156
|
+
message: `Prerequisite cycle: ${cycle.join(" → ")}`
|
|
157
|
+
});
|
|
158
|
+
const hasPrd = options.hasPrd ?? ((issueId) => hasOrderIssuePrd(stateRoot, issueId));
|
|
159
|
+
for (const item of book.items) {
|
|
160
|
+
if (item.lane !== "B" || hasPrd(item.issue)) continue;
|
|
161
|
+
const finding = {
|
|
162
|
+
code: "missing-prd",
|
|
163
|
+
issue: item.issue,
|
|
164
|
+
message: `${item.issue} has no draft PRD or canonical spec`
|
|
165
|
+
};
|
|
166
|
+
if (item.planAtPickup) warns.push(finding);
|
|
167
|
+
else blocks.push(finding);
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
blocks,
|
|
171
|
+
warns
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
//#endregion
|
|
175
|
+
export { getMergeBlockersPayload as i, hasOrderIssuePrd as n, validateBookForStart as r, createOrderPrdLookup as t };
|
|
176
|
+
|
|
177
|
+
//# sourceMappingURL=validate-IfDGkaVR.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { i as runQualityGates, n as init_validation, r as killAllGateProcessGroups } from "./validation-
|
|
1
|
+
import { i as runQualityGates, n as init_validation, r as killAllGateProcessGroups } from "./validation-Dw1pzDzr.js";
|
|
2
2
|
init_validation();
|
|
3
3
|
export { killAllGateProcessGroups, runQualityGates };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Br as getOverdeckHome, Vr as init_paths, mr as init_errors } from "./config-yaml-
|
|
3
|
-
import { f as init_config, m as loadConfigSync } from "./config-
|
|
4
|
-
import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-
|
|
2
|
+
import { Br as getOverdeckHome, Vr as init_paths, mr as init_errors } from "./config-yaml-DySPNmKN.js";
|
|
3
|
+
import { f as init_config, m as loadConfigSync } from "./config-BZ0sHTju.js";
|
|
4
|
+
import { n as init_workspace_config, r as replacePlaceholdersSync } from "./workspace-config-CIVWZOQr.js";
|
|
5
5
|
import { join } from "node:path";
|
|
6
6
|
import { Effect } from "effect";
|
|
7
7
|
import "fs";
|
|
@@ -522,4 +522,4 @@ var init_validation = __esmMin((() => {
|
|
|
522
522
|
//#endregion
|
|
523
523
|
export { runQualityGates as i, init_validation as n, killAllGateProcessGroups as r, DEFAULT_GATES as t };
|
|
524
524
|
|
|
525
|
-
//# sourceMappingURL=validation-
|
|
525
|
+
//# sourceMappingURL=validation-Dw1pzDzr.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as readVerificationArtifact } from "./verification-artifact-
|
|
1
|
+
import { t as readVerificationArtifact } from "./verification-artifact-TVFSz_q1.js";
|
|
2
2
|
export { readVerificationArtifact };
|
|
@@ -53,4 +53,4 @@ function readVerificationArtifact(workspacePath) {
|
|
|
53
53
|
//#endregion
|
|
54
54
|
export { verificationArtifactPath as n, writeVerificationArtifact as r, readVerificationArtifact as t };
|
|
55
55
|
|
|
56
|
-
//# sourceMappingURL=verification-artifact-
|
|
56
|
+
//# sourceMappingURL=verification-artifact-TVFSz_q1.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as reconcileInterruptedVerifications, r as runVerificationForIssue } from "./verification-runner-
|
|
1
|
+
import { n as reconcileInterruptedVerifications, r as runVerificationForIssue } from "./verification-runner-CkgX6EtI.js";
|
|
2
2
|
export { reconcileInterruptedVerifications, runVerificationForIssue };
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import { Br as getOverdeckHome, Tn as init_projects, Ur as packageRoot, Vr as init_paths, Yn as init_issue_id, Yt as init_state_plane, fn as findProjectByPathSync, mr as init_errors, zn as resolveProjectFromIssueSync } from "./config-yaml-
|
|
2
|
-
import { b as setReviewStatusSync, c as getReviewStatusSync, l as init_review_status, p as markWorkspaceStuck } from "./review-status-
|
|
3
|
-
import { X as messageAgent,
|
|
4
|
-
import { n as init_tracker_utils } from "./tracker-utils-
|
|
1
|
+
import { Br as getOverdeckHome, Tn as init_projects, Ur as packageRoot, Vr as init_paths, Yn as init_issue_id, Yt as init_state_plane, fn as findProjectByPathSync, mr as init_errors, zn as resolveProjectFromIssueSync } from "./config-yaml-DySPNmKN.js";
|
|
2
|
+
import { b as setReviewStatusSync, c as getReviewStatusSync, l as init_review_status, p as markWorkspaceStuck } from "./review-status-kZj_KyCk.js";
|
|
3
|
+
import { X as messageAgent, b as init_agents, ft as stopAgent, ur as setAgentPaused } from "./queries-CjNIf-Ub.js";
|
|
4
|
+
import { n as init_tracker_utils } from "./tracker-utils-DHv5pSDT.js";
|
|
5
5
|
import { i as readReviewStatusMap, n as init_review_status_source } from "./review-status-source-CxuEjLGg.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { n as
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
6
|
+
import { c as resolveWorkspaceRepoRootsSync, r as init_project_repos } from "./project-repos-B6GycDh9.js";
|
|
7
|
+
import { o as init_lifecycle, s as isXBriefFilename } from "./lifecycle-yPd___5E.js";
|
|
8
|
+
import { m as readWorkspacePlanSync, o as init_io, t as XBriefMergeConflictError, v as init_types, y as subItemsOf } from "./io-C9kF1wtJ.js";
|
|
9
|
+
import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-CY5L1lB7.js";
|
|
10
|
+
import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-7mqqwrX6.js";
|
|
11
|
+
import { n as init_shadow_utils } from "./shadow-utils-Db3oroFG.js";
|
|
12
|
+
import { i as runQualityGates, n as init_validation, t as DEFAULT_GATES } from "./validation-Dw1pzDzr.js";
|
|
13
|
+
import { r as writeVerificationArtifact, t as readVerificationArtifact } from "./verification-artifact-TVFSz_q1.js";
|
|
14
|
+
import { n as getXBriefACStatusSync } from "./acceptance-criteria-DDCnXF58.js";
|
|
14
15
|
import { join } from "node:path";
|
|
15
16
|
import { Data, Effect } from "effect";
|
|
16
|
-
import { existsSync } from "fs";
|
|
17
17
|
import { basename as basename$1, dirname as dirname$1, join as join$1 } from "path";
|
|
18
18
|
import { homedir } from "os";
|
|
19
|
-
import { closeSync
|
|
20
|
-
import { readdir } from "fs/promises";
|
|
19
|
+
import { closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, writeFileSync } from "node:fs";
|
|
21
20
|
import { exec, spawn } from "node:child_process";
|
|
22
21
|
import { promisify } from "node:util";
|
|
23
22
|
import { exec as exec$1 } from "child_process";
|
|
@@ -58,7 +57,7 @@ function isProcessAlive(pid) {
|
|
|
58
57
|
}
|
|
59
58
|
function readVerificationWorkerState(issueId) {
|
|
60
59
|
try {
|
|
61
|
-
const parsed = JSON.parse(readFileSync
|
|
60
|
+
const parsed = JSON.parse(readFileSync(statePath(issueId), "utf8"));
|
|
62
61
|
if (parsed.issueId !== issueId || !Number.isInteger(parsed.pid) || typeof parsed.runId !== "string" || typeof parsed.workspacePath !== "string" || typeof parsed.startedAt !== "string" || typeof parsed.resultPath !== "string") return null;
|
|
63
62
|
return {
|
|
64
63
|
...parsed,
|
|
@@ -77,12 +76,12 @@ function readVerificationWorkerState(issueId) {
|
|
|
77
76
|
}
|
|
78
77
|
function isVerificationWorkerActive(issueId) {
|
|
79
78
|
const state = readVerificationWorkerState(issueId);
|
|
80
|
-
return !!state && isProcessAlive(state.pid) && !existsSync
|
|
79
|
+
return !!state && isProcessAlive(state.pid) && !existsSync(state.resultPath);
|
|
81
80
|
}
|
|
82
81
|
function writeJsonAtomic(path, value) {
|
|
83
82
|
const temp = `${path}.${process.pid}.tmp`;
|
|
84
|
-
writeFileSync
|
|
85
|
-
renameSync
|
|
83
|
+
writeFileSync(temp, `${JSON.stringify(value, null, 2)}\n`);
|
|
84
|
+
renameSync(temp, path);
|
|
86
85
|
}
|
|
87
86
|
function verificationWorkerDeadline(state) {
|
|
88
87
|
if (!state.admittedAt) return null;
|
|
@@ -102,7 +101,7 @@ function markVerificationWorkerAdmissionPhase(issueId, update) {
|
|
|
102
101
|
}
|
|
103
102
|
async function waitForResult(state) {
|
|
104
103
|
for (;;) {
|
|
105
|
-
if (existsSync
|
|
104
|
+
if (existsSync(state.resultPath)) return JSON.parse(readFileSync(state.resultPath, "utf8"));
|
|
106
105
|
if (!isProcessAlive(state.pid)) return {
|
|
107
106
|
outcome: "error",
|
|
108
107
|
message: `Verification worker ${state.pid} exited before writing a result`
|
|
@@ -117,21 +116,21 @@ async function waitForResult(state) {
|
|
|
117
116
|
}
|
|
118
117
|
async function runSupervisedVerification(issueId, workspacePath, workspaceInfo, logPrefix, options = {}) {
|
|
119
118
|
const existing = readVerificationWorkerState(issueId);
|
|
120
|
-
if (existing && existing.workspacePath === workspacePath && isProcessAlive(existing.pid) && !existsSync
|
|
119
|
+
if (existing && existing.workspacePath === workspacePath && isProcessAlive(existing.pid) && !existsSync(existing.resultPath)) {
|
|
121
120
|
console.log(`[${logPrefix}] Joining live verification worker ${existing.pid} for ${issueId}`);
|
|
122
121
|
return waitForResult(existing);
|
|
123
122
|
}
|
|
124
123
|
const dir = workerDir(issueId);
|
|
125
|
-
mkdirSync
|
|
124
|
+
mkdirSync(dir, { recursive: true });
|
|
126
125
|
const runId = `${Date.now()}-${process.pid}`;
|
|
127
126
|
const resultPath = join(dir, `result-${runId}.json`);
|
|
128
127
|
const logPath = join(dir, `worker-${runId}.log`);
|
|
129
128
|
const workerPath = process.env.OVERDECK_VERIFICATION_WORKER_PATH || join(packageRoot, "dist", "verification-worker.js");
|
|
130
|
-
if (!existsSync
|
|
129
|
+
if (!existsSync(workerPath)) return {
|
|
131
130
|
outcome: "error",
|
|
132
131
|
message: `Verification worker bundle missing at ${workerPath}; run npm run build`
|
|
133
132
|
};
|
|
134
|
-
const logFd = openSync
|
|
133
|
+
const logFd = openSync(logPath, "a");
|
|
135
134
|
const child = spawn(process.execPath, [workerPath, JSON.stringify({
|
|
136
135
|
issueId,
|
|
137
136
|
workspacePath,
|
|
@@ -152,7 +151,7 @@ async function runSupervisedVerification(issueId, workspacePath, workspaceInfo,
|
|
|
152
151
|
OVERDECK_VERIFICATION_WORKER: "1"
|
|
153
152
|
}
|
|
154
153
|
});
|
|
155
|
-
closeSync
|
|
154
|
+
closeSync(logFd);
|
|
156
155
|
if (!child.pid) return {
|
|
157
156
|
outcome: "error",
|
|
158
157
|
message: "Failed to spawn verification worker"
|
|
@@ -176,6 +175,7 @@ async function runSupervisedVerification(issueId, workspacePath, workspaceInfo,
|
|
|
176
175
|
//#region ../../lib/work/test-requirement-gate.ts
|
|
177
176
|
init_projects();
|
|
178
177
|
init_state_plane();
|
|
178
|
+
init_project_repos();
|
|
179
179
|
init_lifecycle();
|
|
180
180
|
init_types();
|
|
181
181
|
init_io();
|
|
@@ -345,29 +345,6 @@ async function deliverVerificationFeedback(issueId, message, details, logPrefix)
|
|
|
345
345
|
...details
|
|
346
346
|
});
|
|
347
347
|
}
|
|
348
|
-
async function resolveGitDirs(workspacePath, projectConfig) {
|
|
349
|
-
if (!(projectConfig?.workspace?.type === "polyrepo") && existsSync(join$1(workspacePath, ".git"))) return {
|
|
350
|
-
gitDirs: [workspacePath],
|
|
351
|
-
isPolyrepo: false
|
|
352
|
-
};
|
|
353
|
-
const gitDirs = [];
|
|
354
|
-
try {
|
|
355
|
-
const entries = await readdir(workspacePath, { withFileTypes: true });
|
|
356
|
-
for (const entry of entries) if (entry.isDirectory() && !entry.name.startsWith(".") && existsSync(join$1(workspacePath, entry.name, ".git"))) gitDirs.push(join$1(workspacePath, entry.name));
|
|
357
|
-
} catch {}
|
|
358
|
-
if (gitDirs.length > 0) return {
|
|
359
|
-
gitDirs,
|
|
360
|
-
isPolyrepo: true
|
|
361
|
-
};
|
|
362
|
-
if (existsSync(join$1(workspacePath, ".git"))) return {
|
|
363
|
-
gitDirs: [workspacePath],
|
|
364
|
-
isPolyrepo: false
|
|
365
|
-
};
|
|
366
|
-
return {
|
|
367
|
-
gitDirs: [],
|
|
368
|
-
isPolyrepo: false
|
|
369
|
-
};
|
|
370
|
-
}
|
|
371
348
|
async function syncSingleRepo(gitDir, targetBranch) {
|
|
372
349
|
const repoName = basename$1(gitDir);
|
|
373
350
|
try {
|
|
@@ -455,6 +432,26 @@ function getSyncTargetBranch(workspacePath, projectConfig, repoName) {
|
|
|
455
432
|
function changesetHasNoContent(changedFiles) {
|
|
456
433
|
return changedFiles.map((f) => f.trim()).filter(Boolean).filter((f) => !f.startsWith(".pan/") && !isXBriefFilename(f)).length === 0;
|
|
457
434
|
}
|
|
435
|
+
/**
|
|
436
|
+
* Return whether any actual workspace repository contains implementation
|
|
437
|
+
* changes. `undefined` means at least one repo diff failed and no positive
|
|
438
|
+
* evidence was found, so callers must conservatively skip the empty guard.
|
|
439
|
+
*/
|
|
440
|
+
async function workspaceChangesetHasContent(issueId, workspacePath) {
|
|
441
|
+
const roots = resolveWorkspaceRepoRootsSync(issueId, workspacePath);
|
|
442
|
+
let diffFailed = false;
|
|
443
|
+
for (const root of roots) try {
|
|
444
|
+
const { stdout } = await execAsync(`git diff --name-only origin/${root.targetBranch}...HEAD`, {
|
|
445
|
+
cwd: root.dir,
|
|
446
|
+
encoding: "utf-8",
|
|
447
|
+
timeout: 15e3
|
|
448
|
+
});
|
|
449
|
+
if (!changesetHasNoContent(stdout.split("\n"))) return true;
|
|
450
|
+
} catch {
|
|
451
|
+
diffFailed = true;
|
|
452
|
+
}
|
|
453
|
+
return diffFailed ? void 0 : false;
|
|
454
|
+
}
|
|
458
455
|
async function runVerificationForIssuePromise(issueId, workspacePath, workspaceInfo, logPrefix, options = {}) {
|
|
459
456
|
const currentStatus = getReviewStatusSync(issueId);
|
|
460
457
|
const mergedOutcome = skipMergedVerification(issueId, logPrefix, currentStatus);
|
|
@@ -473,16 +470,15 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
473
470
|
console.log(`[${logPrefix}] Running verification gate for ${issueId} (attempt ${currentCycles + 1}/3)`);
|
|
474
471
|
try {
|
|
475
472
|
const projectConfig = findProjectByPathSync(workspacePath);
|
|
476
|
-
const
|
|
477
|
-
|
|
473
|
+
const repoRoots = resolveWorkspaceRepoRootsSync(issueId, workspacePath);
|
|
474
|
+
const isPolyrepo = repoRoots.some((root) => root.isPolyrepo);
|
|
475
|
+
if (options.syncTargetBranch !== false) if (repoRoots.length === 0) console.log(`[${logPrefix}] No git directories found in workspace ${workspacePath} — skipping sync`);
|
|
478
476
|
else {
|
|
479
477
|
const syncResults = [];
|
|
480
|
-
for (const
|
|
481
|
-
const
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
console.log(`[${logPrefix}] Syncing ${targetBranch} into ${displayName} for ${issueId}...`);
|
|
485
|
-
syncResults.push(await syncSingleRepo(gitDir, targetBranch));
|
|
478
|
+
for (const root of repoRoots) {
|
|
479
|
+
const displayName = (isPolyrepo ? root.repoKey : void 0) || basename$1(workspacePath);
|
|
480
|
+
console.log(`[${logPrefix}] Syncing ${root.targetBranch} into ${displayName} for ${issueId}...`);
|
|
481
|
+
syncResults.push(await syncSingleRepo(root.dir, root.targetBranch));
|
|
486
482
|
}
|
|
487
483
|
const postSyncMergedOutcome = skipMergedVerification(issueId, logPrefix);
|
|
488
484
|
if (postSyncMergedOutcome) return postSyncMergedOutcome;
|
|
@@ -541,7 +537,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
541
537
|
const featureName = featureFolder.replace(/^feature-/, "");
|
|
542
538
|
const projectPath = projectConfig?.path || dirname$1(dirname$1(workspacePath));
|
|
543
539
|
const domain = projectConfig?.workspace?.dns?.domain || "localhost";
|
|
544
|
-
const changedBase = `origin/${getSyncTargetBranch(workspacePath, projectConfig, void 0)}`;
|
|
540
|
+
const changedBase = `origin/${repoRoots[0]?.targetBranch ?? getSyncTargetBranch(workspacePath, projectConfig, void 0)}`;
|
|
545
541
|
const placeholders = {
|
|
546
542
|
FEATURE_NAME: featureName,
|
|
547
543
|
FEATURE_FOLDER: featureFolder,
|
|
@@ -637,12 +633,11 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
637
633
|
verificationNotes: `Verification deferred: ${failedGate.error}. Workspace stack rebuild triggered; verification re-runs on the next cycle.`
|
|
638
634
|
});
|
|
639
635
|
try {
|
|
640
|
-
const { rebuildWorkspaceStack } = await import("./rebuild-stack-
|
|
641
|
-
Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[${logPrefix}] ${issueId} stack rebuild: ${m}`) }))
|
|
642
|
-
|
|
643
|
-
});
|
|
636
|
+
const { rebuildWorkspaceStack } = await import("./rebuild-stack-CFvcBHsS.js");
|
|
637
|
+
const rebuildResult = await Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[${logPrefix}] ${issueId} stack rebuild: ${m}`) }));
|
|
638
|
+
if (!rebuildResult.success) console.warn(`[${logPrefix}] Stack rebuild for ${issueId} failed: ${rebuildResult.error}`);
|
|
644
639
|
} catch (err) {
|
|
645
|
-
console.warn(`[${logPrefix}] Could not
|
|
640
|
+
console.warn(`[${logPrefix}] Could not settle stack rebuild for ${issueId}: ${err instanceof Error ? err.message : String(err)}`);
|
|
646
641
|
}
|
|
647
642
|
return {
|
|
648
643
|
outcome: "failed",
|
|
@@ -799,53 +794,43 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
799
794
|
maxCycles: 3
|
|
800
795
|
};
|
|
801
796
|
}
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
797
|
+
const changesetHasContent = await workspaceChangesetHasContent(issueId, workspacePath);
|
|
798
|
+
const postDiffMergedOutcome = skipMergedVerification(issueId, logPrefix);
|
|
799
|
+
if (postDiffMergedOutcome) return postDiffMergedOutcome;
|
|
800
|
+
if (changesetHasContent === false) {
|
|
801
|
+
const newCycleCount = currentCycles + 1;
|
|
802
|
+
const failedCheck = "empty-changeset";
|
|
803
|
+
const comparedTargets = repoRoots.map((root) => `${root.repoKey}:origin/${root.targetBranch}`).join(", ");
|
|
804
|
+
const summary = `Branch has no implementation — only pipeline artifacts (.pan/xBRIEF task state) changed across workspace repos vs ${comparedTargets}. The work agent produced no code (likely a kickoff-delivery zombie — PAN-2179).`;
|
|
805
|
+
setReviewStatusSync(issueId, {
|
|
806
|
+
reviewStatus: "pending",
|
|
807
|
+
verificationStatus: "failed",
|
|
808
|
+
verificationNotes: summary,
|
|
809
|
+
verificationCycleCount: newCycleCount,
|
|
810
|
+
verificationMaxCycles: 3
|
|
807
811
|
});
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
const newCycleCount = currentCycles + 1;
|
|
812
|
-
const failedCheck = "empty-changeset";
|
|
813
|
-
const summary = `Branch has no implementation — only pipeline artifacts (.pan/xBRIEF task state) changed vs ${changedBase}. The work agent produced no code (likely a kickoff-delivery zombie — PAN-2179).`;
|
|
814
|
-
setReviewStatusSync(issueId, {
|
|
815
|
-
reviewStatus: "pending",
|
|
816
|
-
verificationStatus: "failed",
|
|
817
|
-
verificationNotes: summary,
|
|
818
|
-
verificationCycleCount: newCycleCount,
|
|
819
|
-
verificationMaxCycles: 3
|
|
820
|
-
});
|
|
821
|
-
if (shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount)) await escalateVerificationStuck(issueId, failedCheck, newCycleCount, summary, logPrefix);
|
|
822
|
-
try {
|
|
823
|
-
await deliverVerificationFeedback(issueId, shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId}.\nFailed check: ${failedCheck} after ${newCycleCount}/3 attempts — branch still has no implementation.\n\n${buildFinalFailureInstructions(issueId)}` : `VERIFICATION FAILED for ${issueId}.\nFailed check: ${failedCheck} — your branch contains NO code (only .pan/xBRIEF task state changed vs ${changedBase}).\n\nYou must actually implement the issue: read the plan (.pan/spec.vbrief.json + the issue body), write and commit the code, push, then run pan review request. Do NOT stop at the prompt — keep working until pan review request completes.`, {
|
|
824
|
-
failedCheck,
|
|
825
|
-
changedBase
|
|
826
|
-
}, logPrefix);
|
|
827
|
-
console.error(`[${logPrefix}] VERIFICATION FAILED for ${issueId}: empty-changeset (no content files vs ${changedBase})`);
|
|
828
|
-
} catch (feedbackErr) {
|
|
829
|
-
console.error(`[${logPrefix}] Failed to send empty-changeset feedback for ${issueId}:`, feedbackErr);
|
|
830
|
-
}
|
|
831
|
-
return {
|
|
832
|
-
outcome: "failed",
|
|
812
|
+
if (shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount)) await escalateVerificationStuck(issueId, failedCheck, newCycleCount, summary, logPrefix);
|
|
813
|
+
try {
|
|
814
|
+
await deliverVerificationFeedback(issueId, shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId}.\nFailed check: ${failedCheck} after ${newCycleCount}/3 attempts — branch still has no implementation.\n\n${buildFinalFailureInstructions(issueId)}` : `VERIFICATION FAILED for ${issueId}.\nFailed check: ${failedCheck} — your branch contains NO code (only .pan/xBRIEF task state changed across ${comparedTargets}).\n\nYou must actually implement the issue: read the plan (.pan/spec.vbrief.json + the issue body), write and commit the code, push, then run pan review request. Do NOT stop at the prompt — keep working until pan review request completes.`, {
|
|
833
815
|
failedCheck,
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
};
|
|
816
|
+
changedBase: comparedTargets
|
|
817
|
+
}, logPrefix);
|
|
818
|
+
console.error(`[${logPrefix}] VERIFICATION FAILED for ${issueId}: empty-changeset (no content files across ${comparedTargets})`);
|
|
819
|
+
} catch (feedbackErr) {
|
|
820
|
+
console.error(`[${logPrefix}] Failed to send empty-changeset feedback for ${issueId}:`, feedbackErr);
|
|
837
821
|
}
|
|
838
|
-
|
|
839
|
-
|
|
822
|
+
return {
|
|
823
|
+
outcome: "failed",
|
|
824
|
+
failedCheck,
|
|
825
|
+
cycleCount: newCycleCount,
|
|
826
|
+
maxCycles: 3
|
|
827
|
+
};
|
|
840
828
|
}
|
|
829
|
+
if (changesetHasContent === void 0) console.warn(`[${logPrefix}] empty-changeset guard skipped (one or more repo diffs failed)`);
|
|
841
830
|
let lastVerifiedCommit;
|
|
842
831
|
try {
|
|
843
|
-
const {
|
|
844
|
-
|
|
845
|
-
encoding: "utf-8",
|
|
846
|
-
timeout: 5e3
|
|
847
|
-
});
|
|
848
|
-
lastVerifiedCommit = stdout.trim();
|
|
832
|
+
const { snapshotWorkspaceHeadsPromise } = await import("./git-utils-D0_yhCgF.js");
|
|
833
|
+
lastVerifiedCommit = await snapshotWorkspaceHeadsPromise(issueId, workspacePath);
|
|
849
834
|
} catch {}
|
|
850
835
|
const prePassMergedOutcome = skipMergedVerification(issueId, logPrefix);
|
|
851
836
|
if (prePassMergedOutcome) return prePassMergedOutcome;
|
|
@@ -860,7 +845,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
860
845
|
const repo = findProjectByPathSync(workspacePath)?.github_repo;
|
|
861
846
|
if (!repo || !repo.includes("/")) return;
|
|
862
847
|
const [owner, name] = repo.split("/");
|
|
863
|
-
const { postOverdeckTestsStatus } = await import("./github-app-
|
|
848
|
+
const { postOverdeckTestsStatus } = await import("./github-app-ClZ2lk8D.js");
|
|
864
849
|
await postOverdeckTestsStatus(workspacePath, owner, name, "success", "Verification gate passed");
|
|
865
850
|
} catch (err) {
|
|
866
851
|
console.warn(`[${logPrefix}] Failed to post overdeck/tests status: ${err.message}`);
|
|
@@ -896,6 +881,6 @@ function runVerificationForIssueInProcess(issueId, workspacePath, workspaceInfo,
|
|
|
896
881
|
return Effect.promise(() => runVerificationForIssuePromise(issueId, workspacePath, workspaceInfo, logPrefix, options));
|
|
897
882
|
}
|
|
898
883
|
//#endregion
|
|
899
|
-
export { runVerificationForIssueInProcess as i, reconcileInterruptedVerifications as n, runVerificationForIssue as r, changesetHasNoContent as t };
|
|
884
|
+
export { workspaceChangesetHasContent as a, runVerificationForIssueInProcess as i, reconcileInterruptedVerifications as n, runVerificationForIssue as r, changesetHasNoContent as t };
|
|
900
885
|
|
|
901
|
-
//# sourceMappingURL=verification-runner-
|
|
886
|
+
//# sourceMappingURL=verification-runner-CkgX6EtI.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import { Dt as getProjectConfigFromWorkspacePath, Ft as resolveProjectForIssue, Ot as init_record, Pt as readRecordContinueViewSync, Tn as init_projects, mn as findProjectByTeamSync, t as init_config_yaml, u as isTldrEnabledSync, un as extractTeamPrefix } from "./config-yaml-
|
|
3
|
-
import { F as getReadableWorkspacePanPaths, d as readPlanSync, i as findPlanSync, o as init_io, p as readWorkspacePlan } from "./io-
|
|
4
|
-
import { f as init_config, m as loadConfigSync } from "./config-
|
|
5
|
-
import { i as NotImplementedError, o as init_interface } from "./rally-api-
|
|
6
|
-
import { n as createTrackerFromConfig, r as init_factory } from "./factory-
|
|
7
|
-
import { i as createActiveSlice, l as init_dag, o as getDispatchableItems } from "./dag-
|
|
8
|
-
import { l as readFeedback, n as readWorkspaceContext, r as writeWorkspaceContext, t as init_pan_dir } from "./pan-dir-
|
|
9
|
-
import { n as renderPrompt, t as init_prompts } from "./prompts-
|
|
2
|
+
import { Dt as getProjectConfigFromWorkspacePath, Ft as resolveProjectForIssue, Ot as init_record, Pt as readRecordContinueViewSync, Tn as init_projects, mn as findProjectByTeamSync, t as init_config_yaml, u as isTldrEnabledSync, un as extractTeamPrefix } from "./config-yaml-DySPNmKN.js";
|
|
3
|
+
import { F as getReadableWorkspacePanPaths, d as readPlanSync, i as findPlanSync, o as init_io, p as readWorkspacePlan } from "./io-C9kF1wtJ.js";
|
|
4
|
+
import { f as init_config, m as loadConfigSync } from "./config-BZ0sHTju.js";
|
|
5
|
+
import { i as NotImplementedError, o as init_interface } from "./rally-api-C8e_1JRi.js";
|
|
6
|
+
import { n as createTrackerFromConfig, r as init_factory } from "./factory-CFibJuaw.js";
|
|
7
|
+
import { i as createActiveSlice, l as init_dag, o as getDispatchableItems } from "./dag-B1ucnjDU.js";
|
|
8
|
+
import { l as readFeedback, n as readWorkspaceContext, r as writeWorkspaceContext, t as init_pan_dir } from "./pan-dir-B0c3w0Ya.js";
|
|
9
|
+
import { n as renderPrompt, t as init_prompts } from "./prompts-DxzFXuLl.js";
|
|
10
10
|
import { Effect } from "effect";
|
|
11
11
|
import { existsSync, readdirSync, statSync } from "fs";
|
|
12
12
|
import { dirname, join } from "path";
|
|
@@ -436,4 +436,4 @@ __esmMin((() => {
|
|
|
436
436
|
}))();
|
|
437
437
|
export { buildPolyrepoContext, buildWorkAgentPrompt, extractStitchDesigns, getTrackerContext, readFeatureContext, readPlanningContext, writeStoryFeatureContext };
|
|
438
438
|
|
|
439
|
-
//# sourceMappingURL=work-agent-prompt-
|
|
439
|
+
//# sourceMappingURL=work-agent-prompt-Du8Vh2aJ.js.map
|