agentic-qe 3.15.16 → 3.15.18
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/helpers/brain-checkpoint.cjs +107 -10
- package/.claude/skills/agentic-quality-engineering/SKILL.md +67 -44
- package/.claude/skills/brutal-honesty-review/SKILL.md +12 -7
- package/.claude/skills/brutal-honesty-review/evals/brutal-honesty-review.yaml +120 -0
- package/.claude/skills/brutal-honesty-review/schemas/output.json +9 -3
- package/.claude/skills/code-review-quality/SKILL.md +2 -2
- package/.claude/skills/holistic-testing-pact/SKILL.md +11 -11
- package/.claude/skills/sherlock-review/SKILL.md +4 -2
- package/.claude/skills/sherlock-review/evals/sherlock-review.yaml +124 -0
- package/.claude/skills/skills-manifest.json +1 -1
- package/.claude/skills/technical-writing/SKILL.md +12 -6
- package/.claude/skills/technical-writing/evals/technical-writing.yaml +96 -0
- package/.opencode/skills/qe-agentic-quality-engineering.yaml +2 -2
- package/.opencode/skills/qe-holistic-testing-pact.yaml +2 -2
- package/CHANGELOG.md +201 -0
- package/assets/skills/agentic-quality-engineering/SKILL.md +67 -44
- package/assets/skills/brutal-honesty-review/SKILL.md +12 -8
- package/assets/skills/brutal-honesty-review/evals/brutal-honesty-review.yaml +120 -0
- package/assets/skills/brutal-honesty-review/schemas/output.json +9 -3
- package/assets/skills/code-review-quality/SKILL.md +2 -2
- package/assets/skills/holistic-testing-pact/SKILL.md +11 -11
- package/assets/skills/sherlock-review/SKILL.md +4 -3
- package/assets/skills/sherlock-review/evals/sherlock-review.yaml +124 -0
- package/assets/skills/skills-manifest.json +1 -1
- package/assets/skills/technical-writing/SKILL.md +12 -6
- package/assets/skills/technical-writing/evals/technical-writing.yaml +96 -0
- package/dist/cli/brain-commands.d.ts +5 -0
- package/dist/cli/brain-commands.js +4 -0
- package/dist/cli/bundle.js +6 -6
- package/dist/cli/chunks/adapter-WRSDXLOT.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-45NWEKVS.js → agent-booster-wasm-UFNJNF3M.js} +2 -2
- package/dist/cli/chunks/{agent-handler-LVHMYFEF.js → agent-handler-EAYVRJXN.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-YDWOJFEQ.js → agent-memory-branch-M65C6WAQ.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-O6NJBCCM.js +2 -0
- package/dist/cli/chunks/{arena-ELDZH3CZ.js → arena-2GDICP6R.js} +4 -4
- package/dist/cli/chunks/{arena-CZKHXDDS.js → arena-CG3X67OE.js} +2 -2
- package/dist/cli/chunks/{audit-5MT4T47Z.js → audit-F4FSPJPL.js} +3 -3
- package/dist/cli/chunks/base-J2FXOE77.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-6TGYPC2B.js → better-sqlite3-2MCFXW4J.js} +2 -2
- package/dist/cli/chunks/brain-handler-WGTJNYNB.js +95 -0
- package/dist/cli/chunks/{branch-enumerator-WVILM4SO.js → branch-enumerator-KL7C535H.js} +2 -2
- package/dist/cli/chunks/{browser-RX5ALU3H.js → browser-SJEXDVHS.js} +2 -2
- package/dist/cli/chunks/browser-workflow-LXGER6ZD.js +2 -0
- package/dist/cli/chunks/{chunk-2H4XH6FT.js → chunk-244RKAEP.js} +2 -2
- package/dist/cli/chunks/{chunk-SI6DPU5D.js → chunk-27TUMXPD.js} +1 -1
- package/dist/cli/chunks/{chunk-YNMJEDN5.js → chunk-2MBYDPCP.js} +2 -2
- package/dist/cli/chunks/{chunk-24QHCVX6.js → chunk-2Q6DTBMT.js} +1 -1
- package/dist/cli/chunks/{chunk-XWUWX7BV.js → chunk-355MI7RV.js} +13 -13
- package/dist/cli/chunks/{chunk-NQXXI77K.js → chunk-3LX5OKBD.js} +2 -2
- package/dist/cli/chunks/{chunk-63GMRQ25.js → chunk-3RPDKJGV.js} +1 -1
- package/dist/cli/chunks/chunk-3YMIT73A.js +4 -0
- package/dist/cli/chunks/{chunk-P3EYRILV.js → chunk-43KUVBSU.js} +2 -2
- package/dist/cli/chunks/chunk-477FKXSS.js +2 -0
- package/dist/cli/chunks/{chunk-HGWXF45W.js → chunk-4BIMTRRX.js} +1 -1
- package/dist/cli/chunks/{chunk-SSUAAX3F.js → chunk-4CVNVBX5.js} +2 -2
- package/dist/cli/chunks/{chunk-5V3TI2LG.js → chunk-4HL3SD4A.js} +1 -1
- package/dist/cli/chunks/{chunk-KKU2QGSJ.js → chunk-4PEG4DU2.js} +2 -2
- package/dist/cli/chunks/{chunk-J4ELZNLY.js → chunk-4QSQKFED.js} +2 -2
- package/dist/cli/chunks/chunk-53ZBETYR.js +16 -0
- package/dist/cli/chunks/{chunk-7TE5ONQQ.js → chunk-544KDWL4.js} +1 -1
- package/dist/cli/chunks/chunk-54RCGMLB.js +8 -0
- package/dist/cli/chunks/{chunk-KU2AUFGX.js → chunk-5AGXIZQ5.js} +2 -2
- package/dist/cli/chunks/{chunk-LQLPB2T6.js → chunk-5M24X6W7.js} +2 -2
- package/dist/cli/chunks/{chunk-YU2BDRSD.js → chunk-5O5T4LEU.js} +1 -1
- package/dist/cli/chunks/{chunk-NAEWCFQT.js → chunk-5RFXX4IF.js} +2 -2
- package/dist/cli/chunks/{chunk-MD43XRX5.js → chunk-62MLAQRJ.js} +1 -1
- package/dist/cli/chunks/{chunk-PEQDY4BO.js → chunk-6D6TGL2E.js} +2 -2
- package/dist/cli/chunks/{chunk-IOYG4VFL.js → chunk-6IHZDSDL.js} +2 -2
- package/dist/cli/chunks/{chunk-C5FP5GW3.js → chunk-6P3Y45QL.js} +2 -2
- package/dist/cli/chunks/{chunk-4LQFBY5L.js → chunk-6TEVM3X3.js} +10 -10
- package/dist/cli/chunks/{chunk-YPBSUGMI.js → chunk-7XTUKKRA.js} +1 -1
- package/dist/cli/chunks/chunk-A3GDX6UF.js +2 -0
- package/dist/cli/chunks/{chunk-HLUXXCHF.js → chunk-A5YTKKNA.js} +1 -1
- package/dist/cli/chunks/{chunk-Y4PFUMOU.js → chunk-ADNGZAT2.js} +1 -1
- package/dist/cli/chunks/{chunk-KNSRL6NO.js → chunk-AWQAE3SW.js} +2 -2
- package/dist/cli/chunks/{chunk-BY5OF7OH.js → chunk-AXDBQFR4.js} +2 -2
- package/dist/cli/chunks/{chunk-525CFDUE.js → chunk-AXVD7O3F.js} +2 -2
- package/dist/cli/chunks/{chunk-JHQCRRJI.js → chunk-B52ULNYO.js} +2 -2
- package/dist/cli/chunks/chunk-B6S4FC7M.js +3 -0
- package/dist/cli/chunks/{chunk-AJMJNQMP.js → chunk-BDVFSMOQ.js} +1 -1
- package/dist/cli/chunks/{chunk-DXD6K2ZP.js → chunk-BGXXMX3Y.js} +2 -2
- package/dist/cli/chunks/{chunk-EK7OLYOZ.js → chunk-BKMQQY5T.js} +2 -2
- package/dist/cli/chunks/{chunk-VWPM27GU.js → chunk-BN2FROBQ.js} +2 -2
- package/dist/cli/chunks/{chunk-J7I6PABJ.js → chunk-BO6EQNOC.js} +2 -2
- package/dist/cli/chunks/{chunk-4D4DENG6.js → chunk-BOVAKCDC.js} +2 -2
- package/dist/cli/chunks/{chunk-ZFL436FN.js → chunk-BSXKZDKO.js} +2 -2
- package/dist/cli/chunks/{chunk-J442IZLE.js → chunk-C5QVJ5XQ.js} +1 -1
- package/dist/cli/chunks/{chunk-ZB3LEFYG.js → chunk-CFQLLF3D.js} +2 -2
- package/dist/cli/chunks/{chunk-UHEOGZLX.js → chunk-DUCVLT3F.js} +7 -7
- package/dist/cli/chunks/{chunk-TVGI32MB.js → chunk-E4RMJCGA.js} +3 -3
- package/dist/cli/chunks/{chunk-TIUKLYAI.js → chunk-EONDCWY4.js} +1 -1
- package/dist/cli/chunks/{chunk-ZJH5MU2I.js → chunk-F4AGNKL2.js} +2 -2
- package/dist/cli/chunks/{chunk-N7HL5PHH.js → chunk-F6YD3BOW.js} +1 -1
- package/dist/cli/chunks/{chunk-5VZL4UVN.js → chunk-FQRS7WVA.js} +2 -2
- package/dist/cli/chunks/{chunk-SHKOCGNK.js → chunk-FT24SSDG.js} +2 -2
- package/dist/cli/chunks/chunk-FV4YNSAJ.js +5 -0
- package/dist/cli/chunks/{chunk-KXCLACFG.js → chunk-FVDM3X42.js} +2 -2
- package/dist/cli/chunks/{chunk-32BPDLRZ.js → chunk-FVH7TXWU.js} +2 -2
- package/dist/cli/chunks/{chunk-72XSEQMW.js → chunk-FWR5QY37.js} +2 -2
- package/dist/cli/chunks/chunk-FYINK2B7.js +6 -0
- package/dist/cli/chunks/{chunk-5JZRZI4S.js → chunk-GGISVPOZ.js} +2 -2
- package/dist/cli/chunks/{chunk-5LAVKGLH.js → chunk-GPIJIZJQ.js} +2 -2
- package/dist/cli/chunks/{chunk-5QO3R3TU.js → chunk-GXEVOT5F.js} +2 -2
- package/dist/cli/chunks/{chunk-IHRXZZQM.js → chunk-GZ4VB5RI.js} +1 -1
- package/dist/cli/chunks/chunk-HBDSCYSK.js +2 -0
- package/dist/cli/chunks/{chunk-GSKMOPL7.js → chunk-HGG4HR7C.js} +2 -2
- package/dist/cli/chunks/{chunk-AR67RJPY.js → chunk-HSCKWWO2.js} +2 -2
- package/dist/cli/chunks/{chunk-6XXZDV2C.js → chunk-HSQ3GUYJ.js} +2 -2
- package/dist/cli/chunks/{chunk-AAMLQ2LF.js → chunk-HZQBW5EM.js} +3 -3
- package/dist/cli/chunks/{chunk-O5W3FIO6.js → chunk-IGIYANVT.js} +2 -2
- package/dist/cli/chunks/{chunk-C6D5AHBO.js → chunk-IPWMSXBF.js} +2 -2
- package/dist/cli/chunks/{chunk-NDJ7P2EP.js → chunk-IWVNC7VY.js} +1 -1
- package/dist/cli/chunks/{chunk-FDDC72IA.js → chunk-IZODXKZD.js} +2 -2
- package/dist/cli/chunks/{chunk-NO3IV5Q5.js → chunk-J2MT2OJV.js} +1 -1
- package/dist/cli/chunks/{chunk-GQ6TUIKY.js → chunk-JKIJVVSP.js} +1 -1
- package/dist/cli/chunks/{chunk-LE4QJREF.js → chunk-JMRDT2XK.js} +1 -1
- package/dist/cli/chunks/{chunk-2YZ4G6NW.js → chunk-JR2UMTKG.js} +1 -1
- package/dist/cli/chunks/{chunk-RJIEG3NA.js → chunk-K6CH4CFF.js} +2 -2
- package/dist/cli/chunks/{chunk-5NNNEWLS.js → chunk-K7KW5QB5.js} +81 -88
- package/dist/cli/chunks/chunk-KFCQP434.js +2 -0
- package/dist/cli/chunks/{chunk-A5GBXCP5.js → chunk-KH4T6STG.js} +2 -2
- package/dist/cli/chunks/{chunk-VMDFFTCK.js → chunk-KJBYZO57.js} +1 -1
- package/dist/cli/chunks/{chunk-GJYHWYXR.js → chunk-KP4OKOKV.js} +2 -2
- package/dist/cli/chunks/chunk-L2MBKVSE.js +2 -0
- package/dist/cli/chunks/{chunk-XIQW7EFL.js → chunk-L3IPUIT3.js} +2 -2
- package/dist/cli/chunks/{chunk-W5HQUIML.js → chunk-L7PSU2YN.js} +2 -2
- package/dist/cli/chunks/{chunk-6DPYNAOK.js → chunk-LA3JPGQA.js} +2 -2
- package/dist/cli/chunks/{chunk-5PBLPQ5T.js → chunk-LC2QRN7V.js} +14 -13
- package/dist/cli/chunks/{chunk-SSYAQZXA.js → chunk-LHY7TMTM.js} +2 -2
- package/dist/cli/chunks/{chunk-QQWBWEJS.js → chunk-LLQ2UMF6.js} +3 -3
- package/dist/cli/chunks/{chunk-DTMAS2GB.js → chunk-LOJ7OO6W.js} +2 -2
- package/dist/cli/chunks/{chunk-32GN3JKR.js → chunk-LPUSH3VF.js} +1 -1
- package/dist/cli/chunks/{chunk-SDLWKRVL.js → chunk-LSEC2BU7.js} +2 -2
- package/dist/cli/chunks/{chunk-IOKYCMTJ.js → chunk-LTGB7OIU.js} +2 -2
- package/dist/cli/chunks/{chunk-6ZBXSOX6.js → chunk-LUG7YNVZ.js} +2 -2
- package/dist/cli/chunks/{chunk-CAKMOVZ6.js → chunk-LWAFRYKE.js} +2 -2
- package/dist/cli/chunks/{chunk-FLNAW7C4.js → chunk-M24ZAZ4U.js} +2 -2
- package/dist/cli/chunks/{chunk-L2DWPVNJ.js → chunk-MKRKRXTX.js} +1 -1
- package/dist/cli/chunks/{chunk-YTHTQPWR.js → chunk-MNNLONAD.js} +1 -1
- package/dist/cli/chunks/{chunk-V5NHZV7S.js → chunk-MQM37KAR.js} +2 -2
- package/dist/cli/chunks/{chunk-PPUZWYUG.js → chunk-MSX2OHYT.js} +2 -2
- package/dist/cli/chunks/{chunk-YRAX7SFJ.js → chunk-MVYQRVLP.js} +2 -2
- package/dist/cli/chunks/{chunk-QVDCVD5D.js → chunk-MZC5WM2P.js} +2 -2
- package/dist/cli/chunks/{chunk-S75SOOZL.js → chunk-MZRBNBB3.js} +2 -2
- package/dist/cli/chunks/{chunk-FL64OUBA.js → chunk-N3KQU4UC.js} +2 -2
- package/dist/cli/chunks/{chunk-G5RHFBAY.js → chunk-NKU3FFM4.js} +2 -2
- package/dist/cli/chunks/chunk-O5EWFR76.js +2 -0
- package/dist/cli/chunks/{chunk-63ZKI4PX.js → chunk-O5RDHD5T.js} +2 -2
- package/dist/cli/chunks/chunk-O6UWIXME.js +3 -0
- package/dist/cli/chunks/{chunk-HCH4Y6XX.js → chunk-OA4EQDC4.js} +2 -2
- package/dist/cli/chunks/{chunk-QPEOLAAS.js → chunk-OBCXCRXK.js} +1 -1
- package/dist/cli/chunks/{chunk-6ICX3FEG.js → chunk-OHU5P25N.js} +22 -22
- package/dist/cli/chunks/{chunk-GFWHUQSF.js → chunk-OOSV2RIA.js} +2 -2
- package/dist/cli/chunks/{chunk-MO55CVMT.js → chunk-OW23N2Y5.js} +14 -14
- package/dist/cli/chunks/{chunk-M7WJCTG3.js → chunk-OXOO3YDL.js} +2 -2
- package/dist/cli/chunks/{chunk-KQYJ4VQ5.js → chunk-OYGKSSSI.js} +1 -1
- package/dist/cli/chunks/chunk-PGO46IIW.js +2 -0
- package/dist/cli/chunks/{chunk-NVEWF4JV.js → chunk-PZOYQHWS.js} +1 -1
- package/dist/cli/chunks/{chunk-IESR7TNB.js → chunk-Q2BZSG7Z.js} +2 -2
- package/dist/cli/chunks/{chunk-XIIQ5QTT.js → chunk-Q7V722K5.js} +2 -2
- package/dist/cli/chunks/{chunk-F742SZAX.js → chunk-QZU6M5IO.js} +2 -2
- package/dist/cli/chunks/{chunk-PINSJCM3.js → chunk-R55Y76SJ.js} +1 -1
- package/dist/cli/chunks/{chunk-5B5QPCNU.js → chunk-RMEQYJPU.js} +4 -4
- package/dist/cli/chunks/{chunk-ZQ2XW3IP.js → chunk-RTYXFXTI.js} +2 -2
- package/dist/cli/chunks/{chunk-DVYHMDFR.js → chunk-SJF3O4FX.js} +374 -371
- package/dist/cli/chunks/{chunk-AG2EWGXS.js → chunk-SOUS7Z2H.js} +2 -2
- package/dist/cli/chunks/{chunk-3HD7E6HN.js → chunk-SRVNR3R3.js} +2 -2
- package/dist/cli/chunks/{chunk-KITOPKRG.js → chunk-SU3SXMVG.js} +2 -2
- package/dist/cli/chunks/chunk-SWGPLXWW.js +32 -0
- package/dist/cli/chunks/{chunk-ZR2TKVXQ.js → chunk-TRB3EVH3.js} +2 -2
- package/dist/cli/chunks/{chunk-OCV2XEWQ.js → chunk-TVBDUMKT.js} +2 -2
- package/dist/cli/chunks/{chunk-IOQ6ZQ5W.js → chunk-TWTXPSFU.js} +1 -1
- package/dist/cli/chunks/{chunk-CJSHWQXP.js → chunk-ULYUVUL2.js} +2 -2
- package/dist/cli/chunks/{chunk-PHT5N7SC.js → chunk-UNTBVJ5X.js} +2 -2
- package/dist/cli/chunks/{chunk-LKTTUHLF.js → chunk-UQAA4PHU.js} +2 -2
- package/dist/cli/chunks/{chunk-SR52XP5F.js → chunk-UWSJVKTE.js} +1 -1
- package/dist/cli/chunks/{chunk-L6QSTQME.js → chunk-V2LJ54KP.js} +2 -2
- package/dist/cli/chunks/{chunk-FBDVGRSC.js → chunk-VCCTTKP3.js} +7 -7
- package/dist/cli/chunks/{chunk-YLMNVLDK.js → chunk-VEGUYUVS.js} +1 -1
- package/dist/cli/chunks/{chunk-ASEOFRIG.js → chunk-VUQPVWNK.js} +2 -2
- package/dist/cli/chunks/{chunk-VXFLJNCA.js → chunk-VVGUE2T2.js} +2 -2
- package/dist/cli/chunks/{chunk-4NFQLP6R.js → chunk-W5ASDHJQ.js} +1 -1
- package/dist/cli/chunks/{chunk-I7MQIM2U.js → chunk-WGXT5NWQ.js} +1 -1
- package/dist/cli/chunks/chunk-WJN3V7QB.js +7 -0
- package/dist/cli/chunks/chunk-WPCRQIIF.js +29 -0
- package/dist/cli/chunks/{chunk-SASBO5Y5.js → chunk-WQNLXUWA.js} +6 -6
- package/dist/cli/chunks/{chunk-5SPCGMBB.js → chunk-WZVRMKG2.js} +2 -2
- package/dist/cli/chunks/{chunk-MI5MFHRA.js → chunk-X27IUWTD.js} +2 -2
- package/dist/cli/chunks/{chunk-HJ6ZGVTB.js → chunk-X4B345B6.js} +2 -2
- package/dist/cli/chunks/{chunk-HVRRLYX6.js → chunk-X5I2Y4VO.js} +2 -2
- package/dist/cli/chunks/{chunk-SUDMM5SO.js → chunk-X7IQIFTS.js} +2 -2
- package/dist/cli/chunks/chunk-XJN3RKUD.js +3 -0
- package/dist/cli/chunks/{chunk-E3D4GPLP.js → chunk-XQMGXTHJ.js} +3 -3
- package/dist/cli/chunks/{chunk-67Z5R7RJ.js → chunk-XTSAMB2Q.js} +2 -2
- package/dist/cli/chunks/{chunk-KVF4NXGQ.js → chunk-XZLIF4O2.js} +2 -2
- package/dist/cli/chunks/{chunk-EA4YQVKS.js → chunk-Y4LSEOZ3.js} +1 -1
- package/dist/cli/chunks/{chunk-OAEE6JWQ.js → chunk-Y4YN2RXR.js} +2 -2
- package/dist/cli/chunks/{chunk-CEYSYSK5.js → chunk-YDI56L35.js} +2 -2
- package/dist/cli/chunks/{chunk-JDIYMZCQ.js → chunk-YFILS5D5.js} +2 -2
- package/dist/cli/chunks/{chunk-GAHNO6JJ.js → chunk-YISDX6WB.js} +2 -2
- package/dist/cli/chunks/{chunk-AGRV5B3T.js → chunk-YP2GHQSV.js} +2 -2
- package/dist/cli/chunks/{chunk-UNGBRZDK.js → chunk-YSX756AM.js} +4 -4
- package/dist/cli/chunks/{chunk-BEKDKVQT.js → chunk-YWANOASW.js} +2 -2
- package/dist/cli/chunks/{chunk-JQ3DYUMS.js → chunk-YYIJLG7S.js} +2 -2
- package/dist/cli/chunks/{chunk-CRPIYUTJ.js → chunk-Z7SD7LXM.js} +2 -2
- package/dist/cli/chunks/{chunk-U2A7NHZA.js → chunk-ZDWD73UF.js} +2 -2
- package/dist/cli/chunks/{chunk-WP4RETKG.js → chunk-ZFT3RLA4.js} +2 -2
- package/dist/cli/chunks/{chunk-VJCIEHEF.js → chunk-ZNTHX5G3.js} +1 -1
- package/dist/cli/chunks/{chunk-PF7RBAYL.js → chunk-ZS27R7VL.js} +2 -2
- package/dist/cli/chunks/{chunk-24OX5TQJ.js → chunk-ZXHHHR7K.js} +1 -1
- package/dist/cli/chunks/{ci-MFUR4CWV.js → ci-N5MOMNXH.js} +2 -2
- package/dist/cli/chunks/{ci-config-PNDLQ6XV.js → ci-config-6L2ROQCW.js} +2 -2
- package/dist/cli/chunks/{ci-output-PFZ4M7NC.js → ci-output-DSRBYEIK.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-5HH6NLZN.js → circuit-breaker-VRPTNBL7.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-QCKYLGLC.js → claude-flow-setup-4YFG3FU5.js} +2 -2
- package/dist/cli/chunks/client-I3L6BKRQ.js +2 -0
- package/dist/cli/chunks/{cline-installer-EASVPFXR.js → cline-installer-7RGYJWGN.js} +2 -2
- package/dist/cli/chunks/{code-UJXDVYRK.js → code-ISC6NW2K.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-BZJ3UDP4.js → code-index-extractor-2FID75YV.js} +2 -2
- package/dist/cli/chunks/{codex-installer-XSQZUVOZ.js → codex-installer-DZ7OG6KM.js} +2 -2
- package/dist/cli/chunks/{completions-OWOOJFI2.js → completions-SM3LICWK.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-KP5TOHDT.js → complexity-analyzer-ZWD2CTAD.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-IFKQXLHM.js → continuedev-installer-AGASOA26.js} +2 -2
- package/dist/cli/chunks/copilot-installer-CLPZYTQC.js +3 -0
- package/dist/cli/chunks/core-handlers-5EFOJ37H.js +2 -0
- package/dist/cli/chunks/{cost-tracker-MMDDNKZB.js → cost-tracker-7PIGQYDV.js} +2 -2
- package/dist/cli/chunks/{coverage-LUH2B7NT.js → coverage-T2GEBTYS.js} +9 -9
- package/dist/cli/chunks/cross-domain-router-65WJAKVD.js +2 -0
- package/dist/cli/chunks/{cursor-installer-4YLM5GWM.js → cursor-installer-KXBID4MB.js} +2 -2
- package/dist/cli/chunks/daemon-43MXIVH3.js +18 -0
- package/dist/cli/chunks/{daemon-MZKVM4CJ.js → daemon-VAMJLQJ5.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-X4CYW665.js → dag-attention-scheduler-UBP4VHTA.js} +2 -2
- package/dist/cli/chunks/{detect-7BM2XINO.js → detect-QWFIQRKI.js} +2 -2
- package/dist/cli/chunks/{dist-node-Y5APLEYB.js → dist-node-I2GICS3W.js} +2 -2
- package/dist/cli/chunks/{domain-handler-X3ZRJNAH.js → domain-handler-Z66ISB2A.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-2UW5KQJB.js → domain-plugins-KHMD3FKT.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-35W4CIBV.js → domain-transfer-JWGNNA6K.js} +2 -2
- package/dist/cli/chunks/dream-VQ2PZCVR.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-F5P5B6JX.js +3 -0
- package/dist/cli/chunks/{embedding-space-SBM2MZD2.js → embedding-space-KHG6TITM.js} +2 -2
- package/dist/cli/chunks/{eval-4QA2SROK.js → eval-43OHU7EI.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-Z6BF6KYM.js → experience-capture-middleware-KXD47H6P.js} +3 -3
- package/dist/cli/chunks/{fast-paths-FIORX6GN.js → fast-paths-6D75D5KD.js} +2 -2
- package/dist/cli/chunks/{feature-flags-6LYI2T4G.js → feature-flags-IE35Y55N.js} +2 -2
- package/dist/cli/chunks/{feature-flags-ZOO7LMIC.js → feature-flags-OYYHY7LS.js} +2 -2
- package/dist/cli/chunks/file-discovery-LGBTY3ID.js +2 -0
- package/dist/cli/chunks/{fleet-7WF53H4F.js → fleet-AGVJMFGD.js} +16 -16
- package/dist/cli/chunks/{gnn-wrapper-KJ6B7BRM.js → gnn-wrapper-5L66A7LW.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-DEKKMOVW.js → heartbeat-handler-2BY6YYOT.js} +5 -5
- package/dist/cli/chunks/heartbeat-scheduler-3DU3M5AT.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-N2IMSRPV.js +2 -0
- package/dist/cli/chunks/hnsw-index-DVU7TTJE.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-L27WS27N.js → hnsw-legacy-bridge-RYMWFNAH.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-4YOQC6L4.js → hnswlib-node-GG47HP2P.js} +2 -2
- package/dist/cli/chunks/{hooks-TAOKV4EJ.js → hooks-FQNACS24.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-AS2PNHOD.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-BODRJLHL.js → hypergraph-engine-6BYNJQEP.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-RKMYJNTU.js → hypergraph-handler-CYTAXZKJ.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-Y4OONLFP.js +2 -0
- package/dist/cli/chunks/{init-guard-MXHSLSB2.js → init-guard-METTAV5O.js} +2 -2
- package/dist/cli/chunks/{init-handler-HUE57IFW.js → init-handler-GFT74U5Y.js} +6 -6
- package/dist/cli/chunks/init-wizard-HLNUBJQN.js +2 -0
- package/dist/cli/chunks/kernel-XKFWCL7Y.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-S333IKYQ.js → kilocode-installer-GZV2D3FF.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-WM5DLQWC.js → kiro-installer-Q4ZXUFC7.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-CNL77CSZ.js +2 -0
- package/dist/cli/chunks/{learning-LNHMQLH5.js → learning-WA2QEYL7.js} +35 -34
- package/dist/cli/chunks/{llm-router-EWFXYZZR.js → llm-router-GRTCHWH7.js} +4 -4
- package/dist/cli/chunks/llm-router-service-UIYTYKP6.js +2 -0
- package/dist/cli/chunks/{load-FGYGWVDK.js → load-WXN3Q7Y5.js} +2 -2
- package/dist/cli/chunks/load-test-PXLW4A5B.js +2 -0
- package/dist/cli/chunks/{mcp-2FHNAAOM.js → mcp-LIQCPSJN.js} +2 -2
- package/dist/cli/chunks/{memory-DZMQ73AB.js → memory-OP6CHRFH.js} +5 -5
- package/dist/cli/chunks/memory-backend-XYOSO73Q.js +2 -0
- package/dist/cli/chunks/memory-handlers-PQFYVNVG.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-6F2UAEUW.js → multi-model-executor-H54DEVRZ.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-XY3BGOTZ.js → opencode-installer-BSQV6UAT.js} +2 -2
- package/dist/cli/chunks/{orchestrator-B4CNKUOS.js → orchestrator-TJDPQ4VL.js} +122 -35
- package/dist/cli/chunks/pattern-null-store-BKGTQFNF.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-R4GUFNMD.js → pattern-usage-recorder-FOVS4M5L.js} +2 -2
- package/dist/cli/chunks/{pipeline-FG5RKVRO.js → pipeline-4AY2ZIC6.js} +2 -2
- package/dist/cli/chunks/{platform-3BT4KEVJ.js → platform-FCSITYMR.js} +2 -2
- package/dist/cli/chunks/{plugin-WI4RIN7O.js → plugin-E56TV5S2.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-7ECDNQFS.js → prime-radiant-advanced-wasm-ACOPC533.js} +2 -2
- package/dist/cli/chunks/project-root-MPX7CN2C.js +2 -0
- package/dist/cli/chunks/protocol-executor-CRQOCC4A.js +2 -0
- package/dist/cli/chunks/{protocol-handler-WNODKPGW.js → protocol-handler-KRVXF4LS.js} +2 -2
- package/dist/cli/chunks/{prove-5RHAEPYZ.js → prove-KMFPSKGD.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-UEGQ3O7F.js +2 -0
- package/dist/cli/chunks/{quality-WPHR7BGQ.js → quality-6DBI3HLB.js} +2 -2
- package/dist/cli/chunks/{quality-gate-4RKTEZMX.js → quality-gate-3ROZMEIL.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-32574XSG.js +2 -0
- package/dist/cli/chunks/real-embeddings-MIGZNKK3.js +2 -0
- package/dist/cli/chunks/{ref-validation-TPAWHOHH.js → ref-validation-EYIP7DHW.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-7AVHFNDI.js → roocode-installer-IGGZHR2Y.js} +2 -2
- package/dist/cli/chunks/router-CZJY5WX6.js +2 -0
- package/dist/cli/chunks/routing-feedback-RC3UBNFX.js +2 -0
- package/dist/cli/chunks/{routing-handler-YKEDVJSH.js → routing-handler-BWNHBYDC.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-JUAMM354.js → ruvector-commands-PXIHF432.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-OG7OV2AK.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-THYMW7ZO.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-3H6CLFU7.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-6JQJIKKW.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-VJDUIRTX.js → rvf-store-integrity-CVB3NMSL.js} +2 -2
- package/dist/cli/chunks/safe-db-QFKCVTIJ.js +2 -0
- package/dist/cli/chunks/schedule-6JLVMMYB.js +2 -0
- package/dist/cli/chunks/scheduler-3MPZRMJD.js +2 -0
- package/dist/cli/chunks/{security-ORDN3RD2.js → security-DCRGOTWU.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-CF4BCIO7.js → shared-rvf-adapter-GKD74QUB.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-C32UBR6D.js → shared-rvf-dual-writer-HVAAVEOH.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-LGTIKAEX.js +2 -0
- package/dist/cli/chunks/{standalone-memory-OXRJYZXN.js → standalone-memory-O7O2U5N4.js} +2 -2
- package/dist/cli/chunks/{status-handler-BCX5D4HY.js → status-handler-BQTPJJTL.js} +2 -2
- package/dist/cli/chunks/{structural-health-LFG7RUU6.js → structural-health-4H6J4OHK.js} +2 -2
- package/dist/cli/chunks/sync-DJ4TF6QX.js +2 -0
- package/dist/cli/chunks/{sync-YJEE2K2L.js → sync-WW5TAVYW.js} +2 -2
- package/dist/cli/chunks/{task-handler-6LXKPTXJ.js → task-handler-HEM4IEOW.js} +2 -2
- package/dist/cli/chunks/{task-handlers-CILP36I7.js → task-handlers-JRA3NXIR.js} +3 -3
- package/dist/cli/chunks/test-772ZXVG2.js +34 -0
- package/dist/cli/chunks/test-runner-process-XGF2U3NG.js +2 -0
- package/dist/cli/chunks/{test-scheduling-ISI2O4Q5.js → test-scheduling-4TRB7LZ7.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-CICBIJ7T.js +2 -0
- package/dist/cli/chunks/{token-usage-XOC5KG7S.js → token-usage-B7PEKE2G.js} +2 -2
- package/dist/cli/chunks/{transformers-LSLQAARK.js → transformers-V7X7BDZX.js} +2 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-OXPFKFZS.js +2 -0
- package/dist/cli/chunks/{types-5BLCGLCR.js → types-AHHTUY3I.js} +2 -2
- package/dist/cli/chunks/unified-memory-GUR3IUI6.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-NJP2F2RY.js +2 -0
- package/dist/cli/chunks/unified-persistence-NILBWXDP.js +2 -0
- package/dist/cli/chunks/{upgrade-RQJYLK3J.js → upgrade-DZ4DLUQ5.js} +2 -2
- package/dist/cli/chunks/{validate-QBHWXXCK.js → validate-4DTLIDJE.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-IKXBKFB5.js → validate-swarm-A26UFVIS.js} +2 -2
- package/dist/cli/chunks/visual-security-YECYZ27X.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-ZF6FIE5R.js → web-tree-sitter-F2C7QRYT.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-HQGDZT5D.js → windsurf-installer-OOBTDA6W.js} +2 -2
- package/dist/cli/chunks/{witness-chain-DCHCAMSQ.js → witness-chain-KGFZJP32.js} +2 -2
- package/dist/cli/chunks/witness-chain-LYBXFLJB.js +2 -0
- package/dist/cli/chunks/witness-chain-repair-CNTXOGPN.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-PX2OQ6XT.js → witness-chain-verifier-OB7ZZOI3.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-RXYQNFJB.js → witness-key-manager-YCKGKGQI.js} +2 -2
- package/dist/cli/chunks/{workflow-FBKCA4H6.js → workflow-PRERHWKY.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-UIBGWCU3.js +2 -0
- package/dist/cli/chunks/wrappers-L4UY4V63.js +2 -0
- package/dist/cli/commands/coverage.js +4 -1
- package/dist/cli/commands/learning-prune.js +9 -1
- package/dist/cli/commands/test.js +26 -4
- package/dist/cli/handlers/brain-handler.js +32 -2
- package/dist/cli/handlers/heartbeat-handler.js +3 -1
- package/dist/cli/utils/coverage-data.js +5 -1
- package/dist/cli/utils/coverage-verdict.d.ts +10 -2
- package/dist/cli/utils/coverage-verdict.js +23 -8
- package/dist/cli/utils/fleet-operation.js +9 -3
- package/dist/coordination/handlers/code-intelligence-handlers.js +17 -3
- package/dist/coordination/handlers/coverage-handlers.js +22 -9
- package/dist/coordination/handlers/coverage-target.d.ts +22 -2
- package/dist/coordination/handlers/coverage-target.js +45 -9
- package/dist/coordination/handlers/handler-utils.d.ts +19 -0
- package/dist/coordination/handlers/handler-utils.js +22 -8
- package/dist/coordination/handlers/test-execution-handlers.js +64 -20
- package/dist/coordination/protocols/code-intelligence-index.js +6 -3
- package/dist/coordination/protocols/learning-consolidation-archive.d.ts +6 -3
- package/dist/coordination/protocols/learning-consolidation-archive.js +4 -3
- package/dist/coordination/workflow-builtin.js +1 -0
- package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +8 -3
- package/dist/domains/code-intelligence/services/semantic-analyzer.js +39 -25
- package/dist/domains/code-intelligence/services/text-relevance.d.ts +32 -0
- package/dist/domains/code-intelligence/services/text-relevance.js +63 -0
- package/dist/domains/defect-intelligence/interfaces.d.ts +2 -0
- package/dist/domains/defect-intelligence/prediction-history.d.ts +15 -1
- package/dist/domains/defect-intelligence/prediction-history.js +63 -7
- package/dist/domains/defect-intelligence/services/defect-predictor.d.ts +1 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +33 -13
- package/dist/domains/learning-optimization/coordinator.js +17 -10
- package/dist/domains/learning-optimization/domain-ranking.d.ts +26 -0
- package/dist/domains/learning-optimization/domain-ranking.js +28 -0
- package/dist/domains/learning-optimization/interfaces.d.ts +5 -0
- package/dist/domains/learning-optimization/pattern-archive.d.ts +55 -8
- package/dist/domains/learning-optimization/pattern-archive.js +90 -17
- package/dist/domains/learning-optimization/pattern-consolidation.js +18 -2
- package/dist/domains/learning-optimization/pattern-merge.d.ts +26 -0
- package/dist/domains/learning-optimization/pattern-merge.js +127 -0
- package/dist/domains/learning-optimization/services/learning-coordinator.js +21 -35
- package/dist/domains/test-execution/coordinator.d.ts +3 -1
- package/dist/domains/test-execution/coordinator.js +13 -4
- package/dist/domains/test-execution/interfaces.d.ts +5 -0
- package/dist/domains/test-execution/plugin.js +2 -0
- package/dist/domains/test-execution/services/flaky-detector.d.ts +9 -1
- package/dist/domains/test-execution/services/flaky-detector.js +26 -8
- package/dist/domains/test-execution/services/retry-handler.d.ts +7 -1
- package/dist/domains/test-execution/services/retry-handler.js +44 -5
- package/dist/domains/test-execution/services/runner-test-cases.d.ts +2 -0
- package/dist/domains/test-execution/services/runner-test-cases.js +7 -3
- package/dist/domains/test-execution/services/test-executor.d.ts +5 -1
- package/dist/domains/test-execution/services/test-executor.js +85 -17
- package/dist/init/copilot-installer.d.ts +6 -0
- package/dist/init/copilot-installer.js +37 -17
- package/dist/init/init-wizard-steps.js +3 -1
- package/dist/init/phases/07-hooks.js +97 -10
- package/dist/init/platform-config-generator.d.ts +10 -0
- package/dist/init/platform-config-generator.js +26 -1
- package/dist/integrations/embeddings/cache/EmbeddingCache.js +1 -1
- package/dist/integrations/ruvector/brain-rvf-exporter.d.ts +16 -1
- package/dist/integrations/ruvector/brain-rvf-exporter.js +18 -32
- package/dist/integrations/ruvector/brain-rvf-richness.d.ts +75 -0
- package/dist/integrations/ruvector/brain-rvf-richness.js +127 -0
- package/dist/kernel/unified-memory-migration.js +1 -1
- package/dist/kernel/unified-memory.d.ts +8 -0
- package/dist/kernel/unified-memory.js +13 -0
- package/dist/learning/checkpoint-shrink-ack.d.ts +25 -0
- package/dist/learning/checkpoint-shrink-ack.js +57 -0
- package/dist/learning/dream/dream-engine.d.ts +44 -3
- package/dist/learning/dream/dream-engine.js +6 -2
- package/dist/learning/embedder-endpoint-client.d.ts +45 -0
- package/dist/learning/embedder-endpoint-client.js +98 -3
- package/dist/learning/embedder-identity-store.js +3 -1
- package/dist/learning/embedding-space-legacy-adoption.d.ts +53 -0
- package/dist/learning/embedding-space-legacy-adoption.js +115 -0
- package/dist/learning/embedding-space-registry.d.ts +90 -0
- package/dist/learning/embedding-space-registry.js +181 -0
- package/dist/learning/experience-capture.d.ts +3 -1
- package/dist/learning/experience-capture.js +15 -5
- package/dist/learning/experience-space-verification.d.ts +2 -0
- package/dist/learning/experience-space-verification.js +3 -2
- package/dist/learning/learning-retention.js +4 -0
- package/dist/learning/pattern-promotion.d.ts +7 -0
- package/dist/learning/pattern-promotion.js +64 -12
- package/dist/learning/real-embeddings.d.ts +3 -0
- package/dist/learning/real-embeddings.js +73 -11
- package/dist/learning/rvf-pattern-store.js +6 -1
- package/dist/mcp/bundle.js +558 -537
- package/dist/mcp/handlers/domain-handler-configs.d.ts +3 -0
- package/dist/mcp/handlers/domain-handler-configs.js +1 -0
- package/dist/mcp/handlers/heartbeat-handlers.d.ts +4 -2
- package/dist/mcp/protocol-server.js +1 -1
- package/dist/mcp/tools/learning-optimization/optimize.d.ts +6 -1
- package/dist/mcp/tools/learning-optimization/optimize.js +20 -11
- package/dist/planning/goap-planner.js +4 -0
- package/dist/planning/plan-executor.js +6 -2
- package/dist/shared/embeddings/index.d.ts +2 -2
- package/dist/shared/embeddings/index.js +1 -1
- package/dist/shared/embeddings/nomic-embedder.d.ts +8 -2
- package/dist/shared/embeddings/nomic-embedder.js +19 -11
- package/dist/shared/embeddings/ollama-client.d.ts +28 -2
- package/dist/shared/embeddings/ollama-client.js +84 -22
- package/dist/shared/embeddings/types.d.ts +15 -0
- package/dist/shared/embeddings/types.js +4 -0
- package/dist/shared/git/git-analyzer.d.ts +30 -11
- package/dist/shared/git/git-analyzer.js +95 -48
- package/dist/shared/io/confined-read.d.ts +32 -7
- package/dist/shared/io/confined-read.js +58 -25
- package/dist/shared/io/file-reader.js +4 -1
- package/dist/shared/pytest-junit-report.d.ts +93 -0
- package/dist/shared/pytest-junit-report.js +241 -0
- package/dist/shared/safe-db.d.ts +1 -1
- package/dist/shared/safe-db.js +20 -5
- package/dist/shared/sqlite-journal-mode.d.ts +39 -0
- package/dist/shared/sqlite-journal-mode.js +53 -0
- package/dist/shared/test-runner-project.d.ts +51 -1
- package/dist/shared/test-runner-project.js +140 -25
- package/dist/sync/claude-flow-bridge.js +1 -1
- package/dist/sync/readers/sqlite-reader.js +3 -4
- package/dist/sync/writers/sqlite-writer.js +1 -1
- package/dist/workers/interfaces.d.ts +2 -2
- package/dist/workers/quality-daemon/git-watcher.d.ts +8 -0
- package/dist/workers/quality-daemon/git-watcher.js +54 -12
- package/dist/workers/quality-daemon/index.js +1 -1
- package/dist/workers/quality-daemon/priority-queue.d.ts +2 -1
- package/dist/workers/workers/defect-predictor.d.ts +9 -4
- package/dist/workers/workers/defect-predictor.js +98 -37
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-6CQ2PIP5.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-73RR52VS.js +0 -2
- package/dist/cli/chunks/base-SMCMMVGP.js +0 -2
- package/dist/cli/chunks/brain-handler-HQWZFO52.js +0 -95
- package/dist/cli/chunks/browser-workflow-A2MEZ66K.js +0 -2
- package/dist/cli/chunks/chunk-CGGUM2YJ.js +0 -3
- package/dist/cli/chunks/chunk-D6COXLYE.js +0 -8
- package/dist/cli/chunks/chunk-EGYE5UPQ.js +0 -2
- package/dist/cli/chunks/chunk-IUBJVHNB.js +0 -3
- package/dist/cli/chunks/chunk-KL7OKSU2.js +0 -4
- package/dist/cli/chunks/chunk-KPRCB5LT.js +0 -7
- package/dist/cli/chunks/chunk-LRSX2FJM.js +0 -2
- package/dist/cli/chunks/chunk-M4FRQ4TE.js +0 -12
- package/dist/cli/chunks/chunk-MAFQV4U4.js +0 -16
- package/dist/cli/chunks/chunk-NZU4ACBZ.js +0 -2
- package/dist/cli/chunks/chunk-RV74I3YO.js +0 -3
- package/dist/cli/chunks/chunk-SJ6Y4725.js +0 -5
- package/dist/cli/chunks/chunk-UE5ZOZR2.js +0 -2
- package/dist/cli/chunks/chunk-VSIKHWZ4.js +0 -29
- package/dist/cli/chunks/chunk-YAPLJR7K.js +0 -2
- package/dist/cli/chunks/client-MHQRTZM4.js +0 -2
- package/dist/cli/chunks/copilot-installer-IGJ6KGQY.js +0 -3
- package/dist/cli/chunks/core-handlers-UAK3LLJE.js +0 -2
- package/dist/cli/chunks/cross-domain-router-WTRZQPNQ.js +0 -2
- package/dist/cli/chunks/daemon-CAVZ7OFV.js +0 -18
- package/dist/cli/chunks/dream-EJY24JN6.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-COG4C7ZI.js +0 -3
- package/dist/cli/chunks/file-discovery-UZSFSS4V.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-NVR356I7.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-LFMPLUJU.js +0 -2
- package/dist/cli/chunks/hnsw-index-POCPMVJH.js +0 -2
- package/dist/cli/chunks/hybrid-backend-4STAO7CV.js +0 -2
- package/dist/cli/chunks/impact-analyzer-3VIIISBQ.js +0 -2
- package/dist/cli/chunks/init-wizard-PL6QN6RQ.js +0 -2
- package/dist/cli/chunks/kernel-CCDWT7KS.js +0 -2
- package/dist/cli/chunks/knowledge-graph-KFOMEN3H.js +0 -2
- package/dist/cli/chunks/llm-router-service-7NBE2EX6.js +0 -2
- package/dist/cli/chunks/load-test-UNZUWY3F.js +0 -2
- package/dist/cli/chunks/memory-backend-DFGKWA2Q.js +0 -2
- package/dist/cli/chunks/memory-handlers-MP426XRJ.js +0 -2
- package/dist/cli/chunks/pattern-null-store-SSVF5TE5.js +0 -2
- package/dist/cli/chunks/project-root-BEANNYWU.js +0 -2
- package/dist/cli/chunks/protocol-executor-FQVIHXZ7.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-5TFYSE24.js +0 -2
- package/dist/cli/chunks/queen-coordinator-Y2OUL7IN.js +0 -2
- package/dist/cli/chunks/real-embeddings-OXLYU7JW.js +0 -2
- package/dist/cli/chunks/router-EP34O3KB.js +0 -2
- package/dist/cli/chunks/routing-feedback-FJCRKXNG.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-ILITJSFG.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-XF6W4C2N.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-CMKG56AR.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-7YFW6S4Y.js +0 -2
- package/dist/cli/chunks/safe-db-TCAU4FUT.js +0 -2
- package/dist/cli/chunks/schedule-NB5KV435.js +0 -2
- package/dist/cli/chunks/scheduler-JKXGKVK6.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-IXCNZRTW.js +0 -2
- package/dist/cli/chunks/sync-OSF7C2NL.js +0 -2
- package/dist/cli/chunks/test-SD457QJ6.js +0 -34
- package/dist/cli/chunks/test-runner-process-VKD65QQU.js +0 -2
- package/dist/cli/chunks/token-bootstrap-VUELSBOS.js +0 -2
- package/dist/cli/chunks/tree-sitter-wasm-parser-YAIPHRIL.js +0 -2
- package/dist/cli/chunks/unified-memory-GI76TXFV.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-GXJ5BTZO.js +0 -2
- package/dist/cli/chunks/unified-persistence-OP7FDQPD.js +0 -2
- package/dist/cli/chunks/visual-security-GZ2MOKWB.js +0 -2
- package/dist/cli/chunks/witness-chain-P3XXXA62.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-PUX2NFDL.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-P2APAJAA.js +0 -2
- package/dist/cli/chunks/wrappers-TWSKBTWD.js +0 -2
|
@@ -24,6 +24,17 @@ const MAX_AGE_HOURS = 24;
|
|
|
24
24
|
const SKIP_PATH = path.join(AQE_DIR, 'brain-checkpoint.skip.json');
|
|
25
25
|
const RETRY_ENV = Number.parseFloat(process.env.AQE_BRAIN_CHECKPOINT_RETRY_HOURS || '');
|
|
26
26
|
const TOO_LARGE_RETRY_HOURS = Number.isFinite(RETRY_ENV) && RETRY_ENV >= 0 ? RETRY_ENV : 6;
|
|
27
|
+
// #1251: the export is compared with the published aqe.rvf and refused when a
|
|
28
|
+
// table collapsed (memory.db recreated from seed data, say). A deliberate shrink
|
|
29
|
+
// (`aqe learning prune --apply`, dream retention) leaves this acknowledgement
|
|
30
|
+
// with the row counts it left. The CLI honours it once, within 24h, and only
|
|
31
|
+
// while the brain still holds those counts; otherwise the hook drops it.
|
|
32
|
+
const SHRINK_ACK_PATH = path.join(AQE_DIR, 'brain-checkpoint.accept-shrink.json');
|
|
33
|
+
const SHRINK_ACK_MAX_AGE_HOURS = 24;
|
|
34
|
+
const MIRROR_REFUSAL = /RVF_MIRROR_(?:RICHER|INSPECTION_AMBIGUOUS):[^\n]*/;
|
|
35
|
+
const SHRINK_ACK_VERDICT = /SHRINK_ACK_(HONOURED|IGNORED): ([^\n]*)/;
|
|
36
|
+
// An older global aqe rejects the #1251 flags: back off rather than fail every turn.
|
|
37
|
+
const OUTDATED_CLI = /unknown option '(--(?:compare-with|richness-policy|accept-shrink))'/;
|
|
27
38
|
/**
|
|
28
39
|
* How to run `aqe`. POSIX: the `aqe` binary. Windows (#872): never execFile
|
|
29
40
|
* `aqe.cmd` (EINVAL without a shell since CVE-2024-27980, and a shell is unsafe);
|
|
@@ -92,6 +103,50 @@ function activeSkip() {
|
|
|
92
103
|
return skip;
|
|
93
104
|
}
|
|
94
105
|
|
|
106
|
+
function dropShrinkAck(why) {
|
|
107
|
+
try { removeEntry(SHRINK_ACK_PATH); } catch { /* best-effort */ }
|
|
108
|
+
log('Ignored the shrink acknowledgement (' + why + '); the normal checkpoint policy applies.');
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* The acknowledgement of a deliberate shrink, or null. One that is unreadable,
|
|
113
|
+
* over 24h old, or older than aqe.rvf (already checkpointed) is dropped. The
|
|
114
|
+
* CLI checks the counts it records against the export (--accept-shrink).
|
|
115
|
+
*/
|
|
116
|
+
function pendingShrinkAck() {
|
|
117
|
+
let st;
|
|
118
|
+
try { st = fs.lstatSync(SHRINK_ACK_PATH); } catch { return null; }
|
|
119
|
+
let ack = null;
|
|
120
|
+
if (st.isFile()) { try { ack = JSON.parse(fs.readFileSync(SHRINK_ACK_PATH, 'utf8')); } catch { /* unreadable */ } }
|
|
121
|
+
const at = ack ? Date.parse(ack.at) : NaN;
|
|
122
|
+
let rvfMtime = 0;
|
|
123
|
+
try { rvfMtime = fs.lstatSync(RVF_PATH).mtimeMs; } catch { /* absent */ }
|
|
124
|
+
let why = null;
|
|
125
|
+
if (!Number.isFinite(at)) why = 'unreadable';
|
|
126
|
+
else if (Date.now() - at > SHRINK_ACK_MAX_AGE_HOURS * 3600000) why = 'older than 24h';
|
|
127
|
+
else if (rvfMtime > at) why = 'already checkpointed';
|
|
128
|
+
if (why) { dropShrinkAck(why); return null; }
|
|
129
|
+
return { at, producer: String(ack.producer) };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** Act on the CLI's verdict on the acknowledgement; returns its producer when honoured. */
|
|
133
|
+
function settleShrinkAck(output) {
|
|
134
|
+
const verdict = String(output || '').match(SHRINK_ACK_VERDICT);
|
|
135
|
+
if (!verdict) return null; // no verdict (the export failed first): keep it for the next turn
|
|
136
|
+
if (verdict[1] === 'IGNORED') { dropShrinkAck(verdict[2].trim()); return null; }
|
|
137
|
+
return verdict[2].trim();
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/** How to end a back-off now, for the session-start report. */
|
|
141
|
+
function resumeHint(skip) {
|
|
142
|
+
return MIRROR_REFUSAL.test(skip.reason)
|
|
143
|
+
? 'To resume now, back up aqe.rvf and run `aqe brain export -o .agentic-qe/aqe.rvf --force-overwrite-richer`, '
|
|
144
|
+
+ 'or delete .agentic-qe/brain-checkpoint.skip.json to retry.'
|
|
145
|
+
: skip.reason.includes('upgrade to enable the checkpoint guard')
|
|
146
|
+
? 'Upgrade the global aqe (npm i -g agentic-qe), then delete .agentic-qe/brain-checkpoint.skip.json.'
|
|
147
|
+
: 'To retry now, delete .agentic-qe/brain-checkpoint.skip.json.';
|
|
148
|
+
}
|
|
149
|
+
|
|
95
150
|
function writeSkip(reason) {
|
|
96
151
|
const at = new Date();
|
|
97
152
|
const skip = {
|
|
@@ -160,15 +215,28 @@ function promote(tmp) {
|
|
|
160
215
|
}
|
|
161
216
|
}
|
|
162
217
|
|
|
218
|
+
/** `aqe --version` of the installed CLI, for the outdated-CLI back-off. */
|
|
219
|
+
function aqeVersion(aqe) {
|
|
220
|
+
try {
|
|
221
|
+
const out = execFileSync(aqe.cmd, [...aqe.args, '--version'],
|
|
222
|
+
{ timeout: 10000, encoding: 'utf-8', windowsHide: true, stdio: ['ignore', 'pipe', 'ignore'] });
|
|
223
|
+
return out.trim().split(/\s+/).pop() || 'unknown';
|
|
224
|
+
} catch {
|
|
225
|
+
return 'unknown';
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
163
229
|
function exportBrain() {
|
|
164
230
|
if (!fs.existsSync(DB_PATH)) { log('No memory.db, skipping'); return { exported: false }; }
|
|
165
231
|
if (!isRealDir(AQE_DIR)) {
|
|
166
232
|
const reason = '.agentic-qe is a symlink; refusing to write through it';
|
|
167
233
|
log('Export skipped: ' + reason); return { exported: false, reason };
|
|
168
234
|
}
|
|
235
|
+
const ack = pendingShrinkAck();
|
|
169
236
|
const skip = activeSkip();
|
|
170
|
-
|
|
171
|
-
|
|
237
|
+
// A shrink acknowledged after the back-off began is the answer to it.
|
|
238
|
+
if (skip && !(ack && ack.at > Date.parse(skip.at))) {
|
|
239
|
+
// Logged once, when the back-off began; session-start verify reports it.
|
|
172
240
|
return { exported: false, skipped: true, reason: skip.reason, retryAfter: skip.retryAfter };
|
|
173
241
|
}
|
|
174
242
|
const aqe = aqeInvocation();
|
|
@@ -178,8 +246,11 @@ function exportBrain() {
|
|
|
178
246
|
try {
|
|
179
247
|
// The name is fresh, but drop anything already there without following it.
|
|
180
248
|
for (const suffix of ['', ...RVF_SIDECARS]) removeEntry(tmp + suffix);
|
|
249
|
+
const args = [...aqe.args, 'brain', 'export', '-o', tmp, '--format', 'rvf'];
|
|
250
|
+
if (lexists(RVF_PATH)) args.push('--compare-with', RVF_PATH, '--richness-policy', 'checkpoint');
|
|
251
|
+
if (ack) args.push('--accept-shrink', SHRINK_ACK_PATH);
|
|
181
252
|
const result = execFileSync(
|
|
182
|
-
aqe.cmd,
|
|
253
|
+
aqe.cmd, args,
|
|
183
254
|
{ timeout: 60000, encoding: 'utf-8', windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] }
|
|
184
255
|
);
|
|
185
256
|
// A zero exit without a store is a failure, not an empty checkpoint.
|
|
@@ -188,9 +259,30 @@ function exportBrain() {
|
|
|
188
259
|
const m = result.match(/Patterns:\s+(\d+)/);
|
|
189
260
|
const p = m ? m[1] : '0';
|
|
190
261
|
log('Exported ' + p + ' patterns to aqe.rvf');
|
|
191
|
-
|
|
262
|
+
const accepted = ack ? settleShrinkAck(result) : null;
|
|
263
|
+
if (!accepted) return { exported: true, patterns: parseInt(p) };
|
|
264
|
+
try { removeEntry(SHRINK_ACK_PATH); removeEntry(SKIP_PATH); } catch { /* spent: older than aqe.rvf now */ }
|
|
265
|
+
log('Accepted the smaller brain (' + accepted + ')');
|
|
266
|
+
return { exported: true, patterns: parseInt(p), acceptedShrink: accepted };
|
|
192
267
|
} catch (e) {
|
|
193
|
-
const
|
|
268
|
+
const output = String(e.stderr || '') + String(e.stdout || '');
|
|
269
|
+
if (ack) settleShrinkAck(e.stdout);
|
|
270
|
+
const outdated = output.match(OUTDATED_CLI);
|
|
271
|
+
if (outdated) {
|
|
272
|
+
const skip = writeSkip('installed aqe ' + aqeVersion(aqe) + ' lacks ' + outdated[1] + '; upgrade to enable the checkpoint guard');
|
|
273
|
+
log('Export skipped, previous aqe.rvf kept: ' + skip.reason);
|
|
274
|
+
log('Skipping the checkpoint export until ' + skip.retryAfter + ' (logged once).');
|
|
275
|
+
return { exported: false, outdatedCli: true, reason: skip.reason, retryAfter: skip.retryAfter };
|
|
276
|
+
}
|
|
277
|
+
const refused = output.match(MIRROR_REFUSAL);
|
|
278
|
+
if (refused) {
|
|
279
|
+
const skip = writeSkip(refused[0].trim());
|
|
280
|
+
log('Export refused, previous aqe.rvf kept: ' + skip.reason);
|
|
281
|
+
log('Skipping the checkpoint export until ' + skip.retryAfter + ' (logged once). If the smaller brain is '
|
|
282
|
+
+ 'intended, back up aqe.rvf and run: aqe brain export -o .agentic-qe/aqe.rvf --force-overwrite-richer');
|
|
283
|
+
return { exported: false, richer: true, reason: skip.reason, retryAfter: skip.retryAfter };
|
|
284
|
+
}
|
|
285
|
+
const tooLarge = output.match(/RVF_KERNEL_TOO_LARGE:[^\n]*/);
|
|
194
286
|
if (tooLarge) {
|
|
195
287
|
const skip = writeSkip(tooLarge[0].trim());
|
|
196
288
|
log('Export failed: ' + skip.reason);
|
|
@@ -209,18 +301,23 @@ function verifyBrain() {
|
|
|
209
301
|
if (!fs.existsSync(RVF_PATH)) {
|
|
210
302
|
const skip = activeSkip();
|
|
211
303
|
if (skip) {
|
|
212
|
-
log('No aqe.rvf found; checkpoint export paused until ' + skip.retryAfter + ': ' + skip.reason);
|
|
213
|
-
return { valid: false, reason: 'missing', skippedUntil: skip.retryAfter };
|
|
304
|
+
log('No aqe.rvf found; checkpoint export paused until ' + skip.retryAfter + ': ' + skip.reason + ' ' + resumeHint(skip));
|
|
305
|
+
return { valid: false, reason: 'missing', skippedUntil: skip.retryAfter, resumeHint: resumeHint(skip) };
|
|
214
306
|
}
|
|
215
307
|
log('No aqe.rvf found');
|
|
216
308
|
return { valid: false, reason: 'missing' };
|
|
217
309
|
}
|
|
218
310
|
const stat = fs.statSync(RVF_PATH);
|
|
311
|
+
const paused = activeSkip();
|
|
312
|
+
if (paused) log('Checkpoint export paused until ' + paused.retryAfter + ': ' + paused.reason + ' ' + resumeHint(paused));
|
|
313
|
+
const pause = paused
|
|
314
|
+
? { pausedUntil: paused.retryAfter, pauseReason: paused.reason, resumeHint: resumeHint(paused) }
|
|
315
|
+
: {};
|
|
219
316
|
const ageH = (Date.now() - stat.mtimeMs) / 3600000;
|
|
220
|
-
if (stat.size < 1024) { log('aqe.rvf too small'); return { valid: false, reason: 'too-small' }; }
|
|
221
|
-
if (ageH > MAX_AGE_HOURS) { log('aqe.rvf is ' + ageH.toFixed(1) + 'h old'); return { valid: true, stale: true }; }
|
|
317
|
+
if (stat.size < 1024) { log('aqe.rvf too small'); return { valid: false, reason: 'too-small', ...pause }; }
|
|
318
|
+
if (ageH > MAX_AGE_HOURS) { log('aqe.rvf is ' + ageH.toFixed(1) + 'h old'); return { valid: true, stale: true, ...pause }; }
|
|
222
319
|
log('aqe.rvf OK (' + (stat.size/1048576).toFixed(1) + ' MB)');
|
|
223
|
-
return { valid: true, stale: false };
|
|
320
|
+
return { valid: true, stale: false, ...pause };
|
|
224
321
|
}
|
|
225
322
|
|
|
226
323
|
const cmd = process.argv[2] || 'verify';
|
|
@@ -4,7 +4,7 @@ description: "Use when orchestrating QE agents, understanding PACTS principles,
|
|
|
4
4
|
category: qe-core
|
|
5
5
|
priority: critical
|
|
6
6
|
tokenEstimate: 1400
|
|
7
|
-
agents: [qe-test-
|
|
7
|
+
agents: [qe-test-architect, qe-parallel-executor, qe-coverage-specialist, qe-quality-gate, qe-performance-tester, qe-security-scanner, qe-requirements-validator, qe-fleet-commander, qe-deployment-advisor, qe-regression-analyzer, qe-contract-validator, qe-flaky-hunter, qe-visual-tester, qe-chaos-engineer, qe-code-complexity, qe-qx-partner, qe-devils-advocate]
|
|
8
8
|
implementation_status: optimized
|
|
9
9
|
optimization_version: 1.0
|
|
10
10
|
last_optimized: 2025-12-02
|
|
@@ -27,8 +27,8 @@ When implementing agentic QE or coordinating agents:
|
|
|
27
27
|
5. LEARN from outcomes - store patterns in `aqe/learning/*` namespace
|
|
28
28
|
|
|
29
29
|
**Quick Agent Selection:**
|
|
30
|
-
- Test generation needed → `qe-test-
|
|
31
|
-
- Coverage gaps → `qe-coverage-
|
|
30
|
+
- Test generation needed → `qe-test-architect`
|
|
31
|
+
- Coverage gaps → `qe-coverage-specialist`
|
|
32
32
|
- Quality decision → `qe-quality-gate`
|
|
33
33
|
- Security scan → `qe-security-scanner`
|
|
34
34
|
- Performance test → `qe-performance-tester`
|
|
@@ -37,7 +37,8 @@ When implementing agentic QE or coordinating agents:
|
|
|
37
37
|
**Critical Success Factors:**
|
|
38
38
|
- Agents amplify human expertise, not replace it
|
|
39
39
|
- Human-in-the-loop for critical decisions
|
|
40
|
-
- Measure: bugs caught, time saved, coverage improved
|
|
40
|
+
- Measure: bugs caught, time saved, coverage improved, and how often agent claims survive verification
|
|
41
|
+
- Done means committed, tested, and CI-validated with evidence attached, not "reported as complete"
|
|
41
42
|
</default_to_action>
|
|
42
43
|
|
|
43
44
|
## Quick Reference Card
|
|
@@ -57,16 +58,19 @@ When implementing agentic QE or coordinating agents:
|
|
|
57
58
|
| **T**argeted | Risk-based prioritization | Define risk areas |
|
|
58
59
|
| **S**tructured | Governance, observability, explainable decisions (measure confidence, not trust) | Audit behavior, set policy |
|
|
59
60
|
|
|
60
|
-
###
|
|
61
|
+
### Core Agents
|
|
62
|
+
The full fleet lives in `.claude/agents/v3/qe-*.md`; these are the agents most core jobs start with.
|
|
63
|
+
|
|
61
64
|
| Category | Agents | Primary Use |
|
|
62
65
|
|----------|--------|-------------|
|
|
63
|
-
| Core Testing
|
|
64
|
-
| Performance/Security
|
|
65
|
-
| Strategic
|
|
66
|
-
| Advanced
|
|
67
|
-
| Visual/Chaos
|
|
68
|
-
| Deployment
|
|
69
|
-
| Analysis
|
|
66
|
+
| Core Testing | qe-test-architect, qe-parallel-executor, qe-coverage-specialist, qe-quality-gate | Daily testing |
|
|
67
|
+
| Performance/Security | qe-performance-tester, qe-security-scanner | Non-functional |
|
|
68
|
+
| Strategic | qe-requirements-validator, qe-fleet-commander | Planning, orchestration |
|
|
69
|
+
| Advanced | qe-regression-analyzer, qe-contract-validator, qe-flaky-hunter | Specialized |
|
|
70
|
+
| Visual/Chaos | qe-visual-tester, qe-chaos-engineer | Edge cases |
|
|
71
|
+
| Deployment | qe-deployment-advisor | Release |
|
|
72
|
+
| Analysis | qe-code-complexity | Maintainability |
|
|
73
|
+
| Verification | qe-devils-advocate | Challenge other agents' claims |
|
|
70
74
|
|
|
71
75
|
### Coordination Patterns
|
|
72
76
|
```
|
|
@@ -76,11 +80,12 @@ Sequential: risk-analyzer → test-gen → executor → coverage → gate
|
|
|
76
80
|
```
|
|
77
81
|
|
|
78
82
|
### Success Criteria
|
|
79
|
-
✅
|
|
83
|
+
✅ Deployment frequency rises without escaped defects rising (measured against your own baseline)
|
|
80
84
|
✅ Coverage gaps detected in real-time
|
|
81
85
|
✅ Bugs caught pre-production
|
|
86
|
+
✅ Agent claims checked against evidence before anyone relies on them
|
|
82
87
|
❌ Agents acting without human oversight on critical decisions
|
|
83
|
-
❌ Deploying
|
|
88
|
+
❌ Deploying the whole fleet at once (start with 1-2)
|
|
84
89
|
|
|
85
90
|
---
|
|
86
91
|
|
|
@@ -91,16 +96,18 @@ Sequential: risk-analyzer → test-gen → executor → coverage → gate
|
|
|
91
96
|
|-------|----------|------------|
|
|
92
97
|
| Traditional | Manual everything | Human bottleneck |
|
|
93
98
|
| Automation | Scripts + fixed scenarios | Needs orchestration |
|
|
94
|
-
| **Agentic** | AI agents + human judgment | Requires
|
|
99
|
+
| **Agentic** | AI agents + human judgment | Requires confidence-building: evidence that agent output holds up |
|
|
100
|
+
|
|
101
|
+
**Core Premise:** Agents amplify human expertise. How much they amplify it is something to measure in your context, not to assume.
|
|
95
102
|
|
|
96
|
-
**
|
|
103
|
+
**Confidence, not trust:** trust is a feeling; confidence can be explained. For every agent output, ask what the evidence is, how it was checked, and what confidence the agent stated.
|
|
97
104
|
|
|
98
105
|
### Key Capabilities
|
|
99
106
|
|
|
100
107
|
**1. Intelligent Test Generation**
|
|
101
108
|
```typescript
|
|
102
109
|
// Agent analyzes code change, generates targeted tests
|
|
103
|
-
const tests = await
|
|
110
|
+
const tests = await Task("Generate tests", prDiff, "qe-test-architect");
|
|
104
111
|
// → Happy path, edge cases, error handling tests
|
|
105
112
|
```
|
|
106
113
|
|
|
@@ -110,6 +117,20 @@ const tests = await qeTestGenerator.generate(prDiff);
|
|
|
110
117
|
|
|
111
118
|
**4. Root Cause Analysis** - Link failures to code changes, suggest fixes
|
|
112
119
|
|
|
120
|
+
### Completion Theater (the central failure mode)
|
|
121
|
+
|
|
122
|
+
Agents optimize for appearing done rather than being done, and it gets harder to spot as their output gets more plausible. Patterns to check for:
|
|
123
|
+
|
|
124
|
+
- Work reported complete that was never committed
|
|
125
|
+
- Tests that assert a status code without checking the payload, or check that variables exist instead of behavior
|
|
126
|
+
- Coverage inflated by tests that touch code without exercising it
|
|
127
|
+
- Validation that checks counts or thresholds instead of behavior
|
|
128
|
+
- Report volume standing in for working software
|
|
129
|
+
- Stubs accepted as implementations
|
|
130
|
+
- Agent claims that the visible evidence contradicts
|
|
131
|
+
|
|
132
|
+
An honest, low-confidence answer is safer than a confident fabricated one; a false-safe label on a real security issue is the worst outcome. Defenses: adversarial review (`brutal-honesty-review`, `sherlock-review`, `qe-court`, `qe-devils-advocate`), invariants such as "no success claim without proof", and agents that disclose skipped steps, timeouts, and low confidence.
|
|
133
|
+
|
|
113
134
|
---
|
|
114
135
|
|
|
115
136
|
## Agent Coordination
|
|
@@ -188,21 +209,21 @@ aqe memory store \
|
|
|
188
209
|
| Event | Trigger | Subscribers |
|
|
189
210
|
|-------|---------|-------------|
|
|
190
211
|
| `test:generated` | New tests created | executor, coverage |
|
|
191
|
-
| `coverage:gap` | Gap detected | test-
|
|
212
|
+
| `coverage:gap` | Gap detected | test-architect |
|
|
192
213
|
| `quality:decision` | Gate evaluated | fleet-commander |
|
|
193
214
|
| `security:finding` | Vulnerability found | quality-gate |
|
|
194
215
|
|
|
195
216
|
### Example: PR Quality Pipeline
|
|
196
217
|
```typescript
|
|
197
218
|
// 1. Risk analysis
|
|
198
|
-
const risks = await Task("Analyze PR", prDiff, "qe-regression-
|
|
219
|
+
const risks = await Task("Analyze PR", prDiff, "qe-regression-analyzer");
|
|
199
220
|
|
|
200
221
|
// 2. Generate tests for risks
|
|
201
|
-
const tests = await Task("Generate tests", risks, "qe-test-
|
|
222
|
+
const tests = await Task("Generate tests", risks, "qe-test-architect");
|
|
202
223
|
|
|
203
224
|
// 3. Execute + analyze
|
|
204
|
-
const results = await Task("Run tests", tests, "qe-
|
|
205
|
-
const coverage = await Task("Check coverage", results, "qe-coverage-
|
|
225
|
+
const results = await Task("Run tests", tests, "qe-parallel-executor");
|
|
226
|
+
const coverage = await Task("Check coverage", results, "qe-coverage-specialist");
|
|
206
227
|
|
|
207
228
|
// 4. Quality decision
|
|
208
229
|
const decision = await Task("Evaluate", {results, coverage}, "qe-quality-gate");
|
|
@@ -213,24 +234,26 @@ const decision = await Task("Evaluate", {results, coverage}, "qe-quality-gate");
|
|
|
213
234
|
|
|
214
235
|
## Implementation Phases
|
|
215
236
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
|
219
|
-
|
|
220
|
-
|
|
|
237
|
+
Advance on evidence, not on the calendar. Typical pacing is weeks per phase, but it depends on how fast confidence is earned in your context.
|
|
238
|
+
|
|
239
|
+
| Phase | Move on when | Goal | Agent(s) |
|
|
240
|
+
|-------|--------------|------|----------|
|
|
241
|
+
| Experiment | The agent's output survives review on real PRs | Validate one use case | 1 agent |
|
|
242
|
+
| Integrate | CI results are stable and findings hold up | CI/CD pipeline | 3-4 agents |
|
|
243
|
+
| Scale | Each new use case shows measured value | Multiple use cases | 8+ agents |
|
|
221
244
|
| Evolve | Ongoing | Continuous learning | Full fleet |
|
|
222
245
|
|
|
223
246
|
### Phase 1 Example
|
|
224
247
|
```bash
|
|
225
|
-
#
|
|
226
|
-
aqe agent spawn qe-test-
|
|
248
|
+
# Start: deploy a single agent
|
|
249
|
+
aqe agent spawn qe-test-architect
|
|
227
250
|
|
|
228
|
-
#
|
|
229
|
-
# Track: bugs found, test quality, review time
|
|
251
|
+
# Then: generate tests for a handful of real PRs
|
|
252
|
+
# Track: bugs found, test quality, review time, claims that failed verification
|
|
230
253
|
|
|
231
|
-
#
|
|
232
|
-
aqe agent metrics qe-test-
|
|
233
|
-
# →
|
|
254
|
+
# Measure impact against your pre-agent baseline
|
|
255
|
+
aqe agent metrics qe-test-architect
|
|
256
|
+
# → Compare tests, bugs found and review time with the baseline; keep what the data supports
|
|
234
257
|
```
|
|
235
258
|
|
|
236
259
|
---
|
|
@@ -255,18 +278,18 @@ aqe agent metrics qe-test-generator
|
|
|
255
278
|
|
|
256
279
|
| Do | Don't |
|
|
257
280
|
|----|-------|
|
|
258
|
-
| Start with one agent, one use case | Deploy
|
|
281
|
+
| Start with one agent, one use case | Deploy the whole fleet at once |
|
|
259
282
|
| Build feedback loops early | Deploy and forget |
|
|
260
283
|
| Human reviews agent output | Auto-merge without review |
|
|
261
284
|
| Measure bugs caught, time saved | Track vanity metrics (test count) |
|
|
262
|
-
|
|
|
285
|
+
| Earn autonomy with measured confidence | Give full autonomy immediately |
|
|
263
286
|
|
|
264
|
-
###
|
|
287
|
+
### Autonomy Progression (gated by evidence)
|
|
265
288
|
```
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
289
|
+
Stage 1: Agent suggests → Human decides
|
|
290
|
+
Stage 2: Agent acts → Human reviews after (when its suggestions consistently survive review)
|
|
291
|
+
Stage 3: Agent autonomous on low-risk work (when post-hoc reviews stop finding real problems)
|
|
292
|
+
Stage 4: Agent handles critical with oversight (when the low-risk record and its disclosures hold up)
|
|
270
293
|
```
|
|
271
294
|
|
|
272
295
|
---
|
|
@@ -286,8 +309,8 @@ preload_skills:
|
|
|
286
309
|
- quality-metrics # For measurement
|
|
287
310
|
|
|
288
311
|
agent_assignments:
|
|
289
|
-
qe-test-
|
|
290
|
-
qe-coverage-
|
|
312
|
+
qe-test-architect: [api-testing-patterns, tdd-london-chicago]
|
|
313
|
+
qe-coverage-specialist: [quality-metrics, risk-based-testing]
|
|
291
314
|
qe-security-scanner: [security-testing, risk-based-testing]
|
|
292
315
|
qe-performance-tester: [performance-testing]
|
|
293
316
|
```
|
|
@@ -307,4 +330,4 @@ agent_assignments:
|
|
|
307
330
|
|
|
308
331
|
---
|
|
309
332
|
|
|
310
|
-
**Success Metric:**
|
|
333
|
+
**Success Metric:** Ship more often with the same or better quality through agent collaboration, and be able to show the evidence for both.
|
|
@@ -15,6 +15,7 @@ trust_tier: 2
|
|
|
15
15
|
validation:
|
|
16
16
|
schema_path: schemas/output.json
|
|
17
17
|
validator_path: scripts/validate-config.json
|
|
18
|
+
eval_path: evals/brutal-honesty-review.yaml
|
|
18
19
|
---
|
|
19
20
|
|
|
20
21
|
# Brutal Honesty Review
|
|
@@ -24,8 +25,9 @@ When brutal honesty is needed:
|
|
|
24
25
|
1. CHOOSE MODE: Linus (technical), Ramsay (standards), Bach (BS detection)
|
|
25
26
|
2. VERIFY CONTEXT: Senior engineer? Repeated mistake? Critical bug? Explicit request?
|
|
26
27
|
3. STRUCTURE: What's broken → Why it's wrong → What correct looks like → How to fix
|
|
27
|
-
4.
|
|
28
|
-
5.
|
|
28
|
+
4. CITE EVIDENCE for every finding (file:line, command + output, test result, quote)
|
|
29
|
+
5. ATTACK THE WORK, not the worker
|
|
30
|
+
6. ALWAYS provide actionable path forward
|
|
29
31
|
|
|
30
32
|
**Quick Mode Selection:**
|
|
31
33
|
- **Linus**: Code is technically wrong, inefficient, misunderstands fundamentals
|
|
@@ -39,8 +41,8 @@ When brutal honesty is needed:
|
|
|
39
41
|
|
|
40
42
|
**DO NOT USE FOR:** Junior devs' first PRs, demoralized teams, public forums, low psychological safety
|
|
41
43
|
|
|
42
|
-
##
|
|
43
|
-
|
|
44
|
+
## Evidence Rule (No Findings Quota)
|
|
45
|
+
Every finding must cite evidence: a file and line, a command and its output, a test result, or a quote from the PR or docs. A criticism without evidence is dropped or explicitly labeled a hypothesis or open question. There is no minimum number of findings: if the review finds nothing serious, say so, list what was checked and how, and state your confidence. Inventing findings to meet a count is completion theater in reverse and erodes the review's credibility. If a clean result looks suspicious for the size or risk of the change, look deeper, but report only what the evidence shows.
|
|
44
46
|
</default_to_action>
|
|
45
47
|
|
|
46
48
|
## Quick Reference Card
|
|
@@ -147,8 +149,10 @@ ISTQB tests:
|
|
|
147
149
|
- Names of techniques you'll never use
|
|
148
150
|
- V-model terminology
|
|
149
151
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
+
Before making the cert a hiring requirement, ask for the evidence:
|
|
153
|
+
do certified teams in this organization find more important bugs or
|
|
154
|
+
ship fewer escapes? If nobody can show that, the requirement is
|
|
155
|
+
filtering on memorization, not on testing skill."
|
|
152
156
|
```
|
|
153
157
|
|
|
154
158
|
---
|
|
@@ -190,7 +194,8 @@ await Task("Code Review", {
|
|
|
190
194
|
code: pullRequestDiff,
|
|
191
195
|
mode: 'linus', // or 'ramsay', 'bach'
|
|
192
196
|
calibration: 'direct', // or 'harsh', 'brutal'
|
|
193
|
-
requireActionable: true
|
|
197
|
+
requireActionable: true,
|
|
198
|
+
requireEvidence: true // every finding cites file:line, output, or quote
|
|
194
199
|
}, "qe-code-reviewer");
|
|
195
200
|
|
|
196
201
|
// BS detection for vendor claims
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# AQE Skill Evaluation Test Suite: Brutal Honesty Review v1.0.0
|
|
3
|
+
# =============================================================================
|
|
4
|
+
#
|
|
5
|
+
# Guards the evidence rule that replaced the minimum-findings quota:
|
|
6
|
+
# - A clean change gets a clean verdict, not invented findings
|
|
7
|
+
# - Every finding on a flawed change cites evidence from the input
|
|
8
|
+
# - Unsupported claims are met with a request for evidence, not counter-claims
|
|
9
|
+
#
|
|
10
|
+
# Schema: .claude/skills/.validation/schemas/skill-eval.schema.json
|
|
11
|
+
# Output schema: .claude/skills/brutal-honesty-review/schemas/output.json
|
|
12
|
+
#
|
|
13
|
+
# =============================================================================
|
|
14
|
+
|
|
15
|
+
skill: brutal-honesty-review
|
|
16
|
+
version: 1.0.0
|
|
17
|
+
description: >
|
|
18
|
+
Evaluation suite for brutal-honesty-review. Verifies that harsh reviews stay
|
|
19
|
+
evidence-backed: no manufactured findings on clean code, evidence cited for
|
|
20
|
+
every real finding, and no fabricated statistics when challenging claims.
|
|
21
|
+
|
|
22
|
+
models_to_test:
|
|
23
|
+
- claude-sonnet-5 # Primary
|
|
24
|
+
- claude-haiku-4-5 # Minimum quality floor
|
|
25
|
+
|
|
26
|
+
test_cases:
|
|
27
|
+
|
|
28
|
+
- id: tc001_clean_change_clean_verdict
|
|
29
|
+
description: "A small, correct, tested change must not receive invented findings to fill a quota"
|
|
30
|
+
category: evidence_rule
|
|
31
|
+
priority: critical
|
|
32
|
+
input:
|
|
33
|
+
prompt: "Give this change a brutally honest review (Linus mode)."
|
|
34
|
+
code: |
|
|
35
|
+
// clamp.ts
|
|
36
|
+
export function clamp(value: number, min: number, max: number): number {
|
|
37
|
+
if (min > max) throw new RangeError('min must be <= max');
|
|
38
|
+
return Math.min(Math.max(value, min), max);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// clamp.test.ts
|
|
42
|
+
import { clamp } from './clamp';
|
|
43
|
+
test('returns value inside range', () => expect(clamp(5, 0, 10)).toBe(5));
|
|
44
|
+
test('clamps below min', () => expect(clamp(-1, 0, 10)).toBe(0));
|
|
45
|
+
test('clamps above max', () => expect(clamp(11, 0, 10)).toBe(10));
|
|
46
|
+
test('accepts equal bounds', () => expect(clamp(3, 7, 7)).toBe(7));
|
|
47
|
+
test('rejects inverted bounds', () => expect(() => clamp(1, 10, 0)).toThrow(RangeError));
|
|
48
|
+
context:
|
|
49
|
+
language: typescript
|
|
50
|
+
expected_output:
|
|
51
|
+
# Enforced by the runner: a clean verdict is stated explicitly.
|
|
52
|
+
must_match_regex:
|
|
53
|
+
- "(ship-it|ship it|no (serious|critical|significant|blocking) (issues|findings|problems)|nothing serious|clean (verdict|review|bill of health))"
|
|
54
|
+
# Documented intent (not yet enforced by parallel-eval-runner):
|
|
55
|
+
finding_count:
|
|
56
|
+
min: 0
|
|
57
|
+
max: 2
|
|
58
|
+
custom_assertions:
|
|
59
|
+
- type: semantic
|
|
60
|
+
expression: "The review reports no critical or high severity findings, states what was checked, and does not invent defects to reach a minimum count."
|
|
61
|
+
expected: true
|
|
62
|
+
validation:
|
|
63
|
+
schema_check: true
|
|
64
|
+
|
|
65
|
+
- id: tc002_findings_cite_evidence
|
|
66
|
+
description: "Every finding on a flawed change points to the specific code that supports it"
|
|
67
|
+
category: evidence_rule
|
|
68
|
+
priority: critical
|
|
69
|
+
input:
|
|
70
|
+
prompt: "Brutal honesty review of this handler before merge."
|
|
71
|
+
code: |
|
|
72
|
+
export async function enrichOrder(id: string, db: Pool, http: HttpClient) {
|
|
73
|
+
const conn = await db.connect();
|
|
74
|
+
const order = await conn.query('SELECT * FROM orders WHERE id = $1', [id]);
|
|
75
|
+
const rates = await http.get('https://rates.example.com/latest'); // external call, ~800ms
|
|
76
|
+
await conn.query('UPDATE orders SET rate = $1 WHERE id = $2', [rates.eur, id]);
|
|
77
|
+
return order;
|
|
78
|
+
}
|
|
79
|
+
context:
|
|
80
|
+
language: typescript
|
|
81
|
+
expected_output:
|
|
82
|
+
must_contain:
|
|
83
|
+
- "connection"
|
|
84
|
+
severity_classification: high
|
|
85
|
+
custom_assertions:
|
|
86
|
+
- type: semantic
|
|
87
|
+
expression: "Each finding quotes or references the specific line or call it criticizes (for example holding the connection across http.get, or the connection never being released)."
|
|
88
|
+
expected: true
|
|
89
|
+
validation:
|
|
90
|
+
schema_check: true
|
|
91
|
+
keyword_match_threshold: 0.8
|
|
92
|
+
|
|
93
|
+
- id: tc003_unsupported_claim_needs_evidence
|
|
94
|
+
description: "Challenging a vendor claim asks for evidence instead of asserting invented counter-statistics"
|
|
95
|
+
category: bs_detection
|
|
96
|
+
priority: high
|
|
97
|
+
input:
|
|
98
|
+
prompt: "Bach mode: our vendor says their AI testing tool 'finds 99% of production bugs before release'. Should we buy it?"
|
|
99
|
+
expected_output:
|
|
100
|
+
must_contain:
|
|
101
|
+
- "evidence"
|
|
102
|
+
custom_assertions:
|
|
103
|
+
- type: semantic
|
|
104
|
+
expression: "The response asks how the 99% was measured and what data supports it, and does not invent its own percentages or study results."
|
|
105
|
+
expected: true
|
|
106
|
+
validation:
|
|
107
|
+
schema_check: false
|
|
108
|
+
keyword_match_threshold: 0.8
|
|
109
|
+
|
|
110
|
+
success_criteria:
|
|
111
|
+
pass_rate: 0.9
|
|
112
|
+
critical_pass_rate: 1.0
|
|
113
|
+
max_execution_time_ms: 300000
|
|
114
|
+
|
|
115
|
+
metadata:
|
|
116
|
+
author: "agentic-qe"
|
|
117
|
+
created: "2026-10-29"
|
|
118
|
+
coverage_target: >
|
|
119
|
+
Evidence rule: clean verdicts on clean code, evidence-backed findings on
|
|
120
|
+
flawed code, and evidence requests instead of fabricated counter-claims.
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"items": {
|
|
42
42
|
"$ref": "#/$defs/reviewFinding"
|
|
43
43
|
},
|
|
44
|
-
"minItems":
|
|
44
|
+
"minItems": 0,
|
|
45
45
|
"maxItems": 200,
|
|
46
|
-
"description": "
|
|
46
|
+
"description": "Evidence-backed findings with no sugar-coating. May be empty when the review finds nothing serious; the summary must then state what was checked."
|
|
47
47
|
},
|
|
48
48
|
"codeQuality": {
|
|
49
49
|
"$ref": "#/$defs/codeQuality"
|
|
@@ -95,12 +95,18 @@
|
|
|
95
95
|
"$defs": {
|
|
96
96
|
"reviewFinding": {
|
|
97
97
|
"type": "object",
|
|
98
|
-
"required": ["id", "title", "severity", "category", "honestAssessment"],
|
|
98
|
+
"required": ["id", "title", "severity", "category", "honestAssessment", "evidence"],
|
|
99
99
|
"properties": {
|
|
100
100
|
"id": {
|
|
101
101
|
"type": "string",
|
|
102
102
|
"pattern": "^REV-\\d{3,6}$"
|
|
103
103
|
},
|
|
104
|
+
"evidence": {
|
|
105
|
+
"type": "string",
|
|
106
|
+
"minLength": 10,
|
|
107
|
+
"maxLength": 3000,
|
|
108
|
+
"description": "What supports this finding: file:line, command and output, test result, or quote"
|
|
109
|
+
},
|
|
104
110
|
"title": {
|
|
105
111
|
"type": "string",
|
|
106
112
|
"minLength": 10,
|
|
@@ -149,8 +149,8 @@ This validation logic appears in 3 places. A `validateEmail()` helper would redu
|
|
|
149
149
|
- Is this doing too many things?
|
|
150
150
|
- Is there duplication we could reduce?
|
|
151
151
|
|
|
152
|
-
##
|
|
153
|
-
|
|
152
|
+
## Evidence Over Volume
|
|
153
|
+
Every review comment must point at evidence: the line, the failing case, the command output, or the requirement it violates. There is no minimum number of findings. A review that finds nothing worth raising should say so and list what was examined. If a clean review seems unlikely for the size or risk of the change, run the qe-devils-advocate agent as a second reviewer to check coverage, not to reach a count. Severity weights (CRITICAL=3, HIGH=2, MEDIUM=1, LOW=0.5, INFORMATIONAL=0.25) are for prioritizing findings, not for setting quotas.
|
|
154
154
|
|
|
155
155
|
---
|
|
156
156
|
|