chainId 421614, deploy block 274081134, dated 2026-06-05) with no time-warp and no mock. Everything else is either a typed pending state (the system already degrades gracefully to it) or a clearly-labelled roadmap item.
The guiding principle, repeated on every surface: “pending” is never “error”. Anything that cannot resolve — a reverting oracle, an absent rich event, or a backing that is unset (if SUBGRAPH_URL were missing, a surface would return a typed envelope rather than fail) — renders a calm degraded state with the reason and the route that serves it. A naked limitation is a defect; every limit below carries its why and its mitigation.
https://api.studio.thegraph.com/query/1754692/inflexion-arb-sepolia/version/latest), served through the hosted REST API + engine backend at https://inflexion-backend.onrender.com. The dataset is still young — its dynamics (regimes, forward-vol, dispersion) mature with MM competition + volume — but the structures and queries are live. PARTIAL mode, MM-side hedging tooling, and an Orbit (app-chain) deploy are roadmap.The live / pending matrix
The matrix below is the cross-section across the five layers. “Live” = executes against the 2026-06-05 deploy today (on-chain over RPC, or — for history/aggregate surfaces — served from the deployed subgraph through the hosted API). “Telemetry-live” = an off-chain JSONL sink capturing from the first interaction. “Roadmap” = designed, not yet built.The live create→settle lifecycle — both rails
A real, no-time-warp create→settle ran end-to-end for both rails on 2026-06-05. It executed on a short 300s fee-500 market (0xb8bbd684f213d5833886ade7b531a6949d85522249881a2b5d46a5cc76e439c2), settled at the Chainlink round bracketing each expiry. This 300s market is a separate, extra market used only for the live proof — it is not one of the 9 production markets. All amounts are in dUSDC (6-decimal numéraire). The demo MM 0xe632B215120dD43A719458487bA3e03638fec953 deposited 5,000 dUSDC into UnderwriterVault, and its own collateral paid the Path-B settlement.
- Path A — cvAMM pool (swapId 1)
- Path B — routed to MM (swapId 2)
3220, settled from the ConvexityVault:payout = min(realized_IL, MaxIL), paid from the counterparty’s own collateral, the LP receiving payout and the counterparty keeping the residual collateral − payout. Both swaps settled below the cap, so neither was truncated. This single lifecycle demonstrates the whole trust model end-to-end — see the lifecycle and routing.
What is live right now — by user surface
Everything in this section runs over live RPC against the 2026-06-05 deploy. No mocks are required for any of it; history/aggregate panels are served live from the deployed subgraph via the hosted API athttps://inflexion-backend.onrender.com (Path B previews additionally want the engine — see below).
/protect — LP buys protection
buyProtection → createSwapRouted), and settle at expiry. Active protections are discovered by an on-chain scan (walks up to 200 swap ids), no subgraph needed./earn — depositor underwrites
/underwrite — MM Path B
/markets — market browser
/data — the moat showcase
getCurrentLoadSurface + getSurfaceSigmaRef. Signals 2–5 and NAV history are served live from the deployed subgraph + telemetry sinks via the hosted API; their dynamics still thicken as the young dataset accrues flow + MM competition./dashboard — all three roles
getClaimableFees under-states (checkpointed tokensOwed only); flagged inline.The three approval spenders (a recurring gotcha, all live)
All three approval flows are live; they target three different spenders, which is the single most common integration mistake:The on-chain moat events — live since the redeploy
The data moat’s on-chain primitives are emitting on-chain now, and the indexer that aggregates them is deployed and indexing them. The 2026-06-05 redeploy landed both moat events and the on-chain load decomposition:274081134 forward. The five behavioral signals — clearing-load over a transparent σ_ref bucketed by geometry; pool-vs-MM spread + win-rate; convexity term structure; demand skew; net gamma — are non-circular by construction (never a back-solved implied-vol surface). The “invert fairRate for an implied-vol surface” idea is deliberately dropped as circular: charged_premium / MaxIL = fairRate(σ_ref) · (1 + load), so inverting it recovers nothing but our own published σ_ref plus our own load stack. See the five signals and circular vs behavioral.
The off-chain telemetry sinks — capturing now
Two of the five signals need data that never reaches the chain by design (an LP who priced but did not buy; an MM quote that lost or was withdrawn). Invariant I7 guarantees an unchosen quote touches no nonce and no capacity, so it leaves no on-chain trace. That latent/dynamic half lives in off-chain engine telemetry — and it is capturing from the first interaction now:DEMAND_LOG(Signal 4 latent half) — everyGET /quoteandPOST /telemetry/previewping, coarse-bucketed and PII-free.COMPETITION_LOG(Signal 2 dynamic half) — every inbound WS quote, winners and losers alike.
/quote request.
The pending items — Limit → Why → Mitigation
Every pending state below is framed with its cause and its path forward. None is an error; each is a typed, honest degradation.The subgraph is deployed and indexing (history / aggregate surfaces are live)
The subgraph is deployed and indexing (history / aggregate surfaces are live)
inflexion-arb-sepolia, query URL https://api.studio.thegraph.com/query/1754692/inflexion-arb-sepolia/version/latest), indexed from block 274081134 forward — including the lifecycle swaps and the per-market dimension. The hosted REST API at https://inflexion-backend.onrender.com is wired to it; /health reports subgraph: true. (The EIP-170 contract-size constraint that previously gated the redeploy was resolved on 2026-06-05 — InflexionCore is 23,934 B, under the 24,576 B limit.)Degradation is still a design property: if SUBGRAPH_URL were ever unset, the SDK and API would degrade gracefully — history methods return a typed ApiPending envelope naming the exact route + GraphQL query — never an error. On the free hosting tier the backend sleeps after ~15 min idle, so the first call after a cold start can be slow. See the moat’s state & limits and degradation.MM fill attribution — precise on-chain (legacy event was coarse)
MM fill attribution — precise on-chain (legacy event was coarse)
Path B previews need the engine running
Path B previews need the engine running
σ_ref sits at the floor on a fresh deploy
σ_ref sits at the floor on a fresh deploy
No L2 Sequencer Uptime Feed on Arbitrum Sepolia
No L2 Sequencer Uptime Feed on Arbitrum Sepolia
getClaimableFees under-states uncollected fees
getClaimableFees under-states uncollected fees
The per-market subgraph dimension — resolved (indexed)
The per-market subgraph dimension — resolved (indexed)
Market lifetime counters, MarketStateSnapshot) are indexed by the deployed subgraph; the hosted API’s /markets route returns per-market aggregates live.What changed: the handler derives marketId = keccak256(abi.encodePacked(token0, token1, fee, uint32(duration))) in handleSwapCreated, closing the per-market gap that the geometry-keyed aggregates did not cover.Still true: the geometry-keyed aggregates (BucketAggregate for Signals 1/2/3, GeometryDemandBucket for Signal 4) are fully populated alongside the per-market dimension. Counters are thin while the dataset is young and thicken with flow.The roadmap — designed, not yet built
These are deliberate scope decisions: FULL-first, with capital-efficiency and risk-export tooling sequenced behind it.PARTIAL collateral mode (gated on the quant)
ConvexityVault, not a second pool: collateral < MaxIL + buffer, capital-efficient but carrying real bad-debt risk. It is roadmap, gated on the Monte-Carlo quant. In the shipped code, CollateralModel has {FULL, PARTIAL} but PARTIAL reverts UnsupportedModel.MM-side hedging tooling (Greeks + cvAMM port)
Multi-MM competition dynamics
Mainnet (Arbitrum One) migration
Orbit / app-chain deploy (exploratory)
What is not guaranteed (say it plainly)
Two guarantees, and they are never merged: the LP no-bad-debt claim (Claim A) and depositor/MM capital risk (Claim B) are separate. Claim A is a guarantee to the LP being paid; it is not a guarantee that underwriting capital is preserved.What’s not there yet — in one paragraph
The protocol is complete and proven on-chain: a real, no-time-warp create→settle ran for both rails on 2026-06-05, all ten invariants are enforced, and every moat event is emitting on-chain since block274081134. The data product is live across all three halves: live-price surfaces over RPC, telemetry sinks capturing now, and history/aggregate surfaces served from the deployed, indexing subgraph (https://api.studio.thegraph.com/query/1754692/inflexion-arb-sepolia/version/latest) through the hosted REST API + engine at https://inflexion-backend.onrender.com. What genuinely remains is roadmap or maturity: the web dApp is not yet on a public domain, the dataset is young (its dynamics mature with ≥3 competing MMs + volume), and PARTIAL mode, first-class MM hedging UX, the optional pool hedge, mainnet migration, and an exploratory Orbit deploy are roadmap. Nothing on this page is faked, and nothing pending is presented as an error.