Skip to content

[codex] Fix replay sequence reservation#4

Closed
DorianOuvrard wants to merge 1 commit into
mainfrom
codex/fix-replay-sequence-reservation
Closed

[codex] Fix replay sequence reservation#4
DorianOuvrard wants to merge 1 commit into
mainfrom
codex/fix-replay-sequence-reservation

Conversation

@DorianOuvrard

Copy link
Copy Markdown
Contributor

Summary

Fixes session replay sequence reservation so different replay payloads cannot upload with the same (sessionId, sequenceNumber).

Root Cause

The SDK previously advanced _sequenceNumber only after a successful fetch. A concurrent beforeunload/sendBeacon, reload, or oversized split could reuse the same sequence number for a different payload, especially seq=0 during replay startup.

Changes

  • Reserve and persist replay sequence numbers before upload.
  • Keep failed chunks as numbered retry payloads so exact retries reuse the same sequence number.
  • Make sendBeacon use the same reservation path as normal flushes.
  • Assign distinct sequence numbers to oversized split chunks.
  • Guard concurrent startReplay() calls before rrweb finishes loading.
  • Require the first chunk of a session to include a FullSnapshot.
  • Add regression tests for initial flush races, beacon during fetch, retries, oversized split, and idle restart.

Validation

  • npm run type-check
  • npm test

@DorianOuvrard DorianOuvrard marked this pull request as ready for review June 15, 2026 16:18
@DorianOuvrard DorianOuvrard deleted the codex/fix-replay-sequence-reservation branch June 15, 2026 16:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant