agentic-qe 3.15.5 → 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 (536) 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 +121 -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/cli/bundle.js +5 -5
  11. package/dist/cli/chunks/adapter-PP3XIXDV.js +2 -0
  12. package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-SY7UCLBL.js} +2 -2
  13. package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-KAMYBU3S.js} +2 -2
  14. package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-2CAW3KUM.js} +2 -2
  15. package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +2 -0
  16. package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-4OFLJ3R2.js} +2 -2
  17. package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-QCCVIOAH.js} +4 -4
  18. package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-RBDQJQJB.js} +3 -3
  19. package/dist/cli/chunks/base-QSYWWPCE.js +2 -0
  20. package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-5JRACCDQ.js} +2 -2
  21. package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-W4QIIRT4.js} +3 -3
  22. package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-IBNGI572.js} +2 -2
  23. package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-GMSCVAOI.js} +2 -2
  24. package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +2 -0
  25. package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-22OZIJAD.js} +2 -2
  26. package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-24ZSGYC6.js} +1 -1
  27. package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-2CIDFR2H.js} +3 -3
  28. package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2IWPJUVV.js} +5 -5
  29. package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-2ZTWPMTK.js} +2 -2
  30. package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34MDMFET.js} +2 -2
  31. package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-3DJNKNBR.js} +66 -65
  32. package/dist/cli/chunks/{chunk-XQRE2HWM.js → chunk-3NJ7O3OH.js} +2 -2
  33. package/dist/cli/chunks/chunk-45MVRQG4.js +2 -0
  34. package/dist/cli/chunks/chunk-46HBVDMU.js +2 -0
  35. package/dist/cli/chunks/{chunk-MNQ36MAF.js → chunk-47Q7JL3V.js} +2 -2
  36. package/dist/cli/chunks/chunk-4CLDYT36.js +2 -0
  37. package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-4KOVHQXK.js} +2 -2
  38. package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-4POOJYXA.js} +1 -1
  39. package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-5DH5QI7G.js} +26 -26
  40. package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-5GIJU2ZY.js} +2 -2
  41. package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-5HAPS6VD.js} +2 -2
  42. package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-5LST62QR.js} +2 -2
  43. package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-5MT7DMD7.js} +2 -2
  44. package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-5NC7QEJ6.js} +4 -4
  45. package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-5UPIL62W.js} +3 -3
  46. package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-5VUIXDY2.js} +2 -2
  47. package/dist/cli/chunks/chunk-5VZVMO7B.js +3 -0
  48. package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-624QRKQX.js} +1 -1
  49. package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-66NW3ZB4.js} +2 -2
  50. package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-6HWARQWV.js} +2 -2
  51. package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6MXAJBEA.js} +1 -1
  52. package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6R3FBFCJ.js} +2 -2
  53. package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-6RDVY26I.js} +2 -2
  54. package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-6T6AHVLF.js} +1 -1
  55. package/dist/cli/chunks/{chunk-JANLATHN.js → chunk-6WOZUSSN.js} +2 -2
  56. package/dist/cli/chunks/chunk-72MQCZSM.js +2 -0
  57. package/dist/cli/chunks/chunk-7QVPMH25.js +3 -0
  58. package/dist/cli/chunks/{chunk-HLFDC4SF.js → chunk-7SAMMQVS.js} +1 -1
  59. package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-7TJZDRDU.js} +1 -1
  60. package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-7TVIX4WL.js} +2 -2
  61. package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-7VTKR44N.js} +2 -2
  62. package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-7XTANLTN.js} +1 -1
  63. package/dist/cli/chunks/chunk-7XUB7U6Z.js +4 -0
  64. package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-A74J23QB.js} +2 -2
  65. package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-A7ANPS4E.js} +2 -2
  66. package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-AJT3XDRD.js} +2 -2
  67. package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-ALCIUWFC.js} +1 -1
  68. package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-AUN4FG7V.js} +1 -1
  69. package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-AUOSHM63.js} +2 -2
  70. package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-AX26QJ6T.js} +2 -2
  71. package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-B7RHBKHL.js} +2 -2
  72. package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-BAYGQRNP.js} +2 -2
  73. package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-BIXRTOH3.js} +18 -18
  74. package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-BO7UFNYV.js} +2 -2
  75. package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-BUTGIVKW.js} +1 -1
  76. package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-BXATKI5S.js} +2 -2
  77. package/dist/cli/chunks/{chunk-BO4PKNYP.js → chunk-CCL436IU.js} +32 -27
  78. package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-CEXNW5TR.js} +1 -1
  79. package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-CLAMMGY3.js} +2 -2
  80. package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-CR66HNAE.js} +1 -1
  81. package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-CZBIREL5.js} +2 -2
  82. package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-D5N2O5EH.js} +2 -2
  83. package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-DA7DGDTI.js} +2 -2
  84. package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-DLSFT6PO.js} +2 -2
  85. package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-DQNUPEY5.js} +2 -2
  86. package/dist/cli/chunks/{chunk-GTSOFCMQ.js → chunk-EECF4CMA.js} +1 -1
  87. package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-EF5UHDCG.js} +1 -1
  88. package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-EJ4KZFZN.js} +1 -1
  89. package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-ELI4GDQO.js} +2 -2
  90. package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-F3KS3TAB.js} +2 -2
  91. package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-F7A2UBZO.js} +2 -2
  92. package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-FOJRPEIP.js} +2 -2
  93. package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-FQ5N666N.js} +1 -1
  94. package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-FU7LNUD7.js} +2 -2
  95. package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-GFB6BZWU.js} +2 -2
  96. package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-GI5HWS4H.js} +1 -1
  97. package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-GNYOHZVV.js} +1 -1
  98. package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-GVRFSXY6.js} +2 -2
  99. package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-GWM4M5NF.js} +1 -1
  100. package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-HAN4MS5T.js} +2 -2
  101. package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-HEGGV2PT.js} +2 -2
  102. package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-HOEWMEF2.js} +2 -2
  103. package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-HZFK2Z2Z.js} +1 -1
  104. package/dist/cli/chunks/chunk-I7WAW7TM.js +2 -0
  105. package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-IEPWO4XP.js} +2 -2
  106. package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-ITIJ23K2.js} +2 -2
  107. package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-IVJIHZSM.js} +1 -1
  108. package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-JAPBSSFY.js} +1 -1
  109. package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-JCE76MPP.js} +2 -2
  110. package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-JPJEAK4G.js} +1 -1
  111. package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-JYKQVYX2.js} +2 -2
  112. package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-K55EAWZ5.js} +2 -2
  113. package/dist/cli/chunks/chunk-KCB6P463.js +3 -0
  114. package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-KIDOBLUO.js} +2 -2
  115. package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-KYVIOC3C.js} +2 -2
  116. package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-L2TDHJR3.js} +2 -2
  117. package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-L4D3TPFP.js} +1 -1
  118. package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-LAY7NCQK.js} +3 -3
  119. package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-LCCTJ2PC.js} +2 -2
  120. package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-LJCEDTUM.js} +3 -3
  121. package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-LMAEMVPA.js} +1 -1
  122. package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-LZWJ5BMP.js} +2 -2
  123. package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-MP3FSUNB.js} +2 -2
  124. package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-MQCTLTGE.js} +2 -2
  125. package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-MQTA6KIO.js} +1 -1
  126. package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-NBUXM5X6.js} +10 -6
  127. package/dist/cli/chunks/{chunk-DPYDUKVZ.js → chunk-NHRF3V4B.js} +2 -2
  128. package/dist/cli/chunks/chunk-NMY4KTWA.js +16 -0
  129. package/dist/cli/chunks/chunk-NYS2GUNO.js +2 -0
  130. package/dist/cli/chunks/{chunk-AUZXRFOX.js → chunk-ONPPBLRB.js} +2 -2
  131. package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-OPDZBRIL.js} +2 -2
  132. package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-OQ4S6B7P.js} +1 -1
  133. package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-ORBODZSO.js} +2 -2
  134. package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-ORFL3YXB.js} +2 -2
  135. package/dist/cli/chunks/{chunk-BMWAWZAN.js → chunk-P7DXVL2S.js} +2 -2
  136. package/dist/cli/chunks/chunk-PEMSXSP2.js +4 -0
  137. package/dist/cli/chunks/chunk-PS6WFCA4.js +6 -0
  138. package/dist/cli/chunks/{chunk-DPV33C77.js → chunk-Q2RBOC7V.js} +2 -2
  139. package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-QLKUCMZC.js} +1 -1
  140. package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QLYO3H7E.js} +9 -9
  141. package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-QS5KZYUZ.js} +2 -2
  142. package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-R363XXGH.js} +2 -2
  143. package/dist/cli/chunks/chunk-RD5BYLN7.js +2 -0
  144. package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-RFDFET3O.js} +2 -2
  145. package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-RHIQ6QO5.js} +357 -351
  146. package/dist/cli/chunks/chunk-RLB7K7QP.js +2 -0
  147. package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-RUTO67PT.js} +2 -2
  148. package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-RV6HSMKJ.js} +1 -1
  149. package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-SOSJWM3E.js} +4 -4
  150. package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-SV5BUYHH.js} +2 -2
  151. package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-TL5GV3PR.js} +8 -8
  152. package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-TLUIO37P.js} +2 -2
  153. package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-TUDENMAE.js} +2 -2
  154. package/dist/cli/chunks/chunk-TVLOED6O.js +2 -0
  155. package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-UB6DQGWM.js} +2 -2
  156. package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-UHHMAKPE.js} +1 -1
  157. package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-ULCHPPW2.js} +1 -1
  158. package/dist/cli/chunks/chunk-V3OLS2NG.js +2 -0
  159. package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-VAYZ5QIE.js} +1 -1
  160. package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-VCONCVSY.js} +3 -3
  161. package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-VVF337SV.js} +2 -2
  162. package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-WKDWRRDT.js} +2 -2
  163. package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-X2DR27AY.js} +2 -2
  164. package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-X33F7NXH.js} +3 -3
  165. package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-XBEI2JBA.js} +2 -2
  166. package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-XBFQJZWX.js} +2 -2
  167. package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-XFPQIWEH.js} +3 -3
  168. package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-XPB5BVU6.js} +2 -2
  169. package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-XQ53PZEF.js} +3 -3
  170. package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-XZ46CI35.js} +2 -2
  171. package/dist/cli/chunks/chunk-YLNYPQDR.js +2 -0
  172. package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-YNG7E26C.js} +2 -2
  173. package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-YXU35GGD.js} +1 -1
  174. package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-ZCP4P6O2.js} +2 -2
  175. package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-ZL5LJT7D.js} +2 -2
  176. package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-ZOUEQ6DL.js} +1 -1
  177. package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-ZSBD4FUX.js} +2 -2
  178. package/dist/cli/chunks/chunk-ZTB32K5N.js +5 -0
  179. package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-ZUTFHGEO.js} +1 -1
  180. package/dist/cli/chunks/ci-GEJCXMBK.js +81 -0
  181. package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-2ZVV4OXL.js} +2 -2
  182. package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-E45OGVPR.js} +2 -2
  183. package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-X73ITYZC.js} +2 -2
  184. package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-W4PPH46C.js} +2 -2
  185. package/dist/cli/chunks/client-6XKSQ4JT.js +2 -0
  186. package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-NUEPMWDE.js} +2 -2
  187. package/dist/cli/chunks/{code-QSZTDINQ.js → code-6WQHBS7G.js} +3 -3
  188. package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-BXQIFIFT.js} +2 -2
  189. package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-Z337R2KH.js} +2 -2
  190. package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-F5DMYFHV.js} +2 -2
  191. package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-W2SYPZDI.js} +2 -2
  192. package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-ZCHUIFTN.js} +2 -2
  193. package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-M5JNODXF.js} +2 -2
  194. package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +2 -0
  195. package/dist/cli/chunks/{cost-tracker-RIN4JDDM.js → cost-tracker-LSYTHBHV.js} +2 -2
  196. package/dist/cli/chunks/coverage-PGMRS5SS.js +49 -0
  197. package/dist/cli/chunks/cross-domain-router-QVUPQ2SC.js +2 -0
  198. package/dist/cli/chunks/{cursor-installer-POM7NGCC.js → cursor-installer-XPUA73UW.js} +2 -2
  199. package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-ITKDIYMW.js} +5 -5
  200. package/dist/cli/chunks/daemon-QBYTCIMH.js +10 -0
  201. package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-T55AXLD6.js} +2 -2
  202. package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-DR7J6K4O.js} +2 -2
  203. package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-LAJJBOUT.js} +2 -2
  204. package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-OMSHCRMK.js} +2 -2
  205. package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-EQXSKC5K.js} +2 -2
  206. package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.js → domain-transfer-FKRAGVSW.js} +2 -2
  207. package/dist/cli/chunks/dream-3UABDRZJ.js +2 -0
  208. package/dist/cli/chunks/embed-and-insert-pattern-JZFPCNL3.js +3 -0
  209. package/dist/cli/chunks/{eval-K7E4XXBS.js → eval-JSNNASBW.js} +2 -2
  210. package/dist/cli/chunks/experience-capture-middleware-UPD3IZBK.js +40 -0
  211. package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-YNMIBS2E.js} +2 -2
  212. package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-SRLXDKBI.js} +2 -2
  213. package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-VIR7O4L7.js} +2 -2
  214. package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +2 -0
  215. package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-K2ED46EL.js} +3 -3
  216. package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-QCU4ZRYW.js} +2 -2
  217. package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.js → heartbeat-handler-YYQI4WZM.js} +4 -4
  218. package/dist/cli/chunks/heartbeat-scheduler-MJ6MTPDF.js +2 -0
  219. package/dist/cli/chunks/hnsw-adapter-FQWJCFVW.js +2 -0
  220. package/dist/cli/chunks/hnsw-index-NJYKJUHC.js +2 -0
  221. package/dist/cli/chunks/{hnsw-legacy-bridge-KRS7SSFM.js → hnsw-legacy-bridge-C5TJSWTZ.js} +2 -2
  222. package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-SE3MJJYS.js} +2 -2
  223. package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-C572SRDH.js} +43 -43
  224. package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +2 -0
  225. package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-35A6G3M5.js} +2 -2
  226. package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.js → hypergraph-handler-U2756CWI.js} +3 -3
  227. package/dist/cli/chunks/impact-analyzer-5ZJTXPVC.js +2 -0
  228. package/dist/cli/chunks/init-handler-PCLYQUSB.js +88 -0
  229. package/dist/cli/chunks/init-wizard-MQMDSIOF.js +2 -0
  230. package/dist/cli/chunks/kernel-MEJ5GMRH.js +2 -0
  231. package/dist/cli/chunks/{kilocode-installer-TEPR2ZJD.js → kilocode-installer-32PX5YH7.js} +2 -2
  232. package/dist/cli/chunks/{kiro-installer-RUKHGDEE.js → kiro-installer-C4ROMMUS.js} +2 -2
  233. package/dist/cli/chunks/knowledge-graph-XUBZSEZE.js +2 -0
  234. package/dist/cli/chunks/learning-GEPVZGJQ.js +122 -0
  235. package/dist/cli/chunks/{llm-router-7GECMDCP.js → llm-router-XRKTTJTX.js} +4 -4
  236. package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +2 -0
  237. package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XVH6HW7E.js} +2 -2
  238. package/dist/cli/chunks/load-test-OVXIQ3AF.js +2 -0
  239. package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-IULSTM4Z.js} +2 -2
  240. package/dist/cli/chunks/{memory-HYC4M4XS.js → memory-6K7IAU4T.js} +5 -5
  241. package/dist/cli/chunks/memory-backend-TRPOMPK4.js +2 -0
  242. package/dist/cli/chunks/memory-handlers-CG6DRLAW.js +2 -0
  243. package/dist/cli/chunks/{multi-model-executor-T7FYKM6T.js → multi-model-executor-VZDUYPLX.js} +2 -2
  244. package/dist/cli/chunks/{opencode-installer-3USXVT5M.js → opencode-installer-QUTXKNH4.js} +2 -2
  245. package/dist/cli/chunks/orchestrator-PCKKUWOP.js +452 -0
  246. package/dist/cli/chunks/pattern-null-store-JWYBRBZG.js +2 -0
  247. package/dist/cli/chunks/{pattern-usage-recorder-CMZLPX2K.js → pattern-usage-recorder-PX5HQVRL.js} +2 -2
  248. package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-O562GTOG.js} +2 -2
  249. package/dist/cli/chunks/{platform-2MCRKC25.js → platform-PM7Q2AZS.js} +2 -2
  250. package/dist/cli/chunks/plugin-OTYTFGPY.js +27 -0
  251. package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.js → prime-radiant-advanced-wasm-6CFXTHC2.js} +2 -2
  252. package/dist/cli/chunks/project-root-VVSTHIP4.js +2 -0
  253. package/dist/cli/chunks/protocol-executor-PXZCLZD3.js +2 -0
  254. package/dist/cli/chunks/{protocol-handler-DZ26OYVZ.js → protocol-handler-PPGNSAOS.js} +2 -2
  255. package/dist/cli/chunks/{prove-QWONEJWX.js → prove-WQ3BKRZG.js} +2 -2
  256. package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +2 -0
  257. package/dist/cli/chunks/{quality-WFH54FY7.js → quality-C5WUU3AA.js} +2 -2
  258. package/dist/cli/chunks/{quality-gate-ONJB7XU7.js → quality-gate-WSSRKD5U.js} +3 -3
  259. package/dist/cli/chunks/queen-coordinator-UI3B7DI6.js +2 -0
  260. package/dist/cli/chunks/real-embeddings-CFQE7IRQ.js +2 -0
  261. package/dist/cli/chunks/{ref-validation-HW5Y55ZC.js → ref-validation-DHKHXVZT.js} +2 -2
  262. package/dist/cli/chunks/{roocode-installer-5OABDNZT.js → roocode-installer-3PPODABV.js} +2 -2
  263. package/dist/cli/chunks/router-HYRPWLAY.js +2 -0
  264. package/dist/cli/chunks/routing-feedback-BPZ5R6F3.js +2 -0
  265. package/dist/cli/chunks/{routing-handler-CVHVOQTC.js → routing-handler-JNXTGT6T.js} +2 -2
  266. package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.js → ruvector-commands-6YLROPVP.js} +2 -2
  267. package/dist/cli/chunks/rvf-dual-writer-DEKDQ6KO.js +2 -0
  268. package/dist/cli/chunks/rvf-migration-adapter-L53VBS7I.js +2 -0
  269. package/dist/cli/chunks/rvf-migration-coordinator-4DWB4WRK.js +2 -0
  270. package/dist/cli/chunks/rvf-native-adapter-I6RUGD2D.js +2 -0
  271. package/dist/cli/chunks/{rvf-store-integrity-UGUXKIFX.js → rvf-store-integrity-YKR2ZNBF.js} +2 -2
  272. package/dist/cli/chunks/safe-db-KS65XDCP.js +2 -0
  273. package/dist/cli/chunks/schedule-KD2VN6GB.js +2 -0
  274. package/dist/cli/chunks/scheduler-ZH3RMUHY.js +2 -0
  275. package/dist/cli/chunks/{security-7723AZZ4.js → security-PWQTGDRU.js} +3 -3
  276. package/dist/cli/chunks/shared-rvf-adapter-LNRLFP5I.js +2 -0
  277. package/dist/cli/chunks/{shared-rvf-dual-writer-ZSHYG5IA.js → shared-rvf-dual-writer-GWU6YQNS.js} +2 -2
  278. package/dist/cli/chunks/sqlite-persistence-6DTVME5D.js +2 -0
  279. package/dist/cli/chunks/{standalone-memory-MHZEEYMK.js → standalone-memory-46KKBSSV.js} +2 -2
  280. package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-35T5FTDQ.js} +2 -2
  281. package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-P7QPQWLO.js} +2 -2
  282. package/dist/cli/chunks/{sync-PDPORHVN.js → sync-W6Z4R4PL.js} +2 -2
  283. package/dist/cli/chunks/sync-Y43EWBSY.js +2 -0
  284. package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-5CX3ZYT7.js} +2 -2
  285. package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-DQZGOJNE.js} +3 -3
  286. package/dist/cli/chunks/{test-DMBJFQNL.js → test-TPP53VVV.js} +12 -12
  287. package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-WBV4UMQH.js} +3 -3
  288. package/dist/cli/chunks/token-bootstrap-GIIDXHLC.js +2 -0
  289. package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-AKK37RB7.js} +2 -2
  290. package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-7MASPELS.js} +2 -2
  291. package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-YZKD6UGB.js} +2 -2
  292. package/dist/cli/chunks/{types-K4FLXR2K.js → types-AZ3BTXDP.js} +2 -2
  293. package/dist/cli/chunks/unified-memory-FCX7NLFZ.js +2 -0
  294. package/dist/cli/chunks/unified-memory-hnsw-VU5QJK37.js +2 -0
  295. package/dist/cli/chunks/unified-persistence-FM376LGE.js +2 -0
  296. package/dist/cli/chunks/{upgrade-M3ATDRMK.js → upgrade-L7OTDKEK.js} +2 -2
  297. package/dist/cli/chunks/{validate-AAP773B3.js → validate-O3QVFIGP.js} +2 -2
  298. package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-2UGBGLTX.js} +2 -2
  299. package/dist/cli/chunks/visual-security-EU7Y3X46.js +2 -0
  300. package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-J75IYPRO.js} +2 -2
  301. package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-FQ5DBFCG.js} +2 -2
  302. package/dist/cli/chunks/witness-chain-CSEBT52D.js +2 -0
  303. package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.js → witness-chain-I7TN4MXZ.js} +2 -2
  304. package/dist/cli/chunks/witness-chain-repair-D3NE3NQK.js +2 -0
  305. package/dist/cli/chunks/{witness-chain-verifier-Q2KW3QEQ.js → witness-chain-verifier-RU2WOP5M.js} +2 -2
  306. package/dist/cli/chunks/witness-key-manager-IHQB2FR5.js +2 -0
  307. package/dist/cli/chunks/{workflow-CX6SHFBW.js → workflow-6BWTNVV6.js} +28 -28
  308. package/dist/cli/chunks/workflow-orchestrator-ALNKOM3N.js +2 -0
  309. package/dist/cli/chunks/wrappers-URVP25VU.js +2 -0
  310. package/dist/cli/commands/ci.js +47 -25
  311. package/dist/cli/commands/coverage.d.ts +1 -28
  312. package/dist/cli/commands/coverage.js +63 -134
  313. package/dist/cli/commands/daemon.js +7 -1
  314. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
  315. package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
  316. package/dist/cli/commands/learning.js +47 -7
  317. package/dist/cli/commands/test.js +6 -7
  318. package/dist/cli/commands/workflow.js +9 -5
  319. package/dist/cli/handlers/init-guard.d.ts +13 -0
  320. package/dist/cli/handlers/init-guard.js +23 -0
  321. package/dist/cli/handlers/init-handler.d.ts +3 -0
  322. package/dist/cli/handlers/init-handler.js +9 -0
  323. package/dist/cli/handlers/interfaces.js +5 -1
  324. package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
  325. package/dist/cli/scheduler/persistent-scheduler.js +107 -41
  326. package/dist/cli/utils/ci-output.d.ts +8 -1
  327. package/dist/cli/utils/ci-output.js +13 -2
  328. package/dist/cli/utils/coverage-data.d.ts +3 -0
  329. package/dist/cli/utils/coverage-data.js +14 -39
  330. package/dist/cli/utils/coverage-verdict.d.ts +130 -0
  331. package/dist/cli/utils/coverage-verdict.js +193 -0
  332. package/dist/cli/utils/file-discovery.js +5 -0
  333. package/dist/coordination/deterministic-actions.js +24 -13
  334. package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
  335. package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
  336. package/dist/coordination/handlers/coverage-handlers.js +34 -6
  337. package/dist/coordination/handlers/coverage-runner.d.ts +22 -0
  338. package/dist/coordination/handlers/coverage-runner.js +105 -10
  339. package/dist/coordination/handlers/coverage-target.d.ts +1 -0
  340. package/dist/coordination/handlers/coverage-target.js +4 -1
  341. package/dist/coordination/handlers/handler-types.d.ts +9 -0
  342. package/dist/coordination/handlers/handler-utils.d.ts +14 -1
  343. package/dist/coordination/handlers/handler-utils.js +46 -22
  344. package/dist/coordination/handlers/quality-handlers.js +108 -18
  345. package/dist/coordination/handlers/test-execution-handlers.js +4 -1
  346. package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
  347. package/dist/coordination/protocols/defect-investigation.js +6 -3
  348. package/dist/coordination/protocols/quality-gate.js +10 -6
  349. package/dist/coordination/result-saver.d.ts +22 -0
  350. package/dist/coordination/result-saver.js +113 -43
  351. package/dist/coordination/task-executor.d.ts +7 -0
  352. package/dist/coordination/task-executor.js +32 -3
  353. package/dist/domains/code-intelligence/plugin.js +4 -0
  354. package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
  355. package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
  356. package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
  357. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
  358. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
  359. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
  360. package/dist/domains/coverage-analysis/collected-metrics.d.ts +33 -0
  361. package/dist/domains/coverage-analysis/collected-metrics.js +36 -0
  362. package/dist/domains/coverage-analysis/coordinator.js +18 -6
  363. package/dist/domains/coverage-analysis/interfaces.d.ts +44 -0
  364. package/dist/domains/coverage-analysis/interfaces.js +6 -1
  365. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +61 -34
  366. package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
  367. package/dist/domains/defect-intelligence/plugin.js +4 -0
  368. package/dist/domains/defect-intelligence/services/defect-predictor.js +6 -4
  369. package/dist/domains/learning-optimization/coordinator.js +4 -0
  370. package/dist/domains/learning-optimization/plugin.js +4 -0
  371. package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
  372. package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
  373. package/dist/domains/quality-assessment/coordinator.js +10 -6
  374. package/dist/domains/quality-assessment/coverage-report-event.d.ts +32 -8
  375. package/dist/domains/quality-assessment/coverage-report-event.js +28 -6
  376. package/dist/domains/quality-assessment/index.d.ts +1 -1
  377. package/dist/domains/quality-assessment/interfaces.d.ts +46 -0
  378. package/dist/domains/quality-assessment/quality-evidence.d.ts +48 -2
  379. package/dist/domains/quality-assessment/quality-evidence.js +62 -0
  380. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
  381. package/dist/domains/quality-assessment/services/quality-analyzer.js +192 -109
  382. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
  383. package/dist/domains/test-execution/interfaces.d.ts +10 -6
  384. package/dist/domains/test-execution/plugin.js +4 -0
  385. package/dist/domains/test-execution/services/test-executor.js +152 -102
  386. package/dist/domains/test-generation/coordinator.js +4 -0
  387. package/dist/domains/test-generation/plugin.js +4 -0
  388. package/dist/feedback/coverage-learner.js +4 -1
  389. package/dist/feedback/coverage-session-provenance.d.ts +29 -0
  390. package/dist/feedback/coverage-session-provenance.js +39 -0
  391. package/dist/init/orchestrator.js +2 -0
  392. package/dist/init/phases/09-assets.d.ts +4 -0
  393. package/dist/init/phases/09-assets.js +35 -0
  394. package/dist/init/retired-assets.d.ts +86 -0
  395. package/dist/init/retired-assets.js +230 -0
  396. package/dist/init/skills-installer.d.ts +2 -0
  397. package/dist/init/skills-installer.js +4 -0
  398. package/dist/init/types.d.ts +3 -0
  399. package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
  400. package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
  401. package/dist/integrations/ruvector/server-client.js +4 -12
  402. package/dist/kernel/project-root.d.ts +17 -0
  403. package/dist/kernel/project-root.js +54 -2
  404. package/dist/kernel/shared-dirs.d.ts +66 -0
  405. package/dist/kernel/shared-dirs.js +168 -0
  406. package/dist/learning/daily-log.js +2 -1
  407. package/dist/learning/experience-capture-middleware.d.ts +22 -0
  408. package/dist/learning/experience-capture-middleware.js +35 -0
  409. package/dist/learning/learnable-result.d.ts +16 -0
  410. package/dist/learning/learnable-result.js +24 -0
  411. package/dist/learning/pattern-mutation-error.d.ts +8 -0
  412. package/dist/learning/pattern-mutation-error.js +12 -0
  413. package/dist/learning/qe-reasoning-bank.d.ts +10 -0
  414. package/dist/learning/qe-reasoning-bank.js +50 -1
  415. package/dist/learning/rvf-reconcile.d.ts +39 -0
  416. package/dist/learning/rvf-reconcile.js +40 -0
  417. package/dist/learning/sqlite-persistence.d.ts +14 -0
  418. package/dist/learning/sqlite-persistence.js +36 -0
  419. package/dist/mcp/bundle.js +516 -504
  420. package/dist/mcp/handlers/domain-handler-configs.d.ts +31 -1
  421. package/dist/mcp/handlers/domain-handler-configs.js +37 -3
  422. package/dist/mcp/handlers/handler-factory.js +40 -14
  423. package/dist/mcp/protocol-server.js +27 -2
  424. package/dist/mcp/tool-cache-scope.d.ts +31 -0
  425. package/dist/mcp/tool-cache-scope.js +71 -0
  426. package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
  427. package/dist/mcp/types.d.ts +4 -0
  428. package/dist/optimization/session-cache.d.ts +19 -1
  429. package/dist/optimization/session-cache.js +36 -2
  430. package/dist/plugins/cache.js +2 -1
  431. package/dist/plugins/sources/github.js +2 -1
  432. package/dist/plugins/sources/npm.js +2 -1
  433. package/dist/shared/aqe-managed-dirs.d.ts +24 -0
  434. package/dist/shared/aqe-managed-dirs.js +56 -0
  435. package/dist/shared/events/domain-events.d.ts +18 -3
  436. package/dist/shared/events/domain-events.js +4 -0
  437. package/dist/shared/http/http-client.d.ts +6 -0
  438. package/dist/shared/http/http-client.js +13 -15
  439. package/dist/shared/io/file-reader.d.ts +26 -0
  440. package/dist/shared/io/file-reader.js +111 -17
  441. package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
  442. package/dist/shared/llm/providers/response-deadline.js +17 -5
  443. package/dist/shared/metrics/code-metrics.d.ts +24 -0
  444. package/dist/shared/metrics/code-metrics.js +93 -6
  445. package/dist/shared/metrics/index.d.ts +1 -1
  446. package/dist/workers/interfaces.d.ts +9 -1
  447. package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
  448. package/dist/workers/quality-daemon/coverage-delta.js +13 -6
  449. package/dist/workers/quality-daemon/index.js +6 -5
  450. package/dist/workers/quality-daemon/notification-service.js +3 -3
  451. package/dist/workers/quality-daemon/persistent-memory.d.ts +2 -2
  452. package/dist/workers/quality-daemon/persistent-memory.js +2 -2
  453. package/dist/workers/worker-manager.js +5 -1
  454. package/dist/workers/workers/coverage-tracker.js +69 -33
  455. package/dist/workers/workers/regression-monitor.d.ts +18 -1
  456. package/dist/workers/workers/regression-monitor.js +276 -117
  457. package/package.json +1 -1
  458. package/dist/cli/chunks/adapter-EGIPTX5H.js +0 -2
  459. package/dist/cli/chunks/aqe-learning-engine-WP4GCBDT.js +0 -2
  460. package/dist/cli/chunks/base-6ORFD62I.js +0 -2
  461. package/dist/cli/chunks/browser-workflow-PIXGERWP.js +0 -2
  462. package/dist/cli/chunks/chunk-2WFTZSRT.js +0 -2
  463. package/dist/cli/chunks/chunk-7YB2KELI.js +0 -5
  464. package/dist/cli/chunks/chunk-BBL6YXD3.js +0 -2
  465. package/dist/cli/chunks/chunk-BJ5P4IV2.js +0 -2
  466. package/dist/cli/chunks/chunk-DFPL5N3Q.js +0 -16
  467. package/dist/cli/chunks/chunk-DLY4YEN3.js +0 -2
  468. package/dist/cli/chunks/chunk-ERGWWI4Y.js +0 -3
  469. package/dist/cli/chunks/chunk-KZVJW2SD.js +0 -2
  470. package/dist/cli/chunks/chunk-L336HFFE.js +0 -2
  471. package/dist/cli/chunks/chunk-N2TJNIHA.js +0 -2
  472. package/dist/cli/chunks/chunk-RCXMUEZN.js +0 -3
  473. package/dist/cli/chunks/chunk-SEZLYRCS.js +0 -2
  474. package/dist/cli/chunks/chunk-TDLKXLJC.js +0 -4
  475. package/dist/cli/chunks/chunk-WOZIXXY5.js +0 -7
  476. package/dist/cli/chunks/ci-KP4GZKJ7.js +0 -81
  477. package/dist/cli/chunks/client-C3KHVRM6.js +0 -2
  478. package/dist/cli/chunks/core-handlers-KSQM6Q6S.js +0 -2
  479. package/dist/cli/chunks/coverage-SPFVHRRU.js +0 -43
  480. package/dist/cli/chunks/coverage-target-GSRBNHXE.js +0 -2
  481. package/dist/cli/chunks/cross-domain-router-CTGNOVCF.js +0 -2
  482. package/dist/cli/chunks/daemon-M5TD5Y6T.js +0 -10
  483. package/dist/cli/chunks/dream-MIK2E4UL.js +0 -2
  484. package/dist/cli/chunks/embed-and-insert-pattern-QST77T2B.js +0 -3
  485. package/dist/cli/chunks/experience-capture-middleware-X66IYSRV.js +0 -40
  486. package/dist/cli/chunks/file-discovery-3NHRUQQB.js +0 -2
  487. package/dist/cli/chunks/heartbeat-scheduler-OCKRACUW.js +0 -2
  488. package/dist/cli/chunks/hnsw-adapter-X67XG73C.js +0 -2
  489. package/dist/cli/chunks/hnsw-index-I7KCQBQR.js +0 -2
  490. package/dist/cli/chunks/hybrid-backend-FOUHTKAK.js +0 -2
  491. package/dist/cli/chunks/impact-analyzer-GXYVX46O.js +0 -2
  492. package/dist/cli/chunks/init-handler-2AXMXHYF.js +0 -86
  493. package/dist/cli/chunks/init-wizard-C2MRX2QG.js +0 -2
  494. package/dist/cli/chunks/kernel-Q2IUDIDC.js +0 -2
  495. package/dist/cli/chunks/knowledge-graph-E2Z6K5EE.js +0 -2
  496. package/dist/cli/chunks/learning-BEA26RNA.js +0 -122
  497. package/dist/cli/chunks/llm-router-service-YATYFEDD.js +0 -2
  498. package/dist/cli/chunks/load-test-LV77JXWA.js +0 -2
  499. package/dist/cli/chunks/memory-backend-XME3X3QX.js +0 -2
  500. package/dist/cli/chunks/memory-handlers-VG47X5DX.js +0 -2
  501. package/dist/cli/chunks/orchestrator-VHUXUYIM.js +0 -452
  502. package/dist/cli/chunks/pattern-null-store-TAXMLENP.js +0 -2
  503. package/dist/cli/chunks/plugin-2VAYWAO3.js +0 -27
  504. package/dist/cli/chunks/project-root-CFFPBGPX.js +0 -2
  505. package/dist/cli/chunks/protocol-executor-ML76QAVQ.js +0 -2
  506. package/dist/cli/chunks/qe-reasoning-bank-LUZH6RYV.js +0 -2
  507. package/dist/cli/chunks/queen-coordinator-EWXNIXB6.js +0 -2
  508. package/dist/cli/chunks/real-embeddings-GZV4VKK4.js +0 -2
  509. package/dist/cli/chunks/router-MXOBVEBF.js +0 -2
  510. package/dist/cli/chunks/routing-feedback-T6CCRUEK.js +0 -2
  511. package/dist/cli/chunks/rvf-dual-writer-WHXVT3V3.js +0 -2
  512. package/dist/cli/chunks/rvf-migration-adapter-JFPWIRCG.js +0 -2
  513. package/dist/cli/chunks/rvf-migration-coordinator-D4KUBNRZ.js +0 -2
  514. package/dist/cli/chunks/rvf-native-adapter-KOXR7TJL.js +0 -2
  515. package/dist/cli/chunks/safe-db-CI6IPSIN.js +0 -2
  516. package/dist/cli/chunks/schedule-X4HW6TVJ.js +0 -2
  517. package/dist/cli/chunks/scheduler-KCNJ2ON3.js +0 -2
  518. package/dist/cli/chunks/shared-rvf-adapter-KEQ5CLNI.js +0 -2
  519. package/dist/cli/chunks/sqlite-persistence-PGHU6VUR.js +0 -2
  520. package/dist/cli/chunks/sync-EFWXMA2H.js +0 -2
  521. package/dist/cli/chunks/token-bootstrap-S346YBVO.js +0 -2
  522. package/dist/cli/chunks/unified-memory-6CK3TUNQ.js +0 -2
  523. package/dist/cli/chunks/unified-memory-hnsw-A7BWBGYN.js +0 -2
  524. package/dist/cli/chunks/unified-persistence-GEPMDBQZ.js +0 -2
  525. package/dist/cli/chunks/visual-security-L4J7LQWT.js +0 -2
  526. package/dist/cli/chunks/witness-chain-CDUMX623.js +0 -2
  527. package/dist/cli/chunks/witness-chain-repair-WNYH6O4L.js +0 -2
  528. package/dist/cli/chunks/witness-key-manager-NQ5DAAC4.js +0 -2
  529. package/dist/cli/chunks/workflow-orchestrator-USJDWVDR.js +0 -2
  530. package/dist/cli/chunks/wrappers-CZDI6Z3X.js +0 -2
  531. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  532. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  533. /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
  534. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  535. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  536. /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
@@ -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);
@@ -244,8 +244,10 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
244
244
  }
245
245
  // Success path
246
246
  this.completeWorkflow(workflowId);
247
- // Three-loop protocol: instantAdapt must precede recordOutcome
248
- 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)) {
249
251
  const m = effectiveRequest.metrics;
250
252
  this.qesona.instantAdapt([
251
253
  m.coverage / 100,
@@ -384,8 +386,10 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
384
386
  result.value = enhanced;
385
387
  }
386
388
  }
389
+ // #1002: an insufficient-evidence run has no verdict to learn from.
390
+ const learnable = !RLIntegration.isInsufficientQualityReport(result.value);
387
391
  // Three-loop protocol: instantAdapt must precede recordOutcome
388
- if (isSONAThreeLoopEnabled() && this.qesona?.isThreeLoopEnabled()) {
392
+ if (learnable && isSONAThreeLoopEnabled() && this.qesona?.isThreeLoopEnabled()) {
389
393
  const score = result.value.score;
390
394
  this.qesona.instantAdapt([
391
395
  score.overall / 100,
@@ -405,12 +409,12 @@ export class QualityAssessmentCoordinator extends BaseDomainCoordinator {
405
409
  }
406
410
  catch { /* must not break main flow */ }
407
411
  }
408
- // Store quality pattern in SONA
412
+ // Store quality pattern in SONA (skipped inside for insufficient evidence)
409
413
  if (this.config.enableSONAPatternLearning && this.qesona) {
410
414
  await this.storeQualityAnalysisPattern(request, result.value);
411
415
  }
412
- // Auto-trigger gate evaluation if enabled
413
- 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) {
414
418
  // Store for downstream consumption
415
419
  await this.memory.set(`quality-assessment:auto-gate:${workflowId}`, { score: result.value.score, recommendations: result.value.recommendations }, { namespace: 'quality-assessment', ttl: 3600 });
416
420
  }
@@ -1,25 +1,49 @@
1
1
  /**
2
- * Validation of `coverage-analysis.CoverageReportCreated` payloads before the
3
- * quality-assessment domain stores them as `coverage:latest` (#1008).
2
+ * Validation of measured coverage records (#1008, #1014, #1015).
4
3
  *
5
- * Only a report its producer explicitly marked `measured: true`, carrying
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
6
10
  * finite coverage figures, is coverage evidence. Anything else — a static
7
- * estimate, a legacy event without provenance, or a look-alike event with no
8
- * coverage figures at all — is ignored rather than written as zeros.
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.
9
14
  */
10
15
  /** The `coverage:latest` record written from a measured coverage report. */
11
16
  export interface MeasuredCoverageSummary {
12
17
  line: number;
13
- branch: number;
14
- function: number;
15
- statement: 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;
16
24
  files: number;
17
25
  /** Provenance stamp: this record came from instrumented coverage. */
18
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;
19
37
  }
20
38
  /**
21
39
  * Return the measured summary to store, or `null` when the payload is not
22
40
  * measured coverage evidence.
23
41
  */
24
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;
25
49
  //# sourceMappingURL=coverage-report-event.d.ts.map
@@ -1,13 +1,20 @@
1
1
  /**
2
- * Validation of `coverage-analysis.CoverageReportCreated` payloads before the
3
- * quality-assessment domain stores them as `coverage:latest` (#1008).
2
+ * Validation of measured coverage records (#1008, #1014, #1015).
4
3
  *
5
- * Only a report its producer explicitly marked `measured: true`, carrying
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
6
10
  * finite coverage figures, is coverage evidence. Anything else — a static
7
- * estimate, a legacy event without provenance, or a look-alike event with no
8
- * coverage figures at all — is ignored rather than written as zeros.
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.
9
14
  */
10
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);
11
18
  /**
12
19
  * Return the measured summary to store, or `null` when the payload is not
13
20
  * measured coverage evidence.
@@ -18,7 +25,7 @@ export function measuredCoverageSummary(payload) {
18
25
  const p = payload;
19
26
  if (p.measured !== true)
20
27
  return null;
21
- if (!isPercent(p.line) || !isPercent(p.branch) || !isPercent(p.function) || !isPercent(p.statement)) {
28
+ if (!isPercent(p.line) || !isPercentOrNull(p.statement) || !isPercentOrNull(p.branch) || !isPercentOrNull(p.function)) {
22
29
  return null;
23
30
  }
24
31
  const files = typeof p.files === 'number' && Number.isInteger(p.files) && p.files >= 0 ? p.files : null;
@@ -31,6 +38,21 @@ export function measuredCoverageSummary(payload) {
31
38
  statement: p.statement,
32
39
  files,
33
40
  measured: true,
41
+ ...(p.runStatus === 'passed' || p.runStatus === 'failed' ? { runStatus: p.runStatus } : {}),
34
42
  };
35
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
+ }
36
58
  //# sourceMappingURL=coverage-report-event.js.map
@@ -12,5 +12,5 @@ export { DeploymentAdvisorService, type IDeploymentAdvisorService, type Deployme
12
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
@@ -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;
@@ -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,9 +39,31 @@ 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>;
32
68
  /** #996: the single status word for "a verdict cannot be reached on this evidence". */
33
69
  export declare const INSUFFICIENT_EVIDENCE: "insufficient-evidence";
@@ -69,6 +105,16 @@ export declare function inspectQualityEvidence(memory: MemoryBackend, options?:
69
105
  values: Partial<QualityEvidenceValues>;
70
106
  problems: UnusableQualityEvidence[];
71
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>;
72
118
  export declare function loadQualityEvidence(memory: MemoryBackend, options?: {
73
119
  now?: number;
74
120
  maxAgeMs?: number;
@@ -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,6 +80,34 @@ export async function writeQualityEvidence(memory, values, metadata) {
78
80
  });
79
81
  }
80
82
  }
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
+ }
81
111
  /** #996: the single status word for "a verdict cannot be reached on this evidence". */
82
112
  export const INSUFFICIENT_EVIDENCE = 'insufficient-evidence';
83
113
  /** #996: what to run to measure a metric that has no usable evidence. */
@@ -141,6 +171,7 @@ export async function inspectQualityEvidence(memory, options = {}) {
141
171
  const maxAgeMs = options.maxAgeMs ?? DEFAULT_QUALITY_EVIDENCE_MAX_AGE_MS;
142
172
  const values = {};
143
173
  const problems = [];
174
+ const valid = {};
144
175
  for (const metric of QUALITY_METRICS) {
145
176
  const record = await memory.get(evidenceKey(metric), {
146
177
  namespace: QUALITY_EVIDENCE_NAMESPACE,
@@ -148,13 +179,44 @@ export async function inspectQualityEvidence(memory, options = {}) {
148
179
  try {
149
180
  validateRecord(record, metric, now, maxAgeMs);
150
181
  values[metric] = record.value;
182
+ valid[metric] = record;
151
183
  }
152
184
  catch (error) {
153
185
  problems.push({ metric, reason: error instanceof Error ? error.message : String(error) });
154
186
  }
155
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
+ });
199
+ }
156
200
  return { values, problems };
157
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
+ }
158
220
  export async function loadQualityEvidence(memory, options = {}) {
159
221
  const { values, problems } = await inspectQualityEvidence(memory, options);
160
222
  if (problems.length > 0)
@@ -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;