Skip to content
Crifine

Changelog

What actually shipped, newest first. Nothing on the roadmap is listed here until it is live.

2026-09-05 — Sizing backwards, sequential fills, scoped budgets, and four new screens

  • Added maxSizeFor() to `@crifine/sdk` — the ladder walk run backwards. Give it the gap you can live with and it returns the largest size that stays inside it. Asking "what does this size cost?" over and over until the answer is tolerable is the same question asked the expensive way.
  • Added simulateOrders() — a sequence of orders against one book, in order. Every other estimate answers for a single order against an untouched ladder, and real execution rarely looks like that: each leg pays for the legs before it. Costing the legs independently is the flattering version, and the one that surprises you at settlement.
  • Added validateLadder() and assertLadder(). Cumulative depth passed where incremental is expected does not throw — it quietly returns a better number than reality. It is now caught at the boundary instead of believed.
  • Added allPools() to the typed client: cursor pagination as an async iterator, with a guard that stops rather than spinning forever if a cursor ever repeats.
  • Added scoped budgets to `@crifine/x402` — withBudget(maxTotal) hands one task its own ceiling. The child settles through the parent, so both ledgers move together and the parent limit stays real. A child may tighten maxPerCall but never loosen it: a bound the callee can raise is not a bound.
  • Added dry-run mode and onRefusal to the x402 wrapper — see what a run would have spent, and why a call was refused, without spending anything.
  • Added crifine size, crifine ladder and crifine simulate to the CLI. simulate --sizes 500k,500k,1m exits 2 when the sequence walks past the observed book — the same distinction the rest of the tooling draws: unmeasured is not expensive.
  • Added fragility board, stress window and depth decay screens to the app. The hosted endpoints behind the last two are still roadmap — what shipped is the view, on preview data, which is the honest half of the pair.
  • Added charts for the slippage curve, price against depth, and ranked venues and positions. A slippage curve is a shape, and reading a shape off a column of numbers is work the reader should not have to do.

2026-09-04 — Decision policy, spend safety, and live chain reads

  • Added decide() to `@crifine/sdk` — turns an estimate and a policy into proceed / resize / hold / defer / refuse. The ordering lives in one place, so unmeasured always outranks expensive and a closed market always outranks a threshold written for an open one.
  • Added crifine decide to the CLI, and it validates the policy before the request — an API call is priced per request, so a policy that cannot be satisfied should never cost anything.
  • Changed `@crifine/x402` to serialise payments by default. Parallel calls could each read the budget before either had spent, and the pair would sail past a limit neither individually broke.
  • Added receipts and remaining to the x402 wrapper — an audit trail without wiring a callback.
  • Added live spot and the real fill curve to pool pages for two mapped Ethereum Uniswap v3 pools — spot from the pool's own slot0, the fill from Uniswap's QuoterV2, which simulates the swap through the real book. That is the same code path the router executes through, so the answer is the fill rather than an approximation of it. Every other pool keeps its preview numbers and says so.
  • Note: live reads do not manufacture history. days_observed, spread history, stress windows and depth decay are *recorded* series, and no RPC call returns last Tuesday's book. Those stay modelled until the recorder has run.
  • Added an optional model router to the assistant, backed by Claude with a per-request choice of Opus, Sonnet or Haiku. It classifies a question into one of eight intents and is shown no figures at all; assets and sizes it volunteers are discarded and re-derived from the question text. Without a key the assistant answers from its keyword parser, which is the primary path either way.
  • Added wallet sign-in from mobile wallet browsers such as MetaMask Mobile — see Wallet sign-in.
  • Changed every surface to its own custom domain: the site, these docs and the app. Publishing two addresses for one page is how a canonical link and a nav link end up disagreeing.

2026-09-03 — SDK, tooling, and an MCP endpoint

  • Added `@crifine/sdk` — the measurement method in the open, plus an independent verifier: feed it any published evidence payload and it recomputes the result and tells you whether it holds up. It is built and tested to be able to say no.
  • Added `@crifine/x402` — a fetch wrapper for pay-per-request, with a mandatory maxPerCall. There is deliberately no code path in which it pays an amount the caller did not bound.
  • Added `@crifine/cli` — pre-trade checks in the terminal and in CI, with exit codes a pipeline can branch on. Code 2 (past the observed book) is deliberately separate from code 1 (gap crossed a threshold): "unmeasured" and "expensive" are not the same fact.
  • Added an MCP endpoint at POST /api/mcp on the app — 8 tools, read-only, no account.

2026-09-01 — The app, and pool pages

  • Added the app — wallet sign-in over EIP-4361, with wallet discovery via EIP-6963 and Robinhood Wallet surfaced first. See Wallet sign-in.
  • Added the dashboard: positions ranked by execution spread worst-first, an interactive pre-trade check, the fragility board, spread alerts and a per-call usage ledger.
  • Added pool pages — quoted against realized on one axis, the depth ladder, slippage by size, and the recorded daily history.
  • Note: the app runs on preview data. The recorder is not yet wired to it, and every screen says so.

2026-08-29 — Method v1 published

  • Added the full measurement method as a versioned document, with the seven commitments and an explicit list of what Crifine does not claim.
  • Added method_version to every published result, so an estimate stays reproducible after the method changes.
  • Added evidence_url to every published result — keyless, permanent, no account.

2026-08-26 — Session state for RWA

  • Added market_open to results for tokenized equity and treasury pools.
  • Added session_note, describing the next open in plain language.
  • Changed RWA slippage to apply a session penalty when the underlying venue is closed — the observed book is not the book that would absorb the trade. market_open is always present so the penalty can be reasoned about, or stripped back out.

2026-08-24 — Stress fields over averages

  • Changed headline depth fields from trailing averages to worst-observed: lowest_depth_7d_usd replaces avg_depth_7d_usd. An average describes the days you did not need us.
  • Added days_observed to every result. A seven-day window is a weaker claim than a two-hundred-day one, and the caller is entitled to know which they got.

2026-08-22 — Continuous depth recording begins

  • Added the depth recorder: snapshots every five minutes per pool, append-only, with provenance retained.
  • Added initial coverage across Ethereum, Base, Arbitrum and Robinhood Chain.
  • Added gap alerting on the recorder itself — a missed snapshot window is treated as a data-loss incident, not a degraded service, because that record cannot be backfilled by anyone starting later.

Last updated

Was this helpful?