agentic-qe 3.15.4 → 3.15.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  2. package/.claude/skills/qe-court/evals/qe-court.yaml +3 -2
  3. package/.claude/skills/qe-quality-assessment/schemas/output.json +12 -2
  4. package/.claude/skills/skills-manifest.json +1 -1
  5. package/CHANGELOG.md +191 -0
  6. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  7. package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
  8. package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
  9. package/assets/skills/skills-manifest.json +1 -1
  10. package/dist/bridge/captured-experience-bridge.js +7 -9
  11. package/dist/cli/bundle.js +5 -5
  12. package/dist/cli/chunks/adapter-PP3XIXDV.js +2 -0
  13. package/dist/cli/chunks/{agent-booster-wasm-MHJBRXMK.js → agent-booster-wasm-SY7UCLBL.js} +2 -2
  14. package/dist/cli/chunks/{agent-handler-G64SD7J2.js → agent-handler-KAMYBU3S.js} +2 -2
  15. package/dist/cli/chunks/{agent-memory-branch-G4UXFPKH.js → agent-memory-branch-2CAW3KUM.js} +2 -2
  16. package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +2 -0
  17. package/dist/cli/chunks/{arena-63M3M6EW.js → arena-4OFLJ3R2.js} +2 -2
  18. package/dist/cli/chunks/{arena-QJMKYPHS.js → arena-QCCVIOAH.js} +4 -4
  19. package/dist/cli/chunks/{audit-UDFVTWSX.js → audit-RBDQJQJB.js} +3 -3
  20. package/dist/cli/chunks/base-QSYWWPCE.js +2 -0
  21. package/dist/cli/chunks/{better-sqlite3-JLX2G56I.js → better-sqlite3-5JRACCDQ.js} +2 -2
  22. package/dist/cli/chunks/{brain-handler-PWF32LLW.js → brain-handler-W4QIIRT4.js} +3 -3
  23. package/dist/cli/chunks/{branch-enumerator-PB7QWXDP.js → branch-enumerator-IBNGI572.js} +2 -2
  24. package/dist/cli/chunks/{browser-CYNV2F3U.js → browser-GMSCVAOI.js} +2 -2
  25. package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +2 -0
  26. package/dist/cli/chunks/{chunk-S5D3HCGN.js → chunk-22OZIJAD.js} +2 -2
  27. package/dist/cli/chunks/{chunk-NBMQOP2R.js → chunk-24ZSGYC6.js} +1 -1
  28. package/dist/cli/chunks/{chunk-HFSBONCS.js → chunk-2CIDFR2H.js} +3 -3
  29. package/dist/cli/chunks/{chunk-A4OPQJ4A.js → chunk-2IWPJUVV.js} +5 -5
  30. package/dist/cli/chunks/{chunk-RI4JPBZD.js → chunk-2ZTWPMTK.js} +2 -2
  31. package/dist/cli/chunks/{chunk-ZURYZEHX.js → chunk-34MDMFET.js} +2 -2
  32. package/dist/cli/chunks/chunk-3DJNKNBR.js +742 -0
  33. package/dist/cli/chunks/{chunk-GJVRQBLI.js → chunk-3NJ7O3OH.js} +2 -2
  34. package/dist/cli/chunks/chunk-45MVRQG4.js +2 -0
  35. package/dist/cli/chunks/chunk-46HBVDMU.js +2 -0
  36. package/dist/cli/chunks/{chunk-SCL2OYN7.js → chunk-47Q7JL3V.js} +2 -2
  37. package/dist/cli/chunks/chunk-4CLDYT36.js +2 -0
  38. package/dist/cli/chunks/{chunk-3ZIVBTX6.js → chunk-4KOVHQXK.js} +2 -2
  39. package/dist/cli/chunks/{chunk-BBKLVHDQ.js → chunk-4POOJYXA.js} +1 -1
  40. package/dist/cli/chunks/{chunk-DAYMT7TH.js → chunk-5DH5QI7G.js} +26 -26
  41. package/dist/cli/chunks/{chunk-2534PXIV.js → chunk-5GIJU2ZY.js} +2 -2
  42. package/dist/cli/chunks/{chunk-MBV57LKC.js → chunk-5HAPS6VD.js} +2 -2
  43. package/dist/cli/chunks/{chunk-NIJMLEAX.js → chunk-5LST62QR.js} +2 -2
  44. package/dist/cli/chunks/{chunk-33IUCP34.js → chunk-5MT7DMD7.js} +2 -2
  45. package/dist/cli/chunks/{chunk-LRTF5RMG.js → chunk-5NC7QEJ6.js} +4 -4
  46. package/dist/cli/chunks/{chunk-SJB4KMZS.js → chunk-5UPIL62W.js} +3 -3
  47. package/dist/cli/chunks/{chunk-76PRW2KY.js → chunk-5VUIXDY2.js} +2 -2
  48. package/dist/cli/chunks/chunk-5VZVMO7B.js +3 -0
  49. package/dist/cli/chunks/{chunk-J3RNVHDH.js → chunk-624QRKQX.js} +1 -1
  50. package/dist/cli/chunks/{chunk-N6CRIUTO.js → chunk-66NW3ZB4.js} +2 -2
  51. package/dist/cli/chunks/{chunk-PCWZCXBD.js → chunk-6HWARQWV.js} +2 -2
  52. package/dist/cli/chunks/{chunk-VAXQUD5G.js → chunk-6MXAJBEA.js} +1 -1
  53. package/dist/cli/chunks/{chunk-LOLAEDZD.js → chunk-6R3FBFCJ.js} +2 -2
  54. package/dist/cli/chunks/{chunk-ASKPTGUU.js → chunk-6RDVY26I.js} +2 -2
  55. package/dist/cli/chunks/{chunk-35A22AUL.js → chunk-6T6AHVLF.js} +1 -1
  56. package/dist/cli/chunks/{chunk-IKWAPHJA.js → chunk-6WOZUSSN.js} +2 -2
  57. package/dist/cli/chunks/chunk-72MQCZSM.js +2 -0
  58. package/dist/cli/chunks/chunk-7QVPMH25.js +3 -0
  59. package/dist/cli/chunks/{chunk-5H7MR6HP.js → chunk-7SAMMQVS.js} +1 -1
  60. package/dist/cli/chunks/{chunk-B7J3O2WM.js → chunk-7TJZDRDU.js} +1 -1
  61. package/dist/cli/chunks/{chunk-OFQDM73J.js → chunk-7TVIX4WL.js} +2 -2
  62. package/dist/cli/chunks/{chunk-SZWXUG36.js → chunk-7VTKR44N.js} +2 -2
  63. package/dist/cli/chunks/{chunk-5B5D5KCV.js → chunk-7XTANLTN.js} +1 -1
  64. package/dist/cli/chunks/chunk-7XUB7U6Z.js +4 -0
  65. package/dist/cli/chunks/{chunk-GAXTPQCZ.js → chunk-A74J23QB.js} +2 -2
  66. package/dist/cli/chunks/{chunk-K2VUYRMG.js → chunk-A7ANPS4E.js} +2 -2
  67. package/dist/cli/chunks/{chunk-WO4NSPLX.js → chunk-AJT3XDRD.js} +2 -2
  68. package/dist/cli/chunks/{chunk-LPSE6DOQ.js → chunk-ALCIUWFC.js} +1 -1
  69. package/dist/cli/chunks/{chunk-UK5HY6LC.js → chunk-AUN4FG7V.js} +1 -1
  70. package/dist/cli/chunks/{chunk-MGH4XIHH.js → chunk-AUOSHM63.js} +2 -2
  71. package/dist/cli/chunks/{chunk-HX5KQK7I.js → chunk-AX26QJ6T.js} +2 -2
  72. package/dist/cli/chunks/{chunk-BZWZTGMF.js → chunk-B7RHBKHL.js} +2 -2
  73. package/dist/cli/chunks/{chunk-I5A3HGO6.js → chunk-BAYGQRNP.js} +2 -2
  74. package/dist/cli/chunks/{chunk-3C2BFLYC.js → chunk-BIXRTOH3.js} +18 -18
  75. package/dist/cli/chunks/{chunk-EWUFVWRT.js → chunk-BO7UFNYV.js} +2 -2
  76. package/dist/cli/chunks/{chunk-6TMUZGM2.js → chunk-BUTGIVKW.js} +1 -1
  77. package/dist/cli/chunks/{chunk-2MU4WCMQ.js → chunk-BXATKI5S.js} +2 -2
  78. package/dist/cli/chunks/{chunk-HEDLZWPM.js → chunk-CCL436IU.js} +44 -33
  79. package/dist/cli/chunks/{chunk-6EHVPFHW.js → chunk-CEXNW5TR.js} +1 -1
  80. package/dist/cli/chunks/{chunk-2ICC4H6K.js → chunk-CLAMMGY3.js} +2 -2
  81. package/dist/cli/chunks/{chunk-BPGFCUDO.js → chunk-CR66HNAE.js} +1 -1
  82. package/dist/cli/chunks/{chunk-CFXFGQEN.js → chunk-CZBIREL5.js} +2 -2
  83. package/dist/cli/chunks/{chunk-Z56QTRRB.js → chunk-D5N2O5EH.js} +2 -2
  84. package/dist/cli/chunks/{chunk-M6SJALLA.js → chunk-DA7DGDTI.js} +2 -2
  85. package/dist/cli/chunks/{chunk-R47LNH5W.js → chunk-DLSFT6PO.js} +2 -2
  86. package/dist/cli/chunks/{chunk-6HTO4BLV.js → chunk-DQNUPEY5.js} +2 -2
  87. package/dist/cli/chunks/{chunk-XZ5Z56OP.js → chunk-EECF4CMA.js} +1 -1
  88. package/dist/cli/chunks/{chunk-DFJGXXCL.js → chunk-EF5UHDCG.js} +1 -1
  89. package/dist/cli/chunks/{chunk-PJAXWCFC.js → chunk-EJ4KZFZN.js} +1 -1
  90. package/dist/cli/chunks/{chunk-RA3MI5WK.js → chunk-ELI4GDQO.js} +2 -2
  91. package/dist/cli/chunks/{chunk-BND6M2JX.js → chunk-F3KS3TAB.js} +2 -2
  92. package/dist/cli/chunks/{chunk-RB2SL5GD.js → chunk-F7A2UBZO.js} +2 -2
  93. package/dist/cli/chunks/{chunk-X5S5UEM6.js → chunk-FOJRPEIP.js} +2 -2
  94. package/dist/cli/chunks/{chunk-ZP6ANUP7.js → chunk-FQ5N666N.js} +1 -1
  95. package/dist/cli/chunks/{chunk-LZSLJJII.js → chunk-FU7LNUD7.js} +2 -2
  96. package/dist/cli/chunks/{chunk-FDK2GF4G.js → chunk-GFB6BZWU.js} +2 -2
  97. package/dist/cli/chunks/{chunk-C5EN5WB6.js → chunk-GI5HWS4H.js} +1 -1
  98. package/dist/cli/chunks/{chunk-SIUUAKCE.js → chunk-GNYOHZVV.js} +1 -1
  99. package/dist/cli/chunks/{chunk-OOK6GPJR.js → chunk-GVRFSXY6.js} +2 -2
  100. package/dist/cli/chunks/{chunk-6QPW4OVH.js → chunk-GWM4M5NF.js} +1 -1
  101. package/dist/cli/chunks/{chunk-PMXWDTDK.js → chunk-HAN4MS5T.js} +2 -2
  102. package/dist/cli/chunks/{chunk-WW6WUMS7.js → chunk-HEGGV2PT.js} +2 -2
  103. package/dist/cli/chunks/{chunk-4GLR2S2M.js → chunk-HOEWMEF2.js} +2 -2
  104. package/dist/cli/chunks/{chunk-BY3IL56R.js → chunk-HZFK2Z2Z.js} +1 -1
  105. package/dist/cli/chunks/chunk-I7WAW7TM.js +2 -0
  106. package/dist/cli/chunks/{chunk-LXYTC62V.js → chunk-IEPWO4XP.js} +2 -2
  107. package/dist/cli/chunks/{chunk-3MSBVOYW.js → chunk-ITIJ23K2.js} +2 -2
  108. package/dist/cli/chunks/{chunk-PEA4DVXW.js → chunk-IVJIHZSM.js} +1 -1
  109. package/dist/cli/chunks/{chunk-P7GM3EE7.js → chunk-JAPBSSFY.js} +1 -1
  110. package/dist/cli/chunks/{chunk-SOSJFEFB.js → chunk-JCE76MPP.js} +2 -2
  111. package/dist/cli/chunks/{chunk-YZ2AGC7O.js → chunk-JPJEAK4G.js} +1 -1
  112. package/dist/cli/chunks/{chunk-RG67RZIX.js → chunk-JYKQVYX2.js} +2 -2
  113. package/dist/cli/chunks/{chunk-W6TJXK5Y.js → chunk-K55EAWZ5.js} +2 -2
  114. package/dist/cli/chunks/chunk-KCB6P463.js +3 -0
  115. package/dist/cli/chunks/{chunk-W3PPYNHF.js → chunk-KIDOBLUO.js} +2 -2
  116. package/dist/cli/chunks/{chunk-JL3TI43V.js → chunk-KYVIOC3C.js} +2 -2
  117. package/dist/cli/chunks/{chunk-WEDVLKRB.js → chunk-L2TDHJR3.js} +2 -2
  118. package/dist/cli/chunks/{chunk-5GWTJJEO.js → chunk-L4D3TPFP.js} +1 -1
  119. package/dist/cli/chunks/{chunk-PB2WSCBW.js → chunk-LAY7NCQK.js} +3 -3
  120. package/dist/cli/chunks/{chunk-T3BMCEQR.js → chunk-LCCTJ2PC.js} +2 -2
  121. package/dist/cli/chunks/{chunk-7INP6HZH.js → chunk-LJCEDTUM.js} +3 -3
  122. package/dist/cli/chunks/{chunk-DEJM2P5K.js → chunk-LMAEMVPA.js} +1 -1
  123. package/dist/cli/chunks/{chunk-HCDTLV5J.js → chunk-LZWJ5BMP.js} +2 -2
  124. package/dist/cli/chunks/{chunk-D7RVZ5C2.js → chunk-MP3FSUNB.js} +2 -2
  125. package/dist/cli/chunks/{chunk-ADF6LGHZ.js → chunk-MQCTLTGE.js} +2 -2
  126. package/dist/cli/chunks/{chunk-OHH6BUZK.js → chunk-MQTA6KIO.js} +1 -1
  127. package/dist/cli/chunks/{chunk-ISASRHZP.js → chunk-NBUXM5X6.js} +10 -6
  128. package/dist/cli/chunks/{chunk-KOLHZSEC.js → chunk-NHRF3V4B.js} +2 -2
  129. package/dist/cli/chunks/chunk-NMY4KTWA.js +16 -0
  130. package/dist/cli/chunks/chunk-NYS2GUNO.js +2 -0
  131. package/dist/cli/chunks/{chunk-EGHK6NMH.js → chunk-ONPPBLRB.js} +2 -2
  132. package/dist/cli/chunks/{chunk-YQ6BK7QC.js → chunk-OPDZBRIL.js} +2 -2
  133. package/dist/cli/chunks/{chunk-DPL4ZXTE.js → chunk-OQ4S6B7P.js} +1 -1
  134. package/dist/cli/chunks/{chunk-6HO3XRXE.js → chunk-ORBODZSO.js} +2 -2
  135. package/dist/cli/chunks/{chunk-GLKLEHK3.js → chunk-ORFL3YXB.js} +2 -2
  136. package/dist/cli/chunks/{chunk-I43QRLLB.js → chunk-P7DXVL2S.js} +2 -2
  137. package/dist/cli/chunks/chunk-PEMSXSP2.js +4 -0
  138. package/dist/cli/chunks/chunk-PS6WFCA4.js +6 -0
  139. package/dist/cli/chunks/{chunk-HEKCN5XQ.js → chunk-Q2RBOC7V.js} +2 -2
  140. package/dist/cli/chunks/{chunk-54XTJBHV.js → chunk-QLKUCMZC.js} +1 -1
  141. package/dist/cli/chunks/{chunk-3BDDOFYW.js → chunk-QLYO3H7E.js} +9 -9
  142. package/dist/cli/chunks/{chunk-VMSO6DMF.js → chunk-QS5KZYUZ.js} +2 -2
  143. package/dist/cli/chunks/{chunk-JFQDWAU3.js → chunk-R363XXGH.js} +2 -2
  144. package/dist/cli/chunks/chunk-RD5BYLN7.js +2 -0
  145. package/dist/cli/chunks/{chunk-73PCVMGA.js → chunk-RFDFET3O.js} +2 -2
  146. package/dist/cli/chunks/{chunk-LJRZAALA.js → chunk-RHIQ6QO5.js} +357 -351
  147. package/dist/cli/chunks/chunk-RLB7K7QP.js +2 -0
  148. package/dist/cli/chunks/{chunk-RJ5CZ7B6.js → chunk-RUTO67PT.js} +2 -2
  149. package/dist/cli/chunks/{chunk-DF4Y3HPO.js → chunk-RV6HSMKJ.js} +1 -1
  150. package/dist/cli/chunks/{chunk-54ITMOFM.js → chunk-SOSJWM3E.js} +4 -4
  151. package/dist/cli/chunks/{chunk-5SS2Z7JC.js → chunk-SV5BUYHH.js} +2 -2
  152. package/dist/cli/chunks/{chunk-XHCCH7UC.js → chunk-TL5GV3PR.js} +8 -8
  153. package/dist/cli/chunks/{chunk-ZKXZTIVF.js → chunk-TLUIO37P.js} +2 -2
  154. package/dist/cli/chunks/{chunk-2LL35V3A.js → chunk-TUDENMAE.js} +2 -2
  155. package/dist/cli/chunks/chunk-TVLOED6O.js +2 -0
  156. package/dist/cli/chunks/{chunk-2DRMTRBM.js → chunk-UB6DQGWM.js} +2 -2
  157. package/dist/cli/chunks/chunk-UHHMAKPE.js +3 -0
  158. package/dist/cli/chunks/{chunk-DBIK4OFX.js → chunk-ULCHPPW2.js} +1 -1
  159. package/dist/cli/chunks/chunk-V3OLS2NG.js +2 -0
  160. package/dist/cli/chunks/{chunk-I6E4X3L3.js → chunk-VAYZ5QIE.js} +1 -1
  161. package/dist/cli/chunks/{chunk-G3ZUB3HD.js → chunk-VCONCVSY.js} +3 -3
  162. package/dist/cli/chunks/{chunk-7X2IVMXN.js → chunk-VVF337SV.js} +2 -2
  163. package/dist/cli/chunks/{chunk-EY5IUF7U.js → chunk-WKDWRRDT.js} +2 -2
  164. package/dist/cli/chunks/{chunk-FRBCX46J.js → chunk-X2DR27AY.js} +2 -2
  165. package/dist/cli/chunks/{chunk-I53365HG.js → chunk-X33F7NXH.js} +3 -3
  166. package/dist/cli/chunks/{chunk-MVTUFPM2.js → chunk-XBEI2JBA.js} +2 -2
  167. package/dist/cli/chunks/{chunk-OG4KHX7S.js → chunk-XBFQJZWX.js} +2 -2
  168. package/dist/cli/chunks/{chunk-DVE5SM5G.js → chunk-XFPQIWEH.js} +3 -3
  169. package/dist/cli/chunks/{chunk-RWZ4F44Y.js → chunk-XPB5BVU6.js} +2 -2
  170. package/dist/cli/chunks/{chunk-TVQPYP2Z.js → chunk-XQ53PZEF.js} +3 -3
  171. package/dist/cli/chunks/{chunk-73MTUM6F.js → chunk-XZ46CI35.js} +2 -2
  172. package/dist/cli/chunks/chunk-YLNYPQDR.js +2 -0
  173. package/dist/cli/chunks/{chunk-BY5PLEPZ.js → chunk-YNG7E26C.js} +2 -2
  174. package/dist/cli/chunks/{chunk-YUWUFYHK.js → chunk-YXU35GGD.js} +1 -1
  175. package/dist/cli/chunks/{chunk-B7GJXQD2.js → chunk-ZCP4P6O2.js} +2 -2
  176. package/dist/cli/chunks/{chunk-LGA6J4I4.js → chunk-ZL5LJT7D.js} +2 -2
  177. package/dist/cli/chunks/{chunk-TB22Y3WW.js → chunk-ZOUEQ6DL.js} +1 -1
  178. package/dist/cli/chunks/{chunk-U2E5F3VZ.js → chunk-ZSBD4FUX.js} +2 -2
  179. package/dist/cli/chunks/chunk-ZTB32K5N.js +5 -0
  180. package/dist/cli/chunks/{chunk-WYO5VN2L.js → chunk-ZUTFHGEO.js} +1 -1
  181. package/dist/cli/chunks/ci-GEJCXMBK.js +81 -0
  182. package/dist/cli/chunks/ci-config-2ZVV4OXL.js +2 -0
  183. package/dist/cli/chunks/{ci-output-BMJABAEX.js → ci-output-E45OGVPR.js} +2 -2
  184. package/dist/cli/chunks/{circuit-breaker-GYD5CMJQ.js → circuit-breaker-X73ITYZC.js} +2 -2
  185. package/dist/cli/chunks/{claude-flow-setup-MMOYVBVD.js → claude-flow-setup-W4PPH46C.js} +2 -2
  186. package/dist/cli/chunks/client-6XKSQ4JT.js +2 -0
  187. package/dist/cli/chunks/{cline-installer-B2SOZ44R.js → cline-installer-NUEPMWDE.js} +2 -2
  188. package/dist/cli/chunks/{code-V3FIRAXD.js → code-6WQHBS7G.js} +4 -4
  189. package/dist/cli/chunks/{code-index-extractor-CV6A756Z.js → code-index-extractor-BXQIFIFT.js} +2 -2
  190. package/dist/cli/chunks/{codex-installer-EUC6J47Y.js → codex-installer-Z337R2KH.js} +2 -2
  191. package/dist/cli/chunks/{completions-DQQIBAHR.js → completions-F5DMYFHV.js} +2 -2
  192. package/dist/cli/chunks/{complexity-analyzer-HPXMXP5I.js → complexity-analyzer-W2SYPZDI.js} +2 -2
  193. package/dist/cli/chunks/{continuedev-installer-RCIYXH6V.js → continuedev-installer-ZCHUIFTN.js} +2 -2
  194. package/dist/cli/chunks/{copilot-installer-VUH32SHF.js → copilot-installer-M5JNODXF.js} +2 -2
  195. package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +2 -0
  196. package/dist/cli/chunks/{cost-tracker-YLCKLOAL.js → cost-tracker-LSYTHBHV.js} +2 -2
  197. package/dist/cli/chunks/coverage-PGMRS5SS.js +49 -0
  198. package/dist/cli/chunks/cross-domain-router-QVUPQ2SC.js +2 -0
  199. package/dist/cli/chunks/{cursor-installer-B42FN62K.js → cursor-installer-XPUA73UW.js} +2 -2
  200. package/dist/cli/chunks/{daemon-DECQRQII.js → daemon-ITKDIYMW.js} +5 -5
  201. package/dist/cli/chunks/daemon-QBYTCIMH.js +10 -0
  202. package/dist/cli/chunks/{dag-attention-scheduler-RY7CDYSC.js → dag-attention-scheduler-T55AXLD6.js} +2 -2
  203. package/dist/cli/chunks/{detect-NW53BMJN.js → detect-DR7J6K4O.js} +2 -2
  204. package/dist/cli/chunks/{dist-node-LE6KHXAB.js → dist-node-LAJJBOUT.js} +2 -2
  205. package/dist/cli/chunks/{domain-handler-JGXFT4LW.js → domain-handler-OMSHCRMK.js} +2 -2
  206. package/dist/cli/chunks/{domain-plugins-GY3RYKKK.js → domain-plugins-EQXSKC5K.js} +2 -2
  207. package/dist/cli/chunks/{domain-transfer-CGBRXNTC.js → domain-transfer-FKRAGVSW.js} +2 -2
  208. package/dist/cli/chunks/dream-3UABDRZJ.js +2 -0
  209. package/dist/cli/chunks/embed-and-insert-pattern-JZFPCNL3.js +3 -0
  210. package/dist/cli/chunks/{eval-YPYIZQUR.js → eval-JSNNASBW.js} +2 -2
  211. package/dist/cli/chunks/experience-capture-middleware-UPD3IZBK.js +40 -0
  212. package/dist/cli/chunks/{fast-paths-HYQTAF2S.js → fast-paths-YNMIBS2E.js} +2 -2
  213. package/dist/cli/chunks/{feature-flags-HNSAFFX2.js → feature-flags-SRLXDKBI.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-YACUH6OW.js → feature-flags-VIR7O4L7.js} +2 -2
  215. package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +2 -0
  216. package/dist/cli/chunks/{fleet-6M3BP4OO.js → fleet-K2ED46EL.js} +3 -3
  217. package/dist/cli/chunks/{gnn-wrapper-QLD7KHXV.js → gnn-wrapper-QCU4ZRYW.js} +2 -2
  218. package/dist/cli/chunks/{heartbeat-handler-EZP333X4.js → heartbeat-handler-YYQI4WZM.js} +4 -4
  219. package/dist/cli/chunks/heartbeat-scheduler-MJ6MTPDF.js +2 -0
  220. package/dist/cli/chunks/hnsw-adapter-FQWJCFVW.js +2 -0
  221. package/dist/cli/chunks/hnsw-index-NJYKJUHC.js +2 -0
  222. package/dist/cli/chunks/{hnsw-legacy-bridge-47CUCSAU.js → hnsw-legacy-bridge-C5TJSWTZ.js} +2 -2
  223. package/dist/cli/chunks/{hnswlib-node-SVNYDJZH.js → hnswlib-node-SE3MJJYS.js} +2 -2
  224. package/dist/cli/chunks/{hooks-6V5LMWP6.js → hooks-C572SRDH.js} +43 -43
  225. package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +2 -0
  226. package/dist/cli/chunks/{hypergraph-engine-L2FOBIFF.js → hypergraph-engine-35A6G3M5.js} +2 -2
  227. package/dist/cli/chunks/{hypergraph-handler-DU6Z57EE.js → hypergraph-handler-U2756CWI.js} +3 -3
  228. package/dist/cli/chunks/impact-analyzer-5ZJTXPVC.js +2 -0
  229. package/dist/cli/chunks/init-handler-PCLYQUSB.js +88 -0
  230. package/dist/cli/chunks/init-wizard-MQMDSIOF.js +2 -0
  231. package/dist/cli/chunks/kernel-MEJ5GMRH.js +2 -0
  232. package/dist/cli/chunks/{kilocode-installer-NHKYGJ7Q.js → kilocode-installer-32PX5YH7.js} +2 -2
  233. package/dist/cli/chunks/{kiro-installer-24UK6GGR.js → kiro-installer-C4ROMMUS.js} +2 -2
  234. package/dist/cli/chunks/knowledge-graph-XUBZSEZE.js +2 -0
  235. package/dist/cli/chunks/learning-GEPVZGJQ.js +122 -0
  236. package/dist/cli/chunks/{llm-router-XRMI2VMG.js → llm-router-XRKTTJTX.js} +4 -4
  237. package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +2 -0
  238. package/dist/cli/chunks/{load-W5UWL5C7.js → load-XVH6HW7E.js} +2 -2
  239. package/dist/cli/chunks/load-test-OVXIQ3AF.js +2 -0
  240. package/dist/cli/chunks/{mcp-N7ALQ4BL.js → mcp-IULSTM4Z.js} +2 -2
  241. package/dist/cli/chunks/{memory-WV52DLSA.js → memory-6K7IAU4T.js} +5 -5
  242. package/dist/cli/chunks/memory-backend-TRPOMPK4.js +2 -0
  243. package/dist/cli/chunks/memory-handlers-CG6DRLAW.js +2 -0
  244. package/dist/cli/chunks/{multi-model-executor-3FVTZCSO.js → multi-model-executor-VZDUYPLX.js} +2 -2
  245. package/dist/cli/chunks/{opencode-installer-NTPWGHUW.js → opencode-installer-QUTXKNH4.js} +2 -2
  246. package/dist/cli/chunks/orchestrator-PCKKUWOP.js +452 -0
  247. package/dist/cli/chunks/pattern-null-store-JWYBRBZG.js +2 -0
  248. package/dist/cli/chunks/{pattern-usage-recorder-WWXHUH5U.js → pattern-usage-recorder-PX5HQVRL.js} +2 -2
  249. package/dist/cli/chunks/{pipeline-ZOKZFXTH.js → pipeline-O562GTOG.js} +2 -2
  250. package/dist/cli/chunks/{platform-CDNL322F.js → platform-PM7Q2AZS.js} +2 -2
  251. package/dist/cli/chunks/plugin-OTYTFGPY.js +27 -0
  252. package/dist/cli/chunks/{prime-radiant-advanced-wasm-FVJDU2JY.js → prime-radiant-advanced-wasm-6CFXTHC2.js} +2 -2
  253. package/dist/cli/chunks/project-root-VVSTHIP4.js +2 -0
  254. package/dist/cli/chunks/protocol-executor-PXZCLZD3.js +2 -0
  255. package/dist/cli/chunks/{protocol-handler-4YBN5R23.js → protocol-handler-PPGNSAOS.js} +2 -2
  256. package/dist/cli/chunks/{prove-BHDHY664.js → prove-WQ3BKRZG.js} +2 -2
  257. package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +2 -0
  258. package/dist/cli/chunks/quality-C5WUU3AA.js +8 -0
  259. package/dist/cli/chunks/{quality-gate-WANE7TCN.js → quality-gate-WSSRKD5U.js} +3 -3
  260. package/dist/cli/chunks/queen-coordinator-UI3B7DI6.js +2 -0
  261. package/dist/cli/chunks/real-embeddings-CFQE7IRQ.js +2 -0
  262. package/dist/cli/chunks/{ref-validation-S7UWXQIP.js → ref-validation-DHKHXVZT.js} +2 -2
  263. package/dist/cli/chunks/{roocode-installer-TEYOQYL6.js → roocode-installer-3PPODABV.js} +2 -2
  264. package/dist/cli/chunks/router-HYRPWLAY.js +2 -0
  265. package/dist/cli/chunks/routing-feedback-BPZ5R6F3.js +2 -0
  266. package/dist/cli/chunks/{routing-handler-KDTLMRWD.js → routing-handler-JNXTGT6T.js} +2 -2
  267. package/dist/cli/chunks/{ruvector-commands-AOUDXCYE.js → ruvector-commands-6YLROPVP.js} +2 -2
  268. package/dist/cli/chunks/rvf-dual-writer-DEKDQ6KO.js +2 -0
  269. package/dist/cli/chunks/rvf-migration-adapter-L53VBS7I.js +2 -0
  270. package/dist/cli/chunks/rvf-migration-coordinator-4DWB4WRK.js +2 -0
  271. package/dist/cli/chunks/rvf-native-adapter-I6RUGD2D.js +2 -0
  272. package/dist/cli/chunks/{rvf-store-integrity-QI47Y354.js → rvf-store-integrity-YKR2ZNBF.js} +2 -2
  273. package/dist/cli/chunks/safe-db-KS65XDCP.js +2 -0
  274. package/dist/cli/chunks/schedule-KD2VN6GB.js +2 -0
  275. package/dist/cli/chunks/scheduler-ZH3RMUHY.js +2 -0
  276. package/dist/cli/chunks/{security-SN6MWOJT.js → security-PWQTGDRU.js} +3 -3
  277. package/dist/cli/chunks/shared-rvf-adapter-LNRLFP5I.js +2 -0
  278. package/dist/cli/chunks/{shared-rvf-dual-writer-WU7PFKQM.js → shared-rvf-dual-writer-GWU6YQNS.js} +2 -2
  279. package/dist/cli/chunks/sqlite-persistence-6DTVME5D.js +2 -0
  280. package/dist/cli/chunks/{standalone-memory-F6FSRFWC.js → standalone-memory-46KKBSSV.js} +2 -2
  281. package/dist/cli/chunks/{status-handler-DHD5MS4G.js → status-handler-35T5FTDQ.js} +2 -2
  282. package/dist/cli/chunks/{structural-health-P6HPSQMR.js → structural-health-P7QPQWLO.js} +2 -2
  283. package/dist/cli/chunks/{sync-LISJGDSE.js → sync-W6Z4R4PL.js} +2 -2
  284. package/dist/cli/chunks/sync-Y43EWBSY.js +2 -0
  285. package/dist/cli/chunks/{task-handler-ZT44NT5Z.js → task-handler-5CX3ZYT7.js} +2 -2
  286. package/dist/cli/chunks/{task-handlers-R6DQ5324.js → task-handlers-DQZGOJNE.js} +3 -3
  287. package/dist/cli/chunks/{test-MUFHR4JQ.js → test-TPP53VVV.js} +12 -12
  288. package/dist/cli/chunks/{test-scheduling-TAUSLZJP.js → test-scheduling-WBV4UMQH.js} +3 -3
  289. package/dist/cli/chunks/token-bootstrap-GIIDXHLC.js +2 -0
  290. package/dist/cli/chunks/{token-usage-IX65ECBR.js → token-usage-AKK37RB7.js} +2 -2
  291. package/dist/cli/chunks/{transformers-QKPSVW2W.js → transformers-7MASPELS.js} +2 -2
  292. package/dist/cli/chunks/{tree-sitter-wasm-parser-Z7PPA2JO.js → tree-sitter-wasm-parser-YZKD6UGB.js} +2 -2
  293. package/dist/cli/chunks/{types-ULNNGGGH.js → types-AZ3BTXDP.js} +2 -2
  294. package/dist/cli/chunks/unified-memory-FCX7NLFZ.js +2 -0
  295. package/dist/cli/chunks/unified-memory-hnsw-VU5QJK37.js +2 -0
  296. package/dist/cli/chunks/unified-persistence-FM376LGE.js +2 -0
  297. package/dist/cli/chunks/{upgrade-ECI3YUYA.js → upgrade-L7OTDKEK.js} +2 -2
  298. package/dist/cli/chunks/{validate-3JKRUW2S.js → validate-O3QVFIGP.js} +2 -2
  299. package/dist/cli/chunks/{validate-swarm-LZWANCIE.js → validate-swarm-2UGBGLTX.js} +2 -2
  300. package/dist/cli/chunks/visual-security-EU7Y3X46.js +2 -0
  301. package/dist/cli/chunks/{web-tree-sitter-N5V4A6XG.js → web-tree-sitter-J75IYPRO.js} +2 -2
  302. package/dist/cli/chunks/{windsurf-installer-5TBM5B3C.js → windsurf-installer-FQ5DBFCG.js} +2 -2
  303. package/dist/cli/chunks/witness-chain-CSEBT52D.js +2 -0
  304. package/dist/cli/chunks/{witness-chain-MFP3HBWQ.js → witness-chain-I7TN4MXZ.js} +2 -2
  305. package/dist/cli/chunks/witness-chain-repair-D3NE3NQK.js +2 -0
  306. package/dist/cli/chunks/{witness-chain-verifier-SRAT7LVY.js → witness-chain-verifier-RU2WOP5M.js} +2 -2
  307. package/dist/cli/chunks/witness-key-manager-IHQB2FR5.js +2 -0
  308. package/dist/cli/chunks/{workflow-M7TUYYXY.js → workflow-6BWTNVV6.js} +28 -28
  309. package/dist/cli/chunks/workflow-orchestrator-ALNKOM3N.js +2 -0
  310. package/dist/cli/chunks/wrappers-URVP25VU.js +2 -0
  311. package/dist/cli/commands/ci.js +53 -23
  312. package/dist/cli/commands/code.js +1 -0
  313. package/dist/cli/commands/coverage.d.ts +1 -0
  314. package/dist/cli/commands/coverage.js +182 -138
  315. package/dist/cli/commands/daemon.js +7 -1
  316. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
  317. package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
  318. package/dist/cli/commands/learning.js +47 -7
  319. package/dist/cli/commands/quality.d.ts +12 -1
  320. package/dist/cli/commands/quality.js +51 -3
  321. package/dist/cli/commands/test.js +6 -7
  322. package/dist/cli/commands/workflow.js +9 -5
  323. package/dist/cli/handlers/init-guard.d.ts +13 -0
  324. package/dist/cli/handlers/init-guard.js +23 -0
  325. package/dist/cli/handlers/init-handler.d.ts +3 -0
  326. package/dist/cli/handlers/init-handler.js +9 -0
  327. package/dist/cli/handlers/interfaces.js +5 -1
  328. package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
  329. package/dist/cli/scheduler/persistent-scheduler.js +107 -41
  330. package/dist/cli/utils/ci-output.d.ts +22 -5
  331. package/dist/cli/utils/ci-output.js +33 -5
  332. package/dist/cli/utils/coverage-data.d.ts +10 -0
  333. package/dist/cli/utils/coverage-data.js +34 -65
  334. package/dist/cli/utils/coverage-verdict.d.ts +130 -0
  335. package/dist/cli/utils/coverage-verdict.js +193 -0
  336. package/dist/cli/utils/file-discovery.js +5 -0
  337. package/dist/contracts/verdicts.d.ts +14 -0
  338. package/dist/contracts/verdicts.js +44 -3
  339. package/dist/coordination/deterministic-actions.js +24 -13
  340. package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
  341. package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
  342. package/dist/coordination/handlers/coverage-handlers.js +150 -121
  343. package/dist/coordination/handlers/coverage-runner.d.ts +143 -0
  344. package/dist/coordination/handlers/coverage-runner.js +462 -0
  345. package/dist/coordination/handlers/coverage-target.d.ts +145 -0
  346. package/dist/coordination/handlers/coverage-target.js +314 -0
  347. package/dist/coordination/handlers/handler-types.d.ts +9 -0
  348. package/dist/coordination/handlers/handler-utils.d.ts +23 -1
  349. package/dist/coordination/handlers/handler-utils.js +90 -23
  350. package/dist/coordination/handlers/quality-handlers.js +209 -33
  351. package/dist/coordination/handlers/test-execution-handlers.js +4 -1
  352. package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
  353. package/dist/coordination/protocols/defect-investigation.js +6 -3
  354. package/dist/coordination/protocols/quality-gate.js +10 -6
  355. package/dist/coordination/result-saver.d.ts +22 -0
  356. package/dist/coordination/result-saver.js +130 -46
  357. package/dist/coordination/task-executor.d.ts +12 -0
  358. package/dist/coordination/task-executor.js +37 -1
  359. package/dist/domains/code-intelligence/coordinator.d.ts +2 -1
  360. package/dist/domains/code-intelligence/coordinator.js +10 -32
  361. package/dist/domains/code-intelligence/interfaces.d.ts +5 -0
  362. package/dist/domains/code-intelligence/plugin.js +5 -0
  363. package/dist/domains/code-intelligence/project-root-resolver.d.ts +50 -0
  364. package/dist/domains/code-intelligence/project-root-resolver.js +121 -0
  365. package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
  366. package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
  367. package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
  368. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
  369. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
  370. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
  371. package/dist/domains/coverage-analysis/collected-metrics.d.ts +33 -0
  372. package/dist/domains/coverage-analysis/collected-metrics.js +36 -0
  373. package/dist/domains/coverage-analysis/coordinator.js +22 -7
  374. package/dist/domains/coverage-analysis/interfaces.d.ts +59 -0
  375. package/dist/domains/coverage-analysis/interfaces.js +6 -1
  376. package/dist/domains/coverage-analysis/plugin.js +7 -1
  377. package/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts +7 -0
  378. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +85 -38
  379. package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
  380. package/dist/domains/defect-intelligence/plugin.js +4 -0
  381. package/dist/domains/defect-intelligence/services/defect-predictor.js +6 -4
  382. package/dist/domains/learning-optimization/coordinator.js +4 -0
  383. package/dist/domains/learning-optimization/plugin.js +4 -0
  384. package/dist/domains/quality-assessment/coordinator-claim-verifier.js +2 -1
  385. package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
  386. package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
  387. package/dist/domains/quality-assessment/coordinator.js +18 -14
  388. package/dist/domains/quality-assessment/coverage-report-event.d.ts +49 -0
  389. package/dist/domains/quality-assessment/coverage-report-event.js +58 -0
  390. package/dist/domains/quality-assessment/evidence-sufficiency.d.ts +57 -0
  391. package/dist/domains/quality-assessment/evidence-sufficiency.js +97 -0
  392. package/dist/domains/quality-assessment/index.d.ts +2 -2
  393. package/dist/domains/quality-assessment/index.js +1 -1
  394. package/dist/domains/quality-assessment/interfaces.d.ts +46 -0
  395. package/dist/domains/quality-assessment/plugin.js +8 -8
  396. package/dist/domains/quality-assessment/quality-evidence.d.ts +98 -4
  397. package/dist/domains/quality-assessment/quality-evidence.js +152 -8
  398. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
  399. package/dist/domains/quality-assessment/services/quality-analyzer.js +203 -116
  400. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
  401. package/dist/domains/test-execution/interfaces.d.ts +10 -6
  402. package/dist/domains/test-execution/plugin.js +4 -0
  403. package/dist/domains/test-execution/services/test-executor.js +152 -102
  404. package/dist/domains/test-generation/coordinator.js +4 -0
  405. package/dist/domains/test-generation/plugin.js +4 -0
  406. package/dist/feedback/coverage-learner.js +4 -1
  407. package/dist/feedback/coverage-session-provenance.d.ts +29 -0
  408. package/dist/feedback/coverage-session-provenance.js +39 -0
  409. package/dist/init/orchestrator.js +2 -0
  410. package/dist/init/phases/09-assets.d.ts +4 -0
  411. package/dist/init/phases/09-assets.js +35 -0
  412. package/dist/init/retired-assets.d.ts +86 -0
  413. package/dist/init/retired-assets.js +230 -0
  414. package/dist/init/skills-installer.d.ts +2 -0
  415. package/dist/init/skills-installer.js +4 -0
  416. package/dist/init/types.d.ts +3 -0
  417. package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
  418. package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
  419. package/dist/integrations/ruvector/server-client.js +4 -12
  420. package/dist/kernel/project-root.d.ts +17 -0
  421. package/dist/kernel/project-root.js +54 -2
  422. package/dist/kernel/shared-dirs.d.ts +66 -0
  423. package/dist/kernel/shared-dirs.js +168 -0
  424. package/dist/learning/daily-log.js +2 -1
  425. package/dist/learning/experience-capture-middleware.d.ts +22 -0
  426. package/dist/learning/experience-capture-middleware.js +35 -0
  427. package/dist/learning/learnable-result.d.ts +16 -0
  428. package/dist/learning/learnable-result.js +24 -0
  429. package/dist/learning/pattern-mutation-error.d.ts +8 -0
  430. package/dist/learning/pattern-mutation-error.js +12 -0
  431. package/dist/learning/qe-reasoning-bank.d.ts +10 -0
  432. package/dist/learning/qe-reasoning-bank.js +50 -1
  433. package/dist/learning/rvf-reconcile.d.ts +39 -0
  434. package/dist/learning/rvf-reconcile.js +40 -0
  435. package/dist/learning/sqlite-persistence.d.ts +14 -0
  436. package/dist/learning/sqlite-persistence.js +36 -0
  437. package/dist/mcp/bundle.js +524 -507
  438. package/dist/mcp/handlers/domain-handler-configs.d.ts +49 -2
  439. package/dist/mcp/handlers/domain-handler-configs.js +79 -7
  440. package/dist/mcp/handlers/handler-factory.js +43 -14
  441. package/dist/mcp/handlers/wrapped-domain-handlers.js +7 -1
  442. package/dist/mcp/protocol-server.js +30 -4
  443. package/dist/mcp/tool-cache-scope.d.ts +31 -0
  444. package/dist/mcp/tool-cache-scope.js +71 -0
  445. package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
  446. package/dist/mcp/tools/coverage-analysis/index.js +1 -0
  447. package/dist/mcp/types.d.ts +10 -0
  448. package/dist/optimization/session-cache.d.ts +19 -1
  449. package/dist/optimization/session-cache.js +36 -2
  450. package/dist/plugins/cache.js +2 -1
  451. package/dist/plugins/sources/github.js +2 -1
  452. package/dist/plugins/sources/npm.js +2 -1
  453. package/dist/shared/aqe-managed-dirs.d.ts +24 -0
  454. package/dist/shared/aqe-managed-dirs.js +56 -0
  455. package/dist/shared/events/domain-events.d.ts +20 -3
  456. package/dist/shared/events/domain-events.js +4 -0
  457. package/dist/shared/http/http-client.d.ts +6 -0
  458. package/dist/shared/http/http-client.js +13 -15
  459. package/dist/shared/io/file-reader.d.ts +26 -0
  460. package/dist/shared/io/file-reader.js +111 -17
  461. package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
  462. package/dist/shared/llm/providers/response-deadline.js +17 -5
  463. package/dist/shared/metrics/code-metrics.d.ts +24 -0
  464. package/dist/shared/metrics/code-metrics.js +93 -6
  465. package/dist/shared/metrics/index.d.ts +1 -1
  466. package/dist/workers/interfaces.d.ts +9 -1
  467. package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
  468. package/dist/workers/quality-daemon/coverage-delta.js +13 -6
  469. package/dist/workers/quality-daemon/index.js +6 -5
  470. package/dist/workers/quality-daemon/notification-service.js +3 -3
  471. package/dist/workers/quality-daemon/persistent-memory.d.ts +2 -2
  472. package/dist/workers/quality-daemon/persistent-memory.js +2 -2
  473. package/dist/workers/worker-manager.js +5 -1
  474. package/dist/workers/workers/coverage-tracker.js +69 -33
  475. package/dist/workers/workers/regression-monitor.d.ts +18 -1
  476. package/dist/workers/workers/regression-monitor.js +276 -117
  477. package/package.json +1 -1
  478. package/dist/cli/chunks/adapter-T54G3TBK.js +0 -2
  479. package/dist/cli/chunks/aqe-learning-engine-HLCJJ3JM.js +0 -2
  480. package/dist/cli/chunks/base-VLD755UU.js +0 -2
  481. package/dist/cli/chunks/browser-workflow-6M6VLWRF.js +0 -2
  482. package/dist/cli/chunks/chunk-5XXLWJU7.js +0 -2
  483. package/dist/cli/chunks/chunk-AHVN3UQZ.js +0 -4
  484. package/dist/cli/chunks/chunk-AOKSLWON.js +0 -742
  485. package/dist/cli/chunks/chunk-CQ3WSTJ2.js +0 -16
  486. package/dist/cli/chunks/chunk-LY53L6NH.js +0 -2
  487. package/dist/cli/chunks/chunk-O7TMY4GS.js +0 -2
  488. package/dist/cli/chunks/chunk-QIAX3JJB.js +0 -3
  489. package/dist/cli/chunks/chunk-RJMBHZYL.js +0 -2
  490. package/dist/cli/chunks/chunk-UORI2CZ4.js +0 -2
  491. package/dist/cli/chunks/chunk-V3NZ23X6.js +0 -2
  492. package/dist/cli/chunks/chunk-WI5AEB7Q.js +0 -2
  493. package/dist/cli/chunks/chunk-XKIFNKHV.js +0 -2
  494. package/dist/cli/chunks/chunk-ZAOQIVHG.js +0 -5
  495. package/dist/cli/chunks/chunk-ZF5JTQEE.js +0 -4
  496. package/dist/cli/chunks/ci-NGMGB43T.js +0 -82
  497. package/dist/cli/chunks/client-FUHNNK5O.js +0 -2
  498. package/dist/cli/chunks/core-handlers-F7TLX4LM.js +0 -2
  499. package/dist/cli/chunks/coverage-IVKDV236.js +0 -27
  500. package/dist/cli/chunks/cross-domain-router-EGWPY67O.js +0 -2
  501. package/dist/cli/chunks/daemon-IPTOSCHM.js +0 -10
  502. package/dist/cli/chunks/dream-V4QN6OF5.js +0 -2
  503. package/dist/cli/chunks/embed-and-insert-pattern-65H4XHWR.js +0 -3
  504. package/dist/cli/chunks/experience-capture-middleware-4JXVF5PL.js +0 -40
  505. package/dist/cli/chunks/file-discovery-R73BYEXB.js +0 -2
  506. package/dist/cli/chunks/heartbeat-scheduler-3N3L6CRM.js +0 -2
  507. package/dist/cli/chunks/hnsw-adapter-2BXJYDXI.js +0 -2
  508. package/dist/cli/chunks/hnsw-index-2DLI5OVO.js +0 -2
  509. package/dist/cli/chunks/hybrid-backend-OW4J65YH.js +0 -2
  510. package/dist/cli/chunks/impact-analyzer-ZH5I2RG6.js +0 -2
  511. package/dist/cli/chunks/init-handler-HETPWU67.js +0 -86
  512. package/dist/cli/chunks/init-wizard-NIKM3ZOK.js +0 -2
  513. package/dist/cli/chunks/kernel-2EOSVM6X.js +0 -2
  514. package/dist/cli/chunks/knowledge-graph-D3BPWNNO.js +0 -2
  515. package/dist/cli/chunks/learning-QLVRZNHT.js +0 -122
  516. package/dist/cli/chunks/llm-router-service-TJPPZFUN.js +0 -2
  517. package/dist/cli/chunks/load-test-RFT7IDOL.js +0 -2
  518. package/dist/cli/chunks/memory-backend-O2O4CFKZ.js +0 -2
  519. package/dist/cli/chunks/memory-handlers-DAEGUDBD.js +0 -2
  520. package/dist/cli/chunks/orchestrator-ORGJ6VAA.js +0 -452
  521. package/dist/cli/chunks/pattern-null-store-TUBNXS34.js +0 -2
  522. package/dist/cli/chunks/plugin-ZVLFNZZ4.js +0 -27
  523. package/dist/cli/chunks/project-root-UCHQH3QL.js +0 -2
  524. package/dist/cli/chunks/protocol-executor-6FQTTO3Y.js +0 -2
  525. package/dist/cli/chunks/qe-reasoning-bank-TKPND56C.js +0 -2
  526. package/dist/cli/chunks/quality-46AK277P.js +0 -7
  527. package/dist/cli/chunks/queen-coordinator-DWMXLPJG.js +0 -2
  528. package/dist/cli/chunks/real-embeddings-56MNGJGJ.js +0 -2
  529. package/dist/cli/chunks/router-QIMUYRCC.js +0 -2
  530. package/dist/cli/chunks/routing-feedback-4OH5ZNF4.js +0 -2
  531. package/dist/cli/chunks/rvf-dual-writer-S6JBZL54.js +0 -2
  532. package/dist/cli/chunks/rvf-migration-adapter-TSGMLMYR.js +0 -2
  533. package/dist/cli/chunks/rvf-migration-coordinator-V74MVBHS.js +0 -2
  534. package/dist/cli/chunks/rvf-native-adapter-Z7QOW47S.js +0 -2
  535. package/dist/cli/chunks/safe-db-JLOVBJNC.js +0 -2
  536. package/dist/cli/chunks/schedule-IM6XOBGR.js +0 -2
  537. package/dist/cli/chunks/scheduler-XL2SVVK5.js +0 -2
  538. package/dist/cli/chunks/shared-rvf-adapter-2LB56LP4.js +0 -2
  539. package/dist/cli/chunks/sqlite-persistence-LWMIIC4U.js +0 -2
  540. package/dist/cli/chunks/sync-SNAXAVCN.js +0 -2
  541. package/dist/cli/chunks/token-bootstrap-UGRH7OPU.js +0 -2
  542. package/dist/cli/chunks/unified-memory-F5IJY7W7.js +0 -2
  543. package/dist/cli/chunks/unified-memory-hnsw-C3WAMAQL.js +0 -2
  544. package/dist/cli/chunks/unified-persistence-EWXXOTCB.js +0 -2
  545. package/dist/cli/chunks/visual-security-CKLTAIAB.js +0 -2
  546. package/dist/cli/chunks/witness-chain-Z6LWFEZS.js +0 -2
  547. package/dist/cli/chunks/witness-chain-repair-5QWRFVUK.js +0 -2
  548. package/dist/cli/chunks/witness-key-manager-FYZXQTLJ.js +0 -2
  549. package/dist/cli/chunks/workflow-orchestrator-OFTAR2NA.js +0 -2
  550. package/dist/cli/chunks/wrappers-COU73OQ6.js +0 -2
  551. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  552. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  553. /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
  554. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  555. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  556. /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Evidence sufficiency for static quality analysis (#996).
3
+ *
4
+ * The static analyzer marks metrics it could not measure with the `-1`
5
+ * sentinel (or omits them). Such metrics must never be read as numbers that
6
+ * support a verdict: a pass computed without them is a pass on missing data.
7
+ */
8
+ import { INSUFFICIENT_EVIDENCE, type QualityThresholdOverrides } from './quality-evidence.js';
9
+ /** `measured`: every requested metric has data. Otherwise no verdict may approve. */
10
+ export type StaticEvidenceStatus = 'measured' | typeof INSUFFICIENT_EVIDENCE;
11
+ /** Metric names the static quality analysis understands. */
12
+ export declare const STATIC_QUALITY_METRICS: readonly ["coverage", "complexity", "maintainability", "duplication", "testability", "security"];
13
+ /**
14
+ * #996: the coverage threshold that applies to a static assessment — the
15
+ * request's threshold, else the user-configured gate threshold, else the
16
+ * canonical default (undefined = use the default).
17
+ */
18
+ export declare function resolveCoverageOverride(requested: number | undefined, configured: number | undefined): number | undefined;
19
+ export interface MeasuredFailure {
20
+ metric: string;
21
+ value: number;
22
+ threshold: number;
23
+ direction: 'min' | 'max';
24
+ }
25
+ export interface EvidenceSufficiency {
26
+ evidenceStatus: StaticEvidenceStatus;
27
+ /** Requested metrics backed by measured data. */
28
+ measured: string[];
29
+ /** Requested metrics with no measured data (missing, `-1`, or non-finite). */
30
+ unmeasured: string[];
31
+ /** Share of requested metrics that were measured, in [0, 1], two decimals. */
32
+ confidence: number;
33
+ }
34
+ /** A metric value is measured only if it is a finite, non-negative number. */
35
+ export declare function isMeasuredMetricValue(value: unknown): value is number;
36
+ /**
37
+ * #996 (N3): `metrics` must be a non-empty string[] of known names. A bare
38
+ * string would otherwise be spread into characters. Returns the de-duplicated
39
+ * list, or throws a caller-facing validation error.
40
+ */
41
+ export declare function validateRequestedMetrics(metrics: unknown): string[];
42
+ /**
43
+ * Decide whether static analysis measured every requested metric.
44
+ *
45
+ * @param requested - metric names the caller asked to assess; when empty,
46
+ * the measured values themselves define the scope.
47
+ * @param values - metric values produced by the analyzer (`-1` = unmeasured).
48
+ */
49
+ export declare function assessEvidenceSufficiency(requested: readonly string[], values: Readonly<Record<string, number | undefined>>): EvidenceSufficiency;
50
+ /**
51
+ * #996 (N2): measured metrics that already fail their own limit. Such a
52
+ * failure is conclusive — no unmeasured metric can turn it into a pass.
53
+ */
54
+ export declare function findMeasuredFailures(measured: readonly string[], values: Readonly<Record<string, number | undefined>>, overrides?: QualityThresholdOverrides): MeasuredFailure[];
55
+ /** Plain-language recommendation for one measured failure. */
56
+ export declare function describeMeasuredFailure(failure: MeasuredFailure): string;
57
+ //# sourceMappingURL=evidence-sufficiency.d.ts.map
@@ -0,0 +1,97 @@
1
+ /**
2
+ * Evidence sufficiency for static quality analysis (#996).
3
+ *
4
+ * The static analyzer marks metrics it could not measure with the `-1`
5
+ * sentinel (or omits them). Such metrics must never be read as numbers that
6
+ * support a verdict: a pass computed without them is a pass on missing data.
7
+ */
8
+ import { INSUFFICIENT_EVIDENCE, resolveQualityThresholds, } from './quality-evidence.js';
9
+ /** Metric names the static quality analysis understands. */
10
+ export const STATIC_QUALITY_METRICS = [
11
+ 'coverage', 'complexity', 'maintainability', 'duplication', 'testability', 'security',
12
+ ];
13
+ /**
14
+ * Static metrics that a measured value can fail on its own, mapped to the
15
+ * canonical gate metric whose effective threshold applies (by default
16
+ * coverage >= 80, duplication <= 5; see resolveQualityThresholds).
17
+ */
18
+ const STATIC_TO_GATE_METRIC = {
19
+ coverage: 'coverage',
20
+ duplication: 'duplications',
21
+ };
22
+ /**
23
+ * #996: the coverage threshold that applies to a static assessment — the
24
+ * request's threshold, else the user-configured gate threshold, else the
25
+ * canonical default (undefined = use the default).
26
+ */
27
+ export function resolveCoverageOverride(requested, configured) {
28
+ return requested ?? configured;
29
+ }
30
+ /** A metric value is measured only if it is a finite, non-negative number. */
31
+ export function isMeasuredMetricValue(value) {
32
+ return typeof value === 'number' && Number.isFinite(value) && value >= 0;
33
+ }
34
+ /**
35
+ * #996 (N3): `metrics` must be a non-empty string[] of known names. A bare
36
+ * string would otherwise be spread into characters. Returns the de-duplicated
37
+ * list, or throws a caller-facing validation error.
38
+ */
39
+ export function validateRequestedMetrics(metrics) {
40
+ const known = STATIC_QUALITY_METRICS;
41
+ const message = `metrics must be a non-empty array of metric names (${known.join(', ')}).`;
42
+ if (!Array.isArray(metrics) || metrics.length === 0)
43
+ throw new Error(message);
44
+ const unknown = metrics.filter((m) => typeof m !== 'string' || !known.includes(m));
45
+ if (unknown.length > 0) {
46
+ throw new Error(`${message} Unknown: ${unknown.map((m) => JSON.stringify(m)).join(', ')}.`);
47
+ }
48
+ return [...new Set(metrics)];
49
+ }
50
+ /**
51
+ * Decide whether static analysis measured every requested metric.
52
+ *
53
+ * @param requested - metric names the caller asked to assess; when empty,
54
+ * the measured values themselves define the scope.
55
+ * @param values - metric values produced by the analyzer (`-1` = unmeasured).
56
+ */
57
+ export function assessEvidenceSufficiency(requested, values) {
58
+ const scope = requested.length > 0
59
+ ? [...new Set(requested)]
60
+ : Object.keys(values).filter((name) => isMeasuredMetricValue(values[name]));
61
+ const measured = scope.filter((name) => isMeasuredMetricValue(values[name]));
62
+ const unmeasured = scope.filter((name) => !isMeasuredMetricValue(values[name]));
63
+ const confidence = scope.length === 0
64
+ ? 0
65
+ : Math.round((measured.length / scope.length) * 100) / 100;
66
+ return {
67
+ evidenceStatus: unmeasured.length === 0 && measured.length > 0 ? 'measured' : INSUFFICIENT_EVIDENCE,
68
+ measured,
69
+ unmeasured,
70
+ confidence,
71
+ };
72
+ }
73
+ /**
74
+ * #996 (N2): measured metrics that already fail their own limit. Such a
75
+ * failure is conclusive — no unmeasured metric can turn it into a pass.
76
+ */
77
+ export function findMeasuredFailures(measured, values, overrides = {}) {
78
+ const thresholds = resolveQualityThresholds(overrides);
79
+ const failures = [];
80
+ for (const metric of measured) {
81
+ const gateMetric = STATIC_TO_GATE_METRIC[metric];
82
+ const limit = gateMetric ? thresholds[gateMetric] : undefined;
83
+ const value = values[metric];
84
+ if (!limit || !isMeasuredMetricValue(value))
85
+ continue;
86
+ const fails = limit.direction === 'min' ? value < limit.value : value > limit.value;
87
+ if (fails)
88
+ failures.push({ metric, value, threshold: limit.value, direction: limit.direction });
89
+ }
90
+ return failures;
91
+ }
92
+ /** Plain-language recommendation for one measured failure. */
93
+ export function describeMeasuredFailure(failure) {
94
+ const bound = failure.direction === 'min' ? 'at least' : 'at most';
95
+ return `${failure.metric} measured at ${failure.value} fails its threshold (${bound} ${failure.threshold}).`;
96
+ }
97
+ //# sourceMappingURL=evidence-sufficiency.js.map
@@ -9,8 +9,8 @@ export { QualityAssessmentCoordinator, type IQualityAssessmentCoordinator, type
9
9
  export { QualityGateService, type IQualityGateService, type QualityGateConfig, } from './services/quality-gate';
10
10
  export { QualityAnalyzerService, type IQualityAnalyzerService, type QualityAnalyzerConfig, } from './services/quality-analyzer';
11
11
  export { DeploymentAdvisorService, type IDeploymentAdvisorService, type DeploymentAdvisorConfig, type DeploymentAccuracy, } from './services/deployment-advisor';
12
- export { DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS, DEFAULT_QUALITY_THRESHOLDS, QUALITY_EVIDENCE_NAMESPACE, QUALITY_METRICS, evaluateQualityEvidence, loadQualityEvidence, writeQualityEvidence, type EvaluatedQualityCheck, type QualityEvidenceRecord, type QualityEvidenceValues, type QualityMetricName, type QualityThreshold, } from './quality-evidence.js';
12
+ export { DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS, DEFAULT_QUALITY_THRESHOLDS, QUALITY_EVIDENCE_NAMESPACE, QUALITY_METRICS, INSUFFICIENT_EVIDENCE, InsufficientQualityEvidenceError, evaluateQualityEvidence, inspectQualityEvidence, loadQualityEvidence, writeQualityEvidence, type EvaluatedQualityCheck, type QualityEvidenceRecord, type QualityEvidenceValues, type QualityMetricName, type QualityThreshold, } from './quality-evidence.js';
13
13
  export { CoherenceGateService, createCoherenceGateService, type CoherenceGateResult, type CoherenceGateServiceConfig, } from './services/coherence-gate';
14
14
  export * from './coherence';
15
- export type { QualityAssessmentAPI, GateEvaluationRequest, QualityAnalysisRequest, DeploymentRequest, ComplexityRequest, GateResult, GateCheck, QualityReport, QualityMetricDetail, QualityTrend, Recommendation, DeploymentAdvice, ComplexityReport, FileComplexity, ComplexitySummary, ComplexityHotspot, QualityMetrics, GateThresholds, } from './interfaces';
15
+ export type { QualityAssessmentAPI, GateEvaluationRequest, QualityAnalysisRequest, DeploymentRequest, ComplexityRequest, GateResult, GateCheck, QualityReport, UnmeasuredQualityMetric, ExcludedQualityFile, PartialQualityMetric, QualityMetricDetail, QualityTrend, Recommendation, DeploymentAdvice, ComplexityReport, FileComplexity, ComplexitySummary, ComplexityHotspot, QualityMetrics, GateThresholds, } from './interfaces';
16
16
  //# sourceMappingURL=index.d.ts.map
@@ -18,7 +18,7 @@ export { QualityAssessmentCoordinator, } from './coordinator.js';
18
18
  export { QualityGateService, } from './services/quality-gate.js';
19
19
  export { QualityAnalyzerService, } from './services/quality-analyzer.js';
20
20
  export { DeploymentAdvisorService, } from './services/deployment-advisor.js';
21
- export { DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS, DEFAULT_QUALITY_THRESHOLDS, QUALITY_EVIDENCE_NAMESPACE, QUALITY_METRICS, evaluateQualityEvidence, loadQualityEvidence, writeQualityEvidence, } from './quality-evidence.js';
21
+ export { DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS, DEFAULT_QUALITY_THRESHOLDS, QUALITY_EVIDENCE_NAMESPACE, QUALITY_METRICS, INSUFFICIENT_EVIDENCE, InsufficientQualityEvidenceError, evaluateQualityEvidence, inspectQualityEvidence, loadQualityEvidence, writeQualityEvidence, } from './quality-evidence.js';
22
22
  // ============================================================================
23
23
  // Coherence-Gated Quality Gates (ADR-030)
24
24
  // ============================================================================
@@ -68,6 +68,11 @@ export interface QualityAnalysisRequest {
68
68
  sourceFiles: string[];
69
69
  includeMetrics: string[];
70
70
  compareBaseline?: string;
71
+ /**
72
+ * #1021: files the caller named explicitly. If one of them fails to read or
73
+ * parse, the affected metrics are unmeasured regardless of coverage of scope.
74
+ */
75
+ explicitFiles?: string[];
71
76
  }
72
77
  export interface QualityReport {
73
78
  score: QualityScore;
@@ -76,6 +81,43 @@ export interface QualityReport {
76
81
  recommendations: Recommendation[];
77
82
  /** ADR-051: Optional LLM-generated insights (when enableLLMInsights is true) */
78
83
  llmInsights?: LLMQualityInsights;
84
+ /**
85
+ * #1011: requested metrics that were NOT measured, with the reason. They are
86
+ * absent from `metrics` and -1 in `score`; never a fixed fallback value.
87
+ */
88
+ unmeasured?: UnmeasuredQualityMetric[];
89
+ /**
90
+ * #1021: files left out of the scope (binary, generated, minified, type
91
+ * declarations, refused by the reader's path policy). Metrics stay measured
92
+ * over the remaining files.
93
+ */
94
+ excluded?: ExcludedQualityFile[];
95
+ /**
96
+ * #1021: metrics measured over most, but not all, analysable files. Their
97
+ * value covers `analysedFiles` of `totalFiles`; `failed` lists the gaps.
98
+ */
99
+ partial?: PartialQualityMetric[];
100
+ }
101
+ /** #1021: a file excluded from static analysis, with the reason. */
102
+ export interface ExcludedQualityFile {
103
+ file: string;
104
+ reason: string;
105
+ }
106
+ /** #1021: a metric measured over part of its scope. */
107
+ export interface PartialQualityMetric {
108
+ metric: string;
109
+ analysedFiles: number;
110
+ totalFiles: number;
111
+ /** analysedFiles / totalFiles, three decimals, rounded down (never 1 while a file failed). */
112
+ coverageOfScope: number;
113
+ failed: ExcludedQualityFile[];
114
+ }
115
+ /** #1011: a requested metric the static analysis could not measure. */
116
+ export interface UnmeasuredQualityMetric {
117
+ metric: string;
118
+ reason: string;
119
+ /** Files that could not be analysed, when the cause is file-specific. */
120
+ files?: string[];
79
121
  }
80
122
  /**
81
123
  * ADR-051: LLM-generated quality insights
@@ -140,13 +182,17 @@ export interface ComplexityReport {
140
182
  summary: ComplexitySummary;
141
183
  hotspots: ComplexityHotspot[];
142
184
  }
185
+ /** Values are -1 when not measured (not requested, or the file could not be analysed). */
143
186
  export interface FileComplexity {
144
187
  path: string;
145
188
  cyclomatic: number;
146
189
  cognitive: number;
147
190
  maintainability: number;
148
191
  linesOfCode: number;
192
+ /** #1011: why this file's metrics are unmeasured (unreadable, binary, unparseable). */
193
+ unmeasuredReason?: string;
149
194
  }
195
+ /** Averages over measured files only; -1 when no file was measured for that metric. */
150
196
  export interface ComplexitySummary {
151
197
  averageCyclomatic: number;
152
198
  averageCognitive: number;
@@ -8,6 +8,7 @@ import { QualityAssessmentCoordinator, } from './coordinator.js';
8
8
  import { QualityGateService, } from './services/quality-gate.js';
9
9
  import { QualityAnalyzerService, } from './services/quality-analyzer.js';
10
10
  import { toError } from '../../shared/error-utils.js';
11
+ import { measuredCoverageSummary } from './coverage-report-event.js';
11
12
  import { DeploymentAdvisorService, } from './services/deployment-advisor.js';
12
13
  /**
13
14
  * Quality Assessment Domain Plugin
@@ -285,15 +286,14 @@ export class QualityAssessmentPlugin extends BaseDomainPlugin {
285
286
  }
286
287
  }
287
288
  async handleCoverageReport(event) {
288
- const payload = event.payload;
289
+ // #1008: only a report explicitly marked measured is coverage evidence.
290
+ // Estimates and look-alike events with no coverage figures (e.g. bridged
291
+ // captured experiences) must never touch `coverage:latest`.
292
+ const summary = measuredCoverageSummary(event.payload);
293
+ if (!summary)
294
+ return;
289
295
  // Store under the canonical coverage key so quality-analyzer can read it
290
- await this.memory.set('coverage:latest', {
291
- line: payload.line,
292
- branch: payload.branch,
293
- function: payload.function,
294
- statement: payload.statement,
295
- files: 0,
296
- }, { persist: true });
296
+ await this.memory.set('coverage:latest', summary, { persist: true });
297
297
  }
298
298
  async handleDefectPrediction(event) {
299
299
  const payload = event.payload;
@@ -10,6 +10,20 @@ export interface QualityEvidenceRecord {
10
10
  value: number;
11
11
  measuredAt: string;
12
12
  source: string;
13
+ /**
14
+ * The test run this figure came from, when it came from one (#1027 NB1).
15
+ * Coverage and testsPassing written from one run share the runId.
16
+ */
17
+ runId?: string;
18
+ /** Whether that run's tests passed (#1027 NB1). */
19
+ runStatus?: 'passed' | 'failed';
20
+ }
21
+ /** Metadata of an evidence write; `runId`/`runStatus` scope it to one test run. */
22
+ export interface QualityEvidenceMetadata {
23
+ measuredAt: string;
24
+ source: string;
25
+ runId?: string;
26
+ runStatus?: 'passed' | 'failed';
13
27
  }
14
28
  export interface QualityThreshold {
15
29
  direction: 'min' | 'max';
@@ -25,17 +39,97 @@ export interface EvaluatedQualityCheck {
25
39
  direction: 'min' | 'max';
26
40
  severity: QualityThreshold['severity'];
27
41
  }
28
- export declare function writeQualityEvidence(memory: MemoryBackend, values: Partial<QualityEvidenceValues>, metadata: {
29
- measuredAt: string;
42
+ export declare function writeQualityEvidence(memory: MemoryBackend, values: Partial<QualityEvidenceValues>, metadata: QualityEvidenceMetadata): Promise<void>;
43
+ /** Test counts of one run. */
44
+ export interface TestRunCounts {
45
+ passed: number;
46
+ failed: number;
47
+ skipped?: number;
48
+ }
49
+ /**
50
+ * testsPassing as `aqe test execute` has always computed it: passed over all
51
+ * tests, skipped included; a run with no tests is 0 (#1027 NB1: one formula).
52
+ */
53
+ export declare function testsPassingPercent(run: TestRunCounts): number;
54
+ /**
55
+ * Record the evidence of ONE test run (#1027 NB1): its testsPassing and, when
56
+ * it measured coverage, its coverage — both stamped with the same runId and
57
+ * runStatus. The single writer for `aqe test execute`, test_execute_parallel
58
+ * (TestExecutorService) and the coverage auto-run, so coverage from a failing
59
+ * run can never sit next to a stale testsPassing from an earlier run.
60
+ */
61
+ export declare function writeTestRunEvidence(memory: MemoryBackend, run: TestRunCounts & {
62
+ runId: string;
63
+ }, options: {
30
64
  source: string;
65
+ coverage?: number;
66
+ measuredAt?: string;
31
67
  }): Promise<void>;
68
+ /** #996: the single status word for "a verdict cannot be reached on this evidence". */
69
+ export declare const INSUFFICIENT_EVIDENCE: "insufficient-evidence";
70
+ /** #996: one recommendation per unmeasured metric, naming what to run. */
71
+ export declare function describeMissingMetrics(unmeasured: readonly string[]): string[];
72
+ /** Why a canonical metric has no usable evidence. */
73
+ export interface UnusableQualityEvidence {
74
+ metric: QualityMetricName;
75
+ reason: string;
76
+ }
77
+ /**
78
+ * #996: thrown when the measured gate cannot be evaluated. The message is the
79
+ * first problem found (unchanged wording); `unmeasured` names every metric
80
+ * whose record is absent, stale, future-dated or malformed.
81
+ */
82
+ export declare class InsufficientQualityEvidenceError extends Error {
83
+ readonly status: "insufficient-evidence";
84
+ readonly unmeasured: QualityMetricName[];
85
+ readonly problems: UnusableQualityEvidence[];
86
+ constructor(problems: UnusableQualityEvidence[]);
87
+ /** Structured, non-passing description of the gate that could not run. */
88
+ toDetails(): {
89
+ passed: false;
90
+ status: typeof INSUFFICIENT_EVIDENCE;
91
+ evidenceStatus: typeof INSUFFICIENT_EVIDENCE;
92
+ unmeasured: QualityMetricName[];
93
+ gateEvaluated: false;
94
+ recommendations: string[];
95
+ };
96
+ }
97
+ /**
98
+ * Inspect every canonical metric with the same validation, collecting each
99
+ * absent, stale, future-dated or malformed record instead of stopping at the first.
100
+ */
101
+ export declare function inspectQualityEvidence(memory: MemoryBackend, options?: {
102
+ now?: number;
103
+ maxAgeMs?: number;
104
+ }): Promise<{
105
+ values: Partial<QualityEvidenceValues>;
106
+ problems: UnusableQualityEvidence[];
107
+ }>;
108
+ /**
109
+ * #1028: the latest record of ONE metric when it is usable evidence — the same
110
+ * validation (schema, metric, finite value, source, fresh measuredAt) the gate
111
+ * applies — or `null`. Unlike {@link inspectQualityEvidence} it returns the
112
+ * record, so a reader can follow its `runId` to the run it came from.
113
+ */
114
+ export declare function readQualityEvidenceRecord(memory: Pick<MemoryBackend, 'get'>, metric: QualityMetricName, options?: {
115
+ now?: number;
116
+ maxAgeMs?: number;
117
+ }): Promise<QualityEvidenceRecord | null>;
32
118
  export declare function loadQualityEvidence(memory: MemoryBackend, options?: {
33
119
  now?: number;
34
120
  maxAgeMs?: number;
35
121
  }): Promise<QualityEvidenceValues>;
36
- export declare function evaluateQualityEvidence(values: QualityEvidenceValues, thresholds?: {
122
+ /** Threshold overrides a caller or user configuration may apply to the canonical defaults. */
123
+ export interface QualityThresholdOverrides {
37
124
  coverage?: number;
38
- }): {
125
+ }
126
+ /**
127
+ * The single source of effective quality thresholds: canonical defaults with
128
+ * any override applied. Used by the measured gate and by static analysis
129
+ * (#996) so the two never disagree.
130
+ */
131
+ export declare function resolveQualityThresholds(overrides?: QualityThresholdOverrides): Record<QualityMetricName, QualityThreshold>;
132
+ export declare function evaluateQualityEvidence(values: QualityEvidenceValues, thresholds?: QualityThresholdOverrides): {
39
133
  passed: boolean;
40
134
  checks: EvaluatedQualityCheck[];
41
135
  recommendations: string[];
@@ -71,6 +71,8 @@ export async function writeQualityEvidence(memory, values, metadata) {
71
71
  value,
72
72
  measuredAt: metadata.measuredAt,
73
73
  source: metadata.source,
74
+ ...(metadata.runId ? { runId: metadata.runId } : {}),
75
+ ...(metadata.runStatus ? { runStatus: metadata.runStatus } : {}),
74
76
  };
75
77
  await memory.set(evidenceKey(metric), record, {
76
78
  namespace: QUALITY_EVIDENCE_NAMESPACE,
@@ -78,27 +80,169 @@ export async function writeQualityEvidence(memory, values, metadata) {
78
80
  });
79
81
  }
80
82
  }
81
- export async function loadQualityEvidence(memory, options = {}) {
83
+ /**
84
+ * testsPassing as `aqe test execute` has always computed it: passed over all
85
+ * tests, skipped included; a run with no tests is 0 (#1027 NB1: one formula).
86
+ */
87
+ export function testsPassingPercent(run) {
88
+ const total = run.passed + run.failed + (run.skipped ?? 0);
89
+ return total > 0 ? (run.passed / total) * 100 : 0;
90
+ }
91
+ /**
92
+ * Record the evidence of ONE test run (#1027 NB1): its testsPassing and, when
93
+ * it measured coverage, its coverage — both stamped with the same runId and
94
+ * runStatus. The single writer for `aqe test execute`, test_execute_parallel
95
+ * (TestExecutorService) and the coverage auto-run, so coverage from a failing
96
+ * run can never sit next to a stale testsPassing from an earlier run.
97
+ */
98
+ export async function writeTestRunEvidence(memory, run, options) {
99
+ const runStatus = run.failed > 0 ? 'failed' : 'passed';
100
+ const metadata = {
101
+ measuredAt: options.measuredAt ?? new Date().toISOString(),
102
+ source: options.source,
103
+ runId: run.runId,
104
+ runStatus,
105
+ };
106
+ await writeQualityEvidence(memory, {
107
+ testsPassing: testsPassingPercent(run),
108
+ ...(typeof options.coverage === 'number' && Number.isFinite(options.coverage) ? { coverage: options.coverage } : {}),
109
+ }, metadata);
110
+ }
111
+ /** #996: the single status word for "a verdict cannot be reached on this evidence". */
112
+ export const INSUFFICIENT_EVIDENCE = 'insufficient-evidence';
113
+ /** #996: what to run to measure a metric that has no usable evidence. */
114
+ // Advice names only producers a user can actually run. Metrics with no
115
+ // exposed producer say so instead of pointing at an unreachable tool.
116
+ const NO_EXPOSED_PRODUCER = 'no MCP tool or CLI command records it yet, so supply it from your own measurement';
117
+ const MISSING_METRIC_ADVICE = {
118
+ coverage: 'run the tests with coverage instrumentation enabled so measured line coverage is recorded '
119
+ + '(a static estimate is not measured coverage)',
120
+ testsPassing: 'run the test suite (test_execute_parallel, or `aqe test execute`)',
121
+ // The static analyzer has no security measurement; a scan reports findings separately.
122
+ security: 'static analysis never measures security; drop it from metrics and use '
123
+ + 'security_scan_comprehensive (or `aqe security`) for findings',
124
+ securityVulnerabilities: `a measured vulnerability count is required; ${NO_EXPOSED_PRODUCER}`,
125
+ criticalBugs: `a measured critical-bug count is required; ${NO_EXPOSED_PRODUCER}`,
126
+ codeSmells: `a measured code-smell count is required; ${NO_EXPOSED_PRODUCER}`,
127
+ technicalDebt: `a measured technical-debt ratio is required; ${NO_EXPOSED_PRODUCER}`,
128
+ duplications: `a measured duplication percentage is required; ${NO_EXPOSED_PRODUCER}`,
129
+ complexity: 'make sure the target contains readable TypeScript/JavaScript source the analyzer can parse',
130
+ maintainability: 'make sure the target contains readable TypeScript/JavaScript source the analyzer can parse',
131
+ testability: 'make sure the target contains readable TypeScript/JavaScript source the analyzer can parse',
132
+ duplication: 'make sure the target contains readable TypeScript/JavaScript source the analyzer can parse',
133
+ };
134
+ /** #996: one recommendation per unmeasured metric, naming what to run. */
135
+ export function describeMissingMetrics(unmeasured) {
136
+ return unmeasured.map((metric) => `Insufficient evidence: ${metric} not measured — ${MISSING_METRIC_ADVICE[metric] ?? 'measure it'}.`);
137
+ }
138
+ /**
139
+ * #996: thrown when the measured gate cannot be evaluated. The message is the
140
+ * first problem found (unchanged wording); `unmeasured` names every metric
141
+ * whose record is absent, stale, future-dated or malformed.
142
+ */
143
+ export class InsufficientQualityEvidenceError extends Error {
144
+ status = INSUFFICIENT_EVIDENCE;
145
+ unmeasured;
146
+ problems;
147
+ constructor(problems) {
148
+ super(problems[0]?.reason ?? 'Measured quality evidence is unavailable.');
149
+ this.name = 'InsufficientQualityEvidenceError';
150
+ this.problems = problems;
151
+ this.unmeasured = problems.map((p) => p.metric);
152
+ }
153
+ /** Structured, non-passing description of the gate that could not run. */
154
+ toDetails() {
155
+ return {
156
+ passed: false,
157
+ status: INSUFFICIENT_EVIDENCE,
158
+ evidenceStatus: INSUFFICIENT_EVIDENCE,
159
+ unmeasured: this.unmeasured,
160
+ gateEvaluated: false,
161
+ recommendations: describeMissingMetrics(this.unmeasured),
162
+ };
163
+ }
164
+ }
165
+ /**
166
+ * Inspect every canonical metric with the same validation, collecting each
167
+ * absent, stale, future-dated or malformed record instead of stopping at the first.
168
+ */
169
+ export async function inspectQualityEvidence(memory, options = {}) {
82
170
  const now = options.now ?? Date.now();
83
171
  const maxAgeMs = options.maxAgeMs ?? DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS;
84
172
  const values = {};
173
+ const problems = [];
174
+ const valid = {};
85
175
  for (const metric of QUALITY_METRICS) {
86
176
  const record = await memory.get(evidenceKey(metric), {
87
177
  namespace: QUALITY_EVIDENCE_NAMESPACE,
88
178
  });
89
- validateRecord(record, metric, now, maxAgeMs);
90
- values[metric] = record.value;
179
+ try {
180
+ validateRecord(record, metric, now, maxAgeMs);
181
+ values[metric] = record.value;
182
+ valid[metric] = record;
183
+ }
184
+ catch (error) {
185
+ problems.push({ metric, reason: error instanceof Error ? error.message : String(error) });
186
+ }
187
+ }
188
+ // #1027 NB1: coverage measured in a run whose tests FAILED is evidence only
189
+ // next to the testsPassing of that same run — never next to a stale figure
190
+ // from an earlier (passing) run, which would let the gate pass.
191
+ const coverage = valid.coverage;
192
+ if (coverage?.runStatus === 'failed' && (!coverage.runId || valid.testsPassing?.runId !== coverage.runId)) {
193
+ delete values.coverage;
194
+ problems.push({
195
+ metric: 'coverage',
196
+ reason: 'Measured coverage comes from a run with failing tests, but no testsPassing evidence '
197
+ + 'from that same run was recorded. Re-run the test suite.',
198
+ });
91
199
  }
200
+ return { values, problems };
201
+ }
202
+ /**
203
+ * #1028: the latest record of ONE metric when it is usable evidence — the same
204
+ * validation (schema, metric, finite value, source, fresh measuredAt) the gate
205
+ * applies — or `null`. Unlike {@link inspectQualityEvidence} it returns the
206
+ * record, so a reader can follow its `runId` to the run it came from.
207
+ */
208
+ export async function readQualityEvidenceRecord(memory, metric, options = {}) {
209
+ const record = await memory.get(evidenceKey(metric), {
210
+ namespace: QUALITY_EVIDENCE_NAMESPACE,
211
+ });
212
+ try {
213
+ validateRecord(record, metric, options.now ?? Date.now(), options.maxAgeMs ?? DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS);
214
+ return record;
215
+ }
216
+ catch {
217
+ return null;
218
+ }
219
+ }
220
+ export async function loadQualityEvidence(memory, options = {}) {
221
+ const { values, problems } = await inspectQualityEvidence(memory, options);
222
+ if (problems.length > 0)
223
+ throw new InsufficientQualityEvidenceError(problems);
92
224
  return values;
93
225
  }
94
- export function evaluateQualityEvidence(values, thresholds = {}) {
95
- if (thresholds.coverage !== undefined && (!Number.isFinite(thresholds.coverage) || thresholds.coverage < 0 || thresholds.coverage > 100)) {
226
+ /**
227
+ * The single source of effective quality thresholds: canonical defaults with
228
+ * any override applied. Used by the measured gate and by static analysis
229
+ * (#996) so the two never disagree.
230
+ */
231
+ export function resolveQualityThresholds(overrides = {}) {
232
+ if (overrides.coverage !== undefined && (!Number.isFinite(overrides.coverage) || overrides.coverage < 0 || overrides.coverage > 100)) {
96
233
  throw new Error('Coverage quality threshold must be a finite number between 0 and 100.');
97
234
  }
235
+ return {
236
+ ...DEFAULT_QUALITY_THRESHOLDS,
237
+ ...(overrides.coverage !== undefined
238
+ ? { coverage: { ...DEFAULT_QUALITY_THRESHOLDS.coverage, value: overrides.coverage } }
239
+ : {}),
240
+ };
241
+ }
242
+ export function evaluateQualityEvidence(values, thresholds = {}) {
243
+ const effective = resolveQualityThresholds(thresholds);
98
244
  const checks = QUALITY_METRICS.map((name) => {
99
- const threshold = name === 'coverage' && thresholds.coverage !== undefined
100
- ? { ...DEFAULT_QUALITY_THRESHOLDS[name], value: thresholds.coverage }
101
- : DEFAULT_QUALITY_THRESHOLDS[name];
245
+ const threshold = effective[name];
102
246
  const value = values[name];
103
247
  return {
104
248
  name,
@@ -3,8 +3,9 @@
3
3
  * Comprehensive quality metrics analysis with trends and recommendations
4
4
  */
5
5
  import { Result, QualityScore } from '../../../shared/types';
6
+ import { CodeMetricsAnalyzer } from '../../../shared/metrics';
6
7
  import { MemoryBackend } from '../../../kernel/interfaces';
7
- import { QualityAnalysisRequest, QualityReport, QualityMetricDetail, QualityTrend, ComplexityRequest, ComplexityReport, LLMQualityInsights } from '../interfaces';
8
+ import { QualityAnalysisRequest, QualityReport, QualityMetricDetail, QualityTrend, ComplexityRequest, ComplexityReport, LLMQualityInsights, UnmeasuredQualityMetric } from '../interfaces';
8
9
  import type { HybridRouter } from '../../../shared/llm';
9
10
  /**
10
11
  * Interface for the quality analyzer service
@@ -49,7 +50,17 @@ export interface QualityAnalyzerDependencies {
49
50
  memory: MemoryBackend;
50
51
  /** ADR-051: Optional LLM router for AI-enhanced quality insights */
51
52
  llmRouter?: HybridRouter;
53
+ /** Code metrics analyzer (defaults to the shared instance). */
54
+ metricsAnalyzer?: CodeMetricsAnalyzer;
52
55
  }
56
+ /**
57
+ * #1021: a parsed metric with read/parse failures is still evidence when at
58
+ * least this share of the analysable files (in-scope minus excluded) was
59
+ * analysed. Below it, the unseen files are too large a blind spot for an
60
+ * average to describe the target, so the metric is unmeasured. 95% keeps one
61
+ * failure in a 20-file scope acceptable but not one in 10.
62
+ */
63
+ export declare const MIN_ANALYSED_SHARE = 0.95;
53
64
  export declare class QualityAnalyzerService implements IQualityAnalyzerService {
54
65
  private readonly config;
55
66
  private readonly metricsAnalyzer;
@@ -75,7 +86,7 @@ export declare class QualityAnalyzerService implements IQualityAnalyzerService {
75
86
  * Generate quality insights using LLM
76
87
  * Provides AI-powered explanation and prioritized recommendations
77
88
  */
78
- generateQualityInsightsWithLLM(metrics: QualityMetricDetail[], score: QualityScore, codeContext?: string): Promise<LLMQualityInsights | null>;
89
+ generateQualityInsightsWithLLM(metrics: QualityMetricDetail[], score: QualityScore, codeContext?: string, unmeasured?: UnmeasuredQualityMetric[]): Promise<LLMQualityInsights | null>;
79
90
  /**
80
91
  * Build prompt for quality insights generation
81
92
  */
@@ -104,6 +115,16 @@ export declare class QualityAnalyzerService implements IQualityAnalyzerService {
104
115
  * Get quality trend for a specific metric
105
116
  */
106
117
  getQualityTrend(metric: string, days: number): Promise<Result<QualityTrend, Error>>;
118
+ /**
119
+ * Collect per-file metric values. #1011 / #1021:
120
+ * - excluded files (binary, generated, minified, declarations, refused by
121
+ * reader policy) leave the scope with a reason;
122
+ * - failed files (unreadable, unparseable) make a parsed metric partial, or
123
+ * unmeasured below MIN_ANALYSED_SHARE or when a failed file was named
124
+ * explicitly;
125
+ * - failed duplication detection and missing coverage are unmeasured.
126
+ * Never a fixed fallback value.
127
+ */
107
128
  private collectFileMetrics;
108
129
  private getStoredCoverage;
109
130
  private aggregateMetrics;