Anomalies
Every clear→firing freeze transition, with reason + recovery + the frozen value still served via /v1/price. Powered by the freeze-event durable mirror — freeze_events hypertable (migration 0018), populated alongside the load- bearing Redis marker.
Freeze timeline
Every clear→firing transition from the durable freeze_events mirror, newest first.
Loading…
What freezes a pair
Per ADR-0019, a freeze fires when one of these conditions holds. While frozen, the API still serves the last good value — but with flags.frozen=true so consumers know not to act on it.
single_sourceWe refuse to serve a price that's based on a single venue. The pair freezes until at least one additional source is observed contributing.
divergenceOur VWAP and an authority reference (CoinGecko, Chainlink HTTP, or a Reflector feed) have been diverging beyond threshold for too long. Almost always means a decoder bug or a stuck source.
outlier_stormThe aggregator's outlier filter rejected a high fraction of recent contributions. Usually a ledger-level shock; the freeze prevents the surviving inliers from setting a misleading "VWAP".
manualAn operator triggered the freeze via a Redis-direct write — used during incident response to halt serving for one pair without taking the whole API down.
Reading the timeline
The timeline above is served live from /v1/anomalies over the durable freeze_events mirror: the firing-now count, the per-reason breakdown (trailing 30 days), and every clear→firing transition with its duration and the value served while frozen. A per-incident calendar heatmap of daily counts is the next addition. Methodology rationale lives in ADR-0019.