"Just because two things both come from 'the internet' doesn't mean they share a backup plan."
Currency is a different domain
Keep tracks two portfolios that mix US and Korean value, so the USD/KRW exchange rate is a first-class number, not an afterthought. And it has its own provider boundary, deliberately separate from equities. Massive's daily REST aggregate is primary for USD/KRW. Its only confirmed fallback is FRED's DEXKOUS series — the US Federal Reserve's official daily rate. And the rule that matters most: FX never crosses into Yahoo, even though Yahoo is a fallback for equities. The equity fallback list and the FX fallback list are separate universes.
Why not just one global fallback chain?
Because a fallback is only valid within a domain where the substitute is genuinely comparable. Yahoo's equity quotes are a reasonable stand-in for Massive's equity quotes — same kind of data, similar conventions. But an FX rate is a different kind of measurement, and letting the equity fallback logic reach over and grab a currency number from a source that wasn't vetted for FX would be mixing domains. FRED's DEXKOUS is vetted specifically as an FX source — an official, authoritative daily rate. The boundary says: an FX value may only ever come from an FX-approved source, full stop.
The shape this creates
Instead of one tangled fallback tree where anything can substitute for anything under enough failures, Keep has a small set of clean, per-domain boundaries: equities have their primary and their confirmed equity fallbacks; FX has its primary and its one confirmed FX fallback; specific instruments have their policy sources. Each boundary is small enough to hold in your head and reason about. "Where could this USD/KRW number possibly have come from?" has a two-item answer, not a shrug.