The problem
Derive one key from the source event revision and recipient before the first send.
Design the boundary
Send the same key on every retry and store the resulting message ID against the source event.
Process the interaction
Treat timeouts as unknown outcomes; retry with the original key and cap attempts.
Measure the outcome
Measure duplicate conflicts, retry count and dead-lettered sends.