Clarifying implicit read receipts / read receipts for sent messages #1410
Labels
clarification
An area where the expected behaviour is understood, but the spec could do with being more explicit
I've been thinking about implicit read receipts lately. By "implicit read receipt" I mean the fact that messages sent by the user should obviously be marked as read by that user, even though clients don't send explicit read receipts for those messages.
Relevant spec sections:
The client behavior section of https://spec.matrix.org/v1.5/client-server-api/#receipts says
https://spec.matrix.org/v1.5/client-server-api/#receiving-notifications says (emphasis mine)
From this information, one could extrapolate that explicit read receipts won't usually appear for messages that a user sent themselves, but everyone should act as if there was a read receipt.
However, implicit read receipts right now don't work consistently. I've seen some issues in Elements where bridges sending messages as the user with double puppeting didn't mark the room as read in the user's other clients. It also seems very easy to create new bugs like that in other clients since the read receipt spec doesn't say that implicit read receipts exist.
Due to such bugs, some of my bridges now break the first quoted spec and just send an explicit read receipt to get rid of the problem (I didn't know about that sentence in the spec when I made the bridges do that). When writing Beeper's bridge homeserver, we decided to always create an explicit read receipt when sending an event to get rid of those bugs completely in bridged rooms. We're considering making our Synapse do the same thing now to make Matrix rooms work properly too.
Is my assumption correct about how implicit read receipts work? If yes, should that be documented more explicitly in the spec? (or perhaps it already is and I missed it? I couldn't find anything else talking about the topic in the spec). If not, how is it actually supposed to work?
Would it make more sense to make a MSC that says servers must create an explicit read receipt along with events sent by the user? That way client developers wouldn't have to worry about the details as much and could just fully trust read receipts in /sync contains.
The text was updated successfully, but these errors were encountered: