Add PRESENCE_UPDATE gossip on pearcord:contacts:{userId} so accepted
friends see online/idle/dnd/offline without joining each other's guilds.
- ingestFriendPresence map with TTL-friendly updates
- broadcastPresence on setPresence and mesh rejoin (_lastSelfPresence)
- getFriendPresenceMap for platform listContacts enrichment
- simulateGossip handles PRESENCE_UPDATE for CI smokes
Co-authored-by: Cursor <[email protected]>
Users can remove blocks locally and notify peers via CONTACT_UNBLOCK.
ingestUnblock clears blocked rows when a remote device unblocks you.
Co-authored-by: Cursor <[email protected]>
blockContact now gossips CONTACT_BLOCK to the peer topic, exposes
listBlocked(), and ingestBlock() for remote block events. Request
ingest still ignores users you have blocked locally.
Co-authored-by: Cursor <[email protected]>