The board now says when it missed something. A small sticker appears beside the live lamp. A clean resume shows nothing. A resume that replayed 100 or more events shows a brief sticker with the count and how long the page was away, which goes after 12 s. A resume past the replay window, an outdated re-seed, or a stream reopened from a fresh view shows a lasting sticker with the missed time span. It stays until it's dismissed, or until 15 minutes after the span ends, the board's own cutoff for "live". A later miss widens the span instead of replacing it. A page that held nothing yet is never told it missed anything. Reduced motion skips the sticker's entrance.
To know which case it's in, /events sends a replayed frame, {"events":n}, with no id, after a resume's backlog. The query mirror ignores it. A browser's automatic retry sends Last-Event-ID, and the index now resumes from it instead of the ?cursor= the page first opened with, which replayed everything since then again. A cursor behind a freshly seeded mirror now gets outdated, where before it got an empty replay that silently dropped what the seed covered. No stored state changes.
This closes "Nothing draws a gap" in plan/canvas.md and "Nothing shows a reader it is behind" in plan/order.md. A gap upstream of the index (Jetstream losing its position) and showing the replay window as a duration are left open. The sticker text is the placeholder bandersnatch, which the placeholder guard holds until copy is written.
🤖 Generated with Claude Code