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
@@ -7,13 +7,16 @@ import { spawn } from 'node:child_process';
7
7
  import { existsSync, mkdtempSync, readFileSync, rmSync } from 'node:fs';
8
8
  import { tmpdir } from 'node:os';
9
9
  import { join } from 'node:path';
10
+ import { isDeepStrictEqual } from 'node:util';
10
11
  import { v4 as uuidv4 } from 'uuid';
11
12
  import { ok, err } from '../../../shared/types/index.js';
12
13
  import { TEST_EXECUTION_CONSTANTS, LLM_ANALYSIS_CONSTANTS } from '../../constants.js';
13
14
  import { toErrorMessage, toError } from '../../../shared/error-utils.js';
14
15
  import { safeJsonParse } from '../../../shared/safe-json.js';
15
16
  import { secureRandom, secureRandomInt } from '../../../shared/utils/crypto-random.js';
16
- import { writeQualityEvidence } from '../../quality-assessment/quality-evidence.js';
17
+ import { writeTestRunEvidence } from '../../quality-assessment/quality-evidence.js';
18
+ import { istanbulLineHits } from '../../../coordination/handlers/handler-utils.js';
19
+ import { fileCoverageKey } from '../../coverage-analysis/collected-metrics.js';
17
20
  import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
18
21
  import { createVitestJsonReport } from '../../../shared/vitest-json-report.js';
19
22
  import { jestExactPathPattern, runnerFilePath } from '../../../shared/test-runner-args.js';
@@ -78,7 +81,7 @@ export class TestExecutorService {
78
81
  };
79
82
  // Store results
80
83
  this.runResults.set(runId, runResult);
81
- await this.storeResults(runId, runResult);
84
+ await this.storeResults(runId, runResult, request.testFiles);
82
85
  // Create and store stats
83
86
  const stats = {
84
87
  runId,
@@ -133,7 +136,7 @@ export class TestExecutorService {
133
136
  };
134
137
  // Store results
135
138
  this.runResults.set(runId, runResult);
136
- await this.storeResults(runId, runResult);
139
+ await this.storeResults(runId, runResult, request.testFiles);
137
140
  // Create and store stats
138
141
  const stats = {
139
142
  runId,
@@ -303,11 +306,13 @@ Provide:
303
306
  const failedTests = [];
304
307
  const coverages = [];
305
308
  const allFileCoverages = [];
309
+ const executionResults = [];
306
310
  let passed = 0;
307
311
  let failed = 0;
308
312
  let skipped = 0;
309
313
  for (const file of testFiles) {
310
314
  const result = await this.executeTestFile(file, framework, timeout);
315
+ executionResults.push(result);
311
316
  passed += result.passed;
312
317
  failed += result.failed;
313
318
  skipped += result.skipped;
@@ -319,16 +324,61 @@ Provide:
319
324
  allFileCoverages.push(...result.fileCoverages);
320
325
  }
321
326
  }
327
+ // Separate runner invocations each have their own coverage map. Averaging
328
+ // percentages double-counts source files and misses disjoint hits (#1030).
329
+ // If any run lacks raw counters, there is no honest combined measurement.
330
+ const merged = testFiles.length > 1 && !this.config.simulateForTesting
331
+ ? this.mergeSequentialCoverage(executionResults)
332
+ : undefined;
333
+ const separateRuns = testFiles.length > 1 && !this.config.simulateForTesting;
322
334
  return {
323
335
  total: passed + failed + skipped,
324
336
  passed,
325
337
  failed,
326
338
  skipped,
327
339
  failedTests,
328
- coverage: this.aggregateCoverage(coverages),
329
- fileCoverages: allFileCoverages.length > 0 ? allFileCoverages : undefined,
340
+ coverage: separateRuns ? merged?.summary : this.aggregateCoverage(coverages),
341
+ fileCoverages: separateRuns ? merged?.perFile
342
+ : allFileCoverages.length > 0 ? allFileCoverages : undefined,
330
343
  };
331
344
  }
345
+ mergeSequentialCoverage(results) {
346
+ if (results.some(result => !result.rawCoverageMap))
347
+ return undefined;
348
+ const merged = {};
349
+ for (const result of results) {
350
+ for (const [rawPath, entry] of Object.entries(result.rawCoverageMap)) {
351
+ if (!isRecord(entry) || !isRecord(entry.statementMap) || !isRecord(entry.fnMap)
352
+ || !isRecord(entry.branchMap) || !isRecord(entry.s) || !isRecord(entry.f)
353
+ || !isRecord(entry.b))
354
+ return undefined;
355
+ const file = fileCoverageKey(rawPath);
356
+ const prior = merged[file];
357
+ if (prior) {
358
+ if (!isDeepStrictEqual(prior.statementMap, entry.statementMap)
359
+ || !isDeepStrictEqual(prior.fnMap, entry.fnMap)
360
+ || !isDeepStrictEqual(prior.branchMap, entry.branchMap))
361
+ return undefined;
362
+ for (const counter of ['s', 'f', 'b']) {
363
+ const hits = mergeHitCounts(prior[counter], entry[counter]);
364
+ if (!hits)
365
+ return undefined;
366
+ prior[counter] = hits;
367
+ }
368
+ }
369
+ else {
370
+ const s = mergeHitCounts(entry.s, entry.s);
371
+ const f = mergeHitCounts(entry.f, entry.f);
372
+ const b = mergeHitCounts(entry.b, entry.b);
373
+ if (!s || !f || !b)
374
+ return undefined;
375
+ merged[file] = { ...entry, path: file, s, f, b };
376
+ }
377
+ }
378
+ }
379
+ const coverage = this.extractCoverageFromJson({ coverageMap: merged });
380
+ return coverage.summary ? { summary: coverage.summary, perFile: coverage.perFile } : undefined;
381
+ }
332
382
  async executeTestFile(file, framework, timeout) {
333
383
  return this.executeTestFiles([file], framework, timeout);
334
384
  }
@@ -458,13 +508,14 @@ Provide:
458
508
  const parseResult = this.parseTestOutput(reportText, stderr, fileLabel, framework, code);
459
509
  // Read only this invocation's coverage artifacts. A previous or
460
510
  // concurrent run's project coverage directory is not evidence.
461
- if (parseResult.success && !parseResult.value.coverage && coverageDirectory) {
511
+ if (parseResult.success && coverageDirectory) {
462
512
  const diskCoverage = this.readCoverageFromDisk(coverageDirectory);
463
513
  if (diskCoverage) {
464
- parseResult.value.coverage = diskCoverage.summary;
465
- if (diskCoverage.perFile.length > 0) {
514
+ parseResult.value.coverage ??= diskCoverage.summary;
515
+ if (!parseResult.value.fileCoverages && diskCoverage.perFile.length > 0) {
466
516
  parseResult.value.fileCoverages = diskCoverage.perFile;
467
517
  }
518
+ parseResult.value.rawCoverageMap ??= diskCoverage.rawMap;
468
519
  }
469
520
  }
470
521
  finish(parseResult);
@@ -659,6 +710,7 @@ Provide:
659
710
  failedTests,
660
711
  coverage: covData.summary,
661
712
  fileCoverages: covData.perFile.length > 0 ? covData.perFile : undefined,
713
+ rawCoverageMap: isRecord(json.coverageMap) && !json.coverageMap.total ? json.coverageMap : undefined,
662
714
  });
663
715
  }
664
716
  catch {
@@ -713,6 +765,7 @@ Provide:
713
765
  failedTests,
714
766
  coverage: covData.summary,
715
767
  fileCoverages: covData.perFile.length > 0 ? covData.perFile : undefined,
768
+ rawCoverageMap: isRecord(json.coverageMap) && !json.coverageMap.total ? json.coverageMap : undefined,
716
769
  });
717
770
  }
718
771
  catch {
@@ -958,17 +1011,22 @@ Provide:
958
1011
  if (coverages.length === 0) {
959
1012
  return undefined;
960
1013
  }
961
- const sum = coverages.reduce((acc, cov) => ({
962
- line: acc.line + cov.line,
963
- branch: acc.branch + cov.branch,
964
- function: acc.function + cov.function,
965
- statement: acc.statement + cov.statement,
966
- }), { line: 0, branch: 0, function: 0, statement: 0 });
1014
+ // #1015: average each metric over the entries that collected it; a
1015
+ // metric nobody collected stays null.
1016
+ const mean = (values) => {
1017
+ const present = values.filter((v) => typeof v === 'number' && Number.isFinite(v));
1018
+ return present.length > 0
1019
+ ? Math.round((present.reduce((a, v) => a + v, 0) / present.length) * 100) / 100
1020
+ : null;
1021
+ };
1022
+ const line = mean(coverages.map(c => c.line));
1023
+ if (line === null)
1024
+ return undefined;
967
1025
  return {
968
- line: Math.round((sum.line / coverages.length) * 100) / 100,
969
- branch: Math.round((sum.branch / coverages.length) * 100) / 100,
970
- function: Math.round((sum.function / coverages.length) * 100) / 100,
971
- statement: Math.round((sum.statement / coverages.length) * 100) / 100,
1026
+ line,
1027
+ branch: mean(coverages.map(c => c.branch)),
1028
+ function: mean(coverages.map(c => c.function)),
1029
+ statement: mean(coverages.map(c => c.statement)),
972
1030
  };
973
1031
  }
974
1032
  /**
@@ -989,59 +1047,61 @@ Provide:
989
1047
  // Jest shape: { coverageSummary: { total: { lines: { pct }, branches: { pct }, ... } } }
990
1048
  const total = json?.coverageSummary?.total ?? json?.coverageMap?.total;
991
1049
  if (total?.lines?.pct !== undefined) {
1050
+ const line = summaryPct(total.lines);
992
1051
  return {
993
- summary: {
994
- line: typeof total.lines?.pct === 'number' ? total.lines.pct : 0,
995
- branch: typeof total.branches?.pct === 'number' ? total.branches.pct : 0,
996
- function: typeof total.functions?.pct === 'number' ? total.functions.pct : 0,
997
- statement: typeof total.statements?.pct === 'number' ? total.statements.pct : 0,
1052
+ summary: line === null ? undefined : {
1053
+ line,
1054
+ branch: summaryPct(total.branches),
1055
+ function: summaryPct(total.functions),
1056
+ statement: summaryPct(total.statements),
998
1057
  },
999
1058
  perFile,
1000
1059
  };
1001
1060
  }
1002
- // Vitest v8 shape: coverageMap is keyed by file path
1061
+ // Vitest v8 shape: coverageMap is keyed by file path (istanbul entries)
1003
1062
  const coverageMap = json?.coverageMap;
1004
1063
  if (coverageMap && typeof coverageMap === 'object') {
1005
1064
  const files = Object.keys(coverageMap).filter(k => k !== 'total');
1006
- if (files.length > 0) {
1007
- let lines = 0, branches = 0, functions = 0, statements = 0;
1008
- let count = 0;
1009
- for (const filePath of files) {
1010
- const entry = coverageMap[filePath];
1011
- const s = entry?.s ?? {};
1012
- const f = entry?.f ?? {};
1013
- const b = entry?.b ?? {};
1014
- const stmtTotal = Object.keys(s).length;
1015
- const stmtCovered = Object.values(s).filter((v) => v > 0).length;
1016
- const fnTotal = Object.keys(f).length;
1017
- const fnCovered = Object.values(f).filter((v) => v > 0).length;
1018
- const brTotal = Object.keys(b).length;
1019
- const brCovered = Object.values(b).filter((v) => Array.isArray(v) ? v.every(c => c > 0) : v > 0).length;
1020
- if (stmtTotal > 0) {
1021
- const fileLine = Math.round((stmtCovered / stmtTotal) * 10000) / 100;
1022
- const fileFn = fnTotal > 0 ? Math.round((fnCovered / fnTotal) * 10000) / 100 : 100;
1023
- const fileBr = brTotal > 0 ? Math.round((brCovered / brTotal) * 10000) / 100 : 100;
1024
- const fileStmt = fileLine;
1025
- perFile.push({ path: filePath, line: fileLine, branch: fileBr, function: fileFn, statement: fileStmt });
1026
- statements += fileStmt;
1027
- lines += fileLine;
1028
- functions += fileFn;
1029
- branches += fileBr;
1030
- count++;
1031
- }
1032
- }
1033
- if (count > 0) {
1034
- return {
1035
- summary: {
1036
- line: Math.round((lines / count) * 100) / 100,
1037
- branch: Math.round((branches / count) * 100) / 100,
1038
- function: Math.round((functions / count) * 100) / 100,
1039
- statement: Math.round((statements / count) * 100) / 100,
1040
- },
1041
- perFile,
1042
- };
1065
+ const totals = { line: [0, 0], branch: [0, 0], function: [0, 0], statement: [0, 0] };
1066
+ for (const filePath of files) {
1067
+ const entry = coverageMap[filePath];
1068
+ const s = entry?.s ?? {};
1069
+ const f = entry?.f ?? {};
1070
+ const b = entry?.b ?? {};
1071
+ // #1012: line coverage per SOURCE LINE (istanbul's own rule), not per statement.
1072
+ const lineHits = istanbulLineHits({ statementMap: entry?.statementMap ?? {}, s });
1073
+ const lines = [[...lineHits.values()].filter(v => v > 0).length, lineHits.size];
1074
+ const statements = [Object.values(s).filter(v => v > 0).length, Object.keys(s).length];
1075
+ const fns = [Object.values(f).filter(v => v > 0).length, Object.keys(f).length];
1076
+ const branchCounts = Object.values(b).flatMap(v => (Array.isArray(v) ? v : [v]));
1077
+ const branches = [branchCounts.filter(c => c > 0).length, branchCounts.length];
1078
+ if (lines[1] === 0)
1079
+ continue;
1080
+ // #1015: istanbul's 0/0 (no branches / no functions) is "not
1081
+ // collected" — null — not 100%.
1082
+ perFile.push({
1083
+ path: filePath,
1084
+ line: ratio(lines),
1085
+ branch: ratio(branches),
1086
+ function: ratio(fns),
1087
+ statement: ratio(statements),
1088
+ });
1089
+ for (const [key, [covered, count]] of [['line', lines], ['branch', branches], ['function', fns], ['statement', statements]]) {
1090
+ totals[key][0] += covered;
1091
+ totals[key][1] += count;
1043
1092
  }
1044
1093
  }
1094
+ if (perFile.length > 0) {
1095
+ return {
1096
+ summary: {
1097
+ line: ratio(totals.line),
1098
+ branch: ratio(totals.branch),
1099
+ function: ratio(totals.function),
1100
+ statement: ratio(totals.statement),
1101
+ },
1102
+ perFile,
1103
+ };
1104
+ }
1045
1105
  }
1046
1106
  }
1047
1107
  catch {
@@ -1058,8 +1118,8 @@ Provide:
1058
1118
  try {
1059
1119
  // Check common coverage output paths
1060
1120
  const candidates = [
1061
- join(coverageDirectory, 'coverage-summary.json'),
1062
1121
  join(coverageDirectory, 'coverage-final.json'),
1122
+ join(coverageDirectory, 'coverage-summary.json'),
1063
1123
  ];
1064
1124
  for (const filePath of candidates) {
1065
1125
  if (!existsSync(filePath))
@@ -1073,26 +1133,33 @@ Provide:
1073
1133
  if (key === 'total')
1074
1134
  continue;
1075
1135
  // Normalize path: strip cwd prefix, reject traversal sequences
1076
- const normalizedPath = key.replace(process.cwd() + '/', '').replace(process.cwd() + '\\', '');
1077
- if (normalizedPath.includes('..'))
1136
+ // Reject traversal; keep the key absolute (#1027 N7: one key form).
1137
+ const relative = key.replace(process.cwd() + '/', '').replace(process.cwd() + '\\', '');
1138
+ if (relative.includes('..'))
1078
1139
  continue;
1140
+ const normalizedPath = fileCoverageKey(key);
1079
1141
  const entry = value;
1080
- if (entry?.lines?.pct !== undefined) {
1142
+ const line = summaryPct(entry?.lines);
1143
+ if (line !== null) {
1144
+ // #1015: a metric with total 0 is not collected (null), not its 100 pct.
1081
1145
  perFile.push({
1082
1146
  path: normalizedPath,
1083
- line: entry.lines.pct,
1084
- branch: entry.branches?.pct ?? 0,
1085
- function: entry.functions?.pct ?? 0,
1086
- statement: entry.statements?.pct ?? 0,
1147
+ line,
1148
+ branch: summaryPct(entry.branches),
1149
+ function: summaryPct(entry.functions),
1150
+ statement: summaryPct(entry.statements),
1087
1151
  });
1088
1152
  }
1089
1153
  }
1154
+ const line = summaryPct(json.total.lines);
1155
+ if (line === null)
1156
+ continue;
1090
1157
  return {
1091
1158
  summary: {
1092
- line: json.total.lines.pct,
1093
- branch: json.total.branches?.pct ?? 0,
1094
- function: json.total.functions?.pct ?? 0,
1095
- statement: json.total.statements?.pct ?? 0,
1159
+ line,
1160
+ branch: summaryPct(json.total.branches),
1161
+ function: summaryPct(json.total.functions),
1162
+ statement: summaryPct(json.total.statements),
1096
1163
  },
1097
1164
  perFile,
1098
1165
  };
@@ -1101,7 +1168,7 @@ Provide:
1101
1168
  if (typeof json === 'object' && !json.total) {
1102
1169
  const result = this.extractCoverageFromJson({ coverageMap: json });
1103
1170
  if (result.summary) {
1104
- return { summary: result.summary, perFile: result.perFile };
1171
+ return { summary: result.summary, perFile: result.perFile, rawMap: json };
1105
1172
  }
1106
1173
  }
1107
1174
  }
@@ -1111,50 +1178,69 @@ Provide:
1111
1178
  }
1112
1179
  return undefined;
1113
1180
  }
1114
- async storeResults(runId, result) {
1115
- await this.memory.set(`test-run:${runId}`, result, {
1181
+ async storeResults(runId, result, testFiles) {
1182
+ // #1028 N1: the record names the test files it ran, so per-test duration
1183
+ // is compared only between runs of the same test set.
1184
+ const files = testFiles && testFiles.length > 0 ? [...new Set(testFiles)].sort() : undefined;
1185
+ await this.memory.set(`test-run:${runId}`, files ? { ...result, testFiles: files } : result, {
1116
1186
  namespace: 'test-execution',
1117
1187
  persist: true,
1118
1188
  });
1189
+ // A runner ERROR has no trustworthy result: it persists no evidence.
1190
+ if (result.status === 'error')
1191
+ return;
1192
+ const runStatus = result.failed > 0 || result.status !== 'passed' ? 'failed' : 'passed';
1193
+ const coverage = result.coverage && Number.isFinite(result.coverage.line) ? result.coverage : undefined;
1194
+ try {
1195
+ // #1027 NB1: this run's testsPassing and (when measured) its coverage,
1196
+ // written together under this runId — the same writer as
1197
+ // `aqe test execute`. Coverage from a run whose tests FAILED (N4) is
1198
+ // then never read next to a stale testsPassing from an earlier run.
1199
+ await writeTestRunEvidence(this.memory, {
1200
+ runId, passed: result.passed, failed: result.failed, skipped: result.skipped,
1201
+ }, { source: 'test-execution', ...(coverage ? { coverage: coverage.line } : {}) });
1202
+ }
1203
+ catch {
1204
+ // Non-critical — don't break test storage if evidence storage fails
1205
+ }
1119
1206
  // Store coverage data so quality-assess and quality-gate can read it.
1120
1207
  // Note: coverage:previous rotation is owned by coverage-analyzer (the
1121
1208
  // canonical coverage service) to avoid double-rotation race conditions.
1122
- if (result.coverage) {
1123
- try {
1124
- // Write project-level summary using the same CoverageSummary shape
1125
- // as coverage-analyzer to avoid type mismatches
1126
- await this.memory.set('coverage:latest', {
1127
- line: result.coverage.line ?? 0,
1128
- branch: result.coverage.branch ?? 0,
1129
- function: result.coverage.function ?? 0,
1130
- statement: result.coverage.statement ?? 0,
1131
- files: result.fileCoverages?.length ?? 0,
1209
+ if (!coverage)
1210
+ return;
1211
+ try {
1212
+ // Same CoverageSummary shape as coverage-analyzer, stamped with its
1213
+ // provenance (#1008/#1015) so readers can trust it. An uncollected
1214
+ // metric stays null — never 0, never istanbul's 0/0 = 100%.
1215
+ await this.memory.set('coverage:latest', {
1216
+ line: coverage.line,
1217
+ branch: coverage.branch ?? null,
1218
+ function: coverage.function ?? null,
1219
+ statement: coverage.statement ?? null,
1220
+ files: result.fileCoverages?.length ?? 0,
1221
+ measured: true,
1222
+ runStatus,
1223
+ runId,
1224
+ }, { persist: true });
1225
+ // Store per-file coverage via memory.set() (not storeVector) so that
1226
+ // quality-analyzer's getStoredCoverage() can read it with memory.get()
1227
+ for (const fc of result.fileCoverages ?? []) {
1228
+ if (!Number.isFinite(fc.line))
1229
+ continue;
1230
+ // #1027 N7: one key form — the absolute path.
1231
+ await this.memory.set(`coverage:file:${fileCoverageKey(fc.path)}`, {
1232
+ line: fc.line,
1233
+ branch: fc.branch ?? null,
1234
+ function: fc.function ?? null,
1235
+ statement: fc.statement ?? null,
1236
+ measured: true,
1237
+ runStatus,
1132
1238
  }, { persist: true });
1133
- if (Number.isFinite(result.coverage.line)) {
1134
- await writeQualityEvidence(this.memory, {
1135
- coverage: result.coverage.line,
1136
- }, {
1137
- measuredAt: new Date().toISOString(),
1138
- source: 'test-execution coverage',
1139
- });
1140
- }
1141
- // Store per-file coverage via memory.set() (not storeVector) so that
1142
- // quality-analyzer's getStoredCoverage() can read it with memory.get()
1143
- if (result.fileCoverages) {
1144
- for (const fc of result.fileCoverages) {
1145
- await this.memory.set(`coverage:file:${fc.path}`, {
1146
- line: fc.line,
1147
- branch: fc.branch,
1148
- function: fc.function,
1149
- statement: fc.statement,
1150
- }, { persist: true });
1151
- }
1152
- }
1153
- }
1154
- catch {
1155
- // Non-critical — don't break test storage if coverage store fails
1156
1239
  }
1157
1240
  }
1241
+ catch {
1242
+ // Non-critical — don't break test storage if coverage store fails
1243
+ }
1158
1244
  }
1159
1245
  }
1160
1246
  // ============================================================================
@@ -1166,4 +1252,48 @@ Provide:
1166
1252
  export function createTestExecutorService(dependencies, config) {
1167
1253
  return new TestExecutorService(dependencies, config);
1168
1254
  }
1255
+ /** covered/total as a 2-decimal percentage, or null when there is nothing to cover. */
1256
+ function ratio([covered, total]) {
1257
+ return total > 0 ? Math.round((covered / total) * 10000) / 100 : null;
1258
+ }
1259
+ /**
1260
+ * A coverage-summary metric's percentage. istanbul writes `pct: 100` for a
1261
+ * metric with `total: 0`; that is "not collected" — null (#1015).
1262
+ */
1263
+ function summaryPct(metric) {
1264
+ if (!metric || typeof metric.pct !== 'number' || !Number.isFinite(metric.pct))
1265
+ return null;
1266
+ if (typeof metric.total === 'number' && metric.total === 0)
1267
+ return null;
1268
+ return metric.pct;
1269
+ }
1270
+ function isRecord(value) {
1271
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
1272
+ }
1273
+ /** A test covers a counter if any invocation hit it. Reject incompatible maps. */
1274
+ function mergeHitCounts(left, right) {
1275
+ if (!isRecord(left) || !isRecord(right))
1276
+ return undefined;
1277
+ const keys = Object.keys(left);
1278
+ if (!isDeepStrictEqual(keys.sort(), Object.keys(right).sort()))
1279
+ return undefined;
1280
+ const merged = {};
1281
+ for (const key of keys) {
1282
+ const a = left[key];
1283
+ const b = right[key];
1284
+ if (typeof a === 'number' && Number.isFinite(a) && a >= 0
1285
+ && typeof b === 'number' && Number.isFinite(b) && b >= 0) {
1286
+ merged[key] = Math.max(a, b);
1287
+ }
1288
+ else if (Array.isArray(a) && Array.isArray(b) && a.length === b.length
1289
+ && a.every(v => typeof v === 'number' && Number.isFinite(v) && v >= 0)
1290
+ && b.every(v => typeof v === 'number' && Number.isFinite(v) && v >= 0)) {
1291
+ merged[key] = a.map((v, i) => Math.max(v, b[i]));
1292
+ }
1293
+ else {
1294
+ return undefined;
1295
+ }
1296
+ }
1297
+ return merged;
1298
+ }
1169
1299
  //# sourceMappingURL=test-executor.js.map
@@ -31,6 +31,7 @@ import { DecisionTransformerAlgorithm, } from '../../integrations/rl-suite/algor
31
31
  import { isSONAThreeLoopEnabled } from '../../integrations/ruvector/feature-flags.js';
32
32
  // Coherence Gate Integration (ADR-052)
33
33
  import { createTestGenerationCoherenceGate, } from './services/coherence-gate-service.js';
34
+ import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
34
35
  const DEFAULT_CONFIG = {
35
36
  maxConcurrentWorkflows: 5,
36
37
  defaultTimeout: 60000, // 60 seconds
@@ -871,6 +872,9 @@ export class TestGenerationCoordinator extends BaseDomainCoordinator {
871
872
  return features.slice(0, 384);
872
873
  }
873
874
  async handleCoverageGapDetected(event) {
875
+ // #1014: only a gap found in MEASURED coverage is acted on / learned from.
876
+ if (!isMeasuredGapPayload(event.payload))
877
+ return;
874
878
  // Auto-generate tests for detected coverage gaps
875
879
  const payload = event.payload;
876
880
  const result = await this.testGenerator.generateForCoverageGap(payload.file, payload.uncoveredLines, 'jest' // Default framework
@@ -10,6 +10,7 @@ import { RoutingFeedbackCollector } from '../../routing/routing-feedback.js';
10
10
  import { createTestGeneratorServiceWithDependencies, } from './services/test-generator.js';
11
11
  import { toError } from '../../shared/error-utils.js';
12
12
  import { PatternMatcherService, } from './services/pattern-matcher.js';
13
+ import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
13
14
  /**
14
15
  * Test Generation Domain Plugin
15
16
  * Provides AI-powered test generation capabilities
@@ -277,6 +278,9 @@ export class TestGenerationPlugin extends BaseDomainPlugin {
277
278
  // Event Handlers
278
279
  // ============================================================================
279
280
  async handleCoverageGap(event) {
281
+ // #1014: only a gap found in MEASURED coverage is acted on / learned from.
282
+ if (!isMeasuredGapPayload(event.payload))
283
+ return;
280
284
  // Coverage gap detected - could auto-generate tests
281
285
  const payload = event.payload;
282
286
  // Only auto-generate for high-risk gaps
@@ -9,6 +9,7 @@ import { DEFAULT_FEEDBACK_CONFIG } from './types.js';
9
9
  import { getUnifiedMemory } from '../kernel/unified-memory.js';
10
10
  import { toErrorMessage } from '../shared/error-utils.js';
11
11
  import { safeJsonParse } from '../shared/safe-json.js';
12
+ import { MEASURED_COVERAGE_SESSION_SQL } from './coverage-session-provenance.js';
12
13
  // ============================================================================
13
14
  // Coverage Session Store
14
15
  // ============================================================================
@@ -101,8 +102,10 @@ export class CoverageLearner {
101
102
  if (!this.db)
102
103
  return;
103
104
  const database = this.db.getDatabase();
105
+ // #1014: legacy MCP rows without provenance (estimates, 0.0 for
106
+ // unmeasured runs) are not loaded as sessions or learned as strategies.
104
107
  const rows = database.prepare(`
105
- SELECT * FROM coverage_sessions ORDER BY created_at DESC LIMIT ?
108
+ SELECT * FROM coverage_sessions WHERE ${MEASURED_COVERAGE_SESSION_SQL} ORDER BY created_at DESC LIMIT ?
106
109
  `).all(this.config.maxOutcomesInMemory);
107
110
  for (const row of rows.reverse()) {
108
111
  const session = {
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Agentic QE v3 - Provenance of coverage_sessions rows (#1014)
3
+ *
4
+ * Up to 3.15.5 the MCP handler factory (agent `qe-coverage-analysis`) wrote a
5
+ * coverage_sessions row for EVERY coverage_analyze_sublinear call: a static
6
+ * estimate's figure, or 0.0 for an UNMEASURED target. Those rows have no
7
+ * provenance and never expire. Rows written from now on carry
8
+ * `context_json.measured = true`.
9
+ *
10
+ * Readers ignore legacy rows of that agent instead of deleting them (no data
11
+ * is destroyed; the coverage-learner's own retention ages them out). Rows of
12
+ * other writers (e.g. the post-command hook, which records a real istanbul
13
+ * coverage-summary.json) are unaffected.
14
+ */
15
+ /** The agent id of the MCP handler factory's coverage sessions. */
16
+ export declare const MCP_COVERAGE_AGENT_ID = "qe-coverage-analysis";
17
+ /**
18
+ * SQL predicate (no parameters) selecting coverage_sessions rows that are
19
+ * evidence. `CASE` keeps `json_extract` from running on malformed JSON.
20
+ */
21
+ export declare const MEASURED_COVERAGE_SESSION_SQL: string;
22
+ /** JS form of {@link MEASURED_COVERAGE_SESSION_SQL} for rows already loaded. */
23
+ export declare function isMeasuredCoverageSession(row: {
24
+ agent_id?: string;
25
+ agentId?: string;
26
+ context?: unknown;
27
+ context_json?: string | null;
28
+ }): boolean;
29
+ //# sourceMappingURL=coverage-session-provenance.d.ts.map
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Agentic QE v3 - Provenance of coverage_sessions rows (#1014)
3
+ *
4
+ * Up to 3.15.5 the MCP handler factory (agent `qe-coverage-analysis`) wrote a
5
+ * coverage_sessions row for EVERY coverage_analyze_sublinear call: a static
6
+ * estimate's figure, or 0.0 for an UNMEASURED target. Those rows have no
7
+ * provenance and never expire. Rows written from now on carry
8
+ * `context_json.measured = true`.
9
+ *
10
+ * Readers ignore legacy rows of that agent instead of deleting them (no data
11
+ * is destroyed; the coverage-learner's own retention ages them out). Rows of
12
+ * other writers (e.g. the post-command hook, which records a real istanbul
13
+ * coverage-summary.json) are unaffected.
14
+ */
15
+ /** The agent id of the MCP handler factory's coverage sessions. */
16
+ export const MCP_COVERAGE_AGENT_ID = 'qe-coverage-analysis';
17
+ /**
18
+ * SQL predicate (no parameters) selecting coverage_sessions rows that are
19
+ * evidence. `CASE` keeps `json_extract` from running on malformed JSON.
20
+ */
21
+ export const MEASURED_COVERAGE_SESSION_SQL = `(agent_id != '${MCP_COVERAGE_AGENT_ID}' OR ` +
22
+ `(CASE WHEN json_valid(context_json) THEN json_extract(context_json, '$.measured') END) = 1)`;
23
+ /** JS form of {@link MEASURED_COVERAGE_SESSION_SQL} for rows already loaded. */
24
+ export function isMeasuredCoverageSession(row) {
25
+ const agent = row.agent_id ?? row.agentId;
26
+ if (agent !== MCP_COVERAGE_AGENT_ID)
27
+ return true;
28
+ let context = row.context;
29
+ if (context === undefined && typeof row.context_json === 'string') {
30
+ try {
31
+ context = JSON.parse(row.context_json);
32
+ }
33
+ catch {
34
+ return false;
35
+ }
36
+ }
37
+ return !!context && typeof context === 'object' && context.measured === true;
38
+ }
39
+ //# sourceMappingURL=coverage-session-provenance.js.map
@@ -161,6 +161,8 @@ export class ModularInitOrchestrator {
161
161
  workersStarted: workersResult?.data?.workersConfigured ?? 0,
162
162
  codexGuidance: assetsResult?.data?.codexGuidance,
163
163
  codexComponents: assetsResult?.data?.codexComponents,
164
+ retiredAssetsRemoved: assetsResult?.data?.retiredAssetsRemoved,
165
+ retiredAssetsKept: assetsResult?.data?.retiredAssetsKept,
164
166
  },
165
167
  totalDurationMs: Date.now() - startTime,
166
168
  timestamp: new Date(),