agentic-qe 3.15.12 → 3.15.13

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 (467) hide show
  1. package/.claude/skills/skills-manifest.json +1 -1
  2. package/CHANGELOG.md +118 -0
  3. package/assets/skills/skills-manifest.json +1 -1
  4. package/dist/cli/bundle.js +6 -6
  5. package/dist/cli/chunks/adapter-KCQDVYY2.js +2 -0
  6. package/dist/cli/chunks/{agent-booster-wasm-5VZCKTIJ.js → agent-booster-wasm-6RRQWMNE.js} +2 -2
  7. package/dist/cli/chunks/{agent-handler-K3C6CQCD.js → agent-handler-AOH6TV7W.js} +2 -2
  8. package/dist/cli/chunks/{agent-memory-branch-NVFQ25WS.js → agent-memory-branch-2P54SF5N.js} +2 -2
  9. package/dist/cli/chunks/aqe-learning-engine-SAQOHSGN.js +2 -0
  10. package/dist/cli/chunks/{arena-QGWIJADQ.js → arena-NSVFCAF5.js} +2 -2
  11. package/dist/cli/chunks/{arena-TSZVDSXS.js → arena-X6MOGQHA.js} +4 -4
  12. package/dist/cli/chunks/{audit-KIEE2SHJ.js → audit-27DJLQNM.js} +3 -3
  13. package/dist/cli/chunks/base-WCACU3FN.js +2 -0
  14. package/dist/cli/chunks/{better-sqlite3-BNB32NW3.js → better-sqlite3-BU5GXILS.js} +2 -2
  15. package/dist/cli/chunks/{brain-handler-MPC5SPYI.js → brain-handler-GTQNHHZS.js} +3 -3
  16. package/dist/cli/chunks/{branch-enumerator-LZ7UXKAY.js → branch-enumerator-5CLULOCU.js} +2 -2
  17. package/dist/cli/chunks/{browser-VDHAW4RK.js → browser-R4DMU3LN.js} +2 -2
  18. package/dist/cli/chunks/browser-workflow-G6IASEAP.js +2 -0
  19. package/dist/cli/chunks/{chunk-QUJJYTJH.js → chunk-2G7TVT6W.js} +2 -2
  20. package/dist/cli/chunks/{chunk-FAGKBOX2.js → chunk-32ZMWEP3.js} +2 -2
  21. package/dist/cli/chunks/{chunk-FNUFTWEO.js → chunk-3AN5TNGD.js} +3 -3
  22. package/dist/cli/chunks/{chunk-JOWUS2X5.js → chunk-3LJ7LQMV.js} +1 -1
  23. package/dist/cli/chunks/{chunk-O4QJMANM.js → chunk-3QZEGE67.js} +1 -1
  24. package/dist/cli/chunks/{chunk-ICKUINKD.js → chunk-3RZV5DGO.js} +2 -2
  25. package/dist/cli/chunks/{chunk-W4II6SIH.js → chunk-3Y2ROSCL.js} +2 -2
  26. package/dist/cli/chunks/{chunk-L7NGKANW.js → chunk-3Y7TJFHU.js} +2 -2
  27. package/dist/cli/chunks/{chunk-UUZZXHUF.js → chunk-3YNLWPBF.js} +2 -2
  28. package/dist/cli/chunks/{chunk-JR6CUKAI.js → chunk-42J34YG4.js} +2 -2
  29. package/dist/cli/chunks/{chunk-65TH6RPD.js → chunk-4OVC4RIL.js} +1 -1
  30. package/dist/cli/chunks/{chunk-DRCBRUGN.js → chunk-526QYFJU.js} +2 -2
  31. package/dist/cli/chunks/{chunk-MCPXNUDK.js → chunk-5FKWCZNF.js} +2 -2
  32. package/dist/cli/chunks/{chunk-NX4BCSOZ.js → chunk-5K26BEYB.js} +2 -2
  33. package/dist/cli/chunks/{chunk-MCPEC6OO.js → chunk-5MDERQH3.js} +1 -1
  34. package/dist/cli/chunks/{chunk-7JFDLL2F.js → chunk-5VMAV6T6.js} +1 -1
  35. package/dist/cli/chunks/{chunk-5TAEW5OV.js → chunk-5ZGM3RMH.js} +1 -1
  36. package/dist/cli/chunks/{chunk-SG2TX72G.js → chunk-6KATY3KS.js} +2 -2
  37. package/dist/cli/chunks/{chunk-KA5SHLMW.js → chunk-6Z7PRBSG.js} +2 -2
  38. package/dist/cli/chunks/{chunk-LFBA735S.js → chunk-72ASBE35.js} +3 -3
  39. package/dist/cli/chunks/{chunk-TOWOJGEI.js → chunk-756CGMEH.js} +1 -1
  40. package/dist/cli/chunks/{chunk-IVTQF55W.js → chunk-75RDHBAX.js} +3 -3
  41. package/dist/cli/chunks/{chunk-66PXR3NI.js → chunk-7CMTY45A.js} +2 -2
  42. package/dist/cli/chunks/{chunk-WLRU6ESI.js → chunk-7JUC2MVZ.js} +2 -2
  43. package/dist/cli/chunks/{chunk-SBHM5X2S.js → chunk-7NA7JXNB.js} +2 -2
  44. package/dist/cli/chunks/{chunk-HZBXJFGN.js → chunk-7PLIEBY7.js} +2 -2
  45. package/dist/cli/chunks/{chunk-2ASQRBK2.js → chunk-7YTGHGK4.js} +2 -2
  46. package/dist/cli/chunks/{chunk-SQVZ3TRU.js → chunk-A64JFBWI.js} +2 -2
  47. package/dist/cli/chunks/{chunk-2PPSS4JD.js → chunk-AL6FBH3E.js} +2 -2
  48. package/dist/cli/chunks/{chunk-3IU4LDZR.js → chunk-AQSVJNEH.js} +2 -2
  49. package/dist/cli/chunks/{chunk-C74M4WUI.js → chunk-ARJW4I2O.js} +2 -2
  50. package/dist/cli/chunks/{chunk-VF7FTD64.js → chunk-ASQYASNV.js} +1 -1
  51. package/dist/cli/chunks/{chunk-HLGFHHWV.js → chunk-BEGR4D6N.js} +2 -2
  52. package/dist/cli/chunks/{chunk-EN7GRVEQ.js → chunk-BK577VL7.js} +2 -2
  53. package/dist/cli/chunks/{chunk-KGA7VAI4.js → chunk-BLSLEVDI.js} +2 -2
  54. package/dist/cli/chunks/{chunk-HM3LSFTY.js → chunk-BTVEYBW2.js} +2 -2
  55. package/dist/cli/chunks/{chunk-J7Y7ZBIT.js → chunk-C6JTLKG7.js} +5 -5
  56. package/dist/cli/chunks/{chunk-PTBOLBM4.js → chunk-C7JM7CD3.js} +2 -2
  57. package/dist/cli/chunks/{chunk-IL7GQNNE.js → chunk-CCMKSHAT.js} +2 -2
  58. package/dist/cli/chunks/{chunk-23PQF7NN.js → chunk-CE7B5LU7.js} +1 -1
  59. package/dist/cli/chunks/{chunk-BMG2JLSQ.js → chunk-CM4LSLKR.js} +2 -2
  60. package/dist/cli/chunks/chunk-CRWPZT74.js +62 -0
  61. package/dist/cli/chunks/{chunk-4HWUECVD.js → chunk-CT6SAVXQ.js} +2 -2
  62. package/dist/cli/chunks/chunk-CV77DMDQ.js +2 -0
  63. package/dist/cli/chunks/{chunk-CU36D7TN.js → chunk-DFUASIKA.js} +2 -2
  64. package/dist/cli/chunks/{chunk-T4EN5VVK.js → chunk-DLD7RUZ4.js} +2 -2
  65. package/dist/cli/chunks/{chunk-IA55PFLG.js → chunk-DNDL7SOS.js} +2 -2
  66. package/dist/cli/chunks/{chunk-6QRI3JVE.js → chunk-DVGRPK7A.js} +2 -2
  67. package/dist/cli/chunks/{chunk-UREDS662.js → chunk-E56B6IDX.js} +2 -2
  68. package/dist/cli/chunks/{chunk-ZGROHCOW.js → chunk-E7CLYGS7.js} +1 -1
  69. package/dist/cli/chunks/{chunk-YNVEDFPQ.js → chunk-EXGMJFAT.js} +1 -1
  70. package/dist/cli/chunks/{chunk-JRYWLOBD.js → chunk-F3YS57NF.js} +2 -2
  71. package/dist/cli/chunks/{chunk-ZYOYR3UR.js → chunk-FZ76G4QJ.js} +1 -1
  72. package/dist/cli/chunks/{chunk-UIKQPO4Y.js → chunk-G2Q66Z23.js} +2 -2
  73. package/dist/cli/chunks/{chunk-5S4UIDFK.js → chunk-G6WDYBLQ.js} +1 -1
  74. package/dist/cli/chunks/{chunk-4SA7M34P.js → chunk-G77ERMUD.js} +1 -1
  75. package/dist/cli/chunks/{chunk-ADUAJIAU.js → chunk-GB6HBNH2.js} +2 -2
  76. package/dist/cli/chunks/{chunk-IETBWYHW.js → chunk-GHM6MQNK.js} +2 -2
  77. package/dist/cli/chunks/{chunk-QWG3SILX.js → chunk-GHY6Z6KO.js} +5 -5
  78. package/dist/cli/chunks/{chunk-AJEXPFAB.js → chunk-GII6UM3F.js} +1 -1
  79. package/dist/cli/chunks/{chunk-SDRJJUPO.js → chunk-GU5HNCWI.js} +1 -1
  80. package/dist/cli/chunks/{chunk-ULCW6IVQ.js → chunk-H4GG2NLO.js} +2 -2
  81. package/dist/cli/chunks/{chunk-7TA5MUPW.js → chunk-H4H2YSFH.js} +1 -1
  82. package/dist/cli/chunks/{chunk-5A66EGEW.js → chunk-HD7YIFOI.js} +2 -2
  83. package/dist/cli/chunks/{chunk-CDA5Z74H.js → chunk-HOAJUIBQ.js} +2 -2
  84. package/dist/cli/chunks/{chunk-4KUOYDY2.js → chunk-HQZGPJYG.js} +2 -2
  85. package/dist/cli/chunks/{chunk-G3AABG4Q.js → chunk-HZ5NXFXH.js} +2 -2
  86. package/dist/cli/chunks/{chunk-U6IXYQO4.js → chunk-I3C7JOXC.js} +2 -2
  87. package/dist/cli/chunks/{chunk-MAJXZYGK.js → chunk-IC3TQEOA.js} +1 -1
  88. package/dist/cli/chunks/{chunk-RYHG3I7J.js → chunk-IJUHSJ2U.js} +2 -2
  89. package/dist/cli/chunks/{chunk-DZGPUGUG.js → chunk-J2ZIFFM6.js} +2 -2
  90. package/dist/cli/chunks/{chunk-NA3F6FEO.js → chunk-JGZ722G3.js} +2 -2
  91. package/dist/cli/chunks/{chunk-PX5OPXY6.js → chunk-JQGMW45H.js} +1 -1
  92. package/dist/cli/chunks/{chunk-WGTEZT7G.js → chunk-JRRXCODW.js} +2 -2
  93. package/dist/cli/chunks/{chunk-4Y6OEBJZ.js → chunk-K3TLLJMX.js} +1 -1
  94. package/dist/cli/chunks/{chunk-RCOLPF3B.js → chunk-K4CZA77U.js} +2 -2
  95. package/dist/cli/chunks/{chunk-YIDAXOUX.js → chunk-K65CGKLD.js} +2 -2
  96. package/dist/cli/chunks/{chunk-5ADXFUMO.js → chunk-KADFXPPN.js} +2 -2
  97. package/dist/cli/chunks/{chunk-P5E26N2X.js → chunk-KB56CPU4.js} +2 -2
  98. package/dist/cli/chunks/{chunk-YLKIXEPP.js → chunk-KCW47QR5.js} +1 -1
  99. package/dist/cli/chunks/{chunk-SPC4RBLF.js → chunk-KDNJ4F3P.js} +2 -2
  100. package/dist/cli/chunks/{chunk-P7UFJ6DO.js → chunk-KDVZND5Q.js} +1 -1
  101. package/dist/cli/chunks/{chunk-TLRHAMX5.js → chunk-KUAKV3IW.js} +1 -1
  102. package/dist/cli/chunks/{chunk-ZROAMFX2.js → chunk-KV4T4MXK.js} +2 -2
  103. package/dist/cli/chunks/{chunk-UZED4YZ5.js → chunk-KWYH3FI4.js} +1 -1
  104. package/dist/cli/chunks/{chunk-33I2ZP6E.js → chunk-LFJALJOA.js} +2 -2
  105. package/dist/cli/chunks/{chunk-TXEUVUMO.js → chunk-LL7LDPXS.js} +1 -1
  106. package/dist/cli/chunks/{chunk-W5HQIYQU.js → chunk-LUZNKJE6.js} +3 -3
  107. package/dist/cli/chunks/{chunk-GKFV6CUD.js → chunk-LWR3FV3Y.js} +2 -2
  108. package/dist/cli/chunks/{chunk-TVA5GRIU.js → chunk-LZYQHVD4.js} +2 -2
  109. package/dist/cli/chunks/{chunk-2JYUA27M.js → chunk-M6AAGIG7.js} +1 -1
  110. package/dist/cli/chunks/{chunk-PT2NXS43.js → chunk-MAMQA43L.js} +1 -1
  111. package/dist/cli/chunks/chunk-MB46UBGY.js +3 -0
  112. package/dist/cli/chunks/{chunk-ZPVGX4DI.js → chunk-MFW5HSG4.js} +2 -2
  113. package/dist/cli/chunks/{chunk-47RMGDG4.js → chunk-MGZ5FJUW.js} +2 -2
  114. package/dist/cli/chunks/{chunk-G24SWTAX.js → chunk-MVVB7C2E.js} +410 -410
  115. package/dist/cli/chunks/{chunk-XZOYKB22.js → chunk-N4CYAKOX.js} +2 -2
  116. package/dist/cli/chunks/{chunk-QCPVUNN3.js → chunk-NT4DBXSX.js} +2 -2
  117. package/dist/cli/chunks/{chunk-3EWQN37E.js → chunk-NU3W5WFT.js} +2 -2
  118. package/dist/cli/chunks/{chunk-VZBC6DP7.js → chunk-NURIILUB.js} +1 -1
  119. package/dist/cli/chunks/{chunk-6E6HB4N4.js → chunk-NW7IBHJA.js} +4 -4
  120. package/dist/cli/chunks/{chunk-K3A3NWT3.js → chunk-NZ3GUMB2.js} +2 -2
  121. package/dist/cli/chunks/{chunk-GJKZ7UQO.js → chunk-NZD4DPSU.js} +2 -2
  122. package/dist/cli/chunks/{chunk-7QEUHNKO.js → chunk-O6FGXMHD.js} +1 -1
  123. package/dist/cli/chunks/{chunk-YVJEUX3I.js → chunk-OCAEXYFA.js} +2 -2
  124. package/dist/cli/chunks/{chunk-BOSMELJX.js → chunk-OFACHK5O.js} +2 -2
  125. package/dist/cli/chunks/{chunk-PGSJBXTD.js → chunk-P7A4NKTZ.js} +2 -2
  126. package/dist/cli/chunks/{chunk-HSA5IGGW.js → chunk-PB6J6HAA.js} +2 -2
  127. package/dist/cli/chunks/{chunk-TGMXUZZC.js → chunk-PHP5UBT4.js} +2 -2
  128. package/dist/cli/chunks/{chunk-NV74SICL.js → chunk-PIDQVU3L.js} +2 -2
  129. package/dist/cli/chunks/{chunk-TSOQ2QLT.js → chunk-PSFSPGUD.js} +2 -2
  130. package/dist/cli/chunks/{chunk-4A76VPU4.js → chunk-PT4FMJPQ.js} +2 -2
  131. package/dist/cli/chunks/{chunk-U7ZHDGXG.js → chunk-Q3UDLV5Z.js} +1 -1
  132. package/dist/cli/chunks/{chunk-BYRCB5JT.js → chunk-QDEJ4CI2.js} +2 -2
  133. package/dist/cli/chunks/{chunk-CA5UNWQF.js → chunk-QPNG5ZN2.js} +2 -2
  134. package/dist/cli/chunks/{chunk-W7H55PY4.js → chunk-R7SYRCRP.js} +1 -1
  135. package/dist/cli/chunks/{chunk-4LWMAAWK.js → chunk-RF7HWBHN.js} +2 -2
  136. package/dist/cli/chunks/{chunk-MMEALJ4D.js → chunk-RFNW2LGD.js} +2 -2
  137. package/dist/cli/chunks/{chunk-UCSK2RMI.js → chunk-S5AZCIZS.js} +2 -2
  138. package/dist/cli/chunks/{chunk-JW5PDJ5O.js → chunk-SE4VNN4I.js} +3 -3
  139. package/dist/cli/chunks/{chunk-URSTP3WI.js → chunk-SG3NX7QE.js} +2 -2
  140. package/dist/cli/chunks/{chunk-N7O3PF6Y.js → chunk-SSU73QAX.js} +2 -2
  141. package/dist/cli/chunks/{chunk-7DNR4KKR.js → chunk-SVLQRAMF.js} +1 -1
  142. package/dist/cli/chunks/{chunk-BC4T6SCV.js → chunk-SYV2V3PL.js} +4 -4
  143. package/dist/cli/chunks/{chunk-4CB3QPZM.js → chunk-T3PGQFDI.js} +2 -2
  144. package/dist/cli/chunks/{chunk-OHVYINGM.js → chunk-TCBBNUBP.js} +3 -3
  145. package/dist/cli/chunks/{chunk-YWWMNTBF.js → chunk-TOQWL2ZF.js} +2 -2
  146. package/dist/cli/chunks/{chunk-SITL5YZV.js → chunk-TSQC2KKZ.js} +2 -2
  147. package/dist/cli/chunks/{chunk-YUA6ZKKY.js → chunk-TWDW32W2.js} +2 -2
  148. package/dist/cli/chunks/{chunk-SUX5XB2Z.js → chunk-TWJTK4CC.js} +2 -2
  149. package/dist/cli/chunks/{chunk-32UTHIY5.js → chunk-U2FUXDDJ.js} +3 -3
  150. package/dist/cli/chunks/{chunk-ENGL7FIJ.js → chunk-UDQSYWVF.js} +1 -1
  151. package/dist/cli/chunks/{chunk-7OEFBWAG.js → chunk-UOC3O6RP.js} +2 -2
  152. package/dist/cli/chunks/chunk-UT2VZ33P.js +2 -0
  153. package/dist/cli/chunks/{chunk-MYF5CNGV.js → chunk-UTRV7T2N.js} +2 -2
  154. package/dist/cli/chunks/{chunk-KJDI5CHX.js → chunk-UXZSUMEA.js} +2 -2
  155. package/dist/cli/chunks/{chunk-DAUEK66C.js → chunk-VRHRBAEM.js} +1 -1
  156. package/dist/cli/chunks/{chunk-FZJCBSN4.js → chunk-VRVMIPTM.js} +2 -2
  157. package/dist/cli/chunks/{chunk-26672ISV.js → chunk-VTDFVFST.js} +2 -2
  158. package/dist/cli/chunks/{chunk-WTAUF6O4.js → chunk-VTOBUZL6.js} +2 -2
  159. package/dist/cli/chunks/{chunk-4PU5GTZW.js → chunk-VU5TBX2V.js} +2 -2
  160. package/dist/cli/chunks/{chunk-C3YOVASQ.js → chunk-W26B7ERY.js} +1 -1
  161. package/dist/cli/chunks/{chunk-CPIBIR3X.js → chunk-W2QWSQVE.js} +2 -2
  162. package/dist/cli/chunks/{chunk-L3PV7VXK.js → chunk-W3INMZZ6.js} +1 -1
  163. package/dist/cli/chunks/{chunk-5Z23ZMXZ.js → chunk-W3PPFHI5.js} +54 -54
  164. package/dist/cli/chunks/{chunk-NVRYELCY.js → chunk-WKGTGOYS.js} +3 -3
  165. package/dist/cli/chunks/{chunk-35NW676P.js → chunk-WNQS4WTS.js} +2 -2
  166. package/dist/cli/chunks/{chunk-O3IM4WRZ.js → chunk-WO274FRI.js} +2 -2
  167. package/dist/cli/chunks/{chunk-35MIUSXQ.js → chunk-WOCGL4QP.js} +2 -2
  168. package/dist/cli/chunks/{chunk-EF6OERRR.js → chunk-WQL7WCIZ.js} +1 -1
  169. package/dist/cli/chunks/{chunk-INZARYUD.js → chunk-X2Z7F4EU.js} +2 -2
  170. package/dist/cli/chunks/{chunk-2E2QO44T.js → chunk-X7N2JF2X.js} +2 -2
  171. package/dist/cli/chunks/{chunk-2IVE5AR3.js → chunk-XEAEYC6Y.js} +1 -1
  172. package/dist/cli/chunks/{chunk-IPA7K556.js → chunk-XNBOGCF3.js} +2 -2
  173. package/dist/cli/chunks/{chunk-A2JCRXTK.js → chunk-XPRVF4YE.js} +2 -2
  174. package/dist/cli/chunks/{chunk-VUR5THML.js → chunk-YBQH2VOP.js} +2 -2
  175. package/dist/cli/chunks/{chunk-A5Y7DAVQ.js → chunk-YQFLQE53.js} +2 -2
  176. package/dist/cli/chunks/{chunk-JGIJPDGD.js → chunk-YSZ5OE3Z.js} +2 -2
  177. package/dist/cli/chunks/{chunk-JNXK47OL.js → chunk-YXRASAPI.js} +2 -2
  178. package/dist/cli/chunks/{chunk-MYUMJ2ZI.js → chunk-YZEXYO4W.js} +1 -1
  179. package/dist/cli/chunks/{chunk-NNBQZR73.js → chunk-YZWBNBTW.js} +2 -2
  180. package/dist/cli/chunks/{chunk-WDEXOLK2.js → chunk-ZAKQLAHT.js} +1 -1
  181. package/dist/cli/chunks/{ci-BZNWW3I3.js → ci-ENOASTYB.js} +2 -2
  182. package/dist/cli/chunks/{ci-config-LOHNXOKV.js → ci-config-B26OXHQM.js} +2 -2
  183. package/dist/cli/chunks/{ci-output-LCOQBSJL.js → ci-output-JTCLLNOQ.js} +2 -2
  184. package/dist/cli/chunks/{circuit-breaker-7LRXTLFE.js → circuit-breaker-23JMFNM5.js} +2 -2
  185. package/dist/cli/chunks/{claude-flow-setup-HBU4VWC3.js → claude-flow-setup-ON6L462G.js} +2 -2
  186. package/dist/cli/chunks/client-TV3V2YZ5.js +2 -0
  187. package/dist/cli/chunks/{cline-installer-CO6MLH6X.js → cline-installer-OWQ4D2FQ.js} +2 -2
  188. package/dist/cli/chunks/{code-SIXBS6JM.js → code-2ZRL7SEU.js} +19 -18
  189. package/dist/cli/chunks/{code-index-extractor-GWJKZ2IQ.js → code-index-extractor-JXSQVM67.js} +2 -2
  190. package/dist/cli/chunks/{codex-installer-6NINVWXJ.js → codex-installer-7LXZYBSQ.js} +2 -2
  191. package/dist/cli/chunks/{completions-7VIX3GML.js → completions-C2LR623C.js} +2 -2
  192. package/dist/cli/chunks/{complexity-analyzer-FBQR6ZP2.js → complexity-analyzer-TGQLHCYJ.js} +2 -2
  193. package/dist/cli/chunks/{continuedev-installer-VA7RIXW5.js → continuedev-installer-RUGD24D2.js} +2 -2
  194. package/dist/cli/chunks/{copilot-installer-4QEBC4MU.js → copilot-installer-ZLFVLEJP.js} +2 -2
  195. package/dist/cli/chunks/core-handlers-PZT4OLWR.js +2 -0
  196. package/dist/cli/chunks/{cost-tracker-GRYKHPWL.js → cost-tracker-RT4QL745.js} +2 -2
  197. package/dist/cli/chunks/{coverage-USPMNKOU.js → coverage-NV3C4IMM.js} +3 -3
  198. package/dist/cli/chunks/cross-domain-router-QOFCZ7G4.js +2 -0
  199. package/dist/cli/chunks/{cursor-installer-ZXIPSZVH.js → cursor-installer-LJKLNFF6.js} +2 -2
  200. package/dist/cli/chunks/{daemon-D7F3RGI5.js → daemon-BMDXCQT5.js} +3 -3
  201. package/dist/cli/chunks/{daemon-N2VRHPSJ.js → daemon-FBH3IRYN.js} +4 -4
  202. package/dist/cli/chunks/{dag-attention-scheduler-NL6BA7BY.js → dag-attention-scheduler-JGDED55I.js} +2 -2
  203. package/dist/cli/chunks/{detect-XC2HCIIT.js → detect-SZIHIVCJ.js} +2 -2
  204. package/dist/cli/chunks/{dist-node-A3Y26MEI.js → dist-node-FV3KWXQ6.js} +2 -2
  205. package/dist/cli/chunks/{domain-handler-WV6SFXRB.js → domain-handler-GI5JWQOV.js} +2 -2
  206. package/dist/cli/chunks/{domain-plugins-KJIF6Z2B.js → domain-plugins-BUWY36TL.js} +2 -2
  207. package/dist/cli/chunks/domain-transfer-GCY7W5DA.js +2 -0
  208. package/dist/cli/chunks/dream-TRFBGDSQ.js +2 -0
  209. package/dist/cli/chunks/{embed-and-insert-pattern-PA3Y4KGO.js → embed-and-insert-pattern-GPRR3ZGD.js} +2 -2
  210. package/dist/cli/chunks/{eval-YGEZNUVE.js → eval-XPB3IGAP.js} +2 -2
  211. package/dist/cli/chunks/{experience-capture-middleware-D4T7NW6B.js → experience-capture-middleware-2E554UB3.js} +3 -3
  212. package/dist/cli/chunks/{fast-paths-6JYK7RYQ.js → fast-paths-ZSMWZPUC.js} +2 -2
  213. package/dist/cli/chunks/{feature-flags-RBH2GDSR.js → feature-flags-GIWVDVVC.js} +2 -2
  214. package/dist/cli/chunks/{feature-flags-DKXMDVPE.js → feature-flags-N7EOGE5P.js} +2 -2
  215. package/dist/cli/chunks/file-discovery-WCKGMSPZ.js +2 -0
  216. package/dist/cli/chunks/fleet-HCHDOUCX.js +44 -0
  217. package/dist/cli/chunks/{gnn-wrapper-MV54UC4C.js → gnn-wrapper-CZNCNXXZ.js} +2 -2
  218. package/dist/cli/chunks/{heartbeat-handler-7DKMVQQH.js → heartbeat-handler-6YUIF2YQ.js} +4 -4
  219. package/dist/cli/chunks/heartbeat-scheduler-P44A2OX3.js +2 -0
  220. package/dist/cli/chunks/hnsw-adapter-ZJQIQJKC.js +2 -0
  221. package/dist/cli/chunks/hnsw-index-HMG2GH3Z.js +2 -0
  222. package/dist/cli/chunks/{hnsw-legacy-bridge-6IWREDQC.js → hnsw-legacy-bridge-J3M3IK24.js} +2 -2
  223. package/dist/cli/chunks/{hnswlib-node-5BIESSCK.js → hnswlib-node-ULGTGDZW.js} +2 -2
  224. package/dist/cli/chunks/{hooks-3EETRM62.js → hooks-C4BUGYUQ.js} +10 -10
  225. package/dist/cli/chunks/hybrid-backend-B7M74PZG.js +2 -0
  226. package/dist/cli/chunks/{hypergraph-engine-RSWCB2D3.js → hypergraph-engine-WINGVMPG.js} +2 -2
  227. package/dist/cli/chunks/{hypergraph-handler-552LXKL3.js → hypergraph-handler-GADMWKAU.js} +3 -3
  228. package/dist/cli/chunks/impact-analyzer-PZYOVKQO.js +2 -0
  229. package/dist/cli/chunks/{init-guard-OTDBJ5HD.js → init-guard-K2T4QWAO.js} +2 -2
  230. package/dist/cli/chunks/{init-handler-3FK3TKEA.js → init-handler-PCZTDZYI.js} +6 -6
  231. package/dist/cli/chunks/init-wizard-TZDJQK3U.js +2 -0
  232. package/dist/cli/chunks/kernel-Y6RRIOKW.js +2 -0
  233. package/dist/cli/chunks/{kilocode-installer-KZ2O4LF3.js → kilocode-installer-XENXNEIU.js} +2 -2
  234. package/dist/cli/chunks/{kiro-installer-MLCCXRF7.js → kiro-installer-3PG2TJ67.js} +2 -2
  235. package/dist/cli/chunks/knowledge-graph-BVD5Z66M.js +2 -0
  236. package/dist/cli/chunks/{learning-QUCMBD77.js → learning-6KDH7FK4.js} +3 -3
  237. package/dist/cli/chunks/{llm-router-PDEV3UP2.js → llm-router-RKVDEWU2.js} +4 -4
  238. package/dist/cli/chunks/llm-router-service-KHCAMSUU.js +2 -0
  239. package/dist/cli/chunks/{load-XFVVLO7E.js → load-ITHC564X.js} +2 -2
  240. package/dist/cli/chunks/load-test-RUF7DZA5.js +2 -0
  241. package/dist/cli/chunks/{mcp-74G3CL2S.js → mcp-TCL5UW3N.js} +2 -2
  242. package/dist/cli/chunks/{memory-XIFM6JNX.js → memory-BKDAY2N2.js} +5 -5
  243. package/dist/cli/chunks/memory-backend-7ZLFOVGG.js +2 -0
  244. package/dist/cli/chunks/{memory-handlers-ZCKURV6S.js → memory-handlers-WN4FXFOA.js} +2 -2
  245. package/dist/cli/chunks/{multi-model-executor-7L4W3O2Q.js → multi-model-executor-VHAT7ZPF.js} +2 -2
  246. package/dist/cli/chunks/{opencode-installer-BPG422LF.js → opencode-installer-E3VM3EEY.js} +2 -2
  247. package/dist/cli/chunks/{orchestrator-OEAFLAEV.js → orchestrator-BMQ6X762.js} +5 -5
  248. package/dist/cli/chunks/pattern-null-store-RY6CVYHP.js +2 -0
  249. package/dist/cli/chunks/{pattern-usage-recorder-LOPNCULT.js → pattern-usage-recorder-GOOR2BV5.js} +2 -2
  250. package/dist/cli/chunks/{pipeline-VWTYUZB7.js → pipeline-5NSFQQIX.js} +2 -2
  251. package/dist/cli/chunks/{platform-WFJJ3X2E.js → platform-SQM34J5G.js} +2 -2
  252. package/dist/cli/chunks/{plugin-744TPUSG.js → plugin-UQJZRMZG.js} +2 -2
  253. package/dist/cli/chunks/{prime-radiant-advanced-wasm-BD5BLNDR.js → prime-radiant-advanced-wasm-WMDJOL4S.js} +2 -2
  254. package/dist/cli/chunks/project-root-IO5KRNGL.js +2 -0
  255. package/dist/cli/chunks/protocol-executor-U2CUDWDE.js +2 -0
  256. package/dist/cli/chunks/{protocol-handler-JIBILI74.js → protocol-handler-OBDCVY6X.js} +2 -2
  257. package/dist/cli/chunks/{prove-MNOL5FYW.js → prove-XDC7I4XT.js} +2 -2
  258. package/dist/cli/chunks/qe-reasoning-bank-DQSSX2IP.js +2 -0
  259. package/dist/cli/chunks/{quality-JEGBDGGX.js → quality-L4GQ6WX4.js} +2 -2
  260. package/dist/cli/chunks/{quality-gate-SYJ6ROMI.js → quality-gate-MJG66LKN.js} +3 -3
  261. package/dist/cli/chunks/queen-coordinator-6FN4BZIX.js +2 -0
  262. package/dist/cli/chunks/{real-embeddings-ZWXS5ZFV.js → real-embeddings-HW4G2LWL.js} +2 -2
  263. package/dist/cli/chunks/{ref-validation-RRHUFW2N.js → ref-validation-FC7JOJ2C.js} +2 -2
  264. package/dist/cli/chunks/{roocode-installer-XFO6JSVN.js → roocode-installer-KWS4CEIC.js} +2 -2
  265. package/dist/cli/chunks/router-YUO3I7RU.js +2 -0
  266. package/dist/cli/chunks/routing-feedback-36SLQGJE.js +2 -0
  267. package/dist/cli/chunks/{routing-handler-L2K3JASE.js → routing-handler-QF4WVB2S.js} +2 -2
  268. package/dist/cli/chunks/{ruvector-commands-A6CINHGM.js → ruvector-commands-2MTCOUK6.js} +2 -2
  269. package/dist/cli/chunks/rvf-dual-writer-FRYZH3WZ.js +2 -0
  270. package/dist/cli/chunks/rvf-migration-adapter-XXNITL5I.js +2 -0
  271. package/dist/cli/chunks/{rvf-migration-coordinator-T4RY7L53.js → rvf-migration-coordinator-BREJCXWN.js} +2 -2
  272. package/dist/cli/chunks/rvf-native-adapter-D2WWKJIV.js +2 -0
  273. package/dist/cli/chunks/{rvf-store-integrity-IR33TGQS.js → rvf-store-integrity-KKC6HOJD.js} +2 -2
  274. package/dist/cli/chunks/safe-db-4RRIGRXD.js +2 -0
  275. package/dist/cli/chunks/schedule-25RTO4DQ.js +2 -0
  276. package/dist/cli/chunks/scheduler-BPIOJZ5P.js +2 -0
  277. package/dist/cli/chunks/{security-Z5GDE2IH.js → security-OSAE7VAP.js} +3 -3
  278. package/dist/cli/chunks/{shared-rvf-adapter-SIZMEHPM.js → shared-rvf-adapter-COUOS665.js} +2 -2
  279. package/dist/cli/chunks/{shared-rvf-dual-writer-HLM65RDS.js → shared-rvf-dual-writer-YXMPZKQE.js} +2 -2
  280. package/dist/cli/chunks/sqlite-persistence-EDF47DDX.js +2 -0
  281. package/dist/cli/chunks/{standalone-memory-SKSZG7P5.js → standalone-memory-E6JBMOIL.js} +2 -2
  282. package/dist/cli/chunks/{status-handler-766YOOMJ.js → status-handler-AFTCIYIX.js} +2 -2
  283. package/dist/cli/chunks/{structural-health-M45FNOLT.js → structural-health-2FROCEI4.js} +2 -2
  284. package/dist/cli/chunks/{sync-B2U366I3.js → sync-VAYTOWDC.js} +2 -2
  285. package/dist/cli/chunks/{sync-6CJ24B5T.js → sync-YIQYOFGW.js} +2 -2
  286. package/dist/cli/chunks/task-handler-KVQHDEX3.js +62 -0
  287. package/dist/cli/chunks/task-handlers-MVVECQA6.js +9 -0
  288. package/dist/cli/chunks/{test-TODH7KRF.js → test-5JSVTOMY.js} +4 -4
  289. package/dist/cli/chunks/test-runner-process-LEPF2OSS.js +2 -0
  290. package/dist/cli/chunks/{test-scheduling-VMVMVRHT.js → test-scheduling-HBOHVLI3.js} +3 -3
  291. package/dist/cli/chunks/{token-bootstrap-XQW7BMCK.js → token-bootstrap-5VEPTPFA.js} +2 -2
  292. package/dist/cli/chunks/{token-usage-JCZEIRKO.js → token-usage-TBJHDLY6.js} +2 -2
  293. package/dist/cli/chunks/{transformers-U2ML3OHE.js → transformers-VAWYMHMZ.js} +2 -2
  294. package/dist/cli/chunks/tree-sitter-wasm-parser-TSZTCMFV.js +2 -0
  295. package/dist/cli/chunks/{types-GGEPCHP6.js → types-R5SDZU2E.js} +2 -2
  296. package/dist/cli/chunks/unified-memory-TLGSSLMI.js +2 -0
  297. package/dist/cli/chunks/unified-memory-hnsw-MSUR7ZOO.js +2 -0
  298. package/dist/cli/chunks/unified-persistence-VFFOTWK7.js +2 -0
  299. package/dist/cli/chunks/{upgrade-T5GRM7HS.js → upgrade-K5PIHXRB.js} +2 -2
  300. package/dist/cli/chunks/{validate-XMUJPLP3.js → validate-RPTS7RYJ.js} +2 -2
  301. package/dist/cli/chunks/{validate-swarm-KJLF7JEH.js → validate-swarm-B2ZL556X.js} +2 -2
  302. package/dist/cli/chunks/visual-security-6Q44XNLB.js +2 -0
  303. package/dist/cli/chunks/{web-tree-sitter-LOHVZ7G5.js → web-tree-sitter-K4DUJC32.js} +2 -2
  304. package/dist/cli/chunks/{windsurf-installer-33FBTXJU.js → windsurf-installer-OK2AJN35.js} +2 -2
  305. package/dist/cli/chunks/witness-chain-KDOMXDQX.js +2 -0
  306. package/dist/cli/chunks/witness-chain-N3OY2RMH.js +2 -0
  307. package/dist/cli/chunks/{witness-chain-repair-VWBO4NXE.js → witness-chain-repair-L6Y5RFXR.js} +2 -2
  308. package/dist/cli/chunks/{witness-chain-verifier-BHJ3ZAEK.js → witness-chain-verifier-N4CW7FZX.js} +2 -2
  309. package/dist/cli/chunks/{witness-key-manager-WNVPH2Z3.js → witness-key-manager-TDNPS3WD.js} +2 -2
  310. package/dist/cli/chunks/{workflow-6QR5MQTO.js → workflow-XRZA3YCY.js} +4 -4
  311. package/dist/cli/chunks/workflow-orchestrator-CVNNT2RJ.js +2 -0
  312. package/dist/cli/chunks/{wrappers-EHOL62TS.js → wrappers-5JIFWKN6.js} +2 -2
  313. package/dist/cli/commands/code.js +6 -0
  314. package/dist/cli/commands/fleet-run.d.ts +12 -0
  315. package/dist/cli/commands/fleet-run.js +175 -0
  316. package/dist/cli/commands/fleet.js +2 -117
  317. package/dist/cli/handlers/task-handler.d.ts +5 -0
  318. package/dist/cli/handlers/task-handler.js +20 -0
  319. package/dist/cli/utils/fleet-operation.d.ts +5 -2
  320. package/dist/cli/utils/fleet-operation.js +13 -2
  321. package/dist/cli/utils/fleet-result.d.ts +16 -2
  322. package/dist/cli/utils/fleet-result.js +26 -21
  323. package/dist/cli/utils/fleet-shard.d.ts +36 -0
  324. package/dist/cli/utils/fleet-shard.js +110 -0
  325. package/dist/coordination/handlers/code-intelligence-handlers.js +21 -1
  326. package/dist/coordination/handlers/handler-types.d.ts +2 -2
  327. package/dist/coordination/handlers/handler-utils.d.ts +6 -0
  328. package/dist/coordination/handlers/handler-utils.js +14 -4
  329. package/dist/coordination/handlers/misc-handlers.js +5 -2
  330. package/dist/coordination/handlers/quality-handlers.js +2 -2
  331. package/dist/coordination/handlers/security-handlers.js +12 -2
  332. package/dist/coordination/protocols/security-audit.js +11 -1
  333. package/dist/coordination/task-executor.js +7 -2
  334. package/dist/domains/code-intelligence/coordinator-gnn.d.ts +2 -16
  335. package/dist/domains/code-intelligence/coordinator-gnn.js +1 -62
  336. package/dist/domains/code-intelligence/coordinator.d.ts +12 -6
  337. package/dist/domains/code-intelligence/coordinator.js +24 -27
  338. package/dist/domains/code-intelligence/interfaces.d.ts +9 -0
  339. package/dist/domains/code-intelligence/services/semantic-analyzer.d.ts +43 -5
  340. package/dist/domains/code-intelligence/services/semantic-analyzer.js +134 -71
  341. package/dist/domains/coverage-analysis/collected-metrics.d.ts +10 -0
  342. package/dist/domains/coverage-analysis/collected-metrics.js +29 -0
  343. package/dist/domains/coverage-analysis/services/coverage-analyzer.js +11 -3
  344. package/dist/domains/coverage-analysis/services/coverage-parser.d.ts +2 -0
  345. package/dist/domains/coverage-analysis/services/coverage-parser.js +18 -2
  346. package/dist/domains/quality-assessment/coherence/gate-controller.js +16 -4
  347. package/dist/domains/quality-assessment/coherence/lambda-calculator.d.ts +8 -0
  348. package/dist/domains/quality-assessment/coherence/lambda-calculator.js +57 -14
  349. package/dist/domains/quality-assessment/coherence/types.d.ts +12 -7
  350. package/dist/domains/quality-assessment/coordinator-gate-evaluation.js +3 -1
  351. package/dist/domains/quality-assessment/coordinator-reports.d.ts +30 -10
  352. package/dist/domains/quality-assessment/coordinator-reports.js +93 -57
  353. package/dist/domains/quality-assessment/coordinator.d.ts +14 -40
  354. package/dist/domains/quality-assessment/coordinator.js +10 -4
  355. package/dist/domains/quality-assessment/interfaces.d.ts +2 -0
  356. package/dist/domains/quality-assessment/services/coherence-gate.js +15 -2
  357. package/dist/domains/quality-assessment/services/quality-gate.js +6 -4
  358. package/dist/domains/security-compliance/index.d.ts +1 -1
  359. package/dist/domains/security-compliance/interfaces.d.ts +46 -5
  360. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.d.ts +3 -3
  361. package/dist/domains/security-compliance/services/scanners/dast-auth-testing.js +15 -14
  362. package/dist/domains/security-compliance/services/scanners/dast-helpers.d.ts +8 -9
  363. package/dist/domains/security-compliance/services/scanners/dast-helpers.js +19 -44
  364. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.d.ts +3 -3
  365. package/dist/domains/security-compliance/services/scanners/dast-injection-testing.js +13 -9
  366. package/dist/domains/security-compliance/services/scanners/dast-requests.d.ts +54 -0
  367. package/dist/domains/security-compliance/services/scanners/dast-requests.js +125 -0
  368. package/dist/domains/security-compliance/services/scanners/dast-scanner.d.ts +5 -1
  369. package/dist/domains/security-compliance/services/scanners/dast-scanner.js +125 -155
  370. package/dist/domains/security-compliance/services/scanners/index.d.ts +1 -1
  371. package/dist/domains/security-compliance/services/scanners/index.js +1 -1
  372. package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +2 -2
  373. package/dist/domains/security-compliance/services/security-auditor-dast.js +183 -212
  374. package/dist/domains/security-compliance/services/security-auditor-reports.js +5 -1
  375. package/dist/domains/security-compliance/services/security-auditor.d.ts +11 -3
  376. package/dist/domains/security-compliance/services/security-auditor.js +106 -65
  377. package/dist/domains/test-execution/coordinator.d.ts +2 -1
  378. package/dist/domains/test-execution/coordinator.js +33 -27
  379. package/dist/domains/test-execution/interfaces.d.ts +5 -0
  380. package/dist/domains/test-execution/services/test-executor.d.ts +6 -0
  381. package/dist/domains/test-execution/services/test-executor.js +16 -4
  382. package/dist/domains/visual-accessibility/coordinator.js +34 -9
  383. package/dist/domains/visual-accessibility/interfaces.d.ts +27 -0
  384. package/dist/domains/visual-accessibility/plugin.js +5 -0
  385. package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.d.ts +13 -21
  386. package/dist/domains/visual-accessibility/services/accessibility-tester-heuristics.js +13 -297
  387. package/dist/domains/visual-accessibility/services/accessibility-tester.d.ts +13 -5
  388. package/dist/domains/visual-accessibility/services/accessibility-tester.js +96 -73
  389. package/dist/integrations/embeddings/index/HNSWIndex.js +8 -4
  390. package/dist/integrations/ruvector/transfer-coherence-stub.js +5 -10
  391. package/dist/mcp/bundle.js +480 -480
  392. package/dist/mcp/handlers/domain-handler-configs.d.ts +8 -0
  393. package/dist/mcp/handlers/domain-handler-configs.js +9 -2
  394. package/dist/mcp/handlers/handler-factory.js +3 -0
  395. package/dist/mcp/handlers/model-route-handlers.d.ts +107 -0
  396. package/dist/mcp/handlers/model-route-handlers.js +139 -0
  397. package/dist/mcp/handlers/orchestrate-routes.js +41 -3
  398. package/dist/mcp/handlers/task-handlers.d.ts +3 -251
  399. package/dist/mcp/handlers/task-handlers.js +6 -828
  400. package/dist/mcp/handlers/task-inference.d.ts +26 -0
  401. package/dist/mcp/handlers/task-inference.js +156 -0
  402. package/dist/mcp/handlers/task-learning-handlers.d.ts +92 -0
  403. package/dist/mcp/handlers/task-learning-handlers.js +230 -0
  404. package/dist/mcp/handlers/task-orchestrate-handler.d.ts +73 -0
  405. package/dist/mcp/handlers/task-orchestrate-handler.js +361 -0
  406. package/dist/mcp/protocol-server.js +12 -2
  407. package/dist/mcp/tools/code-intelligence/analyze.js +3 -6
  408. package/dist/mcp/tools/coverage-analysis/index.d.ts +4 -0
  409. package/dist/mcp/tools/coverage-analysis/index.js +8 -2
  410. package/dist/mcp/tools/visual-accessibility/index.d.ts +7 -0
  411. package/dist/mcp/tools/visual-accessibility/index.js +29 -13
  412. package/dist/shared/events/domain-events.d.ts +2 -0
  413. package/dist/shared/metrics/code-metrics.js +21 -3
  414. package/dist/shared/parsers/typescript-parser.d.ts +6 -0
  415. package/dist/shared/parsers/typescript-parser.js +13 -1
  416. package/package.json +1 -1
  417. package/dist/cli/chunks/adapter-HL7MOCQN.js +0 -2
  418. package/dist/cli/chunks/aqe-learning-engine-OZ2DXB4G.js +0 -2
  419. package/dist/cli/chunks/base-WIM7G3HC.js +0 -2
  420. package/dist/cli/chunks/browser-workflow-QRKCFVR3.js +0 -2
  421. package/dist/cli/chunks/chunk-QSGEBCDB.js +0 -62
  422. package/dist/cli/chunks/chunk-UJNGGFGX.js +0 -2
  423. package/dist/cli/chunks/chunk-VXVTFKRA.js +0 -2
  424. package/dist/cli/chunks/chunk-XCNSGSKV.js +0 -3
  425. package/dist/cli/chunks/client-4PNYDFYS.js +0 -2
  426. package/dist/cli/chunks/core-handlers-ODO6LUWQ.js +0 -2
  427. package/dist/cli/chunks/cross-domain-router-DT4MHJKK.js +0 -2
  428. package/dist/cli/chunks/domain-transfer-L3F6AES2.js +0 -2
  429. package/dist/cli/chunks/dream-QOB3JCOM.js +0 -2
  430. package/dist/cli/chunks/file-discovery-BN76S2PR.js +0 -2
  431. package/dist/cli/chunks/fleet-43YMXACN.js +0 -46
  432. package/dist/cli/chunks/heartbeat-scheduler-3NNP4WCP.js +0 -2
  433. package/dist/cli/chunks/hnsw-adapter-MZR7Y4WF.js +0 -2
  434. package/dist/cli/chunks/hnsw-index-HE4AX22U.js +0 -2
  435. package/dist/cli/chunks/hybrid-backend-IHUHB3Y2.js +0 -2
  436. package/dist/cli/chunks/impact-analyzer-FI6GI6PD.js +0 -2
  437. package/dist/cli/chunks/init-wizard-WLQKH5Y5.js +0 -2
  438. package/dist/cli/chunks/kernel-2WZOQEZS.js +0 -2
  439. package/dist/cli/chunks/knowledge-graph-G3LVKK6P.js +0 -2
  440. package/dist/cli/chunks/llm-router-service-MM75HKWJ.js +0 -2
  441. package/dist/cli/chunks/load-test-BEWEE44J.js +0 -2
  442. package/dist/cli/chunks/memory-backend-NYKBBKZR.js +0 -2
  443. package/dist/cli/chunks/pattern-null-store-QGPUIV6M.js +0 -2
  444. package/dist/cli/chunks/project-root-C7ELXZRK.js +0 -2
  445. package/dist/cli/chunks/protocol-executor-SUVE33BM.js +0 -2
  446. package/dist/cli/chunks/qe-reasoning-bank-YWZMMGJB.js +0 -2
  447. package/dist/cli/chunks/queen-coordinator-ZFAKXRN7.js +0 -2
  448. package/dist/cli/chunks/router-4FTAVYLJ.js +0 -2
  449. package/dist/cli/chunks/routing-feedback-IO2KOWMJ.js +0 -2
  450. package/dist/cli/chunks/rvf-dual-writer-KCIRNE7C.js +0 -2
  451. package/dist/cli/chunks/rvf-migration-adapter-MFC5WTJU.js +0 -2
  452. package/dist/cli/chunks/rvf-native-adapter-I3KWHE7X.js +0 -2
  453. package/dist/cli/chunks/safe-db-QXDZ6QY3.js +0 -2
  454. package/dist/cli/chunks/schedule-CZKD6RIY.js +0 -2
  455. package/dist/cli/chunks/scheduler-BLA3Q4CH.js +0 -2
  456. package/dist/cli/chunks/sqlite-persistence-XIUYDJC4.js +0 -2
  457. package/dist/cli/chunks/task-handler-P6IFLCKP.js +0 -62
  458. package/dist/cli/chunks/task-handlers-DPWMUKFC.js +0 -9
  459. package/dist/cli/chunks/test-runner-process-46IPK3GH.js +0 -2
  460. package/dist/cli/chunks/tree-sitter-wasm-parser-MOI2WWNJ.js +0 -2
  461. package/dist/cli/chunks/unified-memory-FL26RTV3.js +0 -2
  462. package/dist/cli/chunks/unified-memory-hnsw-E2BPTH3U.js +0 -2
  463. package/dist/cli/chunks/unified-persistence-5ZOUPKHF.js +0 -2
  464. package/dist/cli/chunks/visual-security-IJVPO5FA.js +0 -2
  465. package/dist/cli/chunks/witness-chain-5FAFCQKP.js +0 -2
  466. package/dist/cli/chunks/witness-chain-V2M32W5D.js +0 -2
  467. package/dist/cli/chunks/workflow-orchestrator-3JLF3IX7.js +0 -2
@@ -6,6 +6,7 @@
6
6
  * Based on ruvector-mincut-gated-transformer's coherence calculation patterns.
7
7
  */
8
8
  import { QualityLambdaFlags, DEFAULT_COHERENCE_GATE_POLICY, } from './types.js';
9
+ import { isMeasuredMetricValue } from '../evidence-sufficiency.js';
9
10
  /**
10
11
  * Default dimension weights
11
12
  */
@@ -62,38 +63,80 @@ export class LambdaCalculator {
62
63
  flags,
63
64
  calculatedAt: new Date(),
64
65
  dimensions,
66
+ unmeasured: this.findUnmeasuredInputs(metrics),
65
67
  };
66
68
  }
69
+ /**
70
+ * #1020: inputs with no measured value — missing, negative or non-finite.
71
+ * highVulns, mediumVulns and flakyTestRatio feed the always-scored security
72
+ * and reliability dimensions, so leaving them out is missing evidence, not
73
+ * "none". Optional dimensions (technical debt, duplication, branch coverage)
74
+ * count only when supplied.
75
+ */
76
+ findUnmeasuredInputs(metrics) {
77
+ const unmeasured = [];
78
+ const required = [
79
+ 'lineCoverage', 'testPassRate', 'criticalVulns', 'highVulns', 'mediumVulns',
80
+ 'maintainabilityIndex', 'flakyTestRatio',
81
+ ];
82
+ if (!(metrics.targetLatency <= 0))
83
+ required.push('p95Latency', 'targetLatency');
84
+ for (const name of required) {
85
+ if (!isMeasuredMetricValue(metrics[name]))
86
+ unmeasured.push(name);
87
+ }
88
+ const optional = ['branchCoverage', 'technicalDebtHours', 'duplicationPercent'];
89
+ for (const name of optional) {
90
+ if (metrics[name] !== undefined && !isMeasuredMetricValue(metrics[name]))
91
+ unmeasured.push(name);
92
+ }
93
+ return unmeasured;
94
+ }
67
95
  /**
68
96
  * Normalize raw metrics to 0-1 scale dimensions
69
97
  */
70
98
  normalizeMetrics(metrics) {
99
+ // #1020: a dimension whose inputs are unmeasured (missing, negative,
100
+ // non-finite) is left out, never filled with a passing value; the inputs
101
+ // are listed in `unmeasured` and the gate never allows on them.
102
+ const measured = isMeasuredMetricValue;
71
103
  // Coverage: Direct percentage to 0-1
72
- const coverage = Math.min(Math.max(metrics.lineCoverage / 100, 0), 1);
104
+ const coverage = measured(metrics.lineCoverage) ? Math.min(metrics.lineCoverage / 100, 1) : undefined;
73
105
  // Pass rate: Direct percentage to 0-1
74
- const passRate = Math.min(Math.max(metrics.testPassRate / 100, 0), 1);
106
+ const passRate = measured(metrics.testPassRate) ? Math.min(metrics.testPassRate / 100, 1) : undefined;
75
107
  // Security: Inverse of vulnerability count, capped at 5 critical vulns
76
- // 0 vulns = 1.0, 5+ critical vulns = 0.0
77
- const criticalImpact = Math.min(metrics.criticalVulns / 5, 1);
78
- const highImpact = Math.min((metrics.highVulns || 0) / 10, 0.3);
79
- const mediumImpact = Math.min((metrics.mediumVulns || 0) / 20, 0.1);
80
- const security = Math.max(1 - criticalImpact - highImpact - mediumImpact, 0);
108
+ // 0 vulns = 1.0, 5+ critical vulns = 0.0. Unmeasured high/medium counts can
109
+ // only lower it further, so the score is then an upper bound: a failing
110
+ // value is conclusive, a passing one is not (they are listed as unmeasured).
111
+ let security;
112
+ if (measured(metrics.criticalVulns)) {
113
+ const criticalImpact = Math.min(metrics.criticalVulns / 5, 1);
114
+ const highImpact = measured(metrics.highVulns) ? Math.min(metrics.highVulns / 10, 0.3) : 0;
115
+ const mediumImpact = measured(metrics.mediumVulns) ? Math.min(metrics.mediumVulns / 20, 0.1) : 0;
116
+ security = Math.max(1 - criticalImpact - highImpact - mediumImpact, 0);
117
+ }
81
118
  // Performance: Ratio of target to actual P95 latency, capped at 1
82
- const performance = metrics.targetLatency > 0
83
- ? Math.min(metrics.targetLatency / Math.max(metrics.p95Latency, 1), 1)
84
- : 1;
119
+ // (a target of 0 means no latency target is set)
120
+ let performance = 1;
121
+ if (!(metrics.targetLatency <= 0)) {
122
+ performance = measured(metrics.targetLatency) && measured(metrics.p95Latency)
123
+ ? Math.min(metrics.targetLatency / Math.max(metrics.p95Latency, 1), 1)
124
+ : undefined;
125
+ }
85
126
  // Maintainability: Direct index to 0-1
86
- const maintainability = Math.min(Math.max(metrics.maintainabilityIndex / 100, 0), 1);
127
+ const maintainability = measured(metrics.maintainabilityIndex)
128
+ ? Math.min(metrics.maintainabilityIndex / 100, 1)
129
+ : undefined;
87
130
  // Reliability: Inverse of flaky test ratio
88
- const reliability = 1 - (metrics.flakyTestRatio || 0);
131
+ const reliability = measured(metrics.flakyTestRatio) ? Math.max(1 - metrics.flakyTestRatio, 0) : undefined;
89
132
  // Technical debt: Inverse ratio of debt to max acceptable
90
133
  let technicalDebt;
91
- if (metrics.technicalDebtHours !== undefined && metrics.maxAcceptableDebtHours) {
134
+ if (isMeasuredMetricValue(metrics.technicalDebtHours) && metrics.maxAcceptableDebtHours) {
92
135
  technicalDebt = Math.max(1 - metrics.technicalDebtHours / metrics.maxAcceptableDebtHours, 0);
93
136
  }
94
137
  // Duplication: Inverse of duplication percentage (capped at 20%)
95
138
  let duplication;
96
- if (metrics.duplicationPercent !== undefined) {
139
+ if (isMeasuredMetricValue(metrics.duplicationPercent)) {
97
140
  duplication = Math.max(1 - metrics.duplicationPercent / 20, 0);
98
141
  }
99
142
  return {
@@ -25,23 +25,28 @@ export interface QualityLambda {
25
25
  calculatedAt: Date;
26
26
  /** Individual dimension values (normalized 0-1) */
27
27
  dimensions: QualityDimensions;
28
+ /**
29
+ * #1020: inputs with no measured value (missing, negative or non-finite).
30
+ * While any is listed the gate never allows.
31
+ */
32
+ unmeasured?: string[];
28
33
  }
29
34
  /**
30
35
  * Quality dimensions normalized to 0-1 scale
31
36
  */
32
37
  export interface QualityDimensions {
33
38
  /** Line/statement coverage (0-1) */
34
- coverage: number;
39
+ coverage?: number;
35
40
  /** Test pass rate (0-1) */
36
- passRate: number;
41
+ passRate?: number;
37
42
  /** Security score (0-1, where 1 = no vulnerabilities) */
38
- security: number;
43
+ security?: number;
39
44
  /** Performance score (0-1, based on P95 latency vs target) */
40
- performance: number;
45
+ performance?: number;
41
46
  /** Maintainability index (0-1) */
42
- maintainability: number;
47
+ maintainability?: number;
43
48
  /** Reliability score (0-1, based on flaky test ratio) */
44
- reliability: number;
49
+ reliability?: number;
45
50
  /** Technical debt ratio (0-1, where 1 = no debt) */
46
51
  technicalDebt?: number;
47
52
  /** Code duplication score (0-1, where 1 = no duplication) */
@@ -116,7 +121,7 @@ export declare enum QualityTier {
116
121
  /**
117
122
  * Reason for quality gate decision
118
123
  */
119
- export type QualityGateReason = 'none' | 'lambdaBelowMin' | 'lambdaDroppedFast' | 'boundarySpike' | 'boundaryConcentrationSpike' | 'partitionDrift' | 'forcedByFlag' | 'securityCritical' | 'coverageDrop' | 'testFailureSpike';
124
+ export type QualityGateReason = 'none' | 'lambdaBelowMin' | 'lambdaDroppedFast' | 'boundarySpike' | 'boundaryConcentrationSpike' | 'partitionDrift' | 'forcedByFlag' | 'securityCritical' | 'coverageDrop' | 'testFailureSpike' | 'insufficientEvidence';
120
125
  /**
121
126
  * Quality actions to take based on decision
122
127
  */
@@ -7,6 +7,7 @@
7
7
  import { LoggerFactory } from '../../logging/index.js';
8
8
  import { v4 as uuidv4 } from 'uuid';
9
9
  import { createDomainFinding, } from '../../coordination/consensus/domain-findings.js';
10
+ import { isMeasuredMetricValue } from './evidence-sufficiency.js';
10
11
  /**
11
12
  * Check if a gate result is a borderline case.
12
13
  * A borderline case is when any metric is within the configured margin of its threshold.
@@ -26,7 +27,8 @@ export function isBorderlineGateResult(metrics, thresholds, _result, borderlineM
26
27
  for (const { metricKey, thresholdKey, isMin } of metricsToCheck) {
27
28
  const metricValue = metrics[metricKey];
28
29
  const thresholdConfig = thresholds[thresholdKey];
29
- if (thresholdConfig === undefined)
30
+ // #1020: an unmeasured value is not near any threshold.
31
+ if (thresholdConfig === undefined || !isMeasuredMetricValue(metricValue))
30
32
  continue;
31
33
  const threshold = isMin
32
34
  ? thresholdConfig.min
@@ -7,14 +7,28 @@
7
7
  import { Result } from '../../shared/types';
8
8
  import type { MemoryBackend } from '../../kernel/interfaces';
9
9
  import type { QualityMetrics, GateEvaluationRequest } from './interfaces';
10
+ import { type StaticEvidenceStatus } from './evidence-sufficiency.js';
11
+ import { INSUFFICIENT_EVIDENCE, type QualityMetricName } from './quality-evidence.js';
10
12
  /**
11
- * Default quality metrics used when no stored metrics are available
13
+ * #1020: the canonical quality metrics as measured. A metric without fresh,
14
+ * well-formed evidence is `-1` and listed in `unmeasured`; it is never
15
+ * replaced by a passing default.
12
16
  */
13
- export declare function getDefaultMetrics(): QualityMetrics;
17
+ export interface MeasuredQualityMetrics {
18
+ metrics: QualityMetrics;
19
+ unmeasured: QualityMetricName[];
20
+ }
21
+ /** Evidence state of the metrics one result was computed from. */
22
+ export interface MetricEvidence {
23
+ evidenceStatus: StaticEvidenceStatus;
24
+ /** Metrics this result needed but has no measured value for. */
25
+ unmeasured: QualityMetricName[];
26
+ }
14
27
  /**
15
- * Get stored quality metrics or defaults
28
+ * #1020: read the measured quality evidence (the same records the measured
29
+ * gate uses). Unmeasured metrics are `-1`, never a default.
16
30
  */
17
- export declare function getStoredOrDefaultMetrics(memory: MemoryBackend): Promise<QualityMetrics>;
31
+ export declare function getMeasuredMetrics(memory: MemoryBackend): Promise<MeasuredQualityMetrics>;
18
32
  /**
19
33
  * Generate a quality report
20
34
  */
@@ -24,15 +38,16 @@ export declare function generateReport(memory: MemoryBackend, options: {
24
38
  }): Promise<Result<{
25
39
  content: string;
26
40
  format: string;
27
- }, Error>>;
41
+ } & MetricEvidence, Error>>;
28
42
  /**
29
43
  * Get quality dashboard overview
30
44
  */
31
45
  export declare function getQualityDashboard(memory: MemoryBackend): Promise<Result<{
46
+ /** 0-100; -1 when any metric is unmeasured (#1020). */
32
47
  overallScore: number;
33
48
  metrics: QualityMetrics;
34
49
  trends: Record<string, number>;
35
- }, Error>>;
50
+ } & MetricEvidence, Error>>;
36
51
  /**
37
52
  * Analyze project risks
38
53
  */
@@ -46,8 +61,9 @@ export declare function analyzeRisks(memory: MemoryBackend, options: {
46
61
  description: string;
47
62
  category: string;
48
63
  }>;
49
- overallRiskLevel: 'low' | 'medium' | 'high' | 'critical';
50
- }, Error>>;
64
+ /** #1020: `insufficient-evidence` unless a measured risk is already critical. */
65
+ overallRiskLevel: 'low' | 'medium' | 'high' | 'critical' | typeof INSUFFICIENT_EVIDENCE;
66
+ } & MetricEvidence, Error>>;
51
67
  /**
52
68
  * Evaluate a quality gate (simplified API)
53
69
  */
@@ -62,14 +78,16 @@ export declare function assessDeploymentReadiness(memory: MemoryBackend, options
62
78
  environment: 'development' | 'staging' | 'production';
63
79
  changeSet: string[];
64
80
  }): Promise<Result<{
81
+ /** #1020: never true while an input is unmeasured. */
65
82
  ready: boolean;
66
83
  risks: Array<{
67
84
  id: string;
68
85
  severity: string;
69
86
  description: string;
70
87
  }>;
88
+ /** 0-100; -1 when a score input is unmeasured (#1020). */
71
89
  score: number;
72
- }, Error>>;
90
+ } & MetricEvidence, Error>>;
73
91
  /**
74
92
  * Analyze technical debt
75
93
  */
@@ -77,6 +95,7 @@ export declare function analyzeTechnicalDebt(memory: MemoryBackend, options: {
77
95
  projectPath: string;
78
96
  includeCodeSmells?: boolean;
79
97
  }): Promise<Result<{
98
+ /** -1 when technical debt is unmeasured (#1020). */
80
99
  totalDebt: number;
81
100
  items: Array<{
82
101
  file: string;
@@ -84,7 +103,8 @@ export declare function analyzeTechnicalDebt(memory: MemoryBackend, options: {
84
103
  effort: number;
85
104
  description: string;
86
105
  }>;
106
+ /** -1 when technical debt is unmeasured (#1020). */
87
107
  debtRatio: number;
88
- }, Error>>;
108
+ } & MetricEvidence, Error>>;
89
109
  export declare function generateRecommendations(metrics: QualityMetrics): string[];
90
110
  //# sourceMappingURL=coordinator-reports.d.ts.map
@@ -6,38 +6,55 @@
6
6
  */
7
7
  import { ok, err } from '../../shared/types/index.js';
8
8
  import { toError } from '../../shared/error-utils.js';
9
+ import { isMeasuredMetricValue } from './evidence-sufficiency.js';
10
+ import { INSUFFICIENT_EVIDENCE, QUALITY_METRICS, describeMissingMetrics, inspectQualityEvidence, } from './quality-evidence.js';
11
+ /** #996: the sentinel for a metric with no measured value. */
12
+ const UNMEASURED = -1;
9
13
  /**
10
- * Default quality metrics used when no stored metrics are available
14
+ * #1020: read the measured quality evidence (the same records the measured
15
+ * gate uses). Unmeasured metrics are `-1`, never a default.
11
16
  */
12
- export function getDefaultMetrics() {
17
+ export async function getMeasuredMetrics(memory) {
18
+ const { values } = await inspectQualityEvidence(memory);
19
+ const metrics = {};
20
+ const unmeasured = [];
21
+ for (const metric of QUALITY_METRICS) {
22
+ const value = values[metric];
23
+ if (isMeasuredMetricValue(value)) {
24
+ metrics[metric] = value;
25
+ }
26
+ else {
27
+ metrics[metric] = UNMEASURED;
28
+ unmeasured.push(metric);
29
+ }
30
+ }
31
+ return { metrics, unmeasured };
32
+ }
33
+ /** Evidence state of `inputs` within `metrics`. */
34
+ function evidenceFor(metrics, inputs) {
35
+ const unmeasured = inputs.filter((metric) => !isMeasuredMetricValue(metrics[metric]));
13
36
  return {
14
- coverage: 80,
15
- testsPassing: 95,
16
- criticalBugs: 0,
17
- codeSmells: 5,
18
- securityVulnerabilities: 0,
19
- technicalDebt: 10,
20
- duplications: 3,
37
+ evidenceStatus: unmeasured.length === 0 ? 'measured' : INSUFFICIENT_EVIDENCE,
38
+ unmeasured,
21
39
  };
22
40
  }
23
- /**
24
- * Get stored quality metrics or defaults
25
- */
26
- export async function getStoredOrDefaultMetrics(memory) {
27
- const storedMetrics = await memory.get('quality-assessment:current-metrics');
28
- return storedMetrics ?? getDefaultMetrics();
41
+ /** True when `metric` has a measured value. */
42
+ function measured(metrics, metric) {
43
+ return isMeasuredMetricValue(metrics[metric]);
29
44
  }
30
45
  /**
31
46
  * Generate a quality report
32
47
  */
33
48
  export async function generateReport(memory, options) {
34
49
  try {
35
- const metrics = await getStoredOrDefaultMetrics(memory);
50
+ const { metrics } = await getMeasuredMetrics(memory);
51
+ const evidence = evidenceFor(metrics, QUALITY_METRICS);
36
52
  const reportData = {
37
53
  timestamp: new Date().toISOString(),
54
+ ...evidence,
38
55
  metrics,
39
56
  recommendations: options.includeRecommendations
40
- ? generateRecommendations(metrics)
57
+ ? [...generateRecommendations(metrics), ...describeMissingMetrics(evidence.unmeasured)]
41
58
  : undefined,
42
59
  };
43
60
  let content;
@@ -54,7 +71,7 @@ export async function generateReport(memory, options) {
54
71
  default:
55
72
  content = JSON.stringify(reportData, null, 2);
56
73
  }
57
- return ok({ content, format: options.format });
74
+ return ok({ content, format: options.format, ...evidence });
58
75
  }
59
76
  catch (error) {
60
77
  return err(toError(error));
@@ -65,14 +82,16 @@ export async function generateReport(memory, options) {
65
82
  */
66
83
  export async function getQualityDashboard(memory) {
67
84
  try {
68
- const metrics = await getStoredOrDefaultMetrics(memory);
69
- const overallScore = Math.round((metrics.coverage * 0.3) +
85
+ const { metrics } = await getMeasuredMetrics(memory);
86
+ const evidence = evidenceFor(metrics, QUALITY_METRICS);
87
+ const overallScore = evidence.unmeasured.length > 0 ? UNMEASURED : Math.round((metrics.coverage * 0.3) +
70
88
  (metrics.testsPassing * 0.3) +
71
89
  ((100 - Math.min(100, metrics.codeSmells)) * 0.2) +
72
90
  ((100 - Math.min(100, metrics.securityVulnerabilities * 10)) * 0.2));
73
91
  return ok({
74
92
  overallScore,
75
93
  metrics,
94
+ ...evidence,
76
95
  trends: {
77
96
  coverage: 0,
78
97
  quality: 0,
@@ -89,9 +108,13 @@ export async function getQualityDashboard(memory) {
89
108
  */
90
109
  export async function analyzeRisks(memory, options) {
91
110
  try {
92
- const metrics = await getStoredOrDefaultMetrics(memory);
111
+ const { metrics } = await getMeasuredMetrics(memory);
112
+ const inputs = ['coverage', 'technicalDebt'];
113
+ if (options.includeSecurityRisks)
114
+ inputs.push('securityVulnerabilities');
115
+ const evidence = evidenceFor(metrics, inputs);
93
116
  const risks = [];
94
- if (metrics.coverage < 50) {
117
+ if (measured(metrics, 'coverage') && metrics.coverage < 50) {
95
118
  risks.push({
96
119
  id: 'risk-coverage-critical',
97
120
  severity: 'critical',
@@ -99,7 +122,7 @@ export async function analyzeRisks(memory, options) {
99
122
  category: 'quality',
100
123
  });
101
124
  }
102
- else if (metrics.coverage < 70) {
125
+ else if (measured(metrics, 'coverage') && metrics.coverage < 70) {
103
126
  risks.push({
104
127
  id: 'risk-coverage-high',
105
128
  severity: 'high',
@@ -107,7 +130,7 @@ export async function analyzeRisks(memory, options) {
107
130
  category: 'quality',
108
131
  });
109
132
  }
110
- if (options.includeSecurityRisks && metrics.securityVulnerabilities > 0) {
133
+ if (options.includeSecurityRisks && measured(metrics, 'securityVulnerabilities') && metrics.securityVulnerabilities > 0) {
111
134
  risks.push({
112
135
  id: 'risk-security',
113
136
  severity: metrics.securityVulnerabilities > 5 ? 'critical' : 'high',
@@ -115,7 +138,7 @@ export async function analyzeRisks(memory, options) {
115
138
  category: 'security',
116
139
  });
117
140
  }
118
- if (metrics.technicalDebt > 40) {
141
+ if (measured(metrics, 'technicalDebt') && metrics.technicalDebt > 40) {
119
142
  risks.push({
120
143
  id: 'risk-debt-critical',
121
144
  severity: 'high',
@@ -129,13 +152,17 @@ export async function analyzeRisks(memory, options) {
129
152
  if (criticalCount > 0) {
130
153
  overallRiskLevel = 'critical';
131
154
  }
155
+ else if (evidence.unmeasured.length > 0) {
156
+ // An unmeasured input could hide any risk: no level below critical is known.
157
+ overallRiskLevel = INSUFFICIENT_EVIDENCE;
158
+ }
132
159
  else if (highCount > 1) {
133
160
  overallRiskLevel = 'high';
134
161
  }
135
162
  else if (highCount > 0 || risks.length > 2) {
136
163
  overallRiskLevel = 'medium';
137
164
  }
138
- return ok({ risks, overallRiskLevel });
165
+ return ok({ risks, overallRiskLevel, ...evidence });
139
166
  }
140
167
  catch (error) {
141
168
  return err(toError(error));
@@ -145,15 +172,12 @@ export async function analyzeRisks(memory, options) {
145
172
  * Evaluate a quality gate (simplified API)
146
173
  */
147
174
  export function buildFullGateRequest(options) {
148
- const fullMetrics = {
149
- coverage: options.metrics.coverage ?? 80,
150
- testsPassing: options.metrics.testsPassing ?? 95,
151
- criticalBugs: options.metrics.criticalBugs ?? 0,
152
- codeSmells: options.metrics.codeSmells ?? 5,
153
- securityVulnerabilities: options.metrics.securityVulnerabilities ?? 0,
154
- technicalDebt: options.metrics.technicalDebt ?? 10,
155
- duplications: options.metrics.duplications ?? 3,
156
- };
175
+ // #1020: a metric the caller did not supply is unmeasured (-1), never a
176
+ // passing default; the gate reports it as insufficient evidence.
177
+ const fullMetrics = {};
178
+ for (const metric of QUALITY_METRICS) {
179
+ fullMetrics[metric] = options.metrics[metric] ?? UNMEASURED;
180
+ }
157
181
  return {
158
182
  gateName: options.gateId,
159
183
  metrics: fullMetrics,
@@ -171,24 +195,26 @@ export function buildFullGateRequest(options) {
171
195
  */
172
196
  export async function assessDeploymentReadiness(memory, options) {
173
197
  try {
174
- const metrics = await getStoredOrDefaultMetrics(memory);
198
+ const { metrics } = await getMeasuredMetrics(memory);
199
+ const scoreInputs = ['coverage', 'testsPassing', 'securityVulnerabilities'];
200
+ const evidence = evidenceFor(metrics, options.environment === 'production' ? [...scoreInputs, 'criticalBugs'] : scoreInputs);
175
201
  const risks = [];
176
202
  if (options.environment === 'production') {
177
- if (metrics.coverage < 70) {
203
+ if (measured(metrics, 'coverage') && metrics.coverage < 70) {
178
204
  risks.push({
179
205
  id: 'risk-coverage',
180
206
  severity: 'high',
181
207
  description: 'Coverage below recommended threshold for production',
182
208
  });
183
209
  }
184
- if (metrics.securityVulnerabilities > 0) {
210
+ if (measured(metrics, 'securityVulnerabilities') && metrics.securityVulnerabilities > 0) {
185
211
  risks.push({
186
212
  id: 'risk-security',
187
213
  severity: 'critical',
188
214
  description: 'Security vulnerabilities must be resolved before production deployment',
189
215
  });
190
216
  }
191
- if (metrics.criticalBugs > 0) {
217
+ if (measured(metrics, 'criticalBugs') && metrics.criticalBugs > 0) {
192
218
  risks.push({
193
219
  id: 'risk-bugs',
194
220
  severity: 'critical',
@@ -196,11 +222,14 @@ export async function assessDeploymentReadiness(memory, options) {
196
222
  });
197
223
  }
198
224
  }
199
- const score = Math.round((metrics.coverage * 0.4) +
200
- (metrics.testsPassing * 0.3) +
201
- ((100 - Math.min(100, metrics.securityVulnerabilities * 20)) * 0.3));
202
- const ready = risks.filter((r) => r.severity === 'critical').length === 0 && score >= 70;
203
- return ok({ ready, risks, score });
225
+ const score = scoreInputs.every((metric) => measured(metrics, metric))
226
+ ? Math.round((metrics.coverage * 0.4) +
227
+ (metrics.testsPassing * 0.3) +
228
+ ((100 - Math.min(100, metrics.securityVulnerabilities * 20)) * 0.3))
229
+ : UNMEASURED;
230
+ const ready = evidence.unmeasured.length === 0
231
+ && risks.filter((r) => r.severity === 'critical').length === 0 && score >= 70;
232
+ return ok({ ready, risks, score, ...evidence });
204
233
  }
205
234
  catch (error) {
206
235
  return err(toError(error));
@@ -211,27 +240,33 @@ export async function assessDeploymentReadiness(memory, options) {
211
240
  */
212
241
  export async function analyzeTechnicalDebt(memory, options) {
213
242
  try {
214
- const metrics = await getStoredOrDefaultMetrics(memory);
243
+ const { metrics } = await getMeasuredMetrics(memory);
244
+ const inputs = ['technicalDebt', 'duplications'];
245
+ if (options.includeCodeSmells)
246
+ inputs.push('codeSmells');
247
+ const evidence = evidenceFor(metrics, inputs);
248
+ // #1020: the metrics are project-wide counts, so the items name the
249
+ // project, not invented file paths.
215
250
  const items = [];
216
- if (metrics.duplications > 0) {
251
+ if (measured(metrics, 'duplications') && metrics.duplications > 0) {
217
252
  items.push({
218
- file: `${options.projectPath}/src/utils/helpers.ts`,
253
+ file: options.projectPath,
219
254
  type: 'duplication',
220
255
  effort: metrics.duplications * 30,
221
- description: 'Duplicated code blocks that should be refactored',
256
+ description: `Measured duplication of ${metrics.duplications}% across the project should be refactored`,
222
257
  });
223
258
  }
224
- if (options.includeCodeSmells && metrics.codeSmells > 0) {
259
+ if (options.includeCodeSmells && measured(metrics, 'codeSmells') && metrics.codeSmells > 0) {
225
260
  items.push({
226
- file: `${options.projectPath}/src/services/legacy.ts`,
261
+ file: options.projectPath,
227
262
  type: 'code-smell',
228
263
  effort: metrics.codeSmells * 15,
229
- description: 'Code smells that impact maintainability',
264
+ description: `${metrics.codeSmells} measured code smells impact maintainability`,
230
265
  });
231
266
  }
232
267
  const totalDebt = metrics.technicalDebt;
233
- const debtRatio = totalDebt / 100;
234
- return ok({ totalDebt, items, debtRatio });
268
+ const debtRatio = measured(metrics, 'technicalDebt') ? totalDebt / 100 : UNMEASURED;
269
+ return ok({ totalDebt, items, debtRatio, ...evidence });
235
270
  }
236
271
  catch (error) {
237
272
  return err(toError(error));
@@ -242,16 +277,17 @@ export async function analyzeTechnicalDebt(memory, options) {
242
277
  // ============================================================================
243
278
  export function generateRecommendations(metrics) {
244
279
  const recommendations = [];
245
- if (metrics.coverage < 80) {
280
+ // #1020: only measured values support a recommendation; -1 is not "low".
281
+ if (measured(metrics, 'coverage') && metrics.coverage < 80) {
246
282
  recommendations.push('Increase test coverage to at least 80%');
247
283
  }
248
- if (metrics.codeSmells > 10) {
284
+ if (measured(metrics, 'codeSmells') && metrics.codeSmells > 10) {
249
285
  recommendations.push('Refactor complex code to improve maintainability');
250
286
  }
251
- if (metrics.technicalDebt > 20) {
287
+ if (measured(metrics, 'technicalDebt') && metrics.technicalDebt > 20) {
252
288
  recommendations.push('Allocate time to reduce technical debt');
253
289
  }
254
- if (metrics.securityVulnerabilities > 0) {
290
+ if (measured(metrics, 'securityVulnerabilities') && metrics.securityVulnerabilities > 0) {
255
291
  recommendations.push('Address security vulnerabilities urgently');
256
292
  }
257
293
  return recommendations;