agentic-qe 3.15.5 → 3.15.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  2. package/.claude/skills/qe-court/evals/qe-court.yaml +3 -2
  3. package/.claude/skills/qe-quality-assessment/schemas/output.json +12 -2
  4. package/.claude/skills/skills-manifest.json +1 -1
  5. package/CHANGELOG.md +262 -0
  6. package/README.md +2 -0
  7. package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
  8. package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
  9. package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
  10. package/assets/skills/skills-manifest.json +1 -1
  11. package/dist/cli/bundle.js +8 -6
  12. package/dist/cli/chunks/adapter-PEOUNYXJ.js +2 -0
  13. package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-OS5G7KMQ.js} +2 -2
  14. package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-PI4I7PME.js} +2 -2
  15. package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-J7TXHX4U.js} +2 -2
  16. package/dist/cli/chunks/aqe-learning-engine-DHKZI5RX.js +2 -0
  17. package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-FXESDCFR.js} +4 -4
  18. package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-OWUGXKNT.js} +2 -2
  19. package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-EPAWLYIZ.js} +3 -3
  20. package/dist/cli/chunks/base-QZWK3D5P.js +2 -0
  21. package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-IYVR5EQY.js} +2 -2
  22. package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-3W2E6TC6.js} +3 -3
  23. package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-HU7VACJ4.js} +2 -2
  24. package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-72XOR6E2.js} +2 -2
  25. package/dist/cli/chunks/browser-workflow-ITPX72RX.js +2 -0
  26. package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-2423JAA5.js} +1 -1
  27. package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-24CENUT4.js} +3 -3
  28. package/dist/cli/chunks/chunk-2AYBYXOA.js +4 -0
  29. package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-2E3XWKEU.js} +2 -2
  30. package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-2RJYA6WK.js} +2 -2
  31. package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2YVJ5OUL.js} +5 -5
  32. package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34JLY3U6.js} +2 -2
  33. package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-3JD2USUH.js} +2 -2
  34. package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-3RM46XFP.js} +1 -1
  35. package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-44DPYNPE.js} +1 -1
  36. package/dist/cli/chunks/{chunk-AUZXRFOX.js → chunk-4DIZ5BT6.js} +2 -2
  37. package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-4G2VNW4C.js} +2 -2
  38. package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-56ZKQYZY.js} +3 -3
  39. package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-5KCBX225.js} +2 -2
  40. package/dist/cli/chunks/chunk-5KS7HA37.js +2 -0
  41. package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-5PBRBS7D.js} +2 -2
  42. package/dist/cli/chunks/chunk-5Q22XPTH.js +2 -0
  43. package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-634D2ENF.js} +2 -2
  44. package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-6AYRAOCA.js} +2 -2
  45. package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-6BO3WCK7.js} +2 -2
  46. package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-6FEQ73BF.js} +2 -2
  47. package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-6JT73S5B.js} +1 -1
  48. package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6OS7HREG.js} +1 -1
  49. package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6PKCQXEW.js} +2 -2
  50. package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-7EX4DEQR.js} +2 -2
  51. package/dist/cli/chunks/chunk-7UCVYYWL.js +3 -0
  52. package/dist/cli/chunks/chunk-AAA4SHEG.js +2 -0
  53. package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-AXO7OOOA.js} +2 -2
  54. package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-B7M323VL.js} +2 -2
  55. package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-BB7OLQKO.js} +1 -1
  56. package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-BTIBXGVQ.js} +4 -4
  57. package/dist/cli/chunks/chunk-BTYKGVJ5.js +2 -0
  58. package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-C2CUPJGR.js} +1 -1
  59. package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-C2MDBBFF.js} +3 -3
  60. package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-CG5DZCOZ.js} +1 -1
  61. package/dist/cli/chunks/chunk-CIFWOMNX.js +2 -0
  62. package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-CWPRU7ZI.js} +2 -2
  63. package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-CXTJ47QS.js} +2 -2
  64. package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-DCJW2DPL.js} +4 -4
  65. package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-DGK6GQMO.js} +2 -2
  66. package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-DVPGBDBP.js} +3 -3
  67. package/dist/cli/chunks/chunk-EB2PP6X2.js +2 -0
  68. package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-ECSLJJOQ.js} +1 -1
  69. package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-ED32XJ5R.js} +2 -2
  70. package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-EDU72RTW.js} +1 -1
  71. package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-EL75G2A3.js} +1 -1
  72. package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-EV2BYY6T.js} +1 -1
  73. package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-F62EKVVC.js} +2 -2
  74. package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-FTTFJ7SJ.js} +1 -1
  75. package/dist/cli/chunks/chunk-FVBFASOD.js +2 -0
  76. package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-G762PEFO.js} +26 -26
  77. package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-G7YTZTGU.js} +1 -1
  78. package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-GY2SAIXP.js} +2 -2
  79. package/dist/cli/chunks/chunk-H4WHDFB5.js +4 -0
  80. package/dist/cli/chunks/chunk-HLZATDD2.js +2 -0
  81. package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-HPG7354V.js} +2 -2
  82. package/dist/cli/chunks/{chunk-HLFDC4SF.js → chunk-HSDOOFV7.js} +1 -1
  83. package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-HTWIGQL4.js} +2 -2
  84. package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-HXBAQKMH.js} +2 -2
  85. package/dist/cli/chunks/chunk-HZFT3P5B.js +2 -0
  86. package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-I7H4IP7T.js} +2 -2
  87. package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-IARSGAG7.js} +2 -2
  88. package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-IC2WSSD5.js} +8 -8
  89. package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-ICPALF4Q.js} +2 -2
  90. package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-IWQQIXHO.js} +2 -2
  91. package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-IYQ7XNE5.js} +2 -2
  92. package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-J26GADQE.js} +418 -412
  93. package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-J43DV3ME.js} +1 -1
  94. package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-JFPXCQNP.js} +1 -1
  95. package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-JK6B3ULP.js} +2 -2
  96. package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-JPHDMHFG.js} +2 -2
  97. package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-JVYPXW6Y.js} +2 -2
  98. package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-JY4AIEZ7.js} +1 -1
  99. package/dist/cli/chunks/{chunk-MNQ36MAF.js → chunk-JY4WLN3K.js} +2 -2
  100. package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-JYXOFN3E.js} +2 -2
  101. package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-K7W55B7Q.js} +3 -3
  102. package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-KPOPBUUJ.js} +2 -2
  103. package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-LDXQRNTT.js} +1 -1
  104. package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-LDZWIV2O.js} +1 -1
  105. package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-LGBN7TKC.js} +2 -2
  106. package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-LMEU64TR.js} +2 -2
  107. package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-LP4AS2E4.js} +1 -1
  108. package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-LQOVA4YX.js} +2 -2
  109. package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-LVEX4GID.js} +2 -2
  110. package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-M63QB466.js} +2 -2
  111. package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-MDC4G323.js} +1 -1
  112. package/dist/cli/chunks/chunk-MHZPC4HJ.js +2 -0
  113. package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-MJJC6HUK.js} +1 -1
  114. package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-MKFQNCXI.js} +2 -2
  115. package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-MMXG3LL6.js} +2 -2
  116. package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-MNCF643K.js} +2 -2
  117. package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-MNZFEIE5.js} +1 -1
  118. package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-MQ6OF6DU.js} +1 -1
  119. package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-MRHM4COP.js} +2 -2
  120. package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-N4PMPSJJ.js} +2 -2
  121. package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-NZQPP533.js} +3 -3
  122. package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-OA4GR3EZ.js} +2 -2
  123. package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-OJEZNLB6.js} +2 -2
  124. package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-ONVALAZN.js} +2 -2
  125. package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-PEKDSJBC.js} +2 -2
  126. package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-PG64YV6C.js} +66 -65
  127. package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-PQV7E7XH.js} +2 -2
  128. package/dist/cli/chunks/chunk-PTK66HEY.js +2 -0
  129. package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-PUECC4WI.js} +2 -2
  130. package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-PXZKPUW6.js} +2 -2
  131. package/dist/cli/chunks/chunk-PYHYOKYT.js +2 -0
  132. package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-PZG3542B.js} +2 -2
  133. package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-Q2T5FXEA.js} +2 -2
  134. package/dist/cli/chunks/chunk-QJE6ZW2X.js +6 -0
  135. package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-QNQSM2OG.js} +2 -2
  136. package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QQT6QENQ.js} +9 -9
  137. package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-QVG4ZDXX.js} +3 -3
  138. package/dist/cli/chunks/chunk-QWLTHFZW.js +16 -0
  139. package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-RCYLCA7E.js} +10 -6
  140. package/dist/cli/chunks/{chunk-BMWAWZAN.js → chunk-REEIFA6A.js} +2 -2
  141. package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-RNYX4CPI.js} +2 -2
  142. package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-RORZ5O5Z.js} +2 -2
  143. package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-RRPYWBFX.js} +2 -2
  144. package/dist/cli/chunks/{chunk-XQRE2HWM.js → chunk-RXAFLK34.js} +2 -2
  145. package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-SQHLC6I5.js} +1 -1
  146. package/dist/cli/chunks/{chunk-DPV33C77.js → chunk-SSP2B2WR.js} +2 -2
  147. package/dist/cli/chunks/chunk-SX2YSHE7.js +115 -0
  148. package/dist/cli/chunks/chunk-T3ZDVU6F.js +5 -0
  149. package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-T6W5APYP.js} +1 -1
  150. package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-TU4LIIOP.js} +2 -2
  151. package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-UBYCR3O4.js} +2 -2
  152. package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-UCLN6AME.js} +1 -1
  153. package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-UIYKR2SA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-UUHIEM2M.js} +18 -18
  155. package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-UY3REQOK.js} +2 -2
  156. package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-V2SAEMZY.js} +1 -1
  157. package/dist/cli/chunks/{chunk-JANLATHN.js → chunk-V5NGBQAQ.js} +2 -2
  158. package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-VCA6YYII.js} +1 -1
  159. package/dist/cli/chunks/chunk-VJRZFWR5.js +2 -0
  160. package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-VKPKYMCT.js} +2 -2
  161. package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-VNW5Q2CX.js} +2 -2
  162. package/dist/cli/chunks/chunk-VUFRTGML.js +3 -0
  163. package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-W4X2VTIY.js} +2 -2
  164. package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-WTLIEBDH.js} +1 -1
  165. package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-WUV5RZUI.js} +2 -2
  166. package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-WXI2STKQ.js} +2 -2
  167. package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-XEWXYGJI.js} +2 -2
  168. package/dist/cli/chunks/{chunk-DPYDUKVZ.js → chunk-XNSQZ3O7.js} +2 -2
  169. package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-XTJMY3KS.js} +1 -1
  170. package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-XXAVQACL.js} +1 -1
  171. package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-Y4SAWE45.js} +1 -1
  172. package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-Y6A46M3B.js} +2 -2
  173. package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-YDZJWDR6.js} +3 -3
  174. package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-YFOBQSOW.js} +2 -2
  175. package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-YK3NOC2R.js} +2 -2
  176. package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-YUC7RJGR.js} +1 -1
  177. package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-Z3VJLWRR.js} +2 -2
  178. package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-ZLVQSEZK.js} +2 -2
  179. package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-ZRLNACPY.js} +2 -2
  180. package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-ZTMZFF25.js} +2 -2
  181. package/dist/cli/chunks/chunk-ZUMDDMDE.js +3 -0
  182. package/dist/cli/chunks/ci-5HEXJZ2C.js +81 -0
  183. package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-WU4NPDAM.js} +2 -2
  184. package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-BJQVXX5E.js} +2 -2
  185. package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-3BMGTQCB.js} +2 -2
  186. package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-GVDGJWMU.js} +2 -2
  187. package/dist/cli/chunks/client-S7GNYTZ5.js +2 -0
  188. package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-V4MRGWVA.js} +2 -2
  189. package/dist/cli/chunks/{code-QSZTDINQ.js → code-A3TGQPEO.js} +3 -3
  190. package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-YJQSYWD3.js} +2 -2
  191. package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-7N7UQPAH.js} +2 -2
  192. package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-PPGVYLZS.js} +2 -2
  193. package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-XZTFLYV5.js} +2 -2
  194. package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-Z5I57RAH.js} +2 -2
  195. package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-F5YZ6BHB.js} +2 -2
  196. package/dist/cli/chunks/core-handlers-CUEPOQIO.js +2 -0
  197. package/dist/cli/chunks/{cost-tracker-RIN4JDDM.js → cost-tracker-GO33ZQAP.js} +2 -2
  198. package/dist/cli/chunks/coverage-GSHKLY74.js +49 -0
  199. package/dist/cli/chunks/cross-domain-router-CXN5QFEV.js +2 -0
  200. package/dist/cli/chunks/{cursor-installer-POM7NGCC.js → cursor-installer-JJ7IVJZB.js} +2 -2
  201. package/dist/cli/chunks/daemon-3DQCKRYO.js +10 -0
  202. package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-IRL7QRNE.js} +5 -5
  203. package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-ORXSUHPA.js} +2 -2
  204. package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-RHU62KRI.js} +2 -2
  205. package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-3VKV4Z6C.js} +2 -2
  206. package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-SFIML4FK.js} +2 -2
  207. package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-CJ4FA3OC.js} +2 -2
  208. package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.js → domain-transfer-BCRKPCAA.js} +2 -2
  209. package/dist/cli/chunks/dream-5AUNJW24.js +2 -0
  210. package/dist/cli/chunks/embed-and-insert-pattern-VL3HFLPV.js +3 -0
  211. package/dist/cli/chunks/{eval-K7E4XXBS.js → eval-GGKRI4P5.js} +2 -2
  212. package/dist/cli/chunks/experience-capture-middleware-F72TIRQY.js +40 -0
  213. package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-7KOOF3MA.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-FNHBTHBH.js} +2 -2
  215. package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-IOZEWWFU.js} +2 -2
  216. package/dist/cli/chunks/file-discovery-AYWF357I.js +2 -0
  217. package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-QX5KXTRC.js} +3 -3
  218. package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-OH2DOQP7.js} +2 -2
  219. package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.js → heartbeat-handler-W67NXTNE.js} +4 -4
  220. package/dist/cli/chunks/heartbeat-scheduler-7ZIDVXIP.js +2 -0
  221. package/dist/cli/chunks/hnsw-adapter-P77OC7FM.js +2 -0
  222. package/dist/cli/chunks/hnsw-index-3LBOTQAW.js +2 -0
  223. package/dist/cli/chunks/{hnsw-legacy-bridge-KRS7SSFM.js → hnsw-legacy-bridge-6MLLOGOE.js} +2 -2
  224. package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-4UDISJ3G.js} +2 -2
  225. package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-NOQJWQ4P.js} +43 -43
  226. package/dist/cli/chunks/hybrid-backend-LOM54PDD.js +2 -0
  227. package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-2OD3APVP.js} +2 -2
  228. package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.js → hypergraph-handler-5AZGMBUM.js} +3 -3
  229. package/dist/cli/chunks/impact-analyzer-QSDJVBPS.js +2 -0
  230. package/dist/cli/chunks/init-guard-SMGJ45PW.js +2 -0
  231. package/dist/cli/chunks/init-handler-5T4MP2NM.js +88 -0
  232. package/dist/cli/chunks/init-wizard-MK2325JJ.js +2 -0
  233. package/dist/cli/chunks/kernel-2NJQQ2KT.js +2 -0
  234. package/dist/cli/chunks/{kilocode-installer-TEPR2ZJD.js → kilocode-installer-RLZYLVQJ.js} +2 -2
  235. package/dist/cli/chunks/{kiro-installer-RUKHGDEE.js → kiro-installer-LFZOC7VD.js} +2 -2
  236. package/dist/cli/chunks/knowledge-graph-SDISHO62.js +2 -0
  237. package/dist/cli/chunks/learning-XRPGLUWR.js +122 -0
  238. package/dist/cli/chunks/{llm-router-7GECMDCP.js → llm-router-OMK5HYPH.js} +4 -4
  239. package/dist/cli/chunks/llm-router-service-YTCMRBAN.js +2 -0
  240. package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XADC7KCU.js} +2 -2
  241. package/dist/cli/chunks/load-test-RPKHLBCC.js +2 -0
  242. package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-PIBKSSVU.js} +2 -2
  243. package/dist/cli/chunks/{memory-HYC4M4XS.js → memory-AP7EZERS.js} +5 -5
  244. package/dist/cli/chunks/memory-backend-BZXFO4JZ.js +2 -0
  245. package/dist/cli/chunks/memory-handlers-MOFDNB6E.js +2 -0
  246. package/dist/cli/chunks/{multi-model-executor-T7FYKM6T.js → multi-model-executor-7JJ2FZ33.js} +2 -2
  247. package/dist/cli/chunks/{opencode-installer-3USXVT5M.js → opencode-installer-ZZZ6EBYJ.js} +2 -2
  248. package/dist/cli/chunks/orchestrator-2H2YKSGJ.js +452 -0
  249. package/dist/cli/chunks/pattern-null-store-4PRPIOR6.js +2 -0
  250. package/dist/cli/chunks/{pattern-usage-recorder-CMZLPX2K.js → pattern-usage-recorder-7MJJWC2Z.js} +2 -2
  251. package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-LIE5BWQY.js} +2 -2
  252. package/dist/cli/chunks/{platform-2MCRKC25.js → platform-SMYUNLGX.js} +2 -2
  253. package/dist/cli/chunks/plugin-LJDIXQNT.js +27 -0
  254. package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.js → prime-radiant-advanced-wasm-RIDNE5D2.js} +2 -2
  255. package/dist/cli/chunks/project-root-NBIQF63D.js +2 -0
  256. package/dist/cli/chunks/protocol-executor-BRPGIYWQ.js +2 -0
  257. package/dist/cli/chunks/{protocol-handler-DZ26OYVZ.js → protocol-handler-YVM66DLI.js} +2 -2
  258. package/dist/cli/chunks/{prove-QWONEJWX.js → prove-ZBDT52GD.js} +2 -2
  259. package/dist/cli/chunks/qe-reasoning-bank-GDZACWKW.js +2 -0
  260. package/dist/cli/chunks/{quality-WFH54FY7.js → quality-DUKXGDDO.js} +2 -2
  261. package/dist/cli/chunks/{quality-gate-ONJB7XU7.js → quality-gate-SM3RXF4V.js} +3 -3
  262. package/dist/cli/chunks/queen-coordinator-LDKLBPD5.js +2 -0
  263. package/dist/cli/chunks/real-embeddings-4QLQZDB5.js +2 -0
  264. package/dist/cli/chunks/{ref-validation-HW5Y55ZC.js → ref-validation-M3EO32YQ.js} +2 -2
  265. package/dist/cli/chunks/{roocode-installer-5OABDNZT.js → roocode-installer-S6Q5OLV5.js} +2 -2
  266. package/dist/cli/chunks/router-H5YSIRH2.js +2 -0
  267. package/dist/cli/chunks/routing-feedback-5R36TJDH.js +2 -0
  268. package/dist/cli/chunks/{routing-handler-CVHVOQTC.js → routing-handler-55FMUACP.js} +2 -2
  269. package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.js → ruvector-commands-QATKAAPK.js} +2 -2
  270. package/dist/cli/chunks/rvf-dual-writer-TT2DBQQQ.js +2 -0
  271. package/dist/cli/chunks/rvf-migration-adapter-BCLFJKSK.js +2 -0
  272. package/dist/cli/chunks/rvf-migration-coordinator-RFXFU6JD.js +2 -0
  273. package/dist/cli/chunks/rvf-native-adapter-UXI66OQJ.js +2 -0
  274. package/dist/cli/chunks/{rvf-store-integrity-UGUXKIFX.js → rvf-store-integrity-PKDVXQAW.js} +2 -2
  275. package/dist/cli/chunks/safe-db-MSTD2GDH.js +2 -0
  276. package/dist/cli/chunks/schedule-KST6KIFD.js +2 -0
  277. package/dist/cli/chunks/scheduler-FTQS6YK3.js +2 -0
  278. package/dist/cli/chunks/security-CMRB6WA3.js +18 -0
  279. package/dist/cli/chunks/shared-rvf-adapter-YHLLNFHF.js +2 -0
  280. package/dist/cli/chunks/{shared-rvf-dual-writer-ZSHYG5IA.js → shared-rvf-dual-writer-4BGDVPQ7.js} +2 -2
  281. package/dist/cli/chunks/sqlite-persistence-ZX5QFDMR.js +2 -0
  282. package/dist/cli/chunks/{standalone-memory-MHZEEYMK.js → standalone-memory-LUHKQAGM.js} +2 -2
  283. package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-S6S5PNR7.js} +2 -2
  284. package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-PQ7NZAJ4.js} +2 -2
  285. package/dist/cli/chunks/{sync-PDPORHVN.js → sync-Q6KRQXU6.js} +2 -2
  286. package/dist/cli/chunks/sync-S744AEJC.js +2 -0
  287. package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-GAMGEHUW.js} +2 -2
  288. package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-6CRDEELN.js} +3 -3
  289. package/dist/cli/chunks/{test-DMBJFQNL.js → test-FNH67DBK.js} +12 -12
  290. package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-NZA5SHK6.js} +3 -3
  291. package/dist/cli/chunks/token-bootstrap-CXKG55JD.js +2 -0
  292. package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-M7WWEDJX.js} +2 -2
  293. package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-2IFMCK6A.js} +2 -2
  294. package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-NMNA6RJC.js} +2 -2
  295. package/dist/cli/chunks/{types-K4FLXR2K.js → types-N7FWTOLD.js} +2 -2
  296. package/dist/cli/chunks/unified-memory-2Z2F446J.js +2 -0
  297. package/dist/cli/chunks/unified-memory-hnsw-A4EWYPJQ.js +2 -0
  298. package/dist/cli/chunks/unified-persistence-Z6N6JZFA.js +2 -0
  299. package/dist/cli/chunks/{upgrade-M3ATDRMK.js → upgrade-KDB5RGL7.js} +2 -2
  300. package/dist/cli/chunks/{validate-AAP773B3.js → validate-KMUV5FUA.js} +2 -2
  301. package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-ANZWRCJU.js} +2 -2
  302. package/dist/cli/chunks/visual-security-GXYZV7KR.js +2 -0
  303. package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-SXXC4NMS.js} +2 -2
  304. package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-2LWSKMBU.js} +2 -2
  305. package/dist/cli/chunks/witness-chain-52PEIEGK.js +2 -0
  306. package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.js → witness-chain-JJMSJFZP.js} +2 -2
  307. package/dist/cli/chunks/witness-chain-repair-OX7VFW6T.js +2 -0
  308. package/dist/cli/chunks/{witness-chain-verifier-Q2KW3QEQ.js → witness-chain-verifier-QLSMXHAZ.js} +2 -2
  309. package/dist/cli/chunks/witness-key-manager-3DS4L7LE.js +2 -0
  310. package/dist/cli/chunks/{workflow-CX6SHFBW.js → workflow-ARWAMHD3.js} +28 -28
  311. package/dist/cli/chunks/workflow-orchestrator-DORMQMG7.js +2 -0
  312. package/dist/cli/chunks/wrappers-J6KGTUSJ.js +2 -0
  313. package/dist/cli/commands/ci.js +47 -25
  314. package/dist/cli/commands/coverage.d.ts +1 -28
  315. package/dist/cli/commands/coverage.js +63 -134
  316. package/dist/cli/commands/daemon.js +7 -1
  317. package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
  318. package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
  319. package/dist/cli/commands/learning.js +50 -9
  320. package/dist/cli/commands/security.d.ts +16 -0
  321. package/dist/cli/commands/security.js +76 -9
  322. package/dist/cli/commands/test.js +6 -7
  323. package/dist/cli/commands/workflow.js +9 -5
  324. package/dist/cli/handlers/init-guard.d.ts +33 -0
  325. package/dist/cli/handlers/init-guard.js +66 -0
  326. package/dist/cli/handlers/init-handler.d.ts +3 -0
  327. package/dist/cli/handlers/init-handler.js +64 -54
  328. package/dist/cli/handlers/interfaces.js +5 -1
  329. package/dist/cli/index.js +11 -0
  330. package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
  331. package/dist/cli/scheduler/persistent-scheduler.js +107 -41
  332. package/dist/cli/utils/ci-output.d.ts +13 -1
  333. package/dist/cli/utils/ci-output.js +21 -2
  334. package/dist/cli/utils/coverage-data.d.ts +3 -0
  335. package/dist/cli/utils/coverage-data.js +14 -39
  336. package/dist/cli/utils/coverage-verdict.d.ts +130 -0
  337. package/dist/cli/utils/coverage-verdict.js +193 -0
  338. package/dist/cli/utils/file-discovery.js +5 -0
  339. package/dist/coordination/deterministic-actions.js +24 -13
  340. package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
  341. package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
  342. package/dist/coordination/handlers/coverage-handlers.js +34 -6
  343. package/dist/coordination/handlers/coverage-runner.d.ts +22 -0
  344. package/dist/coordination/handlers/coverage-runner.js +105 -10
  345. package/dist/coordination/handlers/coverage-target.d.ts +1 -0
  346. package/dist/coordination/handlers/coverage-target.js +4 -1
  347. package/dist/coordination/handlers/handler-types.d.ts +9 -0
  348. package/dist/coordination/handlers/handler-utils.d.ts +14 -1
  349. package/dist/coordination/handlers/handler-utils.js +46 -22
  350. package/dist/coordination/handlers/quality-handlers.js +108 -18
  351. package/dist/coordination/handlers/security-handlers.js +22 -6
  352. package/dist/coordination/handlers/test-execution-handlers.js +4 -1
  353. package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
  354. package/dist/coordination/protocols/defect-investigation.js +12 -3
  355. package/dist/coordination/protocols/quality-gate.js +10 -6
  356. package/dist/coordination/protocols/security-audit.js +11 -0
  357. package/dist/coordination/result-saver.d.ts +31 -0
  358. package/dist/coordination/result-saver.js +146 -46
  359. package/dist/coordination/task-executor.d.ts +7 -0
  360. package/dist/coordination/task-executor.js +32 -3
  361. package/dist/domains/code-intelligence/plugin.js +4 -0
  362. package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
  363. package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
  364. package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
  365. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
  366. package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
  367. package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
  368. package/dist/domains/coverage-analysis/collected-metrics.d.ts +35 -0
  369. package/dist/domains/coverage-analysis/collected-metrics.js +42 -0
  370. package/dist/domains/coverage-analysis/coordinator.js +18 -6
  371. package/dist/domains/coverage-analysis/interfaces.d.ts +44 -0
  372. package/dist/domains/coverage-analysis/interfaces.js +6 -1
  373. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +61 -34
  374. package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
  375. package/dist/domains/defect-intelligence/plugin.js +4 -0
  376. package/dist/domains/defect-intelligence/services/defect-predictor.js +13 -8
  377. package/dist/domains/learning-optimization/coordinator.js +4 -0
  378. package/dist/domains/learning-optimization/plugin.js +4 -0
  379. package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
  380. package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
  381. package/dist/domains/quality-assessment/coordinator.js +10 -6
  382. package/dist/domains/quality-assessment/coverage-report-event.d.ts +32 -8
  383. package/dist/domains/quality-assessment/coverage-report-event.js +28 -6
  384. package/dist/domains/quality-assessment/index.d.ts +1 -1
  385. package/dist/domains/quality-assessment/interfaces.d.ts +50 -0
  386. package/dist/domains/quality-assessment/quality-evidence.d.ts +49 -3
  387. package/dist/domains/quality-assessment/quality-evidence.js +62 -0
  388. package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
  389. package/dist/domains/quality-assessment/services/quality-analyzer.js +197 -112
  390. package/dist/domains/quality-assessment/services/quality-gate.js +12 -3
  391. package/dist/domains/security-compliance/dependency-advisory-engine.d.ts +52 -0
  392. package/dist/domains/security-compliance/dependency-advisory-engine.js +113 -0
  393. package/dist/domains/security-compliance/interfaces.d.ts +30 -0
  394. package/dist/domains/security-compliance/plugin.d.ts +7 -1
  395. package/dist/domains/security-compliance/plugin.js +19 -0
  396. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
  397. package/dist/domains/security-compliance/services/scanners/dependency-resolver.d.ts +71 -0
  398. package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +232 -0
  399. package/dist/domains/security-compliance/services/scanners/dependency-scanner.d.ts +21 -6
  400. package/dist/domains/security-compliance/services/scanners/dependency-scanner.js +142 -64
  401. package/dist/domains/security-compliance/services/scanners/lockfile-versions.d.ts +43 -0
  402. package/dist/domains/security-compliance/services/scanners/lockfile-versions.js +248 -0
  403. package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +30 -2
  404. package/dist/domains/security-compliance/services/security-auditor.d.ts +19 -6
  405. package/dist/domains/security-compliance/services/security-auditor.js +133 -92
  406. package/dist/domains/test-execution/interfaces.d.ts +10 -6
  407. package/dist/domains/test-execution/plugin.js +4 -0
  408. package/dist/domains/test-execution/services/retry-handler.js +17 -6
  409. package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
  410. package/dist/domains/test-execution/services/test-executor.js +239 -109
  411. package/dist/domains/test-generation/coordinator.js +4 -0
  412. package/dist/domains/test-generation/plugin.js +4 -0
  413. package/dist/feedback/coverage-learner.js +4 -1
  414. package/dist/feedback/coverage-session-provenance.d.ts +29 -0
  415. package/dist/feedback/coverage-session-provenance.js +39 -0
  416. package/dist/init/orchestrator.js +2 -0
  417. package/dist/init/phases/09-assets.d.ts +4 -0
  418. package/dist/init/phases/09-assets.js +35 -0
  419. package/dist/init/retired-assets.d.ts +86 -0
  420. package/dist/init/retired-assets.js +230 -0
  421. package/dist/init/skills-installer.d.ts +2 -0
  422. package/dist/init/skills-installer.js +4 -0
  423. package/dist/init/types.d.ts +3 -0
  424. package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
  425. package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
  426. package/dist/integrations/ruvector/server-client.js +4 -12
  427. package/dist/kernel/project-root.d.ts +17 -0
  428. package/dist/kernel/project-root.js +54 -2
  429. package/dist/kernel/shared-dirs.d.ts +66 -0
  430. package/dist/kernel/shared-dirs.js +180 -0
  431. package/dist/learning/daily-log.js +2 -1
  432. package/dist/learning/experience-capture-middleware.d.ts +22 -0
  433. package/dist/learning/experience-capture-middleware.js +35 -0
  434. package/dist/learning/learnable-result.d.ts +16 -0
  435. package/dist/learning/learnable-result.js +24 -0
  436. package/dist/learning/pattern-mutation-error.d.ts +8 -0
  437. package/dist/learning/pattern-mutation-error.js +12 -0
  438. package/dist/learning/qe-reasoning-bank.d.ts +10 -0
  439. package/dist/learning/qe-reasoning-bank.js +50 -1
  440. package/dist/learning/rvf-reconcile.d.ts +39 -0
  441. package/dist/learning/rvf-reconcile.js +40 -0
  442. package/dist/learning/sqlite-persistence.d.ts +14 -0
  443. package/dist/learning/sqlite-persistence.js +36 -0
  444. package/dist/mcp/bundle.js +908 -896
  445. package/dist/mcp/handlers/domain-handler-configs.d.ts +35 -1
  446. package/dist/mcp/handlers/domain-handler-configs.js +42 -4
  447. package/dist/mcp/handlers/handler-factory.js +40 -14
  448. package/dist/mcp/protocol-server.js +29 -3
  449. package/dist/mcp/tool-cache-scope.d.ts +31 -0
  450. package/dist/mcp/tool-cache-scope.js +71 -0
  451. package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
  452. package/dist/mcp/types.d.ts +10 -0
  453. package/dist/optimization/session-cache.d.ts +19 -1
  454. package/dist/optimization/session-cache.js +36 -2
  455. package/dist/plugins/cache.js +2 -1
  456. package/dist/plugins/sources/github.js +2 -1
  457. package/dist/plugins/sources/npm.js +2 -1
  458. package/dist/shared/aqe-managed-dirs.d.ts +24 -0
  459. package/dist/shared/aqe-managed-dirs.js +56 -0
  460. package/dist/shared/events/domain-events.d.ts +18 -3
  461. package/dist/shared/events/domain-events.js +4 -0
  462. package/dist/shared/http/http-client.d.ts +6 -0
  463. package/dist/shared/http/http-client.js +13 -15
  464. package/dist/shared/io/file-reader.d.ts +26 -0
  465. package/dist/shared/io/file-reader.js +111 -17
  466. package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
  467. package/dist/shared/llm/providers/response-deadline.js +17 -5
  468. package/dist/shared/metrics/code-metrics.d.ts +24 -0
  469. package/dist/shared/metrics/code-metrics.js +93 -6
  470. package/dist/shared/metrics/index.d.ts +1 -1
  471. package/dist/shared/security/index.d.ts +2 -2
  472. package/dist/shared/security/index.js +1 -1
  473. package/dist/shared/security/osv-client.d.ts +79 -132
  474. package/dist/shared/security/osv-client.js +344 -167
  475. package/dist/shared/security/osv-lookup.d.ts +124 -0
  476. package/dist/shared/security/osv-lookup.js +246 -0
  477. package/dist/shared/security/osv-types.d.ts +119 -0
  478. package/dist/shared/security/osv-types.js +6 -0
  479. package/dist/workers/interfaces.d.ts +15 -2
  480. package/dist/workers/namespaced-keys.d.ts +16 -0
  481. package/dist/workers/namespaced-keys.js +24 -0
  482. package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
  483. package/dist/workers/quality-daemon/coverage-delta.js +13 -6
  484. package/dist/workers/quality-daemon/index.js +6 -5
  485. package/dist/workers/quality-daemon/notification-service.js +3 -3
  486. package/dist/workers/quality-daemon/persistent-memory.d.ts +3 -3
  487. package/dist/workers/quality-daemon/persistent-memory.js +4 -4
  488. package/dist/workers/worker-manager.js +10 -3
  489. package/dist/workers/workers/coverage-tracker.js +69 -33
  490. package/dist/workers/workers/defect-predictor.d.ts +25 -8
  491. package/dist/workers/workers/defect-predictor.js +223 -216
  492. package/dist/workers/workers/performance-baseline.d.ts +24 -9
  493. package/dist/workers/workers/performance-baseline.js +187 -230
  494. package/dist/workers/workers/quality-gate.d.ts +11 -9
  495. package/dist/workers/workers/quality-gate.js +125 -267
  496. package/dist/workers/workers/regression-monitor.d.ts +18 -1
  497. package/dist/workers/workers/regression-monitor.js +276 -117
  498. package/dist/workers/workers/security-scan-records.d.ts +111 -0
  499. package/dist/workers/workers/security-scan-records.js +128 -0
  500. package/dist/workers/workers/security-scan.d.ts +25 -7
  501. package/dist/workers/workers/security-scan.js +187 -164
  502. package/package.json +2 -2
  503. package/dist/cli/chunks/adapter-EGIPTX5H.js +0 -2
  504. package/dist/cli/chunks/aqe-learning-engine-WP4GCBDT.js +0 -2
  505. package/dist/cli/chunks/base-6ORFD62I.js +0 -2
  506. package/dist/cli/chunks/browser-workflow-PIXGERWP.js +0 -2
  507. package/dist/cli/chunks/chunk-2WFTZSRT.js +0 -2
  508. package/dist/cli/chunks/chunk-7YB2KELI.js +0 -5
  509. package/dist/cli/chunks/chunk-BBL6YXD3.js +0 -2
  510. package/dist/cli/chunks/chunk-BJ5P4IV2.js +0 -2
  511. package/dist/cli/chunks/chunk-BO4PKNYP.js +0 -102
  512. package/dist/cli/chunks/chunk-DFPL5N3Q.js +0 -16
  513. package/dist/cli/chunks/chunk-DLY4YEN3.js +0 -2
  514. package/dist/cli/chunks/chunk-ERGWWI4Y.js +0 -3
  515. package/dist/cli/chunks/chunk-GTSOFCMQ.js +0 -2
  516. package/dist/cli/chunks/chunk-KZVJW2SD.js +0 -2
  517. package/dist/cli/chunks/chunk-L336HFFE.js +0 -2
  518. package/dist/cli/chunks/chunk-N2TJNIHA.js +0 -2
  519. package/dist/cli/chunks/chunk-RCXMUEZN.js +0 -3
  520. package/dist/cli/chunks/chunk-SEZLYRCS.js +0 -2
  521. package/dist/cli/chunks/chunk-TDLKXLJC.js +0 -4
  522. package/dist/cli/chunks/chunk-WOZIXXY5.js +0 -7
  523. package/dist/cli/chunks/ci-KP4GZKJ7.js +0 -81
  524. package/dist/cli/chunks/client-C3KHVRM6.js +0 -2
  525. package/dist/cli/chunks/core-handlers-KSQM6Q6S.js +0 -2
  526. package/dist/cli/chunks/coverage-SPFVHRRU.js +0 -43
  527. package/dist/cli/chunks/coverage-target-GSRBNHXE.js +0 -2
  528. package/dist/cli/chunks/cross-domain-router-CTGNOVCF.js +0 -2
  529. package/dist/cli/chunks/daemon-M5TD5Y6T.js +0 -10
  530. package/dist/cli/chunks/dream-MIK2E4UL.js +0 -2
  531. package/dist/cli/chunks/embed-and-insert-pattern-QST77T2B.js +0 -3
  532. package/dist/cli/chunks/experience-capture-middleware-X66IYSRV.js +0 -40
  533. package/dist/cli/chunks/file-discovery-3NHRUQQB.js +0 -2
  534. package/dist/cli/chunks/heartbeat-scheduler-OCKRACUW.js +0 -2
  535. package/dist/cli/chunks/hnsw-adapter-X67XG73C.js +0 -2
  536. package/dist/cli/chunks/hnsw-index-I7KCQBQR.js +0 -2
  537. package/dist/cli/chunks/hybrid-backend-FOUHTKAK.js +0 -2
  538. package/dist/cli/chunks/impact-analyzer-GXYVX46O.js +0 -2
  539. package/dist/cli/chunks/init-handler-2AXMXHYF.js +0 -86
  540. package/dist/cli/chunks/init-wizard-C2MRX2QG.js +0 -2
  541. package/dist/cli/chunks/kernel-Q2IUDIDC.js +0 -2
  542. package/dist/cli/chunks/knowledge-graph-E2Z6K5EE.js +0 -2
  543. package/dist/cli/chunks/learning-BEA26RNA.js +0 -122
  544. package/dist/cli/chunks/llm-router-service-YATYFEDD.js +0 -2
  545. package/dist/cli/chunks/load-test-LV77JXWA.js +0 -2
  546. package/dist/cli/chunks/memory-backend-XME3X3QX.js +0 -2
  547. package/dist/cli/chunks/memory-handlers-VG47X5DX.js +0 -2
  548. package/dist/cli/chunks/orchestrator-VHUXUYIM.js +0 -452
  549. package/dist/cli/chunks/pattern-null-store-TAXMLENP.js +0 -2
  550. package/dist/cli/chunks/plugin-2VAYWAO3.js +0 -27
  551. package/dist/cli/chunks/project-root-CFFPBGPX.js +0 -2
  552. package/dist/cli/chunks/protocol-executor-ML76QAVQ.js +0 -2
  553. package/dist/cli/chunks/qe-reasoning-bank-LUZH6RYV.js +0 -2
  554. package/dist/cli/chunks/queen-coordinator-EWXNIXB6.js +0 -2
  555. package/dist/cli/chunks/real-embeddings-GZV4VKK4.js +0 -2
  556. package/dist/cli/chunks/router-MXOBVEBF.js +0 -2
  557. package/dist/cli/chunks/routing-feedback-T6CCRUEK.js +0 -2
  558. package/dist/cli/chunks/rvf-dual-writer-WHXVT3V3.js +0 -2
  559. package/dist/cli/chunks/rvf-migration-adapter-JFPWIRCG.js +0 -2
  560. package/dist/cli/chunks/rvf-migration-coordinator-D4KUBNRZ.js +0 -2
  561. package/dist/cli/chunks/rvf-native-adapter-KOXR7TJL.js +0 -2
  562. package/dist/cli/chunks/safe-db-CI6IPSIN.js +0 -2
  563. package/dist/cli/chunks/schedule-X4HW6TVJ.js +0 -2
  564. package/dist/cli/chunks/scheduler-KCNJ2ON3.js +0 -2
  565. package/dist/cli/chunks/security-7723AZZ4.js +0 -13
  566. package/dist/cli/chunks/shared-rvf-adapter-KEQ5CLNI.js +0 -2
  567. package/dist/cli/chunks/sqlite-persistence-PGHU6VUR.js +0 -2
  568. package/dist/cli/chunks/sync-EFWXMA2H.js +0 -2
  569. package/dist/cli/chunks/token-bootstrap-S346YBVO.js +0 -2
  570. package/dist/cli/chunks/unified-memory-6CK3TUNQ.js +0 -2
  571. package/dist/cli/chunks/unified-memory-hnsw-A7BWBGYN.js +0 -2
  572. package/dist/cli/chunks/unified-persistence-GEPMDBQZ.js +0 -2
  573. package/dist/cli/chunks/visual-security-L4J7LQWT.js +0 -2
  574. package/dist/cli/chunks/witness-chain-CDUMX623.js +0 -2
  575. package/dist/cli/chunks/witness-chain-repair-WNYH6O4L.js +0 -2
  576. package/dist/cli/chunks/witness-key-manager-NQ5DAAC4.js +0 -2
  577. package/dist/cli/chunks/workflow-orchestrator-USJDWVDR.js +0 -2
  578. package/dist/cli/chunks/wrappers-CZDI6Z3X.js +0 -2
  579. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  580. /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  581. /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
  582. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
  583. /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
  584. /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
@@ -64,7 +64,8 @@ export interface RelatedFailure {
64
64
  export interface CoverageContext {
65
65
  file: string;
66
66
  lineCoverage: number;
67
- branchCoverage: number;
67
+ /** `null` = no branch data was collected (#1027 NB4) — never a borrowed figure. */
68
+ branchCoverage: number | null;
68
69
  uncoveredLines: number[];
69
70
  riskScore: number;
70
71
  }
@@ -12,6 +12,8 @@ import { createEvent } from '../../shared/events/domain-events.js';
12
12
  import { toError } from '../../shared/error-utils.js';
13
13
  import { LoggerFactory } from '../../logging/index.js';
14
14
  import { addToCount } from '../../shared/utils/safe-record.js';
15
+ import { measuredFileCoverage } from '../../domains/quality-assessment/coverage-report-event.js';
16
+ import { fileCoverageLookupKeys } from '../../domains/coverage-analysis/collected-metrics.js';
15
17
  const logger = LoggerFactory.create('defect-investigation');
16
18
  export const DefectInvestigationEvents = {
17
19
  DefectInvestigationStarted: 'coordination.DefectInvestigationStarted',
@@ -605,12 +607,19 @@ export class DefectInvestigationProtocol {
605
607
  async getCoverageContext(file) {
606
608
  try {
607
609
  // Try per-file coverage (written by coverage-analyzer and test-executor)
608
- const coverage = await this.memory.get(`coverage:file:${file}`);
610
+ // #1014: only measured records; legacy unstamped estimates are ignored.
611
+ let coverage = null;
612
+ for (const key of fileCoverageLookupKeys(file)) {
613
+ coverage = measuredFileCoverage(await this.memory.get(key));
614
+ if (coverage)
615
+ break;
616
+ }
609
617
  if (!coverage) {
610
618
  return null;
611
619
  }
612
- // Calculate risk based on coverage
613
- const avgCoverage = (coverage.line + coverage.branch) / 2;
620
+ // Calculate risk based on coverage (an uncollected branch metric is
621
+ // left out, not counted as 0%).
622
+ const avgCoverage = coverage.branch === null ? coverage.line : (coverage.line + coverage.branch) / 2;
614
623
  const riskScore = 1 - avgCoverage / 100;
615
624
  return {
616
625
  file,
@@ -10,6 +10,7 @@ import { v4 as uuidv4 } from 'uuid';
10
10
  import { ok, err, } from '../../shared/types/index.js';
11
11
  import { createEvent } from '../../shared/events/domain-events.js';
12
12
  import { toErrorMessage, toError } from '../../shared/error-utils.js';
13
+ import { measuredCoverageSummary } from '../../domains/quality-assessment/coverage-report-event.js';
13
14
  // ============================================================================
14
15
  // Protocol Events
15
16
  // ============================================================================
@@ -402,12 +403,14 @@ export class QualityGateProtocol {
402
403
  async getCoverageMetrics(_releaseCandidate) {
403
404
  try {
404
405
  // Try to get latest coverage data from memory
405
- const latestCoverage = await this.memory.get('coverage:latest');
406
+ // #1014: only a measured record is coverage evidence; a legacy
407
+ // unstamped or estimated record is "no data" (the gate fails closed).
408
+ const latestCoverage = measuredCoverageSummary(await this.memory.get('coverage:latest'));
406
409
  if (!latestCoverage) {
407
410
  return null;
408
411
  }
409
- // Get previous coverage for trend
410
- const previousCoverage = await this.memory.get('coverage:previous');
412
+ // Get previous coverage for trend (measured baselines only, #1015)
413
+ const previousCoverage = measuredCoverageSummary(await this.memory.get('coverage:previous'));
411
414
  let trend = 'stable';
412
415
  if (previousCoverage) {
413
416
  const delta = latestCoverage.line - previousCoverage.line;
@@ -418,9 +421,10 @@ export class QualityGateProtocol {
418
421
  }
419
422
  return {
420
423
  line: latestCoverage.line,
421
- branch: latestCoverage.branch,
422
- function: latestCoverage.function,
423
- statement: latestCoverage.statement,
424
+ // An uncollected metric has no evidence: 0 fails its check closed.
425
+ branch: latestCoverage.branch ?? 0,
426
+ function: latestCoverage.function ?? 0,
427
+ statement: latestCoverage.statement ?? 0,
424
428
  trend,
425
429
  };
426
430
  }
@@ -137,6 +137,12 @@ export class SecurityAuditProtocol {
137
137
  if (depResult.success) {
138
138
  this.currentAudit = { ...this.currentAudit, dependencyResult: depResult.value };
139
139
  await this.publishDependencyVulnerabilities(depResult.value.vulnerabilities);
140
+ // #1049: a failed or partial advisory lookup (or a result without a
141
+ // status, which cannot show it was complete) is not a clean dependency scan.
142
+ if (depResult.value.status !== 'complete') {
143
+ this.recordIncompleteCheck(depResult.value.error
144
+ ?? `Dependency advisories could not be checked for ${depResult.value.uncheckedPackages?.length ?? 'unknown number of'} package(s)`);
145
+ }
140
146
  }
141
147
  else {
142
148
  this.recordIncompleteCheck('Dependency scan did not complete');
@@ -280,6 +286,11 @@ export class SecurityAuditProtocol {
280
286
  vulnerabilities: scanResult.value.vulnerabilities,
281
287
  outdatedPackages: [],
282
288
  summary: scanResult.value.summary,
289
+ status: scanResult.value.status,
290
+ measured: scanResult.value.measured,
291
+ packagesChecked: scanResult.value.packagesChecked,
292
+ uncheckedPackages: scanResult.value.uncheckedPackages,
293
+ ...(scanResult.value.error ? { error: scanResult.value.error } : {}),
283
294
  });
284
295
  }
285
296
  }
@@ -49,6 +49,11 @@ export interface TrendData {
49
49
  export declare class ResultSaver {
50
50
  private readonly baseDir;
51
51
  private readonly resultsDir;
52
+ /**
53
+ * @param baseDir Store directory. Defaults to the resolved project's
54
+ * `.agentic-qe` (review of #1026 N2: a cwd-relative default wrote
55
+ * `<tmp>/.agentic-qe/results` when run from a shared dir).
56
+ */
52
57
  constructor(baseDir?: string);
53
58
  /**
54
59
  * Save task result in appropriate format(s)
@@ -71,12 +76,38 @@ export declare class ResultSaver {
71
76
  private generateSecurityReport;
72
77
  private generateQualityReport;
73
78
  private ensureDirectories;
79
+ /** `YYYY-MM-DDTHH-MM-SS-mmm` (#1007: milliseconds, not seconds). */
74
80
  private formatTimestamp;
81
+ /** Short task-id fragment plus random hex, unique per save. */
82
+ private uniqueSuffix;
83
+ /** Write `filePath` via a temp file and rename, replacing any previous version. */
84
+ private replaceFile;
85
+ /**
86
+ * Create `filePath` exclusively and record it. If the name is taken (a
87
+ * reused custom prefix), write to
88
+ * `name-1.ext`, `name-2.ext`, … instead of replacing the earlier file (#1007).
89
+ */
90
+ private writeNewFile;
91
+ /**
92
+ * File name for a generated test source: the sanitized name capped at
93
+ * MAX_GENERATED_STEM_LENGTH characters (a long source file name would
94
+ * otherwise exceed the filesystem's 255-byte limit once the temp-file suffix
95
+ * is added) plus a short hash of the source path and full name. The hash keeps
96
+ * `src/one/math.ts` and `src/two/math.ts` (or a truncated long name) from
97
+ * overwriting each other, while the same test still maps to the same file.
98
+ */
99
+ private generatedTestFilename;
75
100
  private sanitizeFilename;
76
101
  private getTestExtension;
77
102
  private createFileEntry;
78
103
  private extractSummary;
104
+ /**
105
+ * Append to index.json. Concurrent saves read-modify-write the same file, so
106
+ * updates are serialized per index path in this process and the file is
107
+ * replaced atomically, otherwise one save's entry is lost (#1007).
108
+ */
79
109
  private updateIndex;
110
+ private writeIndexEntry;
80
111
  }
81
112
  export declare function createResultSaver(baseDir?: string): ResultSaver;
82
113
  //# sourceMappingURL=result-saver.d.ts.map
@@ -4,8 +4,11 @@
4
4
  */
5
5
  import * as fs from 'fs/promises';
6
6
  import * as path from 'path';
7
- import { createHash } from 'crypto';
7
+ import { createHash, randomBytes } from 'crypto';
8
8
  import { safeJsonParse } from '../shared/safe-json.js';
9
+ import { getProjectStorePath } from '../kernel/project-root.js';
10
+ /** Cap on the sanitized stem of a generated test file name (see generatedTestFilename). */
11
+ const MAX_GENERATED_STEM_LENGTH = 100;
9
12
  function securityReportExecution(data) {
10
13
  return data.evidence?.completeness === 'complete' ? 'completed'
11
14
  : data.evidence?.completeness === 'partial' ? 'partial'
@@ -77,7 +80,12 @@ const TEST_FILE_PATTERNS = {
77
80
  export class ResultSaver {
78
81
  baseDir;
79
82
  resultsDir;
80
- constructor(baseDir = '.agentic-qe') {
83
+ /**
84
+ * @param baseDir Store directory. Defaults to the resolved project's
85
+ * `.agentic-qe` (review of #1026 N2: a cwd-relative default wrote
86
+ * `<tmp>/.agentic-qe/results` when run from a shared dir).
87
+ */
88
+ constructor(baseDir = getProjectStorePath()) {
81
89
  this.baseDir = baseDir;
82
90
  this.resultsDir = path.join(baseDir, 'results');
83
91
  }
@@ -94,8 +102,13 @@ export class ResultSaver {
94
102
  // Ensure directories exist
95
103
  await this.ensureDirectories(taskType);
96
104
  // Get timestamp string for filenames
105
+ // #1007: millisecond timestamp plus a per-save suffix. Names to the second
106
+ // let two saves in the same second overwrite each other. Report, manifest
107
+ // and data files are created exclusively (see writeNewFile), so even a
108
+ // reused custom prefix never replaces an earlier result. Generated test
109
+ // files are the exception: one file per test name (see replaceFile).
97
110
  const tsStr = this.formatTimestamp(timestamp);
98
- const prefix = options.filenamePrefix || tsStr;
111
+ const prefix = options.filenamePrefix || `${tsStr}_${this.uniqueSuffix(taskId)}`;
99
112
  // Save based on task type
100
113
  switch (taskType) {
101
114
  case 'generate-tests':
@@ -159,25 +172,37 @@ export class ResultSaver {
159
172
  framework: options.framework || 'vitest',
160
173
  tests: data.tests,
161
174
  }, null, 2);
162
- await fs.writeFile(manifestPath, manifestContent);
163
- files.push(await this.createFileEntry(manifestPath, 'json'));
175
+ files.push(await this.writeNewFile(manifestPath, manifestContent, 'json'));
164
176
  // Save individual test files if code is provided
165
177
  if (data.tests) {
166
178
  for (const test of data.tests) {
167
- if (test.code) {
179
+ // The test-generation domain returns `testCode`; retain `code` for
180
+ // older callers of ResultSaver that already use that field.
181
+ const code = test.testCode ?? test.code;
182
+ if (code) {
168
183
  const ext = this.getTestExtension(options.language || 'typescript', options.framework || 'vitest');
169
- const testFilename = this.sanitizeFilename(test.name) + ext;
184
+ const testFilename = this.generatedTestFilename(test, ext);
170
185
  const testPath = path.join(testDir, testFilename);
171
- await fs.writeFile(testPath, test.code);
172
- files.push(await this.createFileEntry(testPath, 'source'));
186
+ // Review of #1026 N7: a generated test keeps one file per test name
187
+ // (replaced atomically), unlike reports, so numbered copies never
188
+ // pile up for a test runner to collect.
189
+ //
190
+ // One unwritable source file (e.g. a name the filesystem rejects)
191
+ // must not discard the manifest and report, so a per-file failure is
192
+ // skipped; `files` then lists only what is actually on disk.
193
+ try {
194
+ files.push(await this.replaceFile(testPath, code, 'source'));
195
+ }
196
+ catch (error) {
197
+ console.warn(`ResultSaver: could not write generated test ${testFilename}: ${error.message}`);
198
+ }
173
199
  }
174
200
  }
175
201
  }
176
202
  // Save markdown report
177
203
  const reportPath = path.join(this.resultsDir, 'tests', `${prefix}_report.md`);
178
204
  const reportContent = this.generateTestReport(data, options);
179
- await fs.writeFile(reportPath, reportContent);
180
- files.push(await this.createFileEntry(reportPath, 'markdown'));
205
+ files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
181
206
  return files;
182
207
  }
183
208
  async saveCoverage(result, prefix, options) {
@@ -189,8 +214,7 @@ export class ResultSaver {
189
214
  const coverageDir = path.join(this.resultsDir, 'coverage');
190
215
  // Save JSON
191
216
  const jsonPath = path.join(coverageDir, `${prefix}_coverage.json`);
192
- await fs.writeFile(jsonPath, JSON.stringify(data, null, 2));
193
- files.push(await this.createFileEntry(jsonPath, 'json'));
217
+ files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
194
218
  // Save LCOV format — ONLY for genuinely measured coverage.
195
219
  //
196
220
  // #569/ADR-126: LCOV has nowhere to record provenance. Emitting it for an
@@ -202,14 +226,12 @@ export class ResultSaver {
202
226
  if (options.includeSecondary !== false && data.measured === true) {
203
227
  const lcovPath = path.join(coverageDir, `${prefix}_coverage.lcov`);
204
228
  const lcovContent = this.generateLcov(data);
205
- await fs.writeFile(lcovPath, lcovContent);
206
- files.push(await this.createFileEntry(lcovPath, 'lcov'));
229
+ files.push(await this.writeNewFile(lcovPath, lcovContent, 'lcov'));
207
230
  }
208
231
  // Save markdown report
209
232
  const reportPath = path.join(coverageDir, `${prefix}_report.md`);
210
233
  const reportContent = this.generateCoverageReport(data);
211
- await fs.writeFile(reportPath, reportContent);
212
- files.push(await this.createFileEntry(reportPath, 'markdown'));
234
+ files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
213
235
  return files;
214
236
  }
215
237
  async saveSecurityScan(result, prefix, options) {
@@ -218,20 +240,17 @@ export class ResultSaver {
218
240
  const securityDir = path.join(this.resultsDir, 'security');
219
241
  // Save JSON
220
242
  const jsonPath = path.join(securityDir, `${prefix}_scan.json`);
221
- await fs.writeFile(jsonPath, JSON.stringify(data, null, 2));
222
- files.push(await this.createFileEntry(jsonPath, 'json'));
243
+ files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
223
244
  // Save SARIF format
224
245
  if (options.includeSecondary !== false) {
225
246
  const sarifPath = path.join(securityDir, `${prefix}_scan.sarif`);
226
247
  const sarifContent = this.generateSarif(data);
227
- await fs.writeFile(sarifPath, sarifContent);
228
- files.push(await this.createFileEntry(sarifPath, 'sarif'));
248
+ files.push(await this.writeNewFile(sarifPath, sarifContent, 'sarif'));
229
249
  }
230
250
  // Save markdown report
231
251
  const reportPath = path.join(securityDir, `${prefix}_report.md`);
232
252
  const reportContent = this.generateSecurityReport(data);
233
- await fs.writeFile(reportPath, reportContent);
234
- files.push(await this.createFileEntry(reportPath, 'markdown'));
253
+ files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
235
254
  return files;
236
255
  }
237
256
  async saveQualityAssessment(result, prefix, _options) {
@@ -240,13 +259,11 @@ export class ResultSaver {
240
259
  const qualityDir = path.join(this.resultsDir, 'quality');
241
260
  // Save JSON
242
261
  const jsonPath = path.join(qualityDir, `${prefix}_assessment.json`);
243
- await fs.writeFile(jsonPath, JSON.stringify(data, null, 2));
244
- files.push(await this.createFileEntry(jsonPath, 'json'));
262
+ files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
245
263
  // Save markdown report
246
264
  const reportPath = path.join(qualityDir, `${prefix}_report.md`);
247
265
  const reportContent = this.generateQualityReport(data);
248
- await fs.writeFile(reportPath, reportContent);
249
- files.push(await this.createFileEntry(reportPath, 'markdown'));
266
+ files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
250
267
  return files;
251
268
  }
252
269
  async saveCodeIndex(result, prefix, _options) {
@@ -256,8 +273,7 @@ export class ResultSaver {
256
273
  await fs.mkdir(indexDir, { recursive: true });
257
274
  // Save JSON
258
275
  const jsonPath = path.join(indexDir, `${prefix}_index.json`);
259
- await fs.writeFile(jsonPath, JSON.stringify(data, null, 2));
260
- files.push(await this.createFileEntry(jsonPath, 'json'));
276
+ files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
261
277
  return files;
262
278
  }
263
279
  async saveDefectPrediction(result, prefix, _options) {
@@ -266,8 +282,7 @@ export class ResultSaver {
266
282
  await fs.mkdir(defectDir, { recursive: true });
267
283
  // Save JSON
268
284
  const jsonPath = path.join(defectDir, `${prefix}_prediction.json`);
269
- await fs.writeFile(jsonPath, JSON.stringify(result, null, 2));
270
- files.push(await this.createFileEntry(jsonPath, 'json'));
285
+ files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
271
286
  return files;
272
287
  }
273
288
  async saveContractValidation(result, prefix, _options) {
@@ -276,8 +291,7 @@ export class ResultSaver {
276
291
  await fs.mkdir(contractDir, { recursive: true });
277
292
  // Save JSON
278
293
  const jsonPath = path.join(contractDir, `${prefix}_validation.json`);
279
- await fs.writeFile(jsonPath, JSON.stringify(result, null, 2));
280
- files.push(await this.createFileEntry(jsonPath, 'json'));
294
+ files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
281
295
  return files;
282
296
  }
283
297
  async saveAccessibilityTest(result, prefix, _options) {
@@ -286,8 +300,7 @@ export class ResultSaver {
286
300
  await fs.mkdir(a11yDir, { recursive: true });
287
301
  // Save JSON
288
302
  const jsonPath = path.join(a11yDir, `${prefix}_test.json`);
289
- await fs.writeFile(jsonPath, JSON.stringify(result, null, 2));
290
- files.push(await this.createFileEntry(jsonPath, 'json'));
303
+ files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
291
304
  return files;
292
305
  }
293
306
  async saveChaosTest(result, prefix, _options) {
@@ -296,8 +309,7 @@ export class ResultSaver {
296
309
  await fs.mkdir(chaosDir, { recursive: true });
297
310
  // Save JSON
298
311
  const jsonPath = path.join(chaosDir, `${prefix}_chaos.json`);
299
- await fs.writeFile(jsonPath, JSON.stringify(result, null, 2));
300
- files.push(await this.createFileEntry(jsonPath, 'json'));
312
+ files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
301
313
  return files;
302
314
  }
303
315
  async saveGeneric(taskType, result, prefix) {
@@ -305,8 +317,7 @@ export class ResultSaver {
305
317
  const genericDir = path.join(this.resultsDir, 'other');
306
318
  await fs.mkdir(genericDir, { recursive: true });
307
319
  const jsonPath = path.join(genericDir, `${prefix}_${taskType}.json`);
308
- await fs.writeFile(jsonPath, JSON.stringify(result, null, 2));
309
- files.push(await this.createFileEntry(jsonPath, 'json'));
320
+ files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
310
321
  return files;
311
322
  }
312
323
  // ==========================================================================
@@ -486,7 +497,12 @@ ${data.recommendations.map((r, i) => `${i + 1}. ${r}`).join('\n')}
486
497
 
487
498
  ## Quality Score
488
499
 
489
- ${typeof data.qualityScore === 'number' ? `**${data.qualityScore.toFixed(1)}** / 100` : 'N/A — measured gate uses individual checks.'}
500
+ ${typeof data.qualityScore !== 'number' ? 'N/A — measured gate uses individual checks.'
501
+ : data.qualityScore < 0 ? 'Not measured — no requested metric had measured data (#1011).'
502
+ : data.evidenceStatus === 'insufficient-evidence'
503
+ ? `Subset score over measured metrics: ${data.qualityScore.toFixed(1)} (not a verdict)`
504
+ + (data.scoreBasis?.length ? `\nBased on: ${data.scoreBasis.join(', ')}` : '')
505
+ : `**${data.qualityScore.toFixed(1)}** / 100`}
490
506
 
491
507
  ## Metrics
492
508
 
@@ -502,7 +518,7 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
502
518
  // ==========================================================================
503
519
  // Utilities
504
520
  // ==========================================================================
505
- async ensureDirectories(taskType) {
521
+ async ensureDirectories(_taskType) {
506
522
  const dirs = [
507
523
  this.resultsDir,
508
524
  path.join(this.resultsDir, 'security'),
@@ -515,8 +531,67 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
515
531
  await fs.mkdir(dir, { recursive: true });
516
532
  }
517
533
  }
534
+ /** `YYYY-MM-DDTHH-MM-SS-mmm` (#1007: milliseconds, not seconds). */
518
535
  formatTimestamp(date) {
519
- return date.toISOString().replace(/[:.]/g, '-').slice(0, 19);
536
+ return date.toISOString().replace(/[:.]/g, '-').slice(0, 23);
537
+ }
538
+ /** Short task-id fragment plus random hex, unique per save. */
539
+ uniqueSuffix(taskId) {
540
+ const idPart = this.sanitizeFilename(taskId).slice(-12) || 'task';
541
+ return `${idPart}-${randomBytes(3).toString('hex')}`;
542
+ }
543
+ /** Write `filePath` via a temp file and rename, replacing any previous version. */
544
+ async replaceFile(filePath, content, format) {
545
+ const tmpPath = `${filePath}.${process.pid}.${randomBytes(4).toString('hex')}.tmp`;
546
+ try {
547
+ await fs.writeFile(tmpPath, content, { flag: 'wx' });
548
+ await fs.rename(tmpPath, filePath);
549
+ }
550
+ catch (error) {
551
+ await fs.rm(tmpPath, { force: true });
552
+ throw error;
553
+ }
554
+ return this.createFileEntry(filePath, format);
555
+ }
556
+ /**
557
+ * Create `filePath` exclusively and record it. If the name is taken (a
558
+ * reused custom prefix), write to
559
+ * `name-1.ext`, `name-2.ext`, … instead of replacing the earlier file (#1007).
560
+ */
561
+ async writeNewFile(filePath, content, format) {
562
+ const dir = path.dirname(filePath);
563
+ const base = path.basename(filePath);
564
+ const dot = base.indexOf('.', 1);
565
+ const stem = dot > 0 ? base.slice(0, dot) : base;
566
+ const ext = dot > 0 ? base.slice(dot) : '';
567
+ for (let attempt = 0; attempt < 1000; attempt++) {
568
+ const candidate = attempt === 0 ? filePath : path.join(dir, `${stem}-${attempt}${ext}`);
569
+ try {
570
+ await fs.writeFile(candidate, content, { flag: 'wx' });
571
+ return this.createFileEntry(candidate, format);
572
+ }
573
+ catch (error) {
574
+ if (error.code !== 'EEXIST')
575
+ throw error;
576
+ }
577
+ }
578
+ throw new Error(`ResultSaver: no free file name for ${filePath}`);
579
+ }
580
+ /**
581
+ * File name for a generated test source: the sanitized name capped at
582
+ * MAX_GENERATED_STEM_LENGTH characters (a long source file name would
583
+ * otherwise exceed the filesystem's 255-byte limit once the temp-file suffix
584
+ * is added) plus a short hash of the source path and full name. The hash keeps
585
+ * `src/one/math.ts` and `src/two/math.ts` (or a truncated long name) from
586
+ * overwriting each other, while the same test still maps to the same file.
587
+ */
588
+ generatedTestFilename(test, ext) {
589
+ const stem = this.sanitizeFilename(test.name).slice(0, MAX_GENERATED_STEM_LENGTH) || 'test';
590
+ const hash = createHash('sha256')
591
+ .update(`${test.file ?? ''}\0${test.name}`)
592
+ .digest('hex')
593
+ .slice(0, 8);
594
+ return `${stem}-${hash}${ext}`;
520
595
  }
521
596
  sanitizeFilename(name) {
522
597
  return name.replace(/[^a-zA-Z0-9_-]/g, '_').toLowerCase();
@@ -555,7 +630,10 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
555
630
  };
556
631
  case 'assess-quality':
557
632
  return {
558
- qualityScore: data.qualityScore,
633
+ // #1021: -1 means "not measured", and a subset score under insufficient
634
+ // evidence is not a verdict; keep both out of the index and trends.
635
+ ...(typeof data.qualityScore === 'number' && data.qualityScore >= 0
636
+ && data.evidenceStatus !== 'insufficient-evidence' ? { qualityScore: data.qualityScore } : {}),
559
637
  passed: data.passed,
560
638
  ...(data.evidenceStatus !== undefined ? { evidenceStatus: data.evidenceStatus } : {}),
561
639
  };
@@ -568,8 +646,26 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
568
646
  return {};
569
647
  }
570
648
  }
571
- async updateIndex(taskId, taskType, timestamp, files, summary) {
572
- const indexPath = path.join(this.resultsDir, 'index.json');
649
+ /**
650
+ * Append to index.json. Concurrent saves read-modify-write the same file, so
651
+ * updates are serialized per index path in this process and the file is
652
+ * replaced atomically, otherwise one save's entry is lost (#1007).
653
+ */
654
+ updateIndex(taskId, taskType, timestamp, files, summary) {
655
+ const indexPath = path.resolve(this.resultsDir, 'index.json');
656
+ const previous = indexUpdateQueues.get(indexPath) ?? Promise.resolve();
657
+ const next = previous
658
+ .catch(() => undefined)
659
+ .then(() => this.writeIndexEntry(indexPath, taskId, taskType, timestamp, files, summary));
660
+ indexUpdateQueues.set(indexPath, next);
661
+ const settle = () => {
662
+ if (indexUpdateQueues.get(indexPath) === next)
663
+ indexUpdateQueues.delete(indexPath);
664
+ };
665
+ next.then(settle, settle);
666
+ return next;
667
+ }
668
+ async writeIndexEntry(indexPath, taskId, taskType, timestamp, files, summary) {
573
669
  let index;
574
670
  try {
575
671
  const content = await fs.readFile(indexPath, 'utf-8');
@@ -598,9 +694,13 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
598
694
  if (index.results.length > 100) {
599
695
  index.results = index.results.slice(-100);
600
696
  }
601
- await fs.writeFile(indexPath, JSON.stringify(index, null, 2));
697
+ const tmpPath = `${indexPath}.${process.pid}.${randomBytes(4).toString('hex')}.tmp`;
698
+ await fs.writeFile(tmpPath, JSON.stringify(index, null, 2));
699
+ await fs.rename(tmpPath, indexPath);
602
700
  }
603
701
  }
702
+ /** Pending index.json updates, keyed by absolute index path (#1007). */
703
+ const indexUpdateQueues = new Map();
604
704
  // Factory function
605
705
  export function createResultSaver(baseDir) {
606
706
  return new ResultSaver(baseDir);
@@ -22,6 +22,7 @@ type CoverageAnalyzerService = import('../domains/coverage-analysis').CoverageAn
22
22
  type SecurityScannerService = import('../domains/security-compliance').SecurityScannerService;
23
23
  type KnowledgeGraphService = import('../domains/code-intelligence').KnowledgeGraphService;
24
24
  type QualityAnalyzerService = import('../domains/quality-assessment').QualityAnalyzerService;
25
+ type ProjectMetricsCollector = import('./handlers/handler-types').ProjectMetricsCollector;
25
26
  export interface TaskExecutorConfig {
26
27
  timeout: number;
27
28
  maxRetries: number;
@@ -106,6 +107,12 @@ export declare class DomainTaskExecutor implements TaskHandlerContext {
106
107
  */
107
108
  private resolveLLMRouter;
108
109
  getKnowledgeGraph(): KnowledgeGraphService;
110
+ /**
111
+ * #999: the code-intelligence coordinator, so the MCP index-code handler can
112
+ * run the same project-metric step as `aqe code index`. Loads the domain
113
+ * lazily; undefined when it is disabled or fails to load.
114
+ */
115
+ getCodeIntelligenceCoordinator(): Promise<ProjectMetricsCollector | undefined>;
109
116
  getQualityAnalyzer(): QualityAnalyzerService;
110
117
  private registerHandlers;
111
118
  /**
@@ -16,6 +16,7 @@ import { v4 as uuidv4 } from 'uuid';
16
16
  import { isCallerInputError, toErrorMessage } from '../shared/error-utils.js';
17
17
  import { InsufficientQualityEvidenceError } from '../domains/quality-assessment/quality-evidence.js';
18
18
  import { createResultSaver } from './result-saver.js';
19
+ import { getProjectStorePath } from '../kernel/project-root.js';
19
20
  import { createLogger } from '../logging/logger-factory.js';
20
21
  import { getClaudeModelForTier } from '../shared/llm/model-registry.js';
21
22
  // ADR-051: Agent Booster integration for Tier 0 tasks
@@ -54,9 +55,15 @@ function resolveQualityAnalyzerService(memory) {
54
55
  const factory = DomainServiceRegistry.resolve(ServiceKeys.QualityAnalyzerService);
55
56
  return factory(memory);
56
57
  }
57
- /** #996: structured details, only from the one error type that is known to carry them. */
58
+ /**
59
+ * #996: structured details, only from error types known to carry them.
60
+ * #1021 round 2b: a caller-input error is marked so learners do not record
61
+ * the caller's mistake as a component failure.
62
+ */
58
63
  function errorDetailsOf(error) {
59
- return error instanceof InsufficientQualityEvidenceError ? { ...error.toDetails() } : undefined;
64
+ if (error instanceof InsufficientQualityEvidenceError)
65
+ return { ...error.toDetails() };
66
+ return isCallerInputError(error) ? { callerError: true } : undefined;
60
67
  }
61
68
  // ============================================================================
62
69
  // ADR-051: Model Routing Support
@@ -141,7 +148,8 @@ export class DomainTaskExecutor {
141
148
  maxRetries: config?.maxRetries ?? 3,
142
149
  enableCaching: config?.enableCaching ?? true,
143
150
  saveResults: config?.saveResults ?? true,
144
- resultsDir: config?.resultsDir ?? '.agentic-qe',
151
+ // Review of #1026 N2: resolve the project store, not a cwd-relative one.
152
+ resultsDir: config?.resultsDir ?? getProjectStorePath(),
145
153
  defaultLanguage: config?.defaultLanguage ?? 'typescript',
146
154
  defaultFramework: config?.defaultFramework ?? 'vitest',
147
155
  };
@@ -240,6 +248,25 @@ export class DomainTaskExecutor {
240
248
  }
241
249
  return this.knowledgeGraph;
242
250
  }
251
+ /**
252
+ * #999: the code-intelligence coordinator, so the MCP index-code handler can
253
+ * run the same project-metric step as `aqe code index`. Loads the domain
254
+ * lazily; undefined when it is disabled or fails to load.
255
+ */
256
+ async getCodeIntelligenceCoordinator() {
257
+ try {
258
+ const api = this.kernel.getDomainAPIAsync
259
+ ? await this.kernel.getDomainAPIAsync('code-intelligence')
260
+ : this.kernel.getDomainAPI('code-intelligence');
261
+ return typeof api?.getCoordinator === 'function' ? api.getCoordinator() : undefined;
262
+ }
263
+ catch (error) {
264
+ logger.debug('code-intelligence coordinator unavailable for project metrics', {
265
+ error: error instanceof Error ? error.message : String(error),
266
+ });
267
+ return undefined;
268
+ }
269
+ }
243
270
  getQualityAnalyzer() {
244
271
  if (!this.qualityAnalyzer) {
245
272
  this.qualityAnalyzer = resolveQualityAnalyzerService(this.kernel.memory);
@@ -498,12 +525,14 @@ export class DomainTaskExecutor {
498
525
  await this.publishTaskFailed(task.id, errorMessage, domain, isCallerInputError(error));
499
526
  // ADR-051: Record failed outcome
500
527
  this.recordOutcome(task, routingTier, false, Date.now() - startTime).catch((e) => { logger.warn('recordOutcome failed', { error: e instanceof Error ? e.message : String(e), taskId: task.id }); });
528
+ const errorDetails = errorDetailsOf(error);
501
529
  return {
502
530
  taskId: task.id,
503
531
  success: false,
504
532
  error: errorMessage,
505
533
  duration: Date.now() - startTime,
506
534
  domain,
535
+ ...(errorDetails ? { errorDetails } : {}),
507
536
  };
508
537
  }
509
538
  }
@@ -9,6 +9,7 @@ import { KnowledgeGraphService, } from './services/knowledge-graph.js';
9
9
  import { SemanticAnalyzerService, } from './services/semantic-analyzer.js';
10
10
  import { toError } from '../../shared/error-utils.js';
11
11
  import { ImpactAnalyzerService, } from './services/impact-analyzer.js';
12
+ import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
12
13
  /**
13
14
  * Code Intelligence Domain Plugin
14
15
  * Provides knowledge graph, semantic search, and impact analysis capabilities
@@ -301,6 +302,9 @@ export class CodeIntelligencePlugin extends BaseDomainPlugin {
301
302
  );
302
303
  }
303
304
  async handleCoverageGap(event) {
305
+ // #1014: only a gap found in MEASURED coverage is acted on / learned from.
306
+ if (!isMeasuredGapPayload(event.payload))
307
+ return;
304
308
  // Coverage gap detected - update risk scores in knowledge graph
305
309
  const payload = event.payload;
306
310
  // Store coverage gap info for impact analysis