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