agentic-qe 3.14.0 → 3.14.2

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 (430) hide show
  1. package/.claude/helpers/brain-checkpoint.cjs +2 -1
  2. package/.claude/helpers/validate-v3-config.sh +6 -5
  3. package/.claude/hooks/aqe-hook.cjs +14 -14
  4. package/.claude/skills/qe-browser/evals/qe-browser.yaml +30 -41
  5. package/.claude/skills/qe-browser/fixtures/serve-skills.js +37 -0
  6. package/.claude/skills/qe-browser/scripts/lib/vibium.js +1 -1
  7. package/.claude/skills/qe-browser/scripts/smoke-test.sh +56 -25
  8. package/.claude/skills/qe-browser/scripts/visual-diff.js +24 -15
  9. package/.claude/skills/skills-manifest.json +1 -1
  10. package/CHANGELOG.md +114 -0
  11. package/assets/skills/qe-browser/evals/qe-browser.yaml +30 -41
  12. package/assets/skills/qe-browser/fixtures/serve-skills.js +37 -0
  13. package/assets/skills/qe-browser/scripts/lib/vibium.js +1 -1
  14. package/assets/skills/qe-browser/scripts/smoke-test.sh +56 -25
  15. package/assets/skills/qe-browser/scripts/visual-diff.js +24 -15
  16. package/assets/skills/skills-manifest.json +1 -1
  17. package/dist/cli/bundle.js +7 -7
  18. package/dist/cli/chunks/adapter-OJF6LAJV.js +2 -0
  19. package/dist/cli/chunks/{agent-booster-wasm-JZO6VUW4.js → agent-booster-wasm-SD5N32MX.js} +2 -2
  20. package/dist/cli/chunks/{agent-handler-534KFGEJ.js → agent-handler-OZRSJM7F.js} +2 -2
  21. package/dist/cli/chunks/{agent-memory-branch-B7KWLWY4.js → agent-memory-branch-NYTRANRN.js} +2 -2
  22. package/dist/cli/chunks/aqe-learning-engine-FGT474XB.js +2 -0
  23. package/dist/cli/chunks/{arena-OW5MELJX.js → arena-EX3SC2DP.js} +4 -4
  24. package/dist/cli/chunks/{arena-7CCD3S3I.js → arena-FOTVSRK4.js} +2 -2
  25. package/dist/cli/chunks/{audit-BHVKN4E2.js → audit-Q5GHSUQY.js} +3 -3
  26. package/dist/cli/chunks/base-HH765JFV.js +2 -0
  27. package/dist/cli/chunks/{better-sqlite3-P5FA6WFK.js → better-sqlite3-S7M5R2HS.js} +2 -2
  28. package/dist/cli/chunks/{brain-handler-WNW5LOV7.js → brain-handler-5FSA46R5.js} +3 -3
  29. package/dist/cli/chunks/{branch-enumerator-TVZ2ODKH.js → branch-enumerator-RWAXTGEU.js} +2 -2
  30. package/dist/cli/chunks/{browser-TCEB2W2F.js → browser-IGDESJGF.js} +2 -2
  31. package/dist/cli/chunks/browser-workflow-NPM4FUPI.js +2 -0
  32. package/dist/cli/chunks/{chunk-Q73RRTLE.js → chunk-2EHFEMRU.js} +2 -2
  33. package/dist/cli/chunks/{chunk-ZBOWR4XT.js → chunk-2H5YJ5ZK.js} +2 -2
  34. package/dist/cli/chunks/chunk-2LKAMMMI.js +2 -0
  35. package/dist/cli/chunks/{chunk-A2WZEMWT.js → chunk-2TG24LYQ.js} +1 -1
  36. package/dist/cli/chunks/{chunk-3QT6S3A3.js → chunk-3C2K4YMS.js} +3 -3
  37. package/dist/cli/chunks/{chunk-VESOYP6A.js → chunk-3DFFFXXO.js} +2 -2
  38. package/dist/cli/chunks/{chunk-K6CGQR5R.js → chunk-3WV4H33V.js} +1 -1
  39. package/dist/cli/chunks/{chunk-IL4AEB3J.js → chunk-42WUDDUU.js} +2 -2
  40. package/dist/cli/chunks/chunk-4AKGBUYD.js +4 -0
  41. package/dist/cli/chunks/{chunk-4FEJEVG7.js → chunk-4K27ESCA.js} +1 -1
  42. package/dist/cli/chunks/{chunk-TGOGCA74.js → chunk-4M6A3PVJ.js} +2 -2
  43. package/dist/cli/chunks/{chunk-RGVD6ZUX.js → chunk-4MH22236.js} +1 -1
  44. package/dist/cli/chunks/{chunk-6DPAMYLU.js → chunk-4N44UJGI.js} +2 -2
  45. package/dist/cli/chunks/{chunk-DJITEQYS.js → chunk-4PH7O5ZH.js} +2 -2
  46. package/dist/cli/chunks/{chunk-M3HUZD2I.js → chunk-4RT7I7PI.js} +1 -1
  47. package/dist/cli/chunks/chunk-4UCMTYFQ.js +65 -0
  48. package/dist/cli/chunks/{chunk-ZI3UO7QR.js → chunk-4ZUZDFAA.js} +2 -2
  49. package/dist/cli/chunks/{chunk-QSPRQPEL.js → chunk-57TNBR2P.js} +2 -2
  50. package/dist/cli/chunks/{chunk-ZCVJCCQQ.js → chunk-5EHLGOWW.js} +2 -2
  51. package/dist/cli/chunks/{chunk-ZAAYOENS.js → chunk-5WJUNRTY.js} +2 -2
  52. package/dist/cli/chunks/{chunk-QZPFUFZG.js → chunk-67A6PEZM.js} +2 -2
  53. package/dist/cli/chunks/{chunk-7BOPFN3Y.js → chunk-6EHN7Q2Q.js} +2 -2
  54. package/dist/cli/chunks/{chunk-2HYVOX6N.js → chunk-6F4WHN7D.js} +1 -1
  55. package/dist/cli/chunks/{chunk-GVEJP5T7.js → chunk-6LMLN5R2.js} +2 -2
  56. package/dist/cli/chunks/{chunk-QKQZ4IJF.js → chunk-6SZKLWZT.js} +5 -5
  57. package/dist/cli/chunks/{chunk-PEW6FZ47.js → chunk-6VKJAMZY.js} +1 -1
  58. package/dist/cli/chunks/{chunk-VYENTZ45.js → chunk-7AFBNU6K.js} +2 -2
  59. package/dist/cli/chunks/{chunk-6IJMD2ZL.js → chunk-7FWP7CZY.js} +3 -3
  60. package/dist/cli/chunks/{chunk-IE5LC7MB.js → chunk-7SK6IMGZ.js} +2 -2
  61. package/dist/cli/chunks/{chunk-3EM2MK3Z.js → chunk-A7N3YUDJ.js} +2 -2
  62. package/dist/cli/chunks/{chunk-J3XSHJGK.js → chunk-ADK7DF3G.js} +2 -2
  63. package/dist/cli/chunks/{chunk-EJ6IP7DE.js → chunk-ARMZYHYL.js} +2 -2
  64. package/dist/cli/chunks/{chunk-BZ4QVFP2.js → chunk-BWRHOIYC.js} +2 -2
  65. package/dist/cli/chunks/{chunk-A7SKM6JL.js → chunk-C7AXRI7E.js} +1 -1
  66. package/dist/cli/chunks/{chunk-4XTHRAUV.js → chunk-CG2MUD7U.js} +1 -1
  67. package/dist/cli/chunks/{chunk-HLNQDRHA.js → chunk-CH2TQCV5.js} +1 -1
  68. package/dist/cli/chunks/{chunk-JGROLJ33.js → chunk-CIESXO73.js} +1 -1
  69. package/dist/cli/chunks/{chunk-AR6SATU3.js → chunk-CJCT452S.js} +2 -2
  70. package/dist/cli/chunks/{chunk-UUJ5VQJM.js → chunk-CJHVOBJY.js} +1 -1
  71. package/dist/cli/chunks/{chunk-VOSISOFD.js → chunk-CTCQOYBS.js} +1 -1
  72. package/dist/cli/chunks/{chunk-XITTURP2.js → chunk-D4RCV4LY.js} +2 -2
  73. package/dist/cli/chunks/{chunk-5XGVSQS2.js → chunk-DRO5NJZA.js} +2 -2
  74. package/dist/cli/chunks/{chunk-QMMDN4WX.js → chunk-DVHWLAEO.js} +3 -3
  75. package/dist/cli/chunks/{chunk-5LEAGKX5.js → chunk-DW6ZMNMR.js} +2 -2
  76. package/dist/cli/chunks/{chunk-ZBKGX72B.js → chunk-E3Q7WNJD.js} +3 -3
  77. package/dist/cli/chunks/{chunk-5MZF4N4Q.js → chunk-EAJK25IS.js} +1 -1
  78. package/dist/cli/chunks/{chunk-3RYTAYR6.js → chunk-EH5OCHAJ.js} +1 -1
  79. package/dist/cli/chunks/{chunk-UI6WSPEK.js → chunk-F2KRT2II.js} +3 -3
  80. package/dist/cli/chunks/{chunk-NDPQ2WPU.js → chunk-FPHPP5TQ.js} +1 -1
  81. package/dist/cli/chunks/{chunk-WWWX76QB.js → chunk-FREF6Y4L.js} +2 -2
  82. package/dist/cli/chunks/{chunk-SROZXIMT.js → chunk-FVGTINVR.js} +54 -54
  83. package/dist/cli/chunks/{chunk-H3YDDKBW.js → chunk-G2CLZVYI.js} +3 -3
  84. package/dist/cli/chunks/{chunk-2O4DDPEA.js → chunk-G6AV2HGY.js} +3 -3
  85. package/dist/cli/chunks/{chunk-ENGKLFLY.js → chunk-GHQ5PUOV.js} +2 -2
  86. package/dist/cli/chunks/{chunk-NKWO2X3T.js → chunk-GHUPID5E.js} +1 -1
  87. package/dist/cli/chunks/{chunk-S5YVLPXU.js → chunk-GJAWEUIN.js} +2 -2
  88. package/dist/cli/chunks/{chunk-6IZQSLYZ.js → chunk-HBTC4L53.js} +2 -2
  89. package/dist/cli/chunks/{chunk-DDPJUAXQ.js → chunk-HSJ5FQCF.js} +2 -2
  90. package/dist/cli/chunks/{chunk-OONCRNFA.js → chunk-HZ6NEJMO.js} +2 -2
  91. package/dist/cli/chunks/{chunk-LCSVROU7.js → chunk-HZMLNM2T.js} +10 -10
  92. package/dist/cli/chunks/{chunk-JY4VZ6BN.js → chunk-ICKLBATY.js} +2 -2
  93. package/dist/cli/chunks/{chunk-JMKMDSXG.js → chunk-IUNMW454.js} +2 -2
  94. package/dist/cli/chunks/{chunk-XXFKN7LB.js → chunk-IVGVOGIZ.js} +1 -1
  95. package/dist/cli/chunks/{chunk-3GUO4ERR.js → chunk-IWFL6EFI.js} +2 -2
  96. package/dist/cli/chunks/{chunk-FRL3X2QA.js → chunk-JDXLCNKV.js} +2 -2
  97. package/dist/cli/chunks/{chunk-YW4RNZWT.js → chunk-JIUF6NV6.js} +2 -2
  98. package/dist/cli/chunks/{chunk-JAK5UUWH.js → chunk-JQ2ZD3WO.js} +2 -2
  99. package/dist/cli/chunks/{chunk-YEAC3DC6.js → chunk-K574FLVB.js} +2 -2
  100. package/dist/cli/chunks/{chunk-LZHTCUCO.js → chunk-KEEBUVGV.js} +2 -2
  101. package/dist/cli/chunks/{chunk-LKR7T3OZ.js → chunk-KFXZDQ5J.js} +1 -1
  102. package/dist/cli/chunks/{chunk-7OUMJCJT.js → chunk-KPFG4OIM.js} +1 -1
  103. package/dist/cli/chunks/{chunk-HQ7243G3.js → chunk-KZOBLLXW.js} +2 -2
  104. package/dist/cli/chunks/{chunk-R6WJF4D5.js → chunk-L2F7FVIU.js} +2 -2
  105. package/dist/cli/chunks/{chunk-VRRG66XB.js → chunk-LML5VTFK.js} +1 -1
  106. package/dist/cli/chunks/{chunk-JTWJR2KY.js → chunk-LWUJQGCS.js} +2 -2
  107. package/dist/cli/chunks/{chunk-BQCTO7UB.js → chunk-MH73D5TN.js} +2 -2
  108. package/dist/cli/chunks/{chunk-U4GZWPKM.js → chunk-MWQTACNA.js} +2 -2
  109. package/dist/cli/chunks/{chunk-CIZ6LSNV.js → chunk-N3RN4QTC.js} +2 -2
  110. package/dist/cli/chunks/{chunk-ZQSXG7FA.js → chunk-N5ZRUOMR.js} +2 -2
  111. package/dist/cli/chunks/{chunk-AFGT26NR.js → chunk-NAZVPZJS.js} +2 -2
  112. package/dist/cli/chunks/{chunk-FOHYBR3O.js → chunk-NG2UVPTW.js} +1 -1
  113. package/dist/cli/chunks/{chunk-2D7UBX5S.js → chunk-NHHWLJQF.js} +1 -1
  114. package/dist/cli/chunks/{chunk-JRKEBESE.js → chunk-NNOMDM4N.js} +2 -2
  115. package/dist/cli/chunks/{chunk-YKWMKRYB.js → chunk-NRR23SJV.js} +1 -1
  116. package/dist/cli/chunks/{chunk-WKNWRDA5.js → chunk-NWFIJNEB.js} +1 -1
  117. package/dist/cli/chunks/{chunk-4MK2G6TK.js → chunk-OBCKP3G4.js} +2 -2
  118. package/dist/cli/chunks/{chunk-YKZV7O65.js → chunk-OC2CKU7I.js} +2 -2
  119. package/dist/cli/chunks/{chunk-7RVAHJQZ.js → chunk-OX6T26CD.js} +3 -3
  120. package/dist/cli/chunks/chunk-P64DMQ2C.js +2 -0
  121. package/dist/cli/chunks/{chunk-RKUYVVGJ.js → chunk-PFXX5Q32.js} +2 -2
  122. package/dist/cli/chunks/chunk-PHHXHG2W.js +2 -0
  123. package/dist/cli/chunks/{chunk-N2YAUDAV.js → chunk-PMUBG2RU.js} +2 -2
  124. package/dist/cli/chunks/{chunk-WTHAVFIC.js → chunk-PVHO6KLB.js} +1 -1
  125. package/dist/cli/chunks/{chunk-MO7EITJK.js → chunk-PWEIDHT7.js} +2 -2
  126. package/dist/cli/chunks/{chunk-52DFCV57.js → chunk-PZKZY6PB.js} +2 -2
  127. package/dist/cli/chunks/{chunk-I3VHXA2W.js → chunk-Q335R4MR.js} +2 -2
  128. package/dist/cli/chunks/{chunk-ECTPFCON.js → chunk-Q3JHS3UD.js} +2 -2
  129. package/dist/cli/chunks/{chunk-HJIAVR6P.js → chunk-QFUX7ELG.js} +2 -2
  130. package/dist/cli/chunks/{chunk-L4C42WYI.js → chunk-QW4LN5NK.js} +2 -2
  131. package/dist/cli/chunks/{chunk-HQHLHSJO.js → chunk-QXTW7XCS.js} +2 -2
  132. package/dist/cli/chunks/{chunk-SSV6KSFT.js → chunk-R5RNOLHI.js} +1 -1
  133. package/dist/cli/chunks/{chunk-AVLA5PBJ.js → chunk-RCI64RIJ.js} +2 -2
  134. package/dist/cli/chunks/{chunk-T3BZAFLP.js → chunk-RFNEHNJV.js} +1 -1
  135. package/dist/cli/chunks/{chunk-IL6QRXRP.js → chunk-RGH3WGWD.js} +10 -10
  136. package/dist/cli/chunks/{chunk-E4NU4BJA.js → chunk-RHJVDCLV.js} +2 -2
  137. package/dist/cli/chunks/{chunk-KTSCZ7AW.js → chunk-RVCWSAXI.js} +2 -2
  138. package/dist/cli/chunks/{chunk-TQJE7DNL.js → chunk-RYJHREYS.js} +2 -2
  139. package/dist/cli/chunks/{chunk-HNKPLVYS.js → chunk-S4MR6RTE.js} +1 -1
  140. package/dist/cli/chunks/{chunk-6AYO3IR2.js → chunk-S7N4BKI3.js} +2 -2
  141. package/dist/cli/chunks/{chunk-2NO4H35K.js → chunk-SEHCX4NH.js} +1 -1
  142. package/dist/cli/chunks/{chunk-GKNDP5VK.js → chunk-T46LOLW3.js} +2 -2
  143. package/dist/cli/chunks/{chunk-VXU53F7Z.js → chunk-T4C56HBW.js} +2 -2
  144. package/dist/cli/chunks/{chunk-43GPSYAL.js → chunk-TENYL5TI.js} +2 -2
  145. package/dist/cli/chunks/{chunk-6AOZU3UN.js → chunk-TLPL3EQY.js} +2 -2
  146. package/dist/cli/chunks/{chunk-4ZVGSVHV.js → chunk-TYVQNYXX.js} +4 -4
  147. package/dist/cli/chunks/{chunk-NOPVFBQM.js → chunk-U2AY57XZ.js} +2 -2
  148. package/dist/cli/chunks/{chunk-IQLRA4FV.js → chunk-U54OOA24.js} +1 -1
  149. package/dist/cli/chunks/{chunk-IQ3JFHZN.js → chunk-UHTAI4ZB.js} +1 -1
  150. package/dist/cli/chunks/{chunk-KDIZQHG5.js → chunk-UIGEUEBT.js} +2 -2
  151. package/dist/cli/chunks/{chunk-5VDVYTO5.js → chunk-UYTWDS2R.js} +2 -2
  152. package/dist/cli/chunks/{chunk-ZNSMVQCG.js → chunk-VNAKBHJI.js} +2 -2
  153. package/dist/cli/chunks/{chunk-SUSMHSXT.js → chunk-VOYJJ3KA.js} +2 -2
  154. package/dist/cli/chunks/{chunk-QQCENKCX.js → chunk-VSYBMNIR.js} +1 -1
  155. package/dist/cli/chunks/{chunk-7RAB2BZY.js → chunk-W2FLULF4.js} +2 -2
  156. package/dist/cli/chunks/{chunk-NYARYONH.js → chunk-W4OQYLYO.js} +1 -1
  157. package/dist/cli/chunks/{chunk-DOWCOZDO.js → chunk-WBH4C4BG.js} +2 -2
  158. package/dist/cli/chunks/{chunk-OIYUSWHX.js → chunk-WBMRADQP.js} +1 -1
  159. package/dist/cli/chunks/{chunk-B3H4K7CY.js → chunk-WMW47QMR.js} +2 -2
  160. package/dist/cli/chunks/{chunk-VPVZHJSU.js → chunk-WVY22NHZ.js} +2 -2
  161. package/dist/cli/chunks/{chunk-6W42XWLL.js → chunk-WXMSRBQF.js} +2 -2
  162. package/dist/cli/chunks/{chunk-CIUOC5F3.js → chunk-XPLSLHRB.js} +1 -1
  163. package/dist/cli/chunks/{chunk-E722WNWC.js → chunk-YF5OP6CR.js} +2 -2
  164. package/dist/cli/chunks/{chunk-H76TV4UU.js → chunk-YN6W2XIT.js} +3 -3
  165. package/dist/cli/chunks/{chunk-FF43SRP6.js → chunk-ZCDXJ27H.js} +1 -1
  166. package/dist/cli/chunks/{chunk-TKYEP7OR.js → chunk-ZFGND4QK.js} +1 -1
  167. package/dist/cli/chunks/{chunk-O2MZZL54.js → chunk-ZWRQ5VAU.js} +2 -2
  168. package/dist/cli/chunks/{chunk-H6NFDOMK.js → chunk-ZYLSOBOR.js} +1 -1
  169. package/dist/cli/chunks/{ci-B432UH6N.js → ci-NTRH7PAW.js} +2 -2
  170. package/dist/cli/chunks/{ci-output-GTHH7WYG.js → ci-output-F57RSD35.js} +2 -2
  171. package/dist/cli/chunks/{circuit-breaker-VW75DLME.js → circuit-breaker-4WST3QSA.js} +2 -2
  172. package/dist/cli/chunks/{claude-flow-setup-RE3IVT7U.js → claude-flow-setup-KB4TKMYI.js} +2 -2
  173. package/dist/cli/chunks/client-GPZEC54E.js +2 -0
  174. package/dist/cli/chunks/{cline-installer-NUBZZ55N.js → cline-installer-W2ZHQ6WM.js} +2 -2
  175. package/dist/cli/chunks/{code-K6JCWKNW.js → code-TF2AVR5D.js} +2 -2
  176. package/dist/cli/chunks/{code-index-extractor-I4ILB5JN.js → code-index-extractor-RMDRUVQJ.js} +2 -2
  177. package/dist/cli/chunks/codex-installer-VSTRHJHV.js +14 -0
  178. package/dist/cli/chunks/{completions-V3KJVJF4.js → completions-3Q37QVFR.js} +2 -2
  179. package/dist/cli/chunks/{complexity-analyzer-HRG7OOY3.js → complexity-analyzer-3FNFLACD.js} +2 -2
  180. package/dist/cli/chunks/{continuedev-installer-CNTDONWG.js → continuedev-installer-VTEXM455.js} +2 -2
  181. package/dist/cli/chunks/{copilot-installer-XPWWIWYA.js → copilot-installer-AGY7DQUS.js} +2 -2
  182. package/dist/cli/chunks/core-handlers-YMGHYIBR.js +2 -0
  183. package/dist/cli/chunks/{cost-tracker-MFNLQ56K.js → cost-tracker-LTZAQBX7.js} +2 -2
  184. package/dist/cli/chunks/{coverage-KOIK654V.js → coverage-TT64IOS4.js} +3 -3
  185. package/dist/cli/chunks/cross-domain-router-ECBNTGYJ.js +2 -0
  186. package/dist/cli/chunks/{cursor-installer-S5MKLRQQ.js → cursor-installer-OVOJIOHN.js} +2 -2
  187. package/dist/cli/chunks/{daemon-DUS6JYW6.js → daemon-DMFZMXKA.js} +8 -8
  188. package/dist/cli/chunks/{daemon-Z7VPGWHY.js → daemon-XCULEHWY.js} +4 -4
  189. package/dist/cli/chunks/{dag-attention-scheduler-7CQ3ARNI.js → dag-attention-scheduler-WW2RX4B5.js} +2 -2
  190. package/dist/cli/chunks/{detect-WORBCAYF.js → detect-QNWIM232.js} +2 -2
  191. package/dist/cli/chunks/{dist-node-KRNI6OYW.js → dist-node-6GQIY3CG.js} +2 -2
  192. package/dist/cli/chunks/{domain-handler-KRUR2VQG.js → domain-handler-6RJPDELX.js} +2 -2
  193. package/dist/cli/chunks/{domain-transfer-VEOVLV54.js → domain-transfer-WK524LBS.js} +2 -2
  194. package/dist/cli/chunks/dream-EHGKCFWH.js +2 -0
  195. package/dist/cli/chunks/{embed-and-insert-pattern-QU3NQVA5.js → embed-and-insert-pattern-SO6GWJW7.js} +2 -2
  196. package/dist/cli/chunks/{eval-AYQ7BSUP.js → eval-GL544IPO.js} +2 -2
  197. package/dist/cli/chunks/{experience-capture-middleware-AWQBL6LT.js → experience-capture-middleware-BCCJ35OX.js} +3 -3
  198. package/dist/cli/chunks/{fast-paths-V5EL4BYJ.js → fast-paths-CATDDBEU.js} +2 -2
  199. package/dist/cli/chunks/{feature-flags-P34BPRWU.js → feature-flags-BUXNAORY.js} +2 -2
  200. package/dist/cli/chunks/{feature-flags-BXX7BP22.js → feature-flags-KNNWWP5G.js} +2 -2
  201. package/dist/cli/chunks/{file-discovery-MS6BKQ2U.js → file-discovery-S4HF3O7D.js} +2 -2
  202. package/dist/cli/chunks/{fleet-7WVVPA4W.js → fleet-DQVQQONW.js} +3 -3
  203. package/dist/cli/chunks/{gnn-wrapper-7WQ3LEPG.js → gnn-wrapper-G7ABZUG7.js} +2 -2
  204. package/dist/cli/chunks/{heartbeat-handler-P7QD3BZH.js → heartbeat-handler-UFMELIWT.js} +4 -4
  205. package/dist/cli/chunks/heartbeat-scheduler-UFEL2CBW.js +2 -0
  206. package/dist/cli/chunks/hnsw-adapter-BLSD45CX.js +2 -0
  207. package/dist/cli/chunks/hnsw-index-A3RZODEN.js +2 -0
  208. package/dist/cli/chunks/{hnsw-legacy-bridge-Y3GAR3UP.js → hnsw-legacy-bridge-YIILSRXI.js} +2 -2
  209. package/dist/cli/chunks/{hnswlib-node-5QUXZQWQ.js → hnswlib-node-TSVRMXDH.js} +2 -2
  210. package/dist/cli/chunks/{hooks-2D64KPRY.js → hooks-OHQPNK74.js} +10 -10
  211. package/dist/cli/chunks/{hypergraph-engine-5INXEZDP.js → hypergraph-engine-LY7PJDSL.js} +2 -2
  212. package/dist/cli/chunks/{hypergraph-handler-YJJJ3ESZ.js → hypergraph-handler-YGDYZO6H.js} +3 -3
  213. package/dist/cli/chunks/impact-analyzer-OXHD3FOH.js +2 -0
  214. package/dist/cli/chunks/{init-handler-QSFYJN5Q.js → init-handler-MTK65LI3.js} +9 -8
  215. package/dist/cli/chunks/init-wizard-PKZL7QBU.js +2 -0
  216. package/dist/cli/chunks/kernel-XWPM72UJ.js +2 -0
  217. package/dist/cli/chunks/{kilocode-installer-3N3QGTJU.js → kilocode-installer-3IICU4RS.js} +2 -2
  218. package/dist/cli/chunks/{kiro-installer-GIWVTFZQ.js → kiro-installer-MXOVQYQA.js} +2 -2
  219. package/dist/cli/chunks/knowledge-graph-FRKR5XWI.js +2 -0
  220. package/dist/cli/chunks/{learning-SGO2DQ5Q.js → learning-EV5LSOOM.js} +3 -3
  221. package/dist/cli/chunks/{llm-router-HBBULO65.js → llm-router-7LYDJUOT.js} +4 -4
  222. package/dist/cli/chunks/llm-router-service-R7A5HHDM.js +2 -0
  223. package/dist/cli/chunks/{load-B5OFYB4H.js → load-F4PVAMXQ.js} +2 -2
  224. package/dist/cli/chunks/load-test-5IKDWSYL.js +2 -0
  225. package/dist/cli/chunks/{mcp-FG3LNQR4.js → mcp-DUYJUEME.js} +2 -2
  226. package/dist/cli/chunks/{memory-SPS7ZWLC.js → memory-XTTYORAS.js} +5 -5
  227. package/dist/cli/chunks/memory-backend-7VW5QCMO.js +2 -0
  228. package/dist/cli/chunks/{memory-handlers-P7FTPWP3.js → memory-handlers-VZH3R2TQ.js} +2 -2
  229. package/dist/cli/chunks/{multi-model-executor-PUB7E6KH.js → multi-model-executor-R6XCTMCF.js} +2 -2
  230. package/dist/cli/chunks/{opencode-installer-TGCSGVG2.js → opencode-installer-33ULBU2F.js} +2 -2
  231. package/dist/cli/chunks/{orchestrator-S5FTJFGB.js → orchestrator-34ZJEKTJ.js} +22 -21
  232. package/dist/cli/chunks/pattern-null-store-BU6LCB2W.js +2 -0
  233. package/dist/cli/chunks/{pattern-usage-recorder-LCXXGRAB.js → pattern-usage-recorder-GZ2M3F2E.js} +2 -2
  234. package/dist/cli/chunks/{pipeline-ENOSRHKW.js → pipeline-SR5OTY45.js} +2 -2
  235. package/dist/cli/chunks/platform-VKJFJIAW.js +2 -0
  236. package/dist/cli/chunks/{plugin-JZ5ODJSU.js → plugin-5C5UBQUQ.js} +2 -2
  237. package/dist/cli/chunks/{prime-radiant-advanced-wasm-DPJUPNCG.js → prime-radiant-advanced-wasm-KO2PQI3D.js} +2 -2
  238. package/dist/cli/chunks/protocol-executor-BSP5LWJN.js +2 -0
  239. package/dist/cli/chunks/{protocol-handler-IP4NLVY3.js → protocol-handler-ZF74NIKA.js} +2 -2
  240. package/dist/cli/chunks/{prove-P6FM4RU7.js → prove-MO5TQQU4.js} +2 -2
  241. package/dist/cli/chunks/qe-reasoning-bank-J2RC7P25.js +2 -0
  242. package/dist/cli/chunks/{quality-UHP4XO26.js → quality-EYIN6AER.js} +2 -2
  243. package/dist/cli/chunks/quality-gate-V6OQM57O.js +7 -0
  244. package/dist/cli/chunks/queen-coordinator-XI5AJV2V.js +2 -0
  245. package/dist/cli/chunks/{real-embeddings-6SO5MFRQ.js → real-embeddings-AR7TZX7U.js} +2 -2
  246. package/dist/cli/chunks/{roocode-installer-WTWUOFCH.js → roocode-installer-46E626VZ.js} +2 -2
  247. package/dist/cli/chunks/router-VXQYYA3D.js +2 -0
  248. package/dist/cli/chunks/routing-feedback-HZQTASFF.js +2 -0
  249. package/dist/cli/chunks/{routing-handler-IK7HYERQ.js → routing-handler-ZNRVW6QW.js} +2 -2
  250. package/dist/cli/chunks/{ruvector-commands-THLB4NIM.js → ruvector-commands-4L2CQMWS.js} +2 -2
  251. package/dist/cli/chunks/rvf-dual-writer-BDTLLJER.js +2 -0
  252. package/dist/cli/chunks/rvf-migration-adapter-IB343MDN.js +2 -0
  253. package/dist/cli/chunks/{rvf-migration-coordinator-BUKCSHBD.js → rvf-migration-coordinator-H4RVGBIA.js} +2 -2
  254. package/dist/cli/chunks/rvf-native-adapter-Y7SN7LHU.js +2 -0
  255. package/dist/cli/chunks/{rvf-store-integrity-ECTADZIN.js → rvf-store-integrity-OJGWWPLL.js} +2 -2
  256. package/dist/cli/chunks/safe-db-2VTKKBJU.js +2 -0
  257. package/dist/cli/chunks/schedule-QJ4CFGJY.js +2 -0
  258. package/dist/cli/chunks/scheduler-2NHDQPC3.js +2 -0
  259. package/dist/cli/chunks/{security-HN4UXFXX.js → security-JF3BVNRO.js} +3 -3
  260. package/dist/cli/chunks/{shared-rvf-adapter-XJCPX5SN.js → shared-rvf-adapter-M6NNIZ5W.js} +2 -2
  261. package/dist/cli/chunks/{shared-rvf-dual-writer-23X5PNY5.js → shared-rvf-dual-writer-LHMFCYVE.js} +2 -2
  262. package/dist/cli/chunks/sqlite-persistence-NVVAPZN3.js +2 -0
  263. package/dist/cli/chunks/{status-handler-ZXANTHKT.js → status-handler-GMIOXQIE.js} +2 -2
  264. package/dist/cli/chunks/{structural-health-LR6WI3AH.js → structural-health-YZXHVHM6.js} +2 -2
  265. package/dist/cli/chunks/{sync-I5IUJF33.js → sync-GMPCPV5L.js} +2 -2
  266. package/dist/cli/chunks/{sync-4OEI3BC2.js → sync-N56UQGCS.js} +2 -2
  267. package/dist/cli/chunks/{task-handler-R3ATJKU5.js → task-handler-VTNRGAXP.js} +2 -2
  268. package/dist/cli/chunks/{task-handlers-4X357AEW.js → task-handlers-FYSDH55N.js} +3 -3
  269. package/dist/cli/chunks/{test-PR2B5H2F.js → test-GQNCKRSP.js} +4 -4
  270. package/dist/cli/chunks/{test-scheduling-ZNOSQVLD.js → test-scheduling-GPRXSIRP.js} +3 -3
  271. package/dist/cli/chunks/{token-bootstrap-LYXOI72S.js → token-bootstrap-76SRNXGG.js} +2 -2
  272. package/dist/cli/chunks/{token-usage-R6EQZBX2.js → token-usage-O7CZDP5Q.js} +2 -2
  273. package/dist/cli/chunks/{transformers-COQWK27J.js → transformers-LTU4LSSC.js} +2 -2
  274. package/dist/cli/chunks/{tree-sitter-wasm-parser-LLIW2X3M.js → tree-sitter-wasm-parser-NQSQCMBM.js} +2 -2
  275. package/dist/cli/chunks/{types-MEYTZITK.js → types-OP6IWE6N.js} +2 -2
  276. package/dist/cli/chunks/unified-memory-DSTIEDSH.js +2 -0
  277. package/dist/cli/chunks/unified-memory-hnsw-KBV3P4OS.js +2 -0
  278. package/dist/cli/chunks/unified-persistence-XKCOUBKY.js +2 -0
  279. package/dist/cli/chunks/{upgrade-DVIJ456A.js → upgrade-OQWRBZ3R.js} +2 -2
  280. package/dist/cli/chunks/{validate-UYTSMJ5X.js → validate-TH5SRP3E.js} +2 -2
  281. package/dist/cli/chunks/{validate-swarm-P32WCJR6.js → validate-swarm-UITL2JUS.js} +2 -2
  282. package/dist/cli/chunks/{vibium-JGVOLM6X.js → vibium-O6PRAG4J.js} +2 -2
  283. package/dist/cli/chunks/visual-security-TTWSPZTZ.js +2 -0
  284. package/dist/cli/chunks/{web-tree-sitter-5ZGNCTPN.js → web-tree-sitter-XBFBY4OF.js} +2 -2
  285. package/dist/cli/chunks/{windsurf-installer-IILSSQAE.js → windsurf-installer-DVT5NRNY.js} +2 -2
  286. package/dist/cli/chunks/witness-chain-2KY73HPN.js +2 -0
  287. package/dist/cli/chunks/{witness-chain-JZMXCG3B.js → witness-chain-VRSH2F36.js} +2 -2
  288. package/dist/cli/chunks/{witness-key-manager-UUTLNUIH.js → witness-key-manager-GFHRDKQ4.js} +2 -2
  289. package/dist/cli/chunks/{workflow-NS7HXVHZ.js → workflow-HAZ6YKOG.js} +4 -4
  290. package/dist/cli/chunks/workflow-orchestrator-UK56AVOT.js +2 -0
  291. package/dist/cli/chunks/{wrappers-XKEDSV5W.js → wrappers-5LLLT7GM.js} +2 -2
  292. package/dist/cli/commands/daemon.js +3 -0
  293. package/dist/cli/commands/platform.d.ts +1 -0
  294. package/dist/cli/commands/platform.js +28 -6
  295. package/dist/cli/commands/quality-gate.js +25 -3
  296. package/dist/cli/foreground-command.d.ts +3 -0
  297. package/dist/cli/foreground-command.js +22 -0
  298. package/dist/cli/handlers/init-handler.d.ts +5 -0
  299. package/dist/cli/handlers/init-handler.js +6 -0
  300. package/dist/cli/index.js +8 -1
  301. package/dist/contracts/verdicts.d.ts +625 -0
  302. package/dist/contracts/verdicts.js +202 -14
  303. package/dist/coordination/handlers/coverage-handlers.js +8 -1
  304. package/dist/domains/chaos-resilience/diagnosis/corpus.d.ts +5 -0
  305. package/dist/domains/chaos-resilience/diagnosis/corpus.js +141 -0
  306. package/dist/domains/chaos-resilience/diagnosis/detectors.d.ts +11 -0
  307. package/dist/domains/chaos-resilience/diagnosis/detectors.js +109 -0
  308. package/dist/domains/chaos-resilience/diagnosis/index.d.ts +5 -0
  309. package/dist/domains/chaos-resilience/diagnosis/index.js +5 -0
  310. package/dist/domains/chaos-resilience/diagnosis/scorer.d.ts +8 -0
  311. package/dist/domains/chaos-resilience/diagnosis/scorer.js +128 -0
  312. package/dist/domains/chaos-resilience/diagnosis/types.d.ts +171 -0
  313. package/dist/domains/chaos-resilience/diagnosis/types.js +3 -0
  314. package/dist/domains/chaos-resilience/index.d.ts +1 -0
  315. package/dist/domains/chaos-resilience/index.js +1 -0
  316. package/dist/domains/index.d.ts +1 -0
  317. package/dist/domains/index.js +1 -0
  318. package/dist/early-exit/early-exit-controller.d.ts +4 -2
  319. package/dist/early-exit/early-exit-controller.js +95 -7
  320. package/dist/early-exit/index.d.ts +1 -1
  321. package/dist/early-exit/speculative-executor.js +3 -0
  322. package/dist/early-exit/types.d.ts +51 -0
  323. package/dist/early-exit/types.js +3 -0
  324. package/dist/index.d.ts +4 -2
  325. package/dist/index.js +2 -1
  326. package/dist/init/browser-engine-installer.d.ts +11 -0
  327. package/dist/init/browser-engine-installer.js +35 -5
  328. package/dist/init/codex-installer.d.ts +11 -1
  329. package/dist/init/codex-installer.js +90 -24
  330. package/dist/init/init-wizard-hooks.js +11 -11
  331. package/dist/init/orchestrator.js +2 -0
  332. package/dist/init/phases/07-hooks.d.ts +3 -3
  333. package/dist/init/phases/07-hooks.js +19 -18
  334. package/dist/init/phases/09-assets.d.ts +4 -0
  335. package/dist/init/phases/09-assets.js +13 -10
  336. package/dist/init/phases/phase-interface.d.ts +2 -0
  337. package/dist/init/types.d.ts +4 -0
  338. package/dist/learning/index.d.ts +3 -0
  339. package/dist/learning/index.js +2 -0
  340. package/dist/learning/pattern-mutation-error.d.ts +9 -0
  341. package/dist/learning/pattern-mutation-error.js +14 -0
  342. package/dist/learning/pattern-store.js +24 -2
  343. package/dist/learning/qe-reasoning-bank.js +24 -5
  344. package/dist/learning/rvf-pattern-store.js +23 -5
  345. package/dist/learning/structural-retrieval/corpus.d.ts +5 -0
  346. package/dist/learning/structural-retrieval/corpus.js +97 -0
  347. package/dist/learning/structural-retrieval/evaluate.d.ts +7 -0
  348. package/dist/learning/structural-retrieval/evaluate.js +124 -0
  349. package/dist/learning/structural-retrieval/index.d.ts +6 -0
  350. package/dist/learning/structural-retrieval/index.js +4 -0
  351. package/dist/learning/structural-retrieval/receipt.d.ts +14 -0
  352. package/dist/learning/structural-retrieval/receipt.js +36 -0
  353. package/dist/learning/structural-retrieval/types.d.ts +83 -0
  354. package/dist/learning/structural-retrieval/types.js +2 -0
  355. package/dist/mcp/bundle.js +423 -423
  356. package/dist/mcp/index.d.ts +1 -0
  357. package/dist/mcp/index.js +1 -0
  358. package/dist/mcp/protocol-server.js +11 -2
  359. package/dist/mcp/qe-tool-bridge.js +1 -0
  360. package/dist/mcp/services/session-resume.d.ts +15 -19
  361. package/dist/mcp/services/session-resume.js +204 -194
  362. package/dist/mcp/tool-annotations.d.ts +25 -0
  363. package/dist/mcp/tool-annotations.js +75 -0
  364. package/dist/mcp/tool-registry.js +17 -12
  365. package/dist/mcp/tools/base.d.ts +7 -1
  366. package/dist/mcp/tools/base.js +8 -0
  367. package/dist/mcp/tools/quality-assessment/gate.d.ts +8 -5
  368. package/dist/mcp/tools/quality-assessment/gate.js +9 -4
  369. package/dist/mcp/tools/registry.d.ts +3 -0
  370. package/dist/mcp/tools/registry.js +1 -0
  371. package/dist/mcp/types.d.ts +15 -0
  372. package/dist/skills/qe-court/cli.js +0 -0
  373. package/dist/validation/quality-gate-runner.d.ts +27 -4
  374. package/dist/validation/quality-gate-runner.js +33 -4
  375. package/dist/validation/verification-reach.d.ts +90 -0
  376. package/dist/validation/verification-reach.js +187 -0
  377. package/dist/verification/adversarial-verify/index.d.ts +1 -1
  378. package/dist/verification/adversarial-verify/measurement-receipt.d.ts +13 -0
  379. package/dist/verification/adversarial-verify/measurement-receipt.js +136 -0
  380. package/dist/verification/adversarial-verify/synthesize.js +7 -10
  381. package/dist/verification/adversarial-verify/types.d.ts +35 -0
  382. package/dist/verification/adversarial-verify/verify.js +6 -1
  383. package/package.json +9 -5
  384. package/schemas/coverage-gap.schema.json +41 -0
  385. package/schemas/finding-verdict.schema.json +470 -0
  386. package/schemas/risk-decision.schema.json +41 -0
  387. package/dist/cli/chunks/adapter-3VBXL7DO.js +0 -2
  388. package/dist/cli/chunks/aqe-learning-engine-NXRNKJNA.js +0 -2
  389. package/dist/cli/chunks/base-F6GMOKU2.js +0 -2
  390. package/dist/cli/chunks/browser-workflow-QRDC46LR.js +0 -2
  391. package/dist/cli/chunks/chunk-3JIJBR4V.js +0 -2
  392. package/dist/cli/chunks/chunk-R2B6EE45.js +0 -2
  393. package/dist/cli/chunks/chunk-TRDEULS7.js +0 -4
  394. package/dist/cli/chunks/chunk-WJXHE52V.js +0 -65
  395. package/dist/cli/chunks/client-HNBZUEVV.js +0 -2
  396. package/dist/cli/chunks/codex-installer-AKQ5BCHU.js +0 -15
  397. package/dist/cli/chunks/core-handlers-TB7NLYXL.js +0 -2
  398. package/dist/cli/chunks/cross-domain-router-MDSI553U.js +0 -2
  399. package/dist/cli/chunks/dream-X7ISHFEE.js +0 -2
  400. package/dist/cli/chunks/heartbeat-scheduler-2C5XGFQT.js +0 -2
  401. package/dist/cli/chunks/hnsw-adapter-KCVMXLUL.js +0 -2
  402. package/dist/cli/chunks/hnsw-index-OGWZS6MP.js +0 -2
  403. package/dist/cli/chunks/impact-analyzer-IBJ43GQL.js +0 -2
  404. package/dist/cli/chunks/init-wizard-6XMFD5LP.js +0 -2
  405. package/dist/cli/chunks/kernel-UDUMUPB3.js +0 -2
  406. package/dist/cli/chunks/knowledge-graph-JRYTUG3W.js +0 -2
  407. package/dist/cli/chunks/llm-router-service-KF5ZALUQ.js +0 -2
  408. package/dist/cli/chunks/load-test-LHMBCNCH.js +0 -2
  409. package/dist/cli/chunks/memory-backend-WZHKHBZK.js +0 -2
  410. package/dist/cli/chunks/pattern-null-store-UZSHCRL2.js +0 -2
  411. package/dist/cli/chunks/platform-WCRBO3Z7.js +0 -2
  412. package/dist/cli/chunks/protocol-executor-42NLVDTC.js +0 -2
  413. package/dist/cli/chunks/qe-reasoning-bank-W74RSMMU.js +0 -2
  414. package/dist/cli/chunks/quality-gate-63DDBSGM.js +0 -7
  415. package/dist/cli/chunks/queen-coordinator-XELKSRMS.js +0 -2
  416. package/dist/cli/chunks/router-GTW2EQZV.js +0 -2
  417. package/dist/cli/chunks/routing-feedback-NVOBWEMK.js +0 -2
  418. package/dist/cli/chunks/rvf-dual-writer-5OPVMXNL.js +0 -2
  419. package/dist/cli/chunks/rvf-migration-adapter-5S4YFTX4.js +0 -2
  420. package/dist/cli/chunks/rvf-native-adapter-LYSJHEVX.js +0 -2
  421. package/dist/cli/chunks/safe-db-AEB3JMLD.js +0 -2
  422. package/dist/cli/chunks/schedule-4QNPCQNT.js +0 -2
  423. package/dist/cli/chunks/scheduler-S3DFHX6A.js +0 -2
  424. package/dist/cli/chunks/sqlite-persistence-L2KISU2H.js +0 -2
  425. package/dist/cli/chunks/unified-memory-5KQMA7FV.js +0 -2
  426. package/dist/cli/chunks/unified-memory-hnsw-PQRPTYOD.js +0 -2
  427. package/dist/cli/chunks/unified-persistence-YDONVPJB.js +0 -2
  428. package/dist/cli/chunks/visual-security-RJ7RTNGJ.js +0 -2
  429. package/dist/cli/chunks/witness-chain-YXXXNGAM.js +0 -2
  430. package/dist/cli/chunks/workflow-orchestrator-5KUAVSTH.js +0 -2
package/CHANGELOG.md CHANGED
@@ -5,6 +5,120 @@ All notable changes to the Agentic QE project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [3.14.2] - 2026-09-13
9
+
10
+ This patch keeps the quality daemon alive in foreground mode, publishes the
11
+ first conservative MCP tool-safety annotation increment, and refreshes
12
+ dependency trees with patched Hono and Sharp releases.
13
+
14
+ ### Added
15
+
16
+ - Added typed MCP safety annotations across the registry, bridge, protocol
17
+ registry, and live `tools/list` responses. The deterministic 88-tool
18
+ inventory starts every built-in with a conservative disposition; unknown and
19
+ plugin-supplied tools cannot self-assert optimistic hints. Evidence-backed
20
+ read-only or idempotent classifications remain deferred ([#681], [#684]).
21
+
22
+ ### Fixed
23
+
24
+ - Kept `aqe daemon start` running after successful startup instead of exiting
25
+ immediately, while preserving cleanup for non-foreground commands and
26
+ graceful `SIGTERM` shutdown ([#678], [#683]).
27
+ - Raised managed Hono dependency floors to 4.13.5 and resolved Hono 4.13.7,
28
+ closing the dot-notation body-parsing denial-of-service exposure. Raised
29
+ managed Sharp floors and resolved Sharp 0.35.4 to include the patched libheif
30
+ dependency set ([#685]).
31
+
32
+ ### Changed
33
+
34
+ - Refreshed dependency snapshots across the root project and development-time
35
+ Ruflo, RuVocal, and Goal UI trees, including `fast-uri`, `qs`, Faker,
36
+ `postcss-selector-parser`, and `@humanfs/node` ([#675]).
37
+
38
+ [#675]: https://github.com/proffesor-for-testing/agentic-qe/pull/675
39
+ [#678]: https://github.com/proffesor-for-testing/agentic-qe/issues/678
40
+ [#681]: https://github.com/proffesor-for-testing/agentic-qe/issues/681
41
+ [#683]: https://github.com/proffesor-for-testing/agentic-qe/pull/683
42
+ [#684]: https://github.com/proffesor-for-testing/agentic-qe/pull/684
43
+ [#685]: https://github.com/proffesor-for-testing/agentic-qe/pull/685
44
+
45
+ ## [3.14.1] - 2026-09-07
46
+
47
+ This release moves AQE to maintained Node.js runtimes and strengthens the
48
+ evidence boundaries around runtime diagnosis, verification, session recovery,
49
+ and learned-pattern storage.
50
+
51
+ ### Added
52
+
53
+ - Added a reproducible runtime-fault diagnosis benchmark covering clean/fault
54
+ pairs, classification, localization, abstention, and uncertainty reporting
55
+ ([#649], [#662]).
56
+ - Added revision-bound verification-reach manifests so quality gates expose
57
+ direct, partial, uncovered, stale, and legacy-unknown evidence instead of
58
+ passing without observable failure-mode coverage ([#651], [#664]).
59
+ - Added a 100-query structural-transfer retrieval corpus with deterministic
60
+ ranking metrics and immutable receipts ([#653], [#665]).
61
+ - Added sanitized judge-measurement receipts with schema-enforced trust,
62
+ identity, retry, decoding, and timestamp boundaries ([#658], [#670]).
63
+
64
+ ### Fixed
65
+
66
+ - Hardened legacy session recovery against root escape, symlink and inode
67
+ substitution, malformed lineage, invalid UTF-8, oversized records, torn
68
+ tails, and unbounded caller overrides; legacy resume remains explicit and
69
+ unverified ([#659], [#671]).
70
+ - Made SQLite pattern-write failures and incomplete HNSW/RVF indexing return
71
+ typed `FAILED` or `COMMITTED_PENDING_INDEX` evidence while preserving
72
+ committed witness and dual-write side effects ([#660], [#672]).
73
+ - Removed package-manager calls from generated Claude lifecycle hooks, added
74
+ bounded Codex guidance modes, and separated Vibium detection from readiness
75
+ installation in response to reports from @pacphi ([#654], [#655], [#656],
76
+ [#661]).
77
+ - Replaced rate-limited qe-browser public fixtures with deterministic loopback
78
+ fixtures and accepted current Vibium screenshot output paths ([#561], [#667]).
79
+ - Refreshed embedded graph, Ruvocal, and Goal UI dependency locks with clean
80
+ Node 22+ installs and current vulnerability fixes ([#669]).
81
+ - Kept Rust coverage analysis on the Rust instrumentation path so an available
82
+ JavaScript test runner cannot replace the documented static-estimation
83
+ fallback with an empty coverage report ([#569]).
84
+ - Published the verdict JSON schemas and exposed pattern mutation outcomes at
85
+ the package root so downstream consumers can validate and classify writes.
86
+ - Sealed one npm tarball after asset synchronization and reused those exact
87
+ bytes for initialization, consumer-audit, and publication gates.
88
+
89
+ ### Changed
90
+
91
+ - Raised the published runtime floor to Node.js 22.13.0, recommends Node.js 24
92
+ for development and containers, and moved CI workflows off Node 18/20
93
+ runtimes ([#663]).
94
+ - Early-exit presets now collect shadow-calibration evidence by default while
95
+ still executing every layer; enforced skipping remains explicit ([#657],
96
+ [#666]).
97
+
98
+ [#561]: https://github.com/proffesor-for-testing/agentic-qe/issues/561
99
+ [#569]: https://github.com/proffesor-for-testing/agentic-qe/issues/569
100
+ [#649]: https://github.com/proffesor-for-testing/agentic-qe/issues/649
101
+ [#651]: https://github.com/proffesor-for-testing/agentic-qe/issues/651
102
+ [#653]: https://github.com/proffesor-for-testing/agentic-qe/issues/653
103
+ [#654]: https://github.com/proffesor-for-testing/agentic-qe/issues/654
104
+ [#655]: https://github.com/proffesor-for-testing/agentic-qe/issues/655
105
+ [#656]: https://github.com/proffesor-for-testing/agentic-qe/issues/656
106
+ [#657]: https://github.com/proffesor-for-testing/agentic-qe/issues/657
107
+ [#658]: https://github.com/proffesor-for-testing/agentic-qe/issues/658
108
+ [#659]: https://github.com/proffesor-for-testing/agentic-qe/issues/659
109
+ [#660]: https://github.com/proffesor-for-testing/agentic-qe/issues/660
110
+ [#661]: https://github.com/proffesor-for-testing/agentic-qe/pull/661
111
+ [#662]: https://github.com/proffesor-for-testing/agentic-qe/pull/662
112
+ [#663]: https://github.com/proffesor-for-testing/agentic-qe/pull/663
113
+ [#664]: https://github.com/proffesor-for-testing/agentic-qe/pull/664
114
+ [#665]: https://github.com/proffesor-for-testing/agentic-qe/pull/665
115
+ [#666]: https://github.com/proffesor-for-testing/agentic-qe/pull/666
116
+ [#667]: https://github.com/proffesor-for-testing/agentic-qe/pull/667
117
+ [#669]: https://github.com/proffesor-for-testing/agentic-qe/pull/669
118
+ [#670]: https://github.com/proffesor-for-testing/agentic-qe/pull/670
119
+ [#671]: https://github.com/proffesor-for-testing/agentic-qe/pull/671
120
+ [#672]: https://github.com/proffesor-for-testing/agentic-qe/pull/672
121
+
8
122
  ## [3.14.0] - 2026-08-30
9
123
 
10
124
  This release makes learned evidence, semantic vectors, recovery mirrors, and
@@ -52,26 +52,18 @@ setup:
52
52
  optional_tools:
53
53
  - pixelmatch
54
54
  - pngjs
55
- # NOTE: this yaml deliberately uses ONLY pinned public fixtures
56
- # (httpbin.org/*) so it can be run end-to-end by CommandEvalRunner without
57
- # any prerequisite services. Tests that need a local poisoned-HTML fixture
58
- # (the check-injection severity path) live in scripts/smoke-test.sh, which
59
- # starts fixtures/serve-skills.js out of band.
55
+ # The CI workflow starts fixtures/serve-skills.js on loopback before this
56
+ # suite runs. Keeping browser targets local removes rate limits and makes
57
+ # every page stable across repeated visual comparisons.
60
58
 
61
59
  fixtures:
62
- public_pinned:
63
- # Pinned public endpoints — chosen because they're stable, well-known, and
64
- # serve predictable forms / HTML. Per feedback_no_unverified_failure_modes,
65
- # these are the canonical "does the tool actually work" fixtures.
66
- httpbin_form:
67
- url: "https://httpbin.org/forms/post"
68
- description: "Classic simple form custname, custtel, custemail, size, toppings"
69
- httpbin_html:
70
- url: "https://httpbin.org/html"
71
- description: "Static HTML page with known headings"
72
- httpbin_status_404:
73
- url: "https://httpbin.org/status/404"
74
- description: "Known 404 for testing no_failed_requests"
60
+ local:
61
+ form:
62
+ url: "http://127.0.0.1:8088/fixtures/form.html"
63
+ description: "Deterministic form with an email input and submit button"
64
+ content:
65
+ url: "http://127.0.0.1:8088/fixtures/content.html"
66
+ description: "Deterministic static page with a known heading"
75
67
 
76
68
  test_cases:
77
69
  # -------- assert.js --------
@@ -81,10 +73,10 @@ test_cases:
81
73
  priority: critical
82
74
  input:
83
75
  setup:
84
- - "vibium --headless go https://httpbin.org/forms/post"
76
+ - "vibium --headless go http://127.0.0.1:8088/fixtures/form.html"
85
77
  command: |
86
78
  node .claude/skills/qe-browser/scripts/assert.js --checks \
87
- '[{"kind": "url_contains", "text": "httpbin.org/forms"}]'
79
+ '[{"kind": "url_contains", "text": "/fixtures/form.html"}]'
88
80
  expected:
89
81
  exit_code: 0
90
82
  json_fields:
@@ -98,7 +90,7 @@ test_cases:
98
90
  priority: critical
99
91
  input:
100
92
  setup:
101
- - "vibium --headless go https://httpbin.org/html"
93
+ - "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
102
94
  command: |
103
95
  node .claude/skills/qe-browser/scripts/assert.js --checks \
104
96
  '[{"kind": "selector_visible", "selector": "h1"}]'
@@ -113,7 +105,7 @@ test_cases:
113
105
  priority: critical
114
106
  input:
115
107
  setup:
116
- - "vibium --headless go https://httpbin.org/html"
108
+ - "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
117
109
  command: |
118
110
  node .claude/skills/qe-browser/scripts/assert.js --checks \
119
111
  '[{"kind": "url_contains", "text": "this-does-not-exist"}]'
@@ -132,10 +124,10 @@ test_cases:
132
124
  command: |
133
125
  node .claude/skills/qe-browser/scripts/batch.js --steps \
134
126
  '[
135
- {"action": "go", "url": "https://httpbin.org/html"},
127
+ {"action": "go", "url": "http://127.0.0.1:8088/fixtures/content.html"},
136
128
  {"action": "wait_load"},
137
129
  {"action": "assert", "checks": [
138
- {"kind": "url_contains", "text": "/html"},
130
+ {"kind": "url_contains", "text": "/fixtures/content.html"},
139
131
  {"kind": "selector_visible", "selector": "h1"}
140
132
  ]}
141
133
  ]' --summary-only
@@ -154,9 +146,11 @@ test_cases:
154
146
  command: |
155
147
  node .claude/skills/qe-browser/scripts/batch.js --steps \
156
148
  '[
157
- {"action": "go", "url": "https://httpbin.org/html"},
158
- {"action": "click", "selector": "#does-not-exist"},
159
- {"action": "go", "url": "https://httpbin.org/forms/post"}
149
+ {"action": "go", "url": "http://127.0.0.1:8088/fixtures/content.html"},
150
+ {"action": "assert", "checks": [
151
+ {"kind": "url_contains", "text": "/does-not-exist"}
152
+ ]},
153
+ {"action": "go", "url": "http://127.0.0.1:8088/fixtures/form.html"}
160
154
  ]'
161
155
  expected:
162
156
  exit_code: 1
@@ -177,7 +171,7 @@ test_cases:
177
171
  # different dimensions (768×654 vs 765×672 observed), making the
178
172
  # pixel-diff in tc007 spuriously fail. Mirrors scripts/smoke-test.sh.
179
173
  - "vibium --headless viewport 1280 720"
180
- - "vibium --headless go https://httpbin.org/html"
174
+ - "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
181
175
  - "rm -rf .aqe/visual-baselines/eval_httpbin_html*"
182
176
  command: |
183
177
  node .claude/skills/qe-browser/scripts/visual-diff.js \
@@ -195,7 +189,7 @@ test_cases:
195
189
  input:
196
190
  setup:
197
191
  - "vibium --headless viewport 1280 720"
198
- - "vibium --headless go https://httpbin.org/html"
192
+ - "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
199
193
  command: |
200
194
  node .claude/skills/qe-browser/scripts/visual-diff.js \
201
195
  --name eval_httpbin_html --threshold 0.02
@@ -212,7 +206,7 @@ test_cases:
212
206
  priority: critical
213
207
  input:
214
208
  setup:
215
- - "vibium --headless go https://httpbin.org/html"
209
+ - "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
216
210
  command: |
217
211
  node .claude/skills/qe-browser/scripts/check-injection.js --include-hidden
218
212
  expected:
@@ -221,15 +215,11 @@ test_cases:
221
215
  ".status": "success"
222
216
  ".output.checkInjection.severity": "none"
223
217
 
224
- # GAP: the "poisoned-page detected with severity>=high" contract needs a
225
- # local fixture (fixtures/injection-poisoned.html) served by
226
- # fixtures/serve-skills.js. That's out of scope for this yaml — we keep
227
- # CommandEvalRunner dependency-free so it can run anywhere httpbin.org
228
- # is reachable. Coverage of the high-severity path is currently
218
+ # The "poisoned-page detected with severity>=high" contract is currently
219
+ # asserted outside this command suite. Coverage of the high-severity path is
229
220
  # only asserted by unit tests on check-injection.js (see
230
221
  # tests/unit/scripts/qe-browser-check-injection.test.ts). Follow-up:
231
- # either teach CommandEvalRunner to spawn the fixture server, or add a
232
- # tc009 to scripts/smoke-test.sh that starts/stops it out of band.
222
+ # add tc009 against fixtures/injection-poisoned.html.
233
223
 
234
224
  # -------- intent-score.js --------
235
225
  - id: tc010_intent_submit_form_on_httpbin
@@ -238,7 +228,7 @@ test_cases:
238
228
  priority: critical
239
229
  input:
240
230
  setup:
241
- - "vibium --headless go https://httpbin.org/forms/post"
231
+ - "vibium --headless go http://127.0.0.1:8088/fixtures/form.html"
242
232
  command: |
243
233
  node .claude/skills/qe-browser/scripts/intent-score.js \
244
234
  --intent submit_form
@@ -255,7 +245,7 @@ test_cases:
255
245
  priority: medium
256
246
  input:
257
247
  setup:
258
- - "vibium --headless go https://httpbin.org/html"
248
+ - "vibium --headless go http://127.0.0.1:8088/fixtures/content.html"
259
249
  command: |
260
250
  node .claude/skills/qe-browser/scripts/intent-score.js --intent fill_email
261
251
  expected:
@@ -270,5 +260,4 @@ validation:
270
260
  notes: |
271
261
  Evaluation assumes:
272
262
  - `vibium` v26.3.x+ is on PATH (from `aqe init` or `npm install -g vibium`)
273
- - Network access to httpbin.org (public, stable)
274
- - Local fixtures server running on :8088 (started in setup.local_docs_server)
263
+ - Local fixtures server running on 127.0.0.1:8088
@@ -74,6 +74,31 @@ const POISONED_HTML = `<!doctype html>
74
74
  </body>
75
75
  </html>`;
76
76
 
77
+ const CONTENT_HTML = `<!doctype html>
78
+ <html lang="en">
79
+ <head><meta charset="utf-8"><title>QE Browser Content Fixture</title></head>
80
+ <body>
81
+ <main>
82
+ <h1>QE Browser Content Fixture</h1>
83
+ <p>This deterministic page exercises browser assertions and visual comparisons.</p>
84
+ </main>
85
+ </body>
86
+ </html>`;
87
+
88
+ const FORM_HTML = `<!doctype html>
89
+ <html lang="en">
90
+ <head><meta charset="utf-8"><title>QE Browser Form Fixture</title></head>
91
+ <body>
92
+ <main>
93
+ <h1>Contact form</h1>
94
+ <form method="post" action="/fixtures/form.html">
95
+ <label>Email <input id="email" name="email" type="email" autocomplete="email"></label>
96
+ <button type="submit">Submit</button>
97
+ </form>
98
+ </main>
99
+ </body>
100
+ </html>`;
101
+
77
102
  function notFound(res, message) {
78
103
  res.writeHead(404, { 'Content-Type': 'text/plain; charset=utf-8' });
79
104
  res.end(`404 Not Found: ${message}\n`);
@@ -95,6 +120,18 @@ function serve(req, res) {
95
120
  return;
96
121
  }
97
122
 
123
+ if (pathname === '/fixtures/content.html') {
124
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
125
+ res.end(CONTENT_HTML);
126
+ return;
127
+ }
128
+
129
+ if (pathname === '/fixtures/form.html') {
130
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
131
+ res.end(FORM_HTML);
132
+ return;
133
+ }
134
+
98
135
  // Rewrite /foo/SKILL.md.html → /foo/SKILL.md (or similar) and serve wrapped.
99
136
  if (pathname.endsWith('.html')) {
100
137
  const mdPath = pathname.replace(/\.html$/, '');
@@ -292,7 +292,7 @@ function readInlineOrFile(value) {
292
292
  // "we couldn't run the test because the browser engine isn't installed."
293
293
  function emit(env) {
294
294
  process.stdout.write(`${JSON.stringify(env, null, 2)}\n`);
295
- if (env.status === 'success') return 0;
295
+ if (env.status === 'success' || env.status === 'partial') return 0;
296
296
  if (env.status === 'skipped') return 2;
297
297
  return 1;
298
298
  }
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # qe-browser smoke test (bash mirror of evals/qe-browser.yaml)
3
3
  #
4
- # Runs each helper script against pinned public fixtures (httpbin.org) and
4
+ # Runs each helper script against deterministic local fixtures and
5
5
  # verifies the output structure. Gates PR-reopen per ADR-091 Phase 3.
6
6
  #
7
7
  # RELATIONSHIP TO evals/qe-browser.yaml
@@ -24,16 +24,25 @@
24
24
  # 2 — vibium binary not on PATH (precondition unmet)
25
25
  #
26
26
  # Per feedback_no_unverified_failure_modes.md, this is the script we
27
- # actually run, not just write. Per feedback_synthetic_fixtures_dont_count,
28
- # all fixtures are pinned public endpoints (httpbin.org) no synthetic
29
- # stubs, no inline HTML.
27
+ # actually run, not just write. The fixture pages are maintained with the
28
+ # skill and served only on loopback, removing public-service rate limits.
30
29
 
31
30
  set -uo pipefail
32
31
 
33
32
  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
34
33
  SKILL_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
35
34
  WORK_DIR="$(mktemp -d)"
36
- trap 'rm -rf "$WORK_DIR"' EXIT
35
+ FIXTURE_PORT="${QE_BROWSER_FIXTURE_PORT:-8088}"
36
+ FIXTURE_URL="${QE_BROWSER_FIXTURE_URL:-http://127.0.0.1:${FIXTURE_PORT}}"
37
+ FIXTURE_PID=""
38
+
39
+ cleanup() {
40
+ if [ -n "$FIXTURE_PID" ]; then
41
+ kill "$FIXTURE_PID" >/dev/null 2>&1 || true
42
+ fi
43
+ rm -rf "$WORK_DIR"
44
+ }
45
+ trap cleanup EXIT
37
46
 
38
47
  GREEN='\033[0;32m'
39
48
  RED='\033[0;31m'
@@ -57,6 +66,28 @@ if ! command -v vibium >/dev/null 2>&1; then
57
66
  exit 2
58
67
  fi
59
68
 
69
+ if ! curl --silent --fail "$FIXTURE_URL/fixtures/content.html" >/dev/null 2>&1; then
70
+ QE_BROWSER_FIXTURE_PORT="$FIXTURE_PORT" \
71
+ node "$SKILL_DIR/fixtures/serve-skills.js" >"$WORK_DIR/fixture-server.log" 2>&1 &
72
+ FIXTURE_PID=$!
73
+ fixture_ready=0
74
+ for _attempt in 1 2 3 4 5; do
75
+ if curl --silent --fail "$FIXTURE_URL/fixtures/content.html" >/dev/null 2>&1; then
76
+ fixture_ready=1
77
+ break
78
+ fi
79
+ sleep 1
80
+ done
81
+ if [ "$fixture_ready" != "1" ]; then
82
+ cat "$WORK_DIR/fixture-server.log" >&2
83
+ echo -e "${RED}qe-browser fixture server did not become ready${NC}" >&2
84
+ exit 1
85
+ fi
86
+ fi
87
+
88
+ CONTENT_URL="$FIXTURE_URL/fixtures/content.html"
89
+ FORM_URL="$FIXTURE_URL/fixtures/form.html"
90
+
60
91
  VIBIUM_VERSION=$(vibium --version 2>&1 | head -1)
61
92
  echo "Smoke testing against $VIBIUM_VERSION"
62
93
  echo "Skill dir: $SKILL_DIR"
@@ -64,29 +95,29 @@ echo "Work dir: $WORK_DIR"
64
95
  echo ""
65
96
 
66
97
  # ---------------------------------------------------------------------------
67
- # tc001 — assert.js url_contains against pinned httpbin form
98
+ # tc001 — assert.js url_contains against the local form fixture
68
99
  # ---------------------------------------------------------------------------
69
- vibium --headless go https://httpbin.org/forms/post >/dev/null 2>&1 || true
100
+ vibium --headless go "$FORM_URL" >/dev/null 2>&1 || true
70
101
  RESULT=$(node "$SKILL_DIR/scripts/assert.js" --checks \
71
- '[{"kind": "url_contains", "text": "httpbin.org/forms"}]' 2>&1)
102
+ '[{"kind": "url_contains", "text": "/fixtures/form.html"}]' 2>&1)
72
103
  EXIT=$?
73
104
  if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"status": "success"'; then
74
- ok "tc001 url_contains on httpbin form"
105
+ ok "tc001 url_contains on local form"
75
106
  else
76
- bad "tc001 url_contains on httpbin form" "exit=$EXIT, result=$RESULT"
107
+ bad "tc001 url_contains on local form" "exit=$EXIT, result=$RESULT"
77
108
  fi
78
109
 
79
110
  # ---------------------------------------------------------------------------
80
- # tc002 — assert.js selector_visible against pinned httpbin /html
111
+ # tc002 — assert.js selector_visible against the local content fixture
81
112
  # ---------------------------------------------------------------------------
82
- vibium --headless go https://httpbin.org/html >/dev/null 2>&1 || true
113
+ vibium --headless go "$CONTENT_URL" >/dev/null 2>&1 || true
83
114
  RESULT=$(node "$SKILL_DIR/scripts/assert.js" --checks \
84
115
  '[{"kind": "selector_visible", "selector": "h1"}]' 2>&1)
85
116
  EXIT=$?
86
117
  if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"passed": true'; then
87
- ok "tc002 selector_visible h1 on httpbin /html"
118
+ ok "tc002 selector_visible h1 on local content"
88
119
  else
89
- bad "tc002 selector_visible h1 on httpbin /html" "exit=$EXIT"
120
+ bad "tc002 selector_visible h1 on local content" "exit=$EXIT"
90
121
  fi
91
122
 
92
123
  # ---------------------------------------------------------------------------
@@ -105,7 +136,7 @@ fi
105
136
  # tc004 — batch.js navigate + wait + assert in one call
106
137
  # ---------------------------------------------------------------------------
107
138
  RESULT=$(node "$SKILL_DIR/scripts/batch.js" --steps \
108
- '[{"action":"go","url":"https://httpbin.org/html"},{"action":"wait_load"},{"action":"assert","checks":[{"kind":"url_contains","text":"/html"}]}]' \
139
+ "[{\"action\":\"go\",\"url\":\"$CONTENT_URL\"},{\"action\":\"wait_load\"},{\"action\":\"assert\",\"checks\":[{\"kind\":\"url_contains\",\"text\":\"/fixtures/content.html\"}]}]" \
109
140
  --summary-only 2>&1)
110
141
  EXIT=$?
111
142
  if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"passedSteps": 3'; then
@@ -118,7 +149,7 @@ fi
118
149
  # tc005 — batch.js stops on failure
119
150
  # ---------------------------------------------------------------------------
120
151
  RESULT=$(node "$SKILL_DIR/scripts/batch.js" --steps \
121
- '[{"action":"go","url":"https://httpbin.org/html"},{"action":"click","selector":"#does-not-exist-selector"},{"action":"go","url":"https://httpbin.org/forms/post"}]' 2>&1)
152
+ "[{\"action\":\"go\",\"url\":\"$CONTENT_URL\"},{\"action\":\"assert\",\"checks\":[{\"kind\":\"url_contains\",\"text\":\"/does-not-exist\"}]},{\"action\":\"go\",\"url\":\"$FORM_URL\"}]" 2>&1)
122
153
  EXIT=$?
123
154
  if [ "$EXIT" = "1" ] && echo "$RESULT" | grep -q '"failedStep"'; then
124
155
  ok "tc005 batch stops on first failure"
@@ -131,19 +162,19 @@ fi
131
162
  #
132
163
  # Set explicit viewport BEFORE screenshot so the two visual-diff runs have
133
164
  # the same dimensions. Without this the chromium headless window picks
134
- # whatever size it likes per run, and httpbin.org/html renders at different
165
+ # whatever size it likes per run, and pages may render at different
135
166
  # sizes between runs (768×654 vs 765×672 observed), making pixel-diff
136
167
  # spuriously fail. This is documented in references/assertion-kinds.md.
137
168
  # ---------------------------------------------------------------------------
138
169
  rm -rf "$PWD/.aqe/visual-baselines/smoke_test_baseline"*
139
170
  vibium --headless viewport 1280 720 >/dev/null 2>&1 || true
140
- vibium --headless go https://httpbin.org/html >/dev/null 2>&1 || true
171
+ vibium --headless go "$CONTENT_URL" >/dev/null 2>&1 || true
141
172
  RESULT=$(node "$SKILL_DIR/scripts/visual-diff.js" --name smoke_test_baseline 2>&1)
142
173
  EXIT=$?
143
174
  if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"baseline_created"'; then
144
175
  ok "tc006 visual-diff baseline created"
145
176
  else
146
- bad "tc006 visual-diff baseline created" "exit=$EXIT"
177
+ bad "tc006 visual-diff baseline created" "exit=$EXIT, result=$RESULT"
147
178
  fi
148
179
 
149
180
  # ---------------------------------------------------------------------------
@@ -157,13 +188,13 @@ EXIT=$?
157
188
  if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -qE '"(match|baseline_created)"'; then
158
189
  ok "tc007 visual-diff second run matches"
159
190
  else
160
- bad "tc007 visual-diff second run matches" "exit=$EXIT"
191
+ bad "tc007 visual-diff second run matches" "exit=$EXIT, result=$RESULT"
161
192
  fi
162
193
 
163
194
  # ---------------------------------------------------------------------------
164
195
  # tc008 — check-injection.js clean page
165
196
  # ---------------------------------------------------------------------------
166
- vibium --headless go https://httpbin.org/html >/dev/null 2>&1 || true
197
+ vibium --headless go "$CONTENT_URL" >/dev/null 2>&1 || true
167
198
  RESULT=$(node "$SKILL_DIR/scripts/check-injection.js" --include-hidden 2>&1)
168
199
  EXIT=$?
169
200
  if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"severity": "none"'; then
@@ -173,15 +204,15 @@ else
173
204
  fi
174
205
 
175
206
  # ---------------------------------------------------------------------------
176
- # tc010 — intent-score.js submit_form on pinned httpbin form
207
+ # tc010 — intent-score.js submit_form on the local form fixture
177
208
  # ---------------------------------------------------------------------------
178
- vibium --headless go https://httpbin.org/forms/post >/dev/null 2>&1 || true
209
+ vibium --headless go "$FORM_URL" >/dev/null 2>&1 || true
179
210
  RESULT=$(node "$SKILL_DIR/scripts/intent-score.js" --intent submit_form 2>&1)
180
211
  EXIT=$?
181
212
  if [ "$EXIT" = "0" ] && echo "$RESULT" | grep -q '"intent": "submit_form"'; then
182
- ok "tc010 intent-score submit_form on httpbin form"
213
+ ok "tc010 intent-score submit_form on local form"
183
214
  else
184
- bad "tc010 intent-score submit_form on httpbin form" "exit=$EXIT"
215
+ bad "tc010 intent-score submit_form on local form" "exit=$EXIT"
185
216
  fi
186
217
 
187
218
  # ---------------------------------------------------------------------------
@@ -45,11 +45,10 @@ function ensureDir(dir) {
45
45
  fs.mkdirSync(dir, { recursive: true });
46
46
  }
47
47
 
48
- // Vibium screenshot quirks (verified against v26.3.18 on 2026-04-09):
49
- // 1. `vibium screenshot -o <path>` IGNORES the directory in <path>.
50
- // Only the basename is used, and the file is saved to
51
- // `~/Pictures/Vibium/<basename>`. We work around this by reading from
52
- // Vibium's actual output dir and copying to the requested location.
48
+ // Vibium screenshot output changed across the supported 26.x releases.
49
+ // Older releases ignore the directory passed to `-o` and save under
50
+ // `~/Pictures/Vibium`; newer releases may honor the requested path. Accept
51
+ // both behaviors so AQE init's compatible-version range stays usable.
53
52
  // 2. `--selector` flag does NOT exist on `vibium screenshot`. Selector-
54
53
  // scoped baselines are not supported in v26.3.x. We surface a clear
55
54
  // error if a caller passes one. Future Vibium versions may add it.
@@ -69,21 +68,31 @@ function captureScreenshot(selector, outputPath) {
69
68
  );
70
69
  }
71
70
  const basename = path.basename(outputPath);
72
- const args = ['screenshot', '-o', basename, '--full-page'];
71
+ const candidates = [
72
+ outputPath,
73
+ path.resolve(process.cwd(), basename),
74
+ path.join(vibiumPicturesDir(), basename),
75
+ ];
76
+ for (const candidate of candidates) {
77
+ fs.rmSync(candidate, { force: true });
78
+ }
79
+ const args = ['screenshot', '-o', outputPath, '--full-page'];
73
80
  const res = vibium(args);
74
81
  if (res.status !== 0) {
75
82
  throw new Error(`vibium screenshot failed: ${res.stderr.trim() || res.stdout.trim()}`);
76
83
  }
77
- // Vibium wrote the file to ~/Pictures/Vibium/<basename>, not outputPath.
78
- // Copy it to where the caller asked. Use copy-then-unlink so we leave
79
- // Vibium's own dir clean for the next run.
80
- const vibiumPath = path.join(vibiumPicturesDir(), basename);
81
- if (!fs.existsSync(vibiumPath)) {
82
- throw new Error(`screenshot output not created at ${vibiumPath} (vibium said: ${res.stdout.trim()})`);
84
+ const screenshotPath = candidates.find((candidate) => fs.existsSync(candidate));
85
+ if (!screenshotPath) {
86
+ throw new Error(
87
+ `screenshot output not created at any supported path (${candidates.join(', ')}; ` +
88
+ `vibium said: ${res.stdout.trim()})`
89
+ );
90
+ }
91
+ if (screenshotPath !== outputPath) {
92
+ fs.mkdirSync(path.dirname(outputPath), { recursive: true });
93
+ fs.copyFileSync(screenshotPath, outputPath);
94
+ fs.unlinkSync(screenshotPath);
83
95
  }
84
- fs.mkdirSync(path.dirname(outputPath), { recursive: true });
85
- fs.copyFileSync(vibiumPath, outputPath);
86
- fs.unlinkSync(vibiumPath);
87
96
  return outputPath;
88
97
  }
89
98
 
@@ -940,7 +940,7 @@
940
940
  },
941
941
  "metadata": {
942
942
  "generatedBy": "Agentic QE Fleet",
943
- "fleetVersion": "3.14.0",
943
+ "fleetVersion": "3.14.2",
944
944
  "manifestVersion": "1.4.0",
945
945
  "lastUpdated": "2026-04-13T00:00:00.000Z",
946
946
  "contributors": [