Replay a local model-response fixture against explicit fallback order, required capabilities, retries, quality and cumulative latency/cost budgets. This is a reporter over recorded scenarios, not a router: it makes no provider call, opens no socket, sends no request and changes no account.
This walkthrough uses the tool's public README and checked-in example files. Run the command from a repository checkout with Node.js 22+.
Run the checked-in example
node bin/model-fallback-simulator.mjs --root examples/clean --scenario scenario.json --json
node bin/model-fallback-simulator.mjs --root examples/denied --scenario scenario.json --json
node bin/model-fallback-simulator.mjs --root examples/uncertain --scenario scenario.json --json
npm run checkRead the result
The examples exit 0 (capable fallback selected), 1 (budget denied before a fallback can run), and 2 (missing quality evidence). The CLI writes the JSON report to stdout; without --json it adds a short summary on stderr. Bad configuration exits 2 with empty stdout; an unreadable/invalid named input exits 2 with an incomplete JSON report. --help lists every flag. Library callers use simulateFallback({ root, scenario, limits, now }) and exitCodeFor(report) from src/index.mjs; now is an injected millisecond clock, default Date.now.
Scope
Each configured bound is tested on both sides. Checks of elapsed time are cooperative; one filesystem read, JSON parse, hash or sort can overrun before the next checkpoint. This is not a latency benchmark, live failover engine, quality grader, billing source or deployment control. It executes no model response and writes no output artifact.