Rates Engine v0.5.0-rc.67
Pre-release
Pre-release
·
648 commits
to main
since this release
[v0.5.0-rc.67] — 2026-05-21
Fixed
/v1/assets/{id}cache TTL was shorter than the prewarm
cadence — p95/p99 blew up (#52). TheassetDetailResponseCache
TTL was 30s butselfPrewarmAssetEndpointsonly refreshes every
60s, so the cache sat expired for 30 of every 60 seconds. The
status page polls/v1/assets/nativeevery 30s and kept landing
in the cold window, paying the full ~700ms handler rebuild every
time (inflated to ~2.8s under concurrent-backfill CPU
contention). Every OTHER status-page endpoint measured 1-200ms —
the entire API p95/p99 tail (and the three latency SLO alerts)
was this one endpoint's cold misses. Bumped the TTL to 120s —
one full prewarm interval of headroom, so a prewarm pass always
refreshes an entry before it expires andnativestays
permanently warm. Matches the sibling F2-path caches (1–2 min
TTL, same 60s prewarm). 120s staleness still fits the ADR-0015
closed-bucket-only contract.
Changed
- Status page endpoint probe is now two-shot (#52). The
per-endpoint latency matrix on the status page polls every
30 s / 2 min; between polls Cloudflare lets the edge→origin
connection pool go cold, so a single probe's first request paid
a full CF↔origin TCP+TLS setup (~2-3 s measured) that has
nothing to do with API latency — the API serves cached asset
detail in <10 ms. The probe now fires a throwaway warm-up fetch
first and measures the second request on the warm connection,
i.e. the latency a returning user actually experiences. Both
fetches keepcache: 'no-store'so neither the browser nor the
CDN serves a stale body — it's still a real round trip, just not
a cold-pool one. A non-2xx or thrown warm-up short-circuits
(reportsdown/errorwithout a second request). web/status
frontend only — no API change.