TL;DR: Fixed now.
If you're interested, here's what happened.
When you post a message, this causes two things to happen:
- The message is put into the messages table in the database, and
- the message posting event is pushed into the event queue.
When you look at the transcript, the messages you see there come from the messages table. The same is true for the messages you see when you first open a chat page.
But while you watch new messages come in, these are pulled from the event queue.
So if step 1) is completed successfully, but step 2) fails for whatever reason, the message is there (that's why you see it in the transcript, and that's why you would have seen it had you refreshed the page), but the clients (including yours) never get notified, because there is no event.
So in your case, step 1 succeeded, but step 2 failed (likely because of a database timeout). So your client was notified of the fail and hence offered you the "retry/cancel" option.
So you clicked "retry", and your client re-sent the message. But the server noticed that this is the exact same message you sent a few seconds earlier (there's an automatic dupe detection, to prevent accidental double-posts -- and, in fact, it would have been a double post, as you see in the transcript).
So the server responded "yeah yeah, I know about this message already", and the client said "oh, okay" and removed it.
This is now fixed by making sure that 1) and 2) happen in one transaction, so either both succeed or both fail.
On a side note, if you really never refresh the chat: You should do that once in a while, or you miss out on all the awesomeness that constantly gets added :)