Skip to content

Session Replay: Radix portalled popovers missing after 10.48.0 (still broken on 10.69) #23393

Description

@InterstellarStella

Is there an existing issue for this?

  • I have searched the existing issues

How do you use Sentry?

Sentry Saas (sentry.io)

Which SDK are you using?

@sentry/react

SDK Version

Last known good: 10.48.0. Broken from >10.48.0 through at least 10.69.0 (also reproduced on 10.54.0 / 10.58.0).

Framework Version

React 19.1.0, @radix-ui/react-popover 1.1.15

Link to Sentry event

Repro Session Replay links are available internally (support ticket / Linear). Happy to share with Sentry staff on request.

Reproduction Example/SDK Setup

Relevant Sentry.init (sanitized):

Sentry.init({
  dsn: '...',
  tunnel: '...', // useCompression disabled so tunnel can be used
  enableLogs: true,
  integrations: [
    Sentry.reactRouterV6BrowserTracingIntegration({
      useEffect,
      useLocation,
      useNavigationType,
      createRoutesFromChildren,
      matchRoutes,
    }),
    Sentry.replayIntegration({
      useCompression: false,
      maskAllText: false,
      maskAllInputs: false,
      blockAllMedia: false,
      networkDetailAllowUrls: [],
    }),
  ],
  tracesSampleRate: 1.0,
  replaysSessionSampleRate: 1.0,
  replaysOnErrorSampleRate: 1.0,
});

UI: Radix/shadcn Popover. Trigger is a <button>. Content is PopoverPrimitive.Content rendered as <div role="dialog">, typically portalled to document.body via PopoverPrimitive.Portal.

Confirmed not:

  • native HTML <dialog>
  • HTML popover attribute / top-layer popover API
  • sentry-block / data-sentry-block or custom block/mask rules
  • <frame> elements

Reporter also tried isPortalled={false} and removing open/close animation classes. Popovers still missing in replay.

Steps to Reproduce

  1. Use @sentry/react with Session Replay enabled in a React 19 app that uses @radix-ui/react-popover.
  2. Record a session and open a Radix popover / filter control (content portalled to document.body as <div role="dialog">).
  3. Watch the replay: click is visible, but popover content never appears.
  4. Compare with @sentry/react@10.48.0 (popovers appear) vs any later version through at least 10.69.0 (popovers missing).

Expected Result

Popover content that is visible to the end user (and present in the live DOM) also appears in Session Replay playback.

Actual Result

  • Click/breadcrumb activity is recorded (e.g. filter button shows pressed/dark state).
  • Popover content never appears in the reconstructed DOM.
  • Affects all clients/browsers according to the reporter (not an ad-blocker issue).
  • Still reproducible after upgrading to 10.69.0.

Reporter bisect result:

  • 10.48.0: last version where popovers appear in replay
  • after 10.48.0: broken

Additional Context

Likely first-bad release / suspect PR

Between 10.48.0 and 10.49.0, the only Replay package commit is:

That PR adds syncMirrorAttributesFromMutationEvent() in handleRecordingEmit, folding attribute mutations into the rrweb mirror for click breadcrumbs. It is not an obvious “drop portal nodes” change, but it is the only Replay code change in the first-bad release window and is worth investigating first.

Ruled-out / less likely theories

  • Native HTML popover support gaps in rrweb (e.g. [Feature Request]: Support for popover elements rrweb-io/rrweb#1701) do not match this markup (div role="dialog", no popover attribute).
  • Soft mutation breadcrumb (mutationBreadcrumbLimit, default 750) is present in some replays, but reporter indicates N is well under mutationLimit (10,000), and recording continues around the missing-popover clicks. Unlikely to be the direct cause of missing nodes.

Secondary symptom (possibly separate)

Reporter also notes SPA navigations sometimes show multiple pages stacked in replay only (old route content not removed). They believe this predates the popover regression. Calling it out for completeness, not asserting the same root cause.

Support context

Reported via Sentry Support. Repro Session Replay links will be attached on the internal Linear ticket for staff. Happy to pull more details from the reporter or help validate a patch if useful.

Metadata

Metadata

Assignees

Projects

Status
No status

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions