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.
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.
Coming next
Currently-firing list, freeze timeline, per-asset rate, per-reason breakdown, and the calendar heatmap of daily counts all plumb in once the /v1/anomalies endpoint ships (Phase 5). The underlying mirror is already running on r1 — see the freeze-event sink listed in the research index.