Remove legacy PPR postpone cluster#90726
Remove legacy PPR postpone cluster#90726devjiwonchoi wants to merge 1 commit intojiwon-2026-03-01/remove-prerender-pprfrom
Conversation
Delete `Postpone` component, `postponeWithTracking`, `isDynamicPostpone`, and related helpers from dynamic-rendering.ts. Remove the broken force-dynamic postpone block from create-component-tree.tsx. Delete rsc/postpone.ts and its entry-base.ts export. Clean up consumer imports in unstable-rethrow.server.ts and is-dynamic-usage-error.ts.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: b407425772
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @@ -725,46 +724,6 @@ async function createComponentTreeInternal( | |||
| } | |||
|
|
|||
| const Component = MaybeComponent | |||
There was a problem hiding this comment.
Keep force-dynamic routes on the dynamic prerender path
Removing the force-dynamic/cacheComponents early return here drops the only guaranteed signal that a dynamic = "force-dynamic" page must be treated as dynamic even when it does not read any dynamic APIs. In that case the server prerender can complete synchronously, serverIsDynamic stays false, and the build hits the invariant in app-render.tsx ("did not trigger the dynamic pathway") instead of producing output; a minimal static JSX page with dynamic = "force-dynamic" is enough to trigger this during static generation.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
It's handling the removed <Postpone> component
Stats from current PR🟢 1 improvement
📊 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: **401 kB** → **400 kB** ✅ -515 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 (19 files)Files with changes:
View diffsapp-page-exp..ntime.dev.jsfailed to diffapp-page-exp..time.prod.jsfailed to diffapp-page-tur..ntime.dev.jsfailed to diffapp-page-tur..time.prod.jsfailed to diffapp-page-tur..ntime.dev.jsfailed to diffapp-page-tur..time.prod.jsfailed to diffapp-page.runtime.dev.jsfailed to diffapp-page.runtime.prod.jsfailed to diffapp-route-ex..ntime.dev.jsDiff too large to display app-route-ex..time.prod.jsDiff too large to display app-route-tu..ntime.dev.jsDiff too large to display app-route-tu..time.prod.jsDiff too large to display app-route-tu..ntime.dev.jsDiff too large to display app-route-tu..time.prod.jsDiff too large to display app-route.runtime.dev.jsDiff too large to display app-route.ru..time.prod.jsDiff too large to display server.runtime.prod.jsDiff too large to display pages-api-tu..time.prod.jsDiff too large to display pages-turbo...time.prod.jsDiff too large to display 📎 Tarball URL |
Stacked on #90721
Verified deployment tests pass on CI: https://github.com/vercel/next.js/actions/runs/22541051404