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
|
@@ -8,8 +8,21 @@ import { LoggerFactory } from '../../../logging/index.js';
|
|
|
8
8
|
import { ok, err } from '../../../shared/types/index.js';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
10
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
11
|
-
import { writeQualityEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
11
|
+
import { writeQualityEvidence, writeTestRunEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
12
|
+
import { measuredCoverageSummary } from '../../quality-assessment/coverage-report-event.js';
|
|
12
13
|
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
14
|
+
import { collectedMetrics, collectedSummary, fileCoverageKey } from '../collected-metrics.js';
|
|
15
|
+
/**
|
|
16
|
+
* Whether an analyze request carries instrumented (measured) coverage (#1008).
|
|
17
|
+
* Fail-closed: an explicit `request.measured` wins; otherwise only data a
|
|
18
|
+
* producer marked `instrumented: true` is measured. Anything without
|
|
19
|
+
* provenance is analyzed and returned, but never persisted as evidence.
|
|
20
|
+
*/
|
|
21
|
+
export function isMeasuredCoverage(request) {
|
|
22
|
+
if (typeof request.measured === 'boolean')
|
|
23
|
+
return request.measured;
|
|
24
|
+
return request.coverageData.instrumented === true;
|
|
25
|
+
}
|
|
13
26
|
const DEFAULT_CONFIG = {
|
|
14
27
|
defaultThreshold: 80,
|
|
15
28
|
enableLLMAnalysis: true, // On by default - opt-out
|
|
@@ -66,22 +79,36 @@ export class CoverageAnalyzerService {
|
|
|
66
79
|
// Check if coverage meets threshold
|
|
67
80
|
const overallCoverage = this.calculateOverallCoverage(summary);
|
|
68
81
|
const meetsThreshold = overallCoverage >= threshold;
|
|
82
|
+
// #1008: only instrumented coverage is evidence. A static estimate is
|
|
83
|
+
// analyzed and returned to the caller, but never compared against or
|
|
84
|
+
// written over a measurement, and never stored where a quality gate,
|
|
85
|
+
// quality_assess or another reader would take it as measured.
|
|
86
|
+
const measured = isMeasuredCoverage(request);
|
|
87
|
+
// #1027 B2: a metric the report never collected is null wherever it is
|
|
88
|
+
// persisted or compared — never the 0 calculateMetrics yields for it.
|
|
89
|
+
const collected = collectedMetrics(coverageData.files);
|
|
90
|
+
const stored = collectedSummary(summary, collected);
|
|
69
91
|
// Calculate delta from previous coverage (if stored)
|
|
70
|
-
const delta = await this.calculateDelta(
|
|
92
|
+
const delta = measured ? await this.calculateDelta(stored) : undefined;
|
|
71
93
|
// Generate recommendations based on analysis
|
|
72
94
|
const recommendations = this.generateRecommendations(coverageData, summary, threshold);
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
95
|
+
if (measured) {
|
|
96
|
+
// Store current coverage for future delta calculations
|
|
97
|
+
await this.storeCoverageSnapshot(stored, request.runStatus, request.testRun);
|
|
98
|
+
// Store coverage vectors for similarity search + KV for quality-analyzer
|
|
99
|
+
if (request.includeFileDetails) {
|
|
100
|
+
await this.indexFileCoverageVectors(coverageData.files, request.projectRoot);
|
|
101
|
+
await this.storeFileCoverageKV(coverageData.files, request.projectRoot, request.runStatus);
|
|
102
|
+
}
|
|
79
103
|
}
|
|
80
104
|
return ok({
|
|
81
105
|
summary,
|
|
82
106
|
meetsThreshold,
|
|
83
107
|
delta,
|
|
84
108
|
recommendations,
|
|
109
|
+
measured,
|
|
110
|
+
collected,
|
|
111
|
+
...(request.runStatus ? { runStatus: request.runStatus } : {}),
|
|
85
112
|
});
|
|
86
113
|
}
|
|
87
114
|
catch (error) {
|
|
@@ -402,14 +429,20 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
|
|
|
402
429
|
}
|
|
403
430
|
async calculateDelta(current) {
|
|
404
431
|
try {
|
|
405
|
-
|
|
432
|
+
// #1015: only a measured baseline with finite figures is a baseline. A
|
|
433
|
+
// legacy unstamped record (e.g. the `{"files":0}` bridge echo removed in
|
|
434
|
+
// #1013) gave a NaN delta that was reported as "stable".
|
|
435
|
+
const previous = measuredCoverageSummary(await this.memory.get('coverage:latest'));
|
|
406
436
|
if (!previous) {
|
|
407
437
|
return undefined;
|
|
408
438
|
}
|
|
439
|
+
// A metric not collected on EITHER side has no delta (0 — never NaN,
|
|
440
|
+
// never a fake swing against an uncollected 0, #1027 B2).
|
|
441
|
+
const diff = (now, before) => (now === null || before === null ? 0 : now - before);
|
|
409
442
|
const lineDelta = current.line - previous.line;
|
|
410
|
-
const branchDelta = current.branch
|
|
411
|
-
const functionDelta = current.function
|
|
412
|
-
const statementDelta = current.statement
|
|
443
|
+
const branchDelta = diff(current.branch, previous.branch);
|
|
444
|
+
const functionDelta = diff(current.function, previous.function);
|
|
445
|
+
const statementDelta = diff(current.statement, previous.statement);
|
|
413
446
|
const avgDelta = (lineDelta + branchDelta + functionDelta + statementDelta) / 4;
|
|
414
447
|
let trend;
|
|
415
448
|
if (avgDelta > 0.5) {
|
|
@@ -433,22 +466,36 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
|
|
|
433
466
|
return undefined;
|
|
434
467
|
}
|
|
435
468
|
}
|
|
436
|
-
async storeCoverageSnapshot(summary) {
|
|
469
|
+
async storeCoverageSnapshot(summary, runStatus, testRun) {
|
|
437
470
|
try {
|
|
438
|
-
// Rotate: copy current coverage:latest → coverage:previous before
|
|
439
|
-
|
|
471
|
+
// Rotate: copy current coverage:latest → coverage:previous before
|
|
472
|
+
// overwriting — only a measured record (#1015): legacy junk is dropped,
|
|
473
|
+
// never promoted to the baseline.
|
|
474
|
+
const existing = measuredCoverageSummary(await this.memory.get('coverage:latest'));
|
|
440
475
|
if (existing) {
|
|
441
476
|
await this.memory.set('coverage:previous', existing, { persist: true });
|
|
442
477
|
}
|
|
443
|
-
// Store latest snapshot
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
478
|
+
// Store latest snapshot, stamped with its provenance (#1008). Only
|
|
479
|
+
// measured coverage reaches this method.
|
|
480
|
+
// #1027: uncollected metrics are null; runStatus says if tests failed (N4).
|
|
481
|
+
const record = { ...summary, measured: true, ...(runStatus ? { runStatus } : {}) };
|
|
482
|
+
await this.memory.set('coverage:latest', record, { persist: true });
|
|
483
|
+
if (testRun) {
|
|
484
|
+
// #1027 NB1: the run's testsPassing and coverage, under one runId.
|
|
485
|
+
await writeTestRunEvidence(this.memory, testRun, { source: 'coverage-analysis', coverage: summary.line });
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
// No counts: a failing run's coverage carries runStatus but no runId,
|
|
489
|
+
// so the gate will not pair it with any testsPassing (fail-closed).
|
|
490
|
+
await writeQualityEvidence(this.memory, { coverage: summary.line }, {
|
|
491
|
+
measuredAt: new Date().toISOString(),
|
|
492
|
+
source: 'coverage-analysis',
|
|
493
|
+
...(runStatus ? { runStatus } : {}),
|
|
494
|
+
});
|
|
495
|
+
}
|
|
449
496
|
// Store historical snapshot
|
|
450
497
|
const timestamp = Date.now();
|
|
451
|
-
await this.memory.set(`coverage:history:${timestamp}`,
|
|
498
|
+
await this.memory.set(`coverage:history:${timestamp}`, record, {
|
|
452
499
|
persist: true,
|
|
453
500
|
namespace: 'coverage-history',
|
|
454
501
|
});
|
|
@@ -462,22 +509,22 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
|
|
|
462
509
|
* and defect-predictor can read it with memory.get().
|
|
463
510
|
* (The vector index via storeVector is kept for similarity search.)
|
|
464
511
|
*/
|
|
465
|
-
async storeFileCoverageKV(files) {
|
|
512
|
+
async storeFileCoverageKV(files, projectRoot, runStatus) {
|
|
466
513
|
for (const file of files) {
|
|
467
514
|
try {
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
515
|
+
// #1014: a metric with no data is null (not collected), never 0%.
|
|
516
|
+
const pct = (m) => m.total > 0 ? Math.round((m.covered / m.total) * 10000) / 100 : null;
|
|
517
|
+
if (file.lines.total === 0)
|
|
518
|
+
continue;
|
|
519
|
+
// #1014: stamped, so readers can tell it from legacy unstamped
|
|
520
|
+
// estimate records written by <= 3.15.4.
|
|
521
|
+
await this.memory.set(`coverage:file:${fileCoverageKey(file.path, projectRoot)}`, {
|
|
522
|
+
line: pct(file.lines),
|
|
523
|
+
branch: pct(file.branches),
|
|
524
|
+
function: pct(file.functions),
|
|
525
|
+
statement: pct(file.statements),
|
|
526
|
+
measured: true,
|
|
527
|
+
...(runStatus ? { runStatus } : {}),
|
|
481
528
|
}, { persist: true });
|
|
482
529
|
}
|
|
483
530
|
catch {
|
|
@@ -485,12 +532,12 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
|
|
|
485
532
|
}
|
|
486
533
|
}
|
|
487
534
|
}
|
|
488
|
-
async indexFileCoverageVectors(files) {
|
|
535
|
+
async indexFileCoverageVectors(files, projectRoot) {
|
|
489
536
|
for (const file of files) {
|
|
490
537
|
try {
|
|
491
538
|
// Create a vector representation of the file coverage
|
|
492
539
|
const embedding = this.createCoverageEmbedding(file);
|
|
493
|
-
await this.memory.storeVector(`coverage:file:${file.path}`, embedding, {
|
|
540
|
+
await this.memory.storeVector(`coverage:file:${fileCoverageKey(file.path, projectRoot)}`, embedding, {
|
|
494
541
|
path: file.path,
|
|
495
542
|
lineCoverage: file.lines.covered / (file.lines.total || 1),
|
|
496
543
|
branchCoverage: file.branches.covered / (file.branches.total || 1),
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { LoggerFactory } from '../../../logging/index.js';
|
|
8
8
|
import { ok, err } from '../../../shared/types/index.js';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
|
+
import { isMeasuredGapRequest, } from '../interfaces.js';
|
|
10
11
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
11
12
|
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
12
13
|
import { createSafeRecord } from '../../../shared/utils/safe-record.js';
|
|
@@ -238,8 +239,12 @@ Return JSON in this exact format:
|
|
|
238
239
|
const prioritizedGaps = this.prioritizeGaps(gaps, prioritize);
|
|
239
240
|
// Calculate estimated effort
|
|
240
241
|
const estimatedEffort = this.calculateTotalEffort(prioritizedGaps);
|
|
241
|
-
// Store gap patterns for learning
|
|
242
|
-
|
|
242
|
+
// Store gap patterns for learning — only gaps in MEASURED coverage
|
|
243
|
+
// (#1014). A gap from a static estimate is a hypothesis: returned to the
|
|
244
|
+
// caller, never persisted as a gap-pattern vector.
|
|
245
|
+
if (isMeasuredGapRequest(request)) {
|
|
246
|
+
await this.storeGapPatterns(prioritizedGaps);
|
|
247
|
+
}
|
|
243
248
|
return ok({
|
|
244
249
|
gaps: prioritizedGaps,
|
|
245
250
|
totalUncoveredLines,
|
|
@@ -9,6 +9,7 @@ import { DefectPredictorService, } from './services/defect-predictor.js';
|
|
|
9
9
|
import { PatternLearnerService, } from './services/pattern-learner.js';
|
|
10
10
|
import { toError } from '../../shared/error-utils.js';
|
|
11
11
|
import { RootCauseAnalyzerService, } from './services/root-cause-analyzer.js';
|
|
12
|
+
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
12
13
|
/**
|
|
13
14
|
* Defect Intelligence Domain Plugin
|
|
14
15
|
* Provides ML-based defect prediction and analysis capabilities
|
|
@@ -307,6 +308,9 @@ export class DefectIntelligencePlugin extends BaseDomainPlugin {
|
|
|
307
308
|
}
|
|
308
309
|
}
|
|
309
310
|
async handleCoverageGap(event) {
|
|
311
|
+
// #1014: only a gap found in MEASURED coverage is acted on / learned from.
|
|
312
|
+
if (!isMeasuredGapPayload(event.payload))
|
|
313
|
+
return;
|
|
310
314
|
// Coverage gap detected - assess defect risk
|
|
311
315
|
const payload = event.payload;
|
|
312
316
|
// High risk coverage gaps indicate defect-prone areas
|
|
@@ -14,6 +14,7 @@ import { TypeScriptParser } from '../../../shared/parsers/index.js';
|
|
|
14
14
|
import { toError } from '../../../shared/error-utils.js';
|
|
15
15
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
16
16
|
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
17
|
+
import { measuredCoverageSummary, measuredFileCoverage } from '../../quality-assessment/coverage-report-event.js';
|
|
17
18
|
// LLMDefectAnalysis is imported from ../interfaces
|
|
18
19
|
const DEFAULT_CONFIG = {
|
|
19
20
|
defaultThreshold: 0.5,
|
|
@@ -590,14 +591,15 @@ Be specific and actionable. Focus on concrete issues, not generic advice.`,
|
|
|
590
591
|
async getTestCoverage(file) {
|
|
591
592
|
try {
|
|
592
593
|
// Try per-file coverage (written by coverage-analyzer and test-executor)
|
|
593
|
-
|
|
594
|
-
|
|
594
|
+
// #1014: only measured records; legacy unstamped estimates are ignored.
|
|
595
|
+
const fileCoverage = measuredFileCoverage(await this.memory.get(`coverage:file:${file}`));
|
|
596
|
+
if (fileCoverage) {
|
|
595
597
|
// Invert: low coverage = high defect risk
|
|
596
598
|
return 1 - fileCoverage.line / 100;
|
|
597
599
|
}
|
|
598
600
|
// Fall back to project-wide coverage
|
|
599
|
-
const summary = await this.memory.get('coverage:latest');
|
|
600
|
-
if (summary
|
|
601
|
+
const summary = measuredCoverageSummary(await this.memory.get('coverage:latest'));
|
|
602
|
+
if (summary) {
|
|
601
603
|
return 1 - summary.line / 100;
|
|
602
604
|
}
|
|
603
605
|
}
|
|
@@ -18,6 +18,7 @@ import { BaseDomainCoordinator, } from '../base-domain-coordinator.js';
|
|
|
18
18
|
// CQ-004: Extracted modules
|
|
19
19
|
import * as LearningHelpers from './coordinator-helpers.js';
|
|
20
20
|
import * as ConsensusHelpers from './coordinator-consensus.js';
|
|
21
|
+
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
21
22
|
const DEFAULT_CONFIG = {
|
|
22
23
|
maxConcurrentWorkflows: 3,
|
|
23
24
|
defaultTimeout: 120000, // 2 minutes
|
|
@@ -958,6 +959,9 @@ export class LearningOptimizationCoordinator extends BaseDomainCoordinator {
|
|
|
958
959
|
});
|
|
959
960
|
}
|
|
960
961
|
async handleCoverageGap(event) {
|
|
962
|
+
// #1014: only a gap found in MEASURED coverage is acted on / learned from.
|
|
963
|
+
if (!isMeasuredGapPayload(event.payload))
|
|
964
|
+
return;
|
|
961
965
|
// Record as experience for learning
|
|
962
966
|
const { gapId, file, riskScore } = event.payload;
|
|
963
967
|
await this.learningService.recordExperience({
|
|
@@ -7,6 +7,7 @@ import { BaseDomainPlugin } from '../domain-interface.js';
|
|
|
7
7
|
import { LearningOptimizationCoordinator, } from './coordinator.js';
|
|
8
8
|
import { toError } from '../../shared/error-utils.js';
|
|
9
9
|
import { LearningCoordinatorService, TransferSpecialistService, MetricsOptimizerService, ProductionIntelService, } from './services/index.js';
|
|
10
|
+
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
10
11
|
/**
|
|
11
12
|
* Learning & Optimization Domain Plugin
|
|
12
13
|
* Provides cross-domain learning, pattern extraction, and strategy optimization
|
|
@@ -439,6 +440,9 @@ export class LearningOptimizationPlugin extends BaseDomainPlugin {
|
|
|
439
440
|
await this.productionIntel.recordMetric('test_success_rate', successRate, 'ratio', 'test-execution', ['automated']);
|
|
440
441
|
}
|
|
441
442
|
async handleCoverageGap(event) {
|
|
443
|
+
// #1014: only a gap found in MEASURED coverage is acted on / learned from.
|
|
444
|
+
if (!isMeasuredGapPayload(event.payload))
|
|
445
|
+
return;
|
|
442
446
|
const payload = event.payload;
|
|
443
447
|
await this.learningService.recordExperience({
|
|
444
448
|
agentId: {
|
|
@@ -104,7 +104,8 @@ export function convertToQEReport(report, type) {
|
|
|
104
104
|
},
|
|
105
105
|
});
|
|
106
106
|
}
|
|
107
|
-
|
|
107
|
+
// #996: -1 means coverage was not measured; it is not a "-1%" coverage claim.
|
|
108
|
+
if (report.score.coverage >= 0 && report.score.coverage < 80) {
|
|
108
109
|
claims.push({
|
|
109
110
|
id: `coverage-${Date.now()}`,
|
|
110
111
|
type: 'coverage-claim',
|
|
@@ -11,6 +11,20 @@ import { PersistentSONAEngine } from '../../integrations/ruvector/sona-persisten
|
|
|
11
11
|
import { QEFlashAttention } from '../../integrations/ruvector/wrappers';
|
|
12
12
|
import type { GateEvaluationRequest, GateResult, QualityAnalysisRequest, QualityReport, QualityMetrics } from './interfaces';
|
|
13
13
|
import type { DreamCycleCompletedPayload } from '../../shared/events/domain-events';
|
|
14
|
+
import type { QualityScore } from '../../shared/types';
|
|
15
|
+
/**
|
|
16
|
+
* Score features with unmeasured (-1) fields masked to 0, followed by one
|
|
17
|
+
* presence flag per field (1 = measured, 0 = not), so a learner can tell
|
|
18
|
+
* "unmeasured" apart from a measured 0.
|
|
19
|
+
*/
|
|
20
|
+
export declare function maskedScoreFeatures(score: QualityScore, scale?: number): number[];
|
|
21
|
+
/**
|
|
22
|
+
* True when an analysis report has no verdict to learn from: a requested
|
|
23
|
+
* metric was not measured, or nothing was measured at all.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isInsufficientQualityReport(report: QualityReport): boolean;
|
|
26
|
+
/** True when a gate request carries any unmeasured (negative or non-finite) metric. */
|
|
27
|
+
export declare function hasUnmeasuredGateMetrics(metrics: QualityMetrics): boolean;
|
|
14
28
|
/**
|
|
15
29
|
* RL-trained thresholds result
|
|
16
30
|
*/
|
|
@@ -9,6 +9,39 @@ import { toErrorMessage } from '../../shared/error-utils.js';
|
|
|
9
9
|
import { ActorCriticAlgorithm } from '../../integrations/rl-suite/algorithms/actor-critic.js';
|
|
10
10
|
import { createPersistentSONAEngine } from '../../integrations/ruvector/sona-persistence.js';
|
|
11
11
|
import { createQEFlashAttention, } from '../../integrations/ruvector/wrappers.js';
|
|
12
|
+
import { isMeasuredMetricValue } from './evidence-sufficiency.js';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// #1002: unmeasured values never reach a learner as numbers
|
|
15
|
+
// ============================================================================
|
|
16
|
+
/** Score fields in the fixed order every quality feature vector uses. */
|
|
17
|
+
const SCORE_FIELDS = ['overall', 'coverage', 'complexity', 'maintainability', 'security'];
|
|
18
|
+
/**
|
|
19
|
+
* Score features with unmeasured (-1) fields masked to 0, followed by one
|
|
20
|
+
* presence flag per field (1 = measured, 0 = not), so a learner can tell
|
|
21
|
+
* "unmeasured" apart from a measured 0.
|
|
22
|
+
*/
|
|
23
|
+
export function maskedScoreFeatures(score, scale = 1) {
|
|
24
|
+
const values = SCORE_FIELDS.map((field) => score[field]);
|
|
25
|
+
return [
|
|
26
|
+
...values.map((value) => (isMeasuredMetricValue(value) ? value / scale : 0)),
|
|
27
|
+
...values.map((value) => (isMeasuredMetricValue(value) ? 1 : 0)),
|
|
28
|
+
];
|
|
29
|
+
}
|
|
30
|
+
/** Score fields carrying the unmeasured sentinel. */
|
|
31
|
+
function unmeasuredScoreFields(score) {
|
|
32
|
+
return SCORE_FIELDS.filter((field) => !isMeasuredMetricValue(score[field]));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* True when an analysis report has no verdict to learn from: a requested
|
|
36
|
+
* metric was not measured, or nothing was measured at all.
|
|
37
|
+
*/
|
|
38
|
+
export function isInsufficientQualityReport(report) {
|
|
39
|
+
return (report.unmeasured?.length ?? 0) > 0 || !isMeasuredMetricValue(report.score.overall);
|
|
40
|
+
}
|
|
41
|
+
/** True when a gate request carries any unmeasured (negative or non-finite) metric. */
|
|
42
|
+
export function hasUnmeasuredGateMetrics(metrics) {
|
|
43
|
+
return Object.values(metrics).some((value) => !isMeasuredMetricValue(value));
|
|
44
|
+
}
|
|
12
45
|
/**
|
|
13
46
|
* Initialize Actor-Critic RL for quality gate threshold tuning
|
|
14
47
|
*/
|
|
@@ -74,6 +107,9 @@ export async function initializeFlashAttention() {
|
|
|
74
107
|
* Use Actor-Critic RL to predict optimal quality gate thresholds
|
|
75
108
|
*/
|
|
76
109
|
export async function tuneThresholdsWithRL(actorCritic, metrics) {
|
|
110
|
+
// #1002: never predict from unmeasured inputs; keep the canonical thresholds.
|
|
111
|
+
if (hasUnmeasuredGateMetrics(metrics))
|
|
112
|
+
return null;
|
|
77
113
|
try {
|
|
78
114
|
const state = {
|
|
79
115
|
id: `quality-state-${Date.now()}`,
|
|
@@ -129,6 +165,9 @@ export function applyActionToThresholds(thresholds, action) {
|
|
|
129
165
|
* Train Actor-Critic with quality gate evaluation results
|
|
130
166
|
*/
|
|
131
167
|
export async function trainActorCritic(actorCritic, request, result) {
|
|
168
|
+
// #1002: an experience built from unmeasured inputs teaches the critic fake data.
|
|
169
|
+
if (hasUnmeasuredGateMetrics(request.metrics))
|
|
170
|
+
return;
|
|
132
171
|
try {
|
|
133
172
|
const state = {
|
|
134
173
|
id: `quality-state-${Date.now()}`,
|
|
@@ -177,6 +216,9 @@ export async function trainActorCritic(actorCritic, request, result) {
|
|
|
177
216
|
* Store quality gate pattern in SONA for learning
|
|
178
217
|
*/
|
|
179
218
|
export async function storeQualityPattern(qesona, request, result, domainName) {
|
|
219
|
+
// #1002: no gate pattern from unmeasured inputs.
|
|
220
|
+
if (hasUnmeasuredGateMetrics(request.metrics))
|
|
221
|
+
return;
|
|
180
222
|
try {
|
|
181
223
|
const state = {
|
|
182
224
|
id: `quality-state-${Date.now()}`,
|
|
@@ -212,14 +254,15 @@ export async function storeQualityPattern(qesona, request, result, domainName) {
|
|
|
212
254
|
* Store quality analysis pattern in SONA
|
|
213
255
|
*/
|
|
214
256
|
export async function storeQualityAnalysisPattern(qesona, request, report, domainName) {
|
|
257
|
+
// #1002: an insufficient-evidence run has no verdict — neither a success
|
|
258
|
+
// nor a failure pattern may be recorded from it.
|
|
259
|
+
if (isInsufficientQualityReport(report))
|
|
260
|
+
return;
|
|
215
261
|
try {
|
|
216
262
|
const state = {
|
|
217
263
|
id: `quality-analysis-${Date.now()}`,
|
|
218
264
|
features: [
|
|
219
|
-
report.score
|
|
220
|
-
report.score.coverage,
|
|
221
|
-
report.score.complexity,
|
|
222
|
-
report.score.maintainability,
|
|
265
|
+
...maskedScoreFeatures(report.score),
|
|
223
266
|
report.metrics.length,
|
|
224
267
|
request.sourceFiles.length,
|
|
225
268
|
],
|
|
@@ -235,6 +278,8 @@ export async function storeQualityAnalysisPattern(qesona, request, report, domai
|
|
|
235
278
|
}, 'quality-assessment', domainName, {
|
|
236
279
|
sourceFileCount: request.sourceFiles.length,
|
|
237
280
|
recommendationCount: report.recommendations.length,
|
|
281
|
+
// Score fields outside the requested scope, masked to 0 in features.
|
|
282
|
+
unmeasuredScoreFields: unmeasuredScoreFields(report.score),
|
|
238
283
|
});
|
|
239
284
|
}
|
|
240
285
|
catch (error) {
|
|
@@ -248,12 +293,8 @@ export async function enhanceWithSimilarityPatterns(report, flashAttention, qeso
|
|
|
248
293
|
try {
|
|
249
294
|
const state = {
|
|
250
295
|
id: `similarity-search-${Date.now()}`,
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
report.score.coverage,
|
|
254
|
-
report.score.complexity,
|
|
255
|
-
report.score.maintainability,
|
|
256
|
-
],
|
|
296
|
+
// #1002: -1 (unmeasured) is masked, never matched as a value.
|
|
297
|
+
features: maskedScoreFeatures(report.score),
|
|
257
298
|
};
|
|
258
299
|
const adaptation = await qesona.adaptPattern(state, 'quality-assessment', domainName);
|
|
259
300
|
if (!adaptation.success || !adaptation.pattern) {
|
|
@@ -286,13 +327,10 @@ export async function enhanceWithSimilarityPatterns(report, flashAttention, qeso
|
|
|
286
327
|
* Create embedding from quality metrics for similarity search
|
|
287
328
|
*/
|
|
288
329
|
export function createMetricsEmbedding(report) {
|
|
330
|
+
// #1002: unmeasured score fields are masked (was security -1 / 100 = -0.01).
|
|
289
331
|
const features = [
|
|
290
|
-
report.score
|
|
291
|
-
report.
|
|
292
|
-
report.score.complexity / 100,
|
|
293
|
-
report.score.maintainability / 100,
|
|
294
|
-
report.score.security / 100,
|
|
295
|
-
...report.metrics.map(m => m.value / 100),
|
|
332
|
+
...maskedScoreFeatures(report.score, 100),
|
|
333
|
+
...report.metrics.map(m => (isMeasuredMetricValue(m.value) ? m.value / 100 : 0)),
|
|
296
334
|
];
|
|
297
335
|
while (features.length < 384) {
|
|
298
336
|
features.push(0);
|
|
@@ -33,6 +33,7 @@ import { DEFAULT_RATCHET_CONFIG, } from './coherence/types.js';
|
|
|
33
33
|
import { getWitnessChain } from '../../audit/witness-chain.js';
|
|
34
34
|
// Three-loop feature flag for instantAdapt protocol
|
|
35
35
|
import { isSONAThreeLoopEnabled } from '../../integrations/ruvector/feature-flags.js';
|
|
36
|
+
import { measuredCoverageSummary } from './coverage-report-event.js';
|
|
36
37
|
// CQ-002: Base domain coordinator
|
|
37
38
|
import { BaseDomainCoordinator, } from '../base-domain-coordinator.js';
|
|
38
39
|
const DEFAULT_CONFIG = {
|
|
@@ -243,8 +244,10 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
|
|
|
243
244
|
}
|
|
244
245
|
// Success path
|
|
245
246
|
this.completeWorkflow(workflowId);
|
|
246
|
-
// Three-loop protocol: instantAdapt must precede recordOutcome
|
|
247
|
-
|
|
247
|
+
// Three-loop protocol: instantAdapt must precede recordOutcome.
|
|
248
|
+
// #1002: unmeasured (-1) gate inputs are never fed to the learner.
|
|
249
|
+
if (isSONAThreeLoopEnabled() && this.qesona?.isThreeLoopEnabled()
|
|
250
|
+
&& !RLIntegration.hasUnmeasuredGateMetrics(effectiveRequest.metrics)) {
|
|
248
251
|
const m = effectiveRequest.metrics;
|
|
249
252
|
this.qesona.instantAdapt([
|
|
250
253
|
m.coverage / 100,
|
|
@@ -383,8 +386,10 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
|
|
|
383
386
|
result.value = enhanced;
|
|
384
387
|
}
|
|
385
388
|
}
|
|
389
|
+
// #1002: an insufficient-evidence run has no verdict to learn from.
|
|
390
|
+
const learnable = !RLIntegration.isInsufficientQualityReport(result.value);
|
|
386
391
|
// Three-loop protocol: instantAdapt must precede recordOutcome
|
|
387
|
-
if (isSONAThreeLoopEnabled() && this.qesona?.isThreeLoopEnabled()) {
|
|
392
|
+
if (learnable && isSONAThreeLoopEnabled() && this.qesona?.isThreeLoopEnabled()) {
|
|
388
393
|
const score = result.value.score;
|
|
389
394
|
this.qesona.instantAdapt([
|
|
390
395
|
score.overall / 100,
|
|
@@ -404,12 +409,12 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
|
|
|
404
409
|
}
|
|
405
410
|
catch { /* must not break main flow */ }
|
|
406
411
|
}
|
|
407
|
-
// Store quality pattern in SONA
|
|
412
|
+
// Store quality pattern in SONA (skipped inside for insufficient evidence)
|
|
408
413
|
if (this.config.enableSONAPatternLearning && this.qesona) {
|
|
409
414
|
await this.storeQualityAnalysisPattern(request, result.value);
|
|
410
415
|
}
|
|
411
|
-
// Auto-trigger gate evaluation if enabled
|
|
412
|
-
if (this.config.enableAutoGating && result.value.score.overall < 70) {
|
|
416
|
+
// Auto-trigger gate evaluation if enabled (-1 = not measured, not a low score)
|
|
417
|
+
if (this.config.enableAutoGating && result.value.score.overall >= 0 && result.value.score.overall < 70) {
|
|
413
418
|
// Store for downstream consumption
|
|
414
419
|
await this.memory.set(`quality-assessment:auto-gate:${workflowId}`, { score: result.value.score, recommendations: result.value.recommendations }, { namespace: 'quality-assessment', ttl: 3600 });
|
|
415
420
|
}
|
|
@@ -819,15 +824,14 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
|
|
|
819
824
|
}
|
|
820
825
|
async handleCoverageReportCreated(event) {
|
|
821
826
|
// Store coverage data for quality assessment
|
|
822
|
-
|
|
827
|
+
// #1008: only a report explicitly marked measured is coverage evidence.
|
|
828
|
+
// Estimates and look-alike events with no coverage figures (e.g. bridged
|
|
829
|
+
// captured experiences) must never touch `coverage:latest`.
|
|
830
|
+
const summary = measuredCoverageSummary(event.payload);
|
|
831
|
+
if (!summary)
|
|
832
|
+
return;
|
|
823
833
|
// Store under the canonical coverage key so quality-analyzer can read it
|
|
824
|
-
await this.memory.set('coverage:latest', {
|
|
825
|
-
line: payload.line,
|
|
826
|
-
branch: payload.branch,
|
|
827
|
-
function: 0,
|
|
828
|
-
statement: 0,
|
|
829
|
-
files: 0,
|
|
830
|
-
}, { persist: true });
|
|
834
|
+
await this.memory.set('coverage:latest', summary, { persist: true });
|
|
831
835
|
}
|
|
832
836
|
async handleSecurityAuditCompleted(event) {
|
|
833
837
|
// Store security findings for deployment decisions
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation of measured coverage records (#1008, #1014, #1015).
|
|
3
|
+
*
|
|
4
|
+
* Used for `coverage-analysis.CoverageReportCreated` payloads before the
|
|
5
|
+
* quality-assessment domain stores them as `coverage:latest`, and by every
|
|
6
|
+
* reader of the stored records (`coverage:latest`, `coverage:previous`,
|
|
7
|
+
* `coverage:file:*`).
|
|
8
|
+
*
|
|
9
|
+
* Only a record its producer explicitly marked `measured: true`, carrying
|
|
10
|
+
* finite coverage figures, is coverage evidence. Anything else — a static
|
|
11
|
+
* estimate, a legacy record without provenance (written by <= 3.15.4, or the
|
|
12
|
+
* `{"files":0}` bridge echo removed in #1013), or a look-alike with no coverage
|
|
13
|
+
* figures at all — is ignored rather than read as a measurement or as zeros.
|
|
14
|
+
*/
|
|
15
|
+
/** The `coverage:latest` record written from a measured coverage report. */
|
|
16
|
+
export interface MeasuredCoverageSummary {
|
|
17
|
+
line: number;
|
|
18
|
+
/** `null` = the report collected no branch data (not 0%, #1015). */
|
|
19
|
+
branch: number | null;
|
|
20
|
+
/** `null` = the report collected no function data (not 0%, #1015). */
|
|
21
|
+
function: number | null;
|
|
22
|
+
/** `null` = the report collected no statement data (lcov, Cobertura; #1027). */
|
|
23
|
+
statement: number | null;
|
|
24
|
+
files: number;
|
|
25
|
+
/** Provenance stamp: this record came from instrumented coverage. */
|
|
26
|
+
measured: true;
|
|
27
|
+
/** Outcome of the test run behind the record, when known (#1027 N4). */
|
|
28
|
+
runStatus?: 'passed' | 'failed';
|
|
29
|
+
}
|
|
30
|
+
/** A per-file `coverage:file:<path>` record written from measured coverage. */
|
|
31
|
+
export interface MeasuredFileCoverage {
|
|
32
|
+
line: number;
|
|
33
|
+
branch: number | null;
|
|
34
|
+
function: number | null;
|
|
35
|
+
statement: number | null;
|
|
36
|
+
measured: true;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Return the measured summary to store, or `null` when the payload is not
|
|
40
|
+
* measured coverage evidence.
|
|
41
|
+
*/
|
|
42
|
+
export declare function measuredCoverageSummary(payload: unknown): MeasuredCoverageSummary | null;
|
|
43
|
+
/**
|
|
44
|
+
* Return a stored per-file coverage record when it is measured evidence, or
|
|
45
|
+
* `null` (#1014): legacy unstamped `coverage:file:*` records — static
|
|
46
|
+
* estimates written by <= 3.15.4 never expire — must not be read as coverage.
|
|
47
|
+
*/
|
|
48
|
+
export declare function measuredFileCoverage(record: unknown): MeasuredFileCoverage | null;
|
|
49
|
+
//# sourceMappingURL=coverage-report-event.d.ts.map
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation of measured coverage records (#1008, #1014, #1015).
|
|
3
|
+
*
|
|
4
|
+
* Used for `coverage-analysis.CoverageReportCreated` payloads before the
|
|
5
|
+
* quality-assessment domain stores them as `coverage:latest`, and by every
|
|
6
|
+
* reader of the stored records (`coverage:latest`, `coverage:previous`,
|
|
7
|
+
* `coverage:file:*`).
|
|
8
|
+
*
|
|
9
|
+
* Only a record its producer explicitly marked `measured: true`, carrying
|
|
10
|
+
* finite coverage figures, is coverage evidence. Anything else — a static
|
|
11
|
+
* estimate, a legacy record without provenance (written by <= 3.15.4, or the
|
|
12
|
+
* `{"files":0}` bridge echo removed in #1013), or a look-alike with no coverage
|
|
13
|
+
* figures at all — is ignored rather than read as a measurement or as zeros.
|
|
14
|
+
*/
|
|
15
|
+
const isPercent = (v) => typeof v === 'number' && Number.isFinite(v) && v >= 0 && v <= 100;
|
|
16
|
+
/** A percentage, or `null` for a metric that was not collected. */
|
|
17
|
+
const isPercentOrNull = (v) => v === null || isPercent(v);
|
|
18
|
+
/**
|
|
19
|
+
* Return the measured summary to store, or `null` when the payload is not
|
|
20
|
+
* measured coverage evidence.
|
|
21
|
+
*/
|
|
22
|
+
export function measuredCoverageSummary(payload) {
|
|
23
|
+
if (!payload || typeof payload !== 'object')
|
|
24
|
+
return null;
|
|
25
|
+
const p = payload;
|
|
26
|
+
if (p.measured !== true)
|
|
27
|
+
return null;
|
|
28
|
+
if (!isPercent(p.line) || !isPercentOrNull(p.statement) || !isPercentOrNull(p.branch) || !isPercentOrNull(p.function)) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const files = typeof p.files === 'number' && Number.isInteger(p.files) && p.files >= 0 ? p.files : null;
|
|
32
|
+
if (files === null)
|
|
33
|
+
return null;
|
|
34
|
+
return {
|
|
35
|
+
line: p.line,
|
|
36
|
+
branch: p.branch,
|
|
37
|
+
function: p.function,
|
|
38
|
+
statement: p.statement,
|
|
39
|
+
files,
|
|
40
|
+
measured: true,
|
|
41
|
+
...(p.runStatus === 'passed' || p.runStatus === 'failed' ? { runStatus: p.runStatus } : {}),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Return a stored per-file coverage record when it is measured evidence, or
|
|
46
|
+
* `null` (#1014): legacy unstamped `coverage:file:*` records — static
|
|
47
|
+
* estimates written by <= 3.15.4 never expire — must not be read as coverage.
|
|
48
|
+
*/
|
|
49
|
+
export function measuredFileCoverage(record) {
|
|
50
|
+
if (!record || typeof record !== 'object')
|
|
51
|
+
return null;
|
|
52
|
+
const r = record;
|
|
53
|
+
if (r.measured !== true || !isPercent(r.line))
|
|
54
|
+
return null;
|
|
55
|
+
const opt = (v) => (isPercent(v) ? v : null);
|
|
56
|
+
return { line: r.line, branch: opt(r.branch), function: opt(r.function), statement: opt(r.statement), measured: true };
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=coverage-report-event.js.map
|