Brownout
A fallback is code that only runs when something is broken, which makes it the least-tested code in any codebase. So this platform does two things about it. Every response says where its data came from and how fresh it is, in a header you can read. And every fallback below has been executed for real, with the provider it protects against genuinely refusing, inside the same request path a user hits. The receipts are underneath. Read the reference for the header grammar and how to run a probe yourself.
A live call, from your browser, just now
unknownProven fallbacks
Each card names an upstream, the failure injected into it, and what the endpoint did anyway. A verdict of not exercised is reported as plainly as a failure: it means the fault was accepted but a warm cache answered before any upstream call happened, so nothing was actually proven. A proof that did not run is not a pass.
Loading the degradation registry.
Reading a response
Every endpoint answers with x-brownout, and adds x-brownout-trace when
something degraded. Freshness is a lattice rather than a flag, and a response reports the
worst tier that contributed to it: live came off the wire during your request,
cache is a hit inside its intended lifetime, stale is older than that
because an upstream could not answer, and fallback means a different provider or a
different method answered the question. A page assembled from one live read and one half-hour-old
reading is not live, so it does not get to say it is.
The @axis/brownout package parses these headers, and gives your own tests the same
fault injection this page is built on, so you can assert that your integration degrades the way you
think it does.