Skip to content

ADR 0027: Live Market-Source Capability Registry in Redis

Status

Accepted

Date

2026-03-16

Context

IRIS needs to know two different things about market-data providers:

  • which symbols a provider currently exposes upstream;
  • how a provider-specific symbol maps to IRIS canonical symbols when the transport naming differs from the common name.

Static Python files are not sufficient for this:

  • provider universes change over time without code changes;
  • some providers expose large listing endpoints that should be discovered live;
  • some providers use transport-specific symbols such as BTC-USDT, XXBTZUSD, I:SPX, or ^DJI.

At the same time, the observed asset inventory remains DB-owned by ADR 0026. Provider capability discovery must not become a second asset inventory.

Decision

IRIS maintains a live market-source capability registry in Redis.

Registry Rules

  • the registry stores provider capability snapshots, not observed assets;
  • each snapshot contains provider-native symbols plus canonical alias mappings where IRIS can normalize them safely;
  • Redis is the operational store for the registry because capability discovery is runtime infrastructure, not domain data.

Refresh Rules

  • the registry is loaded on service startup so source adapters can use the latest known mappings;
  • discovery is triggered on startup and refreshed every hour through a scheduled runtime task;
  • refresh uses upstream provider listing endpoints when they exist, and provider-specific alias validation when bulk listing is not available.

Adapter Rules

  • source adapters may keep small curated alias hints for normalization;
  • adapters should first consult the live registry and fall back to curated hints when no live mapping is available;
  • curated hints are transport adapters, not the source of truth for provider universe size.

Consequences

Positive

  • symbol capability follows real upstream provider state more closely;
  • source adapters can normalize provider-specific symbols without central hardcoded asset inventory files;
  • runtime refresh is decoupled from PostgreSQL and remains internal infrastructure.

Negative

  • startup and hourly refresh now depend on extra upstream discovery calls;
  • some providers still do not expose a true bulk universe endpoint, so discovery remains partial or validated-by-alias for them;
  • Redis becomes the operational handoff for source capability state across processes.

See also