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
@@ -0,0 +1,130 @@
1
+ /**
2
+ * Agentic QE v3 - Shared CLI coverage verdict (#995, #1010, #1012)
3
+ *
4
+ * One resolution and one verdict for every CLI surface that reports coverage
5
+ * (`aqe coverage`, the `aqe ci` coverage phase), built on the same shared
6
+ * functions as the MCP `coverage_analyze_sublinear` handler
7
+ * (`resolveExistingCoverage`, `thresholdVerdict`, `reconcileRecommendations`):
8
+ *
9
+ * - measured — an instrumented report covers the target: judged on the
10
+ * metrics the report collected (an uncollected metric is null,
11
+ * never 0%, and is left out of the threshold);
12
+ * - unmeasured — the report has no entry for the target, the runner ran 0
13
+ * tests, or only test files were reported: no figure, exit 3;
14
+ * - estimate — no report exists, so the CLI shows a labelled STATIC
15
+ * ESTIMATE. It carries no threshold verdict, is never
16
+ * persisted as evidence, and also exits 3: nothing was measured;
17
+ * - error — the target is missing or the given report is unreadable.
18
+ */
19
+ import { type CoverageData } from './coverage-data.js';
20
+ import { type NoDataReason } from '../../coordination/handlers/coverage-target.js';
21
+ /** `aqe coverage` exit code when no coverage measurement exists for the target (#995). */
22
+ export declare const EXIT_UNMEASURED = 3;
23
+ /** Provenance labels, the same vocabulary as MCP `coverage_analyze_sublinear`. */
24
+ export declare const MEASURED_METHOD = "instrumented-report";
25
+ export declare const ESTIMATE_METHOD = "static-estimation";
26
+ export type CliCoverage = {
27
+ kind: 'data';
28
+ data: CoverageData;
29
+ projectRoot?: string;
30
+ } | {
31
+ kind: 'no-data';
32
+ reason: NoDataReason;
33
+ message: string;
34
+ } | {
35
+ kind: 'no-sources';
36
+ };
37
+ /**
38
+ * Resolve the coverage data for a CLI target (#995).
39
+ *
40
+ * Uses the SAME resolution and verdict as the MCP handler
41
+ * (`resolveExistingCoverage`), so CLI and MCP cannot disagree about what a
42
+ * report says for a target:
43
+ * - a coverage report file (lcov.info, coverage-final.json, ...) is parsed
44
+ * directly;
45
+ * - a directory or source file is scoped against the instrumented report of
46
+ * its PROJECT ROOT (nearest package.json/.git above it), not the cwd;
47
+ * - with no report at the project root, the CLI falls back to its labelled
48
+ * heuristic estimate (the CLI never runs the test suite).
49
+ */
50
+ export declare function resolveCliCoverageData(targetPath: string, log?: (message: string) => void): Promise<CliCoverage>;
51
+ /** Which optional metrics an instrumented report actually carries. */
52
+ export declare function metricsCollected(data: CoverageData): {
53
+ branch: boolean;
54
+ function: boolean;
55
+ statement: boolean;
56
+ };
57
+ /** The slice of the coverage-analysis domain API the verdict needs. */
58
+ export interface CoverageAnalyzeAPI {
59
+ analyze(request: {
60
+ coverageData: CoverageData;
61
+ threshold?: number;
62
+ includeFileDetails?: boolean;
63
+ measured?: boolean;
64
+ projectRoot?: string;
65
+ }): Promise<{
66
+ success: boolean;
67
+ value?: unknown;
68
+ error?: Error;
69
+ }>;
70
+ }
71
+ /** Summary figures; `null` = not collected / not measured — never 0%. */
72
+ export interface NullableSummary {
73
+ line: number | null;
74
+ branch: number | null;
75
+ function: number | null;
76
+ statement: number | null;
77
+ }
78
+ export type CliCoverageOutcome = {
79
+ kind: 'no-sources';
80
+ } | {
81
+ kind: 'error';
82
+ reason: NoDataReason;
83
+ message: string;
84
+ } | {
85
+ kind: 'unmeasured';
86
+ reason: NoDataReason;
87
+ message: string;
88
+ } | {
89
+ kind: 'analysis-failed';
90
+ message: string;
91
+ } | {
92
+ kind: 'estimate';
93
+ data: CoverageData;
94
+ /** Estimated figures — for display only. */
95
+ summary: NullableSummary & {
96
+ files: number;
97
+ };
98
+ message: string;
99
+ } | {
100
+ kind: 'measured';
101
+ data: CoverageData;
102
+ summary: NullableSummary & {
103
+ files: number;
104
+ };
105
+ collected: {
106
+ branch: boolean;
107
+ function: boolean;
108
+ statement: boolean;
109
+ };
110
+ verdict: {
111
+ overall: number;
112
+ meetsThreshold: boolean;
113
+ };
114
+ recommendations: string[];
115
+ };
116
+ /** Caller-facing explanation of a static estimate. */
117
+ export declare function estimateMessage(): string;
118
+ /**
119
+ * Resolve, analyze and judge coverage for a CLI target. Shared by
120
+ * `aqe coverage` and the `aqe ci` coverage phase.
121
+ */
122
+ export declare function evaluateCliCoverage(api: CoverageAnalyzeAPI, targetPath: string, threshold: number, log?: (message: string) => void): Promise<CliCoverageOutcome>;
123
+ /**
124
+ * Exit code: 0 meets (by more than 5%), 1 below / error, 2 within 5% above,
125
+ * 3 UNMEASURED (not in the report, 0 tests, test-only report, or estimate only).
126
+ */
127
+ export declare function coverageExitCode(outcome: CliCoverageOutcome, threshold: number): number;
128
+ /** The `-F json` document for an outcome (same shape in every case). */
129
+ export declare function coverageJson(outcome: CliCoverageOutcome, threshold: number, target: string): Record<string, unknown>;
130
+ //# sourceMappingURL=coverage-verdict.d.ts.map
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Agentic QE v3 - Shared CLI coverage verdict (#995, #1010, #1012)
3
+ *
4
+ * One resolution and one verdict for every CLI surface that reports coverage
5
+ * (`aqe coverage`, the `aqe ci` coverage phase), built on the same shared
6
+ * functions as the MCP `coverage_analyze_sublinear` handler
7
+ * (`resolveExistingCoverage`, `thresholdVerdict`, `reconcileRecommendations`):
8
+ *
9
+ * - measured — an instrumented report covers the target: judged on the
10
+ * metrics the report collected (an uncollected metric is null,
11
+ * never 0%, and is left out of the threshold);
12
+ * - unmeasured — the report has no entry for the target, the runner ran 0
13
+ * tests, or only test files were reported: no figure, exit 3;
14
+ * - estimate — no report exists, so the CLI shows a labelled STATIC
15
+ * ESTIMATE. It carries no threshold verdict, is never
16
+ * persisted as evidence, and also exits 3: nothing was measured;
17
+ * - error — the target is missing or the given report is unreadable.
18
+ */
19
+ import chalk from 'chalk';
20
+ import { walkSourceFiles } from './file-discovery.js';
21
+ import { buildCoverageData, summarizeCoverage } from './coverage-data.js';
22
+ import { describeNoData, reconcileRecommendations, resolveExistingCoverage, thresholdVerdict, } from '../../coordination/handlers/coverage-target.js';
23
+ /** `aqe coverage` exit code when no coverage measurement exists for the target (#995). */
24
+ export const EXIT_UNMEASURED = 3;
25
+ /** Provenance labels, the same vocabulary as MCP `coverage_analyze_sublinear`. */
26
+ export const MEASURED_METHOD = 'instrumented-report';
27
+ export const ESTIMATE_METHOD = 'static-estimation';
28
+ /**
29
+ * Resolve the coverage data for a CLI target (#995).
30
+ *
31
+ * Uses the SAME resolution and verdict as the MCP handler
32
+ * (`resolveExistingCoverage`), so CLI and MCP cannot disagree about what a
33
+ * report says for a target:
34
+ * - a coverage report file (lcov.info, coverage-final.json, ...) is parsed
35
+ * directly;
36
+ * - a directory or source file is scoped against the instrumented report of
37
+ * its PROJECT ROOT (nearest package.json/.git above it), not the cwd;
38
+ * - with no report at the project root, the CLI falls back to its labelled
39
+ * heuristic estimate (the CLI never runs the test suite).
40
+ */
41
+ export async function resolveCliCoverageData(targetPath, log = message => console.log(message)) {
42
+ const existing = await resolveExistingCoverage(targetPath);
43
+ if (existing.status === 'target-missing') {
44
+ return { kind: 'no-data', reason: 'target-missing', message: describeNoData('target-missing', targetPath, null) };
45
+ }
46
+ if (existing.status === 'evaluated') {
47
+ const { evaluation, projectRoot } = existing;
48
+ if (evaluation.status === 'measured') {
49
+ const files = evaluation.files;
50
+ return { kind: 'data', data: { files, summary: summarizeCoverage(files), instrumented: true }, projectRoot };
51
+ }
52
+ return { kind: 'no-data', reason: evaluation.reason, message: describeNoData(evaluation.reason, targetPath, projectRoot) };
53
+ }
54
+ const sourceFiles = walkSourceFiles(existing.target, { includeTests: false });
55
+ if (sourceFiles.length === 0)
56
+ return { kind: 'no-sources' };
57
+ log(chalk.gray(` Analyzing ${sourceFiles.length} files...\n`));
58
+ return { kind: 'data', data: buildCoverageData(sourceFiles, existing.projectRoot), projectRoot: existing.projectRoot };
59
+ }
60
+ /** Which optional metrics an instrumented report actually carries. */
61
+ export function metricsCollected(data) {
62
+ return {
63
+ branch: data.files.some(f => f.branches.total > 0),
64
+ function: data.files.some(f => f.functions.total > 0),
65
+ // #1027 N7: lcov / Cobertura carry no statement detail.
66
+ statement: data.files.some(f => f.statements.total > 0),
67
+ };
68
+ }
69
+ const isError = (reason) => reason === 'target-missing' || reason === 'unreadable-report';
70
+ /** Caller-facing explanation of a static estimate. */
71
+ export function estimateMessage() {
72
+ return 'UNMEASURED: no coverage report exists for this project, so these figures are a ' +
73
+ 'STATIC ESTIMATE derived from source shape — not measured coverage. No threshold verdict ' +
74
+ 'is given and nothing is stored as evidence. Run your tests with coverage first ' +
75
+ '(e.g. `npm test -- --coverage`) and re-run.';
76
+ }
77
+ /**
78
+ * Resolve, analyze and judge coverage for a CLI target. Shared by
79
+ * `aqe coverage` and the `aqe ci` coverage phase.
80
+ */
81
+ export async function evaluateCliCoverage(api, targetPath, threshold, log) {
82
+ const resolved = await resolveCliCoverageData(targetPath, log);
83
+ if (resolved.kind === 'no-sources')
84
+ return resolved;
85
+ if (resolved.kind === 'no-data') {
86
+ return isError(resolved.reason)
87
+ ? { kind: 'error', reason: resolved.reason, message: resolved.message }
88
+ : { kind: 'unmeasured', reason: resolved.reason, message: resolved.message };
89
+ }
90
+ const data = resolved.data;
91
+ const measured = data.instrumented;
92
+ // #1008: a heuristic estimate is shown, never persisted as coverage evidence.
93
+ const result = await api.analyze({
94
+ coverageData: data, threshold, includeFileDetails: true, measured,
95
+ ...(resolved.projectRoot ? { projectRoot: resolved.projectRoot } : {}),
96
+ });
97
+ if (!result.success || !result.value) {
98
+ return { kind: 'analysis-failed', message: result.error?.message || 'Coverage analysis failed' };
99
+ }
100
+ const report = result.value;
101
+ if (!measured) {
102
+ return { kind: 'estimate', data, summary: { ...report.summary }, message: estimateMessage() };
103
+ }
104
+ // #995 review NB5: a metric the report never collected is null — not 0 —
105
+ // and is left out of the threshold verdict (same rule as MCP).
106
+ const collected = metricsCollected(data);
107
+ const verdict = thresholdVerdict(report.summary, threshold, collected);
108
+ return {
109
+ kind: 'measured',
110
+ data,
111
+ collected,
112
+ verdict,
113
+ summary: {
114
+ ...report.summary,
115
+ branch: collected.branch ? report.summary.branch : null,
116
+ function: collected.function ? report.summary.function : null,
117
+ statement: collected.statement ? report.summary.statement : null,
118
+ },
119
+ // NB-A: the shortfall advice comes from the same verdict (shared with MCP).
120
+ recommendations: reconcileRecommendations(report.recommendations ?? [], verdict, threshold, collected),
121
+ };
122
+ }
123
+ /**
124
+ * Exit code: 0 meets (by more than 5%), 1 below / error, 2 within 5% above,
125
+ * 3 UNMEASURED (not in the report, 0 tests, test-only report, or estimate only).
126
+ */
127
+ export function coverageExitCode(outcome, threshold) {
128
+ switch (outcome.kind) {
129
+ case 'measured': {
130
+ const { overall, meetsThreshold } = outcome.verdict;
131
+ if (!meetsThreshold)
132
+ return 1;
133
+ return overall < threshold + 5 ? 2 : 0;
134
+ }
135
+ case 'estimate':
136
+ case 'unmeasured':
137
+ return EXIT_UNMEASURED;
138
+ case 'no-sources':
139
+ return 0;
140
+ default:
141
+ return 1;
142
+ }
143
+ }
144
+ /** The `-F json` document for an outcome (same shape in every case). */
145
+ export function coverageJson(outcome, threshold, target) {
146
+ const nulls = { line: null, branch: null, function: null, statement: null };
147
+ switch (outcome.kind) {
148
+ case 'measured':
149
+ return {
150
+ summary: outcome.summary,
151
+ meetsThreshold: outcome.verdict.meetsThreshold,
152
+ threshold,
153
+ recommendations: outcome.recommendations,
154
+ measured: true,
155
+ estimated: false,
156
+ coverageMethod: MEASURED_METHOD,
157
+ branchDataCollected: outcome.collected.branch,
158
+ functionDataCollected: outcome.collected.function,
159
+ statementDataCollected: outcome.collected.statement,
160
+ ...(outcome.data.unmeasuredFiles?.length ? { unmeasuredFiles: outcome.data.unmeasuredFiles } : {}),
161
+ };
162
+ case 'estimate':
163
+ return {
164
+ summary: outcome.summary,
165
+ meetsThreshold: null,
166
+ threshold,
167
+ measured: false,
168
+ estimated: true,
169
+ unmeasured: true,
170
+ coverageMethod: ESTIMATE_METHOD,
171
+ reason: 'no-coverage-report',
172
+ target,
173
+ warning: outcome.message,
174
+ };
175
+ case 'unmeasured':
176
+ case 'error':
177
+ return {
178
+ summary: nulls,
179
+ meetsThreshold: null,
180
+ threshold,
181
+ measured: false,
182
+ unmeasured: outcome.kind === 'unmeasured',
183
+ reason: outcome.reason,
184
+ target,
185
+ warning: outcome.message,
186
+ };
187
+ case 'analysis-failed':
188
+ return { summary: nulls, meetsThreshold: null, threshold, measured: false, target, error: outcome.message };
189
+ case 'no-sources':
190
+ return { summary: nulls, meetsThreshold: null, threshold, measured: false, target, warning: 'No source files found' };
191
+ }
192
+ }
193
+ //# sourceMappingURL=coverage-verdict.js.map
@@ -8,6 +8,7 @@
8
8
  */
9
9
  import { existsSync, readFileSync, readdirSync, statSync } from 'fs';
10
10
  import { join, extname } from 'path';
11
+ import { isAqeManagedDir } from '../../shared/aqe-managed-dirs.js';
11
12
  // ============================================================================
12
13
  // Source File Extensions by Language
13
14
  // ============================================================================
@@ -77,6 +78,10 @@ export function walkSourceFiles(targetPath, options = {}) {
77
78
  if (entry.isDirectory()) {
78
79
  if (SKIP_DIRS.has(entry.name))
79
80
  continue;
81
+ // #999: AQE state/assets are not source (.agentic-qe anywhere; .claude
82
+ // at the root or next to a nested .agentic-qe)
83
+ if (isAqeManagedDir(dir, entry.name, depth === 0))
84
+ continue;
80
85
  walk(join(dir, entry.name), depth + 1);
81
86
  }
82
87
  else if (entry.isFile()) {
@@ -58,14 +58,28 @@ export interface ValidationResult {
58
58
  export declare function validateRiskDecision(value: unknown): ValidationResult;
59
59
  export declare function validateFindingVerdict(value: unknown): ValidationResult;
60
60
  export declare function validateCoverageGap(value: unknown): ValidationResult;
61
+ /** #996: confidence cap for an approve that rests on static analysis alone (no gate). */
62
+ export declare const STATIC_APPROVAL_CONFIDENCE = 0.7;
61
63
  /**
62
64
  * Derive a RiskDecision from a quality-gate outcome (quality_assess boundary).
63
65
  * Indeterminate gates (passed undefined) escalate rather than guess.
66
+ *
67
+ * #996: when key metrics are unmeasured the decision escalates with lowered
68
+ * confidence, whatever `passed` says — never approve on missing data. When
69
+ * `gateEvaluated` is false the rationale says plainly that no gate ran.
64
70
  */
65
71
  export declare function buildRiskDecisionFromQualityGate(input: {
66
72
  passed?: boolean;
67
73
  qualityScore?: number;
68
74
  recommendations?: string[];
75
+ /** Requested metrics that had no measured data. */
76
+ unmeasured?: string[];
77
+ /** Share of requested metrics that were measured, in [0, 1]. */
78
+ evidenceConfidence?: number;
79
+ /** False for static analysis: no quality gate was evaluated. */
80
+ gateEvaluated?: boolean;
81
+ /** Measured metrics that fail their own limit — conclusive, so the decision blocks. */
82
+ failedMetrics?: string[];
69
83
  }): RiskDecision;
70
84
  export declare const RISK_DECISION_SCHEMA: {
71
85
  readonly $schema: "http://json-schema.org/draft-07/schema#";
@@ -176,21 +176,62 @@ export function validateCoverageGap(value) {
176
176
  // ============================================================================
177
177
  // Builders — derive contract envelopes at MCP boundaries
178
178
  // ============================================================================
179
+ /** #996: confidence cap for an approve that rests on static analysis alone (no gate). */
180
+ export const STATIC_APPROVAL_CONFIDENCE = 0.7;
179
181
  /**
180
182
  * Derive a RiskDecision from a quality-gate outcome (quality_assess boundary).
181
183
  * Indeterminate gates (passed undefined) escalate rather than guess.
184
+ *
185
+ * #996: when key metrics are unmeasured the decision escalates with lowered
186
+ * confidence, whatever `passed` says — never approve on missing data. When
187
+ * `gateEvaluated` is false the rationale says plainly that no gate ran.
182
188
  */
183
189
  export function buildRiskDecisionFromQualityGate(input) {
184
- const { passed, qualityScore, recommendations = [] } = input;
190
+ const { passed, qualityScore, recommendations = [], unmeasured = [], failedMetrics = [], gateEvaluated, } = input;
191
+ const noGate = gateEvaluated === false ? ' (no quality gate was evaluated)' : '';
192
+ const score = typeof qualityScore === 'number' ? ` with score ${qualityScore}` : '';
193
+ // A measured failure cannot be rescued by metrics that were never measured.
194
+ if (failedMetrics.length > 0) {
195
+ const missing = unmeasured.length > 0 ? `; also unmeasured: ${unmeasured.join(', ')}` : '';
196
+ return {
197
+ contract: 'risk-decision@1',
198
+ decision: 'block',
199
+ riskFactors: [
200
+ `failed: ${failedMetrics.join(', ')}`,
201
+ ...(unmeasured.length > 0 ? [`unmeasured: ${unmeasured.join(', ')}`] : []),
202
+ ...recommendations,
203
+ ].slice(0, 10),
204
+ confidence: 0.9,
205
+ rationale: `Measured ${failedMetrics.join(', ')} failed its threshold${missing}${noGate}`,
206
+ };
207
+ }
208
+ if (unmeasured.length > 0) {
209
+ const share = typeof input.evidenceConfidence === 'number' && Number.isFinite(input.evidenceConfidence)
210
+ ? Math.min(1, Math.max(0, input.evidenceConfidence))
211
+ : 0;
212
+ return {
213
+ contract: 'risk-decision@1',
214
+ decision: 'escalate',
215
+ riskFactors: [`unmeasured: ${unmeasured.join(', ')}`, ...recommendations].slice(0, 10),
216
+ confidence: Math.round(0.5 * share * 100) / 100,
217
+ rationale: `Insufficient evidence: ${unmeasured.join(', ')} not measured${noGate} — `
218
+ + 'measure the missing metrics or run the measured quality gate before deciding',
219
+ };
220
+ }
185
221
  const decision = passed === true ? 'approve' : passed === false ? 'block' : 'escalate';
222
+ const subject = gateEvaluated === false ? 'Static analysis' : 'Quality gate';
223
+ // #996 (N1): an approval no gate evaluated is weaker evidence than a gate pass.
224
+ const confidence = decision === 'escalate'
225
+ ? 0.5
226
+ : decision === 'approve' && gateEvaluated === false ? STATIC_APPROVAL_CONFIDENCE : 0.9;
186
227
  return {
187
228
  contract: 'risk-decision@1',
188
229
  decision,
189
230
  riskFactors: recommendations.slice(0, 10),
190
- confidence: decision === 'escalate' ? 0.5 : 0.9,
231
+ confidence,
191
232
  rationale: decision === 'escalate'
192
233
  ? 'Quality gate outcome indeterminate — manual review required'
193
- : `Quality gate ${passed ? 'passed' : 'failed'}${typeof qualityScore === 'number' ? ` with score ${qualityScore}` : ''}`,
234
+ : `${subject} ${passed ? 'passed' : 'failed'}${score}${noGate}`,
194
235
  };
195
236
  }
196
237
  // ============================================================================
@@ -10,6 +10,7 @@
10
10
  * for live metrics — keeping execution fully deterministic (SQL-only).
11
11
  */
12
12
  import { ok } from '../shared/types/index.js';
13
+ import { MEASURED_COVERAGE_SESSION_SQL } from '../feedback/coverage-session-provenance.js';
13
14
  function tryGetDb() {
14
15
  try {
15
16
  // Dynamic import to avoid hard dependency — the module may not be initialised
@@ -45,8 +46,10 @@ const qualityGateCheck = {
45
46
  try {
46
47
  // Latest coverage from coverage_sessions
47
48
  if (currentCoverage === null) {
48
- const row = db.prepare(`SELECT after_lines FROM coverage_sessions ORDER BY created_at DESC LIMIT 1`).get();
49
- currentCoverage = row?.after_lines ?? 0;
49
+ // #1014: skip legacy estimate/unmeasured rows without provenance.
50
+ const row = db.prepare(`SELECT after_lines FROM coverage_sessions WHERE ${MEASURED_COVERAGE_SESSION_SQL} ORDER BY created_at DESC LIMIT 1`).get();
51
+ // #1027 N6: no measured session → unmeasured (null), never 0%.
52
+ currentCoverage = typeof row?.after_lines === 'number' ? row.after_lines : null;
50
53
  }
51
54
  // Test pass rate from recent test_outcomes
52
55
  if (currentTestsPassingRate === null) {
@@ -70,16 +73,17 @@ const qualityGateCheck = {
70
73
  }
71
74
  }
72
75
  }
73
- // Apply defaults for anything still null
74
- currentCoverage = currentCoverage ?? 0;
76
+ // Apply defaults for anything still null — except coverage (#1027 N6):
77
+ // unmeasured coverage stays null and fails its check (no evidence ≠ 0%).
78
+ const coverageMeasured = currentCoverage !== null;
75
79
  currentTestsPassingRate = currentTestsPassingRate ?? 0;
76
80
  currentBugs = currentBugs ?? 0;
77
- const coveragePassed = currentCoverage >= coverageMin;
81
+ const coveragePassed = currentCoverage !== null && currentCoverage >= coverageMin;
78
82
  const testsPassed = currentTestsPassingRate >= testsPassingMin;
79
83
  const bugsPassed = currentBugs <= maxBugs;
80
84
  const passed = coveragePassed && testsPassed && bugsPassed;
81
85
  // Score is a normalized 0-1 value
82
- const coverageScore = Math.min(currentCoverage / coverageMin, 1);
86
+ const coverageScore = currentCoverage === null ? 0 : Math.min(currentCoverage / coverageMin, 1);
83
87
  const testsScore = Math.min(currentTestsPassingRate / testsPassingMin, 1);
84
88
  const bugsScore = maxBugs > 0 ? Math.max(0, 1 - currentBugs / maxBugs) : (currentBugs === 0 ? 1 : 0);
85
89
  const score = (coverageScore + testsScore + bugsScore) / 3;
@@ -88,7 +92,10 @@ const qualityGateCheck = {
88
92
  score: Math.round(score * 100) / 100,
89
93
  source: typeof input.currentCoverage === 'number' ? 'input' : 'database',
90
94
  details: {
91
- coverage: { current: currentCoverage, threshold: coverageMin, passed: coveragePassed },
95
+ coverage: {
96
+ current: currentCoverage, threshold: coverageMin, passed: coveragePassed,
97
+ ...(coverageMeasured ? {} : { unmeasured: true }),
98
+ },
92
99
  testsPassing: { current: currentTestsPassingRate, threshold: testsPassingMin, passed: testsPassed },
93
100
  bugs: { current: currentBugs, threshold: maxBugs, passed: bugsPassed },
94
101
  },
@@ -112,25 +119,29 @@ const coverageThresholdCheck = {
112
119
  const db = tryGetDb();
113
120
  if (db) {
114
121
  try {
115
- const row = db.prepare(`SELECT after_lines FROM coverage_sessions ORDER BY created_at DESC LIMIT 1`).get();
116
- currentCoverage = row?.after_lines ?? 0;
122
+ // #1014: skip legacy estimate/unmeasured rows without provenance.
123
+ const row = db.prepare(`SELECT after_lines FROM coverage_sessions WHERE ${MEASURED_COVERAGE_SESSION_SQL} ORDER BY created_at DESC LIMIT 1`).get();
124
+ // #1027 N6: no measured session → unmeasured (null), never 0%.
125
+ currentCoverage = typeof row?.after_lines === 'number' ? row.after_lines : null;
117
126
  }
118
127
  catch {
119
- currentCoverage = 0;
128
+ currentCoverage = null;
120
129
  }
121
130
  }
122
131
  else {
123
- currentCoverage = 0;
132
+ currentCoverage = null;
124
133
  }
125
134
  }
126
- const passed = currentCoverage >= minCoverage;
127
- const gap = passed ? 0 : Math.round((minCoverage - currentCoverage) * 100) / 100;
135
+ // Unmeasured coverage fails the check (no evidence), with no fake gap.
136
+ const passed = currentCoverage !== null && currentCoverage >= minCoverage;
137
+ const gap = currentCoverage === null ? null : passed ? 0 : Math.round((minCoverage - currentCoverage) * 100) / 100;
128
138
  return ok({
129
139
  currentCoverage,
130
140
  passed,
131
141
  gap,
132
142
  minCoverage,
133
143
  source,
144
+ ...(currentCoverage === null ? { unmeasured: true } : {}),
134
145
  });
135
146
  },
136
147
  };
@@ -5,5 +5,13 @@
5
5
  * Covers: index-code, predict-defects
6
6
  */
7
7
  import type { TaskHandlerContext } from './handler-types';
8
+ /** Project metric summary returned by the MCP index-code handler (#999). */
9
+ export interface IndexProjectMetricsSummary {
10
+ root: string;
11
+ loc: number;
12
+ locByLanguage: Record<string, number>;
13
+ tests: number;
14
+ toolsUsed: string[];
15
+ }
8
16
  export declare function registerCodeIntelligenceHandlers(ctx: TaskHandlerContext): void;
9
17
  //# sourceMappingURL=code-intelligence-handlers.d.ts.map
@@ -9,6 +9,39 @@ import * as path from 'path';
9
9
  import { ok, err } from '../../shared/types/index.js';
10
10
  import { toError } from '../../shared/error-utils.js';
11
11
  import { discoverSourceFiles } from './handler-utils.js';
12
+ import { resolveProjectRootFromPaths } from '../../domains/code-intelligence/project-root-resolver.js';
13
+ import { createLogger } from '../../logging/logger-factory.js';
14
+ const logger = createLogger('CodeIntelligenceHandlers');
15
+ async function collectProjectMetricsForTarget(ctx, targetPath, indexedFiles) {
16
+ if (!ctx.getCodeIntelligenceCoordinator)
17
+ return undefined;
18
+ const root = resolveProjectRootFromPaths(indexedFiles, { target: path.resolve(targetPath) });
19
+ if (!root) {
20
+ logger.debug('Skipping project metrics: no project root resolved (filesystem root or no paths)');
21
+ return undefined;
22
+ }
23
+ try {
24
+ const coordinator = await ctx.getCodeIntelligenceCoordinator();
25
+ if (!coordinator)
26
+ return undefined;
27
+ const metrics = await coordinator.collectProjectMetrics(root);
28
+ if (!metrics.success) {
29
+ logger.debug(`Project metrics unavailable: ${metrics.error.message}`);
30
+ return undefined;
31
+ }
32
+ return {
33
+ root,
34
+ loc: metrics.value.loc.total,
35
+ locByLanguage: metrics.value.loc.byLanguage,
36
+ tests: metrics.value.tests.total,
37
+ toolsUsed: metrics.value.toolsUsed,
38
+ };
39
+ }
40
+ catch (error) {
41
+ logger.debug(`Project metrics unavailable: ${toError(error).message}`);
42
+ return undefined;
43
+ }
44
+ }
12
45
  export function registerCodeIntelligenceHandlers(ctx) {
13
46
  // Register code indexing handler - REAL IMPLEMENTATION
14
47
  ctx.registerHandler('index-code', async (task) => {
@@ -45,6 +78,11 @@ export function registerCodeIntelligenceHandlers(ctx) {
45
78
  return result;
46
79
  }
47
80
  const indexResult = result.value;
81
+ // #999 MCP-CLI parity: `aqe code index` runs the coordinator's project
82
+ // metric step (LOC, tests, tools); run the same step here, rooted at the
83
+ // caller's target the way #997 resolves it. Best-effort: indexing has
84
+ // already succeeded, so a metric failure only omits projectMetrics.
85
+ const projectMetrics = await collectProjectMetricsForTarget(ctx, targetPath, filesToIndex);
48
86
  // Detect languages from files
49
87
  const detectedLanguages = new Set();
50
88
  const extToLang = {
@@ -78,6 +116,7 @@ export function registerCodeIntelligenceHandlers(ctx) {
78
116
  duration: indexResult.duration,
79
117
  errors: indexResult.errors,
80
118
  warnings: indexResult.warnings,
119
+ ...(projectMetrics ? { projectMetrics } : {}),
81
120
  });
82
121
  }
83
122
  catch (error) {