agentic-qe 3.15.4 → 3.15.6
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/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
- package/.claude/skills/qe-court/evals/qe-court.yaml +3 -2
- package/.claude/skills/qe-quality-assessment/schemas/output.json +12 -2
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +191 -0
- package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
- package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
- package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/bridge/captured-experience-bridge.js +7 -9
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-PP3XIXDV.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-MHJBRXMK.js → agent-booster-wasm-SY7UCLBL.js} +2 -2
- package/dist/cli/chunks/{agent-handler-G64SD7J2.js → agent-handler-KAMYBU3S.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-G4UXFPKH.js → agent-memory-branch-2CAW3KUM.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +2 -0
- package/dist/cli/chunks/{arena-63M3M6EW.js → arena-4OFLJ3R2.js} +2 -2
- package/dist/cli/chunks/{arena-QJMKYPHS.js → arena-QCCVIOAH.js} +4 -4
- package/dist/cli/chunks/{audit-UDFVTWSX.js → audit-RBDQJQJB.js} +3 -3
- package/dist/cli/chunks/base-QSYWWPCE.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-JLX2G56I.js → better-sqlite3-5JRACCDQ.js} +2 -2
- package/dist/cli/chunks/{brain-handler-PWF32LLW.js → brain-handler-W4QIIRT4.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-PB7QWXDP.js → branch-enumerator-IBNGI572.js} +2 -2
- package/dist/cli/chunks/{browser-CYNV2F3U.js → browser-GMSCVAOI.js} +2 -2
- package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +2 -0
- package/dist/cli/chunks/{chunk-S5D3HCGN.js → chunk-22OZIJAD.js} +2 -2
- package/dist/cli/chunks/{chunk-NBMQOP2R.js → chunk-24ZSGYC6.js} +1 -1
- package/dist/cli/chunks/{chunk-HFSBONCS.js → chunk-2CIDFR2H.js} +3 -3
- package/dist/cli/chunks/{chunk-A4OPQJ4A.js → chunk-2IWPJUVV.js} +5 -5
- package/dist/cli/chunks/{chunk-RI4JPBZD.js → chunk-2ZTWPMTK.js} +2 -2
- package/dist/cli/chunks/{chunk-ZURYZEHX.js → chunk-34MDMFET.js} +2 -2
- package/dist/cli/chunks/chunk-3DJNKNBR.js +742 -0
- package/dist/cli/chunks/{chunk-GJVRQBLI.js → chunk-3NJ7O3OH.js} +2 -2
- package/dist/cli/chunks/chunk-45MVRQG4.js +2 -0
- package/dist/cli/chunks/chunk-46HBVDMU.js +2 -0
- package/dist/cli/chunks/{chunk-SCL2OYN7.js → chunk-47Q7JL3V.js} +2 -2
- package/dist/cli/chunks/chunk-4CLDYT36.js +2 -0
- package/dist/cli/chunks/{chunk-3ZIVBTX6.js → chunk-4KOVHQXK.js} +2 -2
- package/dist/cli/chunks/{chunk-BBKLVHDQ.js → chunk-4POOJYXA.js} +1 -1
- package/dist/cli/chunks/{chunk-DAYMT7TH.js → chunk-5DH5QI7G.js} +26 -26
- package/dist/cli/chunks/{chunk-2534PXIV.js → chunk-5GIJU2ZY.js} +2 -2
- package/dist/cli/chunks/{chunk-MBV57LKC.js → chunk-5HAPS6VD.js} +2 -2
- package/dist/cli/chunks/{chunk-NIJMLEAX.js → chunk-5LST62QR.js} +2 -2
- package/dist/cli/chunks/{chunk-33IUCP34.js → chunk-5MT7DMD7.js} +2 -2
- package/dist/cli/chunks/{chunk-LRTF5RMG.js → chunk-5NC7QEJ6.js} +4 -4
- package/dist/cli/chunks/{chunk-SJB4KMZS.js → chunk-5UPIL62W.js} +3 -3
- package/dist/cli/chunks/{chunk-76PRW2KY.js → chunk-5VUIXDY2.js} +2 -2
- package/dist/cli/chunks/chunk-5VZVMO7B.js +3 -0
- package/dist/cli/chunks/{chunk-J3RNVHDH.js → chunk-624QRKQX.js} +1 -1
- package/dist/cli/chunks/{chunk-N6CRIUTO.js → chunk-66NW3ZB4.js} +2 -2
- package/dist/cli/chunks/{chunk-PCWZCXBD.js → chunk-6HWARQWV.js} +2 -2
- package/dist/cli/chunks/{chunk-VAXQUD5G.js → chunk-6MXAJBEA.js} +1 -1
- package/dist/cli/chunks/{chunk-LOLAEDZD.js → chunk-6R3FBFCJ.js} +2 -2
- package/dist/cli/chunks/{chunk-ASKPTGUU.js → chunk-6RDVY26I.js} +2 -2
- package/dist/cli/chunks/{chunk-35A22AUL.js → chunk-6T6AHVLF.js} +1 -1
- package/dist/cli/chunks/{chunk-IKWAPHJA.js → chunk-6WOZUSSN.js} +2 -2
- package/dist/cli/chunks/chunk-72MQCZSM.js +2 -0
- package/dist/cli/chunks/chunk-7QVPMH25.js +3 -0
- package/dist/cli/chunks/{chunk-5H7MR6HP.js → chunk-7SAMMQVS.js} +1 -1
- package/dist/cli/chunks/{chunk-B7J3O2WM.js → chunk-7TJZDRDU.js} +1 -1
- package/dist/cli/chunks/{chunk-OFQDM73J.js → chunk-7TVIX4WL.js} +2 -2
- package/dist/cli/chunks/{chunk-SZWXUG36.js → chunk-7VTKR44N.js} +2 -2
- package/dist/cli/chunks/{chunk-5B5D5KCV.js → chunk-7XTANLTN.js} +1 -1
- package/dist/cli/chunks/chunk-7XUB7U6Z.js +4 -0
- package/dist/cli/chunks/{chunk-GAXTPQCZ.js → chunk-A74J23QB.js} +2 -2
- package/dist/cli/chunks/{chunk-K2VUYRMG.js → chunk-A7ANPS4E.js} +2 -2
- package/dist/cli/chunks/{chunk-WO4NSPLX.js → chunk-AJT3XDRD.js} +2 -2
- package/dist/cli/chunks/{chunk-LPSE6DOQ.js → chunk-ALCIUWFC.js} +1 -1
- package/dist/cli/chunks/{chunk-UK5HY6LC.js → chunk-AUN4FG7V.js} +1 -1
- package/dist/cli/chunks/{chunk-MGH4XIHH.js → chunk-AUOSHM63.js} +2 -2
- package/dist/cli/chunks/{chunk-HX5KQK7I.js → chunk-AX26QJ6T.js} +2 -2
- package/dist/cli/chunks/{chunk-BZWZTGMF.js → chunk-B7RHBKHL.js} +2 -2
- package/dist/cli/chunks/{chunk-I5A3HGO6.js → chunk-BAYGQRNP.js} +2 -2
- package/dist/cli/chunks/{chunk-3C2BFLYC.js → chunk-BIXRTOH3.js} +18 -18
- package/dist/cli/chunks/{chunk-EWUFVWRT.js → chunk-BO7UFNYV.js} +2 -2
- package/dist/cli/chunks/{chunk-6TMUZGM2.js → chunk-BUTGIVKW.js} +1 -1
- package/dist/cli/chunks/{chunk-2MU4WCMQ.js → chunk-BXATKI5S.js} +2 -2
- package/dist/cli/chunks/{chunk-HEDLZWPM.js → chunk-CCL436IU.js} +44 -33
- package/dist/cli/chunks/{chunk-6EHVPFHW.js → chunk-CEXNW5TR.js} +1 -1
- package/dist/cli/chunks/{chunk-2ICC4H6K.js → chunk-CLAMMGY3.js} +2 -2
- package/dist/cli/chunks/{chunk-BPGFCUDO.js → chunk-CR66HNAE.js} +1 -1
- package/dist/cli/chunks/{chunk-CFXFGQEN.js → chunk-CZBIREL5.js} +2 -2
- package/dist/cli/chunks/{chunk-Z56QTRRB.js → chunk-D5N2O5EH.js} +2 -2
- package/dist/cli/chunks/{chunk-M6SJALLA.js → chunk-DA7DGDTI.js} +2 -2
- package/dist/cli/chunks/{chunk-R47LNH5W.js → chunk-DLSFT6PO.js} +2 -2
- package/dist/cli/chunks/{chunk-6HTO4BLV.js → chunk-DQNUPEY5.js} +2 -2
- package/dist/cli/chunks/{chunk-XZ5Z56OP.js → chunk-EECF4CMA.js} +1 -1
- package/dist/cli/chunks/{chunk-DFJGXXCL.js → chunk-EF5UHDCG.js} +1 -1
- package/dist/cli/chunks/{chunk-PJAXWCFC.js → chunk-EJ4KZFZN.js} +1 -1
- package/dist/cli/chunks/{chunk-RA3MI5WK.js → chunk-ELI4GDQO.js} +2 -2
- package/dist/cli/chunks/{chunk-BND6M2JX.js → chunk-F3KS3TAB.js} +2 -2
- package/dist/cli/chunks/{chunk-RB2SL5GD.js → chunk-F7A2UBZO.js} +2 -2
- package/dist/cli/chunks/{chunk-X5S5UEM6.js → chunk-FOJRPEIP.js} +2 -2
- package/dist/cli/chunks/{chunk-ZP6ANUP7.js → chunk-FQ5N666N.js} +1 -1
- package/dist/cli/chunks/{chunk-LZSLJJII.js → chunk-FU7LNUD7.js} +2 -2
- package/dist/cli/chunks/{chunk-FDK2GF4G.js → chunk-GFB6BZWU.js} +2 -2
- package/dist/cli/chunks/{chunk-C5EN5WB6.js → chunk-GI5HWS4H.js} +1 -1
- package/dist/cli/chunks/{chunk-SIUUAKCE.js → chunk-GNYOHZVV.js} +1 -1
- package/dist/cli/chunks/{chunk-OOK6GPJR.js → chunk-GVRFSXY6.js} +2 -2
- package/dist/cli/chunks/{chunk-6QPW4OVH.js → chunk-GWM4M5NF.js} +1 -1
- package/dist/cli/chunks/{chunk-PMXWDTDK.js → chunk-HAN4MS5T.js} +2 -2
- package/dist/cli/chunks/{chunk-WW6WUMS7.js → chunk-HEGGV2PT.js} +2 -2
- package/dist/cli/chunks/{chunk-4GLR2S2M.js → chunk-HOEWMEF2.js} +2 -2
- package/dist/cli/chunks/{chunk-BY3IL56R.js → chunk-HZFK2Z2Z.js} +1 -1
- package/dist/cli/chunks/chunk-I7WAW7TM.js +2 -0
- package/dist/cli/chunks/{chunk-LXYTC62V.js → chunk-IEPWO4XP.js} +2 -2
- package/dist/cli/chunks/{chunk-3MSBVOYW.js → chunk-ITIJ23K2.js} +2 -2
- package/dist/cli/chunks/{chunk-PEA4DVXW.js → chunk-IVJIHZSM.js} +1 -1
- package/dist/cli/chunks/{chunk-P7GM3EE7.js → chunk-JAPBSSFY.js} +1 -1
- package/dist/cli/chunks/{chunk-SOSJFEFB.js → chunk-JCE76MPP.js} +2 -2
- package/dist/cli/chunks/{chunk-YZ2AGC7O.js → chunk-JPJEAK4G.js} +1 -1
- package/dist/cli/chunks/{chunk-RG67RZIX.js → chunk-JYKQVYX2.js} +2 -2
- package/dist/cli/chunks/{chunk-W6TJXK5Y.js → chunk-K55EAWZ5.js} +2 -2
- package/dist/cli/chunks/chunk-KCB6P463.js +3 -0
- package/dist/cli/chunks/{chunk-W3PPYNHF.js → chunk-KIDOBLUO.js} +2 -2
- package/dist/cli/chunks/{chunk-JL3TI43V.js → chunk-KYVIOC3C.js} +2 -2
- package/dist/cli/chunks/{chunk-WEDVLKRB.js → chunk-L2TDHJR3.js} +2 -2
- package/dist/cli/chunks/{chunk-5GWTJJEO.js → chunk-L4D3TPFP.js} +1 -1
- package/dist/cli/chunks/{chunk-PB2WSCBW.js → chunk-LAY7NCQK.js} +3 -3
- package/dist/cli/chunks/{chunk-T3BMCEQR.js → chunk-LCCTJ2PC.js} +2 -2
- package/dist/cli/chunks/{chunk-7INP6HZH.js → chunk-LJCEDTUM.js} +3 -3
- package/dist/cli/chunks/{chunk-DEJM2P5K.js → chunk-LMAEMVPA.js} +1 -1
- package/dist/cli/chunks/{chunk-HCDTLV5J.js → chunk-LZWJ5BMP.js} +2 -2
- package/dist/cli/chunks/{chunk-D7RVZ5C2.js → chunk-MP3FSUNB.js} +2 -2
- package/dist/cli/chunks/{chunk-ADF6LGHZ.js → chunk-MQCTLTGE.js} +2 -2
- package/dist/cli/chunks/{chunk-OHH6BUZK.js → chunk-MQTA6KIO.js} +1 -1
- package/dist/cli/chunks/{chunk-ISASRHZP.js → chunk-NBUXM5X6.js} +10 -6
- package/dist/cli/chunks/{chunk-KOLHZSEC.js → chunk-NHRF3V4B.js} +2 -2
- package/dist/cli/chunks/chunk-NMY4KTWA.js +16 -0
- package/dist/cli/chunks/chunk-NYS2GUNO.js +2 -0
- package/dist/cli/chunks/{chunk-EGHK6NMH.js → chunk-ONPPBLRB.js} +2 -2
- package/dist/cli/chunks/{chunk-YQ6BK7QC.js → chunk-OPDZBRIL.js} +2 -2
- package/dist/cli/chunks/{chunk-DPL4ZXTE.js → chunk-OQ4S6B7P.js} +1 -1
- package/dist/cli/chunks/{chunk-6HO3XRXE.js → chunk-ORBODZSO.js} +2 -2
- package/dist/cli/chunks/{chunk-GLKLEHK3.js → chunk-ORFL3YXB.js} +2 -2
- package/dist/cli/chunks/{chunk-I43QRLLB.js → chunk-P7DXVL2S.js} +2 -2
- package/dist/cli/chunks/chunk-PEMSXSP2.js +4 -0
- package/dist/cli/chunks/chunk-PS6WFCA4.js +6 -0
- package/dist/cli/chunks/{chunk-HEKCN5XQ.js → chunk-Q2RBOC7V.js} +2 -2
- package/dist/cli/chunks/{chunk-54XTJBHV.js → chunk-QLKUCMZC.js} +1 -1
- package/dist/cli/chunks/{chunk-3BDDOFYW.js → chunk-QLYO3H7E.js} +9 -9
- package/dist/cli/chunks/{chunk-VMSO6DMF.js → chunk-QS5KZYUZ.js} +2 -2
- package/dist/cli/chunks/{chunk-JFQDWAU3.js → chunk-R363XXGH.js} +2 -2
- package/dist/cli/chunks/chunk-RD5BYLN7.js +2 -0
- package/dist/cli/chunks/{chunk-73PCVMGA.js → chunk-RFDFET3O.js} +2 -2
- package/dist/cli/chunks/{chunk-LJRZAALA.js → chunk-RHIQ6QO5.js} +357 -351
- package/dist/cli/chunks/chunk-RLB7K7QP.js +2 -0
- package/dist/cli/chunks/{chunk-RJ5CZ7B6.js → chunk-RUTO67PT.js} +2 -2
- package/dist/cli/chunks/{chunk-DF4Y3HPO.js → chunk-RV6HSMKJ.js} +1 -1
- package/dist/cli/chunks/{chunk-54ITMOFM.js → chunk-SOSJWM3E.js} +4 -4
- package/dist/cli/chunks/{chunk-5SS2Z7JC.js → chunk-SV5BUYHH.js} +2 -2
- package/dist/cli/chunks/{chunk-XHCCH7UC.js → chunk-TL5GV3PR.js} +8 -8
- package/dist/cli/chunks/{chunk-ZKXZTIVF.js → chunk-TLUIO37P.js} +2 -2
- package/dist/cli/chunks/{chunk-2LL35V3A.js → chunk-TUDENMAE.js} +2 -2
- package/dist/cli/chunks/chunk-TVLOED6O.js +2 -0
- package/dist/cli/chunks/{chunk-2DRMTRBM.js → chunk-UB6DQGWM.js} +2 -2
- package/dist/cli/chunks/chunk-UHHMAKPE.js +3 -0
- package/dist/cli/chunks/{chunk-DBIK4OFX.js → chunk-ULCHPPW2.js} +1 -1
- package/dist/cli/chunks/chunk-V3OLS2NG.js +2 -0
- package/dist/cli/chunks/{chunk-I6E4X3L3.js → chunk-VAYZ5QIE.js} +1 -1
- package/dist/cli/chunks/{chunk-G3ZUB3HD.js → chunk-VCONCVSY.js} +3 -3
- package/dist/cli/chunks/{chunk-7X2IVMXN.js → chunk-VVF337SV.js} +2 -2
- package/dist/cli/chunks/{chunk-EY5IUF7U.js → chunk-WKDWRRDT.js} +2 -2
- package/dist/cli/chunks/{chunk-FRBCX46J.js → chunk-X2DR27AY.js} +2 -2
- package/dist/cli/chunks/{chunk-I53365HG.js → chunk-X33F7NXH.js} +3 -3
- package/dist/cli/chunks/{chunk-MVTUFPM2.js → chunk-XBEI2JBA.js} +2 -2
- package/dist/cli/chunks/{chunk-OG4KHX7S.js → chunk-XBFQJZWX.js} +2 -2
- package/dist/cli/chunks/{chunk-DVE5SM5G.js → chunk-XFPQIWEH.js} +3 -3
- package/dist/cli/chunks/{chunk-RWZ4F44Y.js → chunk-XPB5BVU6.js} +2 -2
- package/dist/cli/chunks/{chunk-TVQPYP2Z.js → chunk-XQ53PZEF.js} +3 -3
- package/dist/cli/chunks/{chunk-73MTUM6F.js → chunk-XZ46CI35.js} +2 -2
- package/dist/cli/chunks/chunk-YLNYPQDR.js +2 -0
- package/dist/cli/chunks/{chunk-BY5PLEPZ.js → chunk-YNG7E26C.js} +2 -2
- package/dist/cli/chunks/{chunk-YUWUFYHK.js → chunk-YXU35GGD.js} +1 -1
- package/dist/cli/chunks/{chunk-B7GJXQD2.js → chunk-ZCP4P6O2.js} +2 -2
- package/dist/cli/chunks/{chunk-LGA6J4I4.js → chunk-ZL5LJT7D.js} +2 -2
- package/dist/cli/chunks/{chunk-TB22Y3WW.js → chunk-ZOUEQ6DL.js} +1 -1
- package/dist/cli/chunks/{chunk-U2E5F3VZ.js → chunk-ZSBD4FUX.js} +2 -2
- package/dist/cli/chunks/chunk-ZTB32K5N.js +5 -0
- package/dist/cli/chunks/{chunk-WYO5VN2L.js → chunk-ZUTFHGEO.js} +1 -1
- package/dist/cli/chunks/ci-GEJCXMBK.js +81 -0
- package/dist/cli/chunks/ci-config-2ZVV4OXL.js +2 -0
- package/dist/cli/chunks/{ci-output-BMJABAEX.js → ci-output-E45OGVPR.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-GYD5CMJQ.js → circuit-breaker-X73ITYZC.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-MMOYVBVD.js → claude-flow-setup-W4PPH46C.js} +2 -2
- package/dist/cli/chunks/client-6XKSQ4JT.js +2 -0
- package/dist/cli/chunks/{cline-installer-B2SOZ44R.js → cline-installer-NUEPMWDE.js} +2 -2
- package/dist/cli/chunks/{code-V3FIRAXD.js → code-6WQHBS7G.js} +4 -4
- package/dist/cli/chunks/{code-index-extractor-CV6A756Z.js → code-index-extractor-BXQIFIFT.js} +2 -2
- package/dist/cli/chunks/{codex-installer-EUC6J47Y.js → codex-installer-Z337R2KH.js} +2 -2
- package/dist/cli/chunks/{completions-DQQIBAHR.js → completions-F5DMYFHV.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-HPXMXP5I.js → complexity-analyzer-W2SYPZDI.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-RCIYXH6V.js → continuedev-installer-ZCHUIFTN.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-VUH32SHF.js → copilot-installer-M5JNODXF.js} +2 -2
- package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +2 -0
- package/dist/cli/chunks/{cost-tracker-YLCKLOAL.js → cost-tracker-LSYTHBHV.js} +2 -2
- package/dist/cli/chunks/coverage-PGMRS5SS.js +49 -0
- package/dist/cli/chunks/cross-domain-router-QVUPQ2SC.js +2 -0
- package/dist/cli/chunks/{cursor-installer-B42FN62K.js → cursor-installer-XPUA73UW.js} +2 -2
- package/dist/cli/chunks/{daemon-DECQRQII.js → daemon-ITKDIYMW.js} +5 -5
- package/dist/cli/chunks/daemon-QBYTCIMH.js +10 -0
- package/dist/cli/chunks/{dag-attention-scheduler-RY7CDYSC.js → dag-attention-scheduler-T55AXLD6.js} +2 -2
- package/dist/cli/chunks/{detect-NW53BMJN.js → detect-DR7J6K4O.js} +2 -2
- package/dist/cli/chunks/{dist-node-LE6KHXAB.js → dist-node-LAJJBOUT.js} +2 -2
- package/dist/cli/chunks/{domain-handler-JGXFT4LW.js → domain-handler-OMSHCRMK.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-GY3RYKKK.js → domain-plugins-EQXSKC5K.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-CGBRXNTC.js → domain-transfer-FKRAGVSW.js} +2 -2
- package/dist/cli/chunks/dream-3UABDRZJ.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-JZFPCNL3.js +3 -0
- package/dist/cli/chunks/{eval-YPYIZQUR.js → eval-JSNNASBW.js} +2 -2
- package/dist/cli/chunks/experience-capture-middleware-UPD3IZBK.js +40 -0
- package/dist/cli/chunks/{fast-paths-HYQTAF2S.js → fast-paths-YNMIBS2E.js} +2 -2
- package/dist/cli/chunks/{feature-flags-HNSAFFX2.js → feature-flags-SRLXDKBI.js} +2 -2
- package/dist/cli/chunks/{feature-flags-YACUH6OW.js → feature-flags-VIR7O4L7.js} +2 -2
- package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +2 -0
- package/dist/cli/chunks/{fleet-6M3BP4OO.js → fleet-K2ED46EL.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-QLD7KHXV.js → gnn-wrapper-QCU4ZRYW.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-EZP333X4.js → heartbeat-handler-YYQI4WZM.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-MJ6MTPDF.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-FQWJCFVW.js +2 -0
- package/dist/cli/chunks/hnsw-index-NJYKJUHC.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-47CUCSAU.js → hnsw-legacy-bridge-C5TJSWTZ.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-SVNYDJZH.js → hnswlib-node-SE3MJJYS.js} +2 -2
- package/dist/cli/chunks/{hooks-6V5LMWP6.js → hooks-C572SRDH.js} +43 -43
- package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-L2FOBIFF.js → hypergraph-engine-35A6G3M5.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-DU6Z57EE.js → hypergraph-handler-U2756CWI.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-5ZJTXPVC.js +2 -0
- package/dist/cli/chunks/init-handler-PCLYQUSB.js +88 -0
- package/dist/cli/chunks/init-wizard-MQMDSIOF.js +2 -0
- package/dist/cli/chunks/kernel-MEJ5GMRH.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-NHKYGJ7Q.js → kilocode-installer-32PX5YH7.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-24UK6GGR.js → kiro-installer-C4ROMMUS.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-XUBZSEZE.js +2 -0
- package/dist/cli/chunks/learning-GEPVZGJQ.js +122 -0
- package/dist/cli/chunks/{llm-router-XRMI2VMG.js → llm-router-XRKTTJTX.js} +4 -4
- package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +2 -0
- package/dist/cli/chunks/{load-W5UWL5C7.js → load-XVH6HW7E.js} +2 -2
- package/dist/cli/chunks/load-test-OVXIQ3AF.js +2 -0
- package/dist/cli/chunks/{mcp-N7ALQ4BL.js → mcp-IULSTM4Z.js} +2 -2
- package/dist/cli/chunks/{memory-WV52DLSA.js → memory-6K7IAU4T.js} +5 -5
- package/dist/cli/chunks/memory-backend-TRPOMPK4.js +2 -0
- package/dist/cli/chunks/memory-handlers-CG6DRLAW.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-3FVTZCSO.js → multi-model-executor-VZDUYPLX.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-NTPWGHUW.js → opencode-installer-QUTXKNH4.js} +2 -2
- package/dist/cli/chunks/orchestrator-PCKKUWOP.js +452 -0
- package/dist/cli/chunks/pattern-null-store-JWYBRBZG.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-WWXHUH5U.js → pattern-usage-recorder-PX5HQVRL.js} +2 -2
- package/dist/cli/chunks/{pipeline-ZOKZFXTH.js → pipeline-O562GTOG.js} +2 -2
- package/dist/cli/chunks/{platform-CDNL322F.js → platform-PM7Q2AZS.js} +2 -2
- package/dist/cli/chunks/plugin-OTYTFGPY.js +27 -0
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-FVJDU2JY.js → prime-radiant-advanced-wasm-6CFXTHC2.js} +2 -2
- package/dist/cli/chunks/project-root-VVSTHIP4.js +2 -0
- package/dist/cli/chunks/protocol-executor-PXZCLZD3.js +2 -0
- package/dist/cli/chunks/{protocol-handler-4YBN5R23.js → protocol-handler-PPGNSAOS.js} +2 -2
- package/dist/cli/chunks/{prove-BHDHY664.js → prove-WQ3BKRZG.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +2 -0
- package/dist/cli/chunks/quality-C5WUU3AA.js +8 -0
- package/dist/cli/chunks/{quality-gate-WANE7TCN.js → quality-gate-WSSRKD5U.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-UI3B7DI6.js +2 -0
- package/dist/cli/chunks/real-embeddings-CFQE7IRQ.js +2 -0
- package/dist/cli/chunks/{ref-validation-S7UWXQIP.js → ref-validation-DHKHXVZT.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-TEYOQYL6.js → roocode-installer-3PPODABV.js} +2 -2
- package/dist/cli/chunks/router-HYRPWLAY.js +2 -0
- package/dist/cli/chunks/routing-feedback-BPZ5R6F3.js +2 -0
- package/dist/cli/chunks/{routing-handler-KDTLMRWD.js → routing-handler-JNXTGT6T.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-AOUDXCYE.js → ruvector-commands-6YLROPVP.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-DEKDQ6KO.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-L53VBS7I.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-4DWB4WRK.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-I6RUGD2D.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-QI47Y354.js → rvf-store-integrity-YKR2ZNBF.js} +2 -2
- package/dist/cli/chunks/safe-db-KS65XDCP.js +2 -0
- package/dist/cli/chunks/schedule-KD2VN6GB.js +2 -0
- package/dist/cli/chunks/scheduler-ZH3RMUHY.js +2 -0
- package/dist/cli/chunks/{security-SN6MWOJT.js → security-PWQTGDRU.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-LNRLFP5I.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-WU7PFKQM.js → shared-rvf-dual-writer-GWU6YQNS.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-6DTVME5D.js +2 -0
- package/dist/cli/chunks/{standalone-memory-F6FSRFWC.js → standalone-memory-46KKBSSV.js} +2 -2
- package/dist/cli/chunks/{status-handler-DHD5MS4G.js → status-handler-35T5FTDQ.js} +2 -2
- package/dist/cli/chunks/{structural-health-P6HPSQMR.js → structural-health-P7QPQWLO.js} +2 -2
- package/dist/cli/chunks/{sync-LISJGDSE.js → sync-W6Z4R4PL.js} +2 -2
- package/dist/cli/chunks/sync-Y43EWBSY.js +2 -0
- package/dist/cli/chunks/{task-handler-ZT44NT5Z.js → task-handler-5CX3ZYT7.js} +2 -2
- package/dist/cli/chunks/{task-handlers-R6DQ5324.js → task-handlers-DQZGOJNE.js} +3 -3
- package/dist/cli/chunks/{test-MUFHR4JQ.js → test-TPP53VVV.js} +12 -12
- package/dist/cli/chunks/{test-scheduling-TAUSLZJP.js → test-scheduling-WBV4UMQH.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-GIIDXHLC.js +2 -0
- package/dist/cli/chunks/{token-usage-IX65ECBR.js → token-usage-AKK37RB7.js} +2 -2
- package/dist/cli/chunks/{transformers-QKPSVW2W.js → transformers-7MASPELS.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-Z7PPA2JO.js → tree-sitter-wasm-parser-YZKD6UGB.js} +2 -2
- package/dist/cli/chunks/{types-ULNNGGGH.js → types-AZ3BTXDP.js} +2 -2
- package/dist/cli/chunks/unified-memory-FCX7NLFZ.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-VU5QJK37.js +2 -0
- package/dist/cli/chunks/unified-persistence-FM376LGE.js +2 -0
- package/dist/cli/chunks/{upgrade-ECI3YUYA.js → upgrade-L7OTDKEK.js} +2 -2
- package/dist/cli/chunks/{validate-3JKRUW2S.js → validate-O3QVFIGP.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-LZWANCIE.js → validate-swarm-2UGBGLTX.js} +2 -2
- package/dist/cli/chunks/visual-security-EU7Y3X46.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-N5V4A6XG.js → web-tree-sitter-J75IYPRO.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-5TBM5B3C.js → windsurf-installer-FQ5DBFCG.js} +2 -2
- package/dist/cli/chunks/witness-chain-CSEBT52D.js +2 -0
- package/dist/cli/chunks/{witness-chain-MFP3HBWQ.js → witness-chain-I7TN4MXZ.js} +2 -2
- package/dist/cli/chunks/witness-chain-repair-D3NE3NQK.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-SRAT7LVY.js → witness-chain-verifier-RU2WOP5M.js} +2 -2
- package/dist/cli/chunks/witness-key-manager-IHQB2FR5.js +2 -0
- package/dist/cli/chunks/{workflow-M7TUYYXY.js → workflow-6BWTNVV6.js} +28 -28
- package/dist/cli/chunks/workflow-orchestrator-ALNKOM3N.js +2 -0
- package/dist/cli/chunks/wrappers-URVP25VU.js +2 -0
- package/dist/cli/commands/ci.js +53 -23
- package/dist/cli/commands/code.js +1 -0
- package/dist/cli/commands/coverage.d.ts +1 -0
- package/dist/cli/commands/coverage.js +182 -138
- package/dist/cli/commands/daemon.js +7 -1
- package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
- package/dist/cli/commands/learning.js +47 -7
- package/dist/cli/commands/quality.d.ts +12 -1
- package/dist/cli/commands/quality.js +51 -3
- package/dist/cli/commands/test.js +6 -7
- package/dist/cli/commands/workflow.js +9 -5
- package/dist/cli/handlers/init-guard.d.ts +13 -0
- package/dist/cli/handlers/init-guard.js +23 -0
- package/dist/cli/handlers/init-handler.d.ts +3 -0
- package/dist/cli/handlers/init-handler.js +9 -0
- package/dist/cli/handlers/interfaces.js +5 -1
- package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
- package/dist/cli/scheduler/persistent-scheduler.js +107 -41
- package/dist/cli/utils/ci-output.d.ts +22 -5
- package/dist/cli/utils/ci-output.js +33 -5
- package/dist/cli/utils/coverage-data.d.ts +10 -0
- package/dist/cli/utils/coverage-data.js +34 -65
- package/dist/cli/utils/coverage-verdict.d.ts +130 -0
- package/dist/cli/utils/coverage-verdict.js +193 -0
- package/dist/cli/utils/file-discovery.js +5 -0
- package/dist/contracts/verdicts.d.ts +14 -0
- package/dist/contracts/verdicts.js +44 -3
- package/dist/coordination/deterministic-actions.js +24 -13
- package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
- package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
- package/dist/coordination/handlers/coverage-handlers.js +150 -121
- package/dist/coordination/handlers/coverage-runner.d.ts +143 -0
- package/dist/coordination/handlers/coverage-runner.js +462 -0
- package/dist/coordination/handlers/coverage-target.d.ts +145 -0
- package/dist/coordination/handlers/coverage-target.js +314 -0
- package/dist/coordination/handlers/handler-types.d.ts +9 -0
- package/dist/coordination/handlers/handler-utils.d.ts +23 -1
- package/dist/coordination/handlers/handler-utils.js +90 -23
- package/dist/coordination/handlers/quality-handlers.js +209 -33
- package/dist/coordination/handlers/test-execution-handlers.js +4 -1
- package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
- package/dist/coordination/protocols/defect-investigation.js +6 -3
- package/dist/coordination/protocols/quality-gate.js +10 -6
- package/dist/coordination/result-saver.d.ts +22 -0
- package/dist/coordination/result-saver.js +130 -46
- package/dist/coordination/task-executor.d.ts +12 -0
- package/dist/coordination/task-executor.js +37 -1
- package/dist/domains/code-intelligence/coordinator.d.ts +2 -1
- package/dist/domains/code-intelligence/coordinator.js +10 -32
- package/dist/domains/code-intelligence/interfaces.d.ts +5 -0
- package/dist/domains/code-intelligence/plugin.js +5 -0
- package/dist/domains/code-intelligence/project-root-resolver.d.ts +50 -0
- package/dist/domains/code-intelligence/project-root-resolver.js +121 -0
- package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
- package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
- package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
- package/dist/domains/coverage-analysis/collected-metrics.d.ts +33 -0
- package/dist/domains/coverage-analysis/collected-metrics.js +36 -0
- package/dist/domains/coverage-analysis/coordinator.js +22 -7
- package/dist/domains/coverage-analysis/interfaces.d.ts +59 -0
- package/dist/domains/coverage-analysis/interfaces.js +6 -1
- package/dist/domains/coverage-analysis/plugin.js +7 -1
- package/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts +7 -0
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +85 -38
- package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
- package/dist/domains/defect-intelligence/plugin.js +4 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +6 -4
- package/dist/domains/learning-optimization/coordinator.js +4 -0
- package/dist/domains/learning-optimization/plugin.js +4 -0
- package/dist/domains/quality-assessment/coordinator-claim-verifier.js +2 -1
- package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
- package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
- package/dist/domains/quality-assessment/coordinator.js +18 -14
- package/dist/domains/quality-assessment/coverage-report-event.d.ts +49 -0
- package/dist/domains/quality-assessment/coverage-report-event.js +58 -0
- package/dist/domains/quality-assessment/evidence-sufficiency.d.ts +57 -0
- package/dist/domains/quality-assessment/evidence-sufficiency.js +97 -0
- package/dist/domains/quality-assessment/index.d.ts +2 -2
- package/dist/domains/quality-assessment/index.js +1 -1
- package/dist/domains/quality-assessment/interfaces.d.ts +46 -0
- package/dist/domains/quality-assessment/plugin.js +8 -8
- package/dist/domains/quality-assessment/quality-evidence.d.ts +98 -4
- package/dist/domains/quality-assessment/quality-evidence.js +152 -8
- package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
- package/dist/domains/quality-assessment/services/quality-analyzer.js +203 -116
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
- package/dist/domains/test-execution/interfaces.d.ts +10 -6
- package/dist/domains/test-execution/plugin.js +4 -0
- package/dist/domains/test-execution/services/test-executor.js +152 -102
- package/dist/domains/test-generation/coordinator.js +4 -0
- package/dist/domains/test-generation/plugin.js +4 -0
- package/dist/feedback/coverage-learner.js +4 -1
- package/dist/feedback/coverage-session-provenance.d.ts +29 -0
- package/dist/feedback/coverage-session-provenance.js +39 -0
- package/dist/init/orchestrator.js +2 -0
- package/dist/init/phases/09-assets.d.ts +4 -0
- package/dist/init/phases/09-assets.js +35 -0
- package/dist/init/retired-assets.d.ts +86 -0
- package/dist/init/retired-assets.js +230 -0
- package/dist/init/skills-installer.d.ts +2 -0
- package/dist/init/skills-installer.js +4 -0
- package/dist/init/types.d.ts +3 -0
- package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
- package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
- package/dist/integrations/ruvector/server-client.js +4 -12
- package/dist/kernel/project-root.d.ts +17 -0
- package/dist/kernel/project-root.js +54 -2
- package/dist/kernel/shared-dirs.d.ts +66 -0
- package/dist/kernel/shared-dirs.js +168 -0
- package/dist/learning/daily-log.js +2 -1
- package/dist/learning/experience-capture-middleware.d.ts +22 -0
- package/dist/learning/experience-capture-middleware.js +35 -0
- package/dist/learning/learnable-result.d.ts +16 -0
- package/dist/learning/learnable-result.js +24 -0
- package/dist/learning/pattern-mutation-error.d.ts +8 -0
- package/dist/learning/pattern-mutation-error.js +12 -0
- package/dist/learning/qe-reasoning-bank.d.ts +10 -0
- package/dist/learning/qe-reasoning-bank.js +50 -1
- package/dist/learning/rvf-reconcile.d.ts +39 -0
- package/dist/learning/rvf-reconcile.js +40 -0
- package/dist/learning/sqlite-persistence.d.ts +14 -0
- package/dist/learning/sqlite-persistence.js +36 -0
- package/dist/mcp/bundle.js +524 -507
- package/dist/mcp/handlers/domain-handler-configs.d.ts +49 -2
- package/dist/mcp/handlers/domain-handler-configs.js +79 -7
- package/dist/mcp/handlers/handler-factory.js +43 -14
- package/dist/mcp/handlers/wrapped-domain-handlers.js +7 -1
- package/dist/mcp/protocol-server.js +30 -4
- package/dist/mcp/tool-cache-scope.d.ts +31 -0
- package/dist/mcp/tool-cache-scope.js +71 -0
- package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
- package/dist/mcp/tools/coverage-analysis/index.js +1 -0
- package/dist/mcp/types.d.ts +10 -0
- package/dist/optimization/session-cache.d.ts +19 -1
- package/dist/optimization/session-cache.js +36 -2
- package/dist/plugins/cache.js +2 -1
- package/dist/plugins/sources/github.js +2 -1
- package/dist/plugins/sources/npm.js +2 -1
- package/dist/shared/aqe-managed-dirs.d.ts +24 -0
- package/dist/shared/aqe-managed-dirs.js +56 -0
- package/dist/shared/events/domain-events.d.ts +20 -3
- package/dist/shared/events/domain-events.js +4 -0
- package/dist/shared/http/http-client.d.ts +6 -0
- package/dist/shared/http/http-client.js +13 -15
- package/dist/shared/io/file-reader.d.ts +26 -0
- package/dist/shared/io/file-reader.js +111 -17
- package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
- package/dist/shared/llm/providers/response-deadline.js +17 -5
- package/dist/shared/metrics/code-metrics.d.ts +24 -0
- package/dist/shared/metrics/code-metrics.js +93 -6
- package/dist/shared/metrics/index.d.ts +1 -1
- package/dist/workers/interfaces.d.ts +9 -1
- package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
- package/dist/workers/quality-daemon/coverage-delta.js +13 -6
- package/dist/workers/quality-daemon/index.js +6 -5
- package/dist/workers/quality-daemon/notification-service.js +3 -3
- package/dist/workers/quality-daemon/persistent-memory.d.ts +2 -2
- package/dist/workers/quality-daemon/persistent-memory.js +2 -2
- package/dist/workers/worker-manager.js +5 -1
- package/dist/workers/workers/coverage-tracker.js +69 -33
- package/dist/workers/workers/regression-monitor.d.ts +18 -1
- package/dist/workers/workers/regression-monitor.js +276 -117
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-T54G3TBK.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-HLCJJ3JM.js +0 -2
- package/dist/cli/chunks/base-VLD755UU.js +0 -2
- package/dist/cli/chunks/browser-workflow-6M6VLWRF.js +0 -2
- package/dist/cli/chunks/chunk-5XXLWJU7.js +0 -2
- package/dist/cli/chunks/chunk-AHVN3UQZ.js +0 -4
- package/dist/cli/chunks/chunk-AOKSLWON.js +0 -742
- package/dist/cli/chunks/chunk-CQ3WSTJ2.js +0 -16
- package/dist/cli/chunks/chunk-LY53L6NH.js +0 -2
- package/dist/cli/chunks/chunk-O7TMY4GS.js +0 -2
- package/dist/cli/chunks/chunk-QIAX3JJB.js +0 -3
- package/dist/cli/chunks/chunk-RJMBHZYL.js +0 -2
- package/dist/cli/chunks/chunk-UORI2CZ4.js +0 -2
- package/dist/cli/chunks/chunk-V3NZ23X6.js +0 -2
- package/dist/cli/chunks/chunk-WI5AEB7Q.js +0 -2
- package/dist/cli/chunks/chunk-XKIFNKHV.js +0 -2
- package/dist/cli/chunks/chunk-ZAOQIVHG.js +0 -5
- package/dist/cli/chunks/chunk-ZF5JTQEE.js +0 -4
- package/dist/cli/chunks/ci-NGMGB43T.js +0 -82
- package/dist/cli/chunks/client-FUHNNK5O.js +0 -2
- package/dist/cli/chunks/core-handlers-F7TLX4LM.js +0 -2
- package/dist/cli/chunks/coverage-IVKDV236.js +0 -27
- package/dist/cli/chunks/cross-domain-router-EGWPY67O.js +0 -2
- package/dist/cli/chunks/daemon-IPTOSCHM.js +0 -10
- package/dist/cli/chunks/dream-V4QN6OF5.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-65H4XHWR.js +0 -3
- package/dist/cli/chunks/experience-capture-middleware-4JXVF5PL.js +0 -40
- package/dist/cli/chunks/file-discovery-R73BYEXB.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-3N3L6CRM.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-2BXJYDXI.js +0 -2
- package/dist/cli/chunks/hnsw-index-2DLI5OVO.js +0 -2
- package/dist/cli/chunks/hybrid-backend-OW4J65YH.js +0 -2
- package/dist/cli/chunks/impact-analyzer-ZH5I2RG6.js +0 -2
- package/dist/cli/chunks/init-handler-HETPWU67.js +0 -86
- package/dist/cli/chunks/init-wizard-NIKM3ZOK.js +0 -2
- package/dist/cli/chunks/kernel-2EOSVM6X.js +0 -2
- package/dist/cli/chunks/knowledge-graph-D3BPWNNO.js +0 -2
- package/dist/cli/chunks/learning-QLVRZNHT.js +0 -122
- package/dist/cli/chunks/llm-router-service-TJPPZFUN.js +0 -2
- package/dist/cli/chunks/load-test-RFT7IDOL.js +0 -2
- package/dist/cli/chunks/memory-backend-O2O4CFKZ.js +0 -2
- package/dist/cli/chunks/memory-handlers-DAEGUDBD.js +0 -2
- package/dist/cli/chunks/orchestrator-ORGJ6VAA.js +0 -452
- package/dist/cli/chunks/pattern-null-store-TUBNXS34.js +0 -2
- package/dist/cli/chunks/plugin-ZVLFNZZ4.js +0 -27
- package/dist/cli/chunks/project-root-UCHQH3QL.js +0 -2
- package/dist/cli/chunks/protocol-executor-6FQTTO3Y.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-TKPND56C.js +0 -2
- package/dist/cli/chunks/quality-46AK277P.js +0 -7
- package/dist/cli/chunks/queen-coordinator-DWMXLPJG.js +0 -2
- package/dist/cli/chunks/real-embeddings-56MNGJGJ.js +0 -2
- package/dist/cli/chunks/router-QIMUYRCC.js +0 -2
- package/dist/cli/chunks/routing-feedback-4OH5ZNF4.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-S6JBZL54.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-TSGMLMYR.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-V74MVBHS.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-Z7QOW47S.js +0 -2
- package/dist/cli/chunks/safe-db-JLOVBJNC.js +0 -2
- package/dist/cli/chunks/schedule-IM6XOBGR.js +0 -2
- package/dist/cli/chunks/scheduler-XL2SVVK5.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-2LB56LP4.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-LWMIIC4U.js +0 -2
- package/dist/cli/chunks/sync-SNAXAVCN.js +0 -2
- package/dist/cli/chunks/token-bootstrap-UGRH7OPU.js +0 -2
- package/dist/cli/chunks/unified-memory-F5IJY7W7.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-C3WAMAQL.js +0 -2
- package/dist/cli/chunks/unified-persistence-EWXXOTCB.js +0 -2
- package/dist/cli/chunks/visual-security-CKLTAIAB.js +0 -2
- package/dist/cli/chunks/witness-chain-Z6LWFEZS.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-5QWRFVUK.js +0 -2
- package/dist/cli/chunks/witness-key-manager-FYZXQTLJ.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-OFTAR2NA.js +0 -2
- package/dist/cli/chunks/wrappers-COU73OQ6.js +0 -2
- /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
- /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
- /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
- /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
- /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
- /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
|
@@ -4,10 +4,148 @@
|
|
|
4
4
|
* Extracted from task-executor.ts registerHandlers().
|
|
5
5
|
* Covers: assess-quality
|
|
6
6
|
*/
|
|
7
|
+
import * as nodePath from 'node:path';
|
|
8
|
+
import { existsSync, promises as fsp } from 'node:fs';
|
|
7
9
|
import { ok, err } from '../../shared/types/index.js';
|
|
8
|
-
import { toError } from '../../shared/error-utils.js';
|
|
10
|
+
import { CallerInputError, toError } from '../../shared/error-utils.js';
|
|
9
11
|
import { discoverSourceFiles } from './handler-utils.js';
|
|
10
|
-
import {
|
|
12
|
+
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
13
|
+
import { INSUFFICIENT_EVIDENCE, describeMissingMetrics, evaluateQualityEvidence, loadQualityEvidence, } from '../../domains/quality-assessment/quality-evidence.js';
|
|
14
|
+
import { assessEvidenceSufficiency, describeMeasuredFailure, findMeasuredFailures, isMeasuredMetricValue, resolveCoverageOverride, validateRequestedMetrics, } from '../../domains/quality-assessment/evidence-sufficiency.js';
|
|
15
|
+
const DEFAULT_STATIC_METRICS = ['coverage', 'complexity', 'maintainability', 'testability'];
|
|
16
|
+
const UNMEASURED = -1;
|
|
17
|
+
const STATIC_ONLY_NOTE = 'Static analysis only; no quality gate was evaluated. '
|
|
18
|
+
+ 'Call quality_assess with runGate: true (or `aqe quality --gate`) for a pass/fail gate on measured evidence.';
|
|
19
|
+
/** #996: report the -1 sentinel instead of a fabricated number for unmeasured values. */
|
|
20
|
+
function sentinel(value) {
|
|
21
|
+
return isMeasuredMetricValue(value) ? value : UNMEASURED;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* #1011: why each unmeasured metric has no value — the analyzer's reason
|
|
25
|
+
* (unreadable or unparseable file, failed detection, no stored coverage).
|
|
26
|
+
*/
|
|
27
|
+
function unmeasuredReasons(unmeasured, reported) {
|
|
28
|
+
const byMetric = new Map((reported ?? []).map((u) => [u.metric, u.reason]));
|
|
29
|
+
return Object.fromEntries(unmeasured.map((metric) => [
|
|
30
|
+
metric,
|
|
31
|
+
byMetric.get(metric) ?? (metric === 'security'
|
|
32
|
+
? 'static analysis never measures security'
|
|
33
|
+
: 'the static analyzer produced no measured value'),
|
|
34
|
+
]));
|
|
35
|
+
}
|
|
36
|
+
/** Cap on excluded files echoed back in the result (the count is always exact). */
|
|
37
|
+
const MAX_EXCLUDED_LISTED = 50;
|
|
38
|
+
/** True when `candidate` is `root` or lies beneath it. */
|
|
39
|
+
function isWithin(root, candidate) {
|
|
40
|
+
const relative = nodePath.relative(root, candidate);
|
|
41
|
+
return relative === '' || (relative !== '..' && !relative.startsWith(`..${nodePath.sep}`) && !nodePath.isAbsolute(relative));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* #1021 (B2): resolve a caller path against the project root and require it to
|
|
45
|
+
* stay inside — lexically, and by realpath when it exists (so a symlink cannot
|
|
46
|
+
* lead outside). A path that does not exist is returned as resolved; the
|
|
47
|
+
* analyzer reports it as unreadable.
|
|
48
|
+
*/
|
|
49
|
+
async function resolveContained(input, root, label) {
|
|
50
|
+
const resolved = nodePath.resolve(root, input);
|
|
51
|
+
if (input.includes('\0') || !isWithin(root, resolved)) {
|
|
52
|
+
throw new CallerInputError(`${label} ${JSON.stringify(input)} is outside the project root (${root}).`);
|
|
53
|
+
}
|
|
54
|
+
let real;
|
|
55
|
+
try {
|
|
56
|
+
real = await fsp.realpath(resolved);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return resolved;
|
|
60
|
+
}
|
|
61
|
+
const rootReal = await fsp.realpath(root).catch(() => root);
|
|
62
|
+
if (!isWithin(rootReal, real)) {
|
|
63
|
+
throw new CallerInputError(`${label} ${JSON.stringify(input)} resolves outside the project root (${root}).`);
|
|
64
|
+
}
|
|
65
|
+
return resolved;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* #1021 (B2): the files to analyse and which of them the caller named. Explicit
|
|
69
|
+
* sourceFiles win over target; with neither, src/ (else the root) is analysed.
|
|
70
|
+
*/
|
|
71
|
+
async function resolveAnalysisScope(payload) {
|
|
72
|
+
// #1021 round 2b: the AQE project root (AQE_PROJECT_ROOT, else detected),
|
|
73
|
+
// not the process cwd — an MCP server may run from another directory.
|
|
74
|
+
const root = findProjectRoot();
|
|
75
|
+
if (Array.isArray(payload.sourceFiles) && payload.sourceFiles.length > 0) {
|
|
76
|
+
const files = [];
|
|
77
|
+
for (const file of payload.sourceFiles) {
|
|
78
|
+
if (typeof file !== 'string' || file.trim() === '') {
|
|
79
|
+
throw new CallerInputError('sourceFiles must be a non-empty array of file paths.');
|
|
80
|
+
}
|
|
81
|
+
files.push(await resolveContained(file, root, 'sourceFile'));
|
|
82
|
+
}
|
|
83
|
+
return { sourceFiles: files, explicitFiles: files, scope: 'sourceFiles' };
|
|
84
|
+
}
|
|
85
|
+
if (typeof payload.target === 'string' && payload.target.trim() !== '') {
|
|
86
|
+
const target = await resolveContained(payload.target, root, 'target');
|
|
87
|
+
const stat = await fsp.stat(target).catch(() => null);
|
|
88
|
+
if (!stat)
|
|
89
|
+
throw new CallerInputError(`target ${JSON.stringify(payload.target)} does not exist.`);
|
|
90
|
+
if (stat.isFile())
|
|
91
|
+
return { sourceFiles: [target], explicitFiles: [target], scope: target };
|
|
92
|
+
return { sourceFiles: await discoverSourceFiles(target, { includeTests: false }), explicitFiles: [], scope: target };
|
|
93
|
+
}
|
|
94
|
+
// Default to src/ — scanning the entire project root is too slow
|
|
95
|
+
// (node_modules, dist, .git, etc. make it hang on large projects)
|
|
96
|
+
const srcDir = nodePath.join(root, 'src');
|
|
97
|
+
const targetDir = existsSync(srcDir) ? srcDir : root;
|
|
98
|
+
return { sourceFiles: await discoverSourceFiles(targetDir, { includeTests: false }), explicitFiles: [], scope: targetDir };
|
|
99
|
+
}
|
|
100
|
+
/** #1021: one line per partially measured metric, naming the gap. */
|
|
101
|
+
function describePartialMetrics(partial) {
|
|
102
|
+
return (partial ?? []).map((p) => `Partial evidence: ${p.metric} measured over ${p.analysedFiles} of ${p.totalFiles} `
|
|
103
|
+
// coverageOfScope is already rounded down to 3 decimals; round only float noise here.
|
|
104
|
+
+ `file(s) (${Math.round(p.coverageOfScope * 1000) / 10}%); not analysed: `
|
|
105
|
+
+ p.failed.slice(0, 3).map((f) => f.reason).join('; ')
|
|
106
|
+
+ (p.failed.length > 3 ? `; and ${p.failed.length - 3} more` : '') + '.');
|
|
107
|
+
}
|
|
108
|
+
/** #996 (N3): reject a malformed `metrics` list instead of spreading a string into characters. */
|
|
109
|
+
function requestedMetricsFrom(metrics) {
|
|
110
|
+
if (metrics === undefined)
|
|
111
|
+
return DEFAULT_STATIC_METRICS;
|
|
112
|
+
try {
|
|
113
|
+
return validateRequestedMetrics(metrics);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
throw new CallerInputError(toError(error).message);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* #996: the user-configured gate coverage threshold (`quality_gate.thresholds.coverage`
|
|
121
|
+
* in .aqe-ci.yml), found the same way `aqe ci` finds its config. Undefined when
|
|
122
|
+
* there is no readable config.
|
|
123
|
+
*/
|
|
124
|
+
async function configuredCoverageThreshold(startDir) {
|
|
125
|
+
try {
|
|
126
|
+
const { findCIConfigFile, parseCIConfigFile } = await import('../../cli/utils/ci-config.js');
|
|
127
|
+
const configPath = findCIConfigFile(startDir);
|
|
128
|
+
if (!configPath)
|
|
129
|
+
return undefined;
|
|
130
|
+
const parsed = parseCIConfigFile(configPath);
|
|
131
|
+
return parsed.success ? parsed.config?.qualityGate.thresholds.coverage : undefined;
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
return undefined;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* #996: coverage limit for measured failures — the request's threshold, else
|
|
139
|
+
* the configured gate threshold, else the canonical default (undefined).
|
|
140
|
+
*/
|
|
141
|
+
async function coverageOverrideFor(payload) {
|
|
142
|
+
const requested = payload.thresholdSource === 'default' ? undefined : payload.threshold;
|
|
143
|
+
if (requested !== undefined && (typeof requested !== 'number' || !Number.isFinite(requested)
|
|
144
|
+
|| requested < 0 || requested > 100)) {
|
|
145
|
+
throw new CallerInputError('threshold must be a finite number between 0 and 100.');
|
|
146
|
+
}
|
|
147
|
+
return resolveCoverageOverride(requested, requested === undefined ? await configuredCoverageThreshold(process.cwd()) : undefined);
|
|
148
|
+
}
|
|
11
149
|
export function registerQualityHandlers(ctx) {
|
|
12
150
|
// Register quality assessment handler - REAL IMPLEMENTATION
|
|
13
151
|
ctx.registerHandler('assess-quality', async (task) => {
|
|
@@ -15,74 +153,112 @@ export function registerQualityHandlers(ctx) {
|
|
|
15
153
|
try {
|
|
16
154
|
// An explicit gate evaluates the same measured, timestamped evidence as
|
|
17
155
|
// `aqe quality --gate`. Static source scores cannot substitute for it.
|
|
156
|
+
// Missing/stale/malformed evidence throws InsufficientQualityEvidenceError,
|
|
157
|
+
// whose details (status, unmeasured) travel with the failure.
|
|
18
158
|
if (payload.runGate === true) {
|
|
19
159
|
const measured = await loadQualityEvidence(ctx.memory);
|
|
20
160
|
return ok({
|
|
21
161
|
...evaluateQualityEvidence(measured),
|
|
22
162
|
metrics: measured,
|
|
163
|
+
evidenceStatus: 'measured',
|
|
164
|
+
unmeasured: [],
|
|
165
|
+
gateEvaluated: true,
|
|
23
166
|
});
|
|
24
167
|
}
|
|
168
|
+
const requestedMetrics = requestedMetricsFrom(payload.metrics);
|
|
169
|
+
const coverageOverride = await coverageOverrideFor(payload);
|
|
25
170
|
const analyzer = ctx.getQualityAnalyzer();
|
|
26
171
|
const threshold = payload.threshold || 80;
|
|
27
|
-
//
|
|
28
|
-
|
|
29
|
-
if (payload.sourceFiles && payload.sourceFiles.length > 0) {
|
|
30
|
-
sourceFiles = payload.sourceFiles;
|
|
31
|
-
}
|
|
32
|
-
else if (payload.target) {
|
|
33
|
-
sourceFiles = await discoverSourceFiles(payload.target, { includeTests: false });
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
// Default to src/ — scanning the entire project root is too slow
|
|
37
|
-
// (node_modules, dist, .git, etc. make it hang on large projects)
|
|
38
|
-
const path = await import('path');
|
|
39
|
-
const fs = await import('fs');
|
|
40
|
-
const srcDir = path.join(process.cwd(), 'src');
|
|
41
|
-
const targetDir = fs.existsSync(srcDir) ? srcDir : process.cwd();
|
|
42
|
-
sourceFiles = await discoverSourceFiles(targetDir, { includeTests: false });
|
|
43
|
-
}
|
|
172
|
+
// #1021 (B2): analyse what the caller scoped, contained in the project root.
|
|
173
|
+
const { sourceFiles, explicitFiles, scope } = await resolveAnalysisScope(payload);
|
|
44
174
|
if (sourceFiles.length === 0) {
|
|
175
|
+
// Nothing was analyzed: every requested metric is unmeasured (#996).
|
|
45
176
|
return ok({
|
|
46
|
-
|
|
177
|
+
// #1011: nothing was analysed, so there is no score (-1), not a score of 0.
|
|
178
|
+
qualityScore: UNMEASURED,
|
|
47
179
|
passed: false,
|
|
48
180
|
threshold,
|
|
49
181
|
metrics: {
|
|
50
|
-
coverage:
|
|
51
|
-
complexity:
|
|
52
|
-
maintainability:
|
|
53
|
-
testability:
|
|
182
|
+
coverage: UNMEASURED,
|
|
183
|
+
complexity: UNMEASURED,
|
|
184
|
+
maintainability: UNMEASURED,
|
|
185
|
+
testability: UNMEASURED,
|
|
54
186
|
},
|
|
55
|
-
recommendations: [
|
|
187
|
+
recommendations: [
|
|
188
|
+
...describeMissingMetrics(requestedMetrics),
|
|
189
|
+
'No source files found for quality assessment',
|
|
190
|
+
],
|
|
56
191
|
warning: 'No source files found',
|
|
192
|
+
evidenceStatus: INSUFFICIENT_EVIDENCE,
|
|
193
|
+
unmeasured: requestedMetrics,
|
|
194
|
+
unmeasuredReasons: Object.fromEntries(requestedMetrics.map((m) => [m, 'no source files found to analyse'])),
|
|
195
|
+
measuredFailures: [],
|
|
196
|
+
gateEvaluated: false,
|
|
197
|
+
confidence: 0,
|
|
198
|
+
note: STATIC_ONLY_NOTE,
|
|
57
199
|
});
|
|
58
200
|
}
|
|
59
201
|
// Use the real QualityAnalyzerService
|
|
60
202
|
const result = await analyzer.analyzeQuality({
|
|
61
203
|
sourceFiles,
|
|
62
|
-
includeMetrics:
|
|
204
|
+
includeMetrics: requestedMetrics,
|
|
205
|
+
explicitFiles,
|
|
63
206
|
});
|
|
64
207
|
if (!result.success) {
|
|
65
208
|
return result;
|
|
66
209
|
}
|
|
67
210
|
const report = result.value;
|
|
68
|
-
|
|
69
|
-
//
|
|
211
|
+
// Only metrics the analyzer actually computed count as measured; score
|
|
212
|
+
// fields carry the -1 sentinel for the rest.
|
|
70
213
|
const metrics = {};
|
|
71
214
|
for (const metric of report.metrics) {
|
|
72
215
|
metrics[metric.name] = metric.value;
|
|
73
216
|
}
|
|
217
|
+
// #996: never pass on missing data. A static score computed without a
|
|
218
|
+
// requested metric (e.g. coverage = -1) is not evidence of quality, and
|
|
219
|
+
// a measured metric that fails its own limit blocks regardless (N2).
|
|
220
|
+
const sufficiency = assessEvidenceSufficiency(requestedMetrics, metrics);
|
|
221
|
+
const measuredFailures = findMeasuredFailures(sufficiency.measured, metrics, { coverage: coverageOverride });
|
|
222
|
+
const insufficient = sufficiency.evidenceStatus !== 'measured';
|
|
223
|
+
const passed = !insufficient && measuredFailures.length === 0 && report.score.overall >= threshold;
|
|
224
|
+
const recommendations = report.recommendations.map(r => `[${r.type}] ${r.title}: ${r.description}`);
|
|
74
225
|
return ok({
|
|
75
226
|
qualityScore: report.score.overall,
|
|
76
227
|
passed,
|
|
77
228
|
threshold,
|
|
78
229
|
metrics: {
|
|
79
|
-
coverage:
|
|
80
|
-
complexity:
|
|
81
|
-
maintainability:
|
|
82
|
-
security
|
|
230
|
+
coverage: sentinel(metrics.coverage),
|
|
231
|
+
complexity: sentinel(metrics.complexity),
|
|
232
|
+
maintainability: sentinel(metrics.maintainability),
|
|
233
|
+
// The analyzer has no security measurement; never report a placeholder.
|
|
234
|
+
security: sentinel(metrics.security),
|
|
235
|
+
// #1011: every requested metric appears, -1 when unmeasured.
|
|
236
|
+
...Object.fromEntries(requestedMetrics.map((name) => [name, sentinel(metrics[name])])),
|
|
83
237
|
...metrics,
|
|
84
238
|
},
|
|
85
|
-
|
|
239
|
+
unmeasuredReasons: unmeasuredReasons(sufficiency.unmeasured, report.unmeasured),
|
|
240
|
+
// #1021 round 2b: a score over a subset of the requested metrics (or over
|
|
241
|
+
// part of the files) names what it is based on — it is not a verdict.
|
|
242
|
+
...(insufficient || (report.partial?.length ?? 0) > 0
|
|
243
|
+
? { scoreBasis: report.metrics.map((m) => m.name) }
|
|
244
|
+
: {}),
|
|
245
|
+
recommendations: [
|
|
246
|
+
...measuredFailures.map(describeMeasuredFailure),
|
|
247
|
+
...describeMissingMetrics(sufficiency.unmeasured),
|
|
248
|
+
...describePartialMetrics(report.partial),
|
|
249
|
+
...recommendations,
|
|
250
|
+
],
|
|
251
|
+
...(report.partial && report.partial.length > 0 ? { partialMetrics: report.partial } : {}),
|
|
252
|
+
...(report.excluded && report.excluded.length > 0
|
|
253
|
+
? { excludedFiles: report.excluded.slice(0, MAX_EXCLUDED_LISTED), excludedCount: report.excluded.length }
|
|
254
|
+
: {}),
|
|
255
|
+
scope,
|
|
256
|
+
evidenceStatus: sufficiency.evidenceStatus,
|
|
257
|
+
unmeasured: sufficiency.unmeasured,
|
|
258
|
+
measuredFailures,
|
|
259
|
+
gateEvaluated: false,
|
|
260
|
+
confidence: sufficiency.confidence,
|
|
261
|
+
note: STATIC_ONLY_NOTE,
|
|
86
262
|
trends: report.trends.map(t => ({
|
|
87
263
|
metric: t.metric,
|
|
88
264
|
direction: t.direction,
|
|
@@ -222,7 +222,10 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
222
222
|
const executionError = getTestRunnerExecutionError(runner, testFiles.join(', '), execution.status, { passed, failed, skipped }, diagnostics, json);
|
|
223
223
|
if (executionError)
|
|
224
224
|
return err(executionError);
|
|
225
|
-
|
|
225
|
+
// #1027 N5/NB5: this handler runs the tests without --coverage, so it has no
|
|
226
|
+
// coverage figure to return (null, never 0%). For test_execute_parallel the
|
|
227
|
+
// measured coverage + testsPassing are recorded by TestExecutorService.
|
|
228
|
+
return ok({ total, passed, failed, skipped, duration: 0, coverage: null, failedTests: [] });
|
|
226
229
|
}
|
|
227
230
|
}
|
|
228
231
|
}
|
|
@@ -64,7 +64,8 @@ export interface RelatedFailure {
|
|
|
64
64
|
export interface CoverageContext {
|
|
65
65
|
file: string;
|
|
66
66
|
lineCoverage: number;
|
|
67
|
-
|
|
67
|
+
/** `null` = no branch data was collected (#1027 NB4) — never a borrowed figure. */
|
|
68
|
+
branchCoverage: number | null;
|
|
68
69
|
uncoveredLines: number[];
|
|
69
70
|
riskScore: number;
|
|
70
71
|
}
|
|
@@ -12,6 +12,7 @@ import { createEvent } from '../../shared/events/domain-events.js';
|
|
|
12
12
|
import { toError } from '../../shared/error-utils.js';
|
|
13
13
|
import { LoggerFactory } from '../../logging/index.js';
|
|
14
14
|
import { addToCount } from '../../shared/utils/safe-record.js';
|
|
15
|
+
import { measuredFileCoverage } from '../../domains/quality-assessment/coverage-report-event.js';
|
|
15
16
|
const logger = LoggerFactory.create('defect-investigation');
|
|
16
17
|
export const DefectInvestigationEvents = {
|
|
17
18
|
DefectInvestigationStarted: 'coordination.DefectInvestigationStarted',
|
|
@@ -605,12 +606,14 @@ export class DefectInvestigationProtocol {
|
|
|
605
606
|
async getCoverageContext(file) {
|
|
606
607
|
try {
|
|
607
608
|
// Try per-file coverage (written by coverage-analyzer and test-executor)
|
|
608
|
-
|
|
609
|
+
// #1014: only measured records; legacy unstamped estimates are ignored.
|
|
610
|
+
const coverage = measuredFileCoverage(await this.memory.get(`coverage:file:${file}`));
|
|
609
611
|
if (!coverage) {
|
|
610
612
|
return null;
|
|
611
613
|
}
|
|
612
|
-
// Calculate risk based on coverage
|
|
613
|
-
|
|
614
|
+
// Calculate risk based on coverage (an uncollected branch metric is
|
|
615
|
+
// left out, not counted as 0%).
|
|
616
|
+
const avgCoverage = coverage.branch === null ? coverage.line : (coverage.line + coverage.branch) / 2;
|
|
614
617
|
const riskScore = 1 - avgCoverage / 100;
|
|
615
618
|
return {
|
|
616
619
|
file,
|
|
@@ -10,6 +10,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
10
10
|
import { ok, err, } from '../../shared/types/index.js';
|
|
11
11
|
import { createEvent } from '../../shared/events/domain-events.js';
|
|
12
12
|
import { toErrorMessage, toError } from '../../shared/error-utils.js';
|
|
13
|
+
import { measuredCoverageSummary } from '../../domains/quality-assessment/coverage-report-event.js';
|
|
13
14
|
// ============================================================================
|
|
14
15
|
// Protocol Events
|
|
15
16
|
// ============================================================================
|
|
@@ -402,12 +403,14 @@ export class QualityGateProtocol {
|
|
|
402
403
|
async getCoverageMetrics(_releaseCandidate) {
|
|
403
404
|
try {
|
|
404
405
|
// Try to get latest coverage data from memory
|
|
405
|
-
|
|
406
|
+
// #1014: only a measured record is coverage evidence; a legacy
|
|
407
|
+
// unstamped or estimated record is "no data" (the gate fails closed).
|
|
408
|
+
const latestCoverage = measuredCoverageSummary(await this.memory.get('coverage:latest'));
|
|
406
409
|
if (!latestCoverage) {
|
|
407
410
|
return null;
|
|
408
411
|
}
|
|
409
|
-
// Get previous coverage for trend
|
|
410
|
-
const previousCoverage = await this.memory.get('coverage:previous');
|
|
412
|
+
// Get previous coverage for trend (measured baselines only, #1015)
|
|
413
|
+
const previousCoverage = measuredCoverageSummary(await this.memory.get('coverage:previous'));
|
|
411
414
|
let trend = 'stable';
|
|
412
415
|
if (previousCoverage) {
|
|
413
416
|
const delta = latestCoverage.line - previousCoverage.line;
|
|
@@ -418,9 +421,10 @@ export class QualityGateProtocol {
|
|
|
418
421
|
}
|
|
419
422
|
return {
|
|
420
423
|
line: latestCoverage.line,
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
+
// An uncollected metric has no evidence: 0 fails its check closed.
|
|
425
|
+
branch: latestCoverage.branch ?? 0,
|
|
426
|
+
function: latestCoverage.function ?? 0,
|
|
427
|
+
statement: latestCoverage.statement ?? 0,
|
|
424
428
|
trend,
|
|
425
429
|
};
|
|
426
430
|
}
|
|
@@ -49,6 +49,11 @@ export interface TrendData {
|
|
|
49
49
|
export declare class ResultSaver {
|
|
50
50
|
private readonly baseDir;
|
|
51
51
|
private readonly resultsDir;
|
|
52
|
+
/**
|
|
53
|
+
* @param baseDir Store directory. Defaults to the resolved project's
|
|
54
|
+
* `.agentic-qe` (review of #1026 N2: a cwd-relative default wrote
|
|
55
|
+
* `<tmp>/.agentic-qe/results` when run from a shared dir).
|
|
56
|
+
*/
|
|
52
57
|
constructor(baseDir?: string);
|
|
53
58
|
/**
|
|
54
59
|
* Save task result in appropriate format(s)
|
|
@@ -71,12 +76,29 @@ export declare class ResultSaver {
|
|
|
71
76
|
private generateSecurityReport;
|
|
72
77
|
private generateQualityReport;
|
|
73
78
|
private ensureDirectories;
|
|
79
|
+
/** `YYYY-MM-DDTHH-MM-SS-mmm` (#1007: milliseconds, not seconds). */
|
|
74
80
|
private formatTimestamp;
|
|
81
|
+
/** Short task-id fragment plus random hex, unique per save. */
|
|
82
|
+
private uniqueSuffix;
|
|
83
|
+
/** Write `filePath` via a temp file and rename, replacing any previous version. */
|
|
84
|
+
private replaceFile;
|
|
85
|
+
/**
|
|
86
|
+
* Create `filePath` exclusively and record it. If the name is taken (a
|
|
87
|
+
* reused custom prefix), write to
|
|
88
|
+
* `name-1.ext`, `name-2.ext`, … instead of replacing the earlier file (#1007).
|
|
89
|
+
*/
|
|
90
|
+
private writeNewFile;
|
|
75
91
|
private sanitizeFilename;
|
|
76
92
|
private getTestExtension;
|
|
77
93
|
private createFileEntry;
|
|
78
94
|
private extractSummary;
|
|
95
|
+
/**
|
|
96
|
+
* Append to index.json. Concurrent saves read-modify-write the same file, so
|
|
97
|
+
* updates are serialized per index path in this process and the file is
|
|
98
|
+
* replaced atomically, otherwise one save's entry is lost (#1007).
|
|
99
|
+
*/
|
|
79
100
|
private updateIndex;
|
|
101
|
+
private writeIndexEntry;
|
|
80
102
|
}
|
|
81
103
|
export declare function createResultSaver(baseDir?: string): ResultSaver;
|
|
82
104
|
//# sourceMappingURL=result-saver.d.ts.map
|