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
@@ -6,9 +6,14 @@
6
6
  * - Test result regressions
7
7
  * - Performance regressions
8
8
  * - Coverage regressions
9
- * - Quality metric regressions
9
+ *
10
+ * #1028: every figure comes from measured evidence — the stamped
11
+ * `coverage:latest` record and the latest testsPassing quality evidence (with
12
+ * its run's recorded result). Nothing measured → nothing stored or compared.
10
13
  */
11
14
  import { BaseWorker } from '../base-worker.js';
15
+ import { measuredCoverageSummary, } from '../../domains/quality-assessment/coverage-report-event.js';
16
+ import { readQualityEvidenceRecord } from '../../domains/quality-assessment/quality-evidence.js';
12
17
  const CONFIG = {
13
18
  id: 'regression-monitor',
14
19
  name: 'Regression Monitor',
@@ -21,6 +26,74 @@ const CONFIG = {
21
26
  retryCount: 2,
22
27
  retryDelayMs: 10000,
23
28
  };
29
+ const BASELINE_KEY = 'regression:baseline';
30
+ const HISTORY_KEY = 'regression:history';
31
+ const BASELINE_SCHEMA_VERSION = 2;
32
+ const isPercent = (v) => typeof v === 'number' && Number.isFinite(v) && v >= 0 && v <= 100;
33
+ /** Two decimals, for reporting measured figures. */
34
+ const round = (v) => Math.round(v * 100) / 100;
35
+ /** The stored snapshot when it is a measured baseline, else `null` (#1028). */
36
+ function measuredBaseline(raw) {
37
+ if (!raw || typeof raw !== 'object')
38
+ return null;
39
+ const r = raw;
40
+ if (r.measured !== true || r.schemaVersion !== BASELINE_SCHEMA_VERSION)
41
+ return null;
42
+ const coverage = r.coverage === null ? null : measuredCoverageSummary(r.coverage);
43
+ if (r.coverage !== null && !coverage)
44
+ return null;
45
+ const tests = r.tests === null ? null : measuredTests(r.tests);
46
+ if (r.tests !== null && !tests)
47
+ return null;
48
+ if (!coverage && !tests)
49
+ return null;
50
+ return {
51
+ measured: true,
52
+ schemaVersion: BASELINE_SCHEMA_VERSION,
53
+ timestamp: typeof r.timestamp === 'string' ? r.timestamp : '',
54
+ coverage,
55
+ tests,
56
+ };
57
+ }
58
+ function measuredTests(raw) {
59
+ if (!raw || typeof raw !== 'object')
60
+ return null;
61
+ const t = raw;
62
+ if (!isPercent(t.passRate) || typeof t.measuredAt !== 'string' || typeof t.source !== 'string')
63
+ return null;
64
+ const failedTests = Array.isArray(t.failedTests) && t.failedTests.every((n) => typeof n === 'string')
65
+ ? t.failedTests : null;
66
+ const avg = t.avgTestDurationMs;
67
+ return {
68
+ testSet: parseTestSet(t.testSet),
69
+ passRate: t.passRate,
70
+ runId: typeof t.runId === 'string' ? t.runId : null,
71
+ runStatus: t.runStatus === 'passed' || t.runStatus === 'failed' ? t.runStatus : null,
72
+ measuredAt: t.measuredAt,
73
+ source: t.source,
74
+ failedTests,
75
+ avgTestDurationMs: typeof avg === 'number' && Number.isFinite(avg) && avg >= 0 ? avg : null,
76
+ };
77
+ }
78
+ /** A recorded test set `{ total, files }`, or `null`. */
79
+ function parseTestSet(raw) {
80
+ if (!raw || typeof raw !== 'object')
81
+ return null;
82
+ const r = raw;
83
+ const { total } = r;
84
+ if (typeof total !== 'number' || !Number.isInteger(total) || total <= 0)
85
+ return null;
86
+ const files = testFileList(r.files);
87
+ return files ? { total, files } : null;
88
+ }
89
+ /** A non-empty list of test file names, sorted and de-duplicated, or `null`. */
90
+ function testFileList(raw) {
91
+ if (!Array.isArray(raw) || raw.length === 0 || !raw.every((f) => typeof f === 'string'))
92
+ return null;
93
+ return [...new Set(raw)].sort();
94
+ }
95
+ const sameTestSet = (a, b) => a !== null && b !== null && a.total === b.total
96
+ && a.files.length === b.files.length && a.files.every((f, i) => f === b.files[i]);
24
97
  export class RegressionMonitorWorker extends BaseWorker {
25
98
  constructor() {
26
99
  super(CONFIG);
@@ -30,139 +103,235 @@ export class RegressionMonitorWorker extends BaseWorker {
30
103
  context.logger.info('Starting regression monitoring');
31
104
  const findings = [];
32
105
  const recommendations = [];
33
- // Get current snapshot
34
- const currentSnapshot = await this.collectCurrentSnapshot(context);
35
- // Get baseline (previous snapshot)
36
- const baseline = await context.memory.get('regression:baseline');
37
- // Detect regressions
106
+ // #1028: only measured figures — never a hardcoded or estimated snapshot.
107
+ const current = await this.collectCurrentSnapshot(context);
108
+ // A baseline counts only with the measured stamp: the invented snapshot
109
+ // older versions stored is ignored (left in place, never compared).
110
+ const storedBaseline = await context.memory.get(BASELINE_KEY);
111
+ const baseline = measuredBaseline(storedBaseline);
112
+ const baselineStatus = this.baselineStatus(storedBaseline, baseline);
113
+ if (baselineStatus === 'legacy-ignored') {
114
+ context.logger.info('Ignoring a regression:baseline without the measured stamp (written by <= 3.15.5)');
115
+ }
116
+ else if (baselineStatus === 'invalid-ignored') {
117
+ context.logger.warn('Ignoring a malformed measured regression:baseline');
118
+ }
38
119
  let regressions = [];
39
- if (baseline) {
40
- regressions = this.detectRegressions(baseline, currentSnapshot);
120
+ let metricsCompared = 0;
121
+ if (baseline && current) {
122
+ ({ regressions, metricsCompared } = this.detectRegressions(baseline, current));
41
123
  this.analyzeRegressions(regressions, findings, recommendations);
42
124
  }
43
- // Store current as new baseline
44
- await context.memory.set('regression:baseline', currentSnapshot);
45
- // Store regression history
46
- const history = await context.memory.get('regression:history') || [];
125
+ if (current) {
126
+ // A side not measured now keeps its last measured value: an estimate or
127
+ // a missing run neither erases the baseline nor gets compared.
128
+ const next = {
129
+ ...current,
130
+ coverage: current.coverage ?? baseline?.coverage ?? null,
131
+ tests: current.tests ?? baseline?.tests ?? null,
132
+ };
133
+ await context.memory.set(BASELINE_KEY, next);
134
+ }
135
+ else {
136
+ findings.push({
137
+ type: 'regression-unmeasured',
138
+ severity: 'info',
139
+ domain: 'quality-assessment',
140
+ title: 'Regression Baseline Unmeasured',
141
+ description: 'No measured coverage (stamped coverage:latest) and no current testsPassing evidence exist, ' +
142
+ 'so nothing was stored or compared. Run the tests (with coverage) to start regression tracking.',
143
+ });
144
+ }
47
145
  if (regressions.length > 0) {
48
- history.push(...regressions);
146
+ const detectedAt = new Date().toISOString();
147
+ const stored = await context.memory.get(HISTORY_KEY);
148
+ const history = Array.isArray(stored) ? stored : [];
149
+ history.push(...regressions.map((r) => ({ ...r, measured: true, detectedAt })));
49
150
  // Keep last 100 regressions
50
151
  while (history.length > 100)
51
152
  history.shift();
52
- await context.memory.set('regression:history', history);
153
+ await context.memory.set(HISTORY_KEY, history);
53
154
  }
54
155
  const healthScore = this.calculateHealthScore(regressions);
55
156
  context.logger.info('Regression monitoring complete', {
56
157
  healthScore,
158
+ measured: current !== null,
159
+ baselineStatus,
57
160
  regressionsDetected: regressions.length,
58
161
  });
162
+ const pct = (v) => (v === null ? 'n/a' : `${round(v)}%`);
163
+ const tests = current?.tests ?? null;
164
+ const coverage = current?.coverage ?? null;
59
165
  return this.createResult(Date.now() - startTime, {
60
- itemsAnalyzed: 5, // Number of metrics checked
166
+ itemsAnalyzed: metricsCompared,
61
167
  issuesFound: regressions.length,
62
168
  healthScore,
63
169
  trend: regressions.length > 0 ? 'degrading' : 'stable',
64
170
  domainMetrics: {
65
- testPassRate: `${currentSnapshot.testPassRate}%`,
66
- lineCoverage: `${currentSnapshot.coverage.line}%`,
67
- avgTestDuration: `${currentSnapshot.avgTestDuration}ms`,
68
- qualityScore: currentSnapshot.qualityScore,
171
+ baselineStatus,
172
+ testPassRate: tests ? pct(tests.passRate) : 'unmeasured',
173
+ lineCoverage: coverage ? pct(coverage.line) : 'unmeasured',
174
+ branchCoverage: coverage ? pct(coverage.branch) : 'unmeasured',
175
+ avgTestDuration: tests && tests.avgTestDurationMs !== null ? `${round(tests.avgTestDurationMs)}ms` : 'unmeasured',
69
176
  regressionsDetected: regressions.length,
70
177
  },
71
178
  }, findings, recommendations);
72
179
  }
73
- async collectCurrentSnapshot(_context) {
74
- // In a real implementation, this would query actual metrics
180
+ /** Why a stored baseline is (not) used: absent, legacy (unstamped), stamped but malformed, or measured. */
181
+ baselineStatus(stored, baseline) {
182
+ if (baseline)
183
+ return 'measured';
184
+ if (stored === undefined || stored === null)
185
+ return 'none';
186
+ const stamped = typeof stored === 'object' && stored.measured === true;
187
+ return stamped ? 'invalid-ignored' : 'legacy-ignored';
188
+ }
189
+ /**
190
+ * #1028: the current snapshot from measured sources only — the stamped
191
+ * `coverage:latest` (same validator as the coverage tracker and the quality
192
+ * gate) and the latest usable testsPassing evidence (same validation as the
193
+ * gate) with that run's recorded `test-run:<runId>` result. `null` when
194
+ * nothing is measured.
195
+ */
196
+ async collectCurrentSnapshot(context) {
197
+ const coverage = measuredCoverageSummary(await context.memory.get('coverage:latest'));
198
+ const tests = await this.collectMeasuredTests(context);
199
+ if (!coverage && !tests)
200
+ return null;
75
201
  return {
76
- timestamp: new Date(),
77
- testPassRate: 98.2,
78
- coverage: {
79
- line: 78.5,
80
- branch: 65.2,
81
- },
82
- avgTestDuration: 245,
83
- failedTests: [
84
- 'test-execution/retry-handler.test.ts::should retry failed tests',
85
- 'coordination/workflow.test.ts::should handle concurrent workflows',
86
- ],
87
- qualityScore: 82,
202
+ measured: true,
203
+ schemaVersion: BASELINE_SCHEMA_VERSION,
204
+ timestamp: new Date().toISOString(),
205
+ coverage,
206
+ tests,
88
207
  };
89
208
  }
90
- detectRegressions(baseline, current) {
91
- const regressions = [];
92
- // Test pass rate regression
93
- if (current.testPassRate < baseline.testPassRate - 1) {
94
- const change = current.testPassRate - baseline.testPassRate;
95
- regressions.push({
96
- type: 'test',
97
- metric: 'testPassRate',
98
- previousValue: baseline.testPassRate,
99
- currentValue: current.testPassRate,
100
- changePercent: change,
101
- severity: change < -5 ? 'critical' : change < -2 ? 'high' : 'medium',
102
- affectedTests: current.failedTests,
103
- });
104
- }
105
- // Coverage regression
106
- if (current.coverage.line < baseline.coverage.line - 2) {
107
- const change = current.coverage.line - baseline.coverage.line;
108
- regressions.push({
109
- type: 'coverage',
110
- metric: 'lineCoverage',
111
- previousValue: baseline.coverage.line,
112
- currentValue: current.coverage.line,
113
- changePercent: change,
114
- severity: change < -5 ? 'high' : 'medium',
115
- });
116
- }
117
- if (current.coverage.branch < baseline.coverage.branch - 3) {
118
- const change = current.coverage.branch - baseline.coverage.branch;
119
- regressions.push({
120
- type: 'coverage',
121
- metric: 'branchCoverage',
122
- previousValue: baseline.coverage.branch,
123
- currentValue: current.coverage.branch,
124
- changePercent: change,
125
- severity: change < -5 ? 'high' : 'medium',
126
- });
127
- }
128
- // Performance regression
129
- const durationChange = ((current.avgTestDuration - baseline.avgTestDuration) / baseline.avgTestDuration) * 100;
130
- if (durationChange > 20) {
131
- regressions.push({
132
- type: 'performance',
133
- metric: 'avgTestDuration',
134
- previousValue: baseline.avgTestDuration,
135
- currentValue: current.avgTestDuration,
136
- changePercent: durationChange,
137
- severity: durationChange > 50 ? 'high' : 'medium',
209
+ async collectMeasuredTests(context) {
210
+ const evidence = await readQualityEvidenceRecord(context.memory, 'testsPassing');
211
+ if (!evidence || !isPercent(evidence.value))
212
+ return null;
213
+ let failedTests = null;
214
+ let avgTestDurationMs = null;
215
+ let testSet = null;
216
+ if (evidence.runId) {
217
+ const run = await context.memory.get(`test-run:${evidence.runId}`, {
218
+ namespace: 'test-execution',
138
219
  });
220
+ if (run && typeof run === 'object') {
221
+ if (Array.isArray(run.failedTests)) {
222
+ failedTests = run.failedTests
223
+ .map((t) => (t && typeof t === 'object' ? t.testName : undefined))
224
+ .filter((n) => typeof n === 'string');
225
+ }
226
+ const { total, duration } = run;
227
+ if (typeof total === 'number' && total > 0 && typeof duration === 'number' && Number.isFinite(duration) && duration >= 0) {
228
+ avgTestDurationMs = duration / total;
229
+ }
230
+ testSet = parseTestSet({ total, files: run.testFiles });
231
+ }
139
232
  }
140
- // Quality score regression
141
- if (current.qualityScore < baseline.qualityScore - 5) {
142
- const change = current.qualityScore - baseline.qualityScore;
143
- regressions.push({
144
- type: 'quality',
145
- metric: 'qualityScore',
146
- previousValue: baseline.qualityScore,
147
- currentValue: current.qualityScore,
148
- changePercent: change,
149
- severity: change < -10 ? 'critical' : change < -5 ? 'high' : 'medium',
150
- });
233
+ return {
234
+ passRate: evidence.value,
235
+ runId: evidence.runId ?? null,
236
+ runStatus: evidence.runStatus ?? null,
237
+ measuredAt: evidence.measuredAt,
238
+ source: evidence.source,
239
+ failedTests,
240
+ avgTestDurationMs,
241
+ testSet,
242
+ };
243
+ }
244
+ /**
245
+ * Compare two measured snapshots. A metric is compared only when both sides
246
+ * measured it; an uncollected (`null`) metric is never compared (#1028).
247
+ */
248
+ detectRegressions(baseline, current) {
249
+ const regressions = [];
250
+ let metricsCompared = 0;
251
+ const prevTests = baseline.tests;
252
+ const curTests = current.tests;
253
+ if (prevTests && curTests) {
254
+ metricsCompared++;
255
+ if (curTests.passRate < prevTests.passRate - 1) {
256
+ const change = curTests.passRate - prevTests.passRate;
257
+ regressions.push({
258
+ type: 'test',
259
+ metric: 'testPassRate',
260
+ previousValue: round(prevTests.passRate),
261
+ currentValue: round(curTests.passRate),
262
+ changePercent: change,
263
+ severity: change < -5 ? 'critical' : change < -2 ? 'high' : 'medium',
264
+ ...(curTests.failedTests ? { affectedTests: curTests.failedTests } : {}),
265
+ });
266
+ }
267
+ if (prevTests.failedTests && curTests.failedTests) {
268
+ metricsCompared++;
269
+ const known = new Set(prevTests.failedTests);
270
+ const newFailures = curTests.failedTests.filter((t) => !known.has(t));
271
+ if (newFailures.length > 0) {
272
+ regressions.push({
273
+ type: 'test',
274
+ metric: 'newFailures',
275
+ previousValue: 0,
276
+ currentValue: newFailures.length,
277
+ changePercent: 100,
278
+ severity: newFailures.length > 5 ? 'critical' : newFailures.length > 2 ? 'high' : 'medium',
279
+ affectedTests: newFailures,
280
+ });
281
+ }
282
+ }
283
+ // #1028 N1: the recorded duration is the run's wall time, runner start-up
284
+ // included, and the runner records no per-test durations for passing
285
+ // tests. Per-test time is comparable only between runs of the same test
286
+ // set; across different sets it mostly measures overhead.
287
+ const prevAvg = prevTests.avgTestDurationMs;
288
+ const curAvg = curTests.avgTestDurationMs;
289
+ if (prevAvg !== null && curAvg !== null && prevAvg > 0 && sameTestSet(prevTests.testSet, curTests.testSet)) {
290
+ metricsCompared++;
291
+ const durationChange = ((curAvg - prevAvg) / prevAvg) * 100;
292
+ if (durationChange > 20) {
293
+ regressions.push({
294
+ type: 'performance',
295
+ metric: 'avgTestDuration',
296
+ previousValue: round(prevAvg),
297
+ currentValue: round(curAvg),
298
+ changePercent: durationChange,
299
+ severity: durationChange > 50 ? 'high' : 'medium',
300
+ });
301
+ }
302
+ }
151
303
  }
152
- // New test failures
153
- const newFailures = current.failedTests.filter(t => !baseline.failedTests.includes(t));
154
- if (newFailures.length > 0) {
155
- regressions.push({
156
- type: 'test',
157
- metric: 'newFailures',
158
- previousValue: 0,
159
- currentValue: newFailures.length,
160
- changePercent: 100,
161
- severity: newFailures.length > 5 ? 'critical' : newFailures.length > 2 ? 'high' : 'medium',
162
- affectedTests: newFailures,
163
- });
304
+ const prevCov = baseline.coverage;
305
+ const curCov = current.coverage;
306
+ if (prevCov && curCov) {
307
+ metricsCompared++;
308
+ if (curCov.line < prevCov.line - 2) {
309
+ const change = curCov.line - prevCov.line;
310
+ regressions.push({
311
+ type: 'coverage',
312
+ metric: 'lineCoverage',
313
+ previousValue: prevCov.line,
314
+ currentValue: curCov.line,
315
+ changePercent: change,
316
+ severity: change < -5 ? 'high' : 'medium',
317
+ });
318
+ }
319
+ if (prevCov.branch !== null && curCov.branch !== null) {
320
+ metricsCompared++;
321
+ if (curCov.branch < prevCov.branch - 3) {
322
+ const change = curCov.branch - prevCov.branch;
323
+ regressions.push({
324
+ type: 'coverage',
325
+ metric: 'branchCoverage',
326
+ previousValue: prevCov.branch,
327
+ currentValue: curCov.branch,
328
+ changePercent: change,
329
+ severity: change < -5 ? 'high' : 'medium',
330
+ });
331
+ }
332
+ }
164
333
  }
165
- return regressions;
334
+ return { regressions, metricsCompared };
166
335
  }
167
336
  analyzeRegressions(regressions, findings, recommendations) {
168
337
  for (const regression of regressions) {
@@ -174,6 +343,7 @@ export class RegressionMonitorWorker extends BaseWorker {
174
343
  title: `${this.formatMetricName(regression.metric)} Regression Detected`,
175
344
  description: this.formatRegressionDescription(regression),
176
345
  context: {
346
+ metric: regression.metric,
177
347
  previousValue: regression.previousValue,
178
348
  currentValue: regression.currentValue,
179
349
  changePercent: regression.changePercent.toFixed(2),
@@ -223,17 +393,7 @@ export class RegressionMonitorWorker extends BaseWorker {
223
393
  }
224
394
  }
225
395
  getDomainForType(type) {
226
- switch (type) {
227
- case 'test':
228
- case 'performance':
229
- return 'test-execution';
230
- case 'coverage':
231
- return 'coverage-analysis';
232
- case 'quality':
233
- return 'quality-assessment';
234
- default:
235
- return 'quality-assessment';
236
- }
396
+ return type === 'coverage' ? 'coverage-analysis' : 'test-execution';
237
397
  }
238
398
  formatMetricName(metric) {
239
399
  const names = {
@@ -241,7 +401,6 @@ export class RegressionMonitorWorker extends BaseWorker {
241
401
  lineCoverage: 'Line Coverage',
242
402
  branchCoverage: 'Branch Coverage',
243
403
  avgTestDuration: 'Test Duration',
244
- qualityScore: 'Quality Score',
245
404
  newFailures: 'New Test Failures',
246
405
  };
247
406
  return names[metric] || metric;
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Agentic QE v3 - security-scan worker: recorded scan parsing (#1043, #1049)
3
+ *
4
+ * Parses the `security:scan:<id>` records the security-compliance domain writes
5
+ * (OSV dependency scans and SAST scans) into what the security-scan worker
6
+ * reports. Nothing is filled in: a field a record does not carry stays absent.
7
+ */
8
+ export declare const SCHEMA_VERSION = 1;
9
+ /** The dependency scanner keeps its records for 7 days; nothing older is current. */
10
+ export declare const MAX_SCAN_AGE_MS: number;
11
+ export type Severity = 'critical' | 'high' | 'medium' | 'low' | 'informational';
12
+ export declare const SEVERITIES: readonly Severity[];
13
+ export declare const CVE_ID: RegExp;
14
+ export interface ScanCounts {
15
+ critical: number;
16
+ high: number;
17
+ medium: number;
18
+ low: number;
19
+ informational: number;
20
+ }
21
+ /** A vulnerability as a recorded scan reported it; nothing is filled in. */
22
+ export interface ReportedVulnerability {
23
+ severity: Severity;
24
+ title: string;
25
+ description: string;
26
+ category: string;
27
+ /** Dependency name (dependency scan) — only when the record names it. */
28
+ package?: string;
29
+ /** `file:line` (SAST) — only when the record locates it. */
30
+ location?: string;
31
+ /** CVE id exactly as the advisory carried it; absent when it carried none. */
32
+ cve?: string;
33
+ fixedIn?: string;
34
+ references: string[];
35
+ }
36
+ export interface RecordedScan {
37
+ scanId: string;
38
+ scannedAt: string;
39
+ summary: ScanCounts;
40
+ /** Vulnerabilities the record lists (SAST keeps only critical/high). */
41
+ vulnerabilities: ReportedVulnerability[];
42
+ /** Total the scan found, including ones the record does not list. */
43
+ total: number;
44
+ }
45
+ /** A package the OSV lookup could not check (#1049 record contract). */
46
+ export interface UncheckedPackage {
47
+ name: string;
48
+ version: string;
49
+ reason: string;
50
+ }
51
+ /**
52
+ * A dependency scan whose OSV lookup was not complete (#1049): `incomplete`,
53
+ * `failed`, or a pre-#1049 record without `status` — which cannot be told
54
+ * apart from a failed lookup recorded as clean. Never "0 vulnerabilities".
55
+ */
56
+ export interface IncompleteDependencyScan {
57
+ scan: RecordedScan;
58
+ status: 'incomplete' | 'failed' | 'unknown';
59
+ error?: string;
60
+ uncheckedPackages: UncheckedPackage[];
61
+ /** Packages the lookup did check, when the record states it. */
62
+ packagesChecked?: number;
63
+ }
64
+ /** The `security:lastScan` record: only scans that actually ran (#1043). */
65
+ export interface MeasuredSecurityScan {
66
+ measured: true;
67
+ schemaVersion: typeof SCHEMA_VERSION;
68
+ evaluatedAt: string;
69
+ dependency: (RecordedScan & {
70
+ source: 'osv';
71
+ }) | null;
72
+ code: (RecordedScan & {
73
+ source: 'sast';
74
+ }) | null;
75
+ }
76
+ export declare const isCount: (v: unknown) => v is number;
77
+ export declare const isRecord: (v: unknown) => v is Record<string, unknown>;
78
+ export declare function parseCounts(raw: unknown): ScanCounts | null;
79
+ /** `scannedAt` when the record's timestamp is valid, not in the future and within the scanner's retention. */
80
+ export declare function parseScannedAt(raw: unknown, now: number): string | null;
81
+ export declare function parseVulnerability(raw: unknown, kind: 'dependency' | 'sast'): ReportedVulnerability | null;
82
+ export declare function parseUnchecked(raw: unknown): UncheckedPackage[];
83
+ /**
84
+ * #1049: a dependency scan is a measurement only when its OSV lookup checked
85
+ * every requested package (`measured: true` and `status: 'complete'`).
86
+ */
87
+ export declare function dependencyCompleteness(raw: Record<string, unknown>): {
88
+ complete: true;
89
+ } | {
90
+ complete: false;
91
+ status: IncompleteDependencyScan['status'];
92
+ error?: string;
93
+ uncheckedPackages: UncheckedPackage[];
94
+ packagesChecked?: number;
95
+ };
96
+ export declare const SEVERITY_LABEL: Record<Severity, string>;
97
+ /** Health penalty for the real critical/high advisories of a partial dependency scan (#1049). */
98
+ export declare function partialDependencyPenalty(incomplete: IncompleteDependencyScan | null): number;
99
+ /** What a partial dependency scan did check; the dependency totals stay 'unmeasured' (#1049). */
100
+ export declare function partialDependencyMetrics(incomplete: IncompleteDependencyScan | null): Record<string, number>;
101
+ export type ParsedScan = {
102
+ kind: 'sast';
103
+ scan: RecordedScan;
104
+ } | {
105
+ kind: 'dependency';
106
+ scan: RecordedScan;
107
+ completeness: ReturnType<typeof dependencyCompleteness>;
108
+ };
109
+ /** A recorded dependency (OSV) or SAST scan, or `null` when the record is not one. */
110
+ export declare function parseRecordedScan(raw: unknown, now: number): ParsedScan | null;
111
+ //# sourceMappingURL=security-scan-records.d.ts.map