- Shipped
- September 6, 2026 at 6:24 AM UTC
- Author
- Kamo
- Commit
- a424f9f
windows is left, which window resets when, and whether what is on screen is current. It is the fact that decides whether starting a session is worth doing, so it is on screen the moment the menu opens rather than behind a chevron — a member four percent from their weekly limit should learn it while reaching for the thing that would spend it, not from a session that stops mid-answer. Live over the channel the HR badges already use. SecurityService sweeps the number actually moves; MediaService relays it onto a per-member STOMP topic this subscribes to over the EXISTING chat client rather than opening a fourteenth socket for two percentages. Core NATS has no stream behind it, so a frame published while the tab was asleep is gone — hence the REST seed on mount and on every reconnect, with a slow floor under staleness. Three things it refuses to do: gives a satisfying full bar that says "your whole allowance is here" to somebody who is being told nothing. The absence is preserved through every layer and this is the last place it could have been lost. * Round a member id through a number on the way to the topic. That is what check-int64-topic-ids.mjs exists for: the subscription would succeed and silently address nobody. * Throw inside the stompjs handler. An exception there takes the frame loop down and every other subscription on the shared client with it. `NavToolItem.render` is new and narrow: a row that draws itself, for reading rather than for choosing, non-interactive by construction. All three renderers — light popover, dark rail, launchpad card — pass it the surface it is on, so one node cannot be legible on one and invisible on another. Verified in a browser rather than in jsdom, which does no layout: the track was too faint against white for a 4% bar to read as "nearly out", and the two meters ran together as one four-line list. Both fixed and re-shot.