Skip to content

test(e2e): Port nextjs-16 to span streaming - #23924

Merged
chargome merged 1 commit into
test/e2e-port-nextjs-15from
test/e2e-port-nextjs-16
Sep 2, 2026
Merged

test(e2e): Port nextjs-16 to span streaming#23924
chargome merged 1 commit into
test/e2e-port-nextjs-15from
test/e2e-port-nextjs-16

Conversation

@chargome

@chargome chargome commented Sep 2, 2026

Copy link
Copy Markdown
Member

Ports nextjs-16 to span streaming: removes the traceLifecycle: 'static' pins and rewrites the specs onto streamed spans, using collectStreamedSpans where a test asserts on children of a segment span.

Route-handler specs match the server span on the event's own trace so batching cannot pair spans across specs. http.client span names are low cardinality under streaming (GET localhost), which also mattered for the old name being used as a matcher.

The middleware isolation-scope and breadcrumb assertions were dropped, having no span v2 equivalent. nextjs-16-static (#23834) keeps the transaction-based versions of these specs.

Ref #23802

@chargome chargome self-assigned this Sep 2, 2026
@linear-code

linear-code Bot commented Sep 2, 2026

Copy link
Copy Markdown

JS-3486

@github-actions

github-actions Bot commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

size-limit report 📦

⚠️ Warning: Base artifact is not the latest one, because the latest workflow run is not done yet. This may lead to incorrect results. Try to re-run all tests to get up to date results.

Path Size % Change Change
@sentry/browser 28.57 kB - -
@sentry/browser - with treeshaking flags 26.94 kB - -
@sentry/browser - with treeshaking flags tracing without tracing 26.83 kB - -
@sentry/browser (incl. Tracing) 48.87 kB - -
@sentry/browser (incl. Tracing + Span Streaming) 48.88 kB - -
@sentry/browser (incl. Tracing, Profiling) 51.8 kB - -
@sentry/browser (incl. Tracing, Replay) 88.36 kB - -
@sentry/browser (incl. Tracing, Replay) - with treeshaking flags 77.76 kB - -
@sentry/browser (incl. Tracing, Replay with Canvas) 93.05 kB - -
@sentry/browser (incl. Tracing, Replay, Feedback) 106.02 kB - -
@sentry/browser (incl. Feedback) 46.06 kB - -
@sentry/browser (incl. sendFeedback) 33.64 kB - -
@sentry/browser (incl. FeedbackAsync) 38.74 kB - -
@sentry/browser (incl. Metrics) 29.52 kB - -
@sentry/browser (incl. Logs) 29.81 kB - -
@sentry/browser (incl. Metrics & Logs) 30.45 kB - -
@sentry/react 30.32 kB - -
@sentry/react (incl. Tracing) 51.08 kB - -
@sentry/vue 35.74 kB - -
@sentry/vue (incl. Tracing) 51.14 kB - -
@sentry/svelte 28.6 kB - -
CDN Bundle 30.36 kB - -
CDN Bundle (incl. Tracing) 49.52 kB - -
CDN Bundle (incl. Logs, Metrics) 32.59 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) 51.43 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) 73.19 kB - -
CDN Bundle (incl. Tracing, Replay) 87 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) 88.88 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) 92.93 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) 94.83 kB - -
CDN Bundle - uncompressed 89.97 kB - -
CDN Bundle (incl. Tracing) - uncompressed 147.57 kB - -
CDN Bundle (incl. Logs, Metrics) - uncompressed 96.27 kB - -
CDN Bundle (incl. Tracing, Logs, Metrics) - uncompressed 153.26 kB - -
CDN Bundle (incl. Replay, Logs, Metrics) - uncompressed 225.43 kB - -
CDN Bundle (incl. Tracing, Replay) - uncompressed 267.07 kB - -
CDN Bundle (incl. Tracing, Replay, Logs, Metrics) - uncompressed 272.74 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback) - uncompressed 280.77 kB - -
CDN Bundle (incl. Tracing, Replay, Feedback, Logs, Metrics) - uncompressed 286.43 kB - -
@sentry/nextjs (client) 53.7 kB - -
@sentry/sveltekit (client) 49.3 kB - -
@sentry/core/server 40.74 kB - -
@sentry/core/browser 13.42 kB - -
@sentry/node 124.12 kB -0.07% -79 B 🔽
@sentry/node/import (ESM hook with diagnostics-channel injection) 81.51 kB - -
@sentry/node - without tracing 88.3 kB +0.03% +21 B 🔺
@sentry/node - without channel injection 103.42 kB -0.08% -79 B 🔽
@sentry/aws-serverless 96.66 kB +0.03% +22 B 🔺
@sentry/cloudflare (withSentry) - minified 201.33 kB +0.26% +517 B 🔺
@sentry/cloudflare (withSentry) 501.09 kB +0.27% +1.33 kB 🔺

View base workflow run

@chargome
chargome force-pushed the test/e2e-port-nextjs-16 branch from aa366e6 to aa4c58c Compare September 2, 2026 11:18
@chargome
chargome marked this pull request as ready for review September 2, 2026 13:21
Comment on lines 51 to +52
// TODO: proxy errors currently not reported via onRequestError
// await test.step('should record exceptions', async () => {
// const errorEvent = await errorEventPromise;

// // Assert that isolation scope works properly
// expect(errorEvent.tags?.['my-isolated-tag']).toBe(true);
// expect(errorEvent.tags?.['my-global-scope-isolated-tag']).not.toBeDefined();
// expect([
// 'middleware GET', // non-otel webpack versions
// '/middleware', // middleware file
// '/proxy', // proxy file
// ]).toContain(errorEvent.transaction);
// });
// await test.step('should record exceptions', async () => { ... });

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

q: Is this still the case?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no this is fixed in next 16.3

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

stonks.gif

Removes the `traceLifecycle: 'static'` pins and rewrites the specs onto streamed spans. Tests asserting on children of a segment span (server components, DB instrumentation, middleware fetch, prefetch) use `collectStreamedSpans` and accumulate until the segment, which ends last.

The route-handler specs correlate an error or message event with its server span; those match the span on the event's own trace, so batching cannot pair spans across specs.

`http.client` span names are low cardinality under streaming, so the middleware fetch span is `GET localhost` rather than `GET http://localhost:3030/` - which also mattered for the matcher, since the old name was used as a predicate and would have hung rather than failed.

Dropped, having no span v2 equivalent:

- The middleware isolation-scope assertions, including the guard that middleware tags do not leak onto the following route span. Span v2 carries no scope tags, so neither the tag nor its absence is observable.
- The middleware `breadcrumbs` assertion. The fetch stays covered by its `http.client` span.
- The `contexts.runtime.name` matchers, which only disambiguated uniquely named spans.

Request headers carry over as `http.request.header.*` attributes, so the route-handler and pageload header assertions keep their coverage.

Ref #23802
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@chargome
chargome force-pushed the test/e2e-port-nextjs-16 branch from aa4c58c to 145b8d8 Compare September 2, 2026 13:43
@chargome
chargome merged commit 775c84b into develop Sep 2, 2026
568 of 570 checks passed
@chargome
chargome deleted the test/e2e-port-nextjs-16 branch September 2, 2026 15:08
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.

2 participants