agentic-qe 3.15.4 → 3.15.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (556) hide show
  1. package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  2. package/.claude/skills/qe-court/evals/qe-court.yaml +3 -2
  3. package/.claude/skills/qe-quality-assessment/schemas/output.json +12 -2
  4. package/.claude/skills/skills-manifest.json +1 -1
  5. package/CHANGELOG.md +191 -0
  6. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  7. package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
  8. package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
  9. package/assets/skills/skills-manifest.json +1 -1
  10. package/dist/bridge/captured-experience-bridge.js +7 -9
  11. package/dist/cli/bundle.js +5 -5
  12. package/dist/cli/chunks/adapter-PP3XIXDV.js +2 -0
  13. package/dist/cli/chunks/{agent-booster-wasm-MHJBRXMK.js → agent-booster-wasm-SY7UCLBL.js} +2 -2
  14. package/dist/cli/chunks/{agent-handler-G64SD7J2.js → agent-handler-KAMYBU3S.js} +2 -2
  15. package/dist/cli/chunks/{agent-memory-branch-G4UXFPKH.js → agent-memory-branch-2CAW3KUM.js} +2 -2
  16. package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +2 -0
  17. package/dist/cli/chunks/{arena-63M3M6EW.js → arena-4OFLJ3R2.js} +2 -2
  18. package/dist/cli/chunks/{arena-QJMKYPHS.js → arena-QCCVIOAH.js} +4 -4
  19. package/dist/cli/chunks/{audit-UDFVTWSX.js → audit-RBDQJQJB.js} +3 -3
  20. package/dist/cli/chunks/base-QSYWWPCE.js +2 -0
  21. package/dist/cli/chunks/{better-sqlite3-JLX2G56I.js → better-sqlite3-5JRACCDQ.js} +2 -2
  22. package/dist/cli/chunks/{brain-handler-PWF32LLW.js → brain-handler-W4QIIRT4.js} +3 -3
  23. package/dist/cli/chunks/{branch-enumerator-PB7QWXDP.js → branch-enumerator-IBNGI572.js} +2 -2
  24. package/dist/cli/chunks/{browser-CYNV2F3U.js → browser-GMSCVAOI.js} +2 -2
  25. package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +2 -0
  26. package/dist/cli/chunks/{chunk-S5D3HCGN.js → chunk-22OZIJAD.js} +2 -2
  27. package/dist/cli/chunks/{chunk-NBMQOP2R.js → chunk-24ZSGYC6.js} +1 -1
  28. package/dist/cli/chunks/{chunk-HFSBONCS.js → chunk-2CIDFR2H.js} +3 -3
  29. package/dist/cli/chunks/{chunk-A4OPQJ4A.js → chunk-2IWPJUVV.js} +5 -5
  30. package/dist/cli/chunks/{chunk-RI4JPBZD.js → chunk-2ZTWPMTK.js} +2 -2
  31. package/dist/cli/chunks/{chunk-ZURYZEHX.js → chunk-34MDMFET.js} +2 -2
  32. package/dist/cli/chunks/chunk-3DJNKNBR.js +742 -0
  33. package/dist/cli/chunks/{chunk-GJVRQBLI.js → chunk-3NJ7O3OH.js} +2 -2
  34. package/dist/cli/chunks/chunk-45MVRQG4.js +2 -0
  35. package/dist/cli/chunks/chunk-46HBVDMU.js +2 -0
  36. package/dist/cli/chunks/{chunk-SCL2OYN7.js → chunk-47Q7JL3V.js} +2 -2
  37. package/dist/cli/chunks/chunk-4CLDYT36.js +2 -0
  38. package/dist/cli/chunks/{chunk-3ZIVBTX6.js → chunk-4KOVHQXK.js} +2 -2
  39. package/dist/cli/chunks/{chunk-BBKLVHDQ.js → chunk-4POOJYXA.js} +1 -1
  40. package/dist/cli/chunks/{chunk-DAYMT7TH.js → chunk-5DH5QI7G.js} +26 -26
  41. package/dist/cli/chunks/{chunk-2534PXIV.js → chunk-5GIJU2ZY.js} +2 -2
  42. package/dist/cli/chunks/{chunk-MBV57LKC.js → chunk-5HAPS6VD.js} +2 -2
  43. package/dist/cli/chunks/{chunk-NIJMLEAX.js → chunk-5LST62QR.js} +2 -2
  44. package/dist/cli/chunks/{chunk-33IUCP34.js → chunk-5MT7DMD7.js} +2 -2
  45. package/dist/cli/chunks/{chunk-LRTF5RMG.js → chunk-5NC7QEJ6.js} +4 -4
  46. package/dist/cli/chunks/{chunk-SJB4KMZS.js → chunk-5UPIL62W.js} +3 -3
  47. package/dist/cli/chunks/{chunk-76PRW2KY.js → chunk-5VUIXDY2.js} +2 -2
  48. package/dist/cli/chunks/chunk-5VZVMO7B.js +3 -0
  49. package/dist/cli/chunks/{chunk-J3RNVHDH.js → chunk-624QRKQX.js} +1 -1
  50. package/dist/cli/chunks/{chunk-N6CRIUTO.js → chunk-66NW3ZB4.js} +2 -2
  51. package/dist/cli/chunks/{chunk-PCWZCXBD.js → chunk-6HWARQWV.js} +2 -2
  52. package/dist/cli/chunks/{chunk-VAXQUD5G.js → chunk-6MXAJBEA.js} +1 -1
  53. package/dist/cli/chunks/{chunk-LOLAEDZD.js → chunk-6R3FBFCJ.js} +2 -2
  54. package/dist/cli/chunks/{chunk-ASKPTGUU.js → chunk-6RDVY26I.js} +2 -2
  55. package/dist/cli/chunks/{chunk-35A22AUL.js → chunk-6T6AHVLF.js} +1 -1
  56. package/dist/cli/chunks/{chunk-IKWAPHJA.js → chunk-6WOZUSSN.js} +2 -2
  57. package/dist/cli/chunks/chunk-72MQCZSM.js +2 -0
  58. package/dist/cli/chunks/chunk-7QVPMH25.js +3 -0
  59. package/dist/cli/chunks/{chunk-5H7MR6HP.js → chunk-7SAMMQVS.js} +1 -1
  60. package/dist/cli/chunks/{chunk-B7J3O2WM.js → chunk-7TJZDRDU.js} +1 -1
  61. package/dist/cli/chunks/{chunk-OFQDM73J.js → chunk-7TVIX4WL.js} +2 -2
  62. package/dist/cli/chunks/{chunk-SZWXUG36.js → chunk-7VTKR44N.js} +2 -2
  63. package/dist/cli/chunks/{chunk-5B5D5KCV.js → chunk-7XTANLTN.js} +1 -1
  64. package/dist/cli/chunks/chunk-7XUB7U6Z.js +4 -0
  65. package/dist/cli/chunks/{chunk-GAXTPQCZ.js → chunk-A74J23QB.js} +2 -2
  66. package/dist/cli/chunks/{chunk-K2VUYRMG.js → chunk-A7ANPS4E.js} +2 -2
  67. package/dist/cli/chunks/{chunk-WO4NSPLX.js → chunk-AJT3XDRD.js} +2 -2
  68. package/dist/cli/chunks/{chunk-LPSE6DOQ.js → chunk-ALCIUWFC.js} +1 -1
  69. package/dist/cli/chunks/{chunk-UK5HY6LC.js → chunk-AUN4FG7V.js} +1 -1
  70. package/dist/cli/chunks/{chunk-MGH4XIHH.js → chunk-AUOSHM63.js} +2 -2
  71. package/dist/cli/chunks/{chunk-HX5KQK7I.js → chunk-AX26QJ6T.js} +2 -2
  72. package/dist/cli/chunks/{chunk-BZWZTGMF.js → chunk-B7RHBKHL.js} +2 -2
  73. package/dist/cli/chunks/{chunk-I5A3HGO6.js → chunk-BAYGQRNP.js} +2 -2
  74. package/dist/cli/chunks/{chunk-3C2BFLYC.js → chunk-BIXRTOH3.js} +18 -18
  75. package/dist/cli/chunks/{chunk-EWUFVWRT.js → chunk-BO7UFNYV.js} +2 -2
  76. package/dist/cli/chunks/{chunk-6TMUZGM2.js → chunk-BUTGIVKW.js} +1 -1
  77. package/dist/cli/chunks/{chunk-2MU4WCMQ.js → chunk-BXATKI5S.js} +2 -2
  78. package/dist/cli/chunks/{chunk-HEDLZWPM.js → chunk-CCL436IU.js} +44 -33
  79. package/dist/cli/chunks/{chunk-6EHVPFHW.js → chunk-CEXNW5TR.js} +1 -1
  80. package/dist/cli/chunks/{chunk-2ICC4H6K.js → chunk-CLAMMGY3.js} +2 -2
  81. package/dist/cli/chunks/{chunk-BPGFCUDO.js → chunk-CR66HNAE.js} +1 -1
  82. package/dist/cli/chunks/{chunk-CFXFGQEN.js → chunk-CZBIREL5.js} +2 -2
  83. package/dist/cli/chunks/{chunk-Z56QTRRB.js → chunk-D5N2O5EH.js} +2 -2
  84. package/dist/cli/chunks/{chunk-M6SJALLA.js → chunk-DA7DGDTI.js} +2 -2
  85. package/dist/cli/chunks/{chunk-R47LNH5W.js → chunk-DLSFT6PO.js} +2 -2
  86. package/dist/cli/chunks/{chunk-6HTO4BLV.js → chunk-DQNUPEY5.js} +2 -2
  87. package/dist/cli/chunks/{chunk-XZ5Z56OP.js → chunk-EECF4CMA.js} +1 -1
  88. package/dist/cli/chunks/{chunk-DFJGXXCL.js → chunk-EF5UHDCG.js} +1 -1
  89. package/dist/cli/chunks/{chunk-PJAXWCFC.js → chunk-EJ4KZFZN.js} +1 -1
  90. package/dist/cli/chunks/{chunk-RA3MI5WK.js → chunk-ELI4GDQO.js} +2 -2
  91. package/dist/cli/chunks/{chunk-BND6M2JX.js → chunk-F3KS3TAB.js} +2 -2
  92. package/dist/cli/chunks/{chunk-RB2SL5GD.js → chunk-F7A2UBZO.js} +2 -2
  93. package/dist/cli/chunks/{chunk-X5S5UEM6.js → chunk-FOJRPEIP.js} +2 -2
  94. package/dist/cli/chunks/{chunk-ZP6ANUP7.js → chunk-FQ5N666N.js} +1 -1
  95. package/dist/cli/chunks/{chunk-LZSLJJII.js → chunk-FU7LNUD7.js} +2 -2
  96. package/dist/cli/chunks/{chunk-FDK2GF4G.js → chunk-GFB6BZWU.js} +2 -2
  97. package/dist/cli/chunks/{chunk-C5EN5WB6.js → chunk-GI5HWS4H.js} +1 -1
  98. package/dist/cli/chunks/{chunk-SIUUAKCE.js → chunk-GNYOHZVV.js} +1 -1
  99. package/dist/cli/chunks/{chunk-OOK6GPJR.js → chunk-GVRFSXY6.js} +2 -2
  100. package/dist/cli/chunks/{chunk-6QPW4OVH.js → chunk-GWM4M5NF.js} +1 -1
  101. package/dist/cli/chunks/{chunk-PMXWDTDK.js → chunk-HAN4MS5T.js} +2 -2
  102. package/dist/cli/chunks/{chunk-WW6WUMS7.js → chunk-HEGGV2PT.js} +2 -2
  103. package/dist/cli/chunks/{chunk-4GLR2S2M.js → chunk-HOEWMEF2.js} +2 -2
  104. package/dist/cli/chunks/{chunk-BY3IL56R.js → chunk-HZFK2Z2Z.js} +1 -1
  105. package/dist/cli/chunks/chunk-I7WAW7TM.js +2 -0
  106. package/dist/cli/chunks/{chunk-LXYTC62V.js → chunk-IEPWO4XP.js} +2 -2
  107. package/dist/cli/chunks/{chunk-3MSBVOYW.js → chunk-ITIJ23K2.js} +2 -2
  108. package/dist/cli/chunks/{chunk-PEA4DVXW.js → chunk-IVJIHZSM.js} +1 -1
  109. package/dist/cli/chunks/{chunk-P7GM3EE7.js → chunk-JAPBSSFY.js} +1 -1
  110. package/dist/cli/chunks/{chunk-SOSJFEFB.js → chunk-JCE76MPP.js} +2 -2
  111. package/dist/cli/chunks/{chunk-YZ2AGC7O.js → chunk-JPJEAK4G.js} +1 -1
  112. package/dist/cli/chunks/{chunk-RG67RZIX.js → chunk-JYKQVYX2.js} +2 -2
  113. package/dist/cli/chunks/{chunk-W6TJXK5Y.js → chunk-K55EAWZ5.js} +2 -2
  114. package/dist/cli/chunks/chunk-KCB6P463.js +3 -0
  115. package/dist/cli/chunks/{chunk-W3PPYNHF.js → chunk-KIDOBLUO.js} +2 -2
  116. package/dist/cli/chunks/{chunk-JL3TI43V.js → chunk-KYVIOC3C.js} +2 -2
  117. package/dist/cli/chunks/{chunk-WEDVLKRB.js → chunk-L2TDHJR3.js} +2 -2
  118. package/dist/cli/chunks/{chunk-5GWTJJEO.js → chunk-L4D3TPFP.js} +1 -1
  119. package/dist/cli/chunks/{chunk-PB2WSCBW.js → chunk-LAY7NCQK.js} +3 -3
  120. package/dist/cli/chunks/{chunk-T3BMCEQR.js → chunk-LCCTJ2PC.js} +2 -2
  121. package/dist/cli/chunks/{chunk-7INP6HZH.js → chunk-LJCEDTUM.js} +3 -3
  122. package/dist/cli/chunks/{chunk-DEJM2P5K.js → chunk-LMAEMVPA.js} +1 -1
  123. package/dist/cli/chunks/{chunk-HCDTLV5J.js → chunk-LZWJ5BMP.js} +2 -2
  124. package/dist/cli/chunks/{chunk-D7RVZ5C2.js → chunk-MP3FSUNB.js} +2 -2
  125. package/dist/cli/chunks/{chunk-ADF6LGHZ.js → chunk-MQCTLTGE.js} +2 -2
  126. package/dist/cli/chunks/{chunk-OHH6BUZK.js → chunk-MQTA6KIO.js} +1 -1
  127. package/dist/cli/chunks/{chunk-ISASRHZP.js → chunk-NBUXM5X6.js} +10 -6
  128. package/dist/cli/chunks/{chunk-KOLHZSEC.js → chunk-NHRF3V4B.js} +2 -2
  129. package/dist/cli/chunks/chunk-NMY4KTWA.js +16 -0
  130. package/dist/cli/chunks/chunk-NYS2GUNO.js +2 -0
  131. package/dist/cli/chunks/{chunk-EGHK6NMH.js → chunk-ONPPBLRB.js} +2 -2
  132. package/dist/cli/chunks/{chunk-YQ6BK7QC.js → chunk-OPDZBRIL.js} +2 -2
  133. package/dist/cli/chunks/{chunk-DPL4ZXTE.js → chunk-OQ4S6B7P.js} +1 -1
  134. package/dist/cli/chunks/{chunk-6HO3XRXE.js → chunk-ORBODZSO.js} +2 -2
  135. package/dist/cli/chunks/{chunk-GLKLEHK3.js → chunk-ORFL3YXB.js} +2 -2
  136. package/dist/cli/chunks/{chunk-I43QRLLB.js → chunk-P7DXVL2S.js} +2 -2
  137. package/dist/cli/chunks/chunk-PEMSXSP2.js +4 -0
  138. package/dist/cli/chunks/chunk-PS6WFCA4.js +6 -0
  139. package/dist/cli/chunks/{chunk-HEKCN5XQ.js → chunk-Q2RBOC7V.js} +2 -2
  140. package/dist/cli/chunks/{chunk-54XTJBHV.js → chunk-QLKUCMZC.js} +1 -1
  141. package/dist/cli/chunks/{chunk-3BDDOFYW.js → chunk-QLYO3H7E.js} +9 -9
  142. package/dist/cli/chunks/{chunk-VMSO6DMF.js → chunk-QS5KZYUZ.js} +2 -2
  143. package/dist/cli/chunks/{chunk-JFQDWAU3.js → chunk-R363XXGH.js} +2 -2
  144. package/dist/cli/chunks/chunk-RD5BYLN7.js +2 -0
  145. package/dist/cli/chunks/{chunk-73PCVMGA.js → chunk-RFDFET3O.js} +2 -2
  146. package/dist/cli/chunks/{chunk-LJRZAALA.js → chunk-RHIQ6QO5.js} +357 -351
  147. package/dist/cli/chunks/chunk-RLB7K7QP.js +2 -0
  148. package/dist/cli/chunks/{chunk-RJ5CZ7B6.js → chunk-RUTO67PT.js} +2 -2
  149. package/dist/cli/chunks/{chunk-DF4Y3HPO.js → chunk-RV6HSMKJ.js} +1 -1
  150. package/dist/cli/chunks/{chunk-54ITMOFM.js → chunk-SOSJWM3E.js} +4 -4
  151. package/dist/cli/chunks/{chunk-5SS2Z7JC.js → chunk-SV5BUYHH.js} +2 -2
  152. package/dist/cli/chunks/{chunk-XHCCH7UC.js → chunk-TL5GV3PR.js} +8 -8
  153. package/dist/cli/chunks/{chunk-ZKXZTIVF.js → chunk-TLUIO37P.js} +2 -2
  154. package/dist/cli/chunks/{chunk-2LL35V3A.js → chunk-TUDENMAE.js} +2 -2
  155. package/dist/cli/chunks/chunk-TVLOED6O.js +2 -0
  156. package/dist/cli/chunks/{chunk-2DRMTRBM.js → chunk-UB6DQGWM.js} +2 -2
  157. package/dist/cli/chunks/chunk-UHHMAKPE.js +3 -0
  158. package/dist/cli/chunks/{chunk-DBIK4OFX.js → chunk-ULCHPPW2.js} +1 -1
  159. package/dist/cli/chunks/chunk-V3OLS2NG.js +2 -0
  160. package/dist/cli/chunks/{chunk-I6E4X3L3.js → chunk-VAYZ5QIE.js} +1 -1
  161. package/dist/cli/chunks/{chunk-G3ZUB3HD.js → chunk-VCONCVSY.js} +3 -3
  162. package/dist/cli/chunks/{chunk-7X2IVMXN.js → chunk-VVF337SV.js} +2 -2
  163. package/dist/cli/chunks/{chunk-EY5IUF7U.js → chunk-WKDWRRDT.js} +2 -2
  164. package/dist/cli/chunks/{chunk-FRBCX46J.js → chunk-X2DR27AY.js} +2 -2
  165. package/dist/cli/chunks/{chunk-I53365HG.js → chunk-X33F7NXH.js} +3 -3
  166. package/dist/cli/chunks/{chunk-MVTUFPM2.js → chunk-XBEI2JBA.js} +2 -2
  167. package/dist/cli/chunks/{chunk-OG4KHX7S.js → chunk-XBFQJZWX.js} +2 -2
  168. package/dist/cli/chunks/{chunk-DVE5SM5G.js → chunk-XFPQIWEH.js} +3 -3
  169. package/dist/cli/chunks/{chunk-RWZ4F44Y.js → chunk-XPB5BVU6.js} +2 -2
  170. package/dist/cli/chunks/{chunk-TVQPYP2Z.js → chunk-XQ53PZEF.js} +3 -3
  171. package/dist/cli/chunks/{chunk-73MTUM6F.js → chunk-XZ46CI35.js} +2 -2
  172. package/dist/cli/chunks/chunk-YLNYPQDR.js +2 -0
  173. package/dist/cli/chunks/{chunk-BY5PLEPZ.js → chunk-YNG7E26C.js} +2 -2
  174. package/dist/cli/chunks/{chunk-YUWUFYHK.js → chunk-YXU35GGD.js} +1 -1
  175. package/dist/cli/chunks/{chunk-B7GJXQD2.js → chunk-ZCP4P6O2.js} +2 -2
  176. package/dist/cli/chunks/{chunk-LGA6J4I4.js → chunk-ZL5LJT7D.js} +2 -2
  177. package/dist/cli/chunks/{chunk-TB22Y3WW.js → chunk-ZOUEQ6DL.js} +1 -1
  178. package/dist/cli/chunks/{chunk-U2E5F3VZ.js → chunk-ZSBD4FUX.js} +2 -2
  179. package/dist/cli/chunks/chunk-ZTB32K5N.js +5 -0
  180. package/dist/cli/chunks/{chunk-WYO5VN2L.js → chunk-ZUTFHGEO.js} +1 -1
  181. package/dist/cli/chunks/ci-GEJCXMBK.js +81 -0
  182. package/dist/cli/chunks/ci-config-2ZVV4OXL.js +2 -0
  183. package/dist/cli/chunks/{ci-output-BMJABAEX.js → ci-output-E45OGVPR.js} +2 -2
  184. package/dist/cli/chunks/{circuit-breaker-GYD5CMJQ.js → circuit-breaker-X73ITYZC.js} +2 -2
  185. package/dist/cli/chunks/{claude-flow-setup-MMOYVBVD.js → claude-flow-setup-W4PPH46C.js} +2 -2
  186. package/dist/cli/chunks/client-6XKSQ4JT.js +2 -0
  187. package/dist/cli/chunks/{cline-installer-B2SOZ44R.js → cline-installer-NUEPMWDE.js} +2 -2
  188. package/dist/cli/chunks/{code-V3FIRAXD.js → code-6WQHBS7G.js} +4 -4
  189. package/dist/cli/chunks/{code-index-extractor-CV6A756Z.js → code-index-extractor-BXQIFIFT.js} +2 -2
  190. package/dist/cli/chunks/{codex-installer-EUC6J47Y.js → codex-installer-Z337R2KH.js} +2 -2
  191. package/dist/cli/chunks/{completions-DQQIBAHR.js → completions-F5DMYFHV.js} +2 -2
  192. package/dist/cli/chunks/{complexity-analyzer-HPXMXP5I.js → complexity-analyzer-W2SYPZDI.js} +2 -2
  193. package/dist/cli/chunks/{continuedev-installer-RCIYXH6V.js → continuedev-installer-ZCHUIFTN.js} +2 -2
  194. package/dist/cli/chunks/{copilot-installer-VUH32SHF.js → copilot-installer-M5JNODXF.js} +2 -2
  195. package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +2 -0
  196. package/dist/cli/chunks/{cost-tracker-YLCKLOAL.js → cost-tracker-LSYTHBHV.js} +2 -2
  197. package/dist/cli/chunks/coverage-PGMRS5SS.js +49 -0
  198. package/dist/cli/chunks/cross-domain-router-QVUPQ2SC.js +2 -0
  199. package/dist/cli/chunks/{cursor-installer-B42FN62K.js → cursor-installer-XPUA73UW.js} +2 -2
  200. package/dist/cli/chunks/{daemon-DECQRQII.js → daemon-ITKDIYMW.js} +5 -5
  201. package/dist/cli/chunks/daemon-QBYTCIMH.js +10 -0
  202. package/dist/cli/chunks/{dag-attention-scheduler-RY7CDYSC.js → dag-attention-scheduler-T55AXLD6.js} +2 -2
  203. package/dist/cli/chunks/{detect-NW53BMJN.js → detect-DR7J6K4O.js} +2 -2
  204. package/dist/cli/chunks/{dist-node-LE6KHXAB.js → dist-node-LAJJBOUT.js} +2 -2
  205. package/dist/cli/chunks/{domain-handler-JGXFT4LW.js → domain-handler-OMSHCRMK.js} +2 -2
  206. package/dist/cli/chunks/{domain-plugins-GY3RYKKK.js → domain-plugins-EQXSKC5K.js} +2 -2
  207. package/dist/cli/chunks/{domain-transfer-CGBRXNTC.js → domain-transfer-FKRAGVSW.js} +2 -2
  208. package/dist/cli/chunks/dream-3UABDRZJ.js +2 -0
  209. package/dist/cli/chunks/embed-and-insert-pattern-JZFPCNL3.js +3 -0
  210. package/dist/cli/chunks/{eval-YPYIZQUR.js → eval-JSNNASBW.js} +2 -2
  211. package/dist/cli/chunks/experience-capture-middleware-UPD3IZBK.js +40 -0
  212. package/dist/cli/chunks/{fast-paths-HYQTAF2S.js → fast-paths-YNMIBS2E.js} +2 -2
  213. package/dist/cli/chunks/{feature-flags-HNSAFFX2.js → feature-flags-SRLXDKBI.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-YACUH6OW.js → feature-flags-VIR7O4L7.js} +2 -2
  215. package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +2 -0
  216. package/dist/cli/chunks/{fleet-6M3BP4OO.js → fleet-K2ED46EL.js} +3 -3
  217. package/dist/cli/chunks/{gnn-wrapper-QLD7KHXV.js → gnn-wrapper-QCU4ZRYW.js} +2 -2
  218. package/dist/cli/chunks/{heartbeat-handler-EZP333X4.js → heartbeat-handler-YYQI4WZM.js} +4 -4
  219. package/dist/cli/chunks/heartbeat-scheduler-MJ6MTPDF.js +2 -0
  220. package/dist/cli/chunks/hnsw-adapter-FQWJCFVW.js +2 -0
  221. package/dist/cli/chunks/hnsw-index-NJYKJUHC.js +2 -0
  222. package/dist/cli/chunks/{hnsw-legacy-bridge-47CUCSAU.js → hnsw-legacy-bridge-C5TJSWTZ.js} +2 -2
  223. package/dist/cli/chunks/{hnswlib-node-SVNYDJZH.js → hnswlib-node-SE3MJJYS.js} +2 -2
  224. package/dist/cli/chunks/{hooks-6V5LMWP6.js → hooks-C572SRDH.js} +43 -43
  225. package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +2 -0
  226. package/dist/cli/chunks/{hypergraph-engine-L2FOBIFF.js → hypergraph-engine-35A6G3M5.js} +2 -2
  227. package/dist/cli/chunks/{hypergraph-handler-DU6Z57EE.js → hypergraph-handler-U2756CWI.js} +3 -3
  228. package/dist/cli/chunks/impact-analyzer-5ZJTXPVC.js +2 -0
  229. package/dist/cli/chunks/init-handler-PCLYQUSB.js +88 -0
  230. package/dist/cli/chunks/init-wizard-MQMDSIOF.js +2 -0
  231. package/dist/cli/chunks/kernel-MEJ5GMRH.js +2 -0
  232. package/dist/cli/chunks/{kilocode-installer-NHKYGJ7Q.js → kilocode-installer-32PX5YH7.js} +2 -2
  233. package/dist/cli/chunks/{kiro-installer-24UK6GGR.js → kiro-installer-C4ROMMUS.js} +2 -2
  234. package/dist/cli/chunks/knowledge-graph-XUBZSEZE.js +2 -0
  235. package/dist/cli/chunks/learning-GEPVZGJQ.js +122 -0
  236. package/dist/cli/chunks/{llm-router-XRMI2VMG.js → llm-router-XRKTTJTX.js} +4 -4
  237. package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +2 -0
  238. package/dist/cli/chunks/{load-W5UWL5C7.js → load-XVH6HW7E.js} +2 -2
  239. package/dist/cli/chunks/load-test-OVXIQ3AF.js +2 -0
  240. package/dist/cli/chunks/{mcp-N7ALQ4BL.js → mcp-IULSTM4Z.js} +2 -2
  241. package/dist/cli/chunks/{memory-WV52DLSA.js → memory-6K7IAU4T.js} +5 -5
  242. package/dist/cli/chunks/memory-backend-TRPOMPK4.js +2 -0
  243. package/dist/cli/chunks/memory-handlers-CG6DRLAW.js +2 -0
  244. package/dist/cli/chunks/{multi-model-executor-3FVTZCSO.js → multi-model-executor-VZDUYPLX.js} +2 -2
  245. package/dist/cli/chunks/{opencode-installer-NTPWGHUW.js → opencode-installer-QUTXKNH4.js} +2 -2
  246. package/dist/cli/chunks/orchestrator-PCKKUWOP.js +452 -0
  247. package/dist/cli/chunks/pattern-null-store-JWYBRBZG.js +2 -0
  248. package/dist/cli/chunks/{pattern-usage-recorder-WWXHUH5U.js → pattern-usage-recorder-PX5HQVRL.js} +2 -2
  249. package/dist/cli/chunks/{pipeline-ZOKZFXTH.js → pipeline-O562GTOG.js} +2 -2
  250. package/dist/cli/chunks/{platform-CDNL322F.js → platform-PM7Q2AZS.js} +2 -2
  251. package/dist/cli/chunks/plugin-OTYTFGPY.js +27 -0
  252. package/dist/cli/chunks/{prime-radiant-advanced-wasm-FVJDU2JY.js → prime-radiant-advanced-wasm-6CFXTHC2.js} +2 -2
  253. package/dist/cli/chunks/project-root-VVSTHIP4.js +2 -0
  254. package/dist/cli/chunks/protocol-executor-PXZCLZD3.js +2 -0
  255. package/dist/cli/chunks/{protocol-handler-4YBN5R23.js → protocol-handler-PPGNSAOS.js} +2 -2
  256. package/dist/cli/chunks/{prove-BHDHY664.js → prove-WQ3BKRZG.js} +2 -2
  257. package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +2 -0
  258. package/dist/cli/chunks/quality-C5WUU3AA.js +8 -0
  259. package/dist/cli/chunks/{quality-gate-WANE7TCN.js → quality-gate-WSSRKD5U.js} +3 -3
  260. package/dist/cli/chunks/queen-coordinator-UI3B7DI6.js +2 -0
  261. package/dist/cli/chunks/real-embeddings-CFQE7IRQ.js +2 -0
  262. package/dist/cli/chunks/{ref-validation-S7UWXQIP.js → ref-validation-DHKHXVZT.js} +2 -2
  263. package/dist/cli/chunks/{roocode-installer-TEYOQYL6.js → roocode-installer-3PPODABV.js} +2 -2
  264. package/dist/cli/chunks/router-HYRPWLAY.js +2 -0
  265. package/dist/cli/chunks/routing-feedback-BPZ5R6F3.js +2 -0
  266. package/dist/cli/chunks/{routing-handler-KDTLMRWD.js → routing-handler-JNXTGT6T.js} +2 -2
  267. package/dist/cli/chunks/{ruvector-commands-AOUDXCYE.js → ruvector-commands-6YLROPVP.js} +2 -2
  268. package/dist/cli/chunks/rvf-dual-writer-DEKDQ6KO.js +2 -0
  269. package/dist/cli/chunks/rvf-migration-adapter-L53VBS7I.js +2 -0
  270. package/dist/cli/chunks/rvf-migration-coordinator-4DWB4WRK.js +2 -0
  271. package/dist/cli/chunks/rvf-native-adapter-I6RUGD2D.js +2 -0
  272. package/dist/cli/chunks/{rvf-store-integrity-QI47Y354.js → rvf-store-integrity-YKR2ZNBF.js} +2 -2
  273. package/dist/cli/chunks/safe-db-KS65XDCP.js +2 -0
  274. package/dist/cli/chunks/schedule-KD2VN6GB.js +2 -0
  275. package/dist/cli/chunks/scheduler-ZH3RMUHY.js +2 -0
  276. package/dist/cli/chunks/{security-SN6MWOJT.js → security-PWQTGDRU.js} +3 -3
  277. package/dist/cli/chunks/shared-rvf-adapter-LNRLFP5I.js +2 -0
  278. package/dist/cli/chunks/{shared-rvf-dual-writer-WU7PFKQM.js → shared-rvf-dual-writer-GWU6YQNS.js} +2 -2
  279. package/dist/cli/chunks/sqlite-persistence-6DTVME5D.js +2 -0
  280. package/dist/cli/chunks/{standalone-memory-F6FSRFWC.js → standalone-memory-46KKBSSV.js} +2 -2
  281. package/dist/cli/chunks/{status-handler-DHD5MS4G.js → status-handler-35T5FTDQ.js} +2 -2
  282. package/dist/cli/chunks/{structural-health-P6HPSQMR.js → structural-health-P7QPQWLO.js} +2 -2
  283. package/dist/cli/chunks/{sync-LISJGDSE.js → sync-W6Z4R4PL.js} +2 -2
  284. package/dist/cli/chunks/sync-Y43EWBSY.js +2 -0
  285. package/dist/cli/chunks/{task-handler-ZT44NT5Z.js → task-handler-5CX3ZYT7.js} +2 -2
  286. package/dist/cli/chunks/{task-handlers-R6DQ5324.js → task-handlers-DQZGOJNE.js} +3 -3
  287. package/dist/cli/chunks/{test-MUFHR4JQ.js → test-TPP53VVV.js} +12 -12
  288. package/dist/cli/chunks/{test-scheduling-TAUSLZJP.js → test-scheduling-WBV4UMQH.js} +3 -3
  289. package/dist/cli/chunks/token-bootstrap-GIIDXHLC.js +2 -0
  290. package/dist/cli/chunks/{token-usage-IX65ECBR.js → token-usage-AKK37RB7.js} +2 -2
  291. package/dist/cli/chunks/{transformers-QKPSVW2W.js → transformers-7MASPELS.js} +2 -2
  292. package/dist/cli/chunks/{tree-sitter-wasm-parser-Z7PPA2JO.js → tree-sitter-wasm-parser-YZKD6UGB.js} +2 -2
  293. package/dist/cli/chunks/{types-ULNNGGGH.js → types-AZ3BTXDP.js} +2 -2
  294. package/dist/cli/chunks/unified-memory-FCX7NLFZ.js +2 -0
  295. package/dist/cli/chunks/unified-memory-hnsw-VU5QJK37.js +2 -0
  296. package/dist/cli/chunks/unified-persistence-FM376LGE.js +2 -0
  297. package/dist/cli/chunks/{upgrade-ECI3YUYA.js → upgrade-L7OTDKEK.js} +2 -2
  298. package/dist/cli/chunks/{validate-3JKRUW2S.js → validate-O3QVFIGP.js} +2 -2
  299. package/dist/cli/chunks/{validate-swarm-LZWANCIE.js → validate-swarm-2UGBGLTX.js} +2 -2
  300. package/dist/cli/chunks/visual-security-EU7Y3X46.js +2 -0
  301. package/dist/cli/chunks/{web-tree-sitter-N5V4A6XG.js → web-tree-sitter-J75IYPRO.js} +2 -2
  302. package/dist/cli/chunks/{windsurf-installer-5TBM5B3C.js → windsurf-installer-FQ5DBFCG.js} +2 -2
  303. package/dist/cli/chunks/witness-chain-CSEBT52D.js +2 -0
  304. package/dist/cli/chunks/{witness-chain-MFP3HBWQ.js → witness-chain-I7TN4MXZ.js} +2 -2
  305. package/dist/cli/chunks/witness-chain-repair-D3NE3NQK.js +2 -0
  306. package/dist/cli/chunks/{witness-chain-verifier-SRAT7LVY.js → witness-chain-verifier-RU2WOP5M.js} +2 -2
  307. package/dist/cli/chunks/witness-key-manager-IHQB2FR5.js +2 -0
  308. package/dist/cli/chunks/{workflow-M7TUYYXY.js → workflow-6BWTNVV6.js} +28 -28
  309. package/dist/cli/chunks/workflow-orchestrator-ALNKOM3N.js +2 -0
  310. package/dist/cli/chunks/wrappers-URVP25VU.js +2 -0
  311. package/dist/cli/commands/ci.js +53 -23
  312. package/dist/cli/commands/code.js +1 -0
  313. package/dist/cli/commands/coverage.d.ts +1 -0
  314. package/dist/cli/commands/coverage.js +182 -138
  315. package/dist/cli/commands/daemon.js +7 -1
  316. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
  317. package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
  318. package/dist/cli/commands/learning.js +47 -7
  319. package/dist/cli/commands/quality.d.ts +12 -1
  320. package/dist/cli/commands/quality.js +51 -3
  321. package/dist/cli/commands/test.js +6 -7
  322. package/dist/cli/commands/workflow.js +9 -5
  323. package/dist/cli/handlers/init-guard.d.ts +13 -0
  324. package/dist/cli/handlers/init-guard.js +23 -0
  325. package/dist/cli/handlers/init-handler.d.ts +3 -0
  326. package/dist/cli/handlers/init-handler.js +9 -0
  327. package/dist/cli/handlers/interfaces.js +5 -1
  328. package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
  329. package/dist/cli/scheduler/persistent-scheduler.js +107 -41
  330. package/dist/cli/utils/ci-output.d.ts +22 -5
  331. package/dist/cli/utils/ci-output.js +33 -5
  332. package/dist/cli/utils/coverage-data.d.ts +10 -0
  333. package/dist/cli/utils/coverage-data.js +34 -65
  334. package/dist/cli/utils/coverage-verdict.d.ts +130 -0
  335. package/dist/cli/utils/coverage-verdict.js +193 -0
  336. package/dist/cli/utils/file-discovery.js +5 -0
  337. package/dist/contracts/verdicts.d.ts +14 -0
  338. package/dist/contracts/verdicts.js +44 -3
  339. package/dist/coordination/deterministic-actions.js +24 -13
  340. package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
  341. package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
  342. package/dist/coordination/handlers/coverage-handlers.js +150 -121
  343. package/dist/coordination/handlers/coverage-runner.d.ts +143 -0
  344. package/dist/coordination/handlers/coverage-runner.js +462 -0
  345. package/dist/coordination/handlers/coverage-target.d.ts +145 -0
  346. package/dist/coordination/handlers/coverage-target.js +314 -0
  347. package/dist/coordination/handlers/handler-types.d.ts +9 -0
  348. package/dist/coordination/handlers/handler-utils.d.ts +23 -1
  349. package/dist/coordination/handlers/handler-utils.js +90 -23
  350. package/dist/coordination/handlers/quality-handlers.js +209 -33
  351. package/dist/coordination/handlers/test-execution-handlers.js +4 -1
  352. package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
  353. package/dist/coordination/protocols/defect-investigation.js +6 -3
  354. package/dist/coordination/protocols/quality-gate.js +10 -6
  355. package/dist/coordination/result-saver.d.ts +22 -0
  356. package/dist/coordination/result-saver.js +130 -46
  357. package/dist/coordination/task-executor.d.ts +12 -0
  358. package/dist/coordination/task-executor.js +37 -1
  359. package/dist/domains/code-intelligence/coordinator.d.ts +2 -1
  360. package/dist/domains/code-intelligence/coordinator.js +10 -32
  361. package/dist/domains/code-intelligence/interfaces.d.ts +5 -0
  362. package/dist/domains/code-intelligence/plugin.js +5 -0
  363. package/dist/domains/code-intelligence/project-root-resolver.d.ts +50 -0
  364. package/dist/domains/code-intelligence/project-root-resolver.js +121 -0
  365. package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
  366. package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
  367. package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
  368. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
  369. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
  370. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
  371. package/dist/domains/coverage-analysis/collected-metrics.d.ts +33 -0
  372. package/dist/domains/coverage-analysis/collected-metrics.js +36 -0
  373. package/dist/domains/coverage-analysis/coordinator.js +22 -7
  374. package/dist/domains/coverage-analysis/interfaces.d.ts +59 -0
  375. package/dist/domains/coverage-analysis/interfaces.js +6 -1
  376. package/dist/domains/coverage-analysis/plugin.js +7 -1
  377. package/dist/domains/coverage-analysis/services/coverage-analyzer.d.ts +7 -0
  378. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +85 -38
  379. package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
  380. package/dist/domains/defect-intelligence/plugin.js +4 -0
  381. package/dist/domains/defect-intelligence/services/defect-predictor.js +6 -4
  382. package/dist/domains/learning-optimization/coordinator.js +4 -0
  383. package/dist/domains/learning-optimization/plugin.js +4 -0
  384. package/dist/domains/quality-assessment/coordinator-claim-verifier.js +2 -1
  385. package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
  386. package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
  387. package/dist/domains/quality-assessment/coordinator.js +18 -14
  388. package/dist/domains/quality-assessment/coverage-report-event.d.ts +49 -0
  389. package/dist/domains/quality-assessment/coverage-report-event.js +58 -0
  390. package/dist/domains/quality-assessment/evidence-sufficiency.d.ts +57 -0
  391. package/dist/domains/quality-assessment/evidence-sufficiency.js +97 -0
  392. package/dist/domains/quality-assessment/index.d.ts +2 -2
  393. package/dist/domains/quality-assessment/index.js +1 -1
  394. package/dist/domains/quality-assessment/interfaces.d.ts +46 -0
  395. package/dist/domains/quality-assessment/plugin.js +8 -8
  396. package/dist/domains/quality-assessment/quality-evidence.d.ts +98 -4
  397. package/dist/domains/quality-assessment/quality-evidence.js +152 -8
  398. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
  399. package/dist/domains/quality-assessment/services/quality-analyzer.js +203 -116
  400. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
  401. package/dist/domains/test-execution/interfaces.d.ts +10 -6
  402. package/dist/domains/test-execution/plugin.js +4 -0
  403. package/dist/domains/test-execution/services/test-executor.js +152 -102
  404. package/dist/domains/test-generation/coordinator.js +4 -0
  405. package/dist/domains/test-generation/plugin.js +4 -0
  406. package/dist/feedback/coverage-learner.js +4 -1
  407. package/dist/feedback/coverage-session-provenance.d.ts +29 -0
  408. package/dist/feedback/coverage-session-provenance.js +39 -0
  409. package/dist/init/orchestrator.js +2 -0
  410. package/dist/init/phases/09-assets.d.ts +4 -0
  411. package/dist/init/phases/09-assets.js +35 -0
  412. package/dist/init/retired-assets.d.ts +86 -0
  413. package/dist/init/retired-assets.js +230 -0
  414. package/dist/init/skills-installer.d.ts +2 -0
  415. package/dist/init/skills-installer.js +4 -0
  416. package/dist/init/types.d.ts +3 -0
  417. package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
  418. package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
  419. package/dist/integrations/ruvector/server-client.js +4 -12
  420. package/dist/kernel/project-root.d.ts +17 -0
  421. package/dist/kernel/project-root.js +54 -2
  422. package/dist/kernel/shared-dirs.d.ts +66 -0
  423. package/dist/kernel/shared-dirs.js +168 -0
  424. package/dist/learning/daily-log.js +2 -1
  425. package/dist/learning/experience-capture-middleware.d.ts +22 -0
  426. package/dist/learning/experience-capture-middleware.js +35 -0
  427. package/dist/learning/learnable-result.d.ts +16 -0
  428. package/dist/learning/learnable-result.js +24 -0
  429. package/dist/learning/pattern-mutation-error.d.ts +8 -0
  430. package/dist/learning/pattern-mutation-error.js +12 -0
  431. package/dist/learning/qe-reasoning-bank.d.ts +10 -0
  432. package/dist/learning/qe-reasoning-bank.js +50 -1
  433. package/dist/learning/rvf-reconcile.d.ts +39 -0
  434. package/dist/learning/rvf-reconcile.js +40 -0
  435. package/dist/learning/sqlite-persistence.d.ts +14 -0
  436. package/dist/learning/sqlite-persistence.js +36 -0
  437. package/dist/mcp/bundle.js +524 -507
  438. package/dist/mcp/handlers/domain-handler-configs.d.ts +49 -2
  439. package/dist/mcp/handlers/domain-handler-configs.js +79 -7
  440. package/dist/mcp/handlers/handler-factory.js +43 -14
  441. package/dist/mcp/handlers/wrapped-domain-handlers.js +7 -1
  442. package/dist/mcp/protocol-server.js +30 -4
  443. package/dist/mcp/tool-cache-scope.d.ts +31 -0
  444. package/dist/mcp/tool-cache-scope.js +71 -0
  445. package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
  446. package/dist/mcp/tools/coverage-analysis/index.js +1 -0
  447. package/dist/mcp/types.d.ts +10 -0
  448. package/dist/optimization/session-cache.d.ts +19 -1
  449. package/dist/optimization/session-cache.js +36 -2
  450. package/dist/plugins/cache.js +2 -1
  451. package/dist/plugins/sources/github.js +2 -1
  452. package/dist/plugins/sources/npm.js +2 -1
  453. package/dist/shared/aqe-managed-dirs.d.ts +24 -0
  454. package/dist/shared/aqe-managed-dirs.js +56 -0
  455. package/dist/shared/events/domain-events.d.ts +20 -3
  456. package/dist/shared/events/domain-events.js +4 -0
  457. package/dist/shared/http/http-client.d.ts +6 -0
  458. package/dist/shared/http/http-client.js +13 -15
  459. package/dist/shared/io/file-reader.d.ts +26 -0
  460. package/dist/shared/io/file-reader.js +111 -17
  461. package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
  462. package/dist/shared/llm/providers/response-deadline.js +17 -5
  463. package/dist/shared/metrics/code-metrics.d.ts +24 -0
  464. package/dist/shared/metrics/code-metrics.js +93 -6
  465. package/dist/shared/metrics/index.d.ts +1 -1
  466. package/dist/workers/interfaces.d.ts +9 -1
  467. package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
  468. package/dist/workers/quality-daemon/coverage-delta.js +13 -6
  469. package/dist/workers/quality-daemon/index.js +6 -5
  470. package/dist/workers/quality-daemon/notification-service.js +3 -3
  471. package/dist/workers/quality-daemon/persistent-memory.d.ts +2 -2
  472. package/dist/workers/quality-daemon/persistent-memory.js +2 -2
  473. package/dist/workers/worker-manager.js +5 -1
  474. package/dist/workers/workers/coverage-tracker.js +69 -33
  475. package/dist/workers/workers/regression-monitor.d.ts +18 -1
  476. package/dist/workers/workers/regression-monitor.js +276 -117
  477. package/package.json +1 -1
  478. package/dist/cli/chunks/adapter-T54G3TBK.js +0 -2
  479. package/dist/cli/chunks/aqe-learning-engine-HLCJJ3JM.js +0 -2
  480. package/dist/cli/chunks/base-VLD755UU.js +0 -2
  481. package/dist/cli/chunks/browser-workflow-6M6VLWRF.js +0 -2
  482. package/dist/cli/chunks/chunk-5XXLWJU7.js +0 -2
  483. package/dist/cli/chunks/chunk-AHVN3UQZ.js +0 -4
  484. package/dist/cli/chunks/chunk-AOKSLWON.js +0 -742
  485. package/dist/cli/chunks/chunk-CQ3WSTJ2.js +0 -16
  486. package/dist/cli/chunks/chunk-LY53L6NH.js +0 -2
  487. package/dist/cli/chunks/chunk-O7TMY4GS.js +0 -2
  488. package/dist/cli/chunks/chunk-QIAX3JJB.js +0 -3
  489. package/dist/cli/chunks/chunk-RJMBHZYL.js +0 -2
  490. package/dist/cli/chunks/chunk-UORI2CZ4.js +0 -2
  491. package/dist/cli/chunks/chunk-V3NZ23X6.js +0 -2
  492. package/dist/cli/chunks/chunk-WI5AEB7Q.js +0 -2
  493. package/dist/cli/chunks/chunk-XKIFNKHV.js +0 -2
  494. package/dist/cli/chunks/chunk-ZAOQIVHG.js +0 -5
  495. package/dist/cli/chunks/chunk-ZF5JTQEE.js +0 -4
  496. package/dist/cli/chunks/ci-NGMGB43T.js +0 -82
  497. package/dist/cli/chunks/client-FUHNNK5O.js +0 -2
  498. package/dist/cli/chunks/core-handlers-F7TLX4LM.js +0 -2
  499. package/dist/cli/chunks/coverage-IVKDV236.js +0 -27
  500. package/dist/cli/chunks/cross-domain-router-EGWPY67O.js +0 -2
  501. package/dist/cli/chunks/daemon-IPTOSCHM.js +0 -10
  502. package/dist/cli/chunks/dream-V4QN6OF5.js +0 -2
  503. package/dist/cli/chunks/embed-and-insert-pattern-65H4XHWR.js +0 -3
  504. package/dist/cli/chunks/experience-capture-middleware-4JXVF5PL.js +0 -40
  505. package/dist/cli/chunks/file-discovery-R73BYEXB.js +0 -2
  506. package/dist/cli/chunks/heartbeat-scheduler-3N3L6CRM.js +0 -2
  507. package/dist/cli/chunks/hnsw-adapter-2BXJYDXI.js +0 -2
  508. package/dist/cli/chunks/hnsw-index-2DLI5OVO.js +0 -2
  509. package/dist/cli/chunks/hybrid-backend-OW4J65YH.js +0 -2
  510. package/dist/cli/chunks/impact-analyzer-ZH5I2RG6.js +0 -2
  511. package/dist/cli/chunks/init-handler-HETPWU67.js +0 -86
  512. package/dist/cli/chunks/init-wizard-NIKM3ZOK.js +0 -2
  513. package/dist/cli/chunks/kernel-2EOSVM6X.js +0 -2
  514. package/dist/cli/chunks/knowledge-graph-D3BPWNNO.js +0 -2
  515. package/dist/cli/chunks/learning-QLVRZNHT.js +0 -122
  516. package/dist/cli/chunks/llm-router-service-TJPPZFUN.js +0 -2
  517. package/dist/cli/chunks/load-test-RFT7IDOL.js +0 -2
  518. package/dist/cli/chunks/memory-backend-O2O4CFKZ.js +0 -2
  519. package/dist/cli/chunks/memory-handlers-DAEGUDBD.js +0 -2
  520. package/dist/cli/chunks/orchestrator-ORGJ6VAA.js +0 -452
  521. package/dist/cli/chunks/pattern-null-store-TUBNXS34.js +0 -2
  522. package/dist/cli/chunks/plugin-ZVLFNZZ4.js +0 -27
  523. package/dist/cli/chunks/project-root-UCHQH3QL.js +0 -2
  524. package/dist/cli/chunks/protocol-executor-6FQTTO3Y.js +0 -2
  525. package/dist/cli/chunks/qe-reasoning-bank-TKPND56C.js +0 -2
  526. package/dist/cli/chunks/quality-46AK277P.js +0 -7
  527. package/dist/cli/chunks/queen-coordinator-DWMXLPJG.js +0 -2
  528. package/dist/cli/chunks/real-embeddings-56MNGJGJ.js +0 -2
  529. package/dist/cli/chunks/router-QIMUYRCC.js +0 -2
  530. package/dist/cli/chunks/routing-feedback-4OH5ZNF4.js +0 -2
  531. package/dist/cli/chunks/rvf-dual-writer-S6JBZL54.js +0 -2
  532. package/dist/cli/chunks/rvf-migration-adapter-TSGMLMYR.js +0 -2
  533. package/dist/cli/chunks/rvf-migration-coordinator-V74MVBHS.js +0 -2
  534. package/dist/cli/chunks/rvf-native-adapter-Z7QOW47S.js +0 -2
  535. package/dist/cli/chunks/safe-db-JLOVBJNC.js +0 -2
  536. package/dist/cli/chunks/schedule-IM6XOBGR.js +0 -2
  537. package/dist/cli/chunks/scheduler-XL2SVVK5.js +0 -2
  538. package/dist/cli/chunks/shared-rvf-adapter-2LB56LP4.js +0 -2
  539. package/dist/cli/chunks/sqlite-persistence-LWMIIC4U.js +0 -2
  540. package/dist/cli/chunks/sync-SNAXAVCN.js +0 -2
  541. package/dist/cli/chunks/token-bootstrap-UGRH7OPU.js +0 -2
  542. package/dist/cli/chunks/unified-memory-F5IJY7W7.js +0 -2
  543. package/dist/cli/chunks/unified-memory-hnsw-C3WAMAQL.js +0 -2
  544. package/dist/cli/chunks/unified-persistence-EWXXOTCB.js +0 -2
  545. package/dist/cli/chunks/visual-security-CKLTAIAB.js +0 -2
  546. package/dist/cli/chunks/witness-chain-Z6LWFEZS.js +0 -2
  547. package/dist/cli/chunks/witness-chain-repair-5QWRFVUK.js +0 -2
  548. package/dist/cli/chunks/witness-key-manager-FYZXQTLJ.js +0 -2
  549. package/dist/cli/chunks/workflow-orchestrator-OFTAR2NA.js +0 -2
  550. package/dist/cli/chunks/wrappers-COU73OQ6.js +0 -2
  551. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  552. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  553. /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
  554. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  555. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  556. /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
@@ -3,10 +3,53 @@
3
3
  * Real code analysis for complexity, maintainability, and quality metrics
4
4
  */
5
5
  import { TypeScriptParser } from '../parsers/index.js';
6
- import { FileReader } from '../io/index.js';
6
+ import { FileReader, PathTraversalError } from '../io/index.js';
7
7
  import { treeSitterRegistry } from '../parsers/multi-language-parser.js';
8
8
  import { getLanguageFromExtension } from '../types/test-frameworks.js';
9
9
  import { calculateCognitiveComplexity } from './cognitive-complexity.js';
10
+ import { findProjectRoot } from '../../kernel/project-root.js';
11
+ /** git-style binary sniff: a NUL within the first 8 KB. */
12
+ const BINARY_SNIFF_CHARS = 8192;
13
+ /** How far into a file the generated-file conventions are looked for. */
14
+ const GENERATED_SNIFF_CHARS = 1024;
15
+ /** Go's convention (golang.org/s/generatedcode), one full line. */
16
+ const GO_GENERATED_LINE = /^\/\/ Code generated .* DO NOT EDIT\.$/m;
17
+ /** `@generated` used as a tag (not part of a word, e.g. not `@generatedAt`). */
18
+ const GENERATED_TAG = /(?:^|[\s*/])@generated(?![\w-])/;
19
+ /** The file's first comment block: a leading block comment or run of line comments. */
20
+ function firstCommentBlock(content) {
21
+ const text = content.replace(/^\uFEFF/, '').replace(/^#![^\n]*\n/, '').trimStart();
22
+ if (text.startsWith('/*')) {
23
+ const close = text.indexOf('*/');
24
+ return close >= 0 ? text.slice(0, close + 2) : text;
25
+ }
26
+ const lines = [];
27
+ for (const line of text.split('\n')) {
28
+ if (!line.trimStart().startsWith('//'))
29
+ break;
30
+ lines.push(line);
31
+ }
32
+ return lines.join('\n');
33
+ }
34
+ /**
35
+ * #1021 round 2b: generated only by convention — Go's
36
+ * "// Code generated … DO NOT EDIT." line near the top, or an `@generated`
37
+ * tag in the first comment block. Prose such as "DO NOT EDIT the retry
38
+ * constants", or `@generated` mentioned later in the file, is handwritten.
39
+ */
40
+ function isGeneratedSource(content) {
41
+ const head = content.slice(0, GENERATED_SNIFF_CHARS).replace(/\r\n/g, '\n');
42
+ return GO_GENERATED_LINE.test(head) || GENERATED_TAG.test(firstCommentBlock(head));
43
+ }
44
+ /** Exclusion decided from the file name alone. */
45
+ function excludedByName(filePath) {
46
+ const name = filePath.split(/[\\/]/).pop() ?? filePath;
47
+ if (/\.d\.(ts|mts|cts)$/i.test(name))
48
+ return 'type declaration file';
49
+ if (/\.min\.(js|mjs|cjs)$/i.test(name))
50
+ return 'minified bundle';
51
+ return undefined;
52
+ }
10
53
  // ============================================================================
11
54
  // Code Metrics Analyzer
12
55
  // ============================================================================
@@ -15,17 +58,55 @@ export class CodeMetricsAnalyzer {
15
58
  fileReader;
16
59
  constructor() {
17
60
  this.parser = new TypeScriptParser();
18
- this.fileReader = new FileReader();
61
+ // #1021: reads inside the AQE project root (AQE_PROJECT_ROOT, else the
62
+ // detected root — not merely the process cwd) are contained by realpath,
63
+ // so in-root names like `[...slug].tsx`, dot-dirs and deep paths are
64
+ // readable; anything outside keeps the legacy path validation.
65
+ this.fileReader = new FileReader({ projectRoot: findProjectRoot() });
19
66
  }
20
67
  /**
21
68
  * Analyze a single file for all metrics
22
69
  */
23
70
  async analyzeFile(filePath) {
71
+ return (await this.analyzeWithDiagnostics(filePath)).metrics;
72
+ }
73
+ /**
74
+ * #1011 / #1021: analyse a file and say whether its metrics are evidence.
75
+ * Binary, generated, minified and declaration files — and files the reader
76
+ * refuses by policy — are `excluded`; unreadable or unparseable source is
77
+ * `failed`. Callers must not treat either as a measurement.
78
+ */
79
+ async analyzeFileDetailed(filePath) {
80
+ const byName = excludedByName(filePath);
81
+ if (byName)
82
+ return { status: 'excluded', metrics: null, reason: `${filePath}: ${byName}` };
83
+ const { metrics, content, readError, parseFailure, parsedAsSource } = await this.analyzeWithDiagnostics(filePath);
84
+ if (readError) {
85
+ return readError instanceof PathTraversalError
86
+ ? { status: 'excluded', metrics: null, reason: `${filePath} was refused by the file reader (${readError.message})` }
87
+ : { status: 'failed', metrics: null, reason: `${filePath} could not be read (${readError.message})` };
88
+ }
89
+ // git-style sniff, except that TS/JS which parses cleanly is source even
90
+ // with a raw NUL inside a string literal (seen in real repos).
91
+ const sourceDespiteNul = parsedAsSource && !parseFailure;
92
+ if (content !== undefined && !sourceDespiteNul && content.slice(0, BINARY_SNIFF_CHARS).includes('\u0000')) {
93
+ return { status: 'excluded', metrics: null, reason: `${filePath} has binary content` };
94
+ }
95
+ if (content !== undefined && isGeneratedSource(content)) {
96
+ return { status: 'excluded', metrics: null, reason: `${filePath} is a generated file` };
97
+ }
98
+ if (parseFailure)
99
+ return { status: 'failed', metrics, reason: `${filePath} could not be parsed (${parseFailure})` };
100
+ return { status: 'measured', metrics };
101
+ }
102
+ /** Compute metrics, reporting read errors and parse failures separately. */
103
+ async analyzeWithDiagnostics(filePath) {
24
104
  const contentResult = await this.fileReader.readFile(filePath);
25
105
  if (!contentResult.success) {
26
- return null;
106
+ return { metrics: null, readError: contentResult.error };
27
107
  }
28
108
  const content = contentResult.value;
109
+ let parseFailure;
29
110
  const lines = content.split('\n');
30
111
  // Count different types of lines
31
112
  const { codeLines, commentLines, blankLines } = this.countLines(lines);
@@ -41,6 +122,10 @@ export class CodeMetricsAnalyzer {
41
122
  if (['ts', 'tsx', 'js', 'jsx'].includes(ext)) {
42
123
  try {
43
124
  const ast = this.parser.parseFile(fileName, content);
125
+ const syntaxErrors = ast.parseDiagnostics?.length ?? 0;
126
+ if (syntaxErrors > 0) {
127
+ parseFailure = `${syntaxErrors} syntax error${syntaxErrors === 1 ? '' : 's'}`;
128
+ }
44
129
  // Extract functions and calculate complexity
45
130
  const functions = this.parser.extractFunctions(ast);
46
131
  functionCount = functions.length;
@@ -62,8 +147,9 @@ export class CodeMetricsAnalyzer {
62
147
  }
63
148
  }
64
149
  }
65
- catch {
66
- // If parsing fails, use heuristic analysis
150
+ catch (error) {
151
+ // If parsing fails, use heuristic analysis — an estimate, not a measurement (#1011)
152
+ parseFailure ??= error instanceof Error ? error.message : String(error);
67
153
  cyclomaticComplexity = this.estimateCyclomaticComplexity(content);
68
154
  cognitiveComplexity = this.estimateCognitiveComplexity(content);
69
155
  }
@@ -98,7 +184,7 @@ export class CodeMetricsAnalyzer {
98
184
  const halsteadMetrics = this.calculateHalsteadMetrics(content);
99
185
  // Calculate maintainability index
100
186
  const maintainabilityIndex = this.calculateMaintainabilityIndex(halsteadMetrics.volume, cyclomaticComplexity, codeLines);
101
- return {
187
+ const metrics = {
102
188
  path: filePath,
103
189
  linesOfCode: codeLines,
104
190
  linesOfComments: commentLines,
@@ -111,6 +197,7 @@ export class CodeMetricsAnalyzer {
111
197
  classCount,
112
198
  maxNestingDepth,
113
199
  };
200
+ return { metrics, content, parseFailure, parsedAsSource: ['ts', 'tsx', 'js', 'jsx'].includes(ext) };
114
201
  }
115
202
  /**
116
203
  * Analyze function-level metrics
@@ -3,7 +3,7 @@
3
3
  * Exports for code quality and system metrics analysis
4
4
  */
5
5
  export { CodeMetricsAnalyzer, getCodeMetricsAnalyzer } from './code-metrics';
6
- export type { FileMetrics, FunctionMetrics, HalsteadMetrics, DuplicationResult, DuplicateBlock, } from './code-metrics';
6
+ export type { FileMetrics, FileAnalysisOutcome, FileAnalysisStatus, FunctionMetrics, HalsteadMetrics, DuplicationResult, DuplicateBlock, } from './code-metrics';
7
7
  export { SystemMetricsCollector, getSystemMetricsCollector } from './system-metrics';
8
8
  export type { SystemMetrics, CpuMetrics, MemoryMetrics, ProcessMetrics, MetricSample, HttpMetrics, } from './system-metrics';
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -152,8 +152,16 @@ export interface WorkerEvent {
152
152
  readonly timestamp: Date;
153
153
  readonly payload: unknown;
154
154
  }
155
+ /** Read options; `namespace` reads another domain's records (e.g. quality evidence). */
156
+ export interface WorkerMemoryReadOptions {
157
+ namespace?: string;
158
+ }
155
159
  export interface WorkerMemory {
156
- get<T>(key: string): Promise<T | undefined>;
160
+ /**
161
+ * Read a key. Without `namespace` the worker's own namespace is used; a
162
+ * backend without namespaces ignores it.
163
+ */
164
+ get<T>(key: string, options?: WorkerMemoryReadOptions): Promise<T | undefined>;
157
165
  set<T>(key: string, value: T): Promise<void>;
158
166
  search(pattern: string): Promise<string[]>;
159
167
  }
@@ -17,9 +17,10 @@ export interface CoverageSnapshot {
17
17
  }
18
18
  export interface CoverageMetrics {
19
19
  readonly line: number;
20
- readonly branch: number;
21
- readonly function: number;
22
- readonly statement: number;
20
+ /** `null` = not collected in that snapshot (#1027 B2) — never a fake 0. */
21
+ readonly branch: number | null;
22
+ readonly function: number | null;
23
+ readonly statement: number | null;
23
24
  }
24
25
  export interface FileCoverage {
25
26
  readonly line: number;
@@ -8,6 +8,11 @@
8
8
  *
9
9
  * Enqueues test suggestion tasks when gaps exceed threshold.
10
10
  */
11
+ import { measuredCoverageSummary } from '../../domains/quality-assessment/coverage-report-event.js';
12
+ /** Delta of a metric; 0 when either side did not collect it (#1027 B2). */
13
+ function metricDelta(now, before) {
14
+ return now === null || before === null ? 0 : now - before;
15
+ }
11
16
  const DEFAULTS = {
12
17
  regressionThreshold: 2,
13
18
  gapThreshold: 60,
@@ -39,12 +44,12 @@ export class CoverageDeltaAnalyzer {
39
44
  const previous = previousRaw;
40
45
  const overallDelta = {
41
46
  line: current.overall.line - previous.overall.line,
42
- branch: current.overall.branch - previous.overall.branch,
43
- function: current.overall.function - previous.overall.function,
44
- statement: current.overall.statement - previous.overall.statement,
47
+ branch: metricDelta(current.overall.branch, previous.overall.branch ?? null),
48
+ function: metricDelta(current.overall.function, previous.overall.function ?? null),
49
+ statement: metricDelta(current.overall.statement, previous.overall.statement ?? null),
45
50
  };
46
51
  const regressionDetected = overallDelta.line < -this.options.regressionThreshold ||
47
- overallDelta.branch < -this.options.regressionThreshold;
52
+ (overallDelta.branch ?? 0) < -this.options.regressionThreshold;
48
53
  // Compute per-file deltas
49
54
  const filesToCheck = changedFiles ?? Object.keys(current.files);
50
55
  const affectedFiles = [];
@@ -90,7 +95,9 @@ export class CoverageDeltaAnalyzer {
90
95
  * Build a CoverageSnapshot from raw lcov/istanbul data stored in memory.
91
96
  */
92
97
  async buildSnapshot(memory) {
93
- const latest = await memory.get('coverage:latest');
98
+ const raw = await memory.get('coverage:latest');
99
+ // #1014: only a measured record is a snapshot; legacy/estimated records are not.
100
+ const latest = measuredCoverageSummary(raw);
94
101
  if (!latest)
95
102
  return undefined;
96
103
  return {
@@ -101,7 +108,7 @@ export class CoverageDeltaAnalyzer {
101
108
  function: latest.function,
102
109
  statement: latest.statement,
103
110
  },
104
- files: latest.files ?? {},
111
+ files: raw && typeof raw.files === 'object' ? raw.files : {},
105
112
  };
106
113
  }
107
114
  // ============================================================================
@@ -306,11 +306,12 @@ export class QualityDaemon {
306
306
  try {
307
307
  const snapshot = await this.coverageDelta.buildSnapshot(memory);
308
308
  if (snapshot) {
309
- this._coverageHealth = Math.round((snapshot.overall.line +
310
- snapshot.overall.branch +
311
- snapshot.overall.function +
312
- snapshot.overall.statement) /
313
- 4);
309
+ // #1027 B2: average the metrics that were collected; an uncollected
310
+ // one (null) is left out rather than dragging health down as 0.
311
+ const collected = [snapshot.overall.line, snapshot.overall.branch,
312
+ snapshot.overall.function, snapshot.overall.statement]
313
+ .filter((v) => typeof v === 'number');
314
+ this._coverageHealth = Math.round(collected.reduce((a, v) => a + v, 0) / collected.length);
314
315
  this._lastCoverageCheck = now;
315
316
  }
316
317
  }
@@ -8,9 +8,9 @@
8
8
  * Notification types: gate_failure, coverage_drop, flaky_detected, suggestion_available
9
9
  */
10
10
  import { writeFileSync, mkdirSync, readdirSync, readFileSync, unlinkSync } from 'fs';
11
- import { join, resolve } from 'path';
11
+ import { join } from 'path';
12
+ import { getProjectStorePath } from '../../kernel/project-root.js';
12
13
  const DEFAULTS = {
13
- notificationsDir: resolve(process.cwd(), '.agentic-qe', 'notifications'),
14
14
  maxNotifications: 200,
15
15
  };
16
16
  export class NotificationService {
@@ -20,7 +20,7 @@ export class NotificationService {
20
20
  urlValidator;
21
21
  _sentCount = 0;
22
22
  constructor(options) {
23
- this.notificationsDir = options?.notificationsDir ?? DEFAULTS.notificationsDir;
23
+ this.notificationsDir = options?.notificationsDir ?? getProjectStorePath('notifications');
24
24
  this.maxNotifications = options?.maxNotifications ?? DEFAULTS.maxNotifications;
25
25
  this.webhookUrl = options?.webhookUrl;
26
26
  this.urlValidator = options?.urlValidator;
@@ -7,7 +7,7 @@
7
7
  *
8
8
  * Resolves Finding 2: CLI daemon previously used throwaway in-memory Map.
9
9
  */
10
- import type { WorkerMemory } from '../interfaces';
10
+ import type { WorkerMemory, WorkerMemoryReadOptions } from '../interfaces';
11
11
  /**
12
12
  * Interface matching the subset of UnifiedMemoryManager we need,
13
13
  * to avoid circular dependency on the full kernel module.
@@ -24,7 +24,7 @@ export interface KVBackend {
24
24
  export declare class PersistentWorkerMemory implements WorkerMemory {
25
25
  private readonly backend;
26
26
  constructor(backend: KVBackend);
27
- get<T>(key: string): Promise<T | undefined>;
27
+ get<T>(key: string, options?: WorkerMemoryReadOptions): Promise<T | undefined>;
28
28
  set<T>(key: string, value: T): Promise<void>;
29
29
  search(pattern: string): Promise<string[]>;
30
30
  }
@@ -17,8 +17,8 @@ export class PersistentWorkerMemory {
17
17
  constructor(backend) {
18
18
  this.backend = backend;
19
19
  }
20
- async get(key) {
21
- return this.backend.kvGet(key, NAMESPACE);
20
+ async get(key, options) {
21
+ return this.backend.kvGet(key, options?.namespace ?? NAMESPACE);
22
22
  }
23
23
  async set(key, value) {
24
24
  await this.backend.kvSet(key, value, NAMESPACE);
@@ -48,7 +48,11 @@ class InMemoryWorkerEventBus {
48
48
  */
49
49
  class InMemoryWorkerMemory {
50
50
  store = new Map();
51
- async get(key) {
51
+ async get(key, options) {
52
+ // This process-local store holds only worker keys: no other domain's
53
+ // namespace (e.g. quality evidence) lives here.
54
+ if (options?.namespace)
55
+ return undefined;
52
56
  return this.store.get(key);
53
57
  }
54
58
  async set(key, value) {
@@ -9,6 +9,7 @@
9
9
  * - Uncovered critical paths
10
10
  */
11
11
  import { BaseWorker } from '../base-worker.js';
12
+ import { measuredCoverageSummary } from '../../domains/quality-assessment/coverage-report-event.js';
12
13
  const CONFIG = {
13
14
  id: 'coverage-tracker',
14
15
  name: 'Coverage Tracker',
@@ -33,46 +34,69 @@ export class CoverageTrackerWorker extends BaseWorker {
33
34
  // Collect coverage metrics
34
35
  const trend = await this.collectCoverageTrend(context);
35
36
  const gaps = await this.identifyCoverageGaps(context);
36
- // Analyze coverage thresholds
37
- this.analyzeCoverageThresholds(trend.current, findings, recommendations);
38
37
  // Analyze coverage gaps
39
38
  this.analyzeCoverageGaps(gaps, findings, recommendations);
40
- // Analyze trends
41
- this.analyzeCoverageTrends(trend, findings, recommendations);
42
- // Store current metrics
43
- await context.memory.set('coverage:current', trend.current);
39
+ // #1018: with no measured coverage there is nothing to compare, nothing
40
+ // to store, and no figure to report — never a fake 0% record.
41
+ const current = trend.current;
42
+ if (current) {
43
+ this.analyzeCoverageThresholds(current, findings, recommendations);
44
+ this.analyzeCoverageTrends({ ...trend, current }, findings, recommendations);
45
+ await context.memory.set('coverage:current', current);
46
+ }
47
+ else {
48
+ findings.push({
49
+ type: 'coverage-unmeasured',
50
+ severity: 'info',
51
+ domain: 'coverage-analysis',
52
+ title: 'Coverage Unmeasured',
53
+ description: 'No measured coverage exists yet (no instrumented coverage:latest). Nothing was ' +
54
+ 'tracked; this is not 0% coverage. Run tests with coverage or coverage_analyze_sublinear.',
55
+ });
56
+ }
44
57
  await context.memory.set('coverage:gaps', gaps);
45
- const healthScore = this.calculateHealthScore(trend.current, gaps);
58
+ const healthScore = this.calculateHealthScore(current, gaps);
46
59
  context.logger.info('Coverage tracking complete', {
47
60
  healthScore,
61
+ measured: current !== null,
48
62
  findingsCount: findings.length,
49
63
  gapsFound: gaps.length,
50
64
  });
65
+ const pct = (v) => (v === null || v === undefined ? 'n/a' : `${v}%`);
51
66
  return this.createResult(Date.now() - startTime, {
52
- itemsAnalyzed: gaps.length + 4, // 4 coverage types + gaps
53
- issuesFound: findings.length,
67
+ itemsAnalyzed: gaps.length + (current ? 4 : 0), // 4 coverage types + gaps
68
+ issuesFound: findings.filter(f => f.severity !== 'info').length,
54
69
  healthScore,
55
- trend: this.determineTrend(trend),
70
+ trend: current ? this.determineTrend({ ...trend, current }) : 'stable',
56
71
  domainMetrics: {
57
- lineCoverage: `${trend.current.line}%`,
58
- branchCoverage: `${trend.current.branch}%`,
59
- functionCoverage: `${trend.current.function}%`,
60
- statementCoverage: `${trend.current.statement}%`,
72
+ coverageMeasured: current ? 'true' : 'false',
73
+ lineCoverage: current ? pct(current.line) : 'unmeasured',
74
+ branchCoverage: current ? pct(current.branch) : 'unmeasured',
75
+ functionCoverage: current ? pct(current.function) : 'unmeasured',
76
+ statementCoverage: current ? pct(current.statement) : 'unmeasured',
61
77
  gapsCount: gaps.length,
62
78
  },
63
79
  }, findings, recommendations);
64
80
  }
65
81
  async collectCoverageTrend(context) {
66
- const previous = await context.memory.get('coverage:current');
67
- // Read real coverage data from coverage:latest (written by coverage-analyzer
68
- // and test-executor). Fall back to zeros when no data is available.
69
- const latest = await context.memory.get('coverage:latest');
82
+ // A previous record is a baseline only if it was measured (#1018): older
83
+ // versions wrote an all-zero coverage:current when nothing was measured.
84
+ const stored = await context.memory.get('coverage:current');
85
+ const previous = stored && stored.measured === true && Number.isFinite(stored.line) ? stored : undefined;
86
+ // Real coverage comes from coverage:latest (written by coverage-analyzer,
87
+ // test-executor and the quality-assessment listener). Only a record
88
+ // stamped measured:true with finite figures counts (#1008/#1018); a
89
+ // missing, legacy or estimated record means "unmeasured" — never zeros.
90
+ const latest = measuredCoverageSummary(await context.memory.get('coverage:latest'));
91
+ if (!latest)
92
+ return { current: null, previous };
70
93
  const current = {
71
- line: latest?.line ?? 0,
72
- branch: latest?.branch ?? 0,
73
- function: latest?.function ?? 0,
74
- statement: latest?.statement ?? 0,
94
+ line: latest.line,
95
+ branch: latest.branch,
96
+ function: latest.function,
97
+ statement: latest.statement,
75
98
  timestamp: new Date(),
99
+ measured: true,
76
100
  };
77
101
  return { current, previous };
78
102
  }
@@ -112,7 +136,7 @@ export class CoverageTrackerWorker extends BaseWorker {
112
136
  context: { current: coverage.line, target: thresholds.line },
113
137
  });
114
138
  }
115
- if (coverage.branch < thresholds.branch) {
139
+ if (coverage.branch !== null && coverage.branch < thresholds.branch) {
116
140
  findings.push({
117
141
  type: 'low-branch-coverage',
118
142
  severity: coverage.branch < 50 ? 'high' : 'medium',
@@ -131,7 +155,7 @@ export class CoverageTrackerWorker extends BaseWorker {
131
155
  autoFixable: true,
132
156
  });
133
157
  }
134
- if (coverage.function < thresholds.function) {
158
+ if (coverage.function !== null && coverage.function < thresholds.function) {
135
159
  findings.push({
136
160
  type: 'low-function-coverage',
137
161
  severity: 'medium',
@@ -195,7 +219,8 @@ export class CoverageTrackerWorker extends BaseWorker {
195
219
  if (!trend.previous)
196
220
  return;
197
221
  const lineChange = trend.current.line - trend.previous.line;
198
- const branchChange = trend.current.branch - trend.previous.branch;
222
+ const branchChange = trend.current.branch !== null && trend.previous.branch !== null
223
+ ? trend.current.branch - trend.previous.branch : 0;
199
224
  if (lineChange < -2) {
200
225
  findings.push({
201
226
  type: 'coverage-regression',
@@ -235,21 +260,32 @@ export class CoverageTrackerWorker extends BaseWorker {
235
260
  }
236
261
  }
237
262
  calculateHealthScore(coverage, gaps) {
238
- // Weight: line 25%, branch 25%, function 20%, statement 20%, gaps 10%
239
- const lineScore = (coverage.line / 100) * 25;
240
- const branchScore = (coverage.branch / 100) * 25;
241
- const functionScore = (coverage.function / 100) * 20;
242
- const statementScore = (coverage.statement / 100) * 20;
243
263
  // Gaps penalty
244
264
  const highRiskGaps = gaps.filter((g) => g.riskScore > 0.8).length;
245
265
  const gapsScore = Math.max(0, 10 - highRiskGaps * 2);
246
- return Math.round(lineScore + branchScore + functionScore + statementScore + gapsScore);
266
+ // #1018: with no measurement, only the gap component is known; it is
267
+ // scaled to 0-100 rather than mixed with invented 0% coverage.
268
+ if (!coverage)
269
+ return gapsScore * 10;
270
+ // Weight: line 25%, branch 25%, function 20%, statement 20%, gaps 10%.
271
+ // An uncollected metric is left out and the rest are re-weighted.
272
+ const parts = [
273
+ [coverage.line, 25], [coverage.branch, 25], [coverage.function, 20], [coverage.statement, 20],
274
+ ];
275
+ const present = parts.filter((p) => p[0] !== null);
276
+ const weight = present.reduce((a, [, w]) => a + w, 0);
277
+ const coverageScore = present.reduce((a, [v, w]) => a + (v / 100) * w, 0) * (90 / weight);
278
+ return Math.round(coverageScore + gapsScore);
247
279
  }
248
280
  determineTrend(trend) {
249
281
  if (!trend.previous)
250
282
  return 'stable';
251
- const avgCurrent = (trend.current.line + trend.current.branch + trend.current.function + trend.current.statement) / 4;
252
- const avgPrevious = (trend.previous.line + trend.previous.branch + trend.previous.function + trend.previous.statement) / 4;
283
+ const avg = (c) => {
284
+ const values = [c.line, c.branch, c.function, c.statement].filter((v) => v !== null);
285
+ return values.reduce((a, v) => a + v, 0) / values.length;
286
+ };
287
+ const avgCurrent = avg(trend.current);
288
+ const avgPrevious = avg(trend.previous);
253
289
  if (avgCurrent > avgPrevious + 1)
254
290
  return 'improving';
255
291
  if (avgCurrent < avgPrevious - 1)
@@ -6,14 +6,31 @@
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';
12
15
  import { WorkerContext, WorkerResult } from '../interfaces';
13
16
  export declare class RegressionMonitorWorker extends BaseWorker {
14
17
  constructor();
15
18
  protected doExecute(context: WorkerContext): Promise<WorkerResult>;
19
+ /** Why a stored baseline is (not) used: absent, legacy (unstamped), stamped but malformed, or measured. */
20
+ private baselineStatus;
21
+ /**
22
+ * #1028: the current snapshot from measured sources only — the stamped
23
+ * `coverage:latest` (same validator as the coverage tracker and the quality
24
+ * gate) and the latest usable testsPassing evidence (same validation as the
25
+ * gate) with that run's recorded `test-run:<runId>` result. `null` when
26
+ * nothing is measured.
27
+ */
16
28
  private collectCurrentSnapshot;
29
+ private collectMeasuredTests;
30
+ /**
31
+ * Compare two measured snapshots. A metric is compared only when both sides
32
+ * measured it; an uncollected (`null`) metric is never compared (#1028).
33
+ */
17
34
  private detectRegressions;
18
35
  private analyzeRegressions;
19
36
  private getDomainForType;