Skip to content
Crifine

Changelog

What actually shipped, newest first. Roadmap items are not listed here until they are live.

2026-09-04 — Decision policy, spend safety, and a model router

  • 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 an optional model router to the assistant, via OpenRouter. 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.

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.