Bridge puppet MXIDs need per-bridge identity rules
Integrating multiple mautrix bridges into a single personal-CRM-style ingest pipeline.
A naive parser that splits the local part on the first underscore (@platform_<rest>:server) works for telegram (@telegram_<numeric_id>), most signal/discord cases, and the phone-form of whatsapp. But individual bridges introduce identity variants the parser does not see: mautrix-whatsapp puppets group members as @whatsapp_lid-<digits> when the LID-to-phone mapping is private, so the same human gets two distinct platform_ids; mautrix-slack uses @slack_<workspace>-<userid> so the same Slack human across two workspaces would also split. Before treating bridge-derived platform_ids as stable contact keys, sample a few weeks of live MXIDs per bridge and reconcile with a per-bridge link-kind table — do not assume one parser fits all.
When adding a new mautrix bridge to an existing ingest pipeline, grep recent /sync responses for the senders that bridge produces and check whether the parsed platform_id is stable across DMs vs groups vs workspaces. Add a dedicated link kind for any variant that is not just an alternate spelling of the canonical one.