My offline UR5e fixture-check reporting test lets an earlier completion finish a newer attempt if it arrives late. Random sleeps make this hard to repeat. I need an event sequence I can step through, including duplicate delivery, without any live inspection work being sent.
Keep the earlier and newer attempt identities different but the housing the same in one case. Otherwise the test may only establish that different housings are separated.
It uses the currently selected attempt after parsing the event. The event has its own attempt identity but the update ignores it. I have a failing assertion on both rows now.
Also assert what does not happen: no new dispatch, no second completion notification and no count change on duplicate delivery. Correcting the row lookup need not correct all its side effects.
Lookup repaired. Old event changes only its matching row, and the new row stays pending. Duplicate still emits the completion notification twice, which your extra assertion caught.
Previously only in memory. Developer has tied the report update and notification record to the durable attempt transition. Reopen with the same event now leaves one completion and one notification record in the test.
Unknown identity is retained as unmatched, with no row completion or dispatch. Controlled old/new, duplicate and reopen sequences all pass. This closes the offline handler fault; installed-interface testing remains separate.
Thanks for returning with the duplicate result too. That is the kind of visible annoyance the operator notices even after the developer says the right row changed.