Skip to content

feat(amp-semantic): capture resource load failures - #2155

Open
jxiwang wants to merge 4 commits into
codex/semantic-keysfrom
codex/semantic-resource-errors
Open

jxiwang wants to merge 4 commits into
codex/semantic-keysfrom
codex/semantic-resource-errors

Conversation

@jxiwang

@jxiwang jxiwang commented Nov 11, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Add amp-semantic/resource-error for failed image, stylesheet, script, and font loads, grouped over 500 ms with a compact count.
  • Keep only sanitized paths and privacy-safe containers, rechecking masking and node attachment at emission. Flush pending groups on pagehide and hidden.
  • Add schema, docs, local inspector description, unit tests, and a real failed-image browser replay test. Supersedes the resource portion of older draft feat(session-replay): integrate semantic lifecycle capture #2080.

Stack

Base: #2154. Merge after #2128 and #2150–#2154.

Validation

  • pnpm --filter @amplitude/amp-semantic... build
  • pnpm --filter @amplitude/session-replay-browser... build
  • pnpm --filter @amplitude/amp-semantic test: 149 passed, 100% coverage
  • pnpm --filter @amplitude/session-replay-browser test: 1,183 passed, 100% coverage
  • pnpm --filter @amplitude/amp-semantic test:playwright: 13 passed
  • pnpm lint, pnpm lint:deps, pnpm test:examples

The full workspace build stalls in the unchanged Segment Session Replay Rollup step, and the full workspace test run has two existing analytics-react-native failures, as documented in earlier stack drafts.

Linear: SRAI-82.


Note

Low Risk
Adds bounded DOM/font listeners with existing privacy helpers and no network patching; risk is mainly extra listener overhead and path templating correctness.

Overview
Adds a new amp-semantic/resource-error semantic family that records failed image, stylesheet, script, and font loads (not runtime JS or CSS parse errors).

A new resourceErrorRecorder listens for element error events and document.fonts loadingerror, batches matching failures for 500 ms, then emits compact payloads with resource type (rt), count, and optional sanitized path (no origin/query/fragment) plus privacy-safe container when the node is still connected and not blocked. Pending work flushes on pagehide or when the tab is hidden; the family can be turned off via families: { 'resource-error': false } with a 200-event session cap.

The recorder is wired into default recorders, SEMANTIC_CAPS, schema.json, and SemanticPayloads. Coverage includes unit tests, a Playwright replay case for a failed image (query strings stripped from wire output), README/local inspector notes, and harness support for disabling the family.

Reviewed by Cursor Bugbot for commit 6cdcfcf. Bugbot is set up for automated code reviews on this repo. Configure here.

@github-actions

Copy link
Copy Markdown

size-limit report 📦

Path Size
packages/analytics-browser/lib/scripts/amplitude-min.js.gz 68.41 KB (0%)
packages/session-replay-browser/lib/scripts/session-replay-browser-min.js.gz 141.27 KB (0%)
packages/unified/lib/scripts/amplitude-min.umd.js.gz 227.79 KB (0%)
@amplitude/element-selector (gzipped esm) 3.48 KB (0%)
@amplitude/analytics-browser/lite (gzipped CDN bundle) 21.34 KB (0%)

@jxiwang
jxiwang marked this pull request as ready for review November 11, 2026 21:16
@jxiwang
jxiwang requested review from a team as code owners November 11, 2026 21:16
@github-actions

github-actions Bot commented Nov 11, 2026 •

Copy link
Copy Markdown

Session Replay Browser E2E Results

passed  159 passed

Details

stats  159 tests across 18 suites
duration  4 minutes, 28 seconds
commit  6cdcfcf

This branch has not been deployed

No deployments
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