Fix runtime prefetch isPartial byte stripping when deployed#90272
Merged
unstubbable merged 1 commit intocanaryfrom Feb 21, 2026
Merged
Fix runtime prefetch isPartial byte stripping when deployed#90272unstubbable merged 1 commit intocanaryfrom
isPartial byte stripping when deployed#90272unstubbable merged 1 commit intocanaryfrom
Conversation
Collaborator
Tests Passed |
Make `stripIsPartialByte` resilient to responses that don't have the
leading `isPartial` marker byte. Instead of unconditionally consuming
the first byte, it now checks whether it's a recognized marker ('~' or
'#') and leaves the stream intact when it isn't.
This also removes the `NEXT_IS_PRERENDER_HEADER` guard that previously
prevented byte stripping for fully static responses. On Vercel, the CDN
can add this header to runtime prefetch responses that do contain the
marker byte, which caused the client to skip stripping — corrupting the
RSC stream and preventing dynamic navigation requests.
6cf9690 to
6191bd9
Compare
Contributor
Author
Collaborator
Stats from current PR✅ No significant changes detected📊 All Metrics📖 Metrics GlossaryDev Server Metrics:
Build Metrics:
Change Thresholds:
⚡ Dev Server
📦 Dev Server (Webpack) (Legacy)📦 Dev Server (Webpack)
⚡ Production Builds
📦 Production Builds (Webpack) (Legacy)📦 Production Builds (Webpack)
📦 Bundle SizesBundle Sizes⚡ TurbopackClient Main Bundles: **399 kB** → **399 kB** ✅ -17 B80 files with content-based hashes (individual files not comparable between builds) Server Middleware
Build DetailsBuild Manifests
📦 WebpackClient Main Bundles
Polyfills
Pages
Server Edge SSR
Middleware
Build DetailsBuild Manifests
Build Cache
🔄 Shared (bundler-independent)Runtimes
📝 Changed Files (8 files)Files with changes:
View diffsapp-page-exp..ntime.dev.jsDiff too large to display app-page-exp..time.prod.jsDiff too large to display app-page-tur..ntime.dev.jsDiff too large to display app-page-tur..time.prod.jsDiff too large to display app-page-tur..ntime.dev.jsDiff too large to display app-page-tur..time.prod.jsDiff too large to display app-page.runtime.dev.jsDiff too large to display app-page.runtime.prod.jsDiff too large to display |
eps1lon
approved these changes
Feb 21, 2026
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.

Make
stripIsPartialByteresilient to responses that don't have the leadingisPartialmarker byte. Instead of unconditionally consuming the first byte, it now checks whether it's a recognized marker ('~' or '#') and leaves the stream intact when it isn't.This also removes the
NEXT_IS_PRERENDER_HEADERguard that previously prevented byte stripping for fully static responses. On Vercel, the CDN can add this header to runtime prefetch responses that do contain the marker byte, which caused the client to skip stripping — corrupting the RSC stream and preventing dynamic navigation requests.