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
@@ -6,9 +6,12 @@
6
6
  import { Command } from 'commander';
7
7
  import chalk from 'chalk';
8
8
  import { runCoverageAnalysisWizard } from '../wizards/coverage-wizard.js';
9
- import { walkSourceFiles } from '../utils/file-discovery.js';
10
9
  import { writeOutput, toJSON, coverageToMarkdown } from '../utils/ci-output.js';
11
- import { buildCoverageData } from '../utils/coverage-data.js';
10
+ import * as path from 'path';
11
+ import { EXIT_UNMEASURED, coverageExitCode, coverageJson, evaluateCliCoverage, } from '../utils/coverage-verdict.js';
12
+ // #1012 / #1010: resolution and verdict are shared with `aqe ci` (and built on
13
+ // the same functions as MCP); re-exported here for existing importers.
14
+ export { EXIT_UNMEASURED, resolveCliCoverageData } from '../utils/coverage-verdict.js';
12
15
  function getColorForPercent(percent) {
13
16
  if (percent >= 80)
14
17
  return chalk.green;
@@ -28,6 +31,27 @@ export function createCoverageCommand(context, cleanupAndExit, ensureInitialized
28
31
  .option('--ghost', 'Include ghost intent coverage analysis (detect untested behavioral intents)')
29
32
  .option('-F, --format <format>', 'Output format (text|json|markdown)', 'text')
30
33
  .option('-o, --output <path>', 'Write output to file')
34
+ .addHelpText('after', `
35
+ Target: a directory, a source file, or an existing coverage report
36
+ (lcov.info, coverage-final.json, coverage-summary.json, Cobertura XML).
37
+ Reports are read from the target's project root (nearest package.json / .git).
38
+
39
+ Threshold: judged on the metrics the report actually collected. A metric with
40
+ no data (e.g. a report without branch data) is shown as n/a and is excluded
41
+ from the threshold, not counted as 0%.
42
+
43
+ Exit codes:
44
+ 0 coverage meets the threshold (by more than 5%)
45
+ 1 coverage below the threshold, or an error (missing target, unreadable report)
46
+ 2 coverage within 5% above the threshold
47
+ ${EXIT_UNMEASURED} UNMEASURED: no coverage measurement exists for the target
48
+ (not in the report, the runner ran 0 tests, or only test files were reported),
49
+ or NO coverage report exists, so only a labelled static estimate was shown
50
+ (-F json: measured:false, estimated:true; no threshold verdict)
51
+
52
+ In \`aqe ci\`, an UNMEASURED coverage phase is a warning (phase exit code 3); it
53
+ does not fail the pipeline by itself. An enforced quality gate fails on
54
+ missing coverage evidence.`)
31
55
  .action(async (target, options) => {
32
56
  let analyzeTarget = target;
33
57
  let includeRisk = options.risk;
@@ -57,169 +81,189 @@ export function createCoverageCommand(context, cleanupAndExit, ensureInitialized
57
81
  await cleanupAndExit(1);
58
82
  }
59
83
  }
60
- if (!await ensureInitialized())
61
- return;
84
+ // #995 review NB3: with a machine-readable format, stdout carries ONLY the
85
+ // document. Progress lines (ours, and anything printed while the fleet
86
+ // initializes) go to stderr; the real console.log is restored to emit.
87
+ const machineFormat = options.format !== 'text';
88
+ const stdoutLog = console.log;
89
+ if (machineFormat)
90
+ console.log = (...args) => console.error(...args);
91
+ const emit = (content) => {
92
+ console.log = stdoutLog;
93
+ writeOutput(content, options.output);
94
+ };
62
95
  try {
63
- console.log(chalk.blue(`\n Analyzing coverage for ${analyzeTarget}...\n`));
64
- const coverageAPI = await context.kernel.getDomainAPIAsync('coverage-analysis');
65
- if (!coverageAPI) {
66
- console.log(chalk.red('Coverage analysis domain not available'));
96
+ if (!await ensureInitialized())
67
97
  return;
68
- }
69
- const path = await import('path');
70
- const targetPath = path.resolve(analyzeTarget);
71
- // Fix #280: Use shared file discovery supporting all languages
72
- const sourceFiles = walkSourceFiles(targetPath, { includeTests: false });
73
- if (sourceFiles.length === 0) {
74
- console.log(chalk.yellow('No source files found'));
75
- return;
76
- }
77
- console.log(chalk.gray(` Analyzing ${sourceFiles.length} files...\n`));
78
- // Build coverage data from real V8/istanbul output or deterministic estimation
79
- const coverageData = buildCoverageData(sourceFiles);
80
- if (coverageData.instrumented) {
81
- console.log(chalk.green(' Using instrumented coverage data (V8/istanbul)\n'));
82
- }
83
- else {
84
- console.log(chalk.yellow(' No instrumented coverage found — using heuristic estimation'));
85
- console.log(chalk.gray(' Run tests with coverage first: npm test -- --coverage\n'));
86
- }
87
- const result = await coverageAPI.analyze({
88
- coverageData,
89
- threshold,
90
- includeFileDetails: true,
91
- });
92
- const format = options.format;
93
- let coverageResult;
94
- if (result.success && result.value) {
95
- const report = result.value;
96
- // For non-text formats, collect all data and output at end
97
- coverageResult = {
98
- summary: report.summary,
99
- meetsThreshold: report.meetsThreshold,
100
- threshold,
101
- recommendations: report.recommendations,
102
- };
98
+ try {
99
+ console.log(chalk.blue(`\n Analyzing coverage for ${analyzeTarget}...\n`));
100
+ const coverageAPI = await context.kernel.getDomainAPIAsync('coverage-analysis');
101
+ if (!coverageAPI) {
102
+ console.log(chalk.red('Coverage analysis domain not available'));
103
+ return;
104
+ }
105
+ const targetPath = path.resolve(analyzeTarget);
106
+ // Fix #280: shared file discovery supporting all languages.
107
+ // #995: coverage files as targets; reports resolved from the project root.
108
+ // #1012: one shared verdict (measured / unmeasured / labelled estimate).
109
+ const outcome = await evaluateCliCoverage(coverageAPI, targetPath, threshold);
110
+ const format = options.format;
111
+ if (outcome.kind === 'no-sources') {
112
+ console.log(chalk.yellow('No source files found'));
113
+ return;
114
+ }
115
+ if (outcome.kind === 'error' || outcome.kind === 'unmeasured' || outcome.kind === 'analysis-failed') {
116
+ // Errors (missing target, unreadable report) exit 1. "No measurement
117
+ // exists" has its own exit code — never "0%".
118
+ if (format === 'json') {
119
+ // Same shape as a normal result, with nulls (#995 review N4).
120
+ emit(toJSON(coverageJson(outcome, threshold, targetPath)));
121
+ }
122
+ else {
123
+ console.log((outcome.kind === 'unmeasured' ? chalk.yellow : chalk.red)(` ${outcome.message}\n`));
124
+ }
125
+ await cleanupAndExit(coverageExitCode(outcome, threshold));
126
+ return;
127
+ }
128
+ const coverageData = outcome.data;
129
+ const isEstimate = outcome.kind === 'estimate';
130
+ if (!isEstimate) {
131
+ console.log(chalk.green(' Using instrumented coverage data (V8/istanbul)\n'));
132
+ if (coverageData.unmeasuredFiles?.length) {
133
+ console.log(chalk.yellow(` ${coverageData.unmeasuredFiles.length} file(s) not in the coverage report — UNMEASURED, excluded from the figures\n`));
134
+ }
135
+ }
136
+ else {
137
+ console.log(chalk.yellow(' No coverage report found — showing a heuristic STATIC ESTIMATE (UNMEASURED)'));
138
+ console.log(chalk.gray(' Run tests with coverage first: npm test -- --coverage\n'));
139
+ }
140
+ // #1012: the JSON carries its provenance (measured / estimated /
141
+ // coverageMethod) exactly as MCP does; an estimate has no verdict.
142
+ const coverageResult = coverageJson(outcome, threshold, targetPath);
143
+ const summary = outcome.summary;
103
144
  if (format === 'text') {
104
- const fmt = (v) => typeof v === 'number' ? v.toFixed(1) : v;
105
- console.log(chalk.cyan(' Coverage Summary:'));
106
- console.log(` Lines: ${getColorForPercent(report.summary.line)(fmt(report.summary.line) + '%')}`);
107
- console.log(` Branches: ${getColorForPercent(report.summary.branch)(fmt(report.summary.branch) + '%')}`);
108
- console.log(` Functions: ${getColorForPercent(report.summary.function)(fmt(report.summary.function) + '%')}`);
109
- console.log(` Statements: ${getColorForPercent(report.summary.statement)(fmt(report.summary.statement) + '%')}`);
110
- console.log(`\n Threshold: ${report.meetsThreshold ? chalk.green(`Met (${threshold}%)`) : chalk.red(`Not met (${threshold}%)`)}`);
111
- if (report.recommendations.length > 0) {
145
+ const fmt = (v) => v === null ? 'n/a (not collected)' : (isEstimate ? '~' : '') + v.toFixed(1) + '%';
146
+ const color = (v) => v === null || isEstimate ? chalk.gray : getColorForPercent(v);
147
+ console.log(chalk.cyan(isEstimate ? ' Coverage Summary (STATIC ESTIMATE — not measured):' : ' Coverage Summary:'));
148
+ console.log(` Lines: ${color(summary.line)(fmt(summary.line))}`);
149
+ console.log(` Branches: ${color(summary.branch)(fmt(summary.branch))}`);
150
+ console.log(` Functions: ${color(summary.function)(fmt(summary.function))}`);
151
+ console.log(` Statements: ${color(summary.statement)(fmt(summary.statement))}`);
152
+ if (outcome.kind === 'measured') {
153
+ console.log(`\n Threshold: ${outcome.verdict.meetsThreshold ? chalk.green(`Met (${threshold}%)`) : chalk.red(`Not met (${threshold}%)`)}`);
154
+ }
155
+ else {
156
+ console.log(`\n Threshold: ${chalk.yellow(`not evaluated (${threshold}%) — UNMEASURED, estimate only`)}`);
157
+ console.log(chalk.gray(` ${outcome.message}`));
158
+ }
159
+ const recommendations = outcome.kind === 'measured' ? outcome.recommendations : [];
160
+ if (recommendations.length > 0) {
112
161
  console.log(chalk.cyan('\n Recommendations:'));
113
- for (const rec of report.recommendations) {
162
+ for (const rec of recommendations) {
114
163
  console.log(chalk.gray(` - ${rec}`));
115
164
  }
116
165
  }
117
166
  }
118
- }
119
- // Detect gaps if requested
120
- if (detectGaps) {
121
- console.log(chalk.cyan('\n Coverage Gaps:'));
122
- const gapResult = await coverageAPI.detectGaps({
123
- coverageData,
124
- minCoverage: threshold,
125
- prioritize: includeRisk ? 'risk' : 'size',
126
- });
127
- if (gapResult.success && gapResult.value) {
128
- const gaps = gapResult.value;
129
- if (coverageResult)
167
+ // Detect gaps if requested
168
+ if (detectGaps) {
169
+ console.log(chalk.cyan('\n Coverage Gaps:'));
170
+ const gapResult = await coverageAPI.detectGaps({
171
+ coverageData,
172
+ minCoverage: threshold,
173
+ prioritize: includeRisk ? 'risk' : 'size',
174
+ // #1014: gaps in an estimate are shown, never learned or published.
175
+ measured: !isEstimate,
176
+ });
177
+ if (gapResult.success && gapResult.value) {
178
+ const gaps = gapResult.value;
130
179
  coverageResult.gaps = gaps.gaps.map(g => ({
131
180
  file: g.file.replace(process.cwd() + '/', ''),
132
181
  lines: g.lines,
133
182
  riskScore: g.riskScore,
134
183
  severity: g.severity,
135
184
  }));
136
- console.log(chalk.gray(` Total uncovered lines: ${gaps.totalUncoveredLines}`));
137
- console.log(chalk.gray(` Estimated effort: ${gaps.estimatedEffort} hours\n`));
138
- for (const gap of gaps.gaps.slice(0, 8)) {
139
- const severityColor = gap.severity === 'high' ? chalk.red : gap.severity === 'medium' ? chalk.yellow : chalk.gray;
140
- const filePath = gap.file.replace(process.cwd() + '/', '');
141
- console.log(` ${severityColor(`[${gap.severity}]`)} ${chalk.white(filePath)}`);
142
- console.log(chalk.gray(` ${gap.lines.length} uncovered lines, Risk: ${(gap.riskScore * 100).toFixed(0)}%`));
143
- }
144
- if (gaps.gaps.length > 8) {
145
- console.log(chalk.gray(` ... and ${gaps.gaps.length - 8} more gaps`));
185
+ console.log(chalk.gray(` Total uncovered lines: ${gaps.totalUncoveredLines}`));
186
+ console.log(chalk.gray(` Estimated effort: ${gaps.estimatedEffort} hours\n`));
187
+ for (const gap of gaps.gaps.slice(0, 8)) {
188
+ const severityColor = gap.severity === 'high' ? chalk.red : gap.severity === 'medium' ? chalk.yellow : chalk.gray;
189
+ const filePath = gap.file.replace(process.cwd() + '/', '');
190
+ console.log(` ${severityColor(`[${gap.severity}]`)} ${chalk.white(filePath)}`);
191
+ console.log(chalk.gray(` ${gap.lines.length} uncovered lines, Risk: ${(gap.riskScore * 100).toFixed(0)}%`));
192
+ }
193
+ if (gaps.gaps.length > 8) {
194
+ console.log(chalk.gray(` ... and ${gaps.gaps.length - 8} more gaps`));
195
+ }
146
196
  }
147
197
  }
148
- }
149
- // Ghost intent coverage analysis (ADR-059)
150
- if (options.ghost || detectGaps) {
151
- console.log(chalk.cyan('\n Ghost Intent Coverage (ADR-059):'));
152
- try {
153
- const testPaths = coverageData.files.map(f => f.path);
154
- const ghostResult = await coverageAPI.analyzeGhostCoverage(testPaths, analyzeTarget);
155
- if (ghostResult.success && ghostResult.value) {
156
- const ghost = ghostResult.value;
157
- console.log(chalk.gray(` Phantom gaps detected: ${ghost.gaps.length}`));
158
- console.log(chalk.gray(` Ghost score: ${(ghost.totalGhostScore * 100).toFixed(1)}%`));
159
- console.log(chalk.gray(` Coverage completeness: ${(ghost.coverageCompleteness * 100).toFixed(1)}%\n`));
160
- for (const gap of ghost.gaps.slice(0, 8)) {
161
- const severityColor = gap.severity === 'critical' ? chalk.red : gap.severity === 'high' ? chalk.red : gap.severity === 'medium' ? chalk.yellow : chalk.gray;
162
- console.log(` ${severityColor(`[${gap.severity}]`)} ${chalk.white(gap.category)}`);
163
- console.log(chalk.gray(` ${gap.description}`));
198
+ // Ghost intent coverage analysis (ADR-059)
199
+ if (options.ghost || detectGaps) {
200
+ console.log(chalk.cyan('\n Ghost Intent Coverage (ADR-059):'));
201
+ try {
202
+ const testPaths = coverageData.files.map(f => f.path);
203
+ const ghostResult = await coverageAPI.analyzeGhostCoverage(testPaths, analyzeTarget);
204
+ if (ghostResult.success && ghostResult.value) {
205
+ const ghost = ghostResult.value;
206
+ console.log(chalk.gray(` Phantom gaps detected: ${ghost.gaps.length}`));
207
+ console.log(chalk.gray(` Ghost score: ${(ghost.totalGhostScore * 100).toFixed(1)}%`));
208
+ console.log(chalk.gray(` Coverage completeness: ${(ghost.coverageCompleteness * 100).toFixed(1)}%\n`));
209
+ for (const gap of ghost.gaps.slice(0, 8)) {
210
+ const severityColor = gap.severity === 'critical' ? chalk.red : gap.severity === 'high' ? chalk.red : gap.severity === 'medium' ? chalk.yellow : chalk.gray;
211
+ console.log(` ${severityColor(`[${gap.severity}]`)} ${chalk.white(gap.category)}`);
212
+ console.log(chalk.gray(` ${gap.description}`));
213
+ }
214
+ if (ghost.gaps.length > 8) {
215
+ console.log(chalk.gray(` ... and ${ghost.gaps.length - 8} more phantom gaps`));
216
+ }
164
217
  }
165
- if (ghost.gaps.length > 8) {
166
- console.log(chalk.gray(` ... and ${ghost.gaps.length - 8} more phantom gaps`));
218
+ else {
219
+ console.log(chalk.dim(' Ghost analysis not available (requires HNSW index)'));
167
220
  }
168
221
  }
169
- else {
170
- console.log(chalk.dim(' Ghost analysis not available (requires HNSW index)'));
222
+ catch {
223
+ console.log(chalk.dim(' Ghost analysis skipped (analyzer not initialized)'));
171
224
  }
172
225
  }
173
- catch {
174
- console.log(chalk.dim(' Ghost analysis skipped (analyzer not initialized)'));
175
- }
176
- }
177
- // Calculate risk if requested
178
- if (includeRisk) {
179
- console.log(chalk.cyan('\n Risk Analysis:'));
180
- const lowCoverageFiles = [...coverageData.files]
181
- .sort((a, b) => (a.lines.covered / a.lines.total) - (b.lines.covered / b.lines.total))
182
- .slice(0, 5);
183
- for (const file of lowCoverageFiles) {
184
- const riskResult = await coverageAPI.calculateRisk({
185
- file: file.path,
186
- uncoveredLines: file.uncoveredLines,
187
- });
188
- if (riskResult.success && riskResult.value) {
189
- const risk = riskResult.value;
190
- const riskColor = risk.riskLevel === 'high' ? chalk.red : risk.riskLevel === 'medium' ? chalk.yellow : chalk.green;
191
- const filePath = file.path.replace(process.cwd() + '/', '');
192
- console.log(` ${riskColor(`[${risk.riskLevel}]`)} ${chalk.white(filePath)}`);
193
- console.log(chalk.gray(` Risk: ${(risk.overallRisk * 100).toFixed(0)}%, Coverage: ${Math.round((file.lines.covered / file.lines.total) * 100)}%`));
226
+ // Calculate risk if requested
227
+ if (includeRisk) {
228
+ console.log(chalk.cyan('\n Risk Analysis:'));
229
+ const lowCoverageFiles = [...coverageData.files]
230
+ .sort((a, b) => (a.lines.covered / a.lines.total) - (b.lines.covered / b.lines.total))
231
+ .slice(0, 5);
232
+ for (const file of lowCoverageFiles) {
233
+ const riskResult = await coverageAPI.calculateRisk({
234
+ file: file.path,
235
+ uncoveredLines: file.uncoveredLines,
236
+ });
237
+ if (riskResult.success && riskResult.value) {
238
+ const risk = riskResult.value;
239
+ const riskColor = risk.riskLevel === 'high' ? chalk.red : risk.riskLevel === 'medium' ? chalk.yellow : chalk.green;
240
+ const filePath = file.path.replace(process.cwd() + '/', '');
241
+ console.log(` ${riskColor(`[${risk.riskLevel}]`)} ${chalk.white(filePath)}`);
242
+ console.log(chalk.gray(` Risk: ${(risk.overallRisk * 100).toFixed(0)}%, Coverage: ${Math.round((file.lines.covered / file.lines.total) * 100)}%`));
243
+ }
194
244
  }
195
245
  }
246
+ // Non-text format output (collected all data)
247
+ if (format === 'json') {
248
+ emit(toJSON(coverageResult));
249
+ }
250
+ else if (format === 'markdown') {
251
+ emit(coverageToMarkdown(coverageResult));
252
+ }
253
+ else if (format === 'text') {
254
+ console.log(chalk.green('\n Coverage analysis complete\n'));
255
+ }
256
+ // Exit codes: 1 = below threshold, 2 = within 5% of threshold,
257
+ // 0 = above threshold, 3 = UNMEASURED (estimate only) — shared with `aqe ci`.
258
+ await cleanupAndExit(coverageExitCode(outcome, threshold));
196
259
  }
197
- // Non-text format output (collected all data)
198
- if (coverageResult && format === 'json') {
199
- writeOutput(toJSON(coverageResult), options.output);
200
- }
201
- else if (coverageResult && format === 'markdown') {
202
- writeOutput(coverageToMarkdown(coverageResult), options.output);
203
- }
204
- else if (format === 'text') {
205
- console.log(chalk.green('\n Coverage analysis complete\n'));
206
- }
207
- // Exit codes: 1 = below threshold, 2 = within 5% of threshold, 0 = above threshold
208
- if (coverageResult && !coverageResult.meetsThreshold) {
260
+ catch (error) {
261
+ console.error(chalk.red('\nFailed:'), error);
209
262
  await cleanupAndExit(1);
210
263
  }
211
- if (coverageResult) {
212
- const avg = (coverageResult.summary.line + coverageResult.summary.branch +
213
- coverageResult.summary.function + coverageResult.summary.statement) / 4;
214
- if (avg < threshold + 5 && avg >= threshold) {
215
- await cleanupAndExit(2);
216
- }
217
- }
218
- await cleanupAndExit(0);
219
264
  }
220
- catch (error) {
221
- console.error(chalk.red('\nFailed:'), error);
222
- await cleanupAndExit(1);
265
+ finally {
266
+ console.log = stdoutLog;
223
267
  }
224
268
  });
225
269
  // Subcommand: coverage gaps — enumerate unhandled branches via static analysis
@@ -70,7 +70,13 @@ Examples:
70
70
  // Fallback for environments where kernel isn't available
71
71
  const store = new Map();
72
72
  memory = {
73
- async get(key) { return store.get(key); },
73
+ // Like InMemoryWorkerMemory (#1028 N4): this process-local store holds
74
+ // only daemon keys, so a read of another namespace finds nothing.
75
+ async get(key, options) {
76
+ if (options?.namespace)
77
+ return undefined;
78
+ return store.get(key);
79
+ },
74
80
  async set(key, value) { store.set(key, value); },
75
81
  async search(pattern) {
76
82
  const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
@@ -5,6 +5,21 @@
5
5
  * Handles pattern management and statistics subcommands.
6
6
  */
7
7
  import { Command } from 'commander';
8
+ /**
9
+ * How a learned pattern reached vector search, by cause (#981, review N1).
10
+ * - `indexed`: stored with its vector in the active index.
11
+ * - `sqlite`: an embedder produced the vector and SQLite holds it (vector
12
+ * search uses it now); only the ANN index (patterns.rvf) was not open in
13
+ * this process. It is ingested automatically the next time the index opens.
14
+ * - `pending`: no vector (no embedding runtime); text search only until an
15
+ * embedder is configured and `aqe learning backfill-embeddings` runs.
16
+ */
17
+ export declare function describeVectorIndexState(pattern: {
18
+ embedding?: ArrayLike<number>;
19
+ }, indexUnavailableCause?: string): {
20
+ vectorIndex: 'indexed' | 'sqlite' | 'pending';
21
+ notice?: string;
22
+ };
8
23
  /**
9
24
  * Register stats, list, emit, learn, and search subcommands on the hooks command.
10
25
  */
@@ -7,7 +7,37 @@
7
7
  import chalk from 'chalk';
8
8
  import { QE_HOOK_EVENTS } from '../../../learning/qe-hooks.js';
9
9
  import { safeJsonParse } from '../../../shared/safe-json.js';
10
+ import { committedPendingIndexPatternId } from '../../../learning/pattern-mutation-error.js';
10
11
  import { getHooksSystem, printJson, printSuccess, printError, } from './hooks-shared.js';
12
+ /**
13
+ * How a learned pattern reached vector search, by cause (#981, review N1).
14
+ * - `indexed`: stored with its vector in the active index.
15
+ * - `sqlite`: an embedder produced the vector and SQLite holds it (vector
16
+ * search uses it now); only the ANN index (patterns.rvf) was not open in
17
+ * this process. It is ingested automatically the next time the index opens.
18
+ * - `pending`: no vector (no embedding runtime); text search only until an
19
+ * embedder is configured and `aqe learning backfill-embeddings` runs.
20
+ */
21
+ export function describeVectorIndexState(pattern, indexUnavailableCause) {
22
+ const hasVector = Boolean(pattern.embedding && pattern.embedding.length > 0);
23
+ if (!hasVector) {
24
+ return {
25
+ vectorIndex: 'pending',
26
+ notice: 'Pattern stored in SQLite without a vector (no embedding runtime is available). ' +
27
+ 'Text search finds it now. Set AQE_EMBEDDER_ENDPOINT or install @huggingface/transformers, then run ' +
28
+ '`aqe learning backfill-embeddings` to enable semantic search for it.',
29
+ };
30
+ }
31
+ if (indexUnavailableCause) {
32
+ return {
33
+ vectorIndex: 'sqlite',
34
+ notice: 'Pattern stored; its vector is stored in SQLite and vector search can use it now. ' +
35
+ `The ANN index (patterns.rvf) was not open in this process (${indexUnavailableCause}); ` +
36
+ 'the vector is added to it automatically the next time the index opens.',
37
+ };
38
+ }
39
+ return { vectorIndex: 'indexed' };
40
+ }
11
41
  /**
12
42
  * Register stats, list, emit, learn, and search subcommands on the hooks command.
13
43
  */
@@ -161,10 +191,27 @@ export function registerStatsHooks(hooks) {
161
191
  tags: options.tags || [],
162
192
  },
163
193
  });
194
+ // #981: COMMITTED_PENDING_INDEX means the authoritative SQLite row was
195
+ // written and only the derived vector index is unavailable (e.g. no
196
+ // embedding runtime). That is a stored pattern, not a failure.
197
+ let pattern = result.success ? result.value : null;
198
+ let indexCause;
164
199
  if (!result.success) {
165
- throw new Error(result.error.message);
200
+ const committedId = committedPendingIndexPatternId(result.error);
201
+ if (!committedId) {
202
+ throw new Error(result.error.message);
203
+ }
204
+ pattern = await reasoningBank.getPattern(committedId);
205
+ if (!pattern) {
206
+ throw new Error(result.error.message);
207
+ }
208
+ const cause = result.error.cause;
209
+ indexCause = cause instanceof Error ? cause.message : 'the vector index is unavailable';
166
210
  }
167
- const pattern = result.value;
211
+ if (!pattern) {
212
+ throw new Error('learn failed: no pattern returned');
213
+ }
214
+ const { vectorIndex, notice: pendingWarning } = describeVectorIndexState(pattern, indexCause);
168
215
  if (options.json) {
169
216
  printJson({
170
217
  success: true,
@@ -174,6 +221,8 @@ export function registerStatsHooks(hooks) {
174
221
  type: pattern.patternType,
175
222
  domain: pattern.qeDomain,
176
223
  },
224
+ vectorIndex,
225
+ ...(pendingWarning ? { warning: pendingWarning } : {}),
177
226
  });
178
227
  }
179
228
  else {
@@ -181,6 +230,9 @@ export function registerStatsHooks(hooks) {
181
230
  console.log(chalk.dim(` ID: ${pattern.id}`));
182
231
  console.log(chalk.dim(` Domain: ${pattern.qeDomain}`));
183
232
  console.log(chalk.dim(` Tier: ${pattern.tier}`));
233
+ if (pendingWarning) {
234
+ console.log(chalk.yellow(` ${vectorIndex === 'pending' ? 'Vector index pending' : 'Vector index'}: ${pendingWarning}`));
235
+ }
184
236
  }
185
237
  }
186
238
  catch (error) {