@overdeck/desktop 0.45.21 → 0.45.23
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/package.json +1 -1
- package/server/{acceptance-criteria-CJIFA8Vg.js → acceptance-criteria-DOA0KgXx.js} +5 -5
- package/server/{advancing-selfheal-CPOBO5ZS.js → advancing-selfheal-BBu6DSNm.js} +6 -6
- package/server/{agent-gc-D6PUckBB.js → agent-gc-BV1q_2EV.js} +4 -4
- package/server/agent-state-Bg0lhqwj.js +3 -0
- package/server/{agent-state-service-DHwemt96.js → agent-state-service-CnzFKSAQ.js} +1 -1
- package/server/{agent-state-service-6MFQqnFy.js → agent-state-service-HoK8U4jW.js} +5 -5
- package/server/{agents-DbrHWunF.js → agents-B4Bjbkfv.js} +4 -4
- package/server/agents-FlIgQ3ql.js +3 -0
- package/server/{archive-planning-BOnwJq8M.js → archive-planning-DYrYojxl.js} +31 -7
- package/server/{archive-planning-MPpvQJL4.js → archive-planning-zkJb3BeM.js} +1 -1
- package/server/{artifact-index-jobs-BOoySTKD.js → artifact-index-jobs-C-xy7Z5v.js} +2 -2
- package/server/{backlog-auto-trigger-BUaFI44J.js → backlog-auto-trigger-GtG71X8H.js} +3 -3
- package/server/{behavior-Dg-D8eBG.js → behavior-B_-4EKF3.js} +2 -2
- package/server/{briefing-freshness-OouGbJ7d.js → briefing-freshness-DWdW7vUm.js} +2 -2
- package/server/{build-info-27NlbKhV.js → build-info-BT096lEl.js} +3 -3
- package/server/{build-info-Cv6CI7Gu.js → build-info-DgTqZkL5.js} +1 -1
- package/server/{checkpoint-manager-C7mFCY_E.js → checkpoint-manager-B7Bt29J0.js} +1 -1
- package/server/{checkpoint-manager-D64fCC4p.js → checkpoint-manager-DDqcGyu8.js} +2 -2
- package/server/checkpoint-worker.js +1 -1
- package/server/{checkpoints-Vh-J15ge.js → checkpoints-C-AXLfYT.js} +2 -2
- package/server/{checkpoints-DwZqT2qQ.js → checkpoints-CpgCjAlN.js} +1 -1
- package/server/{claude-hooks-provision-CS5W_dhI.js → claude-hooks-provision-C8wdRnN1.js} +1 -1
- package/server/{claude-hooks-provision-BVLGfHrv.js → claude-hooks-provision-but-_qGY.js} +2 -2
- package/server/{claude-permissions-C2OrLYKL.js → claude-permissions-H_5wHQZQ.js} +2 -2
- package/server/{claude-settings-overlay-DWXjafJh.js → claude-settings-overlay-BTENVmYf.js} +1 -1
- package/server/{claude-settings-overlay-DX-fMFpC.js → claude-settings-overlay-CbSz0Dvb.js} +2 -2
- package/server/cli-BsVIHwzC.js +3 -0
- package/server/{cli-mvpEOb3w.js → cli-vBeXbPrq.js} +9 -9
- package/server/{cliproxy-Dvsr4ZkW.js → cliproxy-Bgb2XCqi.js} +2 -2
- package/server/{cliproxy-7g1nObvB.js → cliproxy-DW0V86F8.js} +1 -1
- package/server/{close-issue-8F6uawYj.js → close-issue-Dn_4c4G8.js} +5 -5
- package/server/{closed-issue-reaper-BhV-r-tC.js → closed-issue-reaper-CWpY2uBw.js} +1 -1
- package/server/{closed-issue-reaper-BaYQYF6w.js → closed-issue-reaper-hANY_ehE.js} +9 -9
- package/server/codex-Dg7Is5yb.js +3 -0
- package/server/{codex-D_UBEOwL.js → codex-TmSi-yTv.js} +30 -8
- package/server/{codex-parser-BTzlOZiV.js → codex-parser-C4gSH-IR.js} +2 -2
- package/server/{config-CrduXs4a.js → config-CCvjQf27.js} +2 -2
- package/server/{config-nAB_F-Gp.js → config-DUIhMN_T.js} +1 -1
- package/server/{config-G1TOMJZA.js → config-DjLOdbgT.js} +2 -2
- package/server/{config-yaml-Ciyp2mYe.js → config-yaml-DvyMuOle.js} +177 -211
- package/server/{conflict-gate-BKalpcjL.js → conflict-gate-BSJkNTdp.js} +1 -1
- package/server/{conflict-gate-BLUNMs1i.js → conflict-gate-CmrYpa47.js} +3 -3
- package/server/{context-layers-YNpf6Q_I.js → context-layers-B3Nt58jl.js} +2 -2
- package/server/{context-layers-Cg9ZgVfx.js → context-layers-ZYFcWiyc.js} +3 -3
- package/server/{control-settings-D_79A6gp.js → control-settings-aP1ANIlI.js} +4 -4
- package/server/{conversation-compaction-DiuZbIUB.js → conversation-compaction-CNbTLB86.js} +8 -8
- package/server/{conversation-compaction-CMIeWW4_.js → conversation-compaction-DiG5zWQq.js} +1 -1
- package/server/{conversation-service-DQybSPUK.js → conversation-service-Du-MTNpJ.js} +6 -6
- package/server/{conversation-service-CWk8mEym.js → conversation-service-Up7FEzIC.js} +1 -1
- package/server/{conversations-BJ-t3BRm.js → conversations-6mPANqvL.js} +1 -1
- package/server/{conversations-BUgGvqVL.js → conversations-DbOs1e9Q.js} +4 -4
- package/server/{cost-jJ2cgDcG.js → cost-CW4WSe72.js} +3 -3
- package/server/{cost-Drm7qeD5.js → cost-Ca0YTWDw.js} +18 -2
- package/server/{cost-sync-DzHP6zaR.js → cost-sync-C0VdGme1.js} +3 -3
- package/server/{dag-DIji6O2b.js → dag-CdOjJVDT.js} +9 -9
- package/server/{dangerous-git-ops-BebB-61h.js → dangerous-git-ops-CT-IypG3.js} +1 -1
- package/server/dashboard-db-worker.js +7 -7
- package/server/{deacon-pleYrvIm.js → deacon-DYSEJb48.js} +3 -3
- package/server/{deacon-nudge-log-C5VCKtyi.js → deacon-nudge-log-Bjg8U4Y9.js} +3 -3
- package/server/{deacon-1s7bM5zn.js → deacon-pRnyD5w9.js} +1133 -474
- package/server/deacon-swarm-9jRLS5Ke.js +2 -0
- package/server/{deacon-swarm-DmA3rJ7k.js → deacon-swarm-DftYRDo8.js} +17 -17
- package/server/deacon.js +8 -8
- package/server/{deploy-patrol-DmM6F-yw.js → deploy-patrol-Bjsho_ha.js} +136 -19
- package/server/{deploy-window-ClLq1RYf.js → deploy-window-CM6W1-c6.js} +1 -1
- package/server/{deploy-window-jw4S_Y-c.js → deploy-window-DeP_OIRk.js} +77 -10
- package/server/{dev-supervisor-Do2Stz49.js → dev-supervisor-BpMoHlkR.js} +2 -2
- package/server/{devcontainer-renderer-D8ylupco.js → devcontainer-renderer-CtUgrVKW.js} +3 -3
- package/server/dist-Bd3vn0Hw.js +3 -0
- package/server/{dist-yfR7G1BL.js → dist-DyRx4cI7.js} +1 -1
- package/server/{docker-ClwPQaba.js → docker-BK7HIcBj.js} +2 -2
- package/server/{dod-BLphkhjs.js → dod-BrSfUHm0.js} +1 -1
- package/server/{ensure-devcontainer-BA3bICoY.js → ensure-devcontainer-DRqaAkBR.js} +1 -1
- package/server/{ensure-devcontainer-CFpQatOc.js → ensure-devcontainer-DseivYEy.js} +4 -4
- package/server/{esm-shims-BZw-fTQ6.js → esm-shims-CbI3BVkl.js} +1 -1
- package/server/{event-store-DABarGNz.js → event-store-Cr5PQwFC.js} +1 -1
- package/server/{event-store-BVnON3vf.js → event-store-tdiY5eDZ.js} +3 -3
- package/server/{events-CmERlnwn.js → events-CC1dgUpx.js} +3 -3
- package/server/{events-LGeUehYW.js → events-CvvGK6LT.js} +1 -1
- package/server/{factory-CQNprtHe.js → factory-CynerjXO.js} +50 -13
- package/server/{feature-registry-population-D9Z3tYSa.js → feature-registry-population-B0pmAz0a.js} +4 -4
- package/server/{feature-registry-storage-BWymOgXE.js → feature-registry-storage-_wUBRD3J.js} +2 -2
- package/server/{features--fOza5g5.js → features-Dhxz-wLc.js} +2 -2
- package/server/{feedback-target-Dqik2WTe.js → feedback-target-CPS15Vte.js} +7 -7
- package/server/{feedback-target-Dn9vfPpz.js → feedback-target-iygZwmMc.js} +1 -1
- package/server/{feedback-writer-Wlq5-qgS.js → feedback-writer-C9b6ccN1.js} +6 -5
- package/server/{feedback-writer-DDQNV8uc.js → feedback-writer-qmiMbqTZ.js} +1 -1
- package/server/{flywheel-Q-38YhZG.js → flywheel-DMCUzDWg.js} +1 -1
- package/server/{flywheel-1Wd8WDlh.js → flywheel-DSSpWmqF.js} +13 -13
- package/server/{flywheel-DPUc8r3V.js → flywheel-DcBkQvgE.js} +14 -14
- package/server/{flywheel-merge-order-CeBuX0EJ.js → flywheel-merge-order-C-6zRLvM.js} +1 -1
- package/server/{flywheel-merge-order-4SqOXFAr.js → flywheel-merge-order-DxbQKE1d.js} +8 -8
- package/server/forge-B-ZWyTRm.js +2 -0
- package/server/{forge-DBbDpiYc.js → forge-Ch9gCFod.js} +2 -2
- package/server/{from-hh6vTBGl.js → from-CJ_aH5jD.js} +1 -1
- package/server/{fts-db-6ponMie2.js → fts-db-CKgg0VKg.js} +2 -2
- package/server/{fts-operations-KIRK165y.js → fts-operations-BrL_VTRr.js} +2 -2
- package/server/git-utils-BVa07a4a.js +198 -0
- package/server/{git-utils-DmF5xkj8.js → git-utils-Dry_Ka_D.js} +1 -1
- package/server/{github-app-B3yfECo8.js → github-app-CMBdIFBQ.js} +11 -3
- package/server/{github-app-CeSVFL6C.js → github-app-CPfoFAdV.js} +1 -1
- package/server/{github-client-Dslipypz.js → github-client--XVlDpwM.js} +2 -2
- package/server/{github-client-4A6FgA8O.js → github-client-B4QsdE-X.js} +1 -1
- package/server/{github-pr-lookup-DBP0YHMr.js → github-pr-lookup-BRbDW-qk.js} +2 -2
- package/server/harness-binary-CVio2m-u.js +106 -0
- package/server/{harness-resolve-BGpO-OVM.js → harness-resolve-qHJBhy3Z.js} +9 -15
- package/server/{health-events-CZGZ5I-A.js → health-events-C9B8y1Hm.js} +2 -2
- package/server/{health-events-CnwV_SSz.js → health-events-CpfvuVmm.js} +1 -1
- package/server/{hooks-CoNscX84.js → hooks-DUXw8A0-.js} +2 -2
- package/server/{hooks-DvX33gY_.js → hooks-ltecuFqZ.js} +1 -1
- package/server/{hume-DSJt5eA_.js → hume-BEq0bUDg.js} +2 -2
- package/server/hume-B_DbflNM.js +3 -0
- package/server/{idle-stack-reaper-5DVRoY6P.js → idle-stack-reaper-D7w9t3fE.js} +1 -1
- package/server/{idle-stack-reaper-BfL8HqYy.js → idle-stack-reaper-w1ISSlhs.js} +2 -2
- package/server/{in-flight-guard-tVGiI5ee.js → in-flight-guard-aQ1IxeI3.js} +2 -2
- package/server/{infra-DN2wSxle.js → infra-CzaSOgul.js} +4 -4
- package/server/{injection-DtlT8Akv.js → injection-DZ0PfYa4.js} +7 -7
- package/server/{injection-DK9zh_HL.js → injection-oNZeoDhL.js} +1 -1
- package/server/{inspect-agent-DKByUS_F.js → inspect-agent-DJKLWcVT.js} +15 -11
- package/server/inspect-agent-ch-F-5Ci.js +2 -0
- package/server/{internal-token-DhfFiwW7.js → internal-token-Bb4XeV2x.js} +2 -2
- package/server/{internal-token-7bYL5v6K.js → internal-token-DXdfprGr.js} +1 -1
- package/server/{io-BiM-7Zsx.js → io-B3_AHDfr.js} +160 -184
- package/server/{issue-closed-Dfw3QDyZ.js → issue-closed-zhdvQicO.js} +7 -7
- package/server/{issue-lifecycle-B7HZWnTA.js → issue-lifecycle-CreaCkjW.js} +22 -22
- package/server/{issue-lifecycle-ytsEdDlK.js → issue-lifecycle-Dy4vd0Oa.js} +1 -1
- package/server/{issue-service-singleton-CPESc4Or.js → issue-service-singleton-B5ushCvE.js} +8 -8
- package/server/{issue-service-singleton-D5EB5eYr.js → issue-service-singleton-DabvBWUp.js} +1 -1
- package/server/{issues-XYtFMxrH.js → issues-B6ToV6x1.js} +2 -2
- package/server/{jsonl-parser-DJV2eZUP.js → jsonl-parser-Dhflo1SH.js} +3 -3
- package/server/{label-cleanup-CJ4m8iRU.js → label-cleanup-BKPJm4Hv.js} +3 -3
- package/server/{label-reconciler-CNf3Ylm3.js → label-reconciler-DdWbHEBu.js} +4 -4
- package/server/{launcher-generator-5DJRiovn.js → launcher-generator-CHVm7bGT.js} +10 -9
- package/server/{layers-cZx7ibtV.js → layers-DzxSTGNA.js} +2 -2
- package/server/lifecycle-DfeyBDwA.js +121 -0
- package/server/lifecycle-io-Bsnr2K4F.js +3 -0
- package/server/{lifecycle-io-DMurK4oM.js → lifecycle-io-D8iNBcux.js} +37 -37
- package/server/{lifecycle-CE7619Xw.js → lifecycle-sycO16hj.js} +6 -6
- package/server/{linear-client-BLyN-NiP.js → linear-client-D4zqMnX7.js} +2 -2
- package/server/{linear-client-Bj1l4FOA.js → linear-client-DqhDQO9k.js} +1 -1
- package/server/memory-fts-worker.js +1 -1
- package/server/{merge-hSC2BENe.js → merge-C_ZEhbqI.js} +3 -3
- package/server/{merge-CwX2_AWm.js → merge-DK23JEdS.js} +1 -1
- package/server/{merge-agent-CnORPiri.js → merge-agent-BQM3a8z5.js} +1 -1
- package/server/{merge-agent-DnBsms_V.js → merge-agent-XrB80vfT.js} +369 -213
- package/server/{merge-batch-C2w2U2eK.js → merge-batch-Bwoyr8Je.js} +1 -1
- package/server/{merge-blockers-DhRgh76x.js → merge-blockers-BsFjGrQ8.js} +2 -2
- package/server/merge-ops-DlB1IM0Y.js +2 -0
- package/server/{merge-rebase-CE-ZyOMY.js → merge-rebase-C1KIVr0s.js} +2 -2
- package/server/{merge-set-D7YNU1ZB.js → merge-set-DLz0MkGT.js} +3 -3
- package/server/{merge-set-DHkzPCJU.js → merge-set-DnSYdBEp.js} +1 -1
- package/server/{merge-sync-De1FYva5.js → merge-sync-DZ9dojJn.js} +2 -2
- package/server/{merge-sync-CpGA9Kg7.js → merge-sync-SSv3E-pl.js} +1 -1
- package/server/{merge-train-SvkRJZ-k.js → merge-train-DxDfBTjr.js} +3 -3
- package/server/{merge-train-deps-CECJTElu.js → merge-train-deps-CyYQUksx.js} +4 -4
- package/server/{merge-verification-B3meGcXF.js → merge-verification-CSizH3HY.js} +4 -4
- package/server/{multipart-parser-ByTMgYV5.js → multipart-parser-Dt8YPN5S.js} +2 -2
- package/server/{no-resume-mode-BnInAFKs.js → no-resume-mode-Cx3K0hHi.js} +11 -8
- package/server/node_modules/.package-lock.json +5 -5
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/README.md +3 -3
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.d.ts.map +1 -1
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js +2 -2
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/dist/NodeChildProcessSpawner.js.map +1 -1
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +5 -5
- package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/src/NodeChildProcessSpawner.ts +6 -8
- package/server/{orphan-proposed-reconciler-CAfuWTA1.js → orphan-proposed-reconciler-BTkDrl4R.js} +1 -1
- package/server/{orphan-proposed-reconciler-AxAGUouN.js → orphan-proposed-reconciler-neK8dHQk.js} +23 -14
- package/server/package-lock.json +6 -6
- package/server/package.json +1 -1
- package/server/{pan-dir-Rw17YjT1.js → pan-dir-DeVUgwA7.js} +78 -58
- package/server/{paths-FP8v3lTz.js → paths-_zEts6wc.js} +2 -2
- package/server/{pickup-xi3KTLaJ.js → pickup-Dd0Znxxy.js} +2 -2
- package/server/{pipeline-membership-BtKMNY7v.js → pipeline-membership-0HaEGDlH.js} +190 -68
- package/server/{pipeline-notifier-dQ-U4NSb.js → pipeline-notifier-6iCJplFZ.js} +1 -1
- package/server/{pipeline-notifier-BM2HLF7B.js → pipeline-notifier-D0ykk59O.js} +2 -2
- package/server/{project-pipelines-B59NfN44.js → project-pipelines-2sK1apsO.js} +2 -2
- package/server/projects-9SkRpES9.js +3 -0
- package/server/{prompts-CbqaVjbe.js → prompts-Dp4Tpk39.js} +2 -2
- package/server/providers-DKkBXhxU.js +3 -0
- package/server/{providers-d3pwXGVE.js → providers-DV7ec8l7.js} +7 -7
- package/server/public/assets/{chunk-BO2N2NFS-BxYSL7J-.js → chunk-BO2N2NFS-CltymLRg.js} +4 -4
- package/server/public/assets/{diagram-OG6HWLK6-C_F9Q2as.js → diagram-OG6HWLK6-D2f6pjgA.js} +1 -1
- package/server/public/assets/{dist-DQNg4CiF.js → dist-BWR4qFiV.js} +1 -1
- package/server/public/assets/{dist-CLSlc6cV.js → dist-DEmlBBNQ.js} +3 -3
- package/server/public/assets/{ganttDiagram-6RSMTGT7-Cq0my-0C.js → ganttDiagram-6RSMTGT7-DnfiViPK.js} +1 -1
- package/server/public/assets/{highlighted-body-OFNGDK62-eZC03dGh.js → highlighted-body-OFNGDK62-B8Wrmj9H.js} +1 -1
- package/server/public/assets/index-CUr1xv8w.css +1 -0
- package/server/public/assets/{index-SLYGA8AQ.js → index-CsSuZQBI.js} +148 -145
- package/server/public/assets/{linear-6Fi3qnGg.js → linear-C9zFQpkX.js} +1 -1
- package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +1 -0
- package/server/public/assets/{pieDiagram-4H26LBE5-Dpmc6xsv.js → pieDiagram-4H26LBE5-lR8H7Yjd.js} +1 -1
- package/server/public/assets/{prod-ojHllFvN.js → prod-B1jCQihw.js} +4 -4
- package/server/public/assets/{quadrantDiagram-W4KKPZXB-Ulr9gON5.js → quadrantDiagram-W4KKPZXB-CVQ2guem.js} +1 -1
- package/server/public/assets/{sankeyDiagram-5OEKKPKP-CwdHGXfL.js → sankeyDiagram-5OEKKPKP-eD1RB4gm.js} +1 -1
- package/server/public/assets/{xychartDiagram-2RQKCTM6-r-bEDzJh.js → xychartDiagram-2RQKCTM6-ChEC6dQn.js} +1 -1
- package/server/public/index.html +54 -10
- package/server/{pull-requests-D3N6HQzI.js → pull-requests--Ib2jTgy.js} +1 -1
- package/server/{pull-requests-CjjPj7v6.js → pull-requests-CXIhdCYD.js} +13 -11
- package/server/{queries-B5hl7lMQ.js → queries-6d7Cdtm7.js} +723 -110
- package/server/{rally-Dp0Gb1DN.js → rally-B708-nZn.js} +3 -3
- package/server/{rally-api-DGaFz5L5.js → rally-api-nY0ZANw3.js} +2 -2
- package/server/{rally-api-CKr0O4DJ.js → rally-api-yjQ0TfHd.js} +1 -1
- package/server/{rally-client-SVbjGvqj.js → rally-client-B1EJhfV0.js} +4 -4
- package/server/{rally-client-Cqf6EX_r.js → rally-client-CULK2XAY.js} +1 -1
- package/server/rally-njs_mJrt.js +3 -0
- package/server/reap-terminal-sessions-MWnqdLCJ.js +4 -0
- package/server/{reap-terminal-sessions-CjqRAGw7.js → reap-terminal-sessions-N3BTkmX_.js} +11 -28
- package/server/{rebuild-stack-DHqCLvLX.js → rebuild-stack-Dp4eLkt4.js} +6 -6
- package/server/{rebuild-stack-DjdpALr1.js → rebuild-stack-kA7XngID.js} +1 -1
- package/server/{reconstruct-cache-BqrCQt0o.js → reconstruct-cache-uWbZfjms.js} +6 -6
- package/server/record-t6V-3Dcj.js +3 -0
- package/server/{record-update-BlB8mpKO.js → record-update-DACtKh6_.js} +1 -1
- package/server/record-update-Dq0t2uBG.js +310 -0
- package/server/{recovery-trip-l1Hsi37x.js → recovery-trip-BJtIQuag.js} +2 -2
- package/server/{release-engine-CSI4K6Oj.js → release-engine-DZpmGGzb.js} +5 -5
- package/server/{release-set-BywwggrE.js → release-set-hnXd_kga.js} +3 -3
- package/server/{remote-DYziAkiZ.js → remote-4tiENDaI.js} +3 -3
- package/server/{remote-cnoeuDWn.js → remote-Br-ZWVIP.js} +3 -3
- package/server/{remote-agents-BNORDWAX.js → remote-agents-CRCg1L4H.js} +1 -1
- package/server/{remote-agents-CZ2rc8I0.js → remote-agents-nmty1mLu.js} +6 -6
- package/server/{remote-completion-W67FNQ-A.js → remote-completion-BbWNd10K.js} +13 -13
- package/server/resume-CcKqnTvE.js +3 -0
- package/server/{review-agent-CSswH985.js → review-agent-DJRO8EG8.js} +1 -1
- package/server/{review-agent-CqSqSHkU.js → review-agent-sKkE1FEL.js} +23 -23
- package/server/{review-artifacts-BBgnd5df.js → review-artifacts-BLbSC4ke.js} +5 -5
- package/server/{review-context-Ctp9BdNJ.js → review-context-BgX3lcCx.js} +9 -9
- package/server/{review-status-CCgPVK1h.js → review-status-A7quS5KJ.js} +56 -39
- package/server/review-status-C6n6-9f_.js +3 -0
- package/server/{review-status-enrichment-DtDRGpst.js → review-status-enrichment-tbOn_A_u.js} +3 -3
- package/server/review-status-source-CxuEjLGg.js +39 -0
- package/server/{review-status-sync-jnLgd04F.js → review-status-sync-BhSQ0d0l.js} +2 -2
- package/server/{review-status-sync-C792ksoJ.js → review-status-sync-To3-iS-N.js} +1 -1
- package/server/{review-verdict-feedback-D5lW0o3k.js → review-verdict-feedback-C1Kg8n7t.js} +1 -1
- package/server/{review-verdict-feedback-CMsIpTpy.js → review-verdict-feedback-CTRNtzXO.js} +7 -7
- package/server/{rollup-B3kQmNpl.js → rollup-B53Y81xK.js} +1 -1
- package/server/{rollup-CLj_AK9f.js → rollup-WA0VD-Rr.js} +8 -8
- package/server/{scanner-C4NeC4FE.js → scanner-D2743cp8.js} +11 -7
- package/server/{sequence-io-Ce-6grIY.js → sequence-io-Cg0zYj_E.js} +4 -4
- package/server/{sequencer-agent-Bpz0yGmG.js → sequencer-agent-BGY8gjg-.js} +5 -5
- package/server/server.js +1348 -963
- package/server/{service-CqAY8Kmk.js → service-DCpB_SGd.js} +154 -51
- package/server/{session-fork-uNo4rMRA.js → session-fork-BQ8_6H32.js} +2 -2
- package/server/{session-history-DUehL3KN.js → session-history-CVZDpS3c.js} +4 -4
- package/server/{settings-DP2OYLXL.js → settings-BZ5m1UCl.js} +3 -3
- package/server/settings-D0OSwos5.js +2 -0
- package/server/{settings-D9grjmaP.js → settings-ylxwqwQG.js} +2 -2
- package/server/{shadow-engineering-Bi_oIMtF.js → shadow-engineering-BlxG6Xye.js} +3 -3
- package/server/{shadow-state-CDxEuPlE.js → shadow-state-C2_epgx2.js} +1 -1
- package/server/{shadow-state-a_ztFBJe.js → shadow-state-Dh-HzF2J.js} +2 -2
- package/server/{shadow-utils-CyOg6_Xq.js → shadow-utils-4bvjn9b3.js} +2 -2
- package/server/{ship-log-DDcueaIR.js → ship-log-ClSMIzZX.js} +1 -1
- package/server/{smart-compaction-C1_VVLEd.js → smart-compaction-CHIxLr_d.js} +1 -1
- package/server/{smart-compaction--Oj65Uov.js → smart-compaction-r4pHQBIr.js} +7 -7
- package/server/{spawn-planning-session-AiUSsBnH.js → spawn-planning-session-DWAorh2B.js} +25 -20
- package/server/{spawn-planning-session-LFtK2QCE.js → spawn-planning-session-KC_UduxD.js} +1 -1
- package/server/{specialist-completion-qOgqdqXH.js → specialist-completion-BXhav38U.js} +1 -1
- package/server/{specialist-context-gjj8Z4Ii.js → specialist-context-DtrYvGJ-.js} +5 -5
- package/server/{specialist-handoff-logger-BsBNvVZv.js → specialist-handoff-logger-C45ouoZ6.js} +2 -2
- package/server/{specialist-logs-CSLtvPx6.js → specialist-logs-DJ3RzKxW.js} +3 -3
- package/server/{specialists-D0VBf8g_.js → specialists-D5fRZXmN.js} +1 -1
- package/server/specialists-DVj0hvaL.js +3 -0
- package/server/{specialists-CYRwELzc.js → specialists-DyFeedjn.js} +66 -76
- package/server/{specialists-DAegTvRt.js → specialists-JVO00bs7.js} +374 -220
- package/server/specs-nN45DG2X.js +3 -0
- package/server/{src-OLoJhUiJ.js → src-CG9mCkP6.js} +6 -6
- package/server/{src-BqTcrfO_.js → src-CMTQGyCK.js} +3 -3
- package/server/{src-Dpq1yFIl.js → src-U7_kTPEE.js} +338 -4
- package/server/{stack-health-I713ELld.js → stack-health-Df0YEZKa.js} +1 -1
- package/server/{stack-health-DV_f-lK0.js → stack-health-puygdaMd.js} +2 -2
- package/server/{stale-task-claims-CQSKZVq0.js → stale-task-claims-BbFwCTb0.js} +4 -4
- package/server/{staleness-BbsGxmF2.js → staleness-Bpy41ngS.js} +15 -3
- package/server/{staleness-zGp4P1hd.js → staleness-Cbl_w4Bw.js} +1 -1
- package/server/{state-home-DixkE-up.js → state-home-CIGjwNfJ.js} +119 -54
- package/server/state-migrate-Dkzaxvny.js +487 -0
- package/server/{stuck-remediation-BWkK_O7A.js → stuck-remediation-CzEov_fq.js} +27 -21
- package/server/{stuck-remediation-CTPRC2S5.js → stuck-remediation-sY_MHHgQ.js} +1 -1
- package/server/{substrate-bug-weights-service-DXd0ID83.js → substrate-bug-weights-service-BH66lhm7.js} +3 -3
- package/server/{summary-fork-CdLn8Chr.js → summary-fork-D8bXjCr7.js} +2 -2
- package/server/{summary-fork-f3DpgjXh.js → summary-fork-DHhJIsAL.js} +8 -8
- package/server/{supervisor-Ch8CDuoF.js → supervisor-BO-Zk_h-.js} +3 -3
- package/server/supervisor-BPy-o1A8.js +2 -0
- package/server/{swarm-readiness-C9P2iPap.js → swarm-readiness-CQ_fwUWF.js} +4 -4
- package/server/{system-prerequisites-DkoQBn1q.js → system-prerequisites-Bza0ffAh.js} +24 -44
- package/server/{teardown-workspace-D-5yMyit.js → teardown-workspace-CEgauF4U.js} +15 -15
- package/server/{test-agent-queue-BwpUpu-o.js → test-agent-queue-DXDt0Xa-.js} +7 -7
- package/server/{test-verdict-BRiSu7eW.js → test-verdict-CmUBK5cT.js} +1 -1
- package/server/{test-verdict-BQ1yx7d4.js → test-verdict-DFjjIHR5.js} +1 -1
- package/server/{tldr-daemon-DjxP5g6Y.js → tldr-daemon-BDtLOIlO.js} +2 -2
- package/server/{tldr-daemon-BJA7TkqS.js → tldr-daemon-DL566HbH.js} +1 -1
- package/server/tmux-DoThH6aj.js +3 -0
- package/server/{tmux-y1blSxks.js → tmux-ftABRAmc.js} +76 -44
- package/server/{token-LUrbM9sU.js → token-CsOhvw42.js} +2 -2
- package/server/{token-util-BZaDAQ8S.js → token-util-CTmczIfW.js} +1 -1
- package/server/token-util-DrHg8abn.js +3 -0
- package/server/{tracker-config-DSFZBdXP.js → tracker-config-B4itFzDo.js} +2 -2
- package/server/{tracker-utils-WtP_V-yn.js → tracker-utils-BePq_oj-.js} +1 -1
- package/server/{tracker-utils-DiceZN3a.js → tracker-utils-tnxxqROg.js} +2 -2
- package/server/{traefik-connect-BXqfOP4-.js → traefik-connect-m73vGebA.js} +1 -1
- package/server/{tunnel-DTng1rfQ.js → tunnel-B2vxjx_b.js} +3 -3
- package/server/{tunnel-WcJImbAC.js → tunnel-Cgj-IGIl.js} +1 -1
- package/server/{types-BjaZ1oqH.js → types-BBNjPcqU.js} +1 -1
- package/server/{types-DqeBMmJN.js → types-hraoaQIp.js} +1 -1
- package/server/{uat-train-BpLnp7Cx.js → uat-train-CuEn0t9M.js} +28 -28
- package/server/{uat-train-Wismge7h.js → uat-train-cKfM-_WW.js} +1 -1
- package/server/{validation-BA4e5EGm.js → validation-B5JxoPUS.js} +259 -9
- package/server/{validation-CUWamZ4X.js → validation-CIi6pnI2.js} +1 -1
- package/server/{verification-artifact-Dr_0g9nb.js → verification-artifact-BcnIbigL.js} +1 -1
- package/server/{verification-artifact-CrbI4tJE.js → verification-artifact-C-lIHfUa.js} +1 -1
- package/server/{verification-runner-gAzh3cVD.js → verification-runner-Br0S_Ous.js} +103 -37
- package/server/{verification-runner-Dcksl_P-.js → verification-runner-CDj4lD4t.js} +1 -1
- package/server/{vtt-parser-3VZKsmSm.js → vtt-parser-DKpNNW5i.js} +1 -1
- package/server/{work-agent-prompt-ULdcANl5.js → work-agent-prompt-Yb2bd3Fq.js} +16 -15
- package/server/{workflows-B8ROFlfw.js → workflows-C9WmILql.js} +39 -77
- package/server/workflows-D90rMOya.js +2 -0
- package/server/{workspace-DhTDA8nB.js → workspace-BVl4rihN.js} +3 -3
- package/server/{workspace-DSjUJaJN.js → workspace-DuUdndHe.js} +1 -1
- package/server/{workspace-config-BAAsAv-o.js → workspace-config-cEGcO6UT.js} +1 -1
- package/server/{workspace-manager-CcujONCR.js → workspace-manager-ZTdJAy9M.js} +1 -1
- package/server/{workspace-manager-DsN52IMG.js → workspace-manager-hLUv3ADC.js} +23 -16
- package/server/{workspace-metadata-DIL5_U4c.js → workspace-metadata-CskwzzhL.js} +2 -2
- package/server/{workspace-metadata-CftOpNLs.js → workspace-metadata-DNpMixRq.js} +1 -1
- package/server/{workspaces-Dmlh1YXm.js → workspaces-hWvy9eKs.js} +276 -110
- package/sync-sources/agents/pan-inspect-agent.md +1 -1
- package/sync-sources/agents/pan-merge-agent.md +1 -1
- package/sync-sources/agents/pan-planning-agent.md +4 -4
- package/sync-sources/agents/pan-work-agent.md +1 -1
- package/sync-sources/dev-skills/pan-commit/SKILL.md +1 -1
- package/sync-sources/dev-skills/test-specialist-workflow/SKILL.md +1 -1
- package/sync-sources/hooks/record-cost-event.js +363 -71
- package/sync-sources/hooks/session-start-hook +7 -0
- package/sync-sources/hooks/work-agent-stop-hook +1 -1
- package/sync-sources/rules/per-bead-durability.md +1 -1
- package/sync-sources/rules/prd-authoring.md +1 -1
- package/sync-sources/skills/feature-work/SKILL.md +1 -1
- package/sync-sources/skills/pan/SKILL.md +2 -2
- package/sync-sources/skills/pan-admin-config/SKILL.md +1 -0
- package/sync-sources/skills/pan-approve/SKILL.md +1 -1
- package/sync-sources/skills/pan-close/SKILL.md +1 -1
- package/sync-sources/skills/pan-doctor/SKILL.md +1 -1
- package/sync-sources/skills/pan-new-project/SKILL.md +9 -11
- package/sync-sources/skills/pan-oversee/SKILL.md +5 -5
- package/sync-sources/skills/pan-plan/SKILL.md +6 -6
- package/sync-sources/skills/pan-quickstart/SKILL.md +1 -1
- package/sync-sources/skills/pan-recap/SKILL.md +2 -2
- package/sync-sources/skills/pan-review/SKILL.md +1 -1
- package/sync-sources/skills/pan-start/SKILL.md +26 -3
- package/sync-sources/skills/pan-swarm/SKILL.md +1 -1
- package/sync-sources/skills/pan-sync/SKILL.md +1 -1
- package/sync-sources/skills/pan-task/SKILL.md +2 -2
- package/sync-sources/skills/pan-wipe/SKILL.md +2 -2
- package/sync-sources/skills/pipeline-list/SKILL.md +1 -1
- package/sync-sources/skills/pipeline-status/SKILL.md +2 -2
- package/sync-sources/skills/plan/SKILL.md +11 -11
- package/sync-sources/skills/write-vbrief/SKILL.md +7 -282
- package/sync-sources/skills/write-xbrief/SKILL.md +295 -0
- package/sync-sources/templates/claude-md/sections/warnings.md +1 -1
- package/server/agent-state-BV_6RHnO.js +0 -3
- package/server/agents-Czz6R57Z.js +0 -3
- package/server/cli-ChErG518.js +0 -3
- package/server/codex-BBeZ8c3s.js +0 -3
- package/server/deacon-swarm-uudlSCLM.js +0 -2
- package/server/dist-BEDL2alY.js +0 -3
- package/server/forge-DbhJyH6u.js +0 -2
- package/server/git-utils-Bkxzr1Xf.js +0 -129
- package/server/hume-BrA1tUuk.js +0 -3
- package/server/inspect-agent-CyXNo9fM.js +0 -2
- package/server/lifecycle-io-CUpsxG0p.js +0 -3
- package/server/merge-ops-BpTtuO8x.js +0 -2
- package/server/projects-IRHJIPYC.js +0 -3
- package/server/providers-BqCdTryq.js +0 -3
- package/server/public/assets/index-C6NLz_1S.css +0 -1
- package/server/public/assets/mermaid-GHXKKRXX-BNwFoQsf.js +0 -1
- package/server/rally-DGimSRBQ.js +0 -3
- package/server/reap-terminal-sessions-C1mfzoZo.js +0 -3
- package/server/record-update-RviRDSNs.js +0 -168
- package/server/record-us0YECMO.js +0 -3
- package/server/resume-OyN3dEXE.js +0 -3
- package/server/review-status-DXeqFpk5.js +0 -3
- package/server/settings-BaPXXJsT.js +0 -2
- package/server/specialists-C6WkeKFK.js +0 -3
- package/server/specs-BsNcum0h.js +0 -3
- package/server/state-migrate-_zJJ6XKE.js +0 -362
- package/server/supervisor-Qy1QecAs.js +0 -2
- package/server/tmux-HQLgwo_C.js +0 -3
- package/server/token-util-Cg-QnowA.js +0 -3
- package/server/workflows-C5c-RPsY.js +0 -2
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { n as init_tracker_utils } from "./tracker-utils-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import { n as
|
|
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-DvyMuOle.js";
|
|
2
|
+
import { b as setReviewStatusSync, c as getReviewStatusSync, l as init_review_status, p as markWorkspaceStuck } from "./review-status-A7quS5KJ.js";
|
|
3
|
+
import { X as messageAgent, ar as setAgentPaused, b as init_agents, ft as stopAgent } from "./queries-6d7Cdtm7.js";
|
|
4
|
+
import { n as init_tracker_utils } from "./tracker-utils-tnxxqROg.js";
|
|
5
|
+
import { i as readReviewStatusMap, n as init_review_status_source } from "./review-status-source-CxuEjLGg.js";
|
|
6
|
+
import { o as init_lifecycle, s as isXBriefFilename } from "./lifecycle-DfeyBDwA.js";
|
|
7
|
+
import { m as readWorkspacePlanSync, o as init_io, t as XBriefMergeConflictError, v as init_types, y as subItemsOf } from "./io-B3_AHDfr.js";
|
|
8
|
+
import { a as writeFeedbackFile, i as init_feedback_writer } from "./feedback-writer-C9b6ccN1.js";
|
|
9
|
+
import { n as resolveIssueFeedbackTarget, r as surfaceIssueFeedbackNeedsYou, t as init_feedback_target } from "./feedback-target-CPS15Vte.js";
|
|
10
|
+
import { n as init_shadow_utils } from "./shadow-utils-4bvjn9b3.js";
|
|
11
|
+
import { i as runQualityGates, n as init_validation, t as DEFAULT_GATES } from "./validation-B5JxoPUS.js";
|
|
12
|
+
import { r as writeVerificationArtifact, t as readVerificationArtifact } from "./verification-artifact-BcnIbigL.js";
|
|
13
|
+
import { n as getXBriefACStatusSync } from "./acceptance-criteria-DOA0KgXx.js";
|
|
12
14
|
import { join } from "node:path";
|
|
13
15
|
import { Data, Effect } from "effect";
|
|
14
16
|
import { existsSync } from "fs";
|
|
@@ -57,7 +59,18 @@ function isProcessAlive(pid) {
|
|
|
57
59
|
function readVerificationWorkerState(issueId) {
|
|
58
60
|
try {
|
|
59
61
|
const parsed = JSON.parse(readFileSync$1(statePath(issueId), "utf8"));
|
|
60
|
-
|
|
62
|
+
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
|
+
return {
|
|
64
|
+
...parsed,
|
|
65
|
+
runId: parsed.runId,
|
|
66
|
+
issueId,
|
|
67
|
+
workspacePath: parsed.workspacePath,
|
|
68
|
+
pid: parsed.pid,
|
|
69
|
+
startedAt: parsed.startedAt,
|
|
70
|
+
resultPath: parsed.resultPath,
|
|
71
|
+
phase: parsed.phase === "queued" ? "queued" : "running",
|
|
72
|
+
admittedAt: parsed.admittedAt === void 0 ? parsed.startedAt : parsed.admittedAt
|
|
73
|
+
};
|
|
61
74
|
} catch {
|
|
62
75
|
return null;
|
|
63
76
|
}
|
|
@@ -71,20 +84,36 @@ function writeJsonAtomic(path, value) {
|
|
|
71
84
|
writeFileSync$1(temp, `${JSON.stringify(value, null, 2)}\n`);
|
|
72
85
|
renameSync$1(temp, path);
|
|
73
86
|
}
|
|
87
|
+
function verificationWorkerDeadline(state) {
|
|
88
|
+
if (!state.admittedAt) return null;
|
|
89
|
+
const admittedAt = Date.parse(state.admittedAt);
|
|
90
|
+
return Number.isFinite(admittedAt) ? admittedAt + MAX_RUN_MS : null;
|
|
91
|
+
}
|
|
92
|
+
function markVerificationWorkerAdmissionPhase(issueId, update) {
|
|
93
|
+
const state = readVerificationWorkerState(issueId);
|
|
94
|
+
if (!state || state.pid !== process.pid) return;
|
|
95
|
+
writeJsonAtomic(statePath(issueId), {
|
|
96
|
+
...state,
|
|
97
|
+
phase: update.phase,
|
|
98
|
+
admittedAt: state.admittedAt ?? update.admittedAt ?? null,
|
|
99
|
+
currentGate: update.gateName,
|
|
100
|
+
currentAttempt: update.attempt
|
|
101
|
+
});
|
|
102
|
+
}
|
|
74
103
|
async function waitForResult(state) {
|
|
75
|
-
|
|
76
|
-
while (Date.now() < deadline) {
|
|
104
|
+
for (;;) {
|
|
77
105
|
if (existsSync$1(state.resultPath)) return JSON.parse(readFileSync$1(state.resultPath, "utf8"));
|
|
78
106
|
if (!isProcessAlive(state.pid)) return {
|
|
79
107
|
outcome: "error",
|
|
80
108
|
message: `Verification worker ${state.pid} exited before writing a result`
|
|
81
109
|
};
|
|
110
|
+
const deadline = verificationWorkerDeadline(readVerificationWorkerState(state.issueId) ?? state);
|
|
111
|
+
if (deadline !== null && Date.now() >= deadline) return {
|
|
112
|
+
outcome: "error",
|
|
113
|
+
message: `Verification worker ${state.pid} exceeded ${MAX_RUN_MS}ms after CPU admission`
|
|
114
|
+
};
|
|
82
115
|
await new Promise((resolve) => setTimeout(resolve, POLL_MS));
|
|
83
116
|
}
|
|
84
|
-
return {
|
|
85
|
-
outcome: "error",
|
|
86
|
-
message: `Verification worker ${state.pid} exceeded ${MAX_RUN_MS}ms`
|
|
87
|
-
};
|
|
88
117
|
}
|
|
89
118
|
async function runSupervisedVerification(issueId, workspacePath, workspaceInfo, logPrefix, options = {}) {
|
|
90
119
|
const existing = readVerificationWorkerState(issueId);
|
|
@@ -134,7 +163,9 @@ async function runSupervisedVerification(issueId, workspacePath, workspaceInfo,
|
|
|
134
163
|
workspacePath,
|
|
135
164
|
pid: child.pid,
|
|
136
165
|
startedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
137
|
-
resultPath
|
|
166
|
+
resultPath,
|
|
167
|
+
phase: "queued",
|
|
168
|
+
admittedAt: null
|
|
138
169
|
};
|
|
139
170
|
writeJsonAtomic(statePath(issueId), state);
|
|
140
171
|
child.unref();
|
|
@@ -145,6 +176,7 @@ async function runSupervisedVerification(issueId, workspacePath, workspaceInfo,
|
|
|
145
176
|
//#region ../../lib/work/test-requirement-gate.ts
|
|
146
177
|
init_projects();
|
|
147
178
|
init_state_plane();
|
|
179
|
+
init_lifecycle();
|
|
148
180
|
init_types();
|
|
149
181
|
init_io();
|
|
150
182
|
init_agents();
|
|
@@ -169,7 +201,7 @@ promisify(exec);
|
|
|
169
201
|
const terminal = new Set(["completed", "cancelled"]);
|
|
170
202
|
function checkIncompletePlanItemsSync(workspacePath) {
|
|
171
203
|
const doc = readWorkspacePlanSync(workspacePath);
|
|
172
|
-
if (!doc) return [" The required
|
|
204
|
+
if (!doc) return [" The required xBRIEF checklist is missing or unreadable; return the issue to planning before completion."];
|
|
173
205
|
const incomplete = doc.plan.items.flatMap((item) => {
|
|
174
206
|
const lines = [];
|
|
175
207
|
if (!terminal.has(item.status)) lines.push(` - ${item.id} ${item.title} (${item.status})`);
|
|
@@ -195,6 +227,19 @@ async function checkIncompletePlanItemsPromise(workspacePath, _issueId) {
|
|
|
195
227
|
init_io();
|
|
196
228
|
const execAsync = promisify$1(exec$1);
|
|
197
229
|
const NO_PROGRESS_REPEAT_THRESHOLD = 2;
|
|
230
|
+
const MERGED_VERIFICATION_REASON = "Merge already landed; verify-on-main owns post-merge validation.";
|
|
231
|
+
function skipMergedVerification(issueId, logPrefix, status = getReviewStatusSync(issueId)) {
|
|
232
|
+
if (status?.mergeStatus !== "merged") return null;
|
|
233
|
+
setReviewStatusSync(issueId, {
|
|
234
|
+
verificationStatus: "skipped",
|
|
235
|
+
verificationNotes: MERGED_VERIFICATION_REASON
|
|
236
|
+
});
|
|
237
|
+
console.log(`[${logPrefix}] Skipping pre-merge verification for ${issueId}: ${MERGED_VERIFICATION_REASON}`);
|
|
238
|
+
return {
|
|
239
|
+
outcome: "skipped",
|
|
240
|
+
reason: MERGED_VERIFICATION_REASON
|
|
241
|
+
};
|
|
242
|
+
}
|
|
198
243
|
function isFinalVerificationAttempt(cycleCount) {
|
|
199
244
|
return cycleCount >= 3;
|
|
200
245
|
}
|
|
@@ -221,6 +266,7 @@ function setStateDerivedVerificationFailure(issueId, failedCheck, summary, cycle
|
|
|
221
266
|
console.warn(`[verification-runner] ${issueId} review is passed but held by state-derived gate ${failedCheck}: ${summary}`);
|
|
222
267
|
}
|
|
223
268
|
async function escalateVerificationStuck(issueId, failedCheck, cycleCount, summary, logPrefix) {
|
|
269
|
+
if (skipMergedVerification(issueId, logPrefix)) return;
|
|
224
270
|
const agentId = `agent-${issueId.toLowerCase()}`;
|
|
225
271
|
const reason = `needs-you: verification stuck after ${cycleCount}/3 attempts (${failedCheck})`;
|
|
226
272
|
markWorkspaceStuck(issueId, "verification_stuck", {
|
|
@@ -286,7 +332,9 @@ function reconcileInterruptedVerifications(logPrefix = "boot-reconciliation") {
|
|
|
286
332
|
return reset;
|
|
287
333
|
}
|
|
288
334
|
async function deliverVerificationFeedback(issueId, message, details, logPrefix) {
|
|
335
|
+
if (skipMergedVerification(issueId, logPrefix)) return;
|
|
289
336
|
const target = await resolveIssueFeedbackTarget(issueId);
|
|
337
|
+
if (skipMergedVerification(issueId, logPrefix)) return;
|
|
290
338
|
if ("agentId" in target) {
|
|
291
339
|
await messageAgent(target.agentId, message, "internal", { owesRework: true });
|
|
292
340
|
console.log(`[${logPrefix}] Sent verification feedback for ${issueId} to ${target.agentId}`);
|
|
@@ -398,17 +446,19 @@ function getSyncTargetBranch(workspacePath, projectConfig, repoName) {
|
|
|
398
446
|
}
|
|
399
447
|
/**
|
|
400
448
|
* PAN-2179: detect a "plan-only" / zombie changeset — one whose only changes are
|
|
401
|
-
* pipeline artifacts (.pan/,
|
|
449
|
+
* pipeline artifacts (.pan/, task state, xBRIEF) with no actual implementation. A work
|
|
402
450
|
* agent that never received its kickoff produces exactly this. The verification
|
|
403
451
|
* gate uses it to bounce the branch back instead of letting an empty "completion"
|
|
404
452
|
* advance to review/merge. A legit non-code change (docs, rules under
|
|
405
453
|
* sync-sources/, config) counts as content and is NOT flagged.
|
|
406
454
|
*/
|
|
407
455
|
function changesetHasNoContent(changedFiles) {
|
|
408
|
-
return changedFiles.map((f) => f.trim()).filter(Boolean).filter((f) => !f.startsWith(".pan/") && !f
|
|
456
|
+
return changedFiles.map((f) => f.trim()).filter(Boolean).filter((f) => !f.startsWith(".pan/") && !isXBriefFilename(f)).length === 0;
|
|
409
457
|
}
|
|
410
458
|
async function runVerificationForIssuePromise(issueId, workspacePath, workspaceInfo, logPrefix, options = {}) {
|
|
411
459
|
const currentStatus = getReviewStatusSync(issueId);
|
|
460
|
+
const mergedOutcome = skipMergedVerification(issueId, logPrefix, currentStatus);
|
|
461
|
+
if (mergedOutcome) return mergedOutcome;
|
|
412
462
|
const currentCycles = currentStatus?.verificationCycleCount ?? 0;
|
|
413
463
|
if (currentCycles >= 3) {
|
|
414
464
|
const reason = `Circuit breaker: ${currentCycles}/3 cycles exceeded — skipping verification`;
|
|
@@ -434,6 +484,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
434
484
|
console.log(`[${logPrefix}] Syncing ${targetBranch} into ${displayName} for ${issueId}...`);
|
|
435
485
|
syncResults.push(await syncSingleRepo(gitDir, targetBranch));
|
|
436
486
|
}
|
|
487
|
+
const postSyncMergedOutcome = skipMergedVerification(issueId, logPrefix);
|
|
488
|
+
if (postSyncMergedOutcome) return postSyncMergedOutcome;
|
|
437
489
|
const failures = syncResults.filter((r) => !r.success);
|
|
438
490
|
if (failures.length > 0) {
|
|
439
491
|
const newCycleCount = currentCycles + 1;
|
|
@@ -481,6 +533,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
481
533
|
}
|
|
482
534
|
}
|
|
483
535
|
else console.log(`[${logPrefix}] Skipping target-branch sync for ${issueId}; verifying current workspace state`);
|
|
536
|
+
const postSyncMergedOutcome = skipMergedVerification(issueId, logPrefix);
|
|
537
|
+
if (postSyncMergedOutcome) return postSyncMergedOutcome;
|
|
484
538
|
const gates = projectConfig?.quality_gates && Object.keys(projectConfig.quality_gates).length > 0 ? projectConfig.quality_gates : DEFAULT_GATES;
|
|
485
539
|
console.log(`[${logPrefix}] Project: ${projectConfig?.name || "NOT FOUND"}, gates: [${Object.keys(gates).join(", ")}], workspace: ${workspacePath}`);
|
|
486
540
|
const featureFolder = basename$1(workspacePath);
|
|
@@ -544,10 +598,12 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
544
598
|
};
|
|
545
599
|
writeLiveArtifact();
|
|
546
600
|
const gateResults = await Effect.runPromise(runQualityGates(gates, workspacePath, "pre_push", {
|
|
601
|
+
issueId,
|
|
547
602
|
isRemote: workspaceInfo.isRemote,
|
|
548
603
|
vmName: workspaceInfo.vmName,
|
|
549
604
|
placeholders,
|
|
550
605
|
...options.onGateLog ? { onLog: options.onGateLog } : {},
|
|
606
|
+
onAdmissionPhase: (state) => markVerificationWorkerAdmissionPhase(issueId, state),
|
|
551
607
|
onGateStart: (name) => {
|
|
552
608
|
liveGateName = name;
|
|
553
609
|
liveGateTail = "";
|
|
@@ -568,6 +624,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
568
624
|
writeLiveArtifact();
|
|
569
625
|
}
|
|
570
626
|
}));
|
|
627
|
+
const postGateMergedOutcome = skipMergedVerification(issueId, logPrefix);
|
|
628
|
+
if (postGateMergedOutcome) return postGateMergedOutcome;
|
|
571
629
|
const failedGate = gateResults.find((r) => !r.passed && r.required !== false);
|
|
572
630
|
if (failedGate?.infraUnavailable) {
|
|
573
631
|
try {
|
|
@@ -579,7 +637,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
579
637
|
verificationNotes: `Verification deferred: ${failedGate.error}. Workspace stack rebuild triggered; verification re-runs on the next cycle.`
|
|
580
638
|
});
|
|
581
639
|
try {
|
|
582
|
-
const { rebuildWorkspaceStack } = await import("./rebuild-stack-
|
|
640
|
+
const { rebuildWorkspaceStack } = await import("./rebuild-stack-kA7XngID.js");
|
|
583
641
|
Effect.runPromise(rebuildWorkspaceStack(issueId, { onProgress: (m) => console.log(`[${logPrefix}] ${issueId} stack rebuild: ${m}`) })).then((r) => {
|
|
584
642
|
if (!r.success) console.warn(`[${logPrefix}] Stack rebuild for ${issueId} failed: ${r.error}`);
|
|
585
643
|
});
|
|
@@ -639,30 +697,30 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
639
697
|
}
|
|
640
698
|
let acStatus;
|
|
641
699
|
try {
|
|
642
|
-
acStatus =
|
|
643
|
-
} catch (
|
|
644
|
-
if (
|
|
700
|
+
acStatus = getXBriefACStatusSync(workspacePath);
|
|
701
|
+
} catch (xbriefErr) {
|
|
702
|
+
if (xbriefErr instanceof XBriefMergeConflictError) {
|
|
645
703
|
const newCycleCount = currentCycles + 1;
|
|
646
704
|
const failedCheck = "vbrief-conflicts";
|
|
647
|
-
const summary = `
|
|
705
|
+
const summary = `xBRIEF spec has unresolved git merge conflict markers. Resolve all conflict markers in the spec file and commit before resubmitting.`;
|
|
648
706
|
setStateDerivedVerificationFailure(issueId, failedCheck, summary, newCycleCount, currentStatus);
|
|
649
707
|
if (shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount)) await escalateVerificationStuck(issueId, failedCheck, newCycleCount, summary, logPrefix);
|
|
650
|
-
const feedbackBody = shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId} (attempt ${newCycleCount}/3):\n\nFailed check: ${failedCheck}\n\n${summary}\n\n${buildFinalFailureInstructions(issueId)}` : `VERIFICATION FAILED for ${issueId} (attempt ${newCycleCount}/3):\n\nFailed check: ${failedCheck}\n\n${summary}\n\n## REQUIRED: Fix merge conflicts in
|
|
708
|
+
const feedbackBody = shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId} (attempt ${newCycleCount}/3):\n\nFailed check: ${failedCheck}\n\n${summary}\n\n${buildFinalFailureInstructions(issueId)}` : `VERIFICATION FAILED for ${issueId} (attempt ${newCycleCount}/3):\n\nFailed check: ${failedCheck}\n\n${summary}\n\n## REQUIRED: Fix merge conflicts in xBRIEF spec BEFORE resubmitting\n\n1. Open the xBRIEF spec (on main in .pan/specs/)\n2. Find and resolve all <<<<<<< HEAD / ======= / >>>>>>> conflict markers\n3. Ensure the file is valid JSON (only keep ONE version of each conflicted block)\n4. Commit the fixed file on main\n5. ONLY THEN resubmit: pan review request ${issueId} -m "Resolved spec merge conflict"\n\nDo NOT resubmit until the spec parses cleanly.`;
|
|
651
709
|
try {
|
|
652
710
|
const fileResult = await Effect.runPromise(writeFeedbackFile({
|
|
653
711
|
issueId,
|
|
654
712
|
workspacePath,
|
|
655
713
|
specialist: "verification-gate",
|
|
656
714
|
outcome: "failed",
|
|
657
|
-
summary: `
|
|
715
|
+
summary: `xBRIEF plan has merge conflicts (attempt ${newCycleCount}/3)`,
|
|
658
716
|
markdownBody: feedbackBody
|
|
659
717
|
}));
|
|
660
|
-
if (fileResult.success) await deliverVerificationFeedback(issueId, shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId}.\nFailed check: ${failedCheck} after repeated attempts.\n\nMUST READ: ${fileResult.filePath}\n\nFix every reported failure, commit and push the corrections, then run pan done ${issueId} -c "<summary>" to reset verification and return the latest commit to the normal pipeline.` : `VERIFICATION FAILED for ${issueId}.\nFailed check: ${failedCheck} —
|
|
718
|
+
if (fileResult.success) await deliverVerificationFeedback(issueId, shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount) ? `VERIFICATION STUCK for ${issueId}.\nFailed check: ${failedCheck} after repeated attempts.\n\nMUST READ: ${fileResult.filePath}\n\nFix every reported failure, commit and push the corrections, then run pan done ${issueId} -c "<summary>" to reset verification and return the latest commit to the normal pipeline.` : `VERIFICATION FAILED for ${issueId}.\nFailed check: ${failedCheck} — the xBRIEF document has merge conflict markers.\n\nMUST READ: ${fileResult.filePath}\n\nUse your Read tool to open this file, read every line, resolve the merge conflict markers, commit and push the fix, then request a new review with pan review request. Do NOT stop at the prompt — keep working until pan review request completes successfully.`, {
|
|
661
719
|
failedCheck,
|
|
662
720
|
feedbackPath: fileResult.filePath
|
|
663
721
|
}, logPrefix);
|
|
664
722
|
} catch (feedbackErr) {
|
|
665
|
-
console.error(`[${logPrefix}] Failed to write
|
|
723
|
+
console.error(`[${logPrefix}] Failed to write xBRIEF conflict feedback for ${issueId}:`, feedbackErr);
|
|
666
724
|
}
|
|
667
725
|
return {
|
|
668
726
|
outcome: "failed",
|
|
@@ -671,7 +729,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
671
729
|
maxCycles: 3
|
|
672
730
|
};
|
|
673
731
|
}
|
|
674
|
-
throw
|
|
732
|
+
throw xbriefErr;
|
|
675
733
|
}
|
|
676
734
|
if (acStatus && !acStatus.allCompleted) {
|
|
677
735
|
const newCycleCount = currentCycles + 1;
|
|
@@ -707,7 +765,9 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
707
765
|
maxCycles: 3
|
|
708
766
|
};
|
|
709
767
|
}
|
|
710
|
-
const taskBlockers = await checkIncompletePlanItemsPromise(workspacePath, issueId);
|
|
768
|
+
const taskBlockers = options.skipPlanChecklist ? [] : await checkIncompletePlanItemsPromise(workspacePath, issueId);
|
|
769
|
+
const postChecklistMergedOutcome = skipMergedVerification(issueId, logPrefix);
|
|
770
|
+
if (postChecklistMergedOutcome) return postChecklistMergedOutcome;
|
|
711
771
|
if (taskBlockers.length > 0) {
|
|
712
772
|
const newCycleCount = currentCycles + 1;
|
|
713
773
|
const failedCheck = "incomplete-plan-items";
|
|
@@ -745,10 +805,12 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
745
805
|
encoding: "utf-8",
|
|
746
806
|
timeout: 15e3
|
|
747
807
|
});
|
|
808
|
+
const postDiffMergedOutcome = skipMergedVerification(issueId, logPrefix);
|
|
809
|
+
if (postDiffMergedOutcome) return postDiffMergedOutcome;
|
|
748
810
|
if (changesetHasNoContent(changedOut.split("\n"))) {
|
|
749
811
|
const newCycleCount = currentCycles + 1;
|
|
750
812
|
const failedCheck = "empty-changeset";
|
|
751
|
-
const summary = `Branch has no implementation — only pipeline artifacts (.pan/
|
|
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).`;
|
|
752
814
|
setReviewStatusSync(issueId, {
|
|
753
815
|
reviewStatus: "pending",
|
|
754
816
|
verificationStatus: "failed",
|
|
@@ -758,7 +820,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
758
820
|
});
|
|
759
821
|
if (shouldEscalateVerificationFailure(currentStatus, failedCheck, newCycleCount)) await escalateVerificationStuck(issueId, failedCheck, newCycleCount, summary, logPrefix);
|
|
760
822
|
try {
|
|
761
|
-
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/
|
|
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.`, {
|
|
762
824
|
failedCheck,
|
|
763
825
|
changedBase
|
|
764
826
|
}, logPrefix);
|
|
@@ -785,6 +847,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
785
847
|
});
|
|
786
848
|
lastVerifiedCommit = stdout.trim();
|
|
787
849
|
} catch {}
|
|
850
|
+
const prePassMergedOutcome = skipMergedVerification(issueId, logPrefix);
|
|
851
|
+
if (prePassMergedOutcome) return prePassMergedOutcome;
|
|
788
852
|
setReviewStatusSync(issueId, {
|
|
789
853
|
verificationStatus: "passed",
|
|
790
854
|
verificationNotes: void 0,
|
|
@@ -796,7 +860,7 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
796
860
|
const repo = findProjectByPathSync(workspacePath)?.github_repo;
|
|
797
861
|
if (!repo || !repo.includes("/")) return;
|
|
798
862
|
const [owner, name] = repo.split("/");
|
|
799
|
-
const { postOverdeckTestsStatus } = await import("./github-app-
|
|
863
|
+
const { postOverdeckTestsStatus } = await import("./github-app-CPfoFAdV.js");
|
|
800
864
|
await postOverdeckTestsStatus(workspacePath, owner, name, "success", "Verification gate passed");
|
|
801
865
|
} catch (err) {
|
|
802
866
|
console.warn(`[${logPrefix}] Failed to post overdeck/tests status: ${err.message}`);
|
|
@@ -804,6 +868,8 @@ async function runVerificationForIssuePromise(issueId, workspacePath, workspaceI
|
|
|
804
868
|
})();
|
|
805
869
|
return { outcome: "passed" };
|
|
806
870
|
} catch (verifyErr) {
|
|
871
|
+
const errorMergedOutcome = skipMergedVerification(issueId, logPrefix);
|
|
872
|
+
if (errorMergedOutcome) return errorMergedOutcome;
|
|
807
873
|
setReviewStatusSync(issueId, {
|
|
808
874
|
reviewStatus: "pending",
|
|
809
875
|
verificationStatus: "failed",
|
|
@@ -832,4 +898,4 @@ function runVerificationForIssueInProcess(issueId, workspacePath, workspaceInfo,
|
|
|
832
898
|
//#endregion
|
|
833
899
|
export { runVerificationForIssueInProcess as i, reconcileInterruptedVerifications as n, runVerificationForIssue as r, changesetHasNoContent as t };
|
|
834
900
|
|
|
835
|
-
//# sourceMappingURL=verification-runner-
|
|
901
|
+
//# sourceMappingURL=verification-runner-Br0S_Ous.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-Br0S_Ous.js";
|
|
2
2
|
export { reconcileInterruptedVerifications, runVerificationForIssue };
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
|
|
2
|
-
import {
|
|
3
|
-
import { 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
|
|
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-DvyMuOle.js";
|
|
3
|
+
import { F as getReadableWorkspacePanPaths, d as readPlanSync, i as findPlanSync, o as init_io, p as readWorkspacePlan } from "./io-B3_AHDfr.js";
|
|
4
|
+
import { f as init_config, m as loadConfigSync } from "./config-CCvjQf27.js";
|
|
5
|
+
import { i as NotImplementedError, o as init_interface } from "./rally-api-nY0ZANw3.js";
|
|
6
|
+
import { n as createTrackerFromConfig, r as init_factory } from "./factory-CynerjXO.js";
|
|
7
|
+
import { i as createActiveSlice, l as init_dag, o as getDispatchableItems } from "./dag-CdOjJVDT.js";
|
|
8
|
+
import { l as readFeedback, n as readWorkspaceContext, r as writeWorkspaceContext, t as init_pan_dir } from "./pan-dir-DeVUgwA7.js";
|
|
9
|
+
import { n as renderPrompt, t as init_prompts } from "./prompts-Dp4Tpk39.js";
|
|
10
10
|
import { Effect } from "effect";
|
|
11
11
|
import { existsSync, readdirSync, statSync } from "fs";
|
|
12
12
|
import { dirname, join } from "path";
|
|
@@ -67,7 +67,7 @@ async function buildActiveSliceContext(workspacePath, issueId) {
|
|
|
67
67
|
const normalizedIssueId = (issueId ?? "").toUpperCase();
|
|
68
68
|
const currentItemIds = doc.plan.items.filter((item) => item.status === "running" || item.id === nextItem.id).map((item) => item.id);
|
|
69
69
|
return [
|
|
70
|
-
"## Active
|
|
70
|
+
"## Active xBRIEF Slice (Canonical Task Graph)",
|
|
71
71
|
"",
|
|
72
72
|
createActiveSlice(doc, {
|
|
73
73
|
issueId: normalizedIssueId,
|
|
@@ -76,7 +76,7 @@ async function buildActiveSliceContext(workspacePath, issueId) {
|
|
|
76
76
|
synthesisOutputs: void 0
|
|
77
77
|
}).prompt,
|
|
78
78
|
"",
|
|
79
|
-
"_The merged
|
|
79
|
+
"_The merged xBRIEF is the canonical task authority._"
|
|
80
80
|
].join("\n");
|
|
81
81
|
} catch {
|
|
82
82
|
return "";
|
|
@@ -143,7 +143,7 @@ async function readPendingFeedback(workspacePath) {
|
|
|
143
143
|
* Fetch tracker context (new comments + issue status) since continue file was last modified.
|
|
144
144
|
* Returns a formatted markdown string for injection into the work agent prompt.
|
|
145
145
|
*/
|
|
146
|
-
async function getTrackerContext(issueId, workspacePath) {
|
|
146
|
+
async function getTrackerContext(issueId, workspacePath, signal) {
|
|
147
147
|
let stateMtime = null;
|
|
148
148
|
try {
|
|
149
149
|
const workspaceContinuePath = getReadableWorkspacePanPaths(workspacePath).continuePath;
|
|
@@ -161,7 +161,7 @@ async function getTrackerContext(issueId, workspacePath) {
|
|
|
161
161
|
if (trackersConfig.secondary) trackerTypes.push(trackersConfig.secondary);
|
|
162
162
|
for (const trackerType of trackerTypes) try {
|
|
163
163
|
const tracker = createTrackerFromConfig(trackersConfig, trackerType);
|
|
164
|
-
const [issue, allComments] = await Promise.all([Effect.runPromise(tracker.getIssue(issueId)), Effect.runPromise(tracker.getComments(issueId)).catch((err) => {
|
|
164
|
+
const [issue, allComments] = await Promise.all([Effect.runPromise(tracker.getIssue(issueId), { signal }), Effect.runPromise(tracker.getComments(issueId), { signal }).catch((err) => {
|
|
165
165
|
if (err instanceof NotImplementedError) return [];
|
|
166
166
|
throw err;
|
|
167
167
|
})]);
|
|
@@ -211,6 +211,7 @@ async function getTrackerContext(issueId, workspacePath) {
|
|
|
211
211
|
if (!isReopened && newComments.length === 0) return "";
|
|
212
212
|
return result;
|
|
213
213
|
} catch (err) {
|
|
214
|
+
if (signal?.aborted) return "";
|
|
214
215
|
const message = err instanceof Error ? err.message : String(err);
|
|
215
216
|
if (message.toLowerCase().includes("not found") || message.toLowerCase().includes("404") || message.toLowerCase().includes("no configuration")) continue;
|
|
216
217
|
return `_Tracker unavailable: ${message}. Check tracker status and review any new comments manually._`;
|
|
@@ -294,9 +295,9 @@ async function writeStoryFeatureContext(workspacePath, issueId) {
|
|
|
294
295
|
const subItems = item.subItems?.map((s) => ` - ${s.title} (${s.status})`).join("\n") || "";
|
|
295
296
|
return `- **${item.id}**: ${item.title} (${item.status})${item.narrative?.Action ? `\n - Action: ${item.narrative.Action}` : ""}${subItems ? `\n${subItems}` : ""}`;
|
|
296
297
|
}).join("\n");
|
|
297
|
-
contextContent = `# Feature Context for ${issueId}\n\n**Parent Feature:** ${parentTitle} (${issue.parentRef})\n\n## Plan Narratives\n${narrativeSection || "_No narratives found._"}\n\n## Cross-Story Dependencies\n${edgesSection || "_No dependency edges found._"}\n\n## Related Plan Items\n${itemsSection || "_No plan items found for this story._"}\n\n---\n*Synthesized from parent feature workspace
|
|
298
|
+
contextContent = `# Feature Context for ${issueId}\n\n**Parent Feature:** ${parentTitle} (${issue.parentRef})\n\n## Plan Narratives\n${narrativeSection || "_No narratives found._"}\n\n## Cross-Story Dependencies\n${edgesSection || "_No dependency edges found._"}\n\n## Related Plan Items\n${itemsSection || "_No plan items found for this story._"}\n\n---\n*Synthesized from parent feature workspace xBRIEF*\n`;
|
|
298
299
|
} catch (planErr) {
|
|
299
|
-
console.warn(`[writeStoryFeatureContext] Could not read parent workspace
|
|
300
|
+
console.warn(`[writeStoryFeatureContext] Could not read parent workspace xBRIEF: ${planErr instanceof Error ? planErr.message : String(planErr)}`);
|
|
300
301
|
}
|
|
301
302
|
const parentPanContext = await Effect.runPromise(readWorkspaceContext(parentWorkspace));
|
|
302
303
|
if (parentPanContext && !contextContent) contextContent = parentPanContext;
|
|
@@ -435,4 +436,4 @@ __esmMin((() => {
|
|
|
435
436
|
}))();
|
|
436
437
|
export { buildPolyrepoContext, buildWorkAgentPrompt, extractStitchDesigns, getTrackerContext, readFeatureContext, readPlanningContext, writeStoryFeatureContext };
|
|
437
438
|
|
|
438
|
-
//# sourceMappingURL=work-agent-prompt-
|
|
439
|
+
//# sourceMappingURL=work-agent-prompt-Yb2bd3Fq.js.map
|