db86432644
- Invites: seed the notify baseline with the invite count at mount instead of 0, so a warm reload (allInvitesAtom populates synchronously from cache while SYNCING) no longer re-fires the toast+sound for pre-existing invites. Only a genuine increase notifies. - Status: the cross-device sync effect gated on a truthy presence.status, so a remote CLEAR never reset the input or localStorage[STATUS_MSG_KEY] and usePresenceUpdater.readStatus() re-sent the stale status. Now mirror an empty status as a clear (skipping offline/invisible, which carries an empty status_msg by design). - Soundboard: useState initializers ran once and never recomputed when the room/rooms arg changed. Add a resync effect keyed on the arg while keeping the live state-event update path. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>