Problem
Ecard transactions are intermittently appearing as duplicates in NewDot — users see both the pending transaction and the posted transaction at the same time, even though the pending one should have been cleared.
This has been observed at least twice in a 2–3 week window with the same user.
Suspected Root Cause
The root cause is likely a race condition / failure in applying a reconnectApp Onyx update:
lastOnyxUpdateID may be updated before the corresponding Onyx updates are fully applied.
- If the apply step fails for any reason, the update is silently lost and the client ends up in a stale state (pending transaction not cleared).
- The
OpenReport flow does not appear to self-recover from this missed update.
Logs confirm that the server is sending the Onyx updates correctly, so the issue is client-side.
Planned Work
- Add Sentry logs to surface cases where
lastOnyxUpdateID is advanced but the update application fails — so we can confirm the hypothesis before changing behaviour.
- Fix the root cause — ensure
lastOnyxUpdateID is only advanced after updates are successfully applied (or implement a recovery path).
Step 1 (logging) should land first so we can validate before making the behavioural fix.
Issue Owner
Current Issue Owner: @mallenexpensify
Problem
Ecard transactions are intermittently appearing as duplicates in NewDot — users see both the pending transaction and the posted transaction at the same time, even though the pending one should have been cleared.
This has been observed at least twice in a 2–3 week window with the same user.
Suspected Root Cause
The root cause is likely a race condition / failure in applying a
reconnectAppOnyx update:lastOnyxUpdateIDmay be updated before the corresponding Onyx updates are fully applied.OpenReportflow does not appear to self-recover from this missed update.Logs confirm that the server is sending the Onyx updates correctly, so the issue is client-side.
Planned Work
lastOnyxUpdateIDis advanced but the update application fails — so we can confirm the hypothesis before changing behaviour.lastOnyxUpdateIDis only advanced after updates are successfully applied (or implement a recovery path).Step 1 (logging) should land first so we can validate before making the behavioural fix.
Issue Owner
Current Issue Owner: @mallenexpensify