agentic-qe 3.12.3 → 3.13.1

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.
Files changed (442) hide show
  1. package/.agents/skills/aqe-plan-quality/SKILL.md +25 -0
  2. package/.agents/skills/aqe-plan-quality/agents/openai.yaml +4 -0
  3. package/.agents/skills/aqe-plan-quality/references/qe-routing.md +22 -0
  4. package/.agents/skills/aqe-review-quality/SKILL.md +24 -0
  5. package/.agents/skills/aqe-review-quality/agents/openai.yaml +4 -0
  6. package/.agents/skills/aqe-review-quality/references/quality-gates.md +20 -0
  7. package/.agents/skills/aqe-test-change/SKILL.md +26 -0
  8. package/.agents/skills/aqe-test-change/agents/openai.yaml +4 -0
  9. package/.agents/skills/aqe-test-change/references/test-specialties.md +23 -0
  10. package/.claude/helpers/.helpers-version +1 -1
  11. package/.claude/helpers/auto-memory-hook.mjs +430 -430
  12. package/.claude/helpers/helpers.manifest.json +6 -5
  13. package/.claude/helpers/hook-handler.cjs +565 -311
  14. package/.claude/helpers/intelligence.cjs +1058 -1058
  15. package/.claude/helpers/ruflo-hook.cjs +5 -1
  16. package/.claude/helpers/statusline.cjs +995 -682
  17. package/.claude/skills/qe-court/SKILL.md +186 -0
  18. package/.claude/skills/qe-court/config.json +27 -0
  19. package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +38 -0
  20. package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/budget.test.ts +21 -0
  21. package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/budget.ts +25 -0
  22. package/.claude/skills/qe-court/evals/qe-court.yaml +70 -0
  23. package/.claude/skills/qe-court/schemas/output.json +92 -0
  24. package/.claude/skills/qe-court/scripts/validate-config.json +30 -0
  25. package/.claude/skills/skills-manifest.json +9 -8
  26. package/.codex/hooks/aqe-codex-hook.cjs +69 -0
  27. package/.codex/hooks/ruflo-codex-hook.cjs +94 -0
  28. package/.codex/hooks.json +169 -0
  29. package/CHANGELOG.md +159 -0
  30. package/README.md +3 -3
  31. package/assets/skills/qe-court/SKILL.md +186 -0
  32. package/assets/skills/qe-court/config.json +27 -0
  33. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +38 -0
  34. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/budget.test.ts +21 -0
  35. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/budget.ts +25 -0
  36. package/assets/skills/qe-court/evals/qe-court.yaml +70 -0
  37. package/assets/skills/qe-court/schemas/output.json +92 -0
  38. package/assets/skills/qe-court/scripts/validate-config.json +30 -0
  39. package/assets/skills/skills-manifest.json +9 -8
  40. package/dist/cli/bundle.js +5 -5
  41. package/dist/cli/chunks/adapter-VRZNL53W.js +2 -0
  42. package/dist/cli/chunks/{agent-booster-wasm-XFAQATTH.js → agent-booster-wasm-4VM3DE42.js} +2 -2
  43. package/dist/cli/chunks/{agent-handler-2ZV4CA3U.js → agent-handler-ZDLMZQQX.js} +2 -2
  44. package/dist/cli/chunks/{agent-memory-branch-6WGP7F5T.js → agent-memory-branch-P72MDHHV.js} +2 -2
  45. package/dist/cli/chunks/aqe-learning-engine-XCNMNERX.js +2 -0
  46. package/dist/cli/chunks/{arena-FWX7XZAE.js → arena-55FZGKEV.js} +4 -4
  47. package/dist/cli/chunks/{arena-KJUNQK4N.js → arena-GCRBQ26R.js} +2 -2
  48. package/dist/cli/chunks/{audit-YFUDEOKN.js → audit-VYAYVLIV.js} +3 -3
  49. package/dist/cli/chunks/base-VZZNR4UR.js +2 -0
  50. package/dist/cli/chunks/{hnswlib-node-SKTT5KIH.js → better-sqlite3-JDDFYVCX.js} +2 -2
  51. package/dist/cli/chunks/{brain-handler-ZCK4WTPK.js → brain-handler-IUKMRGWO.js} +3 -3
  52. package/dist/cli/chunks/{branch-enumerator-HTVINRYG.js → branch-enumerator-TUI3RWLX.js} +2 -2
  53. package/dist/cli/chunks/{browser-WUL2B77M.js → browser-NBQTZYX2.js} +2 -2
  54. package/dist/cli/chunks/browser-workflow-5DZNIFUY.js +2 -0
  55. package/dist/cli/chunks/{chunk-IWQHQLT6.js → chunk-23MT7OBY.js} +2 -2
  56. package/dist/cli/chunks/{chunk-KE3RK35K.js → chunk-2CQAWYYE.js} +1 -1
  57. package/dist/cli/chunks/{chunk-ADQFQBFJ.js → chunk-2D2XFUKI.js} +2 -2
  58. package/dist/cli/chunks/{chunk-2YDZXFO2.js → chunk-2G2QWV7B.js} +2 -2
  59. package/dist/cli/chunks/{chunk-HGJQSTQD.js → chunk-2ISLQU3G.js} +1 -1
  60. package/dist/cli/chunks/{chunk-6E47R27C.js → chunk-2OM3TDC4.js} +1 -1
  61. package/dist/cli/chunks/{chunk-WQASUQ5P.js → chunk-2XZ4BHWS.js} +1 -1
  62. package/dist/cli/chunks/{chunk-E2U3LTGM.js → chunk-3F4XH4ZA.js} +1 -1
  63. package/dist/cli/chunks/{chunk-YUDGQZJN.js → chunk-3K4YC3GC.js} +2 -2
  64. package/dist/cli/chunks/chunk-3KGCBAUH.js +2 -0
  65. package/dist/cli/chunks/{chunk-PXCJDB7J.js → chunk-3Y6CHW67.js} +1 -1
  66. package/dist/cli/chunks/{chunk-MOX25RZQ.js → chunk-4QMWWYNU.js} +2 -2
  67. package/dist/cli/chunks/{chunk-XZGOXLZH.js → chunk-4WGSMODQ.js} +1 -1
  68. package/dist/cli/chunks/{chunk-2CPJCXV6.js → chunk-55WDVSCM.js} +2 -2
  69. package/dist/cli/chunks/{chunk-EHO52NKU.js → chunk-5BB5DUL4.js} +2 -2
  70. package/dist/cli/chunks/{chunk-BEPP57C2.js → chunk-6C3MZLYW.js} +2 -2
  71. package/dist/cli/chunks/{chunk-DTZFZ5M7.js → chunk-6QKQFHS7.js} +2 -2
  72. package/dist/cli/chunks/{chunk-KXKACV3E.js → chunk-6XZXMEK4.js} +3 -3
  73. package/dist/cli/chunks/{chunk-L6GZGEFQ.js → chunk-7D7XFZZI.js} +2 -2
  74. package/dist/cli/chunks/{chunk-NLDLUHOF.js → chunk-7WEHZCSK.js} +2 -2
  75. package/dist/cli/chunks/{chunk-TXLPOXAN.js → chunk-A2MG3YXO.js} +1 -1
  76. package/dist/cli/chunks/{chunk-HJ2LG5IH.js → chunk-AHTOWWSE.js} +1 -1
  77. package/dist/cli/chunks/{chunk-GV2BS5NC.js → chunk-AOMXMFDH.js} +2 -2
  78. package/dist/cli/chunks/{chunk-EH7TSJPS.js → chunk-ARTLSAXO.js} +2 -2
  79. package/dist/cli/chunks/{chunk-CXMOIE7D.js → chunk-AY7S7AWN.js} +2 -2
  80. package/dist/cli/chunks/{chunk-2LNDU7AW.js → chunk-AYYDO52G.js} +2 -2
  81. package/dist/cli/chunks/chunk-BBLWZT5I.js +2 -0
  82. package/dist/cli/chunks/{chunk-KRS4KGX5.js → chunk-BF5BKSDU.js} +2 -2
  83. package/dist/cli/chunks/{chunk-BQ2K4BPD.js → chunk-BOCEOLLJ.js} +2 -2
  84. package/dist/cli/chunks/{chunk-KKOFH26C.js → chunk-CE6LYEHT.js} +1 -1
  85. package/dist/cli/chunks/{chunk-GS6G7AVS.js → chunk-CWP4RMOM.js} +2 -2
  86. package/dist/cli/chunks/{chunk-DCYBV6HV.js → chunk-CWXDL7AH.js} +1 -1
  87. package/dist/cli/chunks/{chunk-KGHSKDC7.js → chunk-DTRFZD7N.js} +2 -2
  88. package/dist/cli/chunks/{chunk-CYSBM52D.js → chunk-DVPGQG4W.js} +2 -2
  89. package/dist/cli/chunks/{chunk-MSDIIRLM.js → chunk-E4D47QTF.js} +2 -2
  90. package/dist/cli/chunks/{chunk-MB7TZQW3.js → chunk-EAKHU5YX.js} +3 -3
  91. package/dist/cli/chunks/{chunk-TP3UAWMB.js → chunk-EGMGOWCE.js} +2 -2
  92. package/dist/cli/chunks/{chunk-4EHW4TNA.js → chunk-ELMUHNXN.js} +2 -2
  93. package/dist/cli/chunks/chunk-EVDYFGVH.js +2 -0
  94. package/dist/cli/chunks/{chunk-D4GMAUTP.js → chunk-FDUSWM6O.js} +98 -88
  95. package/dist/cli/chunks/{chunk-YEC55GO5.js → chunk-FM272B4O.js} +2 -2
  96. package/dist/cli/chunks/{chunk-DMD6WVJ2.js → chunk-FQUUMC57.js} +2 -2
  97. package/dist/cli/chunks/{chunk-Y625LP6K.js → chunk-FQXQJMSF.js} +2 -2
  98. package/dist/cli/chunks/{chunk-Z3SXMYVI.js → chunk-FRAGSKXQ.js} +3 -3
  99. package/dist/cli/chunks/{chunk-MOXKKY5Q.js → chunk-GASOBSNB.js} +4 -4
  100. package/dist/cli/chunks/{chunk-PTPN6HQ7.js → chunk-GJEEPKAT.js} +2 -2
  101. package/dist/cli/chunks/{chunk-WFPGIP4N.js → chunk-GOV2MHLV.js} +2 -2
  102. package/dist/cli/chunks/{chunk-NKTLKMUB.js → chunk-GTPZVLL6.js} +1 -1
  103. package/dist/cli/chunks/chunk-H7YZ2YF2.js +3 -0
  104. package/dist/cli/chunks/{chunk-WKE6WL5C.js → chunk-HFI5PHG5.js} +3 -3
  105. package/dist/cli/chunks/chunk-HUMQU4ES.js +153 -0
  106. package/dist/cli/chunks/{chunk-5FAWIIWF.js → chunk-HYIRFJDB.js} +2 -2
  107. package/dist/cli/chunks/{chunk-DZ775UGW.js → chunk-IBSBOHUX.js} +2 -2
  108. package/dist/cli/chunks/{chunk-NAMJGRGC.js → chunk-IJA4WS7B.js} +2 -2
  109. package/dist/cli/chunks/{chunk-XUUVAAHV.js → chunk-IJP42OGW.js} +2 -2
  110. package/dist/cli/chunks/{chunk-UZ7FXVH5.js → chunk-IMQKEFW6.js} +1 -1
  111. package/dist/cli/chunks/{chunk-MZ7SIO6R.js → chunk-INYS35DV.js} +2 -2
  112. package/dist/cli/chunks/{chunk-MS6VOSPY.js → chunk-IV2VCR75.js} +5 -5
  113. package/dist/cli/chunks/{chunk-UAPUA6OY.js → chunk-IZO6TPGX.js} +2 -2
  114. package/dist/cli/chunks/{chunk-XBOCRCC6.js → chunk-J45DX3IK.js} +1 -1
  115. package/dist/cli/chunks/{chunk-RE42RJYR.js → chunk-J4T6D2OQ.js} +2 -2
  116. package/dist/cli/chunks/{chunk-Y5L37K7X.js → chunk-JAPOMPFD.js} +2 -2
  117. package/dist/cli/chunks/{chunk-M7W6VJ65.js → chunk-JELNVHBF.js} +1 -1
  118. package/dist/cli/chunks/{chunk-YDYKFSD2.js → chunk-JOTNKZ7A.js} +87 -87
  119. package/dist/cli/chunks/{chunk-VUCVSKJC.js → chunk-KNWDXI3I.js} +2 -2
  120. package/dist/cli/chunks/{chunk-SPI4LUJ6.js → chunk-KW5NBORV.js} +2 -2
  121. package/dist/cli/chunks/{chunk-2OX74DOO.js → chunk-L7IOTWWY.js} +1 -1
  122. package/dist/cli/chunks/{chunk-VFYMWDSJ.js → chunk-LJQ27PUE.js} +1 -1
  123. package/dist/cli/chunks/{chunk-NT66CT73.js → chunk-LSKQUUUN.js} +2 -2
  124. package/dist/cli/chunks/{chunk-ROFCS47F.js → chunk-LSZZQ7H6.js} +1 -1
  125. package/dist/cli/chunks/{chunk-Y6XNISHP.js → chunk-LTKNCYMO.js} +2 -2
  126. package/dist/cli/chunks/{chunk-7WF3TW3G.js → chunk-LTWT4GZD.js} +4 -4
  127. package/dist/cli/chunks/chunk-LVHMXGDI.js +29 -0
  128. package/dist/cli/chunks/{chunk-3YC4YUGB.js → chunk-M3T6FB54.js} +2 -2
  129. package/dist/cli/chunks/{chunk-M32DTUZM.js → chunk-MAYZTGJ2.js} +3 -3
  130. package/dist/cli/chunks/{chunk-RLBNAB6Y.js → chunk-MCIO7BDK.js} +1 -1
  131. package/dist/cli/chunks/{chunk-SFS3UHNF.js → chunk-MPD7RR4P.js} +1 -1
  132. package/dist/cli/chunks/{chunk-DDYP6FBC.js → chunk-MUFYDKVC.js} +2 -2
  133. package/dist/cli/chunks/{chunk-ZFLE4D4X.js → chunk-MX5ZDKRR.js} +2 -2
  134. package/dist/cli/chunks/{chunk-WBZNLFTV.js → chunk-MXKHIZVM.js} +5 -5
  135. package/dist/cli/chunks/chunk-MY47CR27.js +2 -0
  136. package/dist/cli/chunks/chunk-N7WAZ2Y6.js +2 -0
  137. package/dist/cli/chunks/{chunk-2HCMRGMO.js → chunk-NHV4PTG6.js} +2 -2
  138. package/dist/cli/chunks/{chunk-HJ4U64BL.js → chunk-NP4CP3LR.js} +2 -2
  139. package/dist/cli/chunks/{chunk-UIHZ34SJ.js → chunk-OCKTPTQ7.js} +2 -2
  140. package/dist/cli/chunks/{chunk-SGMJ277D.js → chunk-OE4B6LDZ.js} +1 -1
  141. package/dist/cli/chunks/{chunk-SV7J5FDW.js → chunk-OPQY2333.js} +2 -2
  142. package/dist/cli/chunks/{chunk-FTM562PF.js → chunk-ORDH4VPL.js} +1 -1
  143. package/dist/cli/chunks/{chunk-YOG5KQZF.js → chunk-P4Y3G6OB.js} +2 -2
  144. package/dist/cli/chunks/{chunk-LHAUFY4Y.js → chunk-PIOO2M4W.js} +2 -2
  145. package/dist/cli/chunks/{chunk-UGW23T6S.js → chunk-PKMCZFET.js} +2 -2
  146. package/dist/cli/chunks/{chunk-OPG2HV2W.js → chunk-QES4QHQW.js} +1 -1
  147. package/dist/cli/chunks/{chunk-BDGKB2PT.js → chunk-QG6BXSNJ.js} +2 -2
  148. package/dist/cli/chunks/{chunk-BSNNTOHY.js → chunk-QLOOW23R.js} +3 -3
  149. package/dist/cli/chunks/{chunk-AIWRYWK2.js → chunk-RSCGBHLM.js} +2 -2
  150. package/dist/cli/chunks/{chunk-LCM7TY76.js → chunk-RZ6CO3RZ.js} +2 -2
  151. package/dist/cli/chunks/chunk-S6F3IJMK.js +2 -0
  152. package/dist/cli/chunks/{chunk-WUE53ZPH.js → chunk-S6VNPKHO.js} +1 -1
  153. package/dist/cli/chunks/{chunk-L2X3BWMN.js → chunk-SHWXADCI.js} +2 -2
  154. package/dist/cli/chunks/{chunk-GMFFMJD6.js → chunk-SPJQJWGK.js} +2 -2
  155. package/dist/cli/chunks/{chunk-KVHCWH4H.js → chunk-SS6K4FBH.js} +2 -2
  156. package/dist/cli/chunks/{chunk-ZGKQCUPB.js → chunk-SXADKQJN.js} +2 -2
  157. package/dist/cli/chunks/{chunk-LGYEOYQJ.js → chunk-TBQTGQ75.js} +2 -2
  158. package/dist/cli/chunks/{chunk-J2RJOJ5Q.js → chunk-TDGE52HJ.js} +1 -1
  159. package/dist/cli/chunks/chunk-THFLRJT6.js +54 -0
  160. package/dist/cli/chunks/{chunk-GGTCD4MA.js → chunk-TQ2MA3SR.js} +1 -1
  161. package/dist/cli/chunks/{chunk-NOSQI2OW.js → chunk-UCQ66N6M.js} +3 -3
  162. package/dist/cli/chunks/{chunk-CL6SNCFF.js → chunk-UHGMS2PJ.js} +1 -1
  163. package/dist/cli/chunks/{chunk-XDHGCBTS.js → chunk-UHKXKWMD.js} +2 -2
  164. package/dist/cli/chunks/{chunk-PEHEANAM.js → chunk-UJ6TMZC6.js} +2 -2
  165. package/dist/cli/chunks/{chunk-PSDH7CIL.js → chunk-UKBDH27A.js} +1 -1
  166. package/dist/cli/chunks/{chunk-ZTKCGEB6.js → chunk-UMCEEXQN.js} +1 -1
  167. package/dist/cli/chunks/{chunk-KA4EAMMQ.js → chunk-USUFTHHT.js} +3 -3
  168. package/dist/cli/chunks/{chunk-QILF6BZH.js → chunk-V32MDID3.js} +2 -2
  169. package/dist/cli/chunks/{chunk-6SUSRXXF.js → chunk-VAJT6QWX.js} +1 -1
  170. package/dist/cli/chunks/{chunk-7Q74K3HZ.js → chunk-VLUJWI56.js} +1 -1
  171. package/dist/cli/chunks/{chunk-DW7OI5IF.js → chunk-WINA3XUT.js} +2 -2
  172. package/dist/cli/chunks/{chunk-S47YGWXK.js → chunk-WWCH5SSF.js} +2 -2
  173. package/dist/cli/chunks/{chunk-FJACKKRL.js → chunk-WWP2VXYJ.js} +2 -2
  174. package/dist/cli/chunks/{chunk-N4ML23ZG.js → chunk-WZROSTQZ.js} +1 -1
  175. package/dist/cli/chunks/{chunk-FXOOOJQD.js → chunk-XFUF654L.js} +1 -1
  176. package/dist/cli/chunks/{chunk-PDX7IYTJ.js → chunk-XN2CD5S6.js} +2 -2
  177. package/dist/cli/chunks/{chunk-DHUZHT5D.js → chunk-XOQQGZFY.js} +1 -1
  178. package/dist/cli/chunks/{chunk-4HP7N6SP.js → chunk-XSCOEY4C.js} +2 -2
  179. package/dist/cli/chunks/{chunk-KNWBRMLL.js → chunk-Y734CWHJ.js} +2 -2
  180. package/dist/cli/chunks/{chunk-NJDLJ3KD.js → chunk-YBPCBFEE.js} +2 -2
  181. package/dist/cli/chunks/{chunk-67BCEHU5.js → chunk-YLAEIS6F.js} +1 -1
  182. package/dist/cli/chunks/{chunk-E53UR2EW.js → chunk-YMMVCOPF.js} +3 -3
  183. package/dist/cli/chunks/{chunk-VSD6JE2H.js → chunk-YQCAXYBF.js} +2 -2
  184. package/dist/cli/chunks/{chunk-32L7DKNQ.js → chunk-YRVUYM62.js} +2 -2
  185. package/dist/cli/chunks/{chunk-LNIHLNW4.js → chunk-YVKMHXQK.js} +3 -3
  186. package/dist/cli/chunks/{chunk-CHFTHSMM.js → chunk-ZCLFAOVT.js} +2 -2
  187. package/dist/cli/chunks/{chunk-AZ24ONMX.js → chunk-ZH6ZBDVV.js} +1 -1
  188. package/dist/cli/chunks/{chunk-R6WMGSEK.js → chunk-ZHEKGB4A.js} +2 -2
  189. package/dist/cli/chunks/{chunk-EOUJ6X5H.js → chunk-ZIBW7CB4.js} +1 -1
  190. package/dist/cli/chunks/{chunk-OBL6W4Z5.js → chunk-ZLCATRXI.js} +2 -2
  191. package/dist/cli/chunks/{chunk-UGXHMQ6P.js → chunk-ZXX2VFMA.js} +2 -2
  192. package/dist/cli/chunks/{chunk-72QQDR3Y.js → chunk-ZYPESQ4M.js} +2 -2
  193. package/dist/cli/chunks/{ci-MMLUV6L6.js → ci-HHL5WQXQ.js} +2 -2
  194. package/dist/cli/chunks/{ci-output-25GS6RXR.js → ci-output-HVOJC2KN.js} +2 -2
  195. package/dist/cli/chunks/{circuit-breaker-4OWAN6R6.js → circuit-breaker-HRXMIY2G.js} +2 -2
  196. package/dist/cli/chunks/{claude-flow-setup-LR3SRBX6.js → claude-flow-setup-3I7WVMZN.js} +2 -2
  197. package/dist/cli/chunks/client-EY2IYQDL.js +2 -0
  198. package/dist/cli/chunks/{cline-installer-YSZWRZUI.js → cline-installer-NBREL4QT.js} +2 -2
  199. package/dist/cli/chunks/{code-UUWUIXI7.js → code-TX4E2RWU.js} +2 -2
  200. package/dist/cli/chunks/{code-index-extractor-2LSPQORU.js → code-index-extractor-YELOFLSL.js} +2 -2
  201. package/dist/cli/chunks/codex-installer-HEX3KFRB.js +10 -0
  202. package/dist/cli/chunks/{completions-YKXBKZSO.js → completions-72GGFRGG.js} +2 -2
  203. package/dist/cli/chunks/{complexity-analyzer-HNT2QRWB.js → complexity-analyzer-WRAKDYUK.js} +2 -2
  204. package/dist/cli/chunks/{continuedev-installer-AW5VCB66.js → continuedev-installer-UGYKSKTI.js} +2 -2
  205. package/dist/cli/chunks/{copilot-installer-B6SVZXQT.js → copilot-installer-RPCRUKIJ.js} +2 -2
  206. package/dist/cli/chunks/core-handlers-G4GLA4DT.js +2 -0
  207. package/dist/cli/chunks/{cost-tracker-POZMBN2V.js → cost-tracker-CNHJ7G4M.js} +2 -2
  208. package/dist/cli/chunks/{coverage-V5BGPN5Q.js → coverage-RHIQ4XEX.js} +3 -3
  209. package/dist/cli/chunks/cross-domain-router-P3K4IH5H.js +2 -0
  210. package/dist/cli/chunks/{cursor-installer-EYBI4QVK.js → cursor-installer-KSRVA4V2.js} +2 -2
  211. package/dist/cli/chunks/{daemon-CF6ENQB2.js → daemon-IT4AAFBW.js} +3 -3
  212. package/dist/cli/chunks/{daemon-HKARXY2W.js → daemon-QBXSJABV.js} +4 -4
  213. package/dist/cli/chunks/{dag-attention-scheduler-XIL5IAP7.js → dag-attention-scheduler-F7WCQTLY.js} +2 -2
  214. package/dist/cli/chunks/{detect-RRX2U2KK.js → detect-2IYU332U.js} +2 -2
  215. package/dist/cli/chunks/{dist-node-DOANNRCS.js → dist-node-CIYNYCYN.js} +2 -2
  216. package/dist/cli/chunks/{domain-handler-QMTJV5OR.js → domain-handler-QRYQO2QK.js} +2 -2
  217. package/dist/cli/chunks/{domain-transfer-FSNH75XW.js → domain-transfer-2OQDOD3G.js} +2 -2
  218. package/dist/cli/chunks/dream-IT4ZQGEO.js +2 -0
  219. package/dist/cli/chunks/{embed-and-insert-pattern-NI7PGONV.js → embed-and-insert-pattern-P2IFC7JL.js} +2 -2
  220. package/dist/cli/chunks/{eval-6ZAF2RY3.js → eval-SBPK37IB.js} +2 -2
  221. package/dist/cli/chunks/{experience-capture-middleware-JMXR7N5G.js → experience-capture-middleware-3GMFND3F.js} +3 -3
  222. package/dist/cli/chunks/{fast-paths-YB7XZZ76.js → fast-paths-4OYYII2F.js} +2 -2
  223. package/dist/cli/chunks/{feature-flags-2RC4GFC4.js → feature-flags-BM6QTMMC.js} +2 -2
  224. package/dist/cli/chunks/{feature-flags-KJSP7KR6.js → feature-flags-NFCAYUWO.js} +2 -2
  225. package/dist/cli/chunks/{file-discovery-SUPBXFYI.js → file-discovery-2M3ZUAGC.js} +2 -2
  226. package/dist/cli/chunks/{fleet-KSXFOLFW.js → fleet-QMGGVIDV.js} +3 -3
  227. package/dist/cli/chunks/{gnn-wrapper-DFZ5KPPK.js → gnn-wrapper-WGMAGZMO.js} +2 -2
  228. package/dist/cli/chunks/{heartbeat-handler-G3EADK2H.js → heartbeat-handler-5RSMEZGG.js} +4 -4
  229. package/dist/cli/chunks/heartbeat-scheduler-UUWSPHF2.js +2 -0
  230. package/dist/cli/chunks/hnsw-adapter-YUJVSFPD.js +2 -0
  231. package/dist/cli/chunks/hnsw-index-FQZ47RSJ.js +2 -0
  232. package/dist/cli/chunks/{hnsw-legacy-bridge-MA676GER.js → hnsw-legacy-bridge-TYPQ2T6P.js} +2 -2
  233. package/dist/cli/chunks/{better-sqlite3-FE55OGYB.js → hnswlib-node-GMRPPMDM.js} +2 -2
  234. package/dist/cli/chunks/{hooks-HTCPMZNZ.js → hooks-NUC5P3OJ.js} +10 -10
  235. package/dist/cli/chunks/hybrid-router-T5MF73NF.js +2 -0
  236. package/dist/cli/chunks/{hypergraph-engine-QPB3IH4A.js → hypergraph-engine-OIB7WK54.js} +2 -2
  237. package/dist/cli/chunks/{hypergraph-handler-GBFSVD7N.js → hypergraph-handler-XX2N75QC.js} +3 -3
  238. package/dist/cli/chunks/impact-analyzer-AEGELYMD.js +2 -0
  239. package/dist/cli/chunks/{init-handler-XYBTBCPD.js → init-handler-AKSTJMZY.js} +6 -6
  240. package/dist/cli/chunks/init-wizard-WKX3OGWM.js +2 -0
  241. package/dist/cli/chunks/kernel-5CVWFIGR.js +2 -0
  242. package/dist/cli/chunks/{kilocode-installer-LY6JOBFY.js → kilocode-installer-375V5ZZB.js} +2 -2
  243. package/dist/cli/chunks/{kiro-installer-JF6NXTJL.js → kiro-installer-GKY5GB5Q.js} +2 -2
  244. package/dist/cli/chunks/knowledge-graph-EGPMNDMT.js +2 -0
  245. package/dist/cli/chunks/{learning-BIISN67N.js → learning-2CQE3QP6.js} +3 -3
  246. package/dist/cli/chunks/{llm-router-YZUNVZQE.js → llm-router-FTQNRF45.js} +5 -5
  247. package/dist/cli/chunks/llm-router-service-H4LXOARB.js +2 -0
  248. package/dist/cli/chunks/{load-MTWNBNLL.js → load-3DBAO5ZG.js} +2 -2
  249. package/dist/cli/chunks/load-test-OOOGITSN.js +2 -0
  250. package/dist/cli/chunks/{mcp-37PYMNHQ.js → mcp-AWR6TDXM.js} +2 -2
  251. package/dist/cli/chunks/{memory-IXUUDCI3.js → memory-GI4LCNXY.js} +5 -5
  252. package/dist/cli/chunks/memory-backend-O2YOT4LW.js +2 -0
  253. package/dist/cli/chunks/{memory-handlers-RM2VOFJX.js → memory-handlers-MALKG7GP.js} +2 -2
  254. package/dist/cli/chunks/{multi-model-executor-RKKS5XYG.js → multi-model-executor-SWFT5U72.js} +2 -2
  255. package/dist/cli/chunks/{opencode-installer-3VXI5MTR.js → opencode-installer-EYXGYJX5.js} +2 -2
  256. package/dist/cli/chunks/{orchestrator-UO3ZOGFZ.js → orchestrator-MP3EAZVC.js} +5 -5
  257. package/dist/cli/chunks/pattern-null-store-WBOHE2XL.js +2 -0
  258. package/dist/cli/chunks/{pattern-usage-recorder-YJKRL2GI.js → pattern-usage-recorder-25P3R3W7.js} +2 -2
  259. package/dist/cli/chunks/{pipeline-GJQJKXWX.js → pipeline-LSAFL25D.js} +2 -2
  260. package/dist/cli/chunks/{platform-RHVCZK6C.js → platform-IJ6DJ2PG.js} +2 -2
  261. package/dist/cli/chunks/{plugin-ZKAIW7O6.js → plugin-OXOZRZW2.js} +2 -2
  262. package/dist/cli/chunks/{prime-radiant-advanced-wasm-4X3DSKQV.js → prime-radiant-advanced-wasm-HJNJQQ3R.js} +2 -2
  263. package/dist/cli/chunks/protocol-executor-JCNTPW5J.js +2 -0
  264. package/dist/cli/chunks/{protocol-handler-KKYQZMB2.js → protocol-handler-TCMUH2HL.js} +2 -2
  265. package/dist/cli/chunks/{prove-OD6RPKWX.js → prove-ADXQ2GOX.js} +2 -2
  266. package/dist/cli/chunks/provider-manager-LPGQ5GOO.js +2 -0
  267. package/dist/cli/chunks/qe-reasoning-bank-FWVYVSPP.js +2 -0
  268. package/dist/cli/chunks/{quality-ZRWBXCKO.js → quality-EWP36ORX.js} +2 -2
  269. package/dist/cli/chunks/{quality-gate-Y6BWQV7J.js → quality-gate-3BIG7PVU.js} +3 -3
  270. package/dist/cli/chunks/queen-coordinator-UXNALRVD.js +2 -0
  271. package/dist/cli/chunks/{real-embeddings-YYEUO4P2.js → real-embeddings-D4NBT7W5.js} +2 -2
  272. package/dist/cli/chunks/{roocode-installer-JBCPS3FK.js → roocode-installer-DOPWH6YV.js} +2 -2
  273. package/dist/cli/chunks/router-C6LUIQYY.js +2 -0
  274. package/dist/cli/chunks/routing-feedback-KMSGGDVD.js +2 -0
  275. package/dist/cli/chunks/{routing-handler-KTPJOSBJ.js → routing-handler-5ADEFOHS.js} +2 -2
  276. package/dist/cli/chunks/{ruvector-commands-SCZZVRE7.js → ruvector-commands-PLMEIHSN.js} +2 -2
  277. package/dist/cli/chunks/{rvf-dual-writer-IP7GELQJ.js → rvf-dual-writer-EQWKVNQB.js} +2 -2
  278. package/dist/cli/chunks/{rvf-migration-adapter-WLFTDARU.js → rvf-migration-adapter-2OWFUUCG.js} +2 -2
  279. package/dist/cli/chunks/{rvf-migration-coordinator-MGFDQ5WD.js → rvf-migration-coordinator-URAETAPU.js} +2 -2
  280. package/dist/cli/chunks/rvf-native-adapter-K54BELUE.js +2 -0
  281. package/dist/cli/chunks/{rvf-store-integrity-OTOAGT5W.js → rvf-store-integrity-4AWPW4TF.js} +2 -2
  282. package/dist/cli/chunks/safe-db-NGOZWF2D.js +2 -0
  283. package/dist/cli/chunks/schedule-B3Y5P64E.js +2 -0
  284. package/dist/cli/chunks/scheduler-Z6QVRMTB.js +2 -0
  285. package/dist/cli/chunks/{security-B2CLZKRB.js → security-HDLZVM62.js} +3 -3
  286. package/dist/cli/chunks/{shared-rvf-adapter-2PMFAQMN.js → shared-rvf-adapter-YQT7PF7X.js} +2 -2
  287. package/dist/cli/chunks/{shared-rvf-dual-writer-B6P732AV.js → shared-rvf-dual-writer-N5D3NSJ7.js} +2 -2
  288. package/dist/cli/chunks/sqlite-persistence-PLOUGATS.js +2 -0
  289. package/dist/cli/chunks/{status-handler-M6SN2W2D.js → status-handler-KLYRJ2MR.js} +2 -2
  290. package/dist/cli/chunks/{structural-health-YCCTGI3K.js → structural-health-6LKVRP6Y.js} +2 -2
  291. package/dist/cli/chunks/sync-7VMFPBVB.js +2 -0
  292. package/dist/cli/chunks/{sync-KSRF77ID.js → sync-YYOW6L6W.js} +2 -2
  293. package/dist/cli/chunks/{task-handler-MIKRB2SL.js → task-handler-RKQDGFN2.js} +2 -2
  294. package/dist/cli/chunks/{task-handlers-YXKRUBQ4.js → task-handlers-6YJ4QTEP.js} +3 -3
  295. package/dist/cli/chunks/{test-MLOLQCB7.js → test-ASPUIUJH.js} +4 -4
  296. package/dist/cli/chunks/{test-scheduling-3KXESUZS.js → test-scheduling-I7ABQBBU.js} +3 -3
  297. package/dist/cli/chunks/{token-bootstrap-6V2PMDBJ.js → token-bootstrap-2XZBTODN.js} +2 -2
  298. package/dist/cli/chunks/{token-usage-DP6THJ3I.js → token-usage-TMUE6PTF.js} +2 -2
  299. package/dist/cli/chunks/transformers-FDHHH4SL.js +2 -0
  300. package/dist/cli/chunks/{tree-sitter-wasm-parser-COK2XERS.js → tree-sitter-wasm-parser-G7PGZA5C.js} +2 -2
  301. package/dist/cli/chunks/{types-PYHUCVOZ.js → types-JGT57UFP.js} +2 -2
  302. package/dist/cli/chunks/unified-memory-P5YVLMFI.js +2 -0
  303. package/dist/cli/chunks/unified-memory-hnsw-7HI43A2O.js +2 -0
  304. package/dist/cli/chunks/unified-persistence-U26YP3N3.js +2 -0
  305. package/dist/cli/chunks/{upgrade-ONP2HNGL.js → upgrade-V6UQODJF.js} +2 -2
  306. package/dist/cli/chunks/{validate-NWSICDAY.js → validate-UBZAE5RW.js} +2 -2
  307. package/dist/cli/chunks/{validate-swarm-KXS5P3U7.js → validate-swarm-TSO2MI5X.js} +2 -2
  308. package/dist/cli/chunks/{vibium-TZSGZRCQ.js → vibium-7G3VYSQA.js} +2 -2
  309. package/dist/cli/chunks/visual-security-6FCDY5FF.js +2 -0
  310. package/dist/cli/chunks/{web-tree-sitter-V2FADNRA.js → web-tree-sitter-MIYJSF2L.js} +2 -2
  311. package/dist/cli/chunks/{windsurf-installer-GQM7KWDC.js → windsurf-installer-5TLZSQIJ.js} +2 -2
  312. package/dist/cli/chunks/witness-chain-I3K3WQID.js +2 -0
  313. package/dist/cli/chunks/{witness-chain-GTITDIA2.js → witness-chain-LTV7H2HM.js} +2 -2
  314. package/dist/cli/chunks/{witness-key-manager-AHRM2M52.js → witness-key-manager-PAJ2J4AL.js} +2 -2
  315. package/dist/cli/chunks/{workflow-XCGHEL3I.js → workflow-DL3ESR2H.js} +4 -4
  316. package/dist/cli/chunks/workflow-orchestrator-MAALP4WA.js +2 -0
  317. package/dist/cli/chunks/{wrappers-VGO2GO4J.js → wrappers-5HSU665E.js} +2 -2
  318. package/dist/cli/commands/llm-router.js +1 -0
  319. package/dist/cli/handlers/init-handler.js +1 -1
  320. package/dist/coordination/handlers/coverage-collection.d.ts +161 -0
  321. package/dist/coordination/handlers/coverage-collection.js +639 -0
  322. package/dist/coordination/handlers/coverage-handlers.js +199 -146
  323. package/dist/coordination/handlers/handler-types.d.ts +6 -1
  324. package/dist/coordination/handlers/handler-utils.js +10 -3
  325. package/dist/coordination/handlers/security-handlers.js +17 -2
  326. package/dist/coordination/handlers/test-execution-handlers.js +16 -1
  327. package/dist/coordination/result-saver.js +119 -97
  328. package/dist/coordination/task-executor.d.ts +26 -1
  329. package/dist/coordination/task-executor.js +52 -4
  330. package/dist/domains/code-intelligence/services/knowledge-graph.js +8 -0
  331. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +4 -0
  332. package/dist/domains/coverage-analysis/services/gap-detector.js +4 -0
  333. package/dist/domains/defect-intelligence/services/defect-predictor.js +4 -0
  334. package/dist/domains/defect-intelligence/services/root-cause-analyzer.js +4 -0
  335. package/dist/domains/quality-assessment/services/deployment-advisor.js +4 -0
  336. package/dist/domains/quality-assessment/services/quality-analyzer.js +4 -0
  337. package/dist/domains/security-compliance/services/scanners/sast-scanner.js +4 -0
  338. package/dist/domains/test-generation/index.js +17 -2
  339. package/dist/domains/test-generation/services/test-generator.js +31 -9
  340. package/dist/init/codex-installer.d.ts +13 -0
  341. package/dist/init/codex-installer.js +122 -1
  342. package/dist/init/phases/09-assets.js +4 -0
  343. package/dist/init/phases/phase-interface.d.ts +1 -1
  344. package/dist/init/skills-installer.js +1 -0
  345. package/dist/integrations/embeddings/base/EmbeddingGenerator.js +13 -1
  346. package/dist/kernel/unified-memory.js +4 -0
  347. package/dist/learning/qe-flywheel/corpus-scorer.js +10 -7
  348. package/dist/learning/qe-flywheel/generation.d.ts +7 -0
  349. package/dist/learning/qe-flywheel/generation.js +5 -0
  350. package/dist/learning/qe-flywheel/witness-verify.d.ts +86 -0
  351. package/dist/learning/qe-flywheel/witness-verify.js +156 -0
  352. package/dist/learning/real-embeddings.js +15 -1
  353. package/dist/mcp/bundle.js +455 -434
  354. package/dist/mcp/handlers/domain-handler-configs.js +79 -14
  355. package/dist/mcp/types.d.ts +42 -4
  356. package/dist/optimization/session-cache.d.ts +13 -1
  357. package/dist/optimization/session-cache.js +27 -2
  358. package/dist/shared/db-recovery.d.ts +55 -0
  359. package/dist/shared/db-recovery.js +184 -0
  360. package/dist/shared/llm/billing-modes.js +5 -2
  361. package/dist/shared/llm/cost-tracker.js +1 -0
  362. package/dist/shared/llm/interfaces.d.ts +14 -1
  363. package/dist/shared/llm/llm-router-service.js +59 -4
  364. package/dist/shared/llm/provider-manager.d.ts +1 -1
  365. package/dist/shared/llm/provider-manager.js +7 -3
  366. package/dist/shared/llm/providers/claude-code.js +12 -3
  367. package/dist/shared/llm/providers/codex.d.ts +58 -0
  368. package/dist/shared/llm/providers/codex.js +305 -0
  369. package/dist/shared/llm/providers/index.d.ts +1 -0
  370. package/dist/shared/llm/providers/index.js +1 -0
  371. package/dist/shared/llm/router/agent-router-config.d.ts +46 -2
  372. package/dist/shared/llm/router/agent-router-config.js +124 -2
  373. package/dist/shared/llm/router/config-store.d.ts +17 -1
  374. package/dist/shared/llm/router/config-store.js +108 -0
  375. package/dist/shared/llm/router/hybrid-router.js +2 -2
  376. package/dist/shared/llm/router/index.d.ts +2 -2
  377. package/dist/shared/llm/router/index.js +2 -0
  378. package/dist/shared/llm/router/types.d.ts +44 -0
  379. package/dist/shared/llm/router/types.js +1 -0
  380. package/dist/shared/llm/spend-ledger.d.ts +24 -0
  381. package/dist/shared/llm/spend-ledger.js +86 -15
  382. package/dist/shared/llm/translation/message-formatter.js +1 -0
  383. package/dist/shared/safe-db.d.ts +10 -0
  384. package/dist/shared/safe-db.js +17 -0
  385. package/dist/skills/qe-court/referee.d.ts +62 -0
  386. package/dist/skills/qe-court/referee.js +78 -0
  387. package/dist/validation/gate-reexecute.d.ts +9 -0
  388. package/dist/validation/gate-reexecute.js +61 -0
  389. package/dist/validation/paired-bootstrap.d.ts +36 -0
  390. package/dist/validation/paired-bootstrap.js +58 -0
  391. package/package.json +9 -2
  392. package/dist/cli/chunks/adapter-D657MKZY.js +0 -2
  393. package/dist/cli/chunks/aqe-learning-engine-AFR6OZJK.js +0 -2
  394. package/dist/cli/chunks/base-K5QRGZWE.js +0 -2
  395. package/dist/cli/chunks/browser-workflow-ZMMKCGYW.js +0 -2
  396. package/dist/cli/chunks/chunk-6HQDPDN5.js +0 -2
  397. package/dist/cli/chunks/chunk-6SQ72FG7.js +0 -2
  398. package/dist/cli/chunks/chunk-7XUM4LBC.js +0 -2
  399. package/dist/cli/chunks/chunk-FHHCH7WL.js +0 -2
  400. package/dist/cli/chunks/chunk-G5OGKVLO.js +0 -2
  401. package/dist/cli/chunks/chunk-ILRKO6A5.js +0 -43
  402. package/dist/cli/chunks/chunk-NX522PRH.js +0 -153
  403. package/dist/cli/chunks/chunk-PPUDKQ4X.js +0 -29
  404. package/dist/cli/chunks/chunk-RSZOCQOL.js +0 -2
  405. package/dist/cli/chunks/chunk-ULQCEM7K.js +0 -2
  406. package/dist/cli/chunks/chunk-XQ5JT7KM.js +0 -3
  407. package/dist/cli/chunks/client-WI7RRUZO.js +0 -2
  408. package/dist/cli/chunks/codex-installer-E5BVXZVA.js +0 -8
  409. package/dist/cli/chunks/core-handlers-T6URR57V.js +0 -2
  410. package/dist/cli/chunks/cross-domain-router-WHTTKHWM.js +0 -2
  411. package/dist/cli/chunks/dream-QUL6SURC.js +0 -2
  412. package/dist/cli/chunks/heartbeat-scheduler-VZNKE33K.js +0 -2
  413. package/dist/cli/chunks/hnsw-adapter-LGWLDZLC.js +0 -2
  414. package/dist/cli/chunks/hnsw-index-66FOOI7U.js +0 -2
  415. package/dist/cli/chunks/hybrid-router-I5MEVQDF.js +0 -2
  416. package/dist/cli/chunks/impact-analyzer-K6ANYIY3.js +0 -2
  417. package/dist/cli/chunks/init-wizard-URHGXJ32.js +0 -2
  418. package/dist/cli/chunks/kernel-OKI5ZY5P.js +0 -2
  419. package/dist/cli/chunks/knowledge-graph-VQQSK7T5.js +0 -2
  420. package/dist/cli/chunks/llm-router-service-TISH33SY.js +0 -2
  421. package/dist/cli/chunks/load-test-KWKWC4Q7.js +0 -2
  422. package/dist/cli/chunks/memory-backend-JSQQMXVS.js +0 -2
  423. package/dist/cli/chunks/pattern-null-store-SXBIUKE5.js +0 -2
  424. package/dist/cli/chunks/protocol-executor-D3Q5P3WY.js +0 -2
  425. package/dist/cli/chunks/provider-manager-2EIX7E5Q.js +0 -2
  426. package/dist/cli/chunks/qe-reasoning-bank-ITOW2ZHC.js +0 -2
  427. package/dist/cli/chunks/queen-coordinator-TO5X2EXL.js +0 -2
  428. package/dist/cli/chunks/router-GZJQEJU3.js +0 -2
  429. package/dist/cli/chunks/routing-feedback-CRXSKFNS.js +0 -2
  430. package/dist/cli/chunks/rvf-native-adapter-WHADT5HX.js +0 -2
  431. package/dist/cli/chunks/safe-db-MIZ2OFWC.js +0 -2
  432. package/dist/cli/chunks/schedule-XFILYTYC.js +0 -2
  433. package/dist/cli/chunks/scheduler-EIPJ777A.js +0 -2
  434. package/dist/cli/chunks/sqlite-persistence-PFU3GSRD.js +0 -2
  435. package/dist/cli/chunks/sync-3SDMVAIU.js +0 -2
  436. package/dist/cli/chunks/transformers-QFOBOP2Y.js +0 -2
  437. package/dist/cli/chunks/unified-memory-OUVCMFGK.js +0 -2
  438. package/dist/cli/chunks/unified-memory-hnsw-YGQPOHXB.js +0 -2
  439. package/dist/cli/chunks/unified-persistence-GFRZVDOW.js +0 -2
  440. package/dist/cli/chunks/visual-security-LVOOYQ64.js +0 -2
  441. package/dist/cli/chunks/witness-chain-QNFPV4UL.js +0 -2
  442. package/dist/cli/chunks/workflow-orchestrator-MIVBCALG.js +0 -2
@@ -0,0 +1,94 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ const fs = require('node:fs');
5
+ const path = require('node:path');
6
+ const { spawnSync } = require('node:child_process');
7
+
8
+ let input = {};
9
+ let rawInput = '';
10
+ try {
11
+ rawInput = fs.readFileSync(0, 'utf8');
12
+ input = JSON.parse(rawInput || '{}');
13
+ } catch {
14
+ process.exit(0);
15
+ }
16
+
17
+ const git = input.cwd
18
+ ? spawnSync('git', ['-C', input.cwd, 'rev-parse', '--show-toplevel'], {
19
+ encoding: 'utf8',
20
+ timeout: 1000,
21
+ })
22
+ : null;
23
+ const root = git && git.status === 0 ? git.stdout.trim() : '';
24
+ if (!root) process.exit(0);
25
+
26
+ const requested = process.argv[2];
27
+ if (!requested) process.exit(0);
28
+
29
+ const toolInput = input.tool_input || {};
30
+ const toolResponse = input.tool_response || input.tool_result || {};
31
+ const args = [requested];
32
+
33
+ function add(flag, value) {
34
+ if (value !== undefined && value !== null && String(value).length) {
35
+ args.push(flag, String(value));
36
+ }
37
+ }
38
+
39
+ switch (requested) {
40
+ case 'route':
41
+ case 'pre-task':
42
+ add('--task', input.prompt || input.user_prompt || toolInput.prompt);
43
+ break;
44
+ case 'pre-command':
45
+ case 'post-command':
46
+ add('--command', toolInput.command);
47
+ if (requested === 'post-command') {
48
+ add('--success', toolResponse.success !== false);
49
+ }
50
+ break;
51
+ case 'pre-edit':
52
+ case 'post-edit':
53
+ add(
54
+ '--file',
55
+ toolInput.file_path || toolInput.path || toolInput.target_file,
56
+ );
57
+ if (requested === 'post-edit') {
58
+ add('--success', toolResponse.success !== false);
59
+ }
60
+ break;
61
+ case 'session-restore':
62
+ case 'session-end':
63
+ add('--session-id', input.session_id);
64
+ break;
65
+ case 'post-task':
66
+ add('--task-id', input.agent_id || input.subagent_id || input.turn_id);
67
+ add('--success', true);
68
+ break;
69
+ default:
70
+ break;
71
+ }
72
+
73
+ const codexHelper = path.join(root, '.codex', 'hooks', 'ruflo-runtime.cjs');
74
+ const helper = fs.existsSync(codexHelper)
75
+ ? codexHelper
76
+ : path.join(root, '.claude', 'helpers', 'ruflo-hook.cjs');
77
+ if (!fs.existsSync(helper)) process.exit(0);
78
+
79
+ // Ruflo is development-time coordination tooling. Keep this hook fail-open,
80
+ // avoid network installation during a lifecycle event, and suppress its
81
+ // provider-specific output rather than exposing unsupported Codex hook fields.
82
+ spawnSync(process.execPath, [helper, ...args], {
83
+ cwd: root,
84
+ env: {
85
+ ...process.env,
86
+ CLAUDE_PROJECT_DIR: root,
87
+ RUFLO_HOOK_NPX: '0',
88
+ },
89
+ input: rawInput,
90
+ stdio: ['pipe', 'ignore', 'ignore'],
91
+ timeout: Number(process.env.RUFLO_CODEX_HOOK_TIMEOUT_MS) || 15000,
92
+ });
93
+
94
+ process.exit(0);
@@ -0,0 +1,169 @@
1
+ {
2
+ "description": "AQE routing, lifecycle learning, and edit/command guardrails for Codex.",
3
+ "hooks": {
4
+ "SessionStart": [
5
+ {
6
+ "matcher": "startup|resume|clear|compact",
7
+ "hooks": [
8
+ {
9
+ "type": "command",
10
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" session-start",
11
+ "timeout": 25,
12
+ "statusMessage": "Loading AQE learning context"
13
+ },
14
+ {
15
+ "type": "command",
16
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" session-restore",
17
+ "timeout": 15,
18
+ "statusMessage": "Restoring ruflo coordination context"
19
+ }
20
+ ]
21
+ }
22
+ ],
23
+ "UserPromptSubmit": [
24
+ {
25
+ "hooks": [
26
+ {
27
+ "type": "command",
28
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" route",
29
+ "timeout": 20,
30
+ "statusMessage": "Routing through the AQE fleet"
31
+ },
32
+ {
33
+ "type": "command",
34
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" route",
35
+ "timeout": 15,
36
+ "statusMessage": "Recording ruflo task routing"
37
+ }
38
+ ]
39
+ }
40
+ ],
41
+ "PreToolUse": [
42
+ {
43
+ "matcher": "^Bash$",
44
+ "hooks": [
45
+ {
46
+ "type": "command",
47
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" pre-command",
48
+ "timeout": 20,
49
+ "statusMessage": "Applying AQE command guardrails"
50
+ },
51
+ {
52
+ "type": "command",
53
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" pre-command",
54
+ "timeout": 15,
55
+ "statusMessage": "Assessing command risk with ruflo"
56
+ }
57
+ ]
58
+ },
59
+ {
60
+ "matcher": "^(apply_patch|Edit|Write)$",
61
+ "hooks": [
62
+ {
63
+ "type": "command",
64
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" pre-edit",
65
+ "timeout": 20,
66
+ "statusMessage": "Applying AQE edit guardrails"
67
+ },
68
+ {
69
+ "type": "command",
70
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" pre-edit",
71
+ "timeout": 15,
72
+ "statusMessage": "Loading ruflo edit context"
73
+ }
74
+ ]
75
+ }
76
+ ],
77
+ "PostToolUse": [
78
+ {
79
+ "matcher": "^Bash$",
80
+ "hooks": [
81
+ {
82
+ "type": "command",
83
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" post-command",
84
+ "timeout": 20,
85
+ "statusMessage": "Recording AQE command outcome"
86
+ },
87
+ {
88
+ "type": "command",
89
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" post-command",
90
+ "timeout": 15,
91
+ "statusMessage": "Recording command outcome in ruflo"
92
+ }
93
+ ]
94
+ },
95
+ {
96
+ "matcher": "^(apply_patch|Edit|Write)$",
97
+ "hooks": [
98
+ {
99
+ "type": "command",
100
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" post-edit",
101
+ "timeout": 20,
102
+ "statusMessage": "Recording AQE edit outcome"
103
+ },
104
+ {
105
+ "type": "command",
106
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" post-edit",
107
+ "timeout": 15,
108
+ "statusMessage": "Recording edit outcome in ruflo"
109
+ }
110
+ ]
111
+ }
112
+ ],
113
+ "PreCompact": [
114
+ {
115
+ "matcher": "manual|auto",
116
+ "hooks": [
117
+ {
118
+ "type": "command",
119
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" session-end",
120
+ "timeout": 15,
121
+ "statusMessage": "Checkpointing ruflo state before compaction"
122
+ }
123
+ ]
124
+ }
125
+ ],
126
+ "SubagentStart": [
127
+ {
128
+ "hooks": [
129
+ {
130
+ "type": "command",
131
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" pre-task",
132
+ "timeout": 15,
133
+ "statusMessage": "Registering subagent task with ruflo"
134
+ }
135
+ ]
136
+ }
137
+ ],
138
+ "SubagentStop": [
139
+ {
140
+ "hooks": [
141
+ {
142
+ "type": "command",
143
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" post-task",
144
+ "timeout": 15,
145
+ "statusMessage": "Recording subagent outcome in ruflo"
146
+ }
147
+ ]
148
+ }
149
+ ],
150
+ "Stop": [
151
+ {
152
+ "hooks": [
153
+ {
154
+ "type": "command",
155
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/aqe-codex-hook.cjs\" session-end",
156
+ "timeout": 20,
157
+ "statusMessage": "Saving AQE session state"
158
+ },
159
+ {
160
+ "type": "command",
161
+ "command": "node \"$(git rev-parse --show-toplevel)/.codex/hooks/ruflo-codex-hook.cjs\" session-end",
162
+ "timeout": 15,
163
+ "statusMessage": "Saving ruflo session state"
164
+ }
165
+ ]
166
+ }
167
+ ]
168
+ }
169
+ }
package/CHANGELOG.md CHANGED
@@ -5,6 +5,165 @@ All notable changes to the Agentic QE project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.13.1] - 2026-07-23
9
+
10
+ Fixes four reported issues, three of which come down to the same thing: a tool
11
+ told you something it had not actually established. Coverage analysis reported
12
+ numbers it never measured, test generation claimed AI enhancement it never
13
+ performed, and a security advisory reached users through a dependency they never
14
+ asked for.
15
+
16
+ ### Fixed
17
+
18
+ - **Coverage analysis no longer reports numbers it did not measure** ([#569]).
19
+ On a Rust crate, `coverage_analyze_sublinear` returned `78.3%` lines,
20
+ `100%` branches and `0%` functions — none of it measured. It flagged
21
+ `#[cfg(test)]` blocks as untested production code, cited line numbers past the
22
+ end of the file, and analysed test files as coverage targets, all with a
23
+ confidence score attached. Rust crates are now measured with `cargo llvm-cov`
24
+ when it is available. When nothing can be measured, the result says so
25
+ (`estimated: true`, `measured: false`) instead of presenting a guess as data.
26
+ - **`test_generate_enhanced` actually calls your LLM now** ([#567]). The tool
27
+ advertised AI-powered generation but the LLM router never reached the code path
28
+ it runs, so it always returned the same generic scaffold regardless of how you
29
+ configured your provider. It now routes through your configured model, and the
30
+ result reports `llmEnhanced` so a silent fall back to templates is visible
31
+ rather than something you infer from a suspiciously fast response. A broken
32
+ provider (bad key, timeout) reports the fallback honestly instead of claiming
33
+ enhancement it did not perform.
34
+ - **A HIGH-severity advisory no longer reaches consumers** ([#565]).
35
+ `@huggingface/transformers` was declared an *optional* peer dependency, but npm
36
+ installs optional peers — so every install pulled in
37
+ `onnxruntime-node -> adm-zip` and its advisory. It is now an explicit opt-in:
38
+ install it yourself only if you want local in-process embeddings. Everyone
39
+ using an embedding endpoint (the default) no longer carries the advisory.
40
+ - **`codex` is selectable through the LLM router.** The provider existed and
41
+ worked, but was missing from the router's provider list, so it could never
42
+ actually be chosen.
43
+ - **Fixes now take effect immediately after an upgrade.** Operation results were
44
+ cached per project and keyed without the build version, so an upgraded install
45
+ could keep replaying the previous version's answers for up to an hour — making
46
+ a fix look like it had not worked. Set `AQE_SESSION_CACHE_SALT` to force a cold
47
+ cache at any time.
48
+
49
+ ### Added
50
+
51
+ - **Per-agent LLM routing you can configure on disk** ([#568]). Route individual
52
+ agent types through different providers via an `agentOverrides` map in
53
+ `.agentic-qe/llm-config.json` — a strong reasoning model for security agents, a
54
+ free local model for mechanical ones — without changing your global default:
55
+
56
+ ```jsonc
57
+ {
58
+ "defaultProvider": "ollama",
59
+ "agentOverrides": {
60
+ "qe-security-scanner": { "provider": "claude-code", "model": "opus" },
61
+ "qe-mutation-tester": { "provider": "ollama" }
62
+ }
63
+ }
64
+ ```
65
+
66
+ Entries are partial (unset fields keep their defaults), invalid entries are
67
+ dropped with an explanation rather than failing startup, and credentials are
68
+ never persisted here. See `docs/guides/llm-provider-routing.md`.
69
+ - **`AQE_COVERAGE_NO_EXEC=1` — opt out of running build tooling.** Measuring
70
+ coverage means running your project's tests, which executes code from the
71
+ analysed repository (`cargo` also runs `build.rs`; `npx` runs lifecycle
72
+ scripts). That is what you want for your own code, but is worth being able to
73
+ turn off when pointing the tool at something you do not trust. Existing
74
+ coverage reports are still read; everything else degrades to a labelled
75
+ estimate.
76
+ - **QE skills and lifecycle hooks for the Codex CLI.** `aqe init` now installs
77
+ three Codex-native skills — `aqe-test-change`, `aqe-review-quality`,
78
+ `aqe-plan-quality` — under `.agents/skills/`, plus Codex lifecycle hooks in
79
+ `.codex/`, and an `AGENTS.md` describing the repository's conventions. If you
80
+ drive this project with Codex rather than Claude Code, the QE workflows are now
81
+ available there natively instead of Claude-only.
82
+ - **Security scans state how deeply they looked.** Full SAST is implemented for
83
+ JS/TS only; other languages get cross-language pattern matching. Results now
84
+ carry `analysisDepth`, so a zero-finding scan reads as "nothing matched a
85
+ generic pattern" rather than "no vulnerabilities".
86
+
87
+ ### Changed
88
+
89
+ - **BREAKING (result shape):** `coverage_analyze_sublinear` now returns
90
+ `null` — not `0` — for any coverage metric that was not collected.
91
+ `lineCoverage`, `statementCoverage`, `branchCoverage` and `functionCoverage`
92
+ are all `number | null`. `0` now means a measured zero; `null` means unknown.
93
+ Callers doing arithmetic or comparisons on these fields should handle `null`;
94
+ check the new `measured` / `estimated` flags to tell the cases apart. This is
95
+ deliberately a visible break rather than a silent wrong number.
96
+
97
+ [#565]: https://github.com/proffesor-for-testing/agentic-qe/issues/565
98
+ [#567]: https://github.com/proffesor-for-testing/agentic-qe/issues/567
99
+ [#568]: https://github.com/proffesor-for-testing/agentic-qe/issues/568
100
+ [#569]: https://github.com/proffesor-for-testing/agentic-qe/issues/569
101
+
102
+ ## [3.13.0] - 2026-07-18
103
+
104
+ Introduces **QE-Court** — an adversarial review court where a change is
105
+ prosecuted by independent AI reviewers from *different vendors*, each with its
106
+ own probe set, and a `SHIP` verdict must survive an escalating deeper review
107
+ before it stands (`SHIP` / `REMAND` / `BLOCK`). It debuted by reviewing this
108
+ very release — and blocked it, catching three data-loss/crash bugs a green unit
109
+ suite had missed (all fixed below). This release also adds a Codex (GPT) provider
110
+ so the court can seat a genuinely cross-vendor reviewer, a statistical
111
+ significance gate for the self-learning flywheel, automatic `memory.db` recovery,
112
+ and per-agent cost tracking.
113
+
114
+ ### Added
115
+
116
+ - **QE-Court — adversarial review as a verdict (`/qe-court`).** Convenes
117
+ independent, cross-vendor reviewers (Codex/GPT, Cognitum, Claude) against a
118
+ diff/PR/test-suite; a passing grade must *survive* an escalating overturn round
119
+ before it stands. Emits a signed court record with a three-valued verdict. The
120
+ court's rules are enforced in code and verified by a runnable acceptance eval
121
+ (`aqe eval run --skill qe-court`) — trust tier 3.
122
+ - **Codex CLI provider — run QE on your ChatGPT subscription.** A `codex`
123
+ provider (like the existing `claude-code` one) shells out to `codex exec`, so
124
+ GPT-family models cost against your subscription rather than a per-token API
125
+ key. Gives the fleet a cross-vendor engine for review diversity and fallback.
126
+ - **Statistical significance gate for the self-learning flywheel.** A new
127
+ `accept/v1+sig` promotion rule requires a candidate's held-out gain to be
128
+ *statistically significant* (paired bootstrap CI > 0), not just larger by any
129
+ amount — so the flywheel no longer promotes within-noise improvements.
130
+ - **Automatic `memory.db` recovery.** If the learning database opens genuinely
131
+ corrupt, AQE now restores the newest integrity-verified backup automatically
132
+ and parks the corrupt file (never deletes it), instead of asking you to restore
133
+ by hand. Deliberately conservative — a healthy database is never touched.
134
+ - **Per-agent cost attribution.** The spend ledger now records which QE agent
135
+ incurred each LLM charge, so cost can be broken down across the fleet.
136
+ - **Cognitum QE cost-Pareto benchmark** (`scripts/cognitum-qe-bench/`). A
137
+ self-contained harness that measures, per QE task, the cheapest model tier that
138
+ clears the quality bar against `api.cognitum.one` — so tier routing is set by
139
+ evidence. First finding: on these tasks the cheap tier matched or beat the
140
+ frontier tier at 3–4× less cost.
141
+ - Draft `/v1/qe/verdict` API specification for a future hosted QE-Court service.
142
+
143
+ ### Fixed
144
+
145
+ - **4 HIGH-severity CVEs no longer reach consumers (#565).** `@huggingface/`
146
+ `transformers` (which pulled a vulnerable `onnxruntime-node` → `adm-zip`) is now
147
+ an optional peer dependency, so a default `npm install agentic-qe` no longer
148
+ installs it. Local/in-process embeddings still work when the package is present;
149
+ endpoint-based embeddings are unaffected.
150
+ - **Three data-loss / crash bugs caught by QE-Court's own first review.**
151
+ (1) A subscription-provider subprocess exiting early could crash the calling
152
+ process with an unhandled `EPIPE`; (2) the new auto-restore could tear the
153
+ database under concurrent access or misdiagnose a *healthy* database on certain
154
+ bind-mount filesystems and revert to an older backup — both fixed to be atomic,
155
+ locked, and conservative; (3) a failed spend-ledger migration could silently
156
+ stop recording spend, bypassing the budget cap. Plus witness-verification now
157
+ fails closed by default and the flywheel gate rejects statistically
158
+ under-powered samples.
159
+
160
+ ### Changed
161
+
162
+ - The user-facing QE skill count is now **76** (adds `qe-court`), with **50**
163
+ Tier-3 verified skills. `CONTRIBUTING.md` now clarifies that `ruflo` /
164
+ `claude-flow` are development-time tooling, **not** runtime dependencies of the
165
+ shipped package.
166
+
8
167
  ## [3.12.3] - 2026-07-17
9
168
 
10
169
  Fixes a bug that could silently switch off vector search — permanently. If an
package/README.md CHANGED
@@ -147,7 +147,7 @@ Or invoke an agent through the Task tool:
147
147
  | | **Plugin** | **`aqe init`** |
148
148
  |---|---|---|
149
149
  | Setup | One slash command | Full project setup |
150
- | Scope | 11 agents, 9 skills | 60 agents, 85 skills |
150
+ | Scope | 11 agents, 9 skills | 60 agents, 86 skills |
151
151
  | Persistent learning DB | No (uses MCP server's) | Yes (`.agentic-qe/memory.db`) |
152
152
  | Cross-platform support | Claude Code only | 11 platforms (Cursor, Copilot, Cline, etc.) |
153
153
  | Use when | Quick start, single Claude Code project | Production team setup, multi-platform, full fleet |
@@ -275,7 +275,7 @@ Agents automatically apply relevant skills from the skill library. Skills are ra
275
275
  | **Tier 0 — Advisory** | 5 | Guidance only |
276
276
 
277
277
  <details>
278
- <summary><b>View all 75 skills</b></summary>
278
+ <summary><b>View all 76 skills</b></summary>
279
279
 
280
280
  **Core Testing (12):** agentic-quality-engineering, holistic-testing-pact, context-driven-testing, tdd-london-chicago, xp-practices, risk-based-testing, test-automation-strategy, refactoring-patterns, shift-left-testing, shift-right-testing, regression-testing, verification-quality
281
281
 
@@ -285,7 +285,7 @@ Agents automatically apply relevant skills from the skill library. Skills are ra
285
285
 
286
286
  **Domain Skills (11):** qe-test-generation, qe-test-execution, qe-coverage-analysis, qe-quality-assessment, qe-defect-intelligence, qe-requirements-validation, qe-code-intelligence, qe-visual-accessibility, qe-chaos-resilience, qe-learning-optimization, qe-iterative-loop
287
287
 
288
- **Strategic (8):** six-thinking-hats, brutal-honesty-review, sherlock-review, cicd-pipeline-qe-orchestrator, bug-reporting-excellence, consultancy-practices, quality-metrics, pair-programming
288
+ **Strategic (9):** six-thinking-hats, brutal-honesty-review, sherlock-review, qe-court (adversarial review court — SHIP/REMAND/BLOCK verdict that must survive escalating cross-vendor reviewers; see [ADR-124](docs/implementation/adrs/ADR-124-qe-court-adversarial-verdict-service.md)), cicd-pipeline-qe-orchestrator, bug-reporting-excellence, consultancy-practices, quality-metrics, pair-programming
289
289
 
290
290
  **Testing Techniques (9):** exploratory-testing-advanced, test-design-techniques, test-data-management, test-environment-management, test-reporting-analytics, testability-scoring, technical-writing, code-review-quality, api-testing-patterns
291
291
 
@@ -0,0 +1,186 @@
1
+ ---
2
+ name: "qe-court"
3
+ description: "Adversarial review court — a delivery (diff, PR, test suite, or artifact) is prosecuted by independent AI reviewers from different vendors, each with its own probe set, then a SHIP verdict must SURVIVE escalating deeper reviewers before it stands. Use when you want more than one reviewer's opinion on whether something is safe to ship: pre-merge gating, release go/no-go, catching a too-easy PASS, or any 'is this actually done?' decision where a shallow approval is a risk. Produces a signed court record with a three-valued verdict (SHIP / REMAND / BLOCK) and a human as final judge. Learns over time: reproduced charges and overturned SHIPs feed the QE flywheel."
4
+ trust_tier: 3
5
+ validation:
6
+ schema_path: schemas/output.json
7
+ validator_path: scripts/validate-config.json
8
+ eval_path: evals/qe-court.yaml
9
+ status: passing
10
+ passRate: 1.0
11
+ criticalPassRate: 1.0
12
+ lastValidated: "2026-07-18"
13
+ ---
14
+
15
+ # QE-Court: Adversarial Review as a Verdict
16
+
17
+ ## Purpose
18
+
19
+ One reviewer — even a strong one — is one Einstein squinting at the chalkboard.
20
+ QE-Court convenes **independent adversaries from different vendors, with different
21
+ roles and different probe sets**, makes them attack the delivery, and then forces
22
+ any `SHIP` verdict to *survive* an escalating deeper review before it stands. You
23
+ stay in the loop as the final judge. Implements ADR-124; composes ADR-117..122.
24
+
25
+ **The one rule that makes it a court and not a rubber stamp:** a passing grade is
26
+ the *claim under attack*, not the finish line. A shallow `91/100 SHIP` that a
27
+ deeper reviewer can overturn is a bug in the review, not a delivery that shipped.
28
+
29
+ ## When to convene the court
30
+
31
+ - Pre-merge gate on a risky PR or diff
32
+ - Release go/no-go ("deployment readiness with a jury")
33
+ - You got a PASS that felt too easy and want it stress-tested
34
+ - A test suite claims coverage you don't trust (does it kill mutants?)
35
+ - Any high-stakes "is this actually done?" call
36
+
37
+ For a quick single-lens review, use `/sherlock-review`, `/brutal-honesty-review`,
38
+ or `/code-review` instead — the court is for when one opinion isn't enough.
39
+
40
+ ## The court roster (composes existing skills/agents — do NOT reimplement critics)
41
+
42
+ | Role | Who | Job |
43
+ |------|-----|-----|
44
+ | **Defense** | writer model (summarizer) | States the case-FOR-ship from the evidence. Never grades. |
45
+ | **Prosecution** | `qe-devils-advocate`, `brutal-honesty-review`, `sherlock-review`, `qe-security-scanner`, `qe-mutation-tester`, **`codex exec review`** | Each files CHARGES against the delivery, **with its own probe set**, blind to the others until filing. |
46
+ | **Blind refuter** | `src/verification/adversarial-verify` | Tries to KILL weak charges (default-refuted-if-uncertain). |
47
+ | **Jury** | two-gate LLM-judge (ADR-119), cross-model | Weighs surviving charges → verdict + (optional) score. |
48
+ | **Deeper reviewer** | higher effort/model tier of any prosecutor | The overturn round. |
49
+ | **Judge** | **you (the human)** | Sees the strongest case for AND against; rules. |
50
+
51
+ > ⚠️ **Do NOT run the reduced 3-dimension QCSD workflow as the court engine.** It
52
+ > can falsely rate SHIP by skipping the security / mutation / defect lanes. Spawn
53
+ > the *specialized* `qe-*` prosecutors above, or you reproduce the exact
54
+ > false-SHIP the court exists to catch. (ADR-124; see `qcsd-development-swarm`.)
55
+
56
+ ## Model routing (configurable — this is the point of the court)
57
+
58
+ The court's guarantees come from **who** reviews, not just how. Routing is
59
+ **user-configurable** in `config.json` under `routing`; the defaults below enforce
60
+ the invariants. Every model call goes through AQE's provider layer (ADR-123), so
61
+ budget caps and cost receipts apply automatically.
62
+
63
+ | Step | Default provider / tier | Why |
64
+ |------|------------------------|-----|
65
+ | **Defense** | `cognitum-low` or `claude-code` (may equal writer) | Cheap; states the case, never grades |
66
+ | Prosecutor — devils-advocate | `cognitum-mid` | Gap/assumption hunting |
67
+ | Prosecutor — brutal-honesty | `claude-code` (Opus/Sonnet) | Rigor lens, different family from jury |
68
+ | Prosecutor — sherlock | `cognitum-high` | Deductive/root-cause needs a strong model |
69
+ | Prosecutor — security-scanner | SAST tool + `cognitum-mid` | Determinism where possible |
70
+ | Prosecutor — mutation | mutation tool + `local`/booster | Test-adequacy is mechanical |
71
+ | Prosecutor — codex-review | `codex` (ChatGPT sub) | **Cross-vendor GPT brain — true writer≠juror; ≈$0** |
72
+ | **Jury** (two-gate judge) | `cognitum-high` or Opus, `provider ≠ writer` | Must not grade its own family's output |
73
+ | **Deeper reviewer** | highest tier / best-of-N @ higher effort | Escalation must be *stronger* than the base panel |
74
+
75
+ **Provider menu** (mix freely in `routing`): `claude-code` (Claude subscription),
76
+ `cognitum-{low,mid,high}` (Cognitum's own multi-model tiers — one option, it routes
77
+ internally), `openrouter` (**use when you want many distinct models** across vendors
78
+ for breadth), `codex` (GPT via ChatGPT subscription), `claude`/`openai`/`gemini`
79
+ (metered APIs), `ollama` (local). Cognitum and OpenRouter are *separate* options:
80
+ Cognitum already resolves multiple models behind its tiers; OpenRouter is the lever
81
+ when you explicitly want to name several different models.
82
+
83
+ **Enforced invariants** (defaults; do not weaken without reason):
84
+ 1. **≥2 distinct vendors** across the panel — Claude / Cognitum / GPT-via-Codex — not just tiers.
85
+ 2. **Jury provider ∉ {writer, defense}** — no model grades its own or its writer's output.
86
+ 3. All calls routed through `ProviderManager` → ADR-123 budget cap + receipts.
87
+
88
+ ## The protocol
89
+
90
+ ```
91
+ DELIVERY (diff / PR / test-suite / artifact)
92
+ │ 1. DEFENSE — writer model states the case for shipping, from evidence only.
93
+ │ 2. PROSECUTION (parallel, blind) — N specialized reviewers, DIFFERENT vendors,
94
+ │ each generates its OWN probe set and files CHARGES (finding + reproduction).
95
+ │ 3. KILL ROUND — blind refuters attack each charge; weak/unreproducible ones dropped.
96
+ │ 4. JURY — two-gate judge, cross-model, writer≠juror. 3-valued verdict.
97
+ │ A numeric score is emitted ONLY if its rubric passed the ADR-122 ANOVA screen.
98
+ │ 5. OVERTURN ROUND — if verdict == SHIP, escalate ONE deeper reviewer. Loop-until-dry:
99
+ │ SHIP only STANDS if K consecutive deeper rounds find nothing new. Surviving fatal → flip.
100
+ │ 6. SIGNED COURT RECORD — provenance-tier surviving charges (ADR-121), sign (ADR-118).
101
+ ▼ HUMAN JUDGE (you) — rules SHIP / REMAND / BLOCK on the strongest case both ways.
102
+ ```
103
+
104
+ ## Verdict states (three-valued — never a bare pass/fail)
105
+
106
+ | Verdict | Meaning | Trigger |
107
+ |---------|---------|---------|
108
+ | **SHIP** | Survived the overturn round | No fatal charge survived K deeper rounds |
109
+ | **REMAND** | Fixable charges — back to author | Non-fatal charges survived; delivery is close |
110
+ | **BLOCK** | A fatal charge survived | ≥1 fatal charge reproduced and not refuted |
111
+
112
+ ## Self-learning — the court feeds the flywheel (ADR-124 M0.B)
113
+
114
+ A verdict is not the end; it is training signal. After each court run:
115
+
116
+ 1. **Sign the court record → a flywheel receipt.** Use the ADR-118 signer
117
+ (`src/learning/qe-flywheel/receipt.ts` `createSigner` / `platform-signer.ts`,
118
+ persisted via `receipt-store.ts`). The verdict + surviving charges are the body.
119
+ 2. **Each reproduced, surviving charge → a `qe_pattern`** (ADR-110) at provenance
120
+ tier **`oracle:test-exec`** (ADR-121 — it reproduced, so it is oracle-grade).
121
+ Killed/refuted charges are NOT stored as positives (noise control).
122
+ 3. **An overturned SHIP is the highest-value signal there is** — persist
123
+ `{shallow: SHIP, true: BLOCK|REMAND, charge}` as a discriminator training pair
124
+ for the frozen anchor (ADR-117) and two-gate judge (ADR-119). This is what makes
125
+ the court *harder to fool* over time.
126
+ 4. **Retrieval-augment the next panel:** seed each prosecutor's probe set with the
127
+ HNSW-nearest prior charges for similar deliveries (`qe_pattern_embeddings`).
128
+
129
+ All writes are **appends** to existing stores — never destructive to `memory.db`.
130
+
131
+ ## Improvement over time (ADR-124 M0.C)
132
+
133
+ - **Probe-set promotion:** track each probe's historical **mutant-kill rate**;
134
+ promote high-kill probes, retire dead ones (stored under a `qe-court/probes` namespace).
135
+ - **DoE-gated scoring:** emit a numeric score ONLY if its rubric passes the ADR-122
136
+ ANOVA screen (it must actually discriminate). Otherwise report the verdict class +
137
+ charges, no number — never a noise "91/100".
138
+ - **Learnable overturn depth K:** start K=2; learn per-domain the depth at which new
139
+ charges stop appearing (the empirical loop-until-dry tail).
140
+
141
+ ## Anti-collusion invariants (enforce these or it isn't a court)
142
+
143
+ 1. **Writer ≠ any juror.** 2. **Prosecutors file blind.** 3. **Overturn is asymmetric**
144
+ (SHIP must survive escalation; BLOCK needs one surviving fatal charge). 4. **No un-validated scores.**
145
+
146
+ ## How to run it (today)
147
+
148
+ QE-Court is an orchestration skill: the driving agent convenes the court by
149
+ composing existing agents/skills — there is no monolithic binary yet (a thin
150
+ `aqe court` CLI wrapper is planned as ADR-124 Phase 1; the hosted `/v1/qe/verdict`
151
+ is Phase 2). To run a court now:
152
+
153
+ 1. Read `config.json` for the panel + `routing` + `overturnDepth`.
154
+ 2. Spawn the prosecutors **in one message, in parallel** (`Task`/`Agent`,
155
+ `run_in_background: true`), each with its routed provider; run
156
+ `codex exec review` for the cross-vendor lens via Bash.
157
+ 3. Collect charges → run the blind-refuter kill round (`adversarial-verify`).
158
+ 4. Jury (two-gate judge) → verdict. If SHIP, run the overturn loop to `overturnDepth`.
159
+ 5. Emit the signed court record; persist learning per the section above.
160
+ 6. Present the strongest case FOR and AGAINST to the human judge.
161
+
162
+ ## Output: the court record
163
+
164
+ Markdown: the delivery under review, the Defense case, each prosecutor's surviving
165
+ charges (provenance-tiered, with the vendor that filed them), the kill-round
166
+ casualties, the jury verdict, the overturn transcript, and the signed verdict block.
167
+ Durable, attestable evidence — the "jury waiting for everything you ship."
168
+
169
+ ## Trust tier
170
+
171
+ **Tier 3 (verified).** The court's falsifiable invariants are enforced in code
172
+ (`src/skills/qe-court/referee.ts`) and covered by an oracle suite
173
+ (`tests/unit/skills/qe-court/referee.test.ts`) that the acceptance eval
174
+ (`evals/qe-court.yaml`, command-eval mode) runs through the `aqe eval` CLI —
175
+ 6/6 green as of 2026-07-18. The keystone oracle: a seeded mutant a shallow panel
176
+ rated SHIP is overturned to BLOCK when the overturn round is active, and MUST
177
+ regress to SHIP at `overturnDepth: 0` — proving the mechanic carries its weight.
178
+ Run it yourself: `aqe eval run --skill qe-court --model cognitum-low`.
179
+
180
+ ## Related
181
+
182
+ - Reference implementation of ADR-124; hosted sibling is `/v1/qe/verdict` (Cognitum, planned).
183
+ - Prosecutors: `/brutal-honesty-review`, `/sherlock-review`, `qe-devils-advocate` agent, `codex exec review`.
184
+ - Verification core: `src/verification/adversarial-verify`. Signer: `src/learning/qe-flywheel/receipt.ts`.
185
+ - Jury/rigor: ADR-117 (frozen anchor), ADR-119 (two-gate judge), ADR-121 (provenance), ADR-122 (DoE).
186
+ - Contrast: `/code-review`, `/pr-review` (single-lens); `qcsd-cicd-swarm` (phase gate, not adversarial court).
@@ -0,0 +1,27 @@
1
+ {
2
+ "$schema": "./config-schema.json",
3
+ "_description": "QE-Court adversarial review configuration (ADR-124). Auto-created on first run. Edit `routing` to choose which provider/model runs each court role. All providers route through AQE's ADR-123 provider layer (budget caps + receipts apply).",
4
+ "prosecutors": ["devils-advocate", "brutal-honesty", "sherlock", "security-scanner", "mutation", "codex-review"],
5
+ "overturnDepth": 2,
6
+ "emitScore": false,
7
+ "routing": {
8
+ "_note": "provider ids: claude-code | cognitum-{low,mid,high} | openrouter | codex | claude | openai | gemini | ollama. Cognitum resolves multiple models behind its tiers; use openrouter when you want to name several distinct models for breadth.",
9
+ "defense": { "provider": "cognitum-low" },
10
+ "prosecutor.devils-advocate": { "provider": "cognitum-mid" },
11
+ "prosecutor.brutal-honesty": { "provider": "claude-code", "model": "sonnet" },
12
+ "prosecutor.sherlock": { "provider": "cognitum-high" },
13
+ "prosecutor.security-scanner": { "provider": "cognitum-mid" },
14
+ "prosecutor.mutation": { "provider": "ollama" },
15
+ "prosecutor.codex-review": { "provider": "codex" },
16
+ "jury": { "provider": "cognitum-high" },
17
+ "deeperReviewer": { "provider": "codex" }
18
+ },
19
+ "options": {
20
+ "blindFiling": true,
21
+ "writerIsNeverJuror": true,
22
+ "minDistinctVendors": 2,
23
+ "requireDoeGatedScore": true,
24
+ "signCourtRecord": true
25
+ },
26
+ "_setupPrompt": "If unsure, keep the default 3-vendor panel (Claude + Cognitum + Codex/GPT). ALWAYS include 'security-scanner' and 'mutation' for security- or test-quality-sensitive deliveries — omitting them is how a false SHIP happens. The jury provider MUST differ in vendor from the writer/defense (writerIsNeverJuror). Set emitScore=true only after the scoring rubric has passed the ADR-122 ANOVA screen."
27
+ }