It is possible that Bob's reaction to Alice's message is received before Alice's message. One common reason for this is that Alice and Bob use different sending relays (SMTP servers) and these relays may not be able to deliver messages to some of your relays. Eventually all messages are received, but when you come online, it is possible that you first fetch the messages from a relay that has only Bob's messages delivered, and then fetch from another relay that has Alice's messages.
I just got this problem that my Desktop has some reactions missing because they are trashed this way. There is a related issue #8365, i had both problems in the same chat. I now have a message that has 9 reactions on Android, but only four reactions on Desktop, from just a day ago.
This can be reproduced with a straightforward Rust test. What to do is not that straighforward, i don't have a concrete plan and have not looked at the SQL schema, but whatever is done, the end result should be Alice's message with Bob's reaction even though Bob's reaction is received first and Alice's message is received later. If Alice's message never arrives, orphan reactions should be cleaned up eventually, can probably be done somewhere in housekeeping.
It is possible that Bob's reaction to Alice's message is received before Alice's message. One common reason for this is that Alice and Bob use different sending relays (SMTP servers) and these relays may not be able to deliver messages to some of your relays. Eventually all messages are received, but when you come online, it is possible that you first fetch the messages from a relay that has only Bob's messages delivered, and then fetch from another relay that has Alice's messages.
I just got this problem that my Desktop has some reactions missing because they are trashed this way. There is a related issue #8365, i had both problems in the same chat. I now have a message that has 9 reactions on Android, but only four reactions on Desktop, from just a day ago.
This can be reproduced with a straightforward Rust test. What to do is not that straighforward, i don't have a concrete plan and have not looked at the SQL schema, but whatever is done, the end result should be Alice's message with Bob's reaction even though Bob's reaction is received first and Alice's message is received later. If Alice's message never arrives, orphan reactions should be cleaned up eventually, can probably be done somewhere in housekeeping.