mautrix bridges carry full participant list in to[]
Audited the data shape a matrix→message-normaliser emits across mautrix bridges (WhatsApp/Telegram/iMessage/Discord) before fixing a triage UI that was showing the wrong identity signal for group chats.
For every mautrix bridge, the normalised event 'to[]' array always carries the full participant list with each member's displayname (from cached m.room.member ghosts), minus the sender and minus the user's self-puppets on outbound. That's the strongest identity signal for group rooms — stronger than 'room_name' (which is the group title for groups, but the peer's name for bridged DMs). UIs that key on to[0] and discard the rest throw away the only data that actually disambiguates one group member from another. Also: WhatsApp group senders arrive as 'lid-<digits>' (privacy ID), not phone — needs a LID→phone resolver backed by mautrix-whatsapp's whatsmeow_lid_map.
Before patching a triage/routing UI symptom, dump the raw normalised event shape for one example per scenario (DM vs group, inbound vs outbound, per bridge) so you can see which fields are populated where instead of guessing.