hex-audit 0.6.3 → 0.8.0

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 (746) hide show
  1. package/CLAUDE.md +137 -77
  2. package/DEMO.md +41 -105
  3. package/README.md +205 -353
  4. package/dashboard/.next/BUILD_ID +1 -1
  5. package/dashboard/.next/app-build-manifest.json +65 -99
  6. package/dashboard/.next/app-path-routes-manifest.json +1 -1
  7. package/dashboard/.next/build-manifest.json +14 -14
  8. package/dashboard/.next/next-minimal-server.js.nft.json +1 -1
  9. package/dashboard/.next/next-server.js.nft.json +1 -1
  10. package/dashboard/.next/prerender-manifest.js +1 -1
  11. package/dashboard/.next/prerender-manifest.json +1 -1
  12. package/dashboard/.next/react-loadable-manifest.json +540 -119
  13. package/dashboard/.next/routes-manifest.json +1 -1
  14. package/dashboard/.next/server/app/_not-found/page.js +1 -1
  15. package/dashboard/.next/server/app/_not-found/page.js.nft.json +1 -1
  16. package/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. package/dashboard/.next/server/app/api/code/route.js +1 -1
  18. package/dashboard/.next/server/app/api/code/route.js.nft.json +1 -1
  19. package/dashboard/.next/server/app/api/comments/route.js +1 -0
  20. package/dashboard/.next/server/app/api/comments/route.js.nft.json +1 -0
  21. package/dashboard/.next/server/app/api/diagrams/[name]/export/route.js +1 -0
  22. package/dashboard/.next/server/app/api/diagrams/[name]/export/route.js.nft.json +1 -0
  23. package/dashboard/.next/server/app/api/diagrams/[name]/resolve/route.js +1 -0
  24. package/dashboard/.next/server/app/api/diagrams/[name]/resolve/route.js.nft.json +1 -0
  25. package/dashboard/.next/server/app/api/diagrams/[name]/route.js +1 -0
  26. package/dashboard/.next/server/app/api/diagrams/[name]/route.js.nft.json +1 -0
  27. package/dashboard/.next/server/app/api/figures/[name]/route.js +1 -0
  28. package/dashboard/.next/server/app/api/figures/[name]/route.js.nft.json +1 -0
  29. package/dashboard/.next/server/app/api/focus/route.js +1 -0
  30. package/dashboard/.next/server/app/api/focus/route.js.nft.json +1 -0
  31. package/dashboard/.next/server/app/api/github-status/route.js +1 -1
  32. package/dashboard/.next/server/app/api/invariants/[id]/route.js +1 -0
  33. package/dashboard/.next/server/app/api/invariants/[id]/route.js.nft.json +1 -0
  34. package/dashboard/.next/server/app/api/issues/[id]/revert-auto/route.js +1 -0
  35. package/dashboard/.next/server/app/api/issues/[id]/revert-auto/route.js.nft.json +1 -0
  36. package/dashboard/.next/server/app/api/nav/route.js +1 -0
  37. package/dashboard/.next/server/app/api/nav/route.js.nft.json +1 -0
  38. package/dashboard/.next/server/app/api/notes/done/route.js +1 -1
  39. package/dashboard/.next/server/app/api/notes/done/route.js.nft.json +1 -1
  40. package/dashboard/.next/server/app/api/notes/lead/route.js +1 -1
  41. package/dashboard/.next/server/app/api/notes/lead/route.js.nft.json +1 -1
  42. package/dashboard/.next/server/app/api/notes/question/route.js +1 -1
  43. package/dashboard/.next/server/app/api/notes/question/route.js.nft.json +1 -1
  44. package/dashboard/.next/server/app/api/notes/record/route.js +3 -3
  45. package/dashboard/.next/server/app/api/notes/route.js +2 -2
  46. package/dashboard/.next/server/app/api/palette/route.js +1 -0
  47. package/dashboard/.next/server/app/api/palette/route.js.nft.json +1 -0
  48. package/dashboard/.next/server/app/api/progress/route.js +1 -1
  49. package/dashboard/.next/server/app/api/progress/route.js.nft.json +1 -1
  50. package/dashboard/.next/server/app/api/watch/route.js +2 -2
  51. package/dashboard/.next/server/app/api/watch/route.js.nft.json +1 -1
  52. package/dashboard/.next/server/app/api/xref/route.js +1 -0
  53. package/dashboard/.next/server/app/changes/page.js +1 -0
  54. package/dashboard/.next/server/app/{access → changes}/page.js.nft.json +1 -1
  55. package/dashboard/.next/server/app/changes/page_client-reference-manifest.js +1 -0
  56. package/dashboard/.next/server/app/excalidraw-assets/[...path]/route.js +1 -0
  57. package/dashboard/.next/server/app/issues/page.js +5 -28
  58. package/dashboard/.next/server/app/issues/page.js.nft.json +1 -1
  59. package/dashboard/.next/server/app/issues/page_client-reference-manifest.js +1 -1
  60. package/dashboard/.next/server/app/model/page.js +1 -0
  61. package/dashboard/.next/server/app/{calls → model}/page.js.nft.json +1 -1
  62. package/dashboard/.next/server/app/model/page_client-reference-manifest.js +1 -0
  63. package/dashboard/.next/server/app/page.js +1 -20
  64. package/dashboard/.next/server/app/page.js.nft.json +1 -1
  65. package/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
  66. package/dashboard/.next/server/app/report/page.js +1 -1
  67. package/dashboard/.next/server/app/report/page.js.nft.json +1 -1
  68. package/dashboard/.next/server/app/report/page_client-reference-manifest.js +1 -1
  69. package/dashboard/.next/server/app/review/page.js +1 -0
  70. package/dashboard/.next/server/app/{conformance → review}/page.js.nft.json +1 -1
  71. package/dashboard/.next/server/app/review/page_client-reference-manifest.js +1 -0
  72. package/dashboard/.next/server/app-paths-manifest.json +20 -16
  73. package/dashboard/.next/server/chunks/310.js +4 -0
  74. package/dashboard/.next/server/chunks/370.js +1 -0
  75. package/dashboard/.next/server/chunks/42.js +1 -1
  76. package/dashboard/.next/server/chunks/624.js +14 -0
  77. package/dashboard/.next/server/chunks/645.js +1 -1
  78. package/dashboard/.next/server/chunks/649.js +1 -1
  79. package/dashboard/.next/server/chunks/653.js +1 -0
  80. package/dashboard/.next/server/functions-config-manifest.json +1 -1
  81. package/dashboard/.next/server/middleware-build-manifest.js +1 -1
  82. package/dashboard/.next/server/middleware-react-loadable-manifest.js +1 -1
  83. package/dashboard/.next/server/next-font-manifest.js +1 -1
  84. package/dashboard/.next/server/next-font-manifest.json +1 -1
  85. package/dashboard/.next/server/pages/500.html +1 -1
  86. package/dashboard/.next/server/pages/_error.js +1 -1
  87. package/dashboard/.next/server/pages-manifest.json +1 -1
  88. package/dashboard/.next/server/server-reference-manifest.js +1 -1
  89. package/dashboard/.next/server/server-reference-manifest.json +1 -1
  90. package/dashboard/.next/static/bGV1ry1vvIbM5b506eVBR/_buildManifest.js +1 -0
  91. package/dashboard/.next/static/chunks/0bbe10ee.8e7ffa06d2170dfe.js +84 -0
  92. package/dashboard/.next/static/chunks/{1.8868c4d131111be7.js → 1.a666047ea18866fb.js} +2 -2
  93. package/dashboard/.next/static/chunks/1015.39008440ab15e196.js +226 -0
  94. package/dashboard/.next/static/chunks/1026.0ef689a305302427.js +1 -0
  95. package/dashboard/.next/static/chunks/1151.497fa63c5b9eba52.js +1 -0
  96. package/dashboard/.next/static/chunks/1164.34eb76767ebea46f.js +8 -0
  97. package/dashboard/.next/static/chunks/119.a9a79633900a235f.js +5 -0
  98. package/dashboard/.next/static/chunks/1199.f30cbfa151e56076.js +148 -0
  99. package/dashboard/.next/static/chunks/1291.6c486c9b1d4b1b3a.js +1 -0
  100. package/dashboard/.next/static/chunks/1375.64c20f1064a38a10.js +43 -0
  101. package/dashboard/.next/static/chunks/139.4691848fc5a46253.js +10 -0
  102. package/dashboard/.next/static/chunks/145.1bf74fecdb4022e3.js +11 -0
  103. package/dashboard/.next/static/chunks/1517.8e7075f78e22b3a0.js +8 -0
  104. package/dashboard/.next/static/chunks/165.6f174060a0ce2db4.js +6 -0
  105. package/dashboard/.next/static/chunks/1741.5c370b7702d2eb40.js +8 -0
  106. package/dashboard/.next/static/chunks/1799.8dc56017eede704e.js +9 -0
  107. package/dashboard/.next/static/chunks/1e36816c.5748c83adc8a6bd6.js +108 -0
  108. package/dashboard/.next/static/chunks/20154aaa.e87f69fe10483f8b.js +1 -0
  109. package/dashboard/.next/static/chunks/2061.eab75b3c1dfa068a.js +1 -0
  110. package/dashboard/.next/static/chunks/2077.5603adeb156c7d10.js +1 -0
  111. package/dashboard/.next/static/chunks/2148.3ce718f62d1b2f7c.js +10 -0
  112. package/dashboard/.next/static/chunks/2166.9f6592b9399eadd8.js +215 -0
  113. package/dashboard/.next/static/chunks/217-1d5b680ffd10e3f9.js +1 -0
  114. package/dashboard/.next/static/chunks/2208.fb884379aa3ae968.js +1 -0
  115. package/dashboard/.next/static/chunks/2276.112c7855333fca5f.js +6 -0
  116. package/dashboard/.next/static/chunks/{2291.85a70cb0c228157b.js → 2291.584b42ccad079b99.js} +1 -1
  117. package/dashboard/.next/static/chunks/2325.7decd077edfb81d9.js +24 -0
  118. package/dashboard/.next/static/chunks/2374-8c6f137938f8518a.js +1 -0
  119. package/dashboard/.next/static/chunks/{2383.62c035a052272594.js → 2383.ca81f980ce6528a4.js} +1 -1
  120. package/dashboard/.next/static/chunks/2445.18a86507d2996b95.js +1 -0
  121. package/dashboard/.next/static/chunks/2694.7dfa5fef28851903.js +1 -0
  122. package/dashboard/.next/static/chunks/2712.15dd8577973baf22.js +10 -0
  123. package/dashboard/.next/static/chunks/275.38af87389c1d33d7.js +34 -0
  124. package/dashboard/.next/static/chunks/2759.533dec5317e0a1d1.js +1 -0
  125. package/dashboard/.next/static/chunks/2781.fba46046dbf2693b.js +93 -0
  126. package/dashboard/.next/static/chunks/2805.35b4cd8a94978aaf.js +1 -0
  127. package/dashboard/.next/static/chunks/2812.62b213bef580b69a.js +1 -0
  128. package/dashboard/.next/static/chunks/{2879.51436986f93981d9.js → 2879.74d65e33e60505ee.js} +1 -1
  129. package/dashboard/.next/static/chunks/2895.bb57cacb7aaf42a1.js +9 -0
  130. package/dashboard/.next/static/chunks/2972.e5a9251b538dcf19.js +9 -0
  131. package/dashboard/.next/static/chunks/3205-fd963acf2fdfd080.js +2 -0
  132. package/dashboard/.next/static/chunks/3206.8d9a10db2b04b93f.js +1 -0
  133. package/dashboard/.next/static/chunks/3236.eac9855778a54518.js +1 -0
  134. package/dashboard/.next/static/chunks/3480.853a445a3784642a.js +1 -0
  135. package/dashboard/.next/static/chunks/3485.36766504793b7237.js +9 -0
  136. package/dashboard/.next/static/chunks/3626.c5dacee11c8fbc4d.js +64 -0
  137. package/dashboard/.next/static/chunks/3725.de9376dc994735d4.js +9 -0
  138. package/dashboard/.next/static/chunks/3774.1df377928e8387f7.js +9 -0
  139. package/dashboard/.next/static/chunks/3865.5e6d2d501380e03b.js +90 -0
  140. package/dashboard/.next/static/chunks/3887.073cece834a4eae2.js +1 -0
  141. package/dashboard/.next/static/chunks/3924-f1f85ccc7d59d7ab.js +1 -0
  142. package/dashboard/.next/static/chunks/3948.74201b9f0672234d.js +287 -0
  143. package/dashboard/.next/static/chunks/3963.39d72b3875dfe2e9.js +13 -0
  144. package/dashboard/.next/static/chunks/4013.73884b23bfaebdde.js +11 -0
  145. package/dashboard/.next/static/chunks/4117.278aff1fa23fd36e.js +6 -0
  146. package/dashboard/.next/static/chunks/4210.cc8594110017c579.js +11 -0
  147. package/dashboard/.next/static/chunks/4282.28485875540886cc.js +7 -0
  148. package/dashboard/.next/static/chunks/4318.a2f469a88d88f6d0.js +8 -0
  149. package/dashboard/.next/static/chunks/4363.8999a6e727c48003.js +1 -0
  150. package/dashboard/.next/static/chunks/4641.e03d118fffebd580.js +5 -0
  151. package/dashboard/.next/static/chunks/4728.e69372b5e5b61b8d.js +24 -0
  152. package/dashboard/.next/static/chunks/4787.821a6ad2816cdc60.js +23 -0
  153. package/dashboard/.next/static/chunks/483.a910dab7734a1074.js +8 -0
  154. package/dashboard/.next/static/chunks/4926.76693f542e9cc062.js +6 -0
  155. package/dashboard/.next/static/chunks/4938.03f6d04dabf38745.js +10 -0
  156. package/dashboard/.next/static/chunks/5060.47402abc10273699.js +1 -0
  157. package/dashboard/.next/static/chunks/5112.0757c2b0c285e62e.js +1 -0
  158. package/dashboard/.next/static/chunks/5199.c83ea7efb0eec705.js +11 -0
  159. package/dashboard/.next/static/chunks/5284.334c7c0587d5d47a.js +1 -0
  160. package/dashboard/.next/static/chunks/530.849957a8907eb288.js +1 -0
  161. package/dashboard/.next/static/chunks/5424.4e8ca0711a32bccf.js +7 -0
  162. package/dashboard/.next/static/chunks/55.a593a78be9714679.js +1 -0
  163. package/dashboard/.next/static/chunks/5535.6cd0bd8d368d8902.js +4 -0
  164. package/dashboard/.next/static/chunks/5626.7d4e93d7acbeffc9.js +10 -0
  165. package/dashboard/.next/static/chunks/5715.e16b1230cc4b4652.js +115 -0
  166. package/dashboard/.next/static/chunks/5775.a0d7c1b1e89b9a93.js +9 -0
  167. package/dashboard/.next/static/chunks/6014.641a2c53ba506241.js +104 -0
  168. package/dashboard/.next/static/chunks/6024.f099c15f75aa6722.js +79 -0
  169. package/dashboard/.next/static/chunks/{6052.033a6f1013c666eb.js → 6052.3001318955e5b36c.js} +2 -2
  170. package/dashboard/.next/static/chunks/6118.266956b3333b1d7a.js +9 -0
  171. package/dashboard/.next/static/chunks/6121.a2e6d93720b1205e.js +77 -0
  172. package/dashboard/.next/static/chunks/6177.a01cf0a03734cf09.js +1 -0
  173. package/dashboard/.next/static/chunks/618f8807-fbb1466bc29c17c6.js +1 -0
  174. package/dashboard/.next/static/chunks/6434.f560693253fea8de.js +1 -0
  175. package/dashboard/.next/static/chunks/6468.976d89ba133185f1.js +77 -0
  176. package/dashboard/.next/static/chunks/6540.6f3c4f2c6877ed89.js +1 -0
  177. package/dashboard/.next/static/chunks/6549.e3c4c1766cff1449.js +1 -0
  178. package/dashboard/.next/static/chunks/6853.d3ad43614e8ca0ab.js +1 -0
  179. package/dashboard/.next/static/chunks/690f35d0.ab57e02a04c7e9e0.js +119 -0
  180. package/dashboard/.next/static/chunks/6951.02a3a158d02158c9.js +5 -0
  181. package/dashboard/.next/static/chunks/6970.013f24568c87d918.js +11 -0
  182. package/dashboard/.next/static/chunks/7013.39d41e82b37be63b.js +9 -0
  183. package/dashboard/.next/static/chunks/{7020.831e16e26d91abc1.js → 7020.b718b1b9cea36e60.js} +2 -2
  184. package/dashboard/.next/static/chunks/7107.1c5412197912b8ed.js +8 -0
  185. package/dashboard/.next/static/chunks/7498-7cf464d8af69cd0a.js +1 -0
  186. package/dashboard/.next/static/chunks/7508.dd60e2d06d149f5f.js +9 -0
  187. package/dashboard/.next/static/chunks/7524.0fde4c61553d1491.js +3 -0
  188. package/dashboard/.next/static/chunks/7802.f0134c792fccd382.js +80 -0
  189. package/dashboard/.next/static/chunks/7834-47f318a04a05688f.js +1 -0
  190. package/dashboard/.next/static/chunks/{7a04ac15.1c6cea694301806c.js → 7a04ac15.e49de94ece135900.js} +1 -1
  191. package/dashboard/.next/static/chunks/8216.1138ec313908a708.js +5 -0
  192. package/dashboard/.next/static/chunks/{8233babc.780b8e272eda298f.js → 8233babc.09872dcb3ff44064.js} +1 -1
  193. package/dashboard/.next/static/chunks/8317.d0b3eddef4cae0d5.js +1 -0
  194. package/dashboard/.next/static/chunks/838.2b2aa006519ba44c.js +10 -0
  195. package/dashboard/.next/static/chunks/8398.924fd8f4c83417c0.js +7 -0
  196. package/dashboard/.next/static/chunks/8428b36f.8ac4e67061c01307.js +34 -0
  197. package/dashboard/.next/static/chunks/8514.85ccbbea8ab21d04.js +5 -0
  198. package/dashboard/.next/static/chunks/8538.5f7ebe76c4b63162.js +1 -0
  199. package/dashboard/.next/static/chunks/8645.98a43217d406500e.js +1 -0
  200. package/dashboard/.next/static/chunks/8687.9406baa8b5601fd0.js +1 -0
  201. package/dashboard/.next/static/chunks/8721.47346e2cb6412376.js +10 -0
  202. package/dashboard/.next/static/chunks/8770.4f544bd1a6f03a62.js +8 -0
  203. package/dashboard/.next/static/chunks/8812.3d96fd54dba566f8.js +9 -0
  204. package/dashboard/.next/static/chunks/8962.d22aa67a97970dd8.js +1 -0
  205. package/dashboard/.next/static/chunks/8986.b327224b83f4399a.js +5 -0
  206. package/dashboard/.next/static/chunks/9173.a7160f7d0b685fa7.js +1 -0
  207. package/dashboard/.next/static/chunks/9178.998a8c49996de8e4.js +1 -0
  208. package/dashboard/.next/static/chunks/9271.5f66c19a8ee1ff36.js +10 -0
  209. package/dashboard/.next/static/chunks/9282.f8d01442bab4c0da.js +2 -0
  210. package/dashboard/.next/static/chunks/9366.0ec24a0791b9b00f.js +1 -0
  211. package/dashboard/.next/static/chunks/9466.a914ce0de7d3bb84.js +1 -0
  212. package/dashboard/.next/static/chunks/9660.b1c8deae2c449d14.js +1 -0
  213. package/dashboard/.next/static/chunks/9707.5cd7d2ee933a4af5.js +6 -0
  214. package/dashboard/.next/static/chunks/9716.15fffc0b0038601d.js +4 -0
  215. package/dashboard/.next/static/chunks/{9717.6cf5c8c89403b651.js → 9717.bba51b78ebd8fd29.js} +1 -1
  216. package/dashboard/.next/static/chunks/9720.d63a0696776bcc60.js +1 -0
  217. package/dashboard/.next/static/chunks/9791.e3b3f5a367f63c8a.js +1 -0
  218. package/dashboard/.next/static/chunks/9811.2993c4cbd28e8d1b.js +1 -0
  219. package/dashboard/.next/static/chunks/9820.8c1efad5260e8137.js +1 -0
  220. package/dashboard/.next/static/chunks/985.50150e9eaa4bde33.js +39 -0
  221. package/dashboard/.next/static/chunks/997.56901b86e1b8a87b.js +8 -0
  222. package/dashboard/.next/static/chunks/app/_not-found/page-5ff5d54b6fd6f17e.js +1 -0
  223. package/dashboard/.next/static/chunks/app/changes/page-f8a860034221cad4.js +1 -0
  224. package/dashboard/.next/static/chunks/app/issues/page-da4da93188c414a6.js +1 -0
  225. package/dashboard/.next/static/chunks/app/layout-27a9da4610423c1e.js +1 -0
  226. package/dashboard/.next/static/chunks/app/model/page-9680e22fdd6ddb81.js +1 -0
  227. package/dashboard/.next/static/chunks/app/page-0e67750d99fb2836.js +1 -0
  228. package/dashboard/.next/static/chunks/app/report/page-b56b1db9b9dcf2b6.js +1 -0
  229. package/dashboard/.next/static/chunks/app/review/page-3ef69f0e0badd333.js +1 -0
  230. package/dashboard/.next/static/chunks/{b7167ec1.7afbab6f609e3326.js → b7167ec1.708a3d61698ca2e6.js} +1 -1
  231. package/dashboard/.next/static/chunks/c75e29e3.d91220f782934d80.js +1 -0
  232. package/dashboard/.next/static/chunks/c7ea4e13.3073a2f551aa5ac8.js +1 -0
  233. package/dashboard/.next/static/chunks/framework-a117d81bf1b91f9a.js +33 -0
  234. package/dashboard/.next/static/chunks/main-9c95a7ffedc7afb4.js +1 -0
  235. package/dashboard/.next/static/chunks/main-app-5662c64b50ba40d1.js +1 -0
  236. package/dashboard/.next/static/chunks/pages/_app-308fef0bf9b328f2.js +1 -0
  237. package/dashboard/.next/static/chunks/pages/_error-c91b5eabd7ac9382.js +1 -0
  238. package/dashboard/.next/static/chunks/webpack-6da70e4f9fcf1799.js +1 -0
  239. package/dashboard/.next/static/css/ceafd91ca8dd753d.css +3 -0
  240. package/dashboard/.next/static/css/e4aad1f9c715b79a.css +1 -0
  241. package/dashboard/.next/static/media/39f449c8730c2295-s.woff2 +0 -0
  242. package/dashboard/.next/static/media/86f65e8637cc94e3-s.woff2 +0 -0
  243. package/dashboard/.next/static/media/8760c4774489e4ba-s.p.woff2 +0 -0
  244. package/dashboard/.next/static/media/9fabb9c65b63d798-s.woff2 +0 -0
  245. package/dashboard/.next/static/media/Assistant-Bold.c8f39f24.woff2 +0 -0
  246. package/dashboard/.next/static/media/Assistant-Medium.1e75d8e6.woff2 +0 -0
  247. package/dashboard/.next/static/media/Assistant-Regular.7acbabb8.woff2 +0 -0
  248. package/dashboard/.next/static/media/Assistant-SemiBold.167acbf8.woff2 +0 -0
  249. package/dashboard/.next/static/media/a1f87af3f44fadbb-s.woff2 +0 -0
  250. package/dashboard/.next/static/media/f9e1dbe9676d9bb6-s.woff2 +0 -0
  251. package/dashboard/app/api/code/route.ts +26 -20
  252. package/dashboard/app/api/comments/route.ts +158 -0
  253. package/dashboard/app/api/diagrams/[name]/export/route.ts +26 -0
  254. package/dashboard/app/api/diagrams/[name]/resolve/route.ts +25 -0
  255. package/dashboard/app/api/diagrams/[name]/route.ts +37 -0
  256. package/dashboard/app/api/figures/[name]/route.ts +15 -0
  257. package/dashboard/app/api/focus/route.ts +35 -0
  258. package/dashboard/app/api/invariants/[id]/route.ts +35 -0
  259. package/dashboard/app/api/issues/[id]/revert-auto/route.ts +18 -0
  260. package/dashboard/app/api/nav/route.ts +120 -0
  261. package/dashboard/app/api/palette/route.ts +68 -0
  262. package/dashboard/app/api/progress/route.ts +54 -23
  263. package/dashboard/app/api/xref/route.ts +30 -0
  264. package/dashboard/app/changes/ChangesClient.tsx +838 -0
  265. package/dashboard/app/changes/page.tsx +44 -0
  266. package/dashboard/app/excalidraw-assets/[...path]/route.ts +56 -0
  267. package/dashboard/app/globals.css +231 -77
  268. package/dashboard/app/issues/BoardClient.tsx +817 -0
  269. package/dashboard/app/issues/page.tsx +27 -272
  270. package/dashboard/app/layout.tsx +37 -10
  271. package/dashboard/app/model/ModelClient.tsx +1303 -0
  272. package/dashboard/app/model/page.tsx +98 -0
  273. package/dashboard/app/page.tsx +195 -239
  274. package/dashboard/app/report/ReportClient.tsx +147 -74
  275. package/dashboard/app/report/page.tsx +25 -14
  276. package/dashboard/app/review/ReviewClient.tsx +1180 -0
  277. package/dashboard/app/review/page.tsx +93 -0
  278. package/dashboard/components/AutoRefresh.tsx +22 -19
  279. package/dashboard/components/CodeComments.tsx +303 -0
  280. package/dashboard/components/CodeNav.tsx +523 -0
  281. package/dashboard/components/CodeReference.tsx +92 -99
  282. package/dashboard/components/CodeViewer.tsx +526 -0
  283. package/dashboard/components/CommandPalette.tsx +141 -66
  284. package/dashboard/components/DiagramCanvas.tsx +275 -0
  285. package/dashboard/components/DianeNote.tsx +244 -0
  286. package/dashboard/components/LiveStatus.tsx +30 -68
  287. package/dashboard/components/MarkdownRenderer.tsx +34 -32
  288. package/dashboard/components/RecordButton.tsx +132 -0
  289. package/dashboard/components/ui/Button.tsx +39 -0
  290. package/dashboard/components/ui/Chip.tsx +37 -0
  291. package/dashboard/components/ui/EmptyState.tsx +31 -0
  292. package/dashboard/components/ui/Icons.tsx +126 -0
  293. package/dashboard/components/ui/Inspector.tsx +122 -0
  294. package/dashboard/components/ui/Kbd.tsx +15 -0
  295. package/dashboard/components/ui/ListRow.tsx +92 -0
  296. package/dashboard/components/ui/LocalTime.tsx +14 -0
  297. package/dashboard/components/ui/ProgressRing.tsx +54 -0
  298. package/dashboard/components/ui/ResizeHandle.tsx +93 -0
  299. package/dashboard/components/ui/RiskMeter.tsx +27 -0
  300. package/dashboard/components/ui/SearchField.tsx +55 -0
  301. package/dashboard/components/ui/SegmentedControl.tsx +71 -0
  302. package/dashboard/components/ui/SeverityDot.tsx +57 -0
  303. package/dashboard/components/ui/Sidebar.tsx +236 -0
  304. package/dashboard/components/ui/SplitView.tsx +122 -0
  305. package/dashboard/components/ui/StateGlyph.tsx +66 -0
  306. package/dashboard/components/ui/Toast.tsx +91 -0
  307. package/dashboard/lib/api.ts +17 -0
  308. package/dashboard/lib/cn.ts +4 -0
  309. package/dashboard/lib/data.ts +2 -21
  310. package/dashboard/lib/finding-markdown.ts +1 -1
  311. package/dashboard/lib/focus.ts +42 -0
  312. package/dashboard/lib/hotkeys.ts +41 -0
  313. package/dashboard/lib/inline-markdown.test.ts +11 -0
  314. package/dashboard/lib/live.ts +32 -0
  315. package/dashboard/lib/pane-width.ts +36 -0
  316. package/dashboard/lib/server/board.ts +229 -0
  317. package/dashboard/lib/server/diagrams.ts +191 -0
  318. package/dashboard/lib/server/safe-path.ts +28 -0
  319. package/dashboard/lib/server/workspace.ts +113 -0
  320. package/dashboard/lib/server/xref.ts +42 -0
  321. package/dashboard/lib/solidity.test.ts +37 -0
  322. package/dashboard/lib/solidity.ts +191 -0
  323. package/dashboard/lib/source.ts +28 -0
  324. package/dashboard/lib/types.ts +164 -0
  325. package/dashboard/lib/url.ts +18 -0
  326. package/dashboard/lib/watcher.ts +31 -22
  327. package/dashboard/tailwind.config.ts +6 -3
  328. package/dist/analysis/code-model.d.ts +113 -0
  329. package/dist/analysis/code-model.d.ts.map +1 -0
  330. package/dist/analysis/code-model.js +532 -0
  331. package/dist/analysis/code-model.js.map +1 -0
  332. package/dist/analysis/diff.d.ts +75 -0
  333. package/dist/analysis/diff.d.ts.map +1 -0
  334. package/dist/analysis/diff.js +787 -0
  335. package/dist/analysis/diff.js.map +1 -0
  336. package/dist/commands/analyze.d.ts.map +1 -1
  337. package/dist/commands/analyze.js +25 -40
  338. package/dist/commands/analyze.js.map +1 -1
  339. package/dist/commands/claude.d.ts.map +1 -1
  340. package/dist/commands/claude.js +5 -0
  341. package/dist/commands/claude.js.map +1 -1
  342. package/dist/commands/dashboard.d.ts.map +1 -1
  343. package/dist/commands/dashboard.js +10 -2
  344. package/dist/commands/dashboard.js.map +1 -1
  345. package/dist/commands/diagram.d.ts +3 -0
  346. package/dist/commands/diagram.d.ts.map +1 -0
  347. package/dist/commands/diagram.js +71 -0
  348. package/dist/commands/diagram.js.map +1 -0
  349. package/dist/commands/diff.d.ts +25 -0
  350. package/dist/commands/diff.d.ts.map +1 -0
  351. package/dist/commands/diff.js +257 -0
  352. package/dist/commands/diff.js.map +1 -0
  353. package/dist/commands/doctor.d.ts.map +1 -1
  354. package/dist/commands/doctor.js +5 -18
  355. package/dist/commands/doctor.js.map +1 -1
  356. package/dist/commands/facts.d.ts +23 -0
  357. package/dist/commands/facts.d.ts.map +1 -0
  358. package/dist/commands/facts.js +121 -0
  359. package/dist/commands/facts.js.map +1 -0
  360. package/dist/commands/fix-review.d.ts +9 -0
  361. package/dist/commands/fix-review.d.ts.map +1 -0
  362. package/dist/commands/fix-review.js +367 -0
  363. package/dist/commands/fix-review.js.map +1 -0
  364. package/dist/commands/init.d.ts.map +1 -1
  365. package/dist/commands/init.js +106 -42
  366. package/dist/commands/init.js.map +1 -1
  367. package/dist/commands/issue.d.ts.map +1 -1
  368. package/dist/commands/issue.js +154 -5
  369. package/dist/commands/issue.js.map +1 -1
  370. package/dist/commands/mcp.d.ts +3 -0
  371. package/dist/commands/mcp.d.ts.map +1 -0
  372. package/dist/commands/mcp.js +11 -0
  373. package/dist/commands/mcp.js.map +1 -0
  374. package/dist/commands/model.d.ts +4 -0
  375. package/dist/commands/model.d.ts.map +1 -0
  376. package/dist/commands/model.js +275 -0
  377. package/dist/commands/model.js.map +1 -0
  378. package/dist/commands/note.d.ts.map +1 -1
  379. package/dist/commands/note.js +61 -3
  380. package/dist/commands/note.js.map +1 -1
  381. package/dist/commands/review.d.ts +4 -0
  382. package/dist/commands/review.d.ts.map +1 -0
  383. package/dist/commands/review.js +164 -0
  384. package/dist/commands/review.js.map +1 -0
  385. package/dist/core/comments.d.ts +59 -0
  386. package/dist/core/comments.d.ts.map +1 -0
  387. package/dist/core/comments.js +263 -0
  388. package/dist/core/comments.js.map +1 -0
  389. package/dist/core/config.d.ts +9 -0
  390. package/dist/core/config.d.ts.map +1 -1
  391. package/dist/core/config.js +18 -1
  392. package/dist/core/config.js.map +1 -1
  393. package/dist/core/dedup.d.ts +56 -0
  394. package/dist/core/dedup.d.ts.map +1 -0
  395. package/dist/core/dedup.js +208 -0
  396. package/dist/core/dedup.js.map +1 -0
  397. package/dist/core/errors.d.ts +1 -1
  398. package/dist/core/errors.d.ts.map +1 -1
  399. package/dist/core/errors.js +16 -15
  400. package/dist/core/errors.js.map +1 -1
  401. package/dist/core/external-tools.d.ts +0 -14
  402. package/dist/core/external-tools.d.ts.map +1 -1
  403. package/dist/core/external-tools.js +2 -52
  404. package/dist/core/external-tools.js.map +1 -1
  405. package/dist/core/fix-review.d.ts +54 -0
  406. package/dist/core/fix-review.d.ts.map +1 -0
  407. package/dist/core/fix-review.js +98 -0
  408. package/dist/core/fix-review.js.map +1 -0
  409. package/dist/core/fuzz-sync.d.ts +93 -0
  410. package/dist/core/fuzz-sync.d.ts.map +1 -0
  411. package/dist/core/fuzz-sync.js +516 -0
  412. package/dist/core/fuzz-sync.js.map +1 -0
  413. package/dist/core/git.d.ts +31 -0
  414. package/dist/core/git.d.ts.map +1 -0
  415. package/dist/core/git.js +157 -0
  416. package/dist/core/git.js.map +1 -0
  417. package/dist/core/issues.d.ts +35 -2
  418. package/dist/core/issues.d.ts.map +1 -1
  419. package/dist/core/issues.js +201 -30
  420. package/dist/core/issues.js.map +1 -1
  421. package/dist/core/mcp-config.d.ts +12 -0
  422. package/dist/core/mcp-config.d.ts.map +1 -0
  423. package/dist/core/mcp-config.js +29 -0
  424. package/dist/core/mcp-config.js.map +1 -0
  425. package/dist/core/model.d.ts +38 -0
  426. package/dist/core/model.d.ts.map +1 -0
  427. package/dist/core/model.js +160 -0
  428. package/dist/core/model.js.map +1 -0
  429. package/dist/core/notes.d.ts +27 -1
  430. package/dist/core/notes.d.ts.map +1 -1
  431. package/dist/core/notes.js +47 -5
  432. package/dist/core/notes.js.map +1 -1
  433. package/dist/core/review.d.ts +47 -0
  434. package/dist/core/review.d.ts.map +1 -1
  435. package/dist/core/review.js +177 -1
  436. package/dist/core/review.js.map +1 -1
  437. package/dist/core/rules.d.ts +12 -0
  438. package/dist/core/rules.d.ts.map +1 -0
  439. package/dist/core/rules.js +66 -0
  440. package/dist/core/rules.js.map +1 -0
  441. package/dist/core/schema.d.ts +5458 -2189
  442. package/dist/core/schema.d.ts.map +1 -1
  443. package/dist/core/schema.js +605 -114
  444. package/dist/core/schema.js.map +1 -1
  445. package/dist/core/scope.d.ts +8 -0
  446. package/dist/core/scope.d.ts.map +1 -0
  447. package/dist/core/scope.js +18 -0
  448. package/dist/core/scope.js.map +1 -0
  449. package/dist/core/skills.d.ts +10 -4
  450. package/dist/core/skills.d.ts.map +1 -1
  451. package/dist/core/skills.js +100 -37
  452. package/dist/core/skills.js.map +1 -1
  453. package/dist/diagrams/build.d.ts +18 -0
  454. package/dist/diagrams/build.d.ts.map +1 -0
  455. package/dist/diagrams/build.js +135 -0
  456. package/dist/diagrams/build.js.map +1 -0
  457. package/dist/diagrams/excalidraw.d.ts +27 -0
  458. package/dist/diagrams/excalidraw.d.ts.map +1 -0
  459. package/dist/diagrams/excalidraw.js +219 -0
  460. package/dist/diagrams/excalidraw.js.map +1 -0
  461. package/dist/diagrams/layout.d.ts +48 -0
  462. package/dist/diagrams/layout.d.ts.map +1 -0
  463. package/dist/diagrams/layout.js +686 -0
  464. package/dist/diagrams/layout.js.map +1 -0
  465. package/dist/facts/build.d.ts +23 -0
  466. package/dist/facts/build.d.ts.map +1 -0
  467. package/dist/facts/build.js +112 -0
  468. package/dist/facts/build.js.map +1 -0
  469. package/dist/facts/extract.d.ts +53 -0
  470. package/dist/facts/extract.d.ts.map +1 -0
  471. package/dist/facts/extract.js +635 -0
  472. package/dist/facts/extract.js.map +1 -0
  473. package/dist/facts/fallback.d.ts +7 -0
  474. package/dist/facts/fallback.d.ts.map +1 -0
  475. package/dist/facts/fallback.js +156 -0
  476. package/dist/facts/fallback.js.map +1 -0
  477. package/dist/facts/implementations.d.ts +29 -0
  478. package/dist/facts/implementations.d.ts.map +1 -0
  479. package/dist/facts/implementations.js +43 -0
  480. package/dist/facts/implementations.js.map +1 -0
  481. package/dist/facts/query.d.ts +35 -0
  482. package/dist/facts/query.d.ts.map +1 -0
  483. package/dist/facts/query.js +157 -0
  484. package/dist/facts/query.js.map +1 -0
  485. package/dist/facts/xref.d.ts +53 -0
  486. package/dist/facts/xref.d.ts.map +1 -0
  487. package/dist/facts/xref.js +282 -0
  488. package/dist/facts/xref.js.map +1 -0
  489. package/dist/index.js +16 -16
  490. package/dist/index.js.map +1 -1
  491. package/dist/mcp/server.d.ts +3 -0
  492. package/dist/mcp/server.d.ts.map +1 -0
  493. package/dist/mcp/server.js +400 -0
  494. package/dist/mcp/server.js.map +1 -0
  495. package/dist/skills/ai-audit/LICENSE +21 -0
  496. package/dist/skills/ai-audit/SKILL.md +486 -0
  497. package/dist/skills/ai-audit/UPSTREAM.md +51 -0
  498. package/dist/skills/ai-audit/references/agent-prompts.md +133 -0
  499. package/dist/skills/ai-audit/references/assemble.sh +357 -0
  500. package/dist/skills/ai-audit/references/dedup-and-assembly.md +420 -0
  501. package/dist/skills/ai-audit/references/hacking-agents/access-control-agent.md +27 -0
  502. package/dist/skills/ai-audit/references/hacking-agents/asymmetry-agent.md +77 -0
  503. package/dist/skills/ai-audit/references/hacking-agents/boundary-agent.md +79 -0
  504. package/dist/skills/ai-audit/references/hacking-agents/economic-security-agent.md +35 -0
  505. package/dist/skills/ai-audit/references/hacking-agents/execution-trace-agent.md +33 -0
  506. package/dist/skills/ai-audit/references/hacking-agents/first-principles-agent.md +36 -0
  507. package/dist/skills/ai-audit/references/hacking-agents/flow-gap-agent.md +49 -0
  508. package/dist/skills/ai-audit/references/hacking-agents/invariant-agent.md +44 -0
  509. package/dist/skills/ai-audit/references/hacking-agents/math-precision-agent.md +48 -0
  510. package/dist/skills/ai-audit/references/hacking-agents/numerical-gap-agent.md +46 -0
  511. package/dist/skills/ai-audit/references/hacking-agents/periphery-agent.md +27 -0
  512. package/dist/skills/ai-audit/references/hacking-agents/shared-rules.md +61 -0
  513. package/dist/skills/ai-audit/references/hacking-agents/trust-gap-agent.md +40 -0
  514. package/dist/skills/ai-audit/references/hex-board.md +211 -0
  515. package/dist/skills/ai-audit/references/hex-export.sh +71 -0
  516. package/dist/skills/ai-audit/references/judging.md +75 -0
  517. package/dist/skills/ai-audit/references/report-formatting.md +385 -0
  518. package/dist/skills/ai-audit/references/report-language.md +151 -0
  519. package/dist/skills/ai-audit/references/senior-auditor-sop.md +63 -0
  520. package/dist/skills/diane.md +26 -12
  521. package/dist/skills/fix-review.md +58 -0
  522. package/dist/skills/fuzz/LICENSE +21 -0
  523. package/dist/skills/fuzz/SKILL.md +655 -0
  524. package/dist/skills/fuzz/UPSTREAM.md +119 -0
  525. package/dist/skills/fuzz/agents/implementers/global-property-implementer.md +81 -0
  526. package/dist/skills/fuzz/agents/implementers/specific-property-implementer.md +121 -0
  527. package/dist/skills/fuzz/agents/invariant-discovery/adversarial-profit-maximizer.md +123 -0
  528. package/dist/skills/fuzz/agents/invariant-discovery/conservation-auditor.md +92 -0
  529. package/dist/skills/fuzz/agents/invariant-discovery/protocol-type-specialist.md +173 -0
  530. package/dist/skills/fuzz/agents/invariant-discovery/roundtrip-rounding-analyst.md +164 -0
  531. package/dist/skills/fuzz/agents/invariant-discovery/state-transition-mapper.md +92 -0
  532. package/dist/skills/fuzz/agents/invariant-discovery/synthesizer.md +261 -0
  533. package/dist/skills/fuzz/agents/protocol-analyzer.md +80 -0
  534. package/dist/skills/fuzz/agents/report-writer.md +135 -0
  535. package/dist/skills/fuzz/references/handler-patterns.md +222 -0
  536. package/dist/skills/fuzz/references/hex-invariants.md +102 -0
  537. package/dist/skills/fuzz/references/property-generation.md +149 -0
  538. package/dist/skills/fuzz/references/selection-policy.md +49 -0
  539. package/dist/skills/fuzz/references/setup-playbook.md +92 -0
  540. package/dist/skills/fuzz/references/template-map.md +121 -0
  541. package/dist/skills/fuzz/scripts/ensure_foundry.sh +125 -0
  542. package/dist/skills/fuzz/scripts/estimate_cost.js +157 -0
  543. package/dist/skills/fuzz/scripts/extract_abis.js +303 -0
  544. package/dist/skills/fuzz/scripts/fizz_sync.js +692 -0
  545. package/dist/skills/fuzz/scripts/generate_handlers.js +370 -0
  546. package/dist/skills/fuzz/scripts/generate_suite.js +254 -0
  547. package/dist/skills/fuzz/scripts/lib/log-viewer.js +332 -0
  548. package/dist/skills/fuzz/scripts/run_echidna.js +192 -0
  549. package/dist/skills/fuzz/scripts/run_medusa.js +329 -0
  550. package/dist/skills/fuzz/scripts/select_functions.js +637 -0
  551. package/dist/skills/fuzz/scripts/setup_fuzz_profile.sh +142 -0
  552. package/dist/skills/fuzz/templates/Actor.sol +63 -0
  553. package/dist/skills/fuzz/templates/Base.sol +121 -0
  554. package/dist/skills/fuzz/templates/FoundryTester.sol +29 -0
  555. package/dist/skills/fuzz/templates/FuzzTester.sol +11 -0
  556. package/dist/skills/fuzz/templates/Properties.sol +17 -0
  557. package/dist/skills/fuzz/templates/README.md +56 -0
  558. package/dist/skills/fuzz/templates/Snapshots.sol +26 -0
  559. package/dist/skills/fuzz/templates/echidna.yaml +18 -0
  560. package/dist/skills/fuzz/templates/handlers/Handlers.sol +13 -0
  561. package/dist/skills/fuzz/templates/medusa.json +93 -0
  562. package/dist/skills/fuzz/templates/utils/Clamp.sol +223 -0
  563. package/dist/skills/fuzz/templates/utils/DecimalPrinter.sol +63 -0
  564. package/dist/skills/fuzz/templates/utils/Deployer.sol +17 -0
  565. package/dist/skills/fuzz/templates/utils/EnumerableSet.sol +206 -0
  566. package/dist/skills/fuzz/templates/utils/Hevm.sol +62 -0
  567. package/dist/skills/fuzz/templates/utils/Logger.sol +619 -0
  568. package/dist/skills/fuzz/templates/utils/Math.sol +52 -0
  569. package/dist/skills/fuzz/templates/utils/MockERC20.sol +279 -0
  570. package/dist/skills/fuzz/templates/utils/PropertiesAsserts.sol +238 -0
  571. package/dist/skills/fuzz/templates/utils/StringUtils.sol +85 -0
  572. package/dist/skills/fuzz-convert/SKILL.md +249 -0
  573. package/dist/skills/fuzz-sync/SKILL.md +342 -0
  574. package/dist/skills/generate-poc.md +8 -26
  575. package/dist/skills/generate-report.md +24 -8
  576. package/dist/skills/ingest-aa-report.md +11 -30
  577. package/dist/skills/init-audit/SKILL.md +155 -0
  578. package/dist/skills/init-audit/references/agents/conformance-checker.md +36 -0
  579. package/dist/skills/init-audit/references/agents/contract-reader.md +59 -0
  580. package/dist/skills/init-audit/references/agents/diagram-composer.md +48 -0
  581. package/dist/skills/init-audit/references/agents/docs-extractor.md +26 -0
  582. package/dist/skills/init-audit/references/agents/prior-audit.md +32 -0
  583. package/dist/skills/init-audit/references/agents/regression-checker.md +28 -0
  584. package/dist/skills/init-audit/references/agents/skeptic.md +31 -0
  585. package/dist/skills/init-audit/references/agents/standards-checker.md +39 -0
  586. package/dist/skills/init-audit/references/agents/synthesizer.md +50 -0
  587. package/dist/skills/prevalidate.md +62 -0
  588. package/dist/skills/sync-issues.md +11 -25
  589. package/dist/skills/validate-all-findings.md +3 -3
  590. package/dist/skills/validate-finding.md +33 -28
  591. package/dist/skills/write-finding.md +6 -5
  592. package/dist/types/index.d.ts +22 -12
  593. package/dist/types/index.d.ts.map +1 -1
  594. package/package.json +6 -4
  595. package/dashboard/.next/server/app/_not-found.html +0 -1
  596. package/dashboard/.next/server/app/_not-found.meta +0 -6
  597. package/dashboard/.next/server/app/_not-found.rsc +0 -12
  598. package/dashboard/.next/server/app/access/page.js +0 -1
  599. package/dashboard/.next/server/app/access/page_client-reference-manifest.js +0 -1
  600. package/dashboard/.next/server/app/api/flows/route.js +0 -1
  601. package/dashboard/.next/server/app/api/mermaid/route.js +0 -1
  602. package/dashboard/.next/server/app/calls/page.js +0 -1
  603. package/dashboard/.next/server/app/calls/page_client-reference-manifest.js +0 -1
  604. package/dashboard/.next/server/app/conformance/page.js +0 -1
  605. package/dashboard/.next/server/app/conformance/page_client-reference-manifest.js +0 -1
  606. package/dashboard/.next/server/app/diagram/page.js +0 -1
  607. package/dashboard/.next/server/app/diagram/page.js.nft.json +0 -1
  608. package/dashboard/.next/server/app/diagram/page_client-reference-manifest.js +0 -1
  609. package/dashboard/.next/server/app/diagram.html +0 -1
  610. package/dashboard/.next/server/app/diagram.meta +0 -5
  611. package/dashboard/.next/server/app/diagram.rsc +0 -10
  612. package/dashboard/.next/server/app/flows/page.js +0 -1
  613. package/dashboard/.next/server/app/flows/page.js.nft.json +0 -1
  614. package/dashboard/.next/server/app/flows/page_client-reference-manifest.js +0 -1
  615. package/dashboard/.next/server/app/flows.html +0 -1
  616. package/dashboard/.next/server/app/flows.meta +0 -5
  617. package/dashboard/.next/server/app/flows.rsc +0 -10
  618. package/dashboard/.next/server/app/functions/page.js +0 -1
  619. package/dashboard/.next/server/app/functions/page.js.nft.json +0 -1
  620. package/dashboard/.next/server/app/functions/page_client-reference-manifest.js +0 -1
  621. package/dashboard/.next/server/app/notes/page.js +0 -22
  622. package/dashboard/.next/server/app/notes/page.js.nft.json +0 -1
  623. package/dashboard/.next/server/app/notes/page_client-reference-manifest.js +0 -1
  624. package/dashboard/.next/server/app/progress/page.js +0 -1
  625. package/dashboard/.next/server/app/progress/page.js.nft.json +0 -1
  626. package/dashboard/.next/server/app/progress/page_client-reference-manifest.js +0 -1
  627. package/dashboard/.next/server/app/stats/page.js +0 -1
  628. package/dashboard/.next/server/app/stats/page.js.nft.json +0 -1
  629. package/dashboard/.next/server/app/stats/page_client-reference-manifest.js +0 -1
  630. package/dashboard/.next/server/chunks/44.js +0 -1
  631. package/dashboard/.next/server/chunks/530.js +0 -1
  632. package/dashboard/.next/server/chunks/622.js +0 -3
  633. package/dashboard/.next/server/chunks/665.js +0 -13
  634. package/dashboard/.next/server/pages/404.html +0 -1
  635. package/dashboard/.next/static/AyrRAwu4mazjp8iX4Yjbb/_buildManifest.js +0 -1
  636. package/dashboard/.next/static/chunks/1015.3ab89142e5f44120.js +0 -226
  637. package/dashboard/.next/static/chunks/1151.b6ef5c786e587ed7.js +0 -1
  638. package/dashboard/.next/static/chunks/1199.a072929dbec89965.js +0 -148
  639. package/dashboard/.next/static/chunks/1375.d4d2f7fc9c9c2ff1.js +0 -43
  640. package/dashboard/.next/static/chunks/1799.83206776abbbf1fc.js +0 -9
  641. package/dashboard/.next/static/chunks/20154aaa.ccc347c04ab5ad4a.js +0 -1
  642. package/dashboard/.next/static/chunks/2077.7011a570c87aa7b1.js +0 -1
  643. package/dashboard/.next/static/chunks/2166.cc0fabeb2e89b840.js +0 -215
  644. package/dashboard/.next/static/chunks/2325.2c55cb9a6282ae3f.js +0 -24
  645. package/dashboard/.next/static/chunks/2694.92bbe252063e4786.js +0 -1
  646. package/dashboard/.next/static/chunks/275.0d761aa0e5b030b8.js +0 -34
  647. package/dashboard/.next/static/chunks/2781.8536b644a480aede.js +0 -93
  648. package/dashboard/.next/static/chunks/2805.a8d71d2f92bb6ba9.js +0 -1
  649. package/dashboard/.next/static/chunks/3017.e55781da9dd32d37.js +0 -1
  650. package/dashboard/.next/static/chunks/3205-728c260fbb4f89c6.js +0 -2
  651. package/dashboard/.next/static/chunks/3236.dff44fa7961d9d5e.js +0 -1
  652. package/dashboard/.next/static/chunks/3480.9451396ad7ee7613.js +0 -1
  653. package/dashboard/.next/static/chunks/3626.ba1cf848a9f2e93d.js +0 -64
  654. package/dashboard/.next/static/chunks/3865.a432a7910a2f5281.js +0 -90
  655. package/dashboard/.next/static/chunks/3887.c22cbfa3f095826c.js +0 -1
  656. package/dashboard/.next/static/chunks/3924-4a05057b5450abe1.js +0 -1
  657. package/dashboard/.next/static/chunks/3948.fe3c7d758568d98b.js +0 -287
  658. package/dashboard/.next/static/chunks/4728.07d87640a3e7dd0d.js +0 -24
  659. package/dashboard/.next/static/chunks/4787.4e5f6a0e0e40a583.js +0 -23
  660. package/dashboard/.next/static/chunks/5060.baca226af35ed016.js +0 -1
  661. package/dashboard/.next/static/chunks/5284.f949ac90c95ff143.js +0 -1
  662. package/dashboard/.next/static/chunks/5715.1524bcc9591e180b.js +0 -115
  663. package/dashboard/.next/static/chunks/6014.700ae4969b64d728.js +0 -104
  664. package/dashboard/.next/static/chunks/6024.4d23707c65514679.js +0 -79
  665. package/dashboard/.next/static/chunks/6177.e5c84cfc4c0dea51.js +0 -1
  666. package/dashboard/.next/static/chunks/618f8807-547c5614e1318888.js +0 -1
  667. package/dashboard/.next/static/chunks/6434.9481771c33195d29.js +0 -1
  668. package/dashboard/.next/static/chunks/6468.f4a3e8fa6accc6da.js +0 -77
  669. package/dashboard/.next/static/chunks/6540.86f367d7390738d4.js +0 -1
  670. package/dashboard/.next/static/chunks/6549.4d0d472df96429a5.js +0 -1
  671. package/dashboard/.next/static/chunks/690f35d0.3e40ca0930e4bbdb.js +0 -119
  672. package/dashboard/.next/static/chunks/7397-f6f4dddc7a20bfc1.js +0 -1
  673. package/dashboard/.next/static/chunks/7498-ea83cb9e30ec5491.js +0 -1
  674. package/dashboard/.next/static/chunks/7802.89aec9ee11680850.js +0 -80
  675. package/dashboard/.next/static/chunks/7973.8b526f589aca5d84.js +0 -79
  676. package/dashboard/.next/static/chunks/8216.1bead812eb126c35.js +0 -5
  677. package/dashboard/.next/static/chunks/8452-e616b5f43bceb95f.js +0 -13
  678. package/dashboard/.next/static/chunks/8645.a5ca76f11edc9633.js +0 -1
  679. package/dashboard/.next/static/chunks/8928-60c623ee89d2e6ad.js +0 -1
  680. package/dashboard/.next/static/chunks/9173.2486ffca31131ec5.js +0 -1
  681. package/dashboard/.next/static/chunks/9178.469341860bf8caec.js +0 -1
  682. package/dashboard/.next/static/chunks/9466.e904660d38c03eea.js +0 -1
  683. package/dashboard/.next/static/chunks/9660.84a85811380c5f33.js +0 -1
  684. package/dashboard/.next/static/chunks/9720.67d4d0d15a96d691.js +0 -1
  685. package/dashboard/.next/static/chunks/9811.65e1d080c2d256af.js +0 -1
  686. package/dashboard/.next/static/chunks/app/_not-found/page-548ab392d0e890d1.js +0 -1
  687. package/dashboard/.next/static/chunks/app/access/page-3668562e7464eb5d.js +0 -1
  688. package/dashboard/.next/static/chunks/app/calls/page-d07f5b8664cc8303.js +0 -1
  689. package/dashboard/.next/static/chunks/app/conformance/page-2fede1d7b5f9265d.js +0 -1
  690. package/dashboard/.next/static/chunks/app/diagram/page-b228444265546495.js +0 -1
  691. package/dashboard/.next/static/chunks/app/flows/page-fa67783d8cd79cab.js +0 -1
  692. package/dashboard/.next/static/chunks/app/functions/page-686f0296639133a3.js +0 -1
  693. package/dashboard/.next/static/chunks/app/issues/page-98a298e1c1045c91.js +0 -1
  694. package/dashboard/.next/static/chunks/app/layout-49f2496c7637d931.js +0 -1
  695. package/dashboard/.next/static/chunks/app/notes/page-17af94c67ba79c00.js +0 -1
  696. package/dashboard/.next/static/chunks/app/page-24bac51dfe007c66.js +0 -1
  697. package/dashboard/.next/static/chunks/app/progress/page-427fb18da3afb061.js +0 -1
  698. package/dashboard/.next/static/chunks/app/report/page-796f2f4a8a5ac8f7.js +0 -1
  699. package/dashboard/.next/static/chunks/app/stats/page-db81f600a086f252.js +0 -1
  700. package/dashboard/.next/static/chunks/c7ea4e13.5effeeba6618bdb7.js +0 -1
  701. package/dashboard/.next/static/chunks/framework-cf6f5bdca6ba0184.js +0 -33
  702. package/dashboard/.next/static/chunks/main-63ff429eab01f5bf.js +0 -1
  703. package/dashboard/.next/static/chunks/main-app-9d2f6b8a47133e9b.js +0 -1
  704. package/dashboard/.next/static/chunks/pages/_app-6ad2b50514c24ab4.js +0 -1
  705. package/dashboard/.next/static/chunks/pages/_error-d5eb11c5c4626811.js +0 -1
  706. package/dashboard/.next/static/chunks/webpack-08869f2b18792e51.js +0 -1
  707. package/dashboard/.next/static/css/4a38d8f6f6b7a68f.css +0 -3
  708. package/dashboard/.next/static/media/438aa629764e75f3-s.woff2 +0 -0
  709. package/dashboard/.next/static/media/4c9affa5bc8f420e-s.p.woff2 +0 -0
  710. package/dashboard/.next/static/media/51251f8b9793cdb3-s.woff2 +0 -0
  711. package/dashboard/.next/static/media/875ae681bfde4580-s.woff2 +0 -0
  712. package/dashboard/.next/static/media/cc978ac5ee68c2b6-s.woff2 +0 -0
  713. package/dashboard/.next/static/media/e857b654a2caa584-s.woff2 +0 -0
  714. package/dashboard/app/access/AccessClient.tsx +0 -402
  715. package/dashboard/app/access/ReadOnlyFunctions.tsx +0 -114
  716. package/dashboard/app/access/page.tsx +0 -125
  717. package/dashboard/app/api/flows/route.ts +0 -32
  718. package/dashboard/app/api/mermaid/route.ts +0 -25
  719. package/dashboard/app/calls/CallsClient.tsx +0 -170
  720. package/dashboard/app/calls/page.tsx +0 -57
  721. package/dashboard/app/conformance/ConformanceTable.tsx +0 -214
  722. package/dashboard/app/conformance/page.tsx +0 -186
  723. package/dashboard/app/diagram/page.tsx +0 -65
  724. package/dashboard/app/flows/page.tsx +0 -102
  725. package/dashboard/app/functions/FunctionsClient.tsx +0 -167
  726. package/dashboard/app/functions/page.tsx +0 -178
  727. package/dashboard/app/issues/IssuesBoardClient.tsx +0 -803
  728. package/dashboard/app/notes/NotesClient.tsx +0 -701
  729. package/dashboard/app/notes/page.tsx +0 -47
  730. package/dashboard/app/progress/ProgressClient.tsx +0 -354
  731. package/dashboard/app/progress/page.tsx +0 -127
  732. package/dashboard/app/stats/StatsClient.tsx +0 -452
  733. package/dashboard/app/stats/page.tsx +0 -50
  734. package/dashboard/components/ConfidenceBadge.tsx +0 -53
  735. package/dashboard/components/DashboardLayout.tsx +0 -485
  736. package/dashboard/components/FilterableTable.tsx +0 -293
  737. package/dashboard/components/MermaidViewer.tsx +0 -267
  738. package/dashboard/components/NotYetGenerated.tsx +0 -32
  739. package/dashboard/components/SeverityBadge.tsx +0 -28
  740. package/dashboard/components/SignalBars.tsx +0 -27
  741. package/dashboard/components/SortableTable.tsx +0 -122
  742. package/dashboard/lib/conformance-tokens.ts +0 -49
  743. package/dist/skills/init-audit.md +0 -284
  744. /package/dashboard/.next/server/app/api/{flows → xref}/route.js.nft.json +0 -0
  745. /package/dashboard/.next/server/app/{api/mermaid → excalidraw-assets/[...path]}/route.js.nft.json +0 -0
  746. /package/dashboard/.next/static/{AyrRAwu4mazjp8iX4Yjbb → bGV1ry1vvIbM5b506eVBR}/_ssgManifest.js +0 -0
@@ -0,0 +1,261 @@
1
+ # Agent 6: Property Synthesizer
2
+
3
+ **Role**: Merge outputs from 5 specialized invariant discovery agents into a consolidated property plan that maps to the fuzz harness architecture.
4
+
5
+ **Spawn config**: `general-purpose` agent, `model: "{AGENT_MODEL}"` (see SKILL.md "Subagent Model" section — defaults to `sonnet`, `opus` under `--max`). Spawned AFTER agents 1-5 complete.
6
+
7
+ ---
8
+
9
+ ## Prompt
10
+
11
+ You are the Property Synthesizer. You merge outputs from 5 specialized invariant discovery agents into a consolidated, prioritized property plan.
12
+
13
+ ## Your Inputs
14
+
15
+ Read the outputs from all 5 agents:
16
+ {AGENT_OUTPUTS}
17
+
18
+ Also read:
19
+ - (Hex) `{PROJECT_ROOT}/{META_DIR}/hex-invariants.json` — the auditor's accepted invariants. **They are the property list** (Step 0 below).
20
+ - (Hex) `{SKILL_PATH}/references/hex-invariants.md` — the `(INV-NNN)` tag format and how to propose an invariant.
21
+ - `{SUITE_DIR}/Base.sol` (current ghosts, actors, contract instances)
22
+ - `{SUITE_DIR}/Snapshots.sol` (current snapshot state)
23
+ - `{SUITE_DIR}/Properties.sol` (current property stubs)
24
+ - `{SUITE_DIR}/handlers/` (all handler files — to verify properties reference reachable operations)
25
+
26
+ ## Step 0 (Hex): Accepted Invariants Are The Property List
27
+
28
+ The auditor accepted the invariants in `hex-invariants.json`. Build the plan around them:
29
+
30
+ - Every accepted invariant becomes **exactly one** property: GL or SP, whichever checks it best. Its PROPERTIES.md entry carries the invariant's id right after the Spec ID: `- [ ] **GL-01** (INV-003) — …`. Merge every discovery-agent property that checks the same thing into it: keep the best sketch, ghosts and snapshot fields, and list the agents' IDs under `Sources`. Its description restates the invariant's statement in terms of harness state.
31
+ - Its Guarantee follows Step 4's rules: `SHOULD-HOLD` only with concrete evidence (a doc quote, a standard clause, an exact identity), otherwise `EXPLORATORY`. The auditor's acceptance alone is not evidence.
32
+ - If an accepted invariant cannot be checked from the harness at all (it needs off-chain state, unbounded iteration, …), still write its entry, mark it `[-]`, and say why in the description, so the auditor sees it is not fuzzed.
33
+ - Every other discovery-agent property, one that no accepted invariant covers, is a **proposal**, not a property. Do NOT put it in PROPERTIES.md or property-plan.md. Append it to `{PROJECT_ROOT}/.hex/model/invariants.json` as a proposed invariant, following "Proposing an invariant" in `hex-invariants.md` (read, append, write the whole file). Skip a candidate that restates an existing invariant of any status, rejected ones included.
34
+ - Upstream's non-mergeable and `[MANDATORY]` properties below stay standalone: when no accepted invariant covers one, it becomes its own proposal.
35
+
36
+ Steps 1-5 apply to the property set built this way; their rules are unchanged.
37
+
38
+ ## Step 1: Deduplication
39
+
40
+ Multiple agents may discover the same invariant from different angles.
41
+ Merge duplicates — keep the version with:
42
+ 1. More precise Solidity sketch
43
+ 2. Better rationale
44
+ 3. Higher priority
45
+
46
+ Mark merged properties with ALL source agent IDs: e.g., `Sources: CON-03, SPEC-01`
47
+
48
+ ### Non-Mergeable Properties
49
+
50
+ The following property IDs MUST survive deduplication as standalone properties.
51
+ They may NOT be merged into, dropped as "covered by," or replaced by other properties:
52
+ - V-06 (first depositor inflation) — NOT the same as zero-state safety
53
+ - C2 (repeated cycle dust extraction) — NOT the same as single round-trip or preview comparison
54
+ - Any property tagged [MANDATORY] in its source agent output
55
+
56
+ If an agent marked a property as MANDATORY, treat it as HIGH priority minimum
57
+ and preserve it as-is in the final plan.
58
+
59
+ ## Step 2: Feasibility Check
60
+
61
+ For each property, verify:
62
+ - The contracts/functions referenced actually exist in the codebase
63
+ - The state variables are accessible (public or have getters)
64
+ - The property can be computed with the available actors array from Base.sol
65
+ - Ghost variables and snapshot state needed are reasonable (no gas-heavy loops over unbounded data)
66
+
67
+ Remove infeasible properties. Mark borderline ones as MEDIUM priority.
68
+
69
+ ## Step 3: Prioritize
70
+
71
+ - **HIGH**: Conservation/solvency invariants, liveness tests, value extraction bounds, core economic guarantees.
72
+ - **MEDIUM**: Rounding direction, monotonicity, state transitions, type-specific templates.
73
+ - **LOW**: Edge cases, cosmetic state sync, view-function consistency.
74
+
75
+ ### Auto Mode: No Priority-Based Filtering
76
+
77
+ Priority labels (HIGH/MEDIUM/LOW) are retained for documentation, but ALL feasible
78
+ properties are included in the final plan regardless of priority. Do not drop or
79
+ comment-out LOW priority properties — implement them all.
80
+
81
+ The only valid reason to exclude a property is:
82
+ - It is infeasible (Step 2 — references nonexistent functions/state)
83
+ - It is a true duplicate (Step 1 — same assertion logic as another property, not just similar concept)
84
+
85
+ "Covered by another property" is NOT a valid exclusion reason unless the other property
86
+ checks the exact same assertion. Two properties that test related but different conditions
87
+ (e.g., zero-state safety vs first-depositor inflation) are NOT duplicates.
88
+
89
+ ## Step 4: Classify Properties
90
+
91
+ Each property gets **three** classifications: a **Scope** (where it runs), a **Category** (what kind of invariant it is), and a **Guarantee** (how confident we are it must hold).
92
+
93
+ ### Scope (implementation location)
94
+ - **GLOBAL**: Checked after every handler call — lives in Properties.sol as public functions. Must start with `property_` prefix.
95
+ - **SPECIFIC**: Checked after specific handlers — lives in Properties.sol as internal functions, called at the end of the relevant handler.
96
+
97
+ ### Category (what kind of invariant)
98
+
99
+ Assign every property exactly one of these four categories. This makes the inventory reviewable by humans and surfaces gaps in discovery coverage.
100
+
101
+ - **VALID_STATE** — A predicate that must hold *while the system is in a specific state*. Tied to a state machine or mode flag. Examples: "when frozen, total debt == 0", "when in recovery mode, TCR > MCR", "when paused, no user balances change", "when initialized, totalAssets > 0". Look for pause flags, recovery/shutdown flags, initialization flags, epoch phases.
102
+ - **STATE_TRANSITION** — A predicate about *edges of the state machine*: what must change (or must not) when the system moves between states, and which transitions are legal. Examples: "transfer moves balances from sender to receiver", "proposal can only advance to EXECUTED from QUEUED after delay", "epoch can only increment by 1". Look at state enums and which functions legally change them.
103
+ - **VARIABLE_TRANSITION** — A predicate about how a *specific variable* evolves over time, independent of operation type. Usually monotonicity or bounds. Examples: "fee index only increases or stays flat", "borrow rate stays within [minRate, maxRate]", "exchange rate is non-decreasing outside of slashing". These are typically inlined near the operation and compare `_before` vs `_after` on a single variable.
104
+ - **HIGH_LEVEL** — System-wide guarantees that combine multiple variables or roles. Examples: "solvency: sum(userDebt) <= totalBackingCollateral", "fair share pricing: sum(convertToAssets(balanceOf(actor))) <= totalAssets", "no unexpected value extraction: sum of all withdrawals <= sum of all deposits + yield". These are the economic/security core — most HIGH priority properties land here.
105
+
106
+ ### Classification rules
107
+ - Every property must receive **exactly one** category. If it spans two, pick the one that matches its primary assertion.
108
+ - `VALID_STATE` properties must name the triggering state predicate (e.g., `when paused`, `when shutdownInitiated`) in their description.
109
+ - `VARIABLE_TRANSITION` properties must name the specific variable they track.
110
+ - `HIGH_LEVEL` properties must involve at least two state variables or aggregate across actors/positions.
111
+ - Conservation and solvency invariants (`CON-*` from the Conservation Auditor) are almost always `HIGH_LEVEL`.
112
+ - Monotonicity findings (`ST-*` subset, `VT-*`) are almost always `VARIABLE_TRANSITION`.
113
+ - Pre/post entity count and "function X flips state to Y" findings from the State Transition Mapper are `STATE_TRANSITION`.
114
+ - If you cannot place a property into any of the four categories, it is likely too vague — rewrite it or drop it.
115
+
116
+ ### Category is orthogonal to Scope
117
+ A `VARIABLE_TRANSITION` property is often `SPECIFIC` (checked after the handler that mutates the variable) but can be `GLOBAL` if the invariant must hold after *any* call. A `HIGH_LEVEL` solvency invariant is almost always `GLOBAL`. A `VALID_STATE` invariant is almost always `GLOBAL` because the state it guards can be entered from many paths. Record both independently — do not try to collapse them.
118
+
119
+ ### Guarantee (confidence that the property must hold)
120
+
121
+ Each discovery agent tagged every property with a `GUARANTEE` (`SHOULD-HOLD` or `EXPLORATORY`) and, for SHOULD-HOLD, an `EVIDENCE` line. Carry that tag through to the final plan — it drives how a campaign triages a violation:
122
+
123
+ - **SHOULD-HOLD** — explicitly guaranteed by docs/spec/whitepaper, by a standard the contract implements, or by an exact mathematical/accounting identity. A violation is a **confirmed bug** that needs no further triage.
124
+ - **EXPLORATORY** — inferred from code/naming/DeFi patterns but not explicitly promised. A violation is a **lead flagged for human review**, not an automatic bug.
125
+
126
+ Validation rules when synthesizing:
127
+ - A property may keep `SHOULD-HOLD` only if its source carried a non-empty, concrete `EVIDENCE` (a doc quote, named standard clause, or identity). If the evidence line is missing, vague ("by design", "obviously"), or just restates the property, **downgrade it to EXPLORATORY**. Do not invent evidence.
128
+ - When merging duplicates from multiple agents: the merged property is `SHOULD-HOLD` if **any** source provided valid evidence; keep that source's evidence. Otherwise it is `EXPLORATORY`.
129
+ - Guarantee is independent of Priority and Category. A HIGH-priority `HIGH_LEVEL` solvency property is EXPLORATORY unless the docs/identity actually back it; a LOW-priority property can be SHOULD-HOLD.
130
+ - Preserve each SHOULD-HOLD property's evidence string — you will need it for `property-plan.md`.
131
+
132
+ ## Step 5: Ghost Variable & Snapshot Plan
133
+
134
+ Produce a consolidated plan:
135
+
136
+ ### Ghosts (for Base.sol Ghosts struct)
137
+ | Ghost Variable | Type | Updated In | Used By |
138
+ |----------------|------|-----------|---------|
139
+ | totalDeposited | uint256 | deposit handlers | CON-01, CON-03 |
140
+
141
+ ### Snapshot State (for Snapshots.sol State struct)
142
+ | State Variable | Type | Source | Used By |
143
+ |----------------|------|--------|---------|
144
+ | vaultTotalAssets | uint256 | vault.totalAssets() | ST-01, VT-03 |
145
+
146
+ ### Handler Wiring
147
+ | Handler | Needs snapshotBefore/After | Needs Ghost Updates | Calls Specific Properties |
148
+ |---------|---------------------------|--------------------|-----------------------|
149
+ | vault_deposit | YES | ghosts.totalDeposited += assets | property_depositIncreasesShares() |
150
+
151
+ **Round-trip handlers**: If a C2 (dust extraction) property is in the plan, the wiring
152
+ table MUST include a dedicated round-trip handler that performs deposit→withdraw (or
153
+ mint→redeem) in a single call and checks the C2 property at the end. The Solidity sketch
154
+ from the C2 property definition provides the handler template. This handler goes in the
155
+ vault/pool handler file alongside the other handlers.
156
+
157
+ ## Step 6: Write Property Plan AND PROPERTIES.md
158
+
159
+ You write **two** files:
160
+
161
+ 1. `{META_DIR}/property-plan.md` — implementation-facing artifact with ghost/snapshot/wiring tables (consumed by implementers in Step 9d).
162
+ 2. `{PROJECT_ROOT}/.hex/fuzz/PROPERTIES.md` — English-language spec with stable IDs and checkboxes (consumed by implementers and by the `/fuzz-convert` command). (Hex) One entry per accepted invariant, each tagged `(INV-NNN)`.
163
+
164
+ (Hex) You also append the proposals from Step 0 to `{PROJECT_ROOT}/.hex/model/invariants.json`.
165
+
166
+ ### PROPERTIES.md format
167
+
168
+ Assign every property a stable ID:
169
+ - Global properties: `GL-01`, `GL-02`, ...
170
+ - Specific properties: `SP-01`, `SP-02`, ...
171
+
172
+ IDs are assigned in the order they appear in this file and **must never be reused or renumbered** once written. The `/fuzz-convert` command and the implementers identify properties by these IDs.
173
+
174
+ Each entry contains: a `[ ]` checkbox (status — implementers flip to `[x]` when Solidity is written), the ID, (Hex) the `(INV-NNN)` it fuzzes, a 1–2 sentence English description, the **category** (VALID_STATE / STATE_TRANSITION / VARIABLE_TRANSITION / HIGH_LEVEL), the **guarantee** (SHOULD-HOLD / EXPLORATORY), the priority, the scope (always-on / after which handler), and the source agent IDs. For SHOULD-HOLD entries, append the evidence in parentheses after the tag so a reviewer can see *why* it is a guarantee.
175
+
176
+ Write to `{PROJECT_ROOT}/.hex/fuzz/PROPERTIES.md`:
177
+
178
+ ```markdown
179
+ # Properties
180
+
181
+ > Generated by the fuzz skill. Each property is described in English and has one
182
+ > of three states:
183
+ > - `[ ]` pending — not yet implemented; `/fuzz-convert` will pick it up
184
+ > - `[x]` implemented — Solidity exists in Properties.sol / handlers
185
+ > - `[-]` skipped / manual — `/fuzz-convert` will NOT touch it. Use this for TODO stubs,
186
+ > properties that need human judgment, or properties you add yourself later.
187
+ >
188
+ > Users may freely add their own entries (use any unused `GL-NN` / `SP-NN` ID) and mark
189
+ > them `[ ]` to have `/fuzz-convert` implement them, or `[-]` to leave them as a spec
190
+ > note only.
191
+ >
192
+ > IDs are stable. Do not renumber.
193
+ >
194
+ > **Hex.** Every entry fuzzes one accepted Hex invariant, named in parentheses after its ID
195
+ > (`**GL-01** (INV-003)`). `hex invariant sync-fuzz` maps campaign results back through that
196
+ > tag, so keep it. To track an entry of your own in Hex, add it as an invariant first and put
197
+ > its id after the Spec ID.
198
+ >
199
+ > **Guarantee tag.** Every property is tagged `SHOULD-HOLD` or `EXPLORATORY`:
200
+ > - `SHOULD-HOLD` — explicitly guaranteed by docs/spec/standard or an exact identity
201
+ > (evidence cited inline). If the campaign violates it, that is a **confirmed bug**.
202
+ > - `EXPLORATORY` — inferred, not explicitly promised. A violation is a **lead flagged
203
+ > for human review**, not an automatic bug.
204
+ >
205
+ > This tag is set at generation time so violations can be triaged without post-hoc
206
+ > severity guessing. If you edit a property's logic such that it is no longer guaranteed,
207
+ > change its tag to `EXPLORATORY`.
208
+
209
+ ## Global Properties
210
+ > Always-on invariants. Implemented as `public function property_*()` in `{SUITE_DIR}/Properties.sol`.
211
+
212
+ - [ ] **GL-01** (INV-001) — Solvency: the vault's underlying token balance is always at least `vault.totalAssets()`. (Category: HIGH_LEVEL; Guarantee: SHOULD-HOLD — whitepaper §4 "the vault never holds fewer assets than it accounts for"; Priority: HIGH; Sources: CON-01)
213
+ - [ ] **GL-02** (INV-002) — Sum of per-actor share balances equals `vault.totalSupply()`. (Category: HIGH_LEVEL; Guarantee: SHOULD-HOLD — exact accounting identity: every mint/burn updates both a balance and totalSupply; Priority: HIGH; Sources: CON-02)
214
+ - [ ] **GL-03** (INV-005) — Share price (`totalAssets/totalSupply`) is monotonically non-decreasing between handler calls. (Category: VARIABLE_TRANSITION; Guarantee: EXPLORATORY; Priority: MEDIUM; Sources: VT-02)
215
+ ...
216
+
217
+ ## Specific Properties
218
+ > Operation-gated postconditions. Implemented as `internal function property_*()` in `Properties.sol` and called from the relevant handler after `snapshotAfter()`.
219
+
220
+ - [ ] **SP-01** (INV-003) — After `vault_deposit`, `vault.totalSupply()` strictly increases. (Category: STATE_TRANSITION; Guarantee: SHOULD-HOLD — ERC-4626: `deposit` MUST mint shares to the receiver; After: `vault_deposit`; Priority: HIGH; Sources: ST-01)
221
+ - [ ] **SP-02** (INV-004) — After a deposit→withdraw round-trip in a single call, the actor's underlying balance does not increase (no free value). (Category: HIGH_LEVEL; Guarantee: EXPLORATORY; After: `vault_roundTrip`; Priority: HIGH; Sources: C2)
222
+ ...
223
+ ```
224
+
225
+ ### Category distribution guidance
226
+
227
+ A healthy property plan usually has at least one property in each category. If after synthesis you have zero `VALID_STATE` properties, re-check whether the protocol has pause/shutdown/recovery/initialization flags that should have generated some — a missing category is usually a gap in discovery, not a property-less protocol.
228
+
229
+ ### property-plan.md (unchanged structure, but now includes IDs)
230
+
231
+ When you write the existing tables in `{META_DIR}/property-plan.md`, prefix each property's row with its PROPERTIES.md ID so implementers can cross-reference. Keep the rest of the format identical:
232
+
233
+ ```markdown
234
+ # Property Plan
235
+
236
+ > Generated by 5 specialized discovery agents. X properties total.
237
+ > Priority distribution: N HIGH, N MEDIUM, N LOW
238
+
239
+ ## Global Properties (public, checked by fuzzer after every call)
240
+ | Spec ID | Function Name | Property | Category | Guarantee | Evidence | Priority |
241
+ |---------|--------------|----------|----------|-----------|----------|----------|
242
+ | GL-01 | property_solvency | token.balanceOf(vault) >= vault.totalAssets() | HIGH_LEVEL | SHOULD-HOLD | whitepaper §4 | HIGH |
243
+
244
+ ## Specific Properties (internal, called at end of relevant handlers)
245
+ | Spec ID | Function Name | Property | Category | Guarantee | Evidence | Called After | Priority |
246
+ |---------|--------------|----------|----------|-----------|----------|-------------|----------|
247
+ | SP-01 | property_depositIncreasesShares | totalSupply increased after deposit | STATE_TRANSITION | SHOULD-HOLD | ERC-4626 deposit clause | vault_deposit | HIGH |
248
+
249
+ (`Evidence` is the SHOULD-HOLD justification; leave it blank / `—` for EXPLORATORY rows.)
250
+
251
+ ## Ghost Variable Plan
252
+ [table from Step 5]
253
+
254
+ ## Snapshot State Plan
255
+ [table from Step 5]
256
+
257
+ ## Handler Wiring Plan
258
+ [table from Step 5]
259
+ ```
260
+
261
+ Return: `DONE: X properties (N HIGH, N MEDIUM, N LOW). Guarantee: P SHOULD-HOLD, Q EXPLORATORY. Categories: A VALID_STATE, B STATE_TRANSITION, C VARIABLE_TRANSITION, D HIGH_LEVEL. Ghosts: Y variables. Snapshot fields: Z. Handler wiring: W handlers. PROPERTIES.md written with G global + S specific entries (all [ ]) for A accepted invariants. Proposed: K new invariants (INV-…, …).`
@@ -0,0 +1,80 @@
1
+ # Agent: Protocol Analyzer (Step 3 Fallback)
2
+
3
+ **Role**: Perform manual protocol analysis when the Hex protocol model (`.hex/model/protocol.json`) is unavailable, and produce a `protocol-understanding.md` file that downstream steps (4, 6, 7, 9) can read back as their protocol context.
4
+
5
+ **Spawn config**: `general-purpose` agent, `model: "{AGENT_MODEL}"` (see SKILL.md "Subagent Model" section — defaults to `sonnet`, `opus` under `--max`). Spawned ONLY in the Step 3 fallback path when the project has no Hex protocol model.
6
+
7
+ ---
8
+
9
+ ## Prompt
10
+
11
+ You are executing the Step 3 fallback for the fuzz skill. This Hex project has no protocol model (`.hex/model/protocol.json`, which `/init-audit` writes), so you must perform manual protocol analysis from source code and write a `protocol-understanding.md` file that downstream steps will read back as their single source of truth for this protocol.
12
+
13
+ ## Your Inputs
14
+
15
+ - Read: `{PROJECT_ROOT}/{META_DIR}/contracts.json` — the in-scope contract inventory produced by Step 2.
16
+ - Read: all in-scope Solidity source files under `{PROJECT_ROOT}/src/` (or whichever directories are referenced by `contracts.json`).
17
+ - Read: any existing setup/fixture/deployment scripts under `{PROJECT_ROOT}/` that clarify deployment order or seed state.
18
+ - Read: protocol-specific helper contracts used by tests (mocks, oracles, etc.) when they clarify real dependencies vs. injected test doubles.
19
+ - Read (Hex): `{PROJECT_ROOT}/{META_DIR}/hex-invariants.json` — the auditor's accepted invariants. List them first under Candidate Invariants (by `INV-NNN`), then add your own.
20
+ - Use (Hex): `npx --no-install hex facts query <callers|callees|readers|writers|layout|linearization|entry-points|reach|function> [ref]` for exact entry points, callers and storage writers instead of guessing from grep. Always `npx --no-install hex`, never `npx hex`.
21
+
22
+ ## Your Output
23
+
24
+ Write `{PROJECT_ROOT}/{META_DIR}/protocol-understanding.md` with the following sections in this exact order. Downstream steps grep for these headings, so keep them stable.
25
+
26
+ ```markdown
27
+ # Protocol Understanding: {Protocol Name}
28
+
29
+ ## Summary
30
+ One paragraph describing what this protocol does, its core primitives, and the actor model. Keep it tight — downstream agents read this to orient themselves.
31
+
32
+ ## Deployment Order
33
+ Numbered list of the exact order contracts must be deployed and initialized, including any cross-contract dependencies (e.g. "OmniPool must be initialized before any OmniToken.initialize runs, because OmniToken's initialize reads omniPool.reserveReceiver()").
34
+
35
+ ## Constructor / Init Parameters
36
+ Per-contract table or sub-section listing every constructor/initialize parameter and what it means. Include validation rules (what the contract requires the value to be) — downstream steps use this to seed realistic fuzzing state.
37
+
38
+ ## Required Post-Deploy Initialization
39
+ Ordered list of admin/configurator calls that must happen before user-facing handlers will succeed. Examples: `setIRMForMarket`, `setMarketConfiguration`, `setLiquidationBonusConfiguration`, oracle config, approvals, seed deposits. Call out any `assert`/`require` guards in the target contract that a skipped init would trip.
40
+
41
+ ## Actor Roles and Permissioned Actions
42
+ Table mapping role → holder → permitted actions. Include contract-address-as-caller relationships (e.g. "only OmniPool can call OmniToken.borrow") — downstream handler generation depends on this.
43
+
44
+ ## Required Approvals, Liquidity, and Seed State
45
+ Bulleted list of everything the harness needs to do BEFORE any handler will produce useful state transitions. Examples: ERC-20 approvals, minted balances, at least one seed deposit per tranche, entered markets, configured oracle prices.
46
+
47
+ ## Real External Entry Points vs Internal Plumbing
48
+ Three sub-sections:
49
+ - **Real fuzzing targets**: user-callable state-changing functions that belong in handlers.
50
+ - **Admin / configurator**: privileged functions to call occasionally from an `asAdmin` handler.
51
+ - **Internal plumbing**: functions gated on contract-only callers or that are pure helpers — do NOT put these in handlers, they will always revert or do nothing.
52
+
53
+ ## Candidate Invariants
54
+ Numbered list of AT LEAST 15 candidate invariants in clear English, precise enough that Step 9 agents can turn them into Solidity assertions. Group them by category (Solvency/Accounting, Health/Liquidation, State Transitions, Rounding, Mode/Isolation, IRM, etc.) when the protocol naturally supports the split.
55
+
56
+ Each invariant should state WHAT must hold and WHY a violation would matter. Do not plan ghost variables or snapshot structs yet — Step 9 does that.
57
+ ```
58
+
59
+ ## Analysis Guidance
60
+
61
+ Follow these biases:
62
+
63
+ - **Prefer real code evidence over speculation.** If a guard is `msg.sender == omniPool`, say so; don't paraphrase it as "only admin".
64
+ - **Prefer existing project setup over invented harness logic.** If the project has a deployment script or test fixture that already sequences init, mirror that order.
65
+ - **Prefer conservative assumptions and targeted TODOs over broad guessing.** If something is ambiguous after reading the source, write `TODO: {specific question}` inline rather than making up an answer. Step 6/7 can resolve it later with more context.
66
+ - **Cite file paths and line numbers** in the rationale for candidate invariants when they point to a specific assertion or require statement. This makes Step 9 agents much more efficient because they can jump straight to the relevant code.
67
+
68
+ ## Scope Boundaries
69
+
70
+ Do NOT:
71
+ - Plan full ghost variable layouts, snapshot structs, or implementation details — that is Step 9's job.
72
+ - Write Solidity sketches for invariants — English descriptions are enough.
73
+ - Modify any files other than `{PROJECT_ROOT}/{META_DIR}/protocol-understanding.md`.
74
+ - Run `forge build`, `medusa fuzz`, or any other command — you are a pure analysis step.
75
+
76
+ ## Return Value
77
+
78
+ After writing the file, return a one-line summary to the caller:
79
+
80
+ `DONE: protocol-understanding.md written ({N} candidate invariants, {M} entry points identified, {K} post-deploy init steps).`
@@ -0,0 +1,135 @@
1
+ # Agent: Report Writer (Step 11)
2
+
3
+ **Role**: Read the completed fuzzing suite outputs (coverage, corpus, campaign logs, properties, handlers) and produce the final `report.md`. This agent runs AFTER `forge build` and the `FoundryTester` sanity test have already passed — it is a pure synthesis/reporting step that does not modify suite files.
4
+
5
+ **Spawn config**: `general-purpose` agent, `model: "{AGENT_MODEL}"` (see SKILL.md "Subagent Model" section — defaults to `sonnet`, `opus` under `--max`). Spawned at the end of Step 11 after validation succeeds.
6
+
7
+ ---
8
+
9
+ ## Prompt
10
+
11
+ You are writing the final fuzzing suite report. Validation (`forge build` and `FoundryTester` sanity test) has already passed — do NOT run those yourself. Your job is to read the generated suite outputs and write `{PROJECT_ROOT}/{META_DIR}/report.md` using the exact structure below. Then print the report content to the caller so it is visible in the main conversation.
12
+
13
+ ## Your Inputs
14
+
15
+ Read these files (skip gracefully if any are missing and write `N/A` in the corresponding report cell):
16
+
17
+ - `{PROJECT_ROOT}/{META_DIR}/protocol-understanding.md` — protocol context (for the Suite Overview name and contracts list)
18
+ - (Hex) `{PROJECT_ROOT}/.hex/config.json` (`project.name`) and `{PROJECT_ROOT}/.hex/model/protocol.json` — the protocol name and contracts when `protocol-understanding.md` does not exist (the usual case in a Hex project)
19
+ - `{PROJECT_ROOT}/{META_DIR}/contracts.json` — full contract inventory
20
+ - `{PROJECT_ROOT}/{META_DIR}/entry-point-selection.json` — the handlers' entry points
21
+ - `{PROJECT_ROOT}/{META_DIR}/coverage-targets.md` — coverage targets and achieved percentages from Step 8
22
+ - `{PROJECT_ROOT}/{META_DIR}/property-plan.md` — synthesized property plan from Step 9c
23
+ - `{PROJECT_ROOT}/.hex/fuzz/PROPERTIES.md` — English property spec with `[x]` / `[-]` implementation status
24
+ - `{PROJECT_ROOT}/{META_DIR}/corpus_medusa/medusa-run.log` — campaign log (read the last 200 lines if the file is large)
25
+ - `{PROJECT_ROOT}/{META_DIR}/corpus_medusa/test_results/` — per-test violation JSON files (list and summarize)
26
+ - `{PROJECT_ROOT}/{SUITE_DIR}/Properties.sol` — to enumerate implemented properties by function name
27
+ - `{PROJECT_ROOT}/{SUITE_DIR}/Base.sol` — for setup context (actors, ghosts)
28
+ - `{PROJECT_ROOT}/{SUITE_DIR}/handlers/` — list handler files with Glob, read each briefly for handler count
29
+ - `{PROJECT_ROOT}/{SUITE_DIR}/FoundryTester.sol` — for violation repro test results (look for `test_repro_*` functions and whether they passed validation)
30
+
31
+ If the paths above are wrong for this project (e.g. a different fuzzer was used, or files live under a different meta dir), adapt — prefer reading whatever exists over erroring out.
32
+
33
+ ## Report Structure
34
+
35
+ Write `{PROJECT_ROOT}/{META_DIR}/report.md` with these exact sections in this exact order. Downstream tooling and humans both scan for these headings.
36
+
37
+ ```markdown
38
+ # Fuzzing Suite Report
39
+
40
+ ## Suite Overview
41
+ - **Project**: {protocol name from protocol-understanding.md}
42
+ - **Suite location**: {SUITE_DIR, typically `test/fizz/`}
43
+ - **Contracts targeted**: {comma-separated list of in-scope contracts}
44
+ - **Total handlers**: {count} ({primary} primary, {secondary} secondary/dispatcher)
45
+ - **Properties**: {count} ({global} global, {specific} function-specific)
46
+
47
+ ## Coverage Results
48
+ | Contract | Target | Achieved | Status |
49
+ |----------|--------|----------|--------|
50
+ | ... | 80% | 85% | ✅ |
51
+ | ... | 80% | 71% | ⚠️ |
52
+ | ... | 80% | 47% | ❌ |
53
+
54
+ Status legend: ✅ if achieved ≥ target (or intentional skip), ⚠️ if within 10 points below target, ❌ if more than 10 points below target.
55
+
56
+ ## Skipped Paths
57
+ | Contract | Function / Path | Reason |
58
+ |----------|----------------|--------|
59
+ | ... | ... | ... |
60
+
61
+ Populate with contracts/functions that were intentionally excluded (mock substitutions, out-of-scope dependencies, admin-only paths not wired to handlers).
62
+
63
+ ## Campaign Results
64
+ - **Fuzzer used**: {Medusa/Echidna}
65
+ - **Duration**: {time}
66
+ - **Total calls**: {if available from log}
67
+ - **Branches hit**: {if available}
68
+ - **Corpus size**: {if available}
69
+ - **Violations found**: {count}
70
+
71
+ ### Violation Details
72
+ For each distinct violation root cause (NOT each reproduction), write a sub-section with:
73
+ - **Property violated**: {name} ({Spec ID}; Hex invariant: the `INV-NNN` in its PROPERTIES.md entry, or `none`)
74
+ - **Guarantee**: `SHOULD-HOLD` | `EXPLORATORY` (look up the violated property's tag in `PROPERTIES.md` by its Spec ID / function name)
75
+ - **Assertion**: {the exact check that failed}
76
+ - **Root cause**: {your best-guess explanation based on the reproducing call sequence}
77
+ - **Severity assessment**: `protocol bug` | `test harness false positive` | `needs human review`
78
+ - **Reproducing sequence**: {shrunk call sequence from the corpus}
79
+ - **Foundry repro**: `test_repro_{propertyName}` in `FoundryTester.sol` — `PASS` (violation reproduces) / `FAIL` (did not reproduce, see TODO in test) / `N/A` (no violations)
80
+
81
+ **Use the Guarantee tag to anchor the severity assessment** (after first ruling out a harness/property bug):
82
+ - A violated **SHOULD-HOLD** property means a documented or mathematically-guaranteed invariant broke → default to `protocol bug` unless the repro proves the assertion itself is wrong (then `test harness false positive`, with the fix).
83
+ - A violated **EXPLORATORY** property is an inferred assumption that did not hold → default to `needs human review`; only call it `protocol bug` when the root cause clearly shows real value loss / broken safety, and only `test harness false positive` when the inferred property was simply too strong (say so explicitly).
84
+
85
+ If multiple stored failures share the same root cause, group them under one sub-section and note the count.
86
+
87
+ ## Properties Implemented
88
+ | # | Property | Type | Guarantee | Confidence |
89
+ |---|----------|------|-----------|------------|
90
+ | ... | property_solvency | Global | SHOULD-HOLD | HIGH |
91
+ | ... | _prop_depositIncreasesShares | Specific | EXPLORATORY | MEDIUM |
92
+
93
+ Enumerate every property that appears in `Properties.sol` (both `property_*` global functions and `_prop_*` internal specifics).
94
+
95
+ `Guarantee` is the generation-time tag — copy it verbatim from `PROPERTIES.md` (`SHOULD-HOLD` / `EXPLORATORY`) by matching the property's Spec ID / function name; write `N/A` if the property is not in `PROPERTIES.md`. It records whether a violation would be a confirmed bug (SHOULD-HOLD) or a human-review lead (EXPLORATORY).
96
+
97
+ `Confidence` is your own assessment of how robustly the *assertion is written* (orthogonal to Guarantee) — HIGH/MEDIUM/LOW:
98
+
99
+ - **HIGH**: strict assertion, correct tolerance, exercises a meaningful invariant.
100
+ - **MEDIUM**: assertion is correct but has soft tolerances (e.g. `+1` wei slack, `110%` of cap), or does not cover all reachable actors.
101
+ - **LOW**: property is a stub that returns `true` without asserting anything, or the assertion is trivially satisfied.
102
+
103
+ If `PROPERTIES.md` exists, cross-reference implementation status: `[x]` implemented, `[-]` skipped/manual, `[ ]` pending.
104
+
105
+ ## Open TODOs
106
+ Scan the generated suite files under `{PROJECT_ROOT}/{SUITE_DIR}/` (Base.sol, Snapshots.sol, Properties.sol, all handler files) for `TODO` comments and list them with file:line references.
107
+
108
+ ## Next Steps
109
+ Actionable recommendations ordered by priority. At minimum, address:
110
+ 1. Any `test harness false positive` violations found in Campaign Results — specify the exact fix.
111
+ 2. Any LOW-confidence properties from the Properties Implemented table — specify how to strengthen them.
112
+ 3. Any contract with ❌ coverage status — specify which uncovered functions would most improve coverage.
113
+ 4. Any open TODO that blocks production readiness.
114
+ 5. Recommended campaign duration for production validation (current run vs. recommended).
115
+ ```
116
+
117
+ ## Writing Style
118
+
119
+ - Be precise with numbers. Do NOT invent figures. If a number is missing from the inputs, write `N/A` or `Not Available`.
120
+ - Keep the tone factual and terse — this is a report, not marketing. One-sentence bullets are usually enough.
121
+ - When you classify a violation as `test harness false positive`, cite the specific timing/rounding/accounting reason and propose the fix. Never classify a real protocol bug as a false positive.
122
+ - When you assign a property confidence level, cite the specific reason in a trailing note (e.g. "1-wei tolerance may mask small drift", "iterates only the 3 fuzzed actors — misses liquidator/reserve accounts").
123
+
124
+ ## After Writing the File
125
+
126
+ Also remind the user of the commands to run campaigns manually, exactly as SKILL.md Step 11 specifies:
127
+
128
+ - `medusa fuzz` (from project root)
129
+ - `echidna {SUITE_DIR}/FuzzTester.sol --contract FuzzTester --config echidna.yaml` (if echidna is configured)
130
+
131
+ ## Return Value
132
+
133
+ After writing the file, print the full report content to the caller (so the human sees it in the main conversation without needing to open the file), then return a one-line summary:
134
+
135
+ `DONE: report.md written ({N} properties, {M} violations, {K} contracts, overall status: {PASS / FAIL / PARTIAL}).`