M-Link, as used by jabber.org, does not include the id='' you set on messages sent to a MUC on the echoes it sends back.
David Cridland sez: “The ids last, in my opinion, as long as the rest of the "header" - the from/to etc. [...] M-Link will in some cases [modify the message body,] which is another argument against repeating the id blindly.”
A bunch of people disagree with him; I'm not sure whether I agree or not. But we could potentially deal with this by having Gabble keep a list of pending messages and matching up messages from ourself against them. (This does not work if you're joined to the same MUC twice using the same MUC JID, which I believe is possible …)
M-Link leaves the id='' intact if it's sending back a <message type='error'/>, so we can continue to rely on this for failure reports in any case.
The symptom here, by the way, is that Empathy 3.1.x's “messages are being sent” spinner spins forever.