Repository navigation
fix(nextjs): Fork isolation scope for Next.request proxy root spans - #26084
Merged
Merged
Conversation
Since Next.js 16.4.3 the proxy adapter starts a Next.request root span when the proxy runs separately from the render, and Middleware.execute becomes its child. The isolation scope was only forked for BaseServer.handleRequest and Middleware.execute roots, so concurrent proxy requests shared one isolation scope and could leak breadcrumbs into each other. Also seed normalizedRequest for these spans on the Edge runtime so tracesSampler sees the request. Fixes #26005 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Member
Author
|
bugbot run |
Contributor
size-limit report 📦Compared: 9c50d6c (PR test merge using develop at 2619fa4) Against: 2619fa4 (develop) · base run #64952 ✅ Baseline matches: this diff contains only this PR's changes.
|
Contributor
Optional E2E testsAll optional checks were successful. 10 successful. See the run. Successful checks
|
…t span Next.js only starts the Next.request root span when the proxy is invoked separately from the render, which next start never does. The new app builds with a deployment adapter and calls the proxy entrypoint directly, like Vercel, so the test covers the shape from the issue. It fails without the fix: one request's error carries the other request's breadcrumb. Refs #26005 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Member
Author
|
bugbot run |
Addresses CodeQL alerts about exposing exception text in the e2e harness response. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Member
Author
|
bugbot run |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit d67b517. Configure here.
chargome
marked this pull request as ready for review
November 4, 2026 10:15
chargome
requested review from
Lms24,
andreiborza,
logaretm,
mydea,
nicohrubec and
s1gr1d
and removed request for
a team
November 4, 2026 10:15
andreiborza
approved these changes
Nov 4, 2026
chargome
added a commit
that referenced
this pull request
Nov 5, 2026
…pan (#26096) **Why:** Since Next.js 16.4.3, a proxy that runs separately from the render gets a `Next.request` root span. Our tunnel filter only knew `Middleware.execute`, so only the child span was dropped. Tunnel requests through the proxy were still sent as transactions. With span streaming, `ignoreSpans` only runs when a span starts. In rewrite mode, the existing pattern needs the `?o=…&p=…` query, but `Next.request` only carries the pathname. So it gets its own entry that matches on the tunnel path alone. **How to review:** The change is in `dropMiddlewareTunnelRequests.ts`, and the e2e test is `nextjs-16-adapter/tests/proxy-tunnel.test.ts`. Follow-up to #26084. **Unsure about:** The pathname-only match for `Next.request` also drops a request to the exact tunnel path that isn't a tunnel request, for example one without the query. The static-mode drop flag already works this way, but under span streaming this is a little wider than before. Closes JS-4064 --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
51 tasks done
2 of 3 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why: Since Next.js 16.4.3, a proxy that runs separately from the render (e.g. on Vercel) gets a new
Next.requestroot span, withMiddleware.executeas its child. We only forked the isolation scope forBaseServer.handleRequestandMiddleware.executeroots, so concurrent proxy requests shared one scope and mixed breadcrumbs. The EdgebeforeSamplingrequest seeding had the same gap.The new
nextjs-16-adaptere2e app is needed becausenext startnever createsNext.request. It builds with a deployment adapter and calls the proxy entrypoint directly. Without the fix, the test fails with one request's error carrying the other request's breadcrumb.How to review: The SDK change is in
forkIsolationScopeForRootSpan.tsandedge/index.ts.Closes #26005