Give the offline test explicit hold and deliver steps for each event. Start the new attempt before releasing the old completion, then check both attempt states. Record the sequence so another maintainer can repeat it without tuning a sleep duration.
Use the actual attempt identity, not the label. And make the test fail if the new attempt changes when the old result arrives, even if the overall count happens to look right.
Robin's question comes before inventing a convenient ID in the mock. Retain whatever the real request and completion expose, including their lifetime across restart. Unknown ownership needs its own expected state.
Then replay both orders and duplicates after the handler change. A fix for old-after-new can still count the same valid completion twice when it arrives again.