@jinn-network/client 0.1.1 → 0.1.2-canary.d6e72dfd

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 (317) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/CONTRIBUTING.md +123 -0
  3. package/README.md +210 -37
  4. package/deployments/deployment-claim-registry-baseSepolia.json +13 -0
  5. package/deployments/deployment-jinn-testnet-faucet-baseSepolia-fast.json +15 -0
  6. package/dist/adapters/claim-registry/abi.d.ts +127 -0
  7. package/dist/adapters/claim-registry/abi.js +93 -0
  8. package/dist/adapters/claim-registry/abi.js.map +1 -0
  9. package/dist/adapters/claim-registry/client.d.ts +89 -0
  10. package/dist/adapters/claim-registry/client.js +205 -0
  11. package/dist/adapters/claim-registry/client.js.map +1 -0
  12. package/dist/adapters/mech/adapter.d.ts +1 -0
  13. package/dist/adapters/mech/adapter.js +75 -41
  14. package/dist/adapters/mech/adapter.js.map +1 -1
  15. package/dist/adapters/mech/contracts.d.ts +2 -0
  16. package/dist/adapters/mech/contracts.js +57 -7
  17. package/dist/adapters/mech/contracts.js.map +1 -1
  18. package/dist/adapters/mech/ipfs.d.ts +8 -0
  19. package/dist/adapters/mech/ipfs.js +12 -0
  20. package/dist/adapters/mech/ipfs.js.map +1 -1
  21. package/dist/adapters/mech/types.d.ts +20 -46
  22. package/dist/adapters/mech/types.js +16 -35
  23. package/dist/adapters/mech/types.js.map +1 -1
  24. package/dist/api/gather-status.d.ts +1 -0
  25. package/dist/api/gather-status.js +33 -1
  26. package/dist/api/gather-status.js.map +1 -1
  27. package/dist/api/portfolio-v0-build.d.ts +81 -0
  28. package/dist/api/portfolio-v0-build.js +141 -0
  29. package/dist/api/portfolio-v0-build.js.map +1 -0
  30. package/dist/api/portfolio-v0-doctor.d.ts +37 -0
  31. package/dist/api/portfolio-v0-doctor.js +123 -0
  32. package/dist/api/portfolio-v0-doctor.js.map +1 -0
  33. package/dist/api/rewards-build.js +1 -1
  34. package/dist/api/rewards-build.js.map +1 -1
  35. package/dist/api/status-build.d.ts +7 -0
  36. package/dist/api/status-build.js +1 -0
  37. package/dist/api/status-build.js.map +1 -1
  38. package/dist/bin/jinn-mcp.d.ts +0 -12
  39. package/dist/bin/jinn-mcp.js +5 -14
  40. package/dist/bin/jinn-mcp.js.map +1 -1
  41. package/dist/build-meta.json +1 -1
  42. package/dist/cli/commands/auth.js +115 -25
  43. package/dist/cli/commands/auth.js.map +1 -1
  44. package/dist/cli/commands/bootstrap.js +1 -0
  45. package/dist/cli/commands/bootstrap.js.map +1 -1
  46. package/dist/cli/commands/doctor.js +130 -14
  47. package/dist/cli/commands/doctor.js.map +1 -1
  48. package/dist/cli/commands/fleet-scale.js +1 -0
  49. package/dist/cli/commands/fleet-scale.js.map +1 -1
  50. package/dist/cli/commands/fund-requirements.js +2 -0
  51. package/dist/cli/commands/fund-requirements.js.map +1 -1
  52. package/dist/cli/commands/intents.d.ts +17 -0
  53. package/dist/cli/commands/intents.js +489 -0
  54. package/dist/cli/commands/intents.js.map +1 -0
  55. package/dist/cli/commands/keys-backup.js +13 -11
  56. package/dist/cli/commands/keys-backup.js.map +1 -1
  57. package/dist/cli/commands/mcp.d.ts +3 -0
  58. package/dist/cli/commands/mcp.js +19 -0
  59. package/dist/cli/commands/mcp.js.map +1 -0
  60. package/dist/cli/commands/plugin-install.js +8 -4
  61. package/dist/cli/commands/plugin-install.js.map +1 -1
  62. package/dist/cli/commands/quickstart.js +60 -4
  63. package/dist/cli/commands/quickstart.js.map +1 -1
  64. package/dist/cli/commands/rewards.js +27 -1
  65. package/dist/cli/commands/rewards.js.map +1 -1
  66. package/dist/cli/commands/submit-intent.js +108 -5
  67. package/dist/cli/commands/submit-intent.js.map +1 -1
  68. package/dist/cli/commands/version.js +1 -0
  69. package/dist/cli/commands/version.js.map +1 -1
  70. package/dist/cli/deployment-digest.js +5 -0
  71. package/dist/cli/deployment-digest.js.map +1 -1
  72. package/dist/cli/execution-context.js +1 -0
  73. package/dist/cli/execution-context.js.map +1 -1
  74. package/dist/cli/index.js +4 -0
  75. package/dist/cli/index.js.map +1 -1
  76. package/dist/cli/intent-registry-access.d.ts +64 -0
  77. package/dist/cli/intent-registry-access.js +187 -0
  78. package/dist/cli/intent-registry-access.js.map +1 -0
  79. package/dist/cli/introspection-context.js +1 -0
  80. package/dist/cli/introspection-context.js.map +1 -1
  81. package/dist/cli/password.d.ts +21 -9
  82. package/dist/cli/password.js +45 -24
  83. package/dist/cli/password.js.map +1 -1
  84. package/dist/config.d.ts +110 -8
  85. package/dist/config.js +41 -12
  86. package/dist/config.js.map +1 -1
  87. package/dist/daemon/creator.d.ts +7 -1
  88. package/dist/daemon/creator.js +38 -3
  89. package/dist/daemon/creator.js.map +1 -1
  90. package/dist/daemon/daemon.d.ts +43 -0
  91. package/dist/daemon/daemon.js +87 -2
  92. package/dist/daemon/daemon.js.map +1 -1
  93. package/dist/earning/bootstrap.d.ts +2 -1
  94. package/dist/earning/bootstrap.js +72 -4
  95. package/dist/earning/bootstrap.js.map +1 -1
  96. package/dist/earning/contracts.d.ts +10 -0
  97. package/dist/earning/contracts.js +24 -0
  98. package/dist/earning/contracts.js.map +1 -1
  99. package/dist/earning/jinn-rewards.d.ts +9 -0
  100. package/dist/earning/jinn-rewards.js +7 -0
  101. package/dist/earning/jinn-rewards.js.map +1 -1
  102. package/dist/intents/prediction-apy-v0-auto.d.ts +11 -0
  103. package/dist/intents/prediction-apy-v0-auto.js +46 -0
  104. package/dist/intents/prediction-apy-v0-auto.js.map +1 -0
  105. package/dist/intents/prediction-apy-v0-template.d.ts +8 -0
  106. package/dist/intents/prediction-apy-v0-template.js +22 -0
  107. package/dist/intents/prediction-apy-v0-template.js.map +1 -0
  108. package/dist/intents/prediction-v0-auto.d.ts +53 -0
  109. package/dist/intents/prediction-v0-auto.js +84 -0
  110. package/dist/intents/prediction-v0-auto.js.map +1 -0
  111. package/dist/intents/prediction-v0-template.d.ts +65 -0
  112. package/dist/intents/prediction-v0-template.js +125 -0
  113. package/dist/intents/prediction-v0-template.js.map +1 -0
  114. package/dist/main.js +149 -1
  115. package/dist/main.js.map +1 -1
  116. package/dist/mcp/operator-server.d.ts +1 -1
  117. package/dist/mcp/operator-server.js +1 -1
  118. package/dist/preflight/claude-auth.d.ts +12 -1
  119. package/dist/preflight/claude-auth.js +21 -3
  120. package/dist/preflight/claude-auth.js.map +1 -1
  121. package/dist/restorer/engine/canonical-json.d.ts +18 -0
  122. package/dist/restorer/engine/canonical-json.js +59 -0
  123. package/dist/restorer/engine/canonical-json.js.map +1 -0
  124. package/dist/restorer/engine/claim.d.ts +69 -0
  125. package/dist/restorer/engine/claim.js +104 -0
  126. package/dist/restorer/engine/claim.js.map +1 -0
  127. package/dist/restorer/engine/delivery.d.ts +52 -0
  128. package/dist/restorer/engine/delivery.js +63 -0
  129. package/dist/restorer/engine/delivery.js.map +1 -0
  130. package/dist/restorer/engine/engine.d.ts +203 -0
  131. package/dist/restorer/engine/engine.js +753 -0
  132. package/dist/restorer/engine/engine.js.map +1 -0
  133. package/dist/restorer/engine/manifest-assembly.d.ts +67 -0
  134. package/dist/restorer/engine/manifest-assembly.js +79 -0
  135. package/dist/restorer/engine/manifest-assembly.js.map +1 -0
  136. package/dist/restorer/engine/packaging.d.ts +87 -0
  137. package/dist/restorer/engine/packaging.js +350 -0
  138. package/dist/restorer/engine/packaging.js.map +1 -0
  139. package/dist/restorer/engine/persistence.d.ts +170 -0
  140. package/dist/restorer/engine/persistence.js +381 -0
  141. package/dist/restorer/engine/persistence.js.map +1 -0
  142. package/dist/restorer/engine/recovery.d.ts +22 -0
  143. package/dist/restorer/engine/recovery.js +24 -0
  144. package/dist/restorer/engine/recovery.js.map +1 -0
  145. package/dist/restorer/engine/registry.d.ts +62 -0
  146. package/dist/restorer/engine/registry.js +73 -0
  147. package/dist/restorer/engine/registry.js.map +1 -0
  148. package/dist/restorer/engine/signing.d.ts +30 -0
  149. package/dist/restorer/engine/signing.js +39 -0
  150. package/dist/restorer/engine/signing.js.map +1 -0
  151. package/dist/restorer/engine/state.d.ts +42 -0
  152. package/dist/restorer/engine/state.js +87 -0
  153. package/dist/restorer/engine/state.js.map +1 -0
  154. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.d.ts +64 -0
  155. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js +96 -0
  156. package/dist/restorer/impls/claude-mcp-hyperliquid/api-wallet.js.map +1 -0
  157. package/dist/restorer/impls/claude-mcp-hyperliquid/index.d.ts +101 -0
  158. package/dist/restorer/impls/claude-mcp-hyperliquid/index.js +710 -0
  159. package/dist/restorer/impls/claude-mcp-hyperliquid/index.js.map +1 -0
  160. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.d.ts +137 -0
  161. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js +865 -0
  162. package/dist/restorer/impls/claude-mcp-hyperliquid/mcp-tools.js.map +1 -0
  163. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.d.ts +74 -0
  164. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js +74 -0
  165. package/dist/restorer/impls/claude-mcp-hyperliquid/safety-rails.js.map +1 -0
  166. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.d.ts +97 -0
  167. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js +226 -0
  168. package/dist/restorer/impls/claude-mcp-hyperliquid/session-orchestrator.js.map +1 -0
  169. package/dist/restorer/impls/claude-mcp-prediction/index.d.ts +43 -0
  170. package/dist/restorer/impls/claude-mcp-prediction/index.js +230 -0
  171. package/dist/restorer/impls/claude-mcp-prediction/index.js.map +1 -0
  172. package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.d.ts +38 -0
  173. package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.js +135 -0
  174. package/dist/restorer/impls/claude-mcp-prediction/mcp-tools.js.map +1 -0
  175. package/dist/restorer/impls/claude-mcp-prediction/prompt.d.ts +8 -0
  176. package/dist/restorer/impls/claude-mcp-prediction/prompt.js +54 -0
  177. package/dist/restorer/impls/claude-mcp-prediction/prompt.js.map +1 -0
  178. package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.d.ts +36 -0
  179. package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.js +137 -0
  180. package/dist/restorer/impls/claude-mcp-prediction/session-orchestrator.js.map +1 -0
  181. package/dist/restorer/impls/claude-mcp-prediction/types.d.ts +82 -0
  182. package/dist/restorer/impls/claude-mcp-prediction/types.js +6 -0
  183. package/dist/restorer/impls/claude-mcp-prediction/types.js.map +1 -0
  184. package/dist/restorer/impls/legacy-claude/index.d.ts +45 -0
  185. package/dist/restorer/impls/legacy-claude/index.js +71 -0
  186. package/dist/restorer/impls/legacy-claude/index.js.map +1 -0
  187. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.d.ts +68 -0
  188. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js +117 -0
  189. package/dist/restorer/impls/portfolio-v0-evaluator/canonical-metrics.js.map +1 -0
  190. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.d.ts +49 -0
  191. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js +91 -0
  192. package/dist/restorer/impls/portfolio-v0-evaluator/checks/availability.js.map +1 -0
  193. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.d.ts +78 -0
  194. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js +274 -0
  195. package/dist/restorer/impls/portfolio-v0-evaluator/checks/consistency.js.map +1 -0
  196. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.d.ts +23 -0
  197. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js +49 -0
  198. package/dist/restorer/impls/portfolio-v0-evaluator/checks/eligibility.js.map +1 -0
  199. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.d.ts +25 -0
  200. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js +44 -0
  201. package/dist/restorer/impls/portfolio-v0-evaluator/checks/integrity.js.map +1 -0
  202. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.d.ts +17 -0
  203. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js +43 -0
  204. package/dist/restorer/impls/portfolio-v0-evaluator/checks/spec.js.map +1 -0
  205. package/dist/restorer/impls/portfolio-v0-evaluator/index.d.ts +43 -0
  206. package/dist/restorer/impls/portfolio-v0-evaluator/index.js +431 -0
  207. package/dist/restorer/impls/portfolio-v0-evaluator/index.js.map +1 -0
  208. package/dist/restorer/impls/portfolio-v0-evaluator/score.d.ts +21 -0
  209. package/dist/restorer/impls/portfolio-v0-evaluator/score.js +32 -0
  210. package/dist/restorer/impls/portfolio-v0-evaluator/score.js.map +1 -0
  211. package/dist/restorer/impls/portfolio-v0-evaluator/types.d.ts +32 -0
  212. package/dist/restorer/impls/portfolio-v0-evaluator/types.js +8 -0
  213. package/dist/restorer/impls/portfolio-v0-evaluator/types.js.map +1 -0
  214. package/dist/restorer/impls/prediction-apy-v0-baseline/index.d.ts +39 -0
  215. package/dist/restorer/impls/prediction-apy-v0-baseline/index.js +98 -0
  216. package/dist/restorer/impls/prediction-apy-v0-baseline/index.js.map +1 -0
  217. package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.d.ts +2 -0
  218. package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.js +7 -0
  219. package/dist/restorer/impls/prediction-apy-v0-baseline/strategy.js.map +1 -0
  220. package/dist/restorer/impls/prediction-apy-v0-baseline/types.d.ts +4 -0
  221. package/dist/restorer/impls/prediction-apy-v0-baseline/types.js +2 -0
  222. package/dist/restorer/impls/prediction-apy-v0-baseline/types.js.map +1 -0
  223. package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.d.ts +2 -0
  224. package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js +7 -0
  225. package/dist/restorer/impls/prediction-apy-v0-evaluator/canonical-metrics.js.map +1 -0
  226. package/dist/restorer/impls/prediction-apy-v0-evaluator/index.d.ts +39 -0
  227. package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js +186 -0
  228. package/dist/restorer/impls/prediction-apy-v0-evaluator/index.js.map +1 -0
  229. package/dist/restorer/impls/prediction-apy-v0-evaluator/score.d.ts +9 -0
  230. package/dist/restorer/impls/prediction-apy-v0-evaluator/score.js +20 -0
  231. package/dist/restorer/impls/prediction-apy-v0-evaluator/score.js.map +1 -0
  232. package/dist/restorer/impls/prediction-apy-v0-evaluator/types.d.ts +7 -0
  233. package/dist/restorer/impls/prediction-apy-v0-evaluator/types.js +2 -0
  234. package/dist/restorer/impls/prediction-apy-v0-evaluator/types.js.map +1 -0
  235. package/dist/restorer/impls/prediction-v0-baseline/index.d.ts +29 -0
  236. package/dist/restorer/impls/prediction-v0-baseline/index.js +94 -0
  237. package/dist/restorer/impls/prediction-v0-baseline/index.js.map +1 -0
  238. package/dist/restorer/impls/prediction-v0-baseline/strategy.d.ts +8 -0
  239. package/dist/restorer/impls/prediction-v0-baseline/strategy.js +41 -0
  240. package/dist/restorer/impls/prediction-v0-baseline/strategy.js.map +1 -0
  241. package/dist/restorer/impls/prediction-v0-baseline/types.d.ts +7 -0
  242. package/dist/restorer/impls/prediction-v0-baseline/types.js +2 -0
  243. package/dist/restorer/impls/prediction-v0-baseline/types.js.map +1 -0
  244. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.d.ts +20 -0
  245. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js +66 -0
  246. package/dist/restorer/impls/prediction-v0-evaluator/canonical-metrics.js.map +1 -0
  247. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.d.ts +9 -0
  248. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js +23 -0
  249. package/dist/restorer/impls/prediction-v0-evaluator/checks/availability.js.map +1 -0
  250. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.d.ts +3 -0
  251. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js +13 -0
  252. package/dist/restorer/impls/prediction-v0-evaluator/checks/eligibility.js.map +1 -0
  253. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.d.ts +7 -0
  254. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js +93 -0
  255. package/dist/restorer/impls/prediction-v0-evaluator/checks/integrity.js.map +1 -0
  256. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.d.ts +5 -0
  257. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js +20 -0
  258. package/dist/restorer/impls/prediction-v0-evaluator/checks/spec.js.map +1 -0
  259. package/dist/restorer/impls/prediction-v0-evaluator/index.d.ts +33 -0
  260. package/dist/restorer/impls/prediction-v0-evaluator/index.js +208 -0
  261. package/dist/restorer/impls/prediction-v0-evaluator/index.js.map +1 -0
  262. package/dist/restorer/impls/prediction-v0-evaluator/score.d.ts +8 -0
  263. package/dist/restorer/impls/prediction-v0-evaluator/score.js +15 -0
  264. package/dist/restorer/impls/prediction-v0-evaluator/score.js.map +1 -0
  265. package/dist/restorer/impls/prediction-v0-evaluator/types.d.ts +7 -0
  266. package/dist/restorer/impls/prediction-v0-evaluator/types.js +2 -0
  267. package/dist/restorer/impls/prediction-v0-evaluator/types.js.map +1 -0
  268. package/dist/restorer/types.d.ts +177 -0
  269. package/dist/restorer/types.js +7 -0
  270. package/dist/restorer/types.js.map +1 -0
  271. package/dist/store/store.d.ts +3 -1
  272. package/dist/store/store.js +3 -0
  273. package/dist/store/store.js.map +1 -1
  274. package/dist/types/desired-state.d.ts +53 -0
  275. package/dist/types/desired-state.js +20 -0
  276. package/dist/types/desired-state.js.map +1 -1
  277. package/dist/types/index.d.ts +4 -1
  278. package/dist/types/index.js +4 -1
  279. package/dist/types/index.js.map +1 -1
  280. package/dist/types/portfolio.d.ts +1000 -0
  281. package/dist/types/portfolio.js +168 -0
  282. package/dist/types/portfolio.js.map +1 -0
  283. package/dist/types/prediction-apy.d.ts +919 -0
  284. package/dist/types/prediction-apy.js +121 -0
  285. package/dist/types/prediction-apy.js.map +1 -0
  286. package/dist/types/prediction.d.ts +925 -0
  287. package/dist/types/prediction.js +140 -0
  288. package/dist/types/prediction.js.map +1 -0
  289. package/dist/venues/aave-v3/addresses.d.ts +6 -0
  290. package/dist/venues/aave-v3/addresses.js +19 -0
  291. package/dist/venues/aave-v3/addresses.js.map +1 -0
  292. package/dist/venues/aave-v3/client.d.ts +81 -0
  293. package/dist/venues/aave-v3/client.js +97 -0
  294. package/dist/venues/aave-v3/client.js.map +1 -0
  295. package/dist/venues/chainlink/client.d.ts +99 -0
  296. package/dist/venues/chainlink/client.js +130 -0
  297. package/dist/venues/chainlink/client.js.map +1 -0
  298. package/dist/venues/chainlink/feeds.d.ts +8 -0
  299. package/dist/venues/chainlink/feeds.js +9 -0
  300. package/dist/venues/chainlink/feeds.js.map +1 -0
  301. package/dist/venues/hyperliquid/account-value.d.ts +30 -0
  302. package/dist/venues/hyperliquid/account-value.js +30 -0
  303. package/dist/venues/hyperliquid/account-value.js.map +1 -0
  304. package/dist/venues/hyperliquid/client.d.ts +63 -0
  305. package/dist/venues/hyperliquid/client.js +135 -0
  306. package/dist/venues/hyperliquid/client.js.map +1 -0
  307. package/dist/venues/hyperliquid/grid.d.ts +36 -0
  308. package/dist/venues/hyperliquid/grid.js +61 -0
  309. package/dist/venues/hyperliquid/grid.js.map +1 -0
  310. package/dist/venues/hyperliquid/types.d.ts +81 -0
  311. package/dist/venues/hyperliquid/types.js +8 -0
  312. package/dist/venues/hyperliquid/types.js.map +1 -0
  313. package/dist/withdraw/run-withdraw-plan.js +2 -0
  314. package/dist/withdraw/run-withdraw-plan.js.map +1 -1
  315. package/docker-compose.yml +44 -0
  316. package/package.json +12 -1
  317. package/skills/jinn-operator/SKILL.md +85 -0
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Availability checks for portfolio.v0.eval — §7.4.
3
+ *
4
+ * availability.hyperliquid_reachable
5
+ * availability.hl_pre_snapshot_rederivable
6
+ * availability.hl_fills_rederivable
7
+ *
8
+ * FAIL in any of these → verdict INDETERMINATE per §7.3.
9
+ */
10
+ import { bracketGridPoints } from '../../../../venues/hyperliquid/grid.js';
11
+ // ── hyperliquid_reachable ─────────────────────────────────────────────────────
12
+ /**
13
+ * Wraps a HL API call that should succeed if HL is reachable.
14
+ *
15
+ * Returns PASS if the call completes without throwing, FAIL otherwise.
16
+ */
17
+ export function checkHlReachable(reachable, errorMsg) {
18
+ if (reachable) {
19
+ return { name: 'availability.hyperliquid_reachable', status: 'PASS' };
20
+ }
21
+ return {
22
+ name: 'availability.hyperliquid_reachable',
23
+ status: 'FAIL',
24
+ detail: errorMsg ?? 'Hyperliquid API is unreachable',
25
+ };
26
+ }
27
+ // ── hl_pre_snapshot_rederivable ───────────────────────────────────────────────
28
+ /**
29
+ * Check whether the pre-snapshot equity can be rederived from the portfolio
30
+ * grid. A bracket must exist around preTs.
31
+ *
32
+ * Returns PASS if a bracket is found, FAIL if the grid has no bracket.
33
+ */
34
+ export function checkPreSnapshotRederivable(grid, preTs) {
35
+ const bracket = bracketGridPoints(grid, preTs);
36
+ if (bracket !== null) {
37
+ return { name: 'availability.hl_pre_snapshot_rederivable', status: 'PASS' };
38
+ }
39
+ return {
40
+ name: 'availability.hl_pre_snapshot_rederivable',
41
+ status: 'FAIL',
42
+ detail: `No grid bracket found for preTs=${preTs}`,
43
+ };
44
+ }
45
+ // ── hl_fills_rederivable ──────────────────────────────────────────────────────
46
+ /**
47
+ * Check whether fills could be fetched without clamping.
48
+ *
49
+ * If startTimeClamped is true, HL silently moved the retention horizon and
50
+ * fills are incomplete — FAIL.
51
+ */
52
+ export function checkFillsRederivable(startTimeClamped) {
53
+ if (!startTimeClamped) {
54
+ return { name: 'availability.hl_fills_rederivable', status: 'PASS' };
55
+ }
56
+ return {
57
+ name: 'availability.hl_fills_rederivable',
58
+ status: 'FAIL',
59
+ detail: 'HL userFillsByTime startTime was clamped to retention horizon — fills are incomplete',
60
+ };
61
+ }
62
+ // ── Post-snapshot funding-accrual edge case ───────────────────────────────────
63
+ /**
64
+ * Check whether the post-snapshot is rederivable (no funding accrual issue).
65
+ *
66
+ * Per §7.5: if postSnapshot.capturedAt > endTs + 60s, emit SKIP and
67
+ * downstream consistency checks should be skipped → INDETERMINATE.
68
+ *
69
+ * This check is named availability.hl_post_snapshot_rederivable and uses
70
+ * SKIP status to propagate INDETERMINATE via the derivation rule (SKIP ≠ FAIL
71
+ * for availability — a FAIL would cause INDETERMINATE, but SKIP means we
72
+ * surface it separately).
73
+ *
74
+ * However, per §7.3 the derivation rule is:
75
+ * if any "availability.*" FAIL → INDETERMINATE
76
+ *
77
+ * A SKIP doesn't trigger INDETERMINATE via the rule, so the eval impl must
78
+ * handle this edge case explicitly by checking for SKIP in downstream checks.
79
+ */
80
+ export function checkPostSnapshotFundingAccrual(postCapturedAt, endTs) {
81
+ const threshold = endTs + 60_000; // 60 seconds
82
+ if (postCapturedAt > threshold) {
83
+ return {
84
+ name: 'availability.hl_post_snapshot_rederivable',
85
+ status: 'SKIP',
86
+ detail: `postSnapshot.capturedAt (${postCapturedAt}) > endTs+60s (${threshold}) — funding may have accrued`,
87
+ };
88
+ }
89
+ return { name: 'availability.hl_post_snapshot_rederivable', status: 'PASS' };
90
+ }
91
+ //# sourceMappingURL=availability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"availability.js","sourceRoot":"","sources":["../../../../../src/restorer/impls/portfolio-v0-evaluator/checks/availability.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAG3E,iFAAiF;AAEjF;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAkB,EAAE,QAAiB;IACpE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,IAAI,EAAE,oCAAoC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACxE,CAAC;IACD,OAAO;QACL,IAAI,EAAE,oCAAoC;QAC1C,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,QAAQ,IAAI,gCAAgC;KACrD,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAmB,EACnB,KAAa;IAEb,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,OAAO,EAAE,IAAI,EAAE,0CAA0C,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC9E,CAAC;IACD,OAAO;QACL,IAAI,EAAE,0CAA0C;QAChD,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,mCAAmC,KAAK,EAAE;KACnD,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,gBAAyB;IAC7D,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,mCAAmC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACvE,CAAC;IACD,OAAO;QACL,IAAI,EAAE,mCAAmC;QACzC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,sFAAsF;KAC/F,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,+BAA+B,CAC7C,cAAsB,EACtB,KAAa;IAEb,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC,CAAC,aAAa;IAC/C,IAAI,cAAc,GAAG,SAAS,EAAE,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,2CAA2C;YACjD,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,4BAA4B,cAAc,kBAAkB,SAAS,8BAA8B;SAC5G,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,2CAA2C,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Consistency checks for portfolio.v0.eval — §7.4.
3
+ *
4
+ * consistency.pre_snapshot
5
+ * consistency.post_snapshot
6
+ * consistency.fills (set match by tid; per-fill fields exact)
7
+ * consistency.gating.equity_return
8
+ * consistency.gating.max_drawdown
9
+ * consistency.gating.closed_trades
10
+ * consistency.gating.traded_notional
11
+ *
12
+ * FAIL in any consistency.* check → verdict FAIL per §7.3.
13
+ *
14
+ * Tolerance rules per §7.5:
15
+ * Snapshot decimal fields: 0.01% relative OR 0.0001 USD absolute (whichever greater)
16
+ * Per-fill HL fields: exact
17
+ * Fills set membership (by tid): exact
18
+ * equityReturnPct, maxDrawdownPct: 0.05% absolute
19
+ * closedTradesCount: exact
20
+ * tradedNotionalMultiple: 0.05% relative
21
+ */
22
+ import type { HlFill } from '../../../../venues/hyperliquid/types.js';
23
+ import type { Check } from '../types.js';
24
+ /**
25
+ * Extract the canonical accountValue from a snapshot payload.
26
+ *
27
+ * Supports two shapes:
28
+ * 1. Legacy: `{ marginSummary: { accountValue } }` (HL's raw clearinghouseState).
29
+ * 2. Unified (current restorer): `{ accountValue, clearinghouseState, spotClearinghouseState, ... }`
30
+ * — top-level `accountValue` is perps margin + spot USDC, matching HL's
31
+ * `portfolio` endpoint unified equity.
32
+ */
33
+ export declare function extractAccountValue(payload: unknown): number | null;
34
+ /**
35
+ * Check pre-snapshot consistency.
36
+ *
37
+ * Compares accountValue between claimed and rederived pre-snapshot.
38
+ * If either snapshot lacks a parseable accountValue, SKIP (not enough data).
39
+ */
40
+ export declare function checkPreSnapshot(claimedPayload: unknown, rederived: {
41
+ capturedAt: number;
42
+ payload: unknown;
43
+ } | null): Check;
44
+ /**
45
+ * Check post-snapshot consistency.
46
+ *
47
+ * Compares accountValue between claimed and rederived post-snapshot.
48
+ * If postSnapshot rederivation was skipped (funding accrual), SKIP.
49
+ */
50
+ export declare function checkPostSnapshot(claimedPayload: unknown, rederived: {
51
+ capturedAt: number;
52
+ payload: unknown;
53
+ } | null): Check;
54
+ /**
55
+ * Check fills consistency: set membership by tid (exact), and per-fill field
56
+ * equality for px, sz, time, fee, closedPnl.
57
+ */
58
+ export declare function checkFills(claimedFills: unknown[], rederived: HlFill[]): Check;
59
+ /**
60
+ * Check consistency of equityReturnPct (claimed vs rederived).
61
+ * Tolerance: 0.05% absolute.
62
+ */
63
+ export declare function checkGatingEquityReturn(claimed: string, rederived: number): Check;
64
+ /**
65
+ * Check consistency of maxDrawdownPct (claimed vs rederived).
66
+ * Tolerance: 0.05% absolute.
67
+ */
68
+ export declare function checkGatingMaxDrawdown(claimed: string, rederived: number): Check;
69
+ /**
70
+ * Check consistency of closedTradesCount (claimed vs rederived).
71
+ * Tolerance: exact.
72
+ */
73
+ export declare function checkGatingClosedTrades(claimed: number, rederived: number): Check;
74
+ /**
75
+ * Check consistency of tradedNotionalMultiple (claimed vs rederived).
76
+ * Tolerance: 0.05% relative.
77
+ */
78
+ export declare function checkGatingTradedNotional(claimed: string, rederived: number): Check;
@@ -0,0 +1,274 @@
1
+ /**
2
+ * Consistency checks for portfolio.v0.eval — §7.4.
3
+ *
4
+ * consistency.pre_snapshot
5
+ * consistency.post_snapshot
6
+ * consistency.fills (set match by tid; per-fill fields exact)
7
+ * consistency.gating.equity_return
8
+ * consistency.gating.max_drawdown
9
+ * consistency.gating.closed_trades
10
+ * consistency.gating.traded_notional
11
+ *
12
+ * FAIL in any consistency.* check → verdict FAIL per §7.3.
13
+ *
14
+ * Tolerance rules per §7.5:
15
+ * Snapshot decimal fields: 0.01% relative OR 0.0001 USD absolute (whichever greater)
16
+ * Per-fill HL fields: exact
17
+ * Fills set membership (by tid): exact
18
+ * equityReturnPct, maxDrawdownPct: 0.05% absolute
19
+ * closedTradesCount: exact
20
+ * tradedNotionalMultiple: 0.05% relative
21
+ */
22
+ // ── Tolerance helpers ─────────────────────────────────────────────────────────
23
+ const SNAPSHOT_REL_TOL = 0.0001; // 0.01%
24
+ const SNAPSHOT_ABS_TOL = 0.0001; // 0.0001 USD
25
+ const METRIC_ABS_TOL = 0.05; // 0.05% absolute (for equityReturnPct, maxDrawdownPct)
26
+ const NOTIONAL_REL_TOL = 0.0005; // 0.05% relative (for tradedNotionalMultiple)
27
+ /**
28
+ * Snapshot field comparison: 0.01% relative OR 0.0001 absolute, whichever is greater.
29
+ */
30
+ function snapshotFieldClose(claimed, rederived) {
31
+ const absDiff = Math.abs(claimed - rederived);
32
+ const relTol = Math.abs(claimed) * SNAPSHOT_REL_TOL;
33
+ const effectiveTol = Math.max(relTol, SNAPSHOT_ABS_TOL);
34
+ return absDiff <= effectiveTol;
35
+ }
36
+ // ── Snapshot checks ───────────────────────────────────────────────────────────
37
+ /**
38
+ * Extract the canonical accountValue from a snapshot payload.
39
+ *
40
+ * Supports two shapes:
41
+ * 1. Legacy: `{ marginSummary: { accountValue } }` (HL's raw clearinghouseState).
42
+ * 2. Unified (current restorer): `{ accountValue, clearinghouseState, spotClearinghouseState, ... }`
43
+ * — top-level `accountValue` is perps margin + spot USDC, matching HL's
44
+ * `portfolio` endpoint unified equity.
45
+ */
46
+ export function extractAccountValue(payload) {
47
+ if (payload !== null &&
48
+ typeof payload === 'object' &&
49
+ 'marginSummary' in payload) {
50
+ const ms = payload.marginSummary;
51
+ if (ms !== null && typeof ms === 'object' && 'accountValue' in ms) {
52
+ const val = parseFloat(String(ms.accountValue));
53
+ return isNaN(val) ? null : val;
54
+ }
55
+ }
56
+ // Also try direct accountValue field
57
+ if (payload !== null && typeof payload === 'object' && 'accountValue' in payload) {
58
+ const val = parseFloat(String(payload.accountValue));
59
+ return isNaN(val) ? null : val;
60
+ }
61
+ return null;
62
+ }
63
+ /**
64
+ * Check pre-snapshot consistency.
65
+ *
66
+ * Compares accountValue between claimed and rederived pre-snapshot.
67
+ * If either snapshot lacks a parseable accountValue, SKIP (not enough data).
68
+ */
69
+ export function checkPreSnapshot(claimedPayload, rederived) {
70
+ if (rederived === null) {
71
+ return {
72
+ name: 'consistency.pre_snapshot',
73
+ status: 'SKIP',
74
+ detail: 'Pre-snapshot rederivation was skipped (no grid bracket)',
75
+ };
76
+ }
77
+ const claimedValue = extractAccountValue(claimedPayload);
78
+ const rederivValue = extractAccountValue(rederived.payload);
79
+ if (claimedValue === null || rederivValue === null) {
80
+ return {
81
+ name: 'consistency.pre_snapshot',
82
+ status: 'SKIP',
83
+ detail: 'Could not extract accountValue from snapshot payload(s)',
84
+ };
85
+ }
86
+ if (snapshotFieldClose(claimedValue, rederivValue)) {
87
+ return { name: 'consistency.pre_snapshot', status: 'PASS' };
88
+ }
89
+ return {
90
+ name: 'consistency.pre_snapshot',
91
+ status: 'FAIL',
92
+ detail: {
93
+ claimed: claimedValue,
94
+ rederived: rederivValue,
95
+ absDiff: Math.abs(claimedValue - rederivValue),
96
+ },
97
+ };
98
+ }
99
+ /**
100
+ * Check post-snapshot consistency.
101
+ *
102
+ * Compares accountValue between claimed and rederived post-snapshot.
103
+ * If postSnapshot rederivation was skipped (funding accrual), SKIP.
104
+ */
105
+ export function checkPostSnapshot(claimedPayload, rederived) {
106
+ if (rederived === null) {
107
+ return {
108
+ name: 'consistency.post_snapshot',
109
+ status: 'SKIP',
110
+ detail: 'Post-snapshot rederivation was skipped',
111
+ };
112
+ }
113
+ const claimedValue = extractAccountValue(claimedPayload);
114
+ const rederivValue = extractAccountValue(rederived.payload);
115
+ if (claimedValue === null || rederivValue === null) {
116
+ return {
117
+ name: 'consistency.post_snapshot',
118
+ status: 'SKIP',
119
+ detail: 'Could not extract accountValue from snapshot payload(s)',
120
+ };
121
+ }
122
+ if (snapshotFieldClose(claimedValue, rederivValue)) {
123
+ return { name: 'consistency.post_snapshot', status: 'PASS' };
124
+ }
125
+ return {
126
+ name: 'consistency.post_snapshot',
127
+ status: 'FAIL',
128
+ detail: {
129
+ claimed: claimedValue,
130
+ rederived: rederivValue,
131
+ absDiff: Math.abs(claimedValue - rederivValue),
132
+ },
133
+ };
134
+ }
135
+ // ── Fills consistency ─────────────────────────────────────────────────────────
136
+ /**
137
+ * Check fills consistency: set membership by tid (exact), and per-fill field
138
+ * equality for px, sz, time, fee, closedPnl.
139
+ */
140
+ export function checkFills(claimedFills, rederived) {
141
+ const claimed = claimedFills;
142
+ // Set membership by tid — exact match required
143
+ const claimedTids = new Set(claimed.map((f) => f.tid));
144
+ const rederivTids = new Set(rederived.map((f) => f.tid));
145
+ const missingInRederived = [...claimedTids].filter((t) => !rederivTids.has(t));
146
+ const extraInRederived = [...rederivTids].filter((t) => !claimedTids.has(t));
147
+ if (missingInRederived.length > 0 || extraInRederived.length > 0) {
148
+ return {
149
+ name: 'consistency.fills',
150
+ status: 'FAIL',
151
+ detail: {
152
+ missingInRederived,
153
+ extraInRederived,
154
+ },
155
+ };
156
+ }
157
+ // Per-fill field equality (exact) for matching tids
158
+ const rederivMap = new Map(rederived.map((f) => [f.tid, f]));
159
+ const fieldMismatches = [];
160
+ const EXACT_FIELDS = ['px', 'sz', 'time', 'fee', 'closedPnl', 'coin', 'side'];
161
+ for (const fill of claimed) {
162
+ const re = rederivMap.get(fill.tid);
163
+ if (!re)
164
+ continue; // Already caught above
165
+ for (const field of EXACT_FIELDS) {
166
+ if (String(fill[field]) !== String(re[field])) {
167
+ fieldMismatches.push({
168
+ tid: fill.tid,
169
+ field,
170
+ claimed: fill[field],
171
+ rederived: re[field],
172
+ });
173
+ }
174
+ }
175
+ }
176
+ if (fieldMismatches.length > 0) {
177
+ return {
178
+ name: 'consistency.fills',
179
+ status: 'FAIL',
180
+ detail: { fieldMismatches: fieldMismatches.slice(0, 10) }, // cap output
181
+ };
182
+ }
183
+ return { name: 'consistency.fills', status: 'PASS' };
184
+ }
185
+ // ── Gating metric checks ──────────────────────────────────────────────────────
186
+ /**
187
+ * Check consistency of equityReturnPct (claimed vs rederived).
188
+ * Tolerance: 0.05% absolute.
189
+ */
190
+ export function checkGatingEquityReturn(claimed, rederived) {
191
+ const claimedNum = parseFloat(claimed);
192
+ if (isNaN(claimedNum)) {
193
+ return {
194
+ name: 'consistency.gating.equity_return',
195
+ status: 'FAIL',
196
+ detail: `claimed equityReturnPct is not a number: ${claimed}`,
197
+ };
198
+ }
199
+ if (Math.abs(claimedNum - rederived) <= METRIC_ABS_TOL) {
200
+ return { name: 'consistency.gating.equity_return', status: 'PASS' };
201
+ }
202
+ return {
203
+ name: 'consistency.gating.equity_return',
204
+ status: 'FAIL',
205
+ detail: { claimed: claimedNum, rederived, absDiff: Math.abs(claimedNum - rederived) },
206
+ };
207
+ }
208
+ /**
209
+ * Check consistency of maxDrawdownPct (claimed vs rederived).
210
+ * Tolerance: 0.05% absolute.
211
+ */
212
+ export function checkGatingMaxDrawdown(claimed, rederived) {
213
+ const claimedNum = parseFloat(claimed);
214
+ if (isNaN(claimedNum)) {
215
+ return {
216
+ name: 'consistency.gating.max_drawdown',
217
+ status: 'FAIL',
218
+ detail: `claimed maxDrawdownPct is not a number: ${claimed}`,
219
+ };
220
+ }
221
+ if (Math.abs(claimedNum - rederived) <= METRIC_ABS_TOL) {
222
+ return { name: 'consistency.gating.max_drawdown', status: 'PASS' };
223
+ }
224
+ return {
225
+ name: 'consistency.gating.max_drawdown',
226
+ status: 'FAIL',
227
+ detail: { claimed: claimedNum, rederived, absDiff: Math.abs(claimedNum - rederived) },
228
+ };
229
+ }
230
+ /**
231
+ * Check consistency of closedTradesCount (claimed vs rederived).
232
+ * Tolerance: exact.
233
+ */
234
+ export function checkGatingClosedTrades(claimed, rederived) {
235
+ if (claimed === rederived) {
236
+ return { name: 'consistency.gating.closed_trades', status: 'PASS' };
237
+ }
238
+ return {
239
+ name: 'consistency.gating.closed_trades',
240
+ status: 'FAIL',
241
+ detail: { claimed, rederived },
242
+ };
243
+ }
244
+ /**
245
+ * Check consistency of tradedNotionalMultiple (claimed vs rederived).
246
+ * Tolerance: 0.05% relative.
247
+ */
248
+ export function checkGatingTradedNotional(claimed, rederived) {
249
+ const claimedNum = parseFloat(claimed);
250
+ if (isNaN(claimedNum)) {
251
+ return {
252
+ name: 'consistency.gating.traded_notional',
253
+ status: 'FAIL',
254
+ detail: `claimed tradedNotionalMultiple is not a number: ${claimed}`,
255
+ };
256
+ }
257
+ // 0.05% relative tolerance
258
+ const absDiff = Math.abs(claimedNum - rederived);
259
+ const relTol = Math.abs(claimedNum) * NOTIONAL_REL_TOL;
260
+ if (absDiff <= Math.max(relTol, 1e-9)) {
261
+ return { name: 'consistency.gating.traded_notional', status: 'PASS' };
262
+ }
263
+ return {
264
+ name: 'consistency.gating.traded_notional',
265
+ status: 'FAIL',
266
+ detail: {
267
+ claimed: claimedNum,
268
+ rederived,
269
+ absDiff,
270
+ relTol,
271
+ },
272
+ };
273
+ }
274
+ //# sourceMappingURL=consistency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consistency.js","sourceRoot":"","sources":["../../../../../src/restorer/impls/portfolio-v0-evaluator/checks/consistency.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Eligibility checks for portfolio.v0.eval — §7.4.
3
+ *
4
+ * eligibility.min_closed_trades
5
+ * eligibility.min_traded_notional
6
+ *
7
+ * FAIL in any of these → verdict REJECTED per §7.3.
8
+ */
9
+ import type { Check } from '../types.js';
10
+ /**
11
+ * Check that the number of closed trades meets the minimum threshold.
12
+ *
13
+ * @param count Rederived closedTradesCount
14
+ * @param minRequired Minimum from intent.eligibility.minClosedTrades (default 20)
15
+ */
16
+ export declare function checkMinClosedTrades(count: number, minRequired: number): Check;
17
+ /**
18
+ * Check that the traded notional multiple meets the minimum threshold.
19
+ *
20
+ * @param multiple Rederived tradedNotionalMultiple
21
+ * @param minRequired Minimum from intent.eligibility.minTradedNotionalMultiple (default 5.0)
22
+ */
23
+ export declare function checkMinTradedNotional(multiple: number, minRequired: number): Check;
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Eligibility checks for portfolio.v0.eval — §7.4.
3
+ *
4
+ * eligibility.min_closed_trades
5
+ * eligibility.min_traded_notional
6
+ *
7
+ * FAIL in any of these → verdict REJECTED per §7.3.
8
+ */
9
+ // ── min_closed_trades ─────────────────────────────────────────────────────────
10
+ /**
11
+ * Check that the number of closed trades meets the minimum threshold.
12
+ *
13
+ * @param count Rederived closedTradesCount
14
+ * @param minRequired Minimum from intent.eligibility.minClosedTrades (default 20)
15
+ */
16
+ export function checkMinClosedTrades(count, minRequired) {
17
+ if (count >= minRequired) {
18
+ return { name: 'eligibility.min_closed_trades', status: 'PASS' };
19
+ }
20
+ return {
21
+ name: 'eligibility.min_closed_trades',
22
+ status: 'FAIL',
23
+ detail: {
24
+ required: minRequired,
25
+ actual: count,
26
+ },
27
+ };
28
+ }
29
+ // ── min_traded_notional ───────────────────────────────────────────────────────
30
+ /**
31
+ * Check that the traded notional multiple meets the minimum threshold.
32
+ *
33
+ * @param multiple Rederived tradedNotionalMultiple
34
+ * @param minRequired Minimum from intent.eligibility.minTradedNotionalMultiple (default 5.0)
35
+ */
36
+ export function checkMinTradedNotional(multiple, minRequired) {
37
+ if (multiple >= minRequired) {
38
+ return { name: 'eligibility.min_traded_notional', status: 'PASS' };
39
+ }
40
+ return {
41
+ name: 'eligibility.min_traded_notional',
42
+ status: 'FAIL',
43
+ detail: {
44
+ required: minRequired,
45
+ actual: multiple,
46
+ },
47
+ };
48
+ }
49
+ //# sourceMappingURL=eligibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eligibility.js","sourceRoot":"","sources":["../../../../../src/restorer/impls/portfolio-v0-evaluator/checks/eligibility.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,iFAAiF;AAEjF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa,EAAE,WAAmB;IACrE,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC;QACzB,OAAO,EAAE,IAAI,EAAE,+BAA+B,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACnE,CAAC;IACD,OAAO;QACL,IAAI,EAAE,+BAA+B;QACrC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE;YACN,QAAQ,EAAE,WAAW;YACrB,MAAM,EAAE,KAAK;SACd;KACF,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB,EAAE,WAAmB;IAC1E,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,iCAAiC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IACrE,CAAC;IACD,OAAO;QACL,IAAI,EAAE,iCAAiC;QACvC,MAAM,EAAE,MAAM;QACd,MAAM,EAAE;YACN,QAAQ,EAAE,WAAW;YACrB,MAAM,EAAE,QAAQ;SACjB;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Integrity checks for portfolio.v0.eval — §7.4.
3
+ *
4
+ * impl-declared:
5
+ * integrity.window_bounds (pre.capturedAt >= startTs, post.capturedAt >= endTs)
6
+ *
7
+ * engine-prepended (NOT this impl's job):
8
+ * integrity.signature
9
+ * integrity.intent_ref
10
+ * integrity.onchain_anchor
11
+ *
12
+ * FAIL in any integrity.* check → verdict FAIL per §7.3.
13
+ */
14
+ import type { Check } from '../types.js';
15
+ /**
16
+ * Check that snapshot timestamps are within the declared window bounds.
17
+ *
18
+ * Per §7.4:
19
+ * pre.capturedAt >= startTs
20
+ * post.capturedAt >= endTs
21
+ *
22
+ * (The restorer should have captured these at the right times, so a violation
23
+ * indicates the manifest was produced outside the valid window.)
24
+ */
25
+ export declare function checkWindowBounds(preCapturedAt: number, postCapturedAt: number, startTs: number, endTs: number): Check;
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Integrity checks for portfolio.v0.eval — §7.4.
3
+ *
4
+ * impl-declared:
5
+ * integrity.window_bounds (pre.capturedAt >= startTs, post.capturedAt >= endTs)
6
+ *
7
+ * engine-prepended (NOT this impl's job):
8
+ * integrity.signature
9
+ * integrity.intent_ref
10
+ * integrity.onchain_anchor
11
+ *
12
+ * FAIL in any integrity.* check → verdict FAIL per §7.3.
13
+ */
14
+ // ── window_bounds ─────────────────────────────────────────────────────────────
15
+ /**
16
+ * Check that snapshot timestamps are within the declared window bounds.
17
+ *
18
+ * Per §7.4:
19
+ * pre.capturedAt >= startTs
20
+ * post.capturedAt >= endTs
21
+ *
22
+ * (The restorer should have captured these at the right times, so a violation
23
+ * indicates the manifest was produced outside the valid window.)
24
+ */
25
+ export function checkWindowBounds(preCapturedAt, postCapturedAt, startTs, endTs) {
26
+ const preOk = preCapturedAt >= startTs;
27
+ const postOk = postCapturedAt >= endTs;
28
+ if (preOk && postOk) {
29
+ return { name: 'integrity.window_bounds', status: 'PASS' };
30
+ }
31
+ const violations = [];
32
+ if (!preOk) {
33
+ violations.push(`pre.capturedAt (${preCapturedAt}) < startTs (${startTs})`);
34
+ }
35
+ if (!postOk) {
36
+ violations.push(`post.capturedAt (${postCapturedAt}) < endTs (${endTs})`);
37
+ }
38
+ return {
39
+ name: 'integrity.window_bounds',
40
+ status: 'FAIL',
41
+ detail: violations.join('; '),
42
+ };
43
+ }
44
+ //# sourceMappingURL=integrity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integrity.js","sourceRoot":"","sources":["../../../../../src/restorer/impls/portfolio-v0-evaluator/checks/integrity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,iFAAiF;AAEjF;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,aAAqB,EACrB,cAAsB,EACtB,OAAe,EACf,KAAa;IAEb,MAAM,KAAK,GAAG,aAAa,IAAI,OAAO,CAAC;IACvC,MAAM,MAAM,GAAG,cAAc,IAAI,KAAK,CAAC;IAEvC,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC7D,CAAC;IAED,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,UAAU,CAAC,IAAI,CACb,mBAAmB,aAAa,gBAAgB,OAAO,GAAG,CAC3D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,UAAU,CAAC,IAAI,CACb,oBAAoB,cAAc,cAAc,KAAK,GAAG,CACzD,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;KAC9B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Spec checks for portfolio.v0.eval — §7.4.
3
+ *
4
+ * spec.equity_return_target
5
+ * spec.max_drawdown_constraint
6
+ *
7
+ * FAIL in any spec.* check → verdict FAIL per §7.3.
8
+ */
9
+ import type { Check } from '../types.js';
10
+ /**
11
+ * Check that rederived equityReturnPct >= intent spec's minReturnPct.
12
+ */
13
+ export declare function checkEquityReturnTarget(equityReturnPct: number, minReturnPct: number): Check;
14
+ /**
15
+ * Check that rederived maxDrawdownPct <= intent spec's maxDrawdownPct constraint.
16
+ */
17
+ export declare function checkMaxDrawdownConstraint(maxDrawdownPct: number, maxAllowed: number): Check;