Rates Engine v0.5.0-rc.44
Pre-release
Pre-release
·
965 commits
to main
since this release
[v0.5.0-rc.44] — 2026-05-11
Fixed
- Fiat market cap reads from
PriceReader(Redis-triangulated FX),
notGlobalPriceReader. rc.43 wired the fiat path through
ComputeGlobalPrice→GlobalPriceReader, which only reads
prices_1m. FX:FX rates (USD/CNY etc.) live in the Redis
triangulated cache, notprices_1m— so the lookup returned no
rows and CNY market_cap stayed empty post-rc.43. Hoist fiat
handling above theglobalPricenil guard viapopulateFiatView,
read FX rates directly throughs.prices, and switch the
verified-listing fan-out gate accordingly. - Asset detail static-fallback recovery loop avoided. The
client-side fallback that re-fetches/v1/coins/{slug}from
the browser when a build-time fetch missed now auto-reloads
once (tracked viasessionStorage) and surfaces a friendlier
message on the second pass — no more endless flashes of the
"couldn't be prerendered" panel.
Added
/v1/chartfor fiat:fiat pairs readsfx_quotes. When both
base and quote are fiat (e.g.fiat:CNY/fiat:USD), the handler
routes to the fx_quotes hypertable instead of the crypto
prices_1m/prices_5m/prices_1hCAGGs. USD↔CCY both
directions; cross-fiat (EUR/JPY etc.) returns an empty series
pending a follow-up. Closes the "CNY 1y chart has no data"
surface — oncefx-history-backfillruns against a deployment,
fiat charts get the full Frankfurter-backed history (back to
1999-01-04).internal/sources/frankfurter— ECB rates client. Range
endpoint returns every daily rate for every supported currency
in one HTTP request, so a 25-year backfill is ~6 requests
total (5-year chunks). No API key, no per-request cost.- Explorer chart truncated banner. ChartPanel now surfaces
the API'struncated/data_starts_atsignal as an amber
banner reading "Showing data from YYYY-MM-DD — the deployment
hasn't accumulated the full Xy window yet." Replaces the
silent "8 flat points for 1y" surface. - Explorer chart quote picker drops XLM for fiat assets. When
asset_idstarts withfiat:, the chart panel forces USD
quote and removes XLM from the picker (XLM isn't a meaningful
quote against CNY / EUR / JPY).
Changed
scripts/ops/fx-history-backfilldefaults to Frankfurter. Drops
theMASSIVE_API_KEYrequirement for historical backfills. Live
forex worker continues on Massive for hourly grain + broader
ticker coverage; the one-shot tool now uses Frankfurter for the
free "populate fx_quotes once" case. Runbook
(docs/operations/runbooks/fx-history-missing.md) updated.