agentic-qe 3.15.5 → 3.15.7

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 (584) 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 +262 -0
  6. package/README.md +2 -0
  7. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  8. package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
  9. package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
  10. package/assets/skills/skills-manifest.json +1 -1
  11. package/dist/cli/bundle.js +8 -6
  12. package/dist/cli/chunks/adapter-PEOUNYXJ.js +2 -0
  13. package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-OS5G7KMQ.js} +2 -2
  14. package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-PI4I7PME.js} +2 -2
  15. package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-J7TXHX4U.js} +2 -2
  16. package/dist/cli/chunks/aqe-learning-engine-DHKZI5RX.js +2 -0
  17. package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-FXESDCFR.js} +4 -4
  18. package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-OWUGXKNT.js} +2 -2
  19. package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-EPAWLYIZ.js} +3 -3
  20. package/dist/cli/chunks/base-QZWK3D5P.js +2 -0
  21. package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-IYVR5EQY.js} +2 -2
  22. package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-3W2E6TC6.js} +3 -3
  23. package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-HU7VACJ4.js} +2 -2
  24. package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-72XOR6E2.js} +2 -2
  25. package/dist/cli/chunks/browser-workflow-ITPX72RX.js +2 -0
  26. package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-2423JAA5.js} +1 -1
  27. package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-24CENUT4.js} +3 -3
  28. package/dist/cli/chunks/chunk-2AYBYXOA.js +4 -0
  29. package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-2E3XWKEU.js} +2 -2
  30. package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-2RJYA6WK.js} +2 -2
  31. package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2YVJ5OUL.js} +5 -5
  32. package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34JLY3U6.js} +2 -2
  33. package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-3JD2USUH.js} +2 -2
  34. package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-3RM46XFP.js} +1 -1
  35. package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-44DPYNPE.js} +1 -1
  36. package/dist/cli/chunks/{chunk-AUZXRFOX.js → chunk-4DIZ5BT6.js} +2 -2
  37. package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-4G2VNW4C.js} +2 -2
  38. package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-56ZKQYZY.js} +3 -3
  39. package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-5KCBX225.js} +2 -2
  40. package/dist/cli/chunks/chunk-5KS7HA37.js +2 -0
  41. package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-5PBRBS7D.js} +2 -2
  42. package/dist/cli/chunks/chunk-5Q22XPTH.js +2 -0
  43. package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-634D2ENF.js} +2 -2
  44. package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-6AYRAOCA.js} +2 -2
  45. package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-6BO3WCK7.js} +2 -2
  46. package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-6FEQ73BF.js} +2 -2
  47. package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-6JT73S5B.js} +1 -1
  48. package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6OS7HREG.js} +1 -1
  49. package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6PKCQXEW.js} +2 -2
  50. package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-7EX4DEQR.js} +2 -2
  51. package/dist/cli/chunks/chunk-7UCVYYWL.js +3 -0
  52. package/dist/cli/chunks/chunk-AAA4SHEG.js +2 -0
  53. package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-AXO7OOOA.js} +2 -2
  54. package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-B7M323VL.js} +2 -2
  55. package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-BB7OLQKO.js} +1 -1
  56. package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-BTIBXGVQ.js} +4 -4
  57. package/dist/cli/chunks/chunk-BTYKGVJ5.js +2 -0
  58. package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-C2CUPJGR.js} +1 -1
  59. package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-C2MDBBFF.js} +3 -3
  60. package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-CG5DZCOZ.js} +1 -1
  61. package/dist/cli/chunks/chunk-CIFWOMNX.js +2 -0
  62. package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-CWPRU7ZI.js} +2 -2
  63. package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-CXTJ47QS.js} +2 -2
  64. package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-DCJW2DPL.js} +4 -4
  65. package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-DGK6GQMO.js} +2 -2
  66. package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-DVPGBDBP.js} +3 -3
  67. package/dist/cli/chunks/chunk-EB2PP6X2.js +2 -0
  68. package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-ECSLJJOQ.js} +1 -1
  69. package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-ED32XJ5R.js} +2 -2
  70. package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-EDU72RTW.js} +1 -1
  71. package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-EL75G2A3.js} +1 -1
  72. package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-EV2BYY6T.js} +1 -1
  73. package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-F62EKVVC.js} +2 -2
  74. package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-FTTFJ7SJ.js} +1 -1
  75. package/dist/cli/chunks/chunk-FVBFASOD.js +2 -0
  76. package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-G762PEFO.js} +26 -26
  77. package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-G7YTZTGU.js} +1 -1
  78. package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-GY2SAIXP.js} +2 -2
  79. package/dist/cli/chunks/chunk-H4WHDFB5.js +4 -0
  80. package/dist/cli/chunks/chunk-HLZATDD2.js +2 -0
  81. package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-HPG7354V.js} +2 -2
  82. package/dist/cli/chunks/{chunk-HLFDC4SF.js → chunk-HSDOOFV7.js} +1 -1
  83. package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-HTWIGQL4.js} +2 -2
  84. package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-HXBAQKMH.js} +2 -2
  85. package/dist/cli/chunks/chunk-HZFT3P5B.js +2 -0
  86. package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-I7H4IP7T.js} +2 -2
  87. package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-IARSGAG7.js} +2 -2
  88. package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-IC2WSSD5.js} +8 -8
  89. package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-ICPALF4Q.js} +2 -2
  90. package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-IWQQIXHO.js} +2 -2
  91. package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-IYQ7XNE5.js} +2 -2
  92. package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-J26GADQE.js} +418 -412
  93. package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-J43DV3ME.js} +1 -1
  94. package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-JFPXCQNP.js} +1 -1
  95. package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-JK6B3ULP.js} +2 -2
  96. package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-JPHDMHFG.js} +2 -2
  97. package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-JVYPXW6Y.js} +2 -2
  98. package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-JY4AIEZ7.js} +1 -1
  99. package/dist/cli/chunks/{chunk-MNQ36MAF.js → chunk-JY4WLN3K.js} +2 -2
  100. package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-JYXOFN3E.js} +2 -2
  101. package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-K7W55B7Q.js} +3 -3
  102. package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-KPOPBUUJ.js} +2 -2
  103. package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-LDXQRNTT.js} +1 -1
  104. package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-LDZWIV2O.js} +1 -1
  105. package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-LGBN7TKC.js} +2 -2
  106. package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-LMEU64TR.js} +2 -2
  107. package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-LP4AS2E4.js} +1 -1
  108. package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-LQOVA4YX.js} +2 -2
  109. package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-LVEX4GID.js} +2 -2
  110. package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-M63QB466.js} +2 -2
  111. package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-MDC4G323.js} +1 -1
  112. package/dist/cli/chunks/chunk-MHZPC4HJ.js +2 -0
  113. package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-MJJC6HUK.js} +1 -1
  114. package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-MKFQNCXI.js} +2 -2
  115. package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-MMXG3LL6.js} +2 -2
  116. package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-MNCF643K.js} +2 -2
  117. package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-MNZFEIE5.js} +1 -1
  118. package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-MQ6OF6DU.js} +1 -1
  119. package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-MRHM4COP.js} +2 -2
  120. package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-N4PMPSJJ.js} +2 -2
  121. package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-NZQPP533.js} +3 -3
  122. package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-OA4GR3EZ.js} +2 -2
  123. package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-OJEZNLB6.js} +2 -2
  124. package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-ONVALAZN.js} +2 -2
  125. package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-PEKDSJBC.js} +2 -2
  126. package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-PG64YV6C.js} +66 -65
  127. package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-PQV7E7XH.js} +2 -2
  128. package/dist/cli/chunks/chunk-PTK66HEY.js +2 -0
  129. package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-PUECC4WI.js} +2 -2
  130. package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-PXZKPUW6.js} +2 -2
  131. package/dist/cli/chunks/chunk-PYHYOKYT.js +2 -0
  132. package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-PZG3542B.js} +2 -2
  133. package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-Q2T5FXEA.js} +2 -2
  134. package/dist/cli/chunks/chunk-QJE6ZW2X.js +6 -0
  135. package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-QNQSM2OG.js} +2 -2
  136. package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QQT6QENQ.js} +9 -9
  137. package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-QVG4ZDXX.js} +3 -3
  138. package/dist/cli/chunks/chunk-QWLTHFZW.js +16 -0
  139. package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-RCYLCA7E.js} +10 -6
  140. package/dist/cli/chunks/{chunk-BMWAWZAN.js → chunk-REEIFA6A.js} +2 -2
  141. package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-RNYX4CPI.js} +2 -2
  142. package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-RORZ5O5Z.js} +2 -2
  143. package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-RRPYWBFX.js} +2 -2
  144. package/dist/cli/chunks/{chunk-XQRE2HWM.js → chunk-RXAFLK34.js} +2 -2
  145. package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-SQHLC6I5.js} +1 -1
  146. package/dist/cli/chunks/{chunk-DPV33C77.js → chunk-SSP2B2WR.js} +2 -2
  147. package/dist/cli/chunks/chunk-SX2YSHE7.js +115 -0
  148. package/dist/cli/chunks/chunk-T3ZDVU6F.js +5 -0
  149. package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-T6W5APYP.js} +1 -1
  150. package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-TU4LIIOP.js} +2 -2
  151. package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-UBYCR3O4.js} +2 -2
  152. package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-UCLN6AME.js} +1 -1
  153. package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-UIYKR2SA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-UUHIEM2M.js} +18 -18
  155. package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-UY3REQOK.js} +2 -2
  156. package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-V2SAEMZY.js} +1 -1
  157. package/dist/cli/chunks/{chunk-JANLATHN.js → chunk-V5NGBQAQ.js} +2 -2
  158. package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-VCA6YYII.js} +1 -1
  159. package/dist/cli/chunks/chunk-VJRZFWR5.js +2 -0
  160. package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-VKPKYMCT.js} +2 -2
  161. package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-VNW5Q2CX.js} +2 -2
  162. package/dist/cli/chunks/chunk-VUFRTGML.js +3 -0
  163. package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-W4X2VTIY.js} +2 -2
  164. package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-WTLIEBDH.js} +1 -1
  165. package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-WUV5RZUI.js} +2 -2
  166. package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-WXI2STKQ.js} +2 -2
  167. package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-XEWXYGJI.js} +2 -2
  168. package/dist/cli/chunks/{chunk-DPYDUKVZ.js → chunk-XNSQZ3O7.js} +2 -2
  169. package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-XTJMY3KS.js} +1 -1
  170. package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-XXAVQACL.js} +1 -1
  171. package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-Y4SAWE45.js} +1 -1
  172. package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-Y6A46M3B.js} +2 -2
  173. package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-YDZJWDR6.js} +3 -3
  174. package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-YFOBQSOW.js} +2 -2
  175. package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-YK3NOC2R.js} +2 -2
  176. package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-YUC7RJGR.js} +1 -1
  177. package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-Z3VJLWRR.js} +2 -2
  178. package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-ZLVQSEZK.js} +2 -2
  179. package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-ZRLNACPY.js} +2 -2
  180. package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-ZTMZFF25.js} +2 -2
  181. package/dist/cli/chunks/chunk-ZUMDDMDE.js +3 -0
  182. package/dist/cli/chunks/ci-5HEXJZ2C.js +81 -0
  183. package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-WU4NPDAM.js} +2 -2
  184. package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-BJQVXX5E.js} +2 -2
  185. package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-3BMGTQCB.js} +2 -2
  186. package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-GVDGJWMU.js} +2 -2
  187. package/dist/cli/chunks/client-S7GNYTZ5.js +2 -0
  188. package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-V4MRGWVA.js} +2 -2
  189. package/dist/cli/chunks/{code-QSZTDINQ.js → code-A3TGQPEO.js} +3 -3
  190. package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-YJQSYWD3.js} +2 -2
  191. package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-7N7UQPAH.js} +2 -2
  192. package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-PPGVYLZS.js} +2 -2
  193. package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-XZTFLYV5.js} +2 -2
  194. package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-Z5I57RAH.js} +2 -2
  195. package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-F5YZ6BHB.js} +2 -2
  196. package/dist/cli/chunks/core-handlers-CUEPOQIO.js +2 -0
  197. package/dist/cli/chunks/{cost-tracker-RIN4JDDM.js → cost-tracker-GO33ZQAP.js} +2 -2
  198. package/dist/cli/chunks/coverage-GSHKLY74.js +49 -0
  199. package/dist/cli/chunks/cross-domain-router-CXN5QFEV.js +2 -0
  200. package/dist/cli/chunks/{cursor-installer-POM7NGCC.js → cursor-installer-JJ7IVJZB.js} +2 -2
  201. package/dist/cli/chunks/daemon-3DQCKRYO.js +10 -0
  202. package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-IRL7QRNE.js} +5 -5
  203. package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-ORXSUHPA.js} +2 -2
  204. package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-RHU62KRI.js} +2 -2
  205. package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-3VKV4Z6C.js} +2 -2
  206. package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-SFIML4FK.js} +2 -2
  207. package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-CJ4FA3OC.js} +2 -2
  208. package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.js → domain-transfer-BCRKPCAA.js} +2 -2
  209. package/dist/cli/chunks/dream-5AUNJW24.js +2 -0
  210. package/dist/cli/chunks/embed-and-insert-pattern-VL3HFLPV.js +3 -0
  211. package/dist/cli/chunks/{eval-K7E4XXBS.js → eval-GGKRI4P5.js} +2 -2
  212. package/dist/cli/chunks/experience-capture-middleware-F72TIRQY.js +40 -0
  213. package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-7KOOF3MA.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-FNHBTHBH.js} +2 -2
  215. package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-IOZEWWFU.js} +2 -2
  216. package/dist/cli/chunks/file-discovery-AYWF357I.js +2 -0
  217. package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-QX5KXTRC.js} +3 -3
  218. package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-OH2DOQP7.js} +2 -2
  219. package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.js → heartbeat-handler-W67NXTNE.js} +4 -4
  220. package/dist/cli/chunks/heartbeat-scheduler-7ZIDVXIP.js +2 -0
  221. package/dist/cli/chunks/hnsw-adapter-P77OC7FM.js +2 -0
  222. package/dist/cli/chunks/hnsw-index-3LBOTQAW.js +2 -0
  223. package/dist/cli/chunks/{hnsw-legacy-bridge-KRS7SSFM.js → hnsw-legacy-bridge-6MLLOGOE.js} +2 -2
  224. package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-4UDISJ3G.js} +2 -2
  225. package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-NOQJWQ4P.js} +43 -43
  226. package/dist/cli/chunks/hybrid-backend-LOM54PDD.js +2 -0
  227. package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-2OD3APVP.js} +2 -2
  228. package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.js → hypergraph-handler-5AZGMBUM.js} +3 -3
  229. package/dist/cli/chunks/impact-analyzer-QSDJVBPS.js +2 -0
  230. package/dist/cli/chunks/init-guard-SMGJ45PW.js +2 -0
  231. package/dist/cli/chunks/init-handler-5T4MP2NM.js +88 -0
  232. package/dist/cli/chunks/init-wizard-MK2325JJ.js +2 -0
  233. package/dist/cli/chunks/kernel-2NJQQ2KT.js +2 -0
  234. package/dist/cli/chunks/{kilocode-installer-TEPR2ZJD.js → kilocode-installer-RLZYLVQJ.js} +2 -2
  235. package/dist/cli/chunks/{kiro-installer-RUKHGDEE.js → kiro-installer-LFZOC7VD.js} +2 -2
  236. package/dist/cli/chunks/knowledge-graph-SDISHO62.js +2 -0
  237. package/dist/cli/chunks/learning-XRPGLUWR.js +122 -0
  238. package/dist/cli/chunks/{llm-router-7GECMDCP.js → llm-router-OMK5HYPH.js} +4 -4
  239. package/dist/cli/chunks/llm-router-service-YTCMRBAN.js +2 -0
  240. package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XADC7KCU.js} +2 -2
  241. package/dist/cli/chunks/load-test-RPKHLBCC.js +2 -0
  242. package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-PIBKSSVU.js} +2 -2
  243. package/dist/cli/chunks/{memory-HYC4M4XS.js → memory-AP7EZERS.js} +5 -5
  244. package/dist/cli/chunks/memory-backend-BZXFO4JZ.js +2 -0
  245. package/dist/cli/chunks/memory-handlers-MOFDNB6E.js +2 -0
  246. package/dist/cli/chunks/{multi-model-executor-T7FYKM6T.js → multi-model-executor-7JJ2FZ33.js} +2 -2
  247. package/dist/cli/chunks/{opencode-installer-3USXVT5M.js → opencode-installer-ZZZ6EBYJ.js} +2 -2
  248. package/dist/cli/chunks/orchestrator-2H2YKSGJ.js +452 -0
  249. package/dist/cli/chunks/pattern-null-store-4PRPIOR6.js +2 -0
  250. package/dist/cli/chunks/{pattern-usage-recorder-CMZLPX2K.js → pattern-usage-recorder-7MJJWC2Z.js} +2 -2
  251. package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-LIE5BWQY.js} +2 -2
  252. package/dist/cli/chunks/{platform-2MCRKC25.js → platform-SMYUNLGX.js} +2 -2
  253. package/dist/cli/chunks/plugin-LJDIXQNT.js +27 -0
  254. package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.js → prime-radiant-advanced-wasm-RIDNE5D2.js} +2 -2
  255. package/dist/cli/chunks/project-root-NBIQF63D.js +2 -0
  256. package/dist/cli/chunks/protocol-executor-BRPGIYWQ.js +2 -0
  257. package/dist/cli/chunks/{protocol-handler-DZ26OYVZ.js → protocol-handler-YVM66DLI.js} +2 -2
  258. package/dist/cli/chunks/{prove-QWONEJWX.js → prove-ZBDT52GD.js} +2 -2
  259. package/dist/cli/chunks/qe-reasoning-bank-GDZACWKW.js +2 -0
  260. package/dist/cli/chunks/{quality-WFH54FY7.js → quality-DUKXGDDO.js} +2 -2
  261. package/dist/cli/chunks/{quality-gate-ONJB7XU7.js → quality-gate-SM3RXF4V.js} +3 -3
  262. package/dist/cli/chunks/queen-coordinator-LDKLBPD5.js +2 -0
  263. package/dist/cli/chunks/real-embeddings-4QLQZDB5.js +2 -0
  264. package/dist/cli/chunks/{ref-validation-HW5Y55ZC.js → ref-validation-M3EO32YQ.js} +2 -2
  265. package/dist/cli/chunks/{roocode-installer-5OABDNZT.js → roocode-installer-S6Q5OLV5.js} +2 -2
  266. package/dist/cli/chunks/router-H5YSIRH2.js +2 -0
  267. package/dist/cli/chunks/routing-feedback-5R36TJDH.js +2 -0
  268. package/dist/cli/chunks/{routing-handler-CVHVOQTC.js → routing-handler-55FMUACP.js} +2 -2
  269. package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.js → ruvector-commands-QATKAAPK.js} +2 -2
  270. package/dist/cli/chunks/rvf-dual-writer-TT2DBQQQ.js +2 -0
  271. package/dist/cli/chunks/rvf-migration-adapter-BCLFJKSK.js +2 -0
  272. package/dist/cli/chunks/rvf-migration-coordinator-RFXFU6JD.js +2 -0
  273. package/dist/cli/chunks/rvf-native-adapter-UXI66OQJ.js +2 -0
  274. package/dist/cli/chunks/{rvf-store-integrity-UGUXKIFX.js → rvf-store-integrity-PKDVXQAW.js} +2 -2
  275. package/dist/cli/chunks/safe-db-MSTD2GDH.js +2 -0
  276. package/dist/cli/chunks/schedule-KST6KIFD.js +2 -0
  277. package/dist/cli/chunks/scheduler-FTQS6YK3.js +2 -0
  278. package/dist/cli/chunks/security-CMRB6WA3.js +18 -0
  279. package/dist/cli/chunks/shared-rvf-adapter-YHLLNFHF.js +2 -0
  280. package/dist/cli/chunks/{shared-rvf-dual-writer-ZSHYG5IA.js → shared-rvf-dual-writer-4BGDVPQ7.js} +2 -2
  281. package/dist/cli/chunks/sqlite-persistence-ZX5QFDMR.js +2 -0
  282. package/dist/cli/chunks/{standalone-memory-MHZEEYMK.js → standalone-memory-LUHKQAGM.js} +2 -2
  283. package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-S6S5PNR7.js} +2 -2
  284. package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-PQ7NZAJ4.js} +2 -2
  285. package/dist/cli/chunks/{sync-PDPORHVN.js → sync-Q6KRQXU6.js} +2 -2
  286. package/dist/cli/chunks/sync-S744AEJC.js +2 -0
  287. package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-GAMGEHUW.js} +2 -2
  288. package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-6CRDEELN.js} +3 -3
  289. package/dist/cli/chunks/{test-DMBJFQNL.js → test-FNH67DBK.js} +12 -12
  290. package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-NZA5SHK6.js} +3 -3
  291. package/dist/cli/chunks/token-bootstrap-CXKG55JD.js +2 -0
  292. package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-M7WWEDJX.js} +2 -2
  293. package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-2IFMCK6A.js} +2 -2
  294. package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-NMNA6RJC.js} +2 -2
  295. package/dist/cli/chunks/{types-K4FLXR2K.js → types-N7FWTOLD.js} +2 -2
  296. package/dist/cli/chunks/unified-memory-2Z2F446J.js +2 -0
  297. package/dist/cli/chunks/unified-memory-hnsw-A4EWYPJQ.js +2 -0
  298. package/dist/cli/chunks/unified-persistence-Z6N6JZFA.js +2 -0
  299. package/dist/cli/chunks/{upgrade-M3ATDRMK.js → upgrade-KDB5RGL7.js} +2 -2
  300. package/dist/cli/chunks/{validate-AAP773B3.js → validate-KMUV5FUA.js} +2 -2
  301. package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-ANZWRCJU.js} +2 -2
  302. package/dist/cli/chunks/visual-security-GXYZV7KR.js +2 -0
  303. package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-SXXC4NMS.js} +2 -2
  304. package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-2LWSKMBU.js} +2 -2
  305. package/dist/cli/chunks/witness-chain-52PEIEGK.js +2 -0
  306. package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.js → witness-chain-JJMSJFZP.js} +2 -2
  307. package/dist/cli/chunks/witness-chain-repair-OX7VFW6T.js +2 -0
  308. package/dist/cli/chunks/{witness-chain-verifier-Q2KW3QEQ.js → witness-chain-verifier-QLSMXHAZ.js} +2 -2
  309. package/dist/cli/chunks/witness-key-manager-3DS4L7LE.js +2 -0
  310. package/dist/cli/chunks/{workflow-CX6SHFBW.js → workflow-ARWAMHD3.js} +28 -28
  311. package/dist/cli/chunks/workflow-orchestrator-DORMQMG7.js +2 -0
  312. package/dist/cli/chunks/wrappers-J6KGTUSJ.js +2 -0
  313. package/dist/cli/commands/ci.js +47 -25
  314. package/dist/cli/commands/coverage.d.ts +1 -28
  315. package/dist/cli/commands/coverage.js +63 -134
  316. package/dist/cli/commands/daemon.js +7 -1
  317. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
  318. package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
  319. package/dist/cli/commands/learning.js +50 -9
  320. package/dist/cli/commands/security.d.ts +16 -0
  321. package/dist/cli/commands/security.js +76 -9
  322. package/dist/cli/commands/test.js +6 -7
  323. package/dist/cli/commands/workflow.js +9 -5
  324. package/dist/cli/handlers/init-guard.d.ts +33 -0
  325. package/dist/cli/handlers/init-guard.js +66 -0
  326. package/dist/cli/handlers/init-handler.d.ts +3 -0
  327. package/dist/cli/handlers/init-handler.js +64 -54
  328. package/dist/cli/handlers/interfaces.js +5 -1
  329. package/dist/cli/index.js +11 -0
  330. package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
  331. package/dist/cli/scheduler/persistent-scheduler.js +107 -41
  332. package/dist/cli/utils/ci-output.d.ts +13 -1
  333. package/dist/cli/utils/ci-output.js +21 -2
  334. package/dist/cli/utils/coverage-data.d.ts +3 -0
  335. package/dist/cli/utils/coverage-data.js +14 -39
  336. package/dist/cli/utils/coverage-verdict.d.ts +130 -0
  337. package/dist/cli/utils/coverage-verdict.js +193 -0
  338. package/dist/cli/utils/file-discovery.js +5 -0
  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 +34 -6
  343. package/dist/coordination/handlers/coverage-runner.d.ts +22 -0
  344. package/dist/coordination/handlers/coverage-runner.js +105 -10
  345. package/dist/coordination/handlers/coverage-target.d.ts +1 -0
  346. package/dist/coordination/handlers/coverage-target.js +4 -1
  347. package/dist/coordination/handlers/handler-types.d.ts +9 -0
  348. package/dist/coordination/handlers/handler-utils.d.ts +14 -1
  349. package/dist/coordination/handlers/handler-utils.js +46 -22
  350. package/dist/coordination/handlers/quality-handlers.js +108 -18
  351. package/dist/coordination/handlers/security-handlers.js +22 -6
  352. package/dist/coordination/handlers/test-execution-handlers.js +4 -1
  353. package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
  354. package/dist/coordination/protocols/defect-investigation.js +12 -3
  355. package/dist/coordination/protocols/quality-gate.js +10 -6
  356. package/dist/coordination/protocols/security-audit.js +11 -0
  357. package/dist/coordination/result-saver.d.ts +31 -0
  358. package/dist/coordination/result-saver.js +146 -46
  359. package/dist/coordination/task-executor.d.ts +7 -0
  360. package/dist/coordination/task-executor.js +32 -3
  361. package/dist/domains/code-intelligence/plugin.js +4 -0
  362. package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
  363. package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
  364. package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
  365. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
  366. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
  367. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
  368. package/dist/domains/coverage-analysis/collected-metrics.d.ts +35 -0
  369. package/dist/domains/coverage-analysis/collected-metrics.js +42 -0
  370. package/dist/domains/coverage-analysis/coordinator.js +18 -6
  371. package/dist/domains/coverage-analysis/interfaces.d.ts +44 -0
  372. package/dist/domains/coverage-analysis/interfaces.js +6 -1
  373. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +61 -34
  374. package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
  375. package/dist/domains/defect-intelligence/plugin.js +4 -0
  376. package/dist/domains/defect-intelligence/services/defect-predictor.js +13 -8
  377. package/dist/domains/learning-optimization/coordinator.js +4 -0
  378. package/dist/domains/learning-optimization/plugin.js +4 -0
  379. package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
  380. package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
  381. package/dist/domains/quality-assessment/coordinator.js +10 -6
  382. package/dist/domains/quality-assessment/coverage-report-event.d.ts +32 -8
  383. package/dist/domains/quality-assessment/coverage-report-event.js +28 -6
  384. package/dist/domains/quality-assessment/index.d.ts +1 -1
  385. package/dist/domains/quality-assessment/interfaces.d.ts +50 -0
  386. package/dist/domains/quality-assessment/quality-evidence.d.ts +49 -3
  387. package/dist/domains/quality-assessment/quality-evidence.js +62 -0
  388. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
  389. package/dist/domains/quality-assessment/services/quality-analyzer.js +197 -112
  390. package/dist/domains/quality-assessment/services/quality-gate.js +12 -3
  391. package/dist/domains/security-compliance/dependency-advisory-engine.d.ts +52 -0
  392. package/dist/domains/security-compliance/dependency-advisory-engine.js +113 -0
  393. package/dist/domains/security-compliance/interfaces.d.ts +30 -0
  394. package/dist/domains/security-compliance/plugin.d.ts +7 -1
  395. package/dist/domains/security-compliance/plugin.js +19 -0
  396. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
  397. package/dist/domains/security-compliance/services/scanners/dependency-resolver.d.ts +71 -0
  398. package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +232 -0
  399. package/dist/domains/security-compliance/services/scanners/dependency-scanner.d.ts +21 -6
  400. package/dist/domains/security-compliance/services/scanners/dependency-scanner.js +142 -64
  401. package/dist/domains/security-compliance/services/scanners/lockfile-versions.d.ts +43 -0
  402. package/dist/domains/security-compliance/services/scanners/lockfile-versions.js +248 -0
  403. package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +30 -2
  404. package/dist/domains/security-compliance/services/security-auditor.d.ts +19 -6
  405. package/dist/domains/security-compliance/services/security-auditor.js +133 -92
  406. package/dist/domains/test-execution/interfaces.d.ts +10 -6
  407. package/dist/domains/test-execution/plugin.js +4 -0
  408. package/dist/domains/test-execution/services/retry-handler.js +17 -6
  409. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  410. package/dist/domains/test-execution/services/test-executor.js +239 -109
  411. package/dist/domains/test-generation/coordinator.js +4 -0
  412. package/dist/domains/test-generation/plugin.js +4 -0
  413. package/dist/feedback/coverage-learner.js +4 -1
  414. package/dist/feedback/coverage-session-provenance.d.ts +29 -0
  415. package/dist/feedback/coverage-session-provenance.js +39 -0
  416. package/dist/init/orchestrator.js +2 -0
  417. package/dist/init/phases/09-assets.d.ts +4 -0
  418. package/dist/init/phases/09-assets.js +35 -0
  419. package/dist/init/retired-assets.d.ts +86 -0
  420. package/dist/init/retired-assets.js +230 -0
  421. package/dist/init/skills-installer.d.ts +2 -0
  422. package/dist/init/skills-installer.js +4 -0
  423. package/dist/init/types.d.ts +3 -0
  424. package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
  425. package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
  426. package/dist/integrations/ruvector/server-client.js +4 -12
  427. package/dist/kernel/project-root.d.ts +17 -0
  428. package/dist/kernel/project-root.js +54 -2
  429. package/dist/kernel/shared-dirs.d.ts +66 -0
  430. package/dist/kernel/shared-dirs.js +180 -0
  431. package/dist/learning/daily-log.js +2 -1
  432. package/dist/learning/experience-capture-middleware.d.ts +22 -0
  433. package/dist/learning/experience-capture-middleware.js +35 -0
  434. package/dist/learning/learnable-result.d.ts +16 -0
  435. package/dist/learning/learnable-result.js +24 -0
  436. package/dist/learning/pattern-mutation-error.d.ts +8 -0
  437. package/dist/learning/pattern-mutation-error.js +12 -0
  438. package/dist/learning/qe-reasoning-bank.d.ts +10 -0
  439. package/dist/learning/qe-reasoning-bank.js +50 -1
  440. package/dist/learning/rvf-reconcile.d.ts +39 -0
  441. package/dist/learning/rvf-reconcile.js +40 -0
  442. package/dist/learning/sqlite-persistence.d.ts +14 -0
  443. package/dist/learning/sqlite-persistence.js +36 -0
  444. package/dist/mcp/bundle.js +908 -896
  445. package/dist/mcp/handlers/domain-handler-configs.d.ts +35 -1
  446. package/dist/mcp/handlers/domain-handler-configs.js +42 -4
  447. package/dist/mcp/handlers/handler-factory.js +40 -14
  448. package/dist/mcp/protocol-server.js +29 -3
  449. package/dist/mcp/tool-cache-scope.d.ts +31 -0
  450. package/dist/mcp/tool-cache-scope.js +71 -0
  451. package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
  452. package/dist/mcp/types.d.ts +10 -0
  453. package/dist/optimization/session-cache.d.ts +19 -1
  454. package/dist/optimization/session-cache.js +36 -2
  455. package/dist/plugins/cache.js +2 -1
  456. package/dist/plugins/sources/github.js +2 -1
  457. package/dist/plugins/sources/npm.js +2 -1
  458. package/dist/shared/aqe-managed-dirs.d.ts +24 -0
  459. package/dist/shared/aqe-managed-dirs.js +56 -0
  460. package/dist/shared/events/domain-events.d.ts +18 -3
  461. package/dist/shared/events/domain-events.js +4 -0
  462. package/dist/shared/http/http-client.d.ts +6 -0
  463. package/dist/shared/http/http-client.js +13 -15
  464. package/dist/shared/io/file-reader.d.ts +26 -0
  465. package/dist/shared/io/file-reader.js +111 -17
  466. package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
  467. package/dist/shared/llm/providers/response-deadline.js +17 -5
  468. package/dist/shared/metrics/code-metrics.d.ts +24 -0
  469. package/dist/shared/metrics/code-metrics.js +93 -6
  470. package/dist/shared/metrics/index.d.ts +1 -1
  471. package/dist/shared/security/index.d.ts +2 -2
  472. package/dist/shared/security/index.js +1 -1
  473. package/dist/shared/security/osv-client.d.ts +79 -132
  474. package/dist/shared/security/osv-client.js +344 -167
  475. package/dist/shared/security/osv-lookup.d.ts +124 -0
  476. package/dist/shared/security/osv-lookup.js +246 -0
  477. package/dist/shared/security/osv-types.d.ts +119 -0
  478. package/dist/shared/security/osv-types.js +6 -0
  479. package/dist/workers/interfaces.d.ts +15 -2
  480. package/dist/workers/namespaced-keys.d.ts +16 -0
  481. package/dist/workers/namespaced-keys.js +24 -0
  482. package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
  483. package/dist/workers/quality-daemon/coverage-delta.js +13 -6
  484. package/dist/workers/quality-daemon/index.js +6 -5
  485. package/dist/workers/quality-daemon/notification-service.js +3 -3
  486. package/dist/workers/quality-daemon/persistent-memory.d.ts +3 -3
  487. package/dist/workers/quality-daemon/persistent-memory.js +4 -4
  488. package/dist/workers/worker-manager.js +10 -3
  489. package/dist/workers/workers/coverage-tracker.js +69 -33
  490. package/dist/workers/workers/defect-predictor.d.ts +25 -8
  491. package/dist/workers/workers/defect-predictor.js +223 -216
  492. package/dist/workers/workers/performance-baseline.d.ts +24 -9
  493. package/dist/workers/workers/performance-baseline.js +187 -230
  494. package/dist/workers/workers/quality-gate.d.ts +11 -9
  495. package/dist/workers/workers/quality-gate.js +125 -267
  496. package/dist/workers/workers/regression-monitor.d.ts +18 -1
  497. package/dist/workers/workers/regression-monitor.js +276 -117
  498. package/dist/workers/workers/security-scan-records.d.ts +111 -0
  499. package/dist/workers/workers/security-scan-records.js +128 -0
  500. package/dist/workers/workers/security-scan.d.ts +25 -7
  501. package/dist/workers/workers/security-scan.js +187 -164
  502. package/package.json +2 -2
  503. package/dist/cli/chunks/adapter-EGIPTX5H.js +0 -2
  504. package/dist/cli/chunks/aqe-learning-engine-WP4GCBDT.js +0 -2
  505. package/dist/cli/chunks/base-6ORFD62I.js +0 -2
  506. package/dist/cli/chunks/browser-workflow-PIXGERWP.js +0 -2
  507. package/dist/cli/chunks/chunk-2WFTZSRT.js +0 -2
  508. package/dist/cli/chunks/chunk-7YB2KELI.js +0 -5
  509. package/dist/cli/chunks/chunk-BBL6YXD3.js +0 -2
  510. package/dist/cli/chunks/chunk-BJ5P4IV2.js +0 -2
  511. package/dist/cli/chunks/chunk-BO4PKNYP.js +0 -102
  512. package/dist/cli/chunks/chunk-DFPL5N3Q.js +0 -16
  513. package/dist/cli/chunks/chunk-DLY4YEN3.js +0 -2
  514. package/dist/cli/chunks/chunk-ERGWWI4Y.js +0 -3
  515. package/dist/cli/chunks/chunk-GTSOFCMQ.js +0 -2
  516. package/dist/cli/chunks/chunk-KZVJW2SD.js +0 -2
  517. package/dist/cli/chunks/chunk-L336HFFE.js +0 -2
  518. package/dist/cli/chunks/chunk-N2TJNIHA.js +0 -2
  519. package/dist/cli/chunks/chunk-RCXMUEZN.js +0 -3
  520. package/dist/cli/chunks/chunk-SEZLYRCS.js +0 -2
  521. package/dist/cli/chunks/chunk-TDLKXLJC.js +0 -4
  522. package/dist/cli/chunks/chunk-WOZIXXY5.js +0 -7
  523. package/dist/cli/chunks/ci-KP4GZKJ7.js +0 -81
  524. package/dist/cli/chunks/client-C3KHVRM6.js +0 -2
  525. package/dist/cli/chunks/core-handlers-KSQM6Q6S.js +0 -2
  526. package/dist/cli/chunks/coverage-SPFVHRRU.js +0 -43
  527. package/dist/cli/chunks/coverage-target-GSRBNHXE.js +0 -2
  528. package/dist/cli/chunks/cross-domain-router-CTGNOVCF.js +0 -2
  529. package/dist/cli/chunks/daemon-M5TD5Y6T.js +0 -10
  530. package/dist/cli/chunks/dream-MIK2E4UL.js +0 -2
  531. package/dist/cli/chunks/embed-and-insert-pattern-QST77T2B.js +0 -3
  532. package/dist/cli/chunks/experience-capture-middleware-X66IYSRV.js +0 -40
  533. package/dist/cli/chunks/file-discovery-3NHRUQQB.js +0 -2
  534. package/dist/cli/chunks/heartbeat-scheduler-OCKRACUW.js +0 -2
  535. package/dist/cli/chunks/hnsw-adapter-X67XG73C.js +0 -2
  536. package/dist/cli/chunks/hnsw-index-I7KCQBQR.js +0 -2
  537. package/dist/cli/chunks/hybrid-backend-FOUHTKAK.js +0 -2
  538. package/dist/cli/chunks/impact-analyzer-GXYVX46O.js +0 -2
  539. package/dist/cli/chunks/init-handler-2AXMXHYF.js +0 -86
  540. package/dist/cli/chunks/init-wizard-C2MRX2QG.js +0 -2
  541. package/dist/cli/chunks/kernel-Q2IUDIDC.js +0 -2
  542. package/dist/cli/chunks/knowledge-graph-E2Z6K5EE.js +0 -2
  543. package/dist/cli/chunks/learning-BEA26RNA.js +0 -122
  544. package/dist/cli/chunks/llm-router-service-YATYFEDD.js +0 -2
  545. package/dist/cli/chunks/load-test-LV77JXWA.js +0 -2
  546. package/dist/cli/chunks/memory-backend-XME3X3QX.js +0 -2
  547. package/dist/cli/chunks/memory-handlers-VG47X5DX.js +0 -2
  548. package/dist/cli/chunks/orchestrator-VHUXUYIM.js +0 -452
  549. package/dist/cli/chunks/pattern-null-store-TAXMLENP.js +0 -2
  550. package/dist/cli/chunks/plugin-2VAYWAO3.js +0 -27
  551. package/dist/cli/chunks/project-root-CFFPBGPX.js +0 -2
  552. package/dist/cli/chunks/protocol-executor-ML76QAVQ.js +0 -2
  553. package/dist/cli/chunks/qe-reasoning-bank-LUZH6RYV.js +0 -2
  554. package/dist/cli/chunks/queen-coordinator-EWXNIXB6.js +0 -2
  555. package/dist/cli/chunks/real-embeddings-GZV4VKK4.js +0 -2
  556. package/dist/cli/chunks/router-MXOBVEBF.js +0 -2
  557. package/dist/cli/chunks/routing-feedback-T6CCRUEK.js +0 -2
  558. package/dist/cli/chunks/rvf-dual-writer-WHXVT3V3.js +0 -2
  559. package/dist/cli/chunks/rvf-migration-adapter-JFPWIRCG.js +0 -2
  560. package/dist/cli/chunks/rvf-migration-coordinator-D4KUBNRZ.js +0 -2
  561. package/dist/cli/chunks/rvf-native-adapter-KOXR7TJL.js +0 -2
  562. package/dist/cli/chunks/safe-db-CI6IPSIN.js +0 -2
  563. package/dist/cli/chunks/schedule-X4HW6TVJ.js +0 -2
  564. package/dist/cli/chunks/scheduler-KCNJ2ON3.js +0 -2
  565. package/dist/cli/chunks/security-7723AZZ4.js +0 -13
  566. package/dist/cli/chunks/shared-rvf-adapter-KEQ5CLNI.js +0 -2
  567. package/dist/cli/chunks/sqlite-persistence-PGHU6VUR.js +0 -2
  568. package/dist/cli/chunks/sync-EFWXMA2H.js +0 -2
  569. package/dist/cli/chunks/token-bootstrap-S346YBVO.js +0 -2
  570. package/dist/cli/chunks/unified-memory-6CK3TUNQ.js +0 -2
  571. package/dist/cli/chunks/unified-memory-hnsw-A7BWBGYN.js +0 -2
  572. package/dist/cli/chunks/unified-persistence-GEPMDBQZ.js +0 -2
  573. package/dist/cli/chunks/visual-security-L4J7LQWT.js +0 -2
  574. package/dist/cli/chunks/witness-chain-CDUMX623.js +0 -2
  575. package/dist/cli/chunks/witness-chain-repair-WNYH6O4L.js +0 -2
  576. package/dist/cli/chunks/witness-key-manager-NQ5DAAC4.js +0 -2
  577. package/dist/cli/chunks/workflow-orchestrator-USJDWVDR.js +0 -2
  578. package/dist/cli/chunks/wrappers-CZDI6Z3X.js +0 -2
  579. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  580. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  581. /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
  582. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  583. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  584. /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
@@ -8,8 +8,10 @@ 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';
13
15
  /**
14
16
  * Whether an analyze request carries instrumented (measured) coverage (#1008).
15
17
  * Fail-closed: an explicit `request.measured` wins; otherwise only data a
@@ -82,17 +84,21 @@ export class CoverageAnalyzerService {
82
84
  // written over a measurement, and never stored where a quality gate,
83
85
  // quality_assess or another reader would take it as measured.
84
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);
85
91
  // Calculate delta from previous coverage (if stored)
86
- const delta = measured ? await this.calculateDelta(summary) : undefined;
92
+ const delta = measured ? await this.calculateDelta(stored) : undefined;
87
93
  // Generate recommendations based on analysis
88
94
  const recommendations = this.generateRecommendations(coverageData, summary, threshold);
89
95
  if (measured) {
90
96
  // Store current coverage for future delta calculations
91
- await this.storeCoverageSnapshot(summary);
97
+ await this.storeCoverageSnapshot(stored, request.runStatus, request.testRun);
92
98
  // Store coverage vectors for similarity search + KV for quality-analyzer
93
99
  if (request.includeFileDetails) {
94
- await this.indexFileCoverageVectors(coverageData.files);
95
- await this.storeFileCoverageKV(coverageData.files);
100
+ await this.indexFileCoverageVectors(coverageData.files, request.projectRoot);
101
+ await this.storeFileCoverageKV(coverageData.files, request.projectRoot, request.runStatus);
96
102
  }
97
103
  }
98
104
  return ok({
@@ -101,6 +107,8 @@ export class CoverageAnalyzerService {
101
107
  delta,
102
108
  recommendations,
103
109
  measured,
110
+ collected,
111
+ ...(request.runStatus ? { runStatus: request.runStatus } : {}),
104
112
  });
105
113
  }
106
114
  catch (error) {
@@ -421,14 +429,20 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
421
429
  }
422
430
  async calculateDelta(current) {
423
431
  try {
424
- 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'));
425
436
  if (!previous) {
426
437
  return undefined;
427
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);
428
442
  const lineDelta = current.line - previous.line;
429
- const branchDelta = current.branch - previous.branch;
430
- const functionDelta = current.function - previous.function;
431
- 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);
432
446
  const avgDelta = (lineDelta + branchDelta + functionDelta + statementDelta) / 4;
433
447
  let trend;
434
448
  if (avgDelta > 0.5) {
@@ -452,23 +466,36 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
452
466
  return undefined;
453
467
  }
454
468
  }
455
- async storeCoverageSnapshot(summary) {
469
+ async storeCoverageSnapshot(summary, runStatus, testRun) {
456
470
  try {
457
- // Rotate: copy current coverage:latest → coverage:previous before overwriting
458
- 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'));
459
475
  if (existing) {
460
476
  await this.memory.set('coverage:previous', existing, { persist: true });
461
477
  }
462
478
  // Store latest snapshot, stamped with its provenance (#1008). Only
463
479
  // measured coverage reaches this method.
464
- await this.memory.set('coverage:latest', { ...summary, measured: true }, { persist: true });
465
- await writeQualityEvidence(this.memory, { coverage: summary.line }, {
466
- measuredAt: new Date().toISOString(),
467
- source: 'coverage-analysis',
468
- });
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
+ }
469
496
  // Store historical snapshot
470
497
  const timestamp = Date.now();
471
- await this.memory.set(`coverage:history:${timestamp}`, summary, {
498
+ await this.memory.set(`coverage:history:${timestamp}`, record, {
472
499
  persist: true,
473
500
  namespace: 'coverage-history',
474
501
  });
@@ -482,22 +509,22 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
482
509
  * and defect-predictor can read it with memory.get().
483
510
  * (The vector index via storeVector is kept for similarity search.)
484
511
  */
485
- async storeFileCoverageKV(files) {
512
+ async storeFileCoverageKV(files, projectRoot, runStatus) {
486
513
  for (const file of files) {
487
514
  try {
488
- const linePct = file.lines.total > 0
489
- ? Math.round((file.lines.covered / file.lines.total) * 10000) / 100 : 0;
490
- const branchPct = file.branches.total > 0
491
- ? Math.round((file.branches.covered / file.branches.total) * 10000) / 100 : 0;
492
- const fnPct = file.functions.total > 0
493
- ? Math.round((file.functions.covered / file.functions.total) * 10000) / 100 : 0;
494
- const stmtPct = file.statements.total > 0
495
- ? Math.round((file.statements.covered / file.statements.total) * 10000) / 100 : 0;
496
- await this.memory.set(`coverage:file:${file.path}`, {
497
- line: linePct,
498
- branch: branchPct,
499
- function: fnPct,
500
- 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 } : {}),
501
528
  }, { persist: true });
502
529
  }
503
530
  catch {
@@ -505,12 +532,12 @@ Provide thoughtful, specific analysis based on the coverage data. Do not include
505
532
  }
506
533
  }
507
534
  }
508
- async indexFileCoverageVectors(files) {
535
+ async indexFileCoverageVectors(files, projectRoot) {
509
536
  for (const file of files) {
510
537
  try {
511
538
  // Create a vector representation of the file coverage
512
539
  const embedding = this.createCoverageEmbedding(file);
513
- await this.memory.storeVector(`coverage:file:${file.path}`, embedding, {
540
+ await this.memory.storeVector(`coverage:file:${fileCoverageKey(file.path, projectRoot)}`, embedding, {
514
541
  path: file.path,
515
542
  lineCoverage: file.lines.covered / (file.lines.total || 1),
516
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,8 @@ 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';
18
+ import { fileCoverageLookupKeys } from '../../coverage-analysis/collected-metrics.js';
17
19
  // LLMDefectAnalysis is imported from ../interfaces
18
20
  const DEFAULT_CONFIG = {
19
21
  defaultThreshold: 0.5,
@@ -160,7 +162,7 @@ Be specific and actionable. Focus on concrete issues, not generic advice.`,
160
162
  }
161
163
  return null;
162
164
  }
163
- catch (error) {
165
+ catch {
164
166
  logger.warn('LLM analysis failed, using heuristics only');
165
167
  return null;
166
168
  }
@@ -497,7 +499,7 @@ Be specific and actionable. Focus on concrete issues, not generic advice.`,
497
499
  // Count complexity indicators in code
498
500
  const content = fileResult.value;
499
501
  const ifCount = (content.match(/\bif\s*\(/g) || []).length;
500
- const loopCount = (content.match(/\b(for|while|do)\s*[\(\{]/g) || []).length;
502
+ const loopCount = (content.match(/\b(for|while|do)\s*[{(]/g) || []).length;
501
503
  const switchCount = (content.match(/\bswitch\s*\(/g) || []).length;
502
504
  const catchCount = (content.match(/\bcatch\s*\(/g) || []).length;
503
505
  const ternaryCount = (content.match(/\?[^?:]+:/g) || []).length;
@@ -590,14 +592,17 @@ Be specific and actionable. Focus on concrete issues, not generic advice.`,
590
592
  async getTestCoverage(file) {
591
593
  try {
592
594
  // 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') {
595
- // Invert: low coverage = high defect risk
596
- return 1 - fileCoverage.line / 100;
595
+ // #1014: only measured records; legacy unstamped estimates are ignored.
596
+ for (const key of fileCoverageLookupKeys(file)) {
597
+ const fileCoverage = measuredFileCoverage(await this.memory.get(key));
598
+ if (fileCoverage) {
599
+ // Invert: low coverage = high defect risk
600
+ return 1 - fileCoverage.line / 100;
601
+ }
597
602
  }
598
603
  // Fall back to project-wide coverage
599
- const summary = await this.memory.get('coverage:latest');
600
- if (summary && typeof summary.line === 'number') {
604
+ const summary = measuredCoverageSummary(await this.memory.get('coverage:latest'));
605
+ if (summary) {
601
606
  return 1 - summary.line / 100;
602
607
  }
603
608
  }
@@ -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: {
@@ -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