Null closed guild refs on DM session, accept openDM by channelId, join
contacts before dual-path gossip, and keep DM/contacts meshes warm after
openHome so conversations work after leaving a server.
Relay DM messages over contacts when the DM topic is asymmetric, rebind
message scope for reactions/polls, always join contacts mesh, fully close
prior guilds on switch, and refresh roster/channels/presence when guild id
changes.
Rebind message store to mode-aware guildId/channelId before send, edit,
delete, and history; leave guild mesh without using stale guild binds;
gate attachment and message gossip by mode so DMs never hit the public guild.