Sixth slice.
Gap: data loaded per navigation; you reloaded to see a new check.
What changed: both pages call invalidateAll() on the 15-second minimum
tick — the same floor the scheduler uses — guarded by tab visibility so a
hidden tab polls nothing. The honesty property is in SvelteKit’s semantics: the
old data stays until the new load resolves, so the swap is atomic — no
stale-green flash — and if the API dies mid-poll the load honestly resolves to
“cannot see”, not a frozen board.
Proof: a monitor created through the API mid-session appears on the list without navigation; a route-aborted API mid-poll shows the unreachable banner on the next tick rather than clinging to the last good data.