Skip to content

segment cache: add test for passing unawaited promise to context provider - #89339

Merged
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises
Feb 21, 2026
Merged

segment cache: add test for passing unawaited promise to context provider#89339
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises

Conversation

@ztanner

@ztannerztanner commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Adds a failing test proving that if the RSC response from a prefetch contains an unresolved promise, navigating to the page will cause the Suspense boundary wrapping the use of that promise to remain in fallback state indefinitely.

This appears to have regressed in e9a03ac, though the theory is that this is just uncovering a React bug rather than causing the issue.

Fixed via react/react#35839

Closes#89170

@nextjs-botnextjs-bot added created-by: Next.js team PRs by the Next.js team. tests labels Jan 31, 2026
@ztannerGraphite App

ztanner commented Jan 31, 2026

Copy link
Copy Markdown
ContributorAuthor

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

MetricCanaryPRChangeTrend
Cold (Listen)507ms507ms▁█▁█▂
Cold (Ready in log)484ms483ms▁█▁█▃
Cold (First Request)1.049s1.042s▁█▄█▄
Warm (Listen)508ms508ms▁█▁█▂
Warm (Ready in log)480ms479ms▁█▁█▃
Warm (First Request)375ms380ms▁█▁█▃
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms457ms▁▁▁▁▁
Cold (Ready in log)453ms453ms▁▃▁▁▃
Cold (First Request)2.102s2.062s▁▁▁▁▃
Warm (Listen)456ms456ms▁▁▁▁▁
Warm (Ready in log)452ms453ms▁▂▁▁▂
Warm (First Request)2.077s2.065s▁▁▁▁▃

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.741s4.735s▁█▁▇▅
Cached Build4.664s4.730s▁█▁█▅
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build14.963s14.948s▁▁▁▁▄
Cached Build15.039s14.984s▁▁▁▁▄
node_modules Size474 MB474 MB▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **399 kB** → **399 kB** ✅ -5 B

80 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip768 B763 B
Total768 B763 B✅ -5 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip451 B450 B
Total451 B450 B✅ -1 B

📦 Webpack

Client

Main Bundles
CanaryPRChange
5528-HASH.js gzip5.48 kBN/A-
6280-HASH.js gzip57.5 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.6 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B254 B
main-HASH.js gzip39.1 kB39.1 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.53 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.49 kB-
6948ada0-HASH.js gzipN/A62.6 kB-
9544-HASH.js gzipN/A58.3 kB-
Total231 kB232 kB⚠️ +748 B
Polyfills
CanaryPRChange
polyfills-HASH.js gzip39.4 kB39.4 kB
Total39.4 kB39.4 kB
Pages
CanaryPRChange
_app-HASH.js gzip194 B194 B
_error-HASH.js gzip183 B180 B🟢 3 B (-2%)
css-HASH.js gzip331 B330 B
dynamic-HASH.js gzip1.81 kB1.81 kB
edge-ssr-HASH.js gzip256 B256 B
head-HASH.js gzip351 B352 B
hooks-HASH.js gzip384 B383 B
image-HASH.js gzip580 B581 B
index-HASH.js gzip260 B260 B
link-HASH.js gzip2.5 kB2.5 kB
routerDirect..HASH.js gzip320 B319 B
script-HASH.js gzip386 B386 B
withRouter-HASH.js gzip315 B315 B
1afbb74e6ecf..834.css gzip106 B106 B
Total7.97 kB7.97 kB✅ -2 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip125 kB125 kB
page.js gzip253 kB253 kB
Total377 kB378 kB⚠️ +276 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip43.8 kB43.7 kB
edge-runtime..pack.js gzip842 B842 B
Total45.4 kB45.3 kB✅ -98 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip715 B718 B
Total715 B718 B⚠️ +3 B
Build Cache
CanaryPRChange
0.pack gzip3.96 MB3.97 MB🔴 +6.96 kB (+0%)
index.pack gzip103 kB103 kB
index.pack.old gzip104 kB103 kB
Total4.17 MB4.17 MB⚠️ +5.61 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip318 kB318 kB
app-page-exp..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip317 kB317 kB
app-page-tur..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip314 kB314 kB
app-page-tur..prod.js gzip166 kB166 kB
app-page.run...dev.js gzip314 kB314 kB
app-page.run..prod.js gzip167 kB167 kB
app-route-ex...dev.js gzip70.7 kB70.7 kB
app-route-ex..prod.js gzip49.1 kB49.1 kB
app-route-tu...dev.js gzip70.7 kB70.7 kB
app-route-tu..prod.js gzip49.2 kB49.2 kB
app-route-tu...dev.js gzip70.3 kB70.3 kB
app-route-tu..prod.js gzip48.9 kB48.9 kB
app-route.ru...dev.js gzip70.2 kB70.2 kB
app-route.ru..prod.js gzip48.9 kB48.9 kB
dist_client_...dev.js gzip324 B324 B
dist_client_...dev.js gzip326 B326 B
dist_client_...dev.js gzip318 B318 B
dist_client_...dev.js gzip317 B317 B
pages-api-tu...dev.js gzip43.2 kB43.2 kB
pages-api-tu..prod.js gzip32.9 kB32.9 kB
pages-api.ru...dev.js gzip43.2 kB43.2 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.5 kB52.5 kB
pages-turbo...prod.js gzip38.5 kB38.5 kB
pages.runtim...dev.js gzip52.5 kB52.5 kB
pages.runtim..prod.js gzip38.4 kB38.4 kB
server.runti..prod.js gzip62 kB62 kB
Total2.81 MB2.81 MB⚠️ +1 B
📝 Changed Files (4 files)

Files with changes:

  • pages-api-tu..time.prod.js
  • pages-api.runtime.dev.js
  • pages-turbo...time.prod.js
  • pages.runtime.dev.js
View diffs
pages-api-tu..time.prod.js

Diff too large to display

pages-api.runtime.dev.js

Diff too large to display

pages-turbo...time.prod.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from bc1adb2 to e0c8338CompareFebruary 17, 2026 00:24
@ztannerztanner changed the title add failing test for unresolved prefetch promisessegment cache: keep descendant PPR cache nodes deferred under pending parentFeb 17, 2026
@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from e0c8338 to ece5534CompareFebruary 17, 2026 01:13
@ztannerztanner changed the title segment cache: keep descendant PPR cache nodes deferred under pending parentsegment cache: add failing test for unresolved prefetch promisesFeb 17, 2026
@eps1lon
eps1lonforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from ece5534 to 1308c99CompareFebruary 21, 2026 17:57
@ztanner
ztanner marked this pull request as ready for review February 21, 2026 18:25
@ztannerztanner changed the title segment cache: add failing test for unresolved prefetch promisessegment cache: add test for passing unawaited promise to context providerFeb 21, 2026
@ztanner
ztanner enabled auto-merge (squash) February 21, 2026 18:26
@ztanner
ztanner requested a review from eps1lonFebruary 21, 2026 18:28
@ztanner
ztanner merged commit fd38d5b into canaryFeb 21, 2026
157 checks passed
@ztanner
ztanner deleted the 01-31-add_failing_test_for_unresolved_prefetch_promises branch February 21, 2026 18:29
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Mar 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docs: Clicking on Learn Next.js button leads to page with missing text

3 participants

@ztanner@nextjs-bot@eps1lon
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
segment cache: add test for passing unawaited promise to context provider by ztanner · Pull Request #89339 · vercel/next.js · GitHub
Skip to content

segment cache: add test for passing unawaited promise to context provider - #89339

Merged
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises
Feb 21, 2026
Merged

segment cache: add test for passing unawaited promise to context provider#89339
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises

Conversation

@ztanner

@ztannerztanner commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Adds a failing test proving that if the RSC response from a prefetch contains an unresolved promise, navigating to the page will cause the Suspense boundary wrapping the use of that promise to remain in fallback state indefinitely.

This appears to have regressed in e9a03ac, though the theory is that this is just uncovering a React bug rather than causing the issue.

Fixed via react/react#35839

Closes#89170

@nextjs-botnextjs-bot added created-by: Next.js team PRs by the Next.js team. tests labels Jan 31, 2026
@ztannerGraphite App

ztanner commented Jan 31, 2026

Copy link
Copy Markdown
ContributorAuthor

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

MetricCanaryPRChangeTrend
Cold (Listen)507ms507ms▁█▁█▂
Cold (Ready in log)484ms483ms▁█▁█▃
Cold (First Request)1.049s1.042s▁█▄█▄
Warm (Listen)508ms508ms▁█▁█▂
Warm (Ready in log)480ms479ms▁█▁█▃
Warm (First Request)375ms380ms▁█▁█▃
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms457ms▁▁▁▁▁
Cold (Ready in log)453ms453ms▁▃▁▁▃
Cold (First Request)2.102s2.062s▁▁▁▁▃
Warm (Listen)456ms456ms▁▁▁▁▁
Warm (Ready in log)452ms453ms▁▂▁▁▂
Warm (First Request)2.077s2.065s▁▁▁▁▃

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.741s4.735s▁█▁▇▅
Cached Build4.664s4.730s▁█▁█▅
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build14.963s14.948s▁▁▁▁▄
Cached Build15.039s14.984s▁▁▁▁▄
node_modules Size474 MB474 MB▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **399 kB** → **399 kB** ✅ -5 B

80 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip768 B763 B
Total768 B763 B✅ -5 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip451 B450 B
Total451 B450 B✅ -1 B

📦 Webpack

Client

Main Bundles
CanaryPRChange
5528-HASH.js gzip5.48 kBN/A-
6280-HASH.js gzip57.5 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.6 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B254 B
main-HASH.js gzip39.1 kB39.1 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.53 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.49 kB-
6948ada0-HASH.js gzipN/A62.6 kB-
9544-HASH.js gzipN/A58.3 kB-
Total231 kB232 kB⚠️ +748 B
Polyfills
CanaryPRChange
polyfills-HASH.js gzip39.4 kB39.4 kB
Total39.4 kB39.4 kB
Pages
CanaryPRChange
_app-HASH.js gzip194 B194 B
_error-HASH.js gzip183 B180 B🟢 3 B (-2%)
css-HASH.js gzip331 B330 B
dynamic-HASH.js gzip1.81 kB1.81 kB
edge-ssr-HASH.js gzip256 B256 B
head-HASH.js gzip351 B352 B
hooks-HASH.js gzip384 B383 B
image-HASH.js gzip580 B581 B
index-HASH.js gzip260 B260 B
link-HASH.js gzip2.5 kB2.5 kB
routerDirect..HASH.js gzip320 B319 B
script-HASH.js gzip386 B386 B
withRouter-HASH.js gzip315 B315 B
1afbb74e6ecf..834.css gzip106 B106 B
Total7.97 kB7.97 kB✅ -2 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip125 kB125 kB
page.js gzip253 kB253 kB
Total377 kB378 kB⚠️ +276 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip43.8 kB43.7 kB
edge-runtime..pack.js gzip842 B842 B
Total45.4 kB45.3 kB✅ -98 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip715 B718 B
Total715 B718 B⚠️ +3 B
Build Cache
CanaryPRChange
0.pack gzip3.96 MB3.97 MB🔴 +6.96 kB (+0%)
index.pack gzip103 kB103 kB
index.pack.old gzip104 kB103 kB
Total4.17 MB4.17 MB⚠️ +5.61 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip318 kB318 kB
app-page-exp..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip317 kB317 kB
app-page-tur..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip314 kB314 kB
app-page-tur..prod.js gzip166 kB166 kB
app-page.run...dev.js gzip314 kB314 kB
app-page.run..prod.js gzip167 kB167 kB
app-route-ex...dev.js gzip70.7 kB70.7 kB
app-route-ex..prod.js gzip49.1 kB49.1 kB
app-route-tu...dev.js gzip70.7 kB70.7 kB
app-route-tu..prod.js gzip49.2 kB49.2 kB
app-route-tu...dev.js gzip70.3 kB70.3 kB
app-route-tu..prod.js gzip48.9 kB48.9 kB
app-route.ru...dev.js gzip70.2 kB70.2 kB
app-route.ru..prod.js gzip48.9 kB48.9 kB
dist_client_...dev.js gzip324 B324 B
dist_client_...dev.js gzip326 B326 B
dist_client_...dev.js gzip318 B318 B
dist_client_...dev.js gzip317 B317 B
pages-api-tu...dev.js gzip43.2 kB43.2 kB
pages-api-tu..prod.js gzip32.9 kB32.9 kB
pages-api.ru...dev.js gzip43.2 kB43.2 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.5 kB52.5 kB
pages-turbo...prod.js gzip38.5 kB38.5 kB
pages.runtim...dev.js gzip52.5 kB52.5 kB
pages.runtim..prod.js gzip38.4 kB38.4 kB
server.runti..prod.js gzip62 kB62 kB
Total2.81 MB2.81 MB⚠️ +1 B
📝 Changed Files (4 files)

Files with changes:

  • pages-api-tu..time.prod.js
  • pages-api.runtime.dev.js
  • pages-turbo...time.prod.js
  • pages.runtime.dev.js
View diffs
pages-api-tu..time.prod.js

Diff too large to display

pages-api.runtime.dev.js

Diff too large to display

pages-turbo...time.prod.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from bc1adb2 to e0c8338CompareFebruary 17, 2026 00:24
@ztannerztanner changed the title add failing test for unresolved prefetch promisessegment cache: keep descendant PPR cache nodes deferred under pending parentFeb 17, 2026
@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from e0c8338 to ece5534CompareFebruary 17, 2026 01:13
@ztannerztanner changed the title segment cache: keep descendant PPR cache nodes deferred under pending parentsegment cache: add failing test for unresolved prefetch promisesFeb 17, 2026
@eps1lon
eps1lonforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from ece5534 to 1308c99CompareFebruary 21, 2026 17:57
@ztanner
ztanner marked this pull request as ready for review February 21, 2026 18:25
@ztannerztanner changed the title segment cache: add failing test for unresolved prefetch promisessegment cache: add test for passing unawaited promise to context providerFeb 21, 2026
@ztanner
ztanner enabled auto-merge (squash) February 21, 2026 18:26
@ztanner
ztanner requested a review from eps1lonFebruary 21, 2026 18:28
@ztanner
ztanner merged commit fd38d5b into canaryFeb 21, 2026
157 checks passed
@ztanner
ztanner deleted the 01-31-add_failing_test_for_unresolved_prefetch_promises branch February 21, 2026 18:29
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Mar 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docs: Clicking on Learn Next.js button leads to page with missing text

3 participants

@ztanner@nextjs-bot@eps1lon
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' segment cache: add test for passing unawaited promise to context provider by ztanner · Pull Request #89339 · vercel/next.js · GitHub
Skip to content

segment cache: add test for passing unawaited promise to context provider - #89339

Merged
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises
Feb 21, 2026
Merged

segment cache: add test for passing unawaited promise to context provider#89339
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises

Conversation

@ztanner

@ztannerztanner commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Adds a failing test proving that if the RSC response from a prefetch contains an unresolved promise, navigating to the page will cause the Suspense boundary wrapping the use of that promise to remain in fallback state indefinitely.

This appears to have regressed in e9a03ac, though the theory is that this is just uncovering a React bug rather than causing the issue.

Fixed via react/react#35839

Closes#89170

@nextjs-botnextjs-bot added created-by: Next.js team PRs by the Next.js team. tests labels Jan 31, 2026
@ztannerGraphite App

ztanner commented Jan 31, 2026

Copy link
Copy Markdown
ContributorAuthor

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

MetricCanaryPRChangeTrend
Cold (Listen)507ms507ms▁█▁█▂
Cold (Ready in log)484ms483ms▁█▁█▃
Cold (First Request)1.049s1.042s▁█▄█▄
Warm (Listen)508ms508ms▁█▁█▂
Warm (Ready in log)480ms479ms▁█▁█▃
Warm (First Request)375ms380ms▁█▁█▃
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms457ms▁▁▁▁▁
Cold (Ready in log)453ms453ms▁▃▁▁▃
Cold (First Request)2.102s2.062s▁▁▁▁▃
Warm (Listen)456ms456ms▁▁▁▁▁
Warm (Ready in log)452ms453ms▁▂▁▁▂
Warm (First Request)2.077s2.065s▁▁▁▁▃

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.741s4.735s▁█▁▇▅
Cached Build4.664s4.730s▁█▁█▅
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build14.963s14.948s▁▁▁▁▄
Cached Build15.039s14.984s▁▁▁▁▄
node_modules Size474 MB474 MB▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **399 kB** → **399 kB** ✅ -5 B

80 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip768 B763 B
Total768 B763 B✅ -5 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip451 B450 B
Total451 B450 B✅ -1 B

📦 Webpack

Client

Main Bundles
CanaryPRChange
5528-HASH.js gzip5.48 kBN/A-
6280-HASH.js gzip57.5 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.6 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B254 B
main-HASH.js gzip39.1 kB39.1 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.53 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.49 kB-
6948ada0-HASH.js gzipN/A62.6 kB-
9544-HASH.js gzipN/A58.3 kB-
Total231 kB232 kB⚠️ +748 B
Polyfills
CanaryPRChange
polyfills-HASH.js gzip39.4 kB39.4 kB
Total39.4 kB39.4 kB
Pages
CanaryPRChange
_app-HASH.js gzip194 B194 B
_error-HASH.js gzip183 B180 B🟢 3 B (-2%)
css-HASH.js gzip331 B330 B
dynamic-HASH.js gzip1.81 kB1.81 kB
edge-ssr-HASH.js gzip256 B256 B
head-HASH.js gzip351 B352 B
hooks-HASH.js gzip384 B383 B
image-HASH.js gzip580 B581 B
index-HASH.js gzip260 B260 B
link-HASH.js gzip2.5 kB2.5 kB
routerDirect..HASH.js gzip320 B319 B
script-HASH.js gzip386 B386 B
withRouter-HASH.js gzip315 B315 B
1afbb74e6ecf..834.css gzip106 B106 B
Total7.97 kB7.97 kB✅ -2 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip125 kB125 kB
page.js gzip253 kB253 kB
Total377 kB378 kB⚠️ +276 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip43.8 kB43.7 kB
edge-runtime..pack.js gzip842 B842 B
Total45.4 kB45.3 kB✅ -98 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip715 B718 B
Total715 B718 B⚠️ +3 B
Build Cache
CanaryPRChange
0.pack gzip3.96 MB3.97 MB🔴 +6.96 kB (+0%)
index.pack gzip103 kB103 kB
index.pack.old gzip104 kB103 kB
Total4.17 MB4.17 MB⚠️ +5.61 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip318 kB318 kB
app-page-exp..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip317 kB317 kB
app-page-tur..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip314 kB314 kB
app-page-tur..prod.js gzip166 kB166 kB
app-page.run...dev.js gzip314 kB314 kB
app-page.run..prod.js gzip167 kB167 kB
app-route-ex...dev.js gzip70.7 kB70.7 kB
app-route-ex..prod.js gzip49.1 kB49.1 kB
app-route-tu...dev.js gzip70.7 kB70.7 kB
app-route-tu..prod.js gzip49.2 kB49.2 kB
app-route-tu...dev.js gzip70.3 kB70.3 kB
app-route-tu..prod.js gzip48.9 kB48.9 kB
app-route.ru...dev.js gzip70.2 kB70.2 kB
app-route.ru..prod.js gzip48.9 kB48.9 kB
dist_client_...dev.js gzip324 B324 B
dist_client_...dev.js gzip326 B326 B
dist_client_...dev.js gzip318 B318 B
dist_client_...dev.js gzip317 B317 B
pages-api-tu...dev.js gzip43.2 kB43.2 kB
pages-api-tu..prod.js gzip32.9 kB32.9 kB
pages-api.ru...dev.js gzip43.2 kB43.2 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.5 kB52.5 kB
pages-turbo...prod.js gzip38.5 kB38.5 kB
pages.runtim...dev.js gzip52.5 kB52.5 kB
pages.runtim..prod.js gzip38.4 kB38.4 kB
server.runti..prod.js gzip62 kB62 kB
Total2.81 MB2.81 MB⚠️ +1 B
📝 Changed Files (4 files)

Files with changes:

  • pages-api-tu..time.prod.js
  • pages-api.runtime.dev.js
  • pages-turbo...time.prod.js
  • pages.runtime.dev.js
View diffs
pages-api-tu..time.prod.js

Diff too large to display

pages-api.runtime.dev.js

Diff too large to display

pages-turbo...time.prod.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from bc1adb2 to e0c8338CompareFebruary 17, 2026 00:24
@ztannerztanner changed the title add failing test for unresolved prefetch promisessegment cache: keep descendant PPR cache nodes deferred under pending parentFeb 17, 2026
@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from e0c8338 to ece5534CompareFebruary 17, 2026 01:13
@ztannerztanner changed the title segment cache: keep descendant PPR cache nodes deferred under pending parentsegment cache: add failing test for unresolved prefetch promisesFeb 17, 2026
@eps1lon
eps1lonforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from ece5534 to 1308c99CompareFebruary 21, 2026 17:57
@ztanner
ztanner marked this pull request as ready for review February 21, 2026 18:25
@ztannerztanner changed the title segment cache: add failing test for unresolved prefetch promisessegment cache: add test for passing unawaited promise to context providerFeb 21, 2026
@ztanner
ztanner enabled auto-merge (squash) February 21, 2026 18:26
@ztanner
ztanner requested a review from eps1lonFebruary 21, 2026 18:28
@ztanner
ztanner merged commit fd38d5b into canaryFeb 21, 2026
157 checks passed
@ztanner
ztanner deleted the 01-31-add_failing_test_for_unresolved_prefetch_promises branch February 21, 2026 18:29
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Mar 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docs: Clicking on Learn Next.js button leads to page with missing text

3 participants

@ztanner@nextjs-bot@eps1lon
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' segment cache: add test for passing unawaited promise to context provider by ztanner · Pull Request #89339 · vercel/next.js · GitHub
Skip to content

segment cache: add test for passing unawaited promise to context provider - #89339

Merged
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises
Feb 21, 2026
Merged

segment cache: add test for passing unawaited promise to context provider#89339
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises

Conversation

@ztanner

@ztannerztanner commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Adds a failing test proving that if the RSC response from a prefetch contains an unresolved promise, navigating to the page will cause the Suspense boundary wrapping the use of that promise to remain in fallback state indefinitely.

This appears to have regressed in e9a03ac, though the theory is that this is just uncovering a React bug rather than causing the issue.

Fixed via react/react#35839

Closes#89170

@nextjs-botnextjs-bot added created-by: Next.js team PRs by the Next.js team. tests labels Jan 31, 2026
@ztannerGraphite App

ztanner commented Jan 31, 2026

Copy link
Copy Markdown
ContributorAuthor

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

MetricCanaryPRChangeTrend
Cold (Listen)507ms507ms▁█▁█▂
Cold (Ready in log)484ms483ms▁█▁█▃
Cold (First Request)1.049s1.042s▁█▄█▄
Warm (Listen)508ms508ms▁█▁█▂
Warm (Ready in log)480ms479ms▁█▁█▃
Warm (First Request)375ms380ms▁█▁█▃
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms457ms▁▁▁▁▁
Cold (Ready in log)453ms453ms▁▃▁▁▃
Cold (First Request)2.102s2.062s▁▁▁▁▃
Warm (Listen)456ms456ms▁▁▁▁▁
Warm (Ready in log)452ms453ms▁▂▁▁▂
Warm (First Request)2.077s2.065s▁▁▁▁▃

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.741s4.735s▁█▁▇▅
Cached Build4.664s4.730s▁█▁█▅
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build14.963s14.948s▁▁▁▁▄
Cached Build15.039s14.984s▁▁▁▁▄
node_modules Size474 MB474 MB▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **399 kB** → **399 kB** ✅ -5 B

80 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip768 B763 B
Total768 B763 B✅ -5 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip451 B450 B
Total451 B450 B✅ -1 B

📦 Webpack

Client

Main Bundles
CanaryPRChange
5528-HASH.js gzip5.48 kBN/A-
6280-HASH.js gzip57.5 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.6 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B254 B
main-HASH.js gzip39.1 kB39.1 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.53 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.49 kB-
6948ada0-HASH.js gzipN/A62.6 kB-
9544-HASH.js gzipN/A58.3 kB-
Total231 kB232 kB⚠️ +748 B
Polyfills
CanaryPRChange
polyfills-HASH.js gzip39.4 kB39.4 kB
Total39.4 kB39.4 kB
Pages
CanaryPRChange
_app-HASH.js gzip194 B194 B
_error-HASH.js gzip183 B180 B🟢 3 B (-2%)
css-HASH.js gzip331 B330 B
dynamic-HASH.js gzip1.81 kB1.81 kB
edge-ssr-HASH.js gzip256 B256 B
head-HASH.js gzip351 B352 B
hooks-HASH.js gzip384 B383 B
image-HASH.js gzip580 B581 B
index-HASH.js gzip260 B260 B
link-HASH.js gzip2.5 kB2.5 kB
routerDirect..HASH.js gzip320 B319 B
script-HASH.js gzip386 B386 B
withRouter-HASH.js gzip315 B315 B
1afbb74e6ecf..834.css gzip106 B106 B
Total7.97 kB7.97 kB✅ -2 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip125 kB125 kB
page.js gzip253 kB253 kB
Total377 kB378 kB⚠️ +276 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip43.8 kB43.7 kB
edge-runtime..pack.js gzip842 B842 B
Total45.4 kB45.3 kB✅ -98 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip715 B718 B
Total715 B718 B⚠️ +3 B
Build Cache
CanaryPRChange
0.pack gzip3.96 MB3.97 MB🔴 +6.96 kB (+0%)
index.pack gzip103 kB103 kB
index.pack.old gzip104 kB103 kB
Total4.17 MB4.17 MB⚠️ +5.61 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip318 kB318 kB
app-page-exp..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip317 kB317 kB
app-page-tur..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip314 kB314 kB
app-page-tur..prod.js gzip166 kB166 kB
app-page.run...dev.js gzip314 kB314 kB
app-page.run..prod.js gzip167 kB167 kB
app-route-ex...dev.js gzip70.7 kB70.7 kB
app-route-ex..prod.js gzip49.1 kB49.1 kB
app-route-tu...dev.js gzip70.7 kB70.7 kB
app-route-tu..prod.js gzip49.2 kB49.2 kB
app-route-tu...dev.js gzip70.3 kB70.3 kB
app-route-tu..prod.js gzip48.9 kB48.9 kB
app-route.ru...dev.js gzip70.2 kB70.2 kB
app-route.ru..prod.js gzip48.9 kB48.9 kB
dist_client_...dev.js gzip324 B324 B
dist_client_...dev.js gzip326 B326 B
dist_client_...dev.js gzip318 B318 B
dist_client_...dev.js gzip317 B317 B
pages-api-tu...dev.js gzip43.2 kB43.2 kB
pages-api-tu..prod.js gzip32.9 kB32.9 kB
pages-api.ru...dev.js gzip43.2 kB43.2 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.5 kB52.5 kB
pages-turbo...prod.js gzip38.5 kB38.5 kB
pages.runtim...dev.js gzip52.5 kB52.5 kB
pages.runtim..prod.js gzip38.4 kB38.4 kB
server.runti..prod.js gzip62 kB62 kB
Total2.81 MB2.81 MB⚠️ +1 B
📝 Changed Files (4 files)

Files with changes:

  • pages-api-tu..time.prod.js
  • pages-api.runtime.dev.js
  • pages-turbo...time.prod.js
  • pages.runtime.dev.js
View diffs
pages-api-tu..time.prod.js

Diff too large to display

pages-api.runtime.dev.js

Diff too large to display

pages-turbo...time.prod.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from bc1adb2 to e0c8338CompareFebruary 17, 2026 00:24
@ztannerztanner changed the title add failing test for unresolved prefetch promisessegment cache: keep descendant PPR cache nodes deferred under pending parentFeb 17, 2026
@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from e0c8338 to ece5534CompareFebruary 17, 2026 01:13
@ztannerztanner changed the title segment cache: keep descendant PPR cache nodes deferred under pending parentsegment cache: add failing test for unresolved prefetch promisesFeb 17, 2026
@eps1lon
eps1lonforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from ece5534 to 1308c99CompareFebruary 21, 2026 17:57
@ztanner
ztanner marked this pull request as ready for review February 21, 2026 18:25
@ztannerztanner changed the title segment cache: add failing test for unresolved prefetch promisessegment cache: add test for passing unawaited promise to context providerFeb 21, 2026
@ztanner
ztanner enabled auto-merge (squash) February 21, 2026 18:26
@ztanner
ztanner requested a review from eps1lonFebruary 21, 2026 18:28
@ztanner
ztanner merged commit fd38d5b into canaryFeb 21, 2026
157 checks passed
@ztanner
ztanner deleted the 01-31-add_failing_test_for_unresolved_prefetch_promises branch February 21, 2026 18:29
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Mar 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docs: Clicking on Learn Next.js button leads to page with missing text

3 participants

@ztanner@nextjs-bot@eps1lon
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' segment cache: add test for passing unawaited promise to context provider by ztanner · Pull Request #89339 · vercel/next.js · GitHub
Skip to content

segment cache: add test for passing unawaited promise to context provider - #89339

Merged
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises
Feb 21, 2026
Merged

segment cache: add test for passing unawaited promise to context provider#89339
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises

Conversation

@ztanner

@ztannerztanner commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Adds a failing test proving that if the RSC response from a prefetch contains an unresolved promise, navigating to the page will cause the Suspense boundary wrapping the use of that promise to remain in fallback state indefinitely.

This appears to have regressed in e9a03ac, though the theory is that this is just uncovering a React bug rather than causing the issue.

Fixed via react/react#35839

Closes#89170

@nextjs-botnextjs-bot added created-by: Next.js team PRs by the Next.js team. tests labels Jan 31, 2026
@ztannerGraphite App

ztanner commented Jan 31, 2026

Copy link
Copy Markdown
ContributorAuthor

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

MetricCanaryPRChangeTrend
Cold (Listen)507ms507ms▁█▁█▂
Cold (Ready in log)484ms483ms▁█▁█▃
Cold (First Request)1.049s1.042s▁█▄█▄
Warm (Listen)508ms508ms▁█▁█▂
Warm (Ready in log)480ms479ms▁█▁█▃
Warm (First Request)375ms380ms▁█▁█▃
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms457ms▁▁▁▁▁
Cold (Ready in log)453ms453ms▁▃▁▁▃
Cold (First Request)2.102s2.062s▁▁▁▁▃
Warm (Listen)456ms456ms▁▁▁▁▁
Warm (Ready in log)452ms453ms▁▂▁▁▂
Warm (First Request)2.077s2.065s▁▁▁▁▃

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.741s4.735s▁█▁▇▅
Cached Build4.664s4.730s▁█▁█▅
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build14.963s14.948s▁▁▁▁▄
Cached Build15.039s14.984s▁▁▁▁▄
node_modules Size474 MB474 MB▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **399 kB** → **399 kB** ✅ -5 B

80 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip768 B763 B
Total768 B763 B✅ -5 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip451 B450 B
Total451 B450 B✅ -1 B

📦 Webpack

Client

Main Bundles
CanaryPRChange
5528-HASH.js gzip5.48 kBN/A-
6280-HASH.js gzip57.5 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.6 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B254 B
main-HASH.js gzip39.1 kB39.1 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.53 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.49 kB-
6948ada0-HASH.js gzipN/A62.6 kB-
9544-HASH.js gzipN/A58.3 kB-
Total231 kB232 kB⚠️ +748 B
Polyfills
CanaryPRChange
polyfills-HASH.js gzip39.4 kB39.4 kB
Total39.4 kB39.4 kB
Pages
CanaryPRChange
_app-HASH.js gzip194 B194 B
_error-HASH.js gzip183 B180 B🟢 3 B (-2%)
css-HASH.js gzip331 B330 B
dynamic-HASH.js gzip1.81 kB1.81 kB
edge-ssr-HASH.js gzip256 B256 B
head-HASH.js gzip351 B352 B
hooks-HASH.js gzip384 B383 B
image-HASH.js gzip580 B581 B
index-HASH.js gzip260 B260 B
link-HASH.js gzip2.5 kB2.5 kB
routerDirect..HASH.js gzip320 B319 B
script-HASH.js gzip386 B386 B
withRouter-HASH.js gzip315 B315 B
1afbb74e6ecf..834.css gzip106 B106 B
Total7.97 kB7.97 kB✅ -2 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip125 kB125 kB
page.js gzip253 kB253 kB
Total377 kB378 kB⚠️ +276 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip43.8 kB43.7 kB
edge-runtime..pack.js gzip842 B842 B
Total45.4 kB45.3 kB✅ -98 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip715 B718 B
Total715 B718 B⚠️ +3 B
Build Cache
CanaryPRChange
0.pack gzip3.96 MB3.97 MB🔴 +6.96 kB (+0%)
index.pack gzip103 kB103 kB
index.pack.old gzip104 kB103 kB
Total4.17 MB4.17 MB⚠️ +5.61 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip318 kB318 kB
app-page-exp..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip317 kB317 kB
app-page-tur..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip314 kB314 kB
app-page-tur..prod.js gzip166 kB166 kB
app-page.run...dev.js gzip314 kB314 kB
app-page.run..prod.js gzip167 kB167 kB
app-route-ex...dev.js gzip70.7 kB70.7 kB
app-route-ex..prod.js gzip49.1 kB49.1 kB
app-route-tu...dev.js gzip70.7 kB70.7 kB
app-route-tu..prod.js gzip49.2 kB49.2 kB
app-route-tu...dev.js gzip70.3 kB70.3 kB
app-route-tu..prod.js gzip48.9 kB48.9 kB
app-route.ru...dev.js gzip70.2 kB70.2 kB
app-route.ru..prod.js gzip48.9 kB48.9 kB
dist_client_...dev.js gzip324 B324 B
dist_client_...dev.js gzip326 B326 B
dist_client_...dev.js gzip318 B318 B
dist_client_...dev.js gzip317 B317 B
pages-api-tu...dev.js gzip43.2 kB43.2 kB
pages-api-tu..prod.js gzip32.9 kB32.9 kB
pages-api.ru...dev.js gzip43.2 kB43.2 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.5 kB52.5 kB
pages-turbo...prod.js gzip38.5 kB38.5 kB
pages.runtim...dev.js gzip52.5 kB52.5 kB
pages.runtim..prod.js gzip38.4 kB38.4 kB
server.runti..prod.js gzip62 kB62 kB
Total2.81 MB2.81 MB⚠️ +1 B
📝 Changed Files (4 files)

Files with changes:

  • pages-api-tu..time.prod.js
  • pages-api.runtime.dev.js
  • pages-turbo...time.prod.js
  • pages.runtime.dev.js
View diffs
pages-api-tu..time.prod.js

Diff too large to display

pages-api.runtime.dev.js

Diff too large to display

pages-turbo...time.prod.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from bc1adb2 to e0c8338CompareFebruary 17, 2026 00:24
@ztannerztanner changed the title add failing test for unresolved prefetch promisessegment cache: keep descendant PPR cache nodes deferred under pending parentFeb 17, 2026
@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from e0c8338 to ece5534CompareFebruary 17, 2026 01:13
@ztannerztanner changed the title segment cache: keep descendant PPR cache nodes deferred under pending parentsegment cache: add failing test for unresolved prefetch promisesFeb 17, 2026
@eps1lon
eps1lonforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from ece5534 to 1308c99CompareFebruary 21, 2026 17:57
@ztanner
ztanner marked this pull request as ready for review February 21, 2026 18:25
@ztannerztanner changed the title segment cache: add failing test for unresolved prefetch promisessegment cache: add test for passing unawaited promise to context providerFeb 21, 2026
@ztanner
ztanner enabled auto-merge (squash) February 21, 2026 18:26
@ztanner
ztanner requested a review from eps1lonFebruary 21, 2026 18:28
@ztanner
ztanner merged commit fd38d5b into canaryFeb 21, 2026
157 checks passed
@ztanner
ztanner deleted the 01-31-add_failing_test_for_unresolved_prefetch_promises branch February 21, 2026 18:29
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Mar 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docs: Clicking on Learn Next.js button leads to page with missing text

3 participants

@ztanner@nextjs-bot@eps1lon
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' segment cache: add test for passing unawaited promise to context provider by ztanner · Pull Request #89339 · vercel/next.js · GitHub
Skip to content

segment cache: add test for passing unawaited promise to context provider - #89339

Merged
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises
Feb 21, 2026
Merged

segment cache: add test for passing unawaited promise to context provider#89339
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises

Conversation

@ztanner

@ztannerztanner commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Adds a failing test proving that if the RSC response from a prefetch contains an unresolved promise, navigating to the page will cause the Suspense boundary wrapping the use of that promise to remain in fallback state indefinitely.

This appears to have regressed in e9a03ac, though the theory is that this is just uncovering a React bug rather than causing the issue.

Fixed via react/react#35839

Closes#89170

@nextjs-botnextjs-bot added created-by: Next.js team PRs by the Next.js team. tests labels Jan 31, 2026
@ztannerGraphite App

ztanner commented Jan 31, 2026

Copy link
Copy Markdown
ContributorAuthor

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

MetricCanaryPRChangeTrend
Cold (Listen)507ms507ms▁█▁█▂
Cold (Ready in log)484ms483ms▁█▁█▃
Cold (First Request)1.049s1.042s▁█▄█▄
Warm (Listen)508ms508ms▁█▁█▂
Warm (Ready in log)480ms479ms▁█▁█▃
Warm (First Request)375ms380ms▁█▁█▃
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms457ms▁▁▁▁▁
Cold (Ready in log)453ms453ms▁▃▁▁▃
Cold (First Request)2.102s2.062s▁▁▁▁▃
Warm (Listen)456ms456ms▁▁▁▁▁
Warm (Ready in log)452ms453ms▁▂▁▁▂
Warm (First Request)2.077s2.065s▁▁▁▁▃

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.741s4.735s▁█▁▇▅
Cached Build4.664s4.730s▁█▁█▅
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build14.963s14.948s▁▁▁▁▄
Cached Build15.039s14.984s▁▁▁▁▄
node_modules Size474 MB474 MB▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **399 kB** → **399 kB** ✅ -5 B

80 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip768 B763 B
Total768 B763 B✅ -5 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip451 B450 B
Total451 B450 B✅ -1 B

📦 Webpack

Client

Main Bundles
CanaryPRChange
5528-HASH.js gzip5.48 kBN/A-
6280-HASH.js gzip57.5 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.6 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B254 B
main-HASH.js gzip39.1 kB39.1 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.53 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.49 kB-
6948ada0-HASH.js gzipN/A62.6 kB-
9544-HASH.js gzipN/A58.3 kB-
Total231 kB232 kB⚠️ +748 B
Polyfills
CanaryPRChange
polyfills-HASH.js gzip39.4 kB39.4 kB
Total39.4 kB39.4 kB
Pages
CanaryPRChange
_app-HASH.js gzip194 B194 B
_error-HASH.js gzip183 B180 B🟢 3 B (-2%)
css-HASH.js gzip331 B330 B
dynamic-HASH.js gzip1.81 kB1.81 kB
edge-ssr-HASH.js gzip256 B256 B
head-HASH.js gzip351 B352 B
hooks-HASH.js gzip384 B383 B
image-HASH.js gzip580 B581 B
index-HASH.js gzip260 B260 B
link-HASH.js gzip2.5 kB2.5 kB
routerDirect..HASH.js gzip320 B319 B
script-HASH.js gzip386 B386 B
withRouter-HASH.js gzip315 B315 B
1afbb74e6ecf..834.css gzip106 B106 B
Total7.97 kB7.97 kB✅ -2 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip125 kB125 kB
page.js gzip253 kB253 kB
Total377 kB378 kB⚠️ +276 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip43.8 kB43.7 kB
edge-runtime..pack.js gzip842 B842 B
Total45.4 kB45.3 kB✅ -98 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip715 B718 B
Total715 B718 B⚠️ +3 B
Build Cache
CanaryPRChange
0.pack gzip3.96 MB3.97 MB🔴 +6.96 kB (+0%)
index.pack gzip103 kB103 kB
index.pack.old gzip104 kB103 kB
Total4.17 MB4.17 MB⚠️ +5.61 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip318 kB318 kB
app-page-exp..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip317 kB317 kB
app-page-tur..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip314 kB314 kB
app-page-tur..prod.js gzip166 kB166 kB
app-page.run...dev.js gzip314 kB314 kB
app-page.run..prod.js gzip167 kB167 kB
app-route-ex...dev.js gzip70.7 kB70.7 kB
app-route-ex..prod.js gzip49.1 kB49.1 kB
app-route-tu...dev.js gzip70.7 kB70.7 kB
app-route-tu..prod.js gzip49.2 kB49.2 kB
app-route-tu...dev.js gzip70.3 kB70.3 kB
app-route-tu..prod.js gzip48.9 kB48.9 kB
app-route.ru...dev.js gzip70.2 kB70.2 kB
app-route.ru..prod.js gzip48.9 kB48.9 kB
dist_client_...dev.js gzip324 B324 B
dist_client_...dev.js gzip326 B326 B
dist_client_...dev.js gzip318 B318 B
dist_client_...dev.js gzip317 B317 B
pages-api-tu...dev.js gzip43.2 kB43.2 kB
pages-api-tu..prod.js gzip32.9 kB32.9 kB
pages-api.ru...dev.js gzip43.2 kB43.2 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.5 kB52.5 kB
pages-turbo...prod.js gzip38.5 kB38.5 kB
pages.runtim...dev.js gzip52.5 kB52.5 kB
pages.runtim..prod.js gzip38.4 kB38.4 kB
server.runti..prod.js gzip62 kB62 kB
Total2.81 MB2.81 MB⚠️ +1 B
📝 Changed Files (4 files)

Files with changes:

  • pages-api-tu..time.prod.js
  • pages-api.runtime.dev.js
  • pages-turbo...time.prod.js
  • pages.runtime.dev.js
View diffs
pages-api-tu..time.prod.js

Diff too large to display

pages-api.runtime.dev.js

Diff too large to display

pages-turbo...time.prod.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from bc1adb2 to e0c8338CompareFebruary 17, 2026 00:24
@ztannerztanner changed the title add failing test for unresolved prefetch promisessegment cache: keep descendant PPR cache nodes deferred under pending parentFeb 17, 2026
@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from e0c8338 to ece5534CompareFebruary 17, 2026 01:13
@ztannerztanner changed the title segment cache: keep descendant PPR cache nodes deferred under pending parentsegment cache: add failing test for unresolved prefetch promisesFeb 17, 2026
@eps1lon
eps1lonforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from ece5534 to 1308c99CompareFebruary 21, 2026 17:57
@ztanner
ztanner marked this pull request as ready for review February 21, 2026 18:25
@ztannerztanner changed the title segment cache: add failing test for unresolved prefetch promisessegment cache: add test for passing unawaited promise to context providerFeb 21, 2026
@ztanner
ztanner enabled auto-merge (squash) February 21, 2026 18:26
@ztanner
ztanner requested a review from eps1lonFebruary 21, 2026 18:28
@ztanner
ztanner merged commit fd38d5b into canaryFeb 21, 2026
157 checks passed
@ztanner
ztanner deleted the 01-31-add_failing_test_for_unresolved_prefetch_promises branch February 21, 2026 18:29
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Mar 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docs: Clicking on Learn Next.js button leads to page with missing text

3 participants

@ztanner@nextjs-bot@eps1lon
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' segment cache: add test for passing unawaited promise to context provider by ztanner · Pull Request #89339 · vercel/next.js · GitHub
Skip to content

segment cache: add test for passing unawaited promise to context provider - #89339

Merged
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises
Feb 21, 2026
Merged

segment cache: add test for passing unawaited promise to context provider#89339
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises

Conversation

@ztanner

@ztannerztanner commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Adds a failing test proving that if the RSC response from a prefetch contains an unresolved promise, navigating to the page will cause the Suspense boundary wrapping the use of that promise to remain in fallback state indefinitely.

This appears to have regressed in e9a03ac, though the theory is that this is just uncovering a React bug rather than causing the issue.

Fixed via react/react#35839

Closes#89170

@nextjs-botnextjs-bot added created-by: Next.js team PRs by the Next.js team. tests labels Jan 31, 2026
@ztannerGraphite App

ztanner commented Jan 31, 2026

Copy link
Copy Markdown
ContributorAuthor

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

MetricCanaryPRChangeTrend
Cold (Listen)507ms507ms▁█▁█▂
Cold (Ready in log)484ms483ms▁█▁█▃
Cold (First Request)1.049s1.042s▁█▄█▄
Warm (Listen)508ms508ms▁█▁█▂
Warm (Ready in log)480ms479ms▁█▁█▃
Warm (First Request)375ms380ms▁█▁█▃
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms457ms▁▁▁▁▁
Cold (Ready in log)453ms453ms▁▃▁▁▃
Cold (First Request)2.102s2.062s▁▁▁▁▃
Warm (Listen)456ms456ms▁▁▁▁▁
Warm (Ready in log)452ms453ms▁▂▁▁▂
Warm (First Request)2.077s2.065s▁▁▁▁▃

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.741s4.735s▁█▁▇▅
Cached Build4.664s4.730s▁█▁█▅
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build14.963s14.948s▁▁▁▁▄
Cached Build15.039s14.984s▁▁▁▁▄
node_modules Size474 MB474 MB▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **399 kB** → **399 kB** ✅ -5 B

80 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip768 B763 B
Total768 B763 B✅ -5 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip451 B450 B
Total451 B450 B✅ -1 B

📦 Webpack

Client

Main Bundles
CanaryPRChange
5528-HASH.js gzip5.48 kBN/A-
6280-HASH.js gzip57.5 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.6 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B254 B
main-HASH.js gzip39.1 kB39.1 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.53 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.49 kB-
6948ada0-HASH.js gzipN/A62.6 kB-
9544-HASH.js gzipN/A58.3 kB-
Total231 kB232 kB⚠️ +748 B
Polyfills
CanaryPRChange
polyfills-HASH.js gzip39.4 kB39.4 kB
Total39.4 kB39.4 kB
Pages
CanaryPRChange
_app-HASH.js gzip194 B194 B
_error-HASH.js gzip183 B180 B🟢 3 B (-2%)
css-HASH.js gzip331 B330 B
dynamic-HASH.js gzip1.81 kB1.81 kB
edge-ssr-HASH.js gzip256 B256 B
head-HASH.js gzip351 B352 B
hooks-HASH.js gzip384 B383 B
image-HASH.js gzip580 B581 B
index-HASH.js gzip260 B260 B
link-HASH.js gzip2.5 kB2.5 kB
routerDirect..HASH.js gzip320 B319 B
script-HASH.js gzip386 B386 B
withRouter-HASH.js gzip315 B315 B
1afbb74e6ecf..834.css gzip106 B106 B
Total7.97 kB7.97 kB✅ -2 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip125 kB125 kB
page.js gzip253 kB253 kB
Total377 kB378 kB⚠️ +276 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip43.8 kB43.7 kB
edge-runtime..pack.js gzip842 B842 B
Total45.4 kB45.3 kB✅ -98 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip715 B718 B
Total715 B718 B⚠️ +3 B
Build Cache
CanaryPRChange
0.pack gzip3.96 MB3.97 MB🔴 +6.96 kB (+0%)
index.pack gzip103 kB103 kB
index.pack.old gzip104 kB103 kB
Total4.17 MB4.17 MB⚠️ +5.61 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip318 kB318 kB
app-page-exp..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip317 kB317 kB
app-page-tur..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip314 kB314 kB
app-page-tur..prod.js gzip166 kB166 kB
app-page.run...dev.js gzip314 kB314 kB
app-page.run..prod.js gzip167 kB167 kB
app-route-ex...dev.js gzip70.7 kB70.7 kB
app-route-ex..prod.js gzip49.1 kB49.1 kB
app-route-tu...dev.js gzip70.7 kB70.7 kB
app-route-tu..prod.js gzip49.2 kB49.2 kB
app-route-tu...dev.js gzip70.3 kB70.3 kB
app-route-tu..prod.js gzip48.9 kB48.9 kB
app-route.ru...dev.js gzip70.2 kB70.2 kB
app-route.ru..prod.js gzip48.9 kB48.9 kB
dist_client_...dev.js gzip324 B324 B
dist_client_...dev.js gzip326 B326 B
dist_client_...dev.js gzip318 B318 B
dist_client_...dev.js gzip317 B317 B
pages-api-tu...dev.js gzip43.2 kB43.2 kB
pages-api-tu..prod.js gzip32.9 kB32.9 kB
pages-api.ru...dev.js gzip43.2 kB43.2 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.5 kB52.5 kB
pages-turbo...prod.js gzip38.5 kB38.5 kB
pages.runtim...dev.js gzip52.5 kB52.5 kB
pages.runtim..prod.js gzip38.4 kB38.4 kB
server.runti..prod.js gzip62 kB62 kB
Total2.81 MB2.81 MB⚠️ +1 B
📝 Changed Files (4 files)

Files with changes:

  • pages-api-tu..time.prod.js
  • pages-api.runtime.dev.js
  • pages-turbo...time.prod.js
  • pages.runtime.dev.js
View diffs
pages-api-tu..time.prod.js

Diff too large to display

pages-api.runtime.dev.js

Diff too large to display

pages-turbo...time.prod.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from bc1adb2 to e0c8338CompareFebruary 17, 2026 00:24
@ztannerztanner changed the title add failing test for unresolved prefetch promisessegment cache: keep descendant PPR cache nodes deferred under pending parentFeb 17, 2026
@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from e0c8338 to ece5534CompareFebruary 17, 2026 01:13
@ztannerztanner changed the title segment cache: keep descendant PPR cache nodes deferred under pending parentsegment cache: add failing test for unresolved prefetch promisesFeb 17, 2026
@eps1lon
eps1lonforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from ece5534 to 1308c99CompareFebruary 21, 2026 17:57
@ztanner
ztanner marked this pull request as ready for review February 21, 2026 18:25
@ztannerztanner changed the title segment cache: add failing test for unresolved prefetch promisessegment cache: add test for passing unawaited promise to context providerFeb 21, 2026
@ztanner
ztanner enabled auto-merge (squash) February 21, 2026 18:26
@ztanner
ztanner requested a review from eps1lonFebruary 21, 2026 18:28
@ztanner
ztanner merged commit fd38d5b into canaryFeb 21, 2026
157 checks passed
@ztanner
ztanner deleted the 01-31-add_failing_test_for_unresolved_prefetch_promises branch February 21, 2026 18:29
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Mar 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docs: Clicking on Learn Next.js button leads to page with missing text

3 participants

@ztanner@nextjs-bot@eps1lon
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); segment cache: add test for passing unawaited promise to context provider by ztanner · Pull Request #89339 · vercel/next.js · GitHub
Skip to content

segment cache: add test for passing unawaited promise to context provider - #89339

Merged
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises
Feb 21, 2026
Merged

segment cache: add test for passing unawaited promise to context provider#89339
ztanner merged 1 commit into
canaryfrom
01-31-add_failing_test_for_unresolved_prefetch_promises

Conversation

@ztanner

@ztannerztanner commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Adds a failing test proving that if the RSC response from a prefetch contains an unresolved promise, navigating to the page will cause the Suspense boundary wrapping the use of that promise to remain in fallback state indefinitely.

This appears to have regressed in e9a03ac, though the theory is that this is just uncovering a React bug rather than causing the issue.

Fixed via react/react#35839

Closes#89170

@nextjs-botnextjs-bot added created-by: Next.js team PRs by the Next.js team. tests labels Jan 31, 2026
@ztannerGraphite App

ztanner commented Jan 31, 2026

Copy link
Copy Markdown
ContributorAuthor

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

@nextjs-bot

nextjs-bot commented Jan 31, 2026

Copy link
Copy Markdown
Contributor

Stats from current PR

✅ No significant changes detected

📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

MetricCanaryPRChangeTrend
Cold (Listen)507ms507ms▁█▁█▂
Cold (Ready in log)484ms483ms▁█▁█▃
Cold (First Request)1.049s1.042s▁█▄█▄
Warm (Listen)508ms508ms▁█▁█▂
Warm (Ready in log)480ms479ms▁█▁█▃
Warm (First Request)375ms380ms▁█▁█▃
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms457ms▁▁▁▁▁
Cold (Ready in log)453ms453ms▁▃▁▁▃
Cold (First Request)2.102s2.062s▁▁▁▁▃
Warm (Listen)456ms456ms▁▁▁▁▁
Warm (Ready in log)452ms453ms▁▂▁▁▂
Warm (First Request)2.077s2.065s▁▁▁▁▃

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.741s4.735s▁█▁▇▅
Cached Build4.664s4.730s▁█▁█▅
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build14.963s14.948s▁▁▁▁▄
Cached Build15.039s14.984s▁▁▁▁▄
node_modules Size474 MB474 MB▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **399 kB** → **399 kB** ✅ -5 B

80 files with content-based hashes (individual files not comparable between builds)

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip768 B763 B
Total768 B763 B✅ -5 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip451 B450 B
Total451 B450 B✅ -1 B

📦 Webpack

Client

Main Bundles
CanaryPRChange
5528-HASH.js gzip5.48 kBN/A-
6280-HASH.js gzip57.5 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.6 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B254 B
main-HASH.js gzip39.1 kB39.1 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.53 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.49 kB-
6948ada0-HASH.js gzipN/A62.6 kB-
9544-HASH.js gzipN/A58.3 kB-
Total231 kB232 kB⚠️ +748 B
Polyfills
CanaryPRChange
polyfills-HASH.js gzip39.4 kB39.4 kB
Total39.4 kB39.4 kB
Pages
CanaryPRChange
_app-HASH.js gzip194 B194 B
_error-HASH.js gzip183 B180 B🟢 3 B (-2%)
css-HASH.js gzip331 B330 B
dynamic-HASH.js gzip1.81 kB1.81 kB
edge-ssr-HASH.js gzip256 B256 B
head-HASH.js gzip351 B352 B
hooks-HASH.js gzip384 B383 B
image-HASH.js gzip580 B581 B
index-HASH.js gzip260 B260 B
link-HASH.js gzip2.5 kB2.5 kB
routerDirect..HASH.js gzip320 B319 B
script-HASH.js gzip386 B386 B
withRouter-HASH.js gzip315 B315 B
1afbb74e6ecf..834.css gzip106 B106 B
Total7.97 kB7.97 kB✅ -2 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip125 kB125 kB
page.js gzip253 kB253 kB
Total377 kB378 kB⚠️ +276 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip43.8 kB43.7 kB
edge-runtime..pack.js gzip842 B842 B
Total45.4 kB45.3 kB✅ -98 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip715 B718 B
Total715 B718 B⚠️ +3 B
Build Cache
CanaryPRChange
0.pack gzip3.96 MB3.97 MB🔴 +6.96 kB (+0%)
index.pack gzip103 kB103 kB
index.pack.old gzip104 kB103 kB
Total4.17 MB4.17 MB⚠️ +5.61 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip318 kB318 kB
app-page-exp..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip317 kB317 kB
app-page-tur..prod.js gzip168 kB168 kB
app-page-tur...dev.js gzip314 kB314 kB
app-page-tur..prod.js gzip166 kB166 kB
app-page.run...dev.js gzip314 kB314 kB
app-page.run..prod.js gzip167 kB167 kB
app-route-ex...dev.js gzip70.7 kB70.7 kB
app-route-ex..prod.js gzip49.1 kB49.1 kB
app-route-tu...dev.js gzip70.7 kB70.7 kB
app-route-tu..prod.js gzip49.2 kB49.2 kB
app-route-tu...dev.js gzip70.3 kB70.3 kB
app-route-tu..prod.js gzip48.9 kB48.9 kB
app-route.ru...dev.js gzip70.2 kB70.2 kB
app-route.ru..prod.js gzip48.9 kB48.9 kB
dist_client_...dev.js gzip324 B324 B
dist_client_...dev.js gzip326 B326 B
dist_client_...dev.js gzip318 B318 B
dist_client_...dev.js gzip317 B317 B
pages-api-tu...dev.js gzip43.2 kB43.2 kB
pages-api-tu..prod.js gzip32.9 kB32.9 kB
pages-api.ru...dev.js gzip43.2 kB43.2 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.5 kB52.5 kB
pages-turbo...prod.js gzip38.5 kB38.5 kB
pages.runtim...dev.js gzip52.5 kB52.5 kB
pages.runtim..prod.js gzip38.4 kB38.4 kB
server.runti..prod.js gzip62 kB62 kB
Total2.81 MB2.81 MB⚠️ +1 B
📝 Changed Files (4 files)

Files with changes:

  • pages-api-tu..time.prod.js
  • pages-api.runtime.dev.js
  • pages-turbo...time.prod.js
  • pages.runtime.dev.js
View diffs
pages-api-tu..time.prod.js

Diff too large to display

pages-api.runtime.dev.js

Diff too large to display

pages-turbo...time.prod.js

Diff too large to display

pages.runtime.dev.js

Diff too large to display

@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from bc1adb2 to e0c8338CompareFebruary 17, 2026 00:24
@ztannerztanner changed the title add failing test for unresolved prefetch promisessegment cache: keep descendant PPR cache nodes deferred under pending parentFeb 17, 2026
@ztanner
ztannerforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from e0c8338 to ece5534CompareFebruary 17, 2026 01:13
@ztannerztanner changed the title segment cache: keep descendant PPR cache nodes deferred under pending parentsegment cache: add failing test for unresolved prefetch promisesFeb 17, 2026
@eps1lon
eps1lonforce-pushed the 01-31-add_failing_test_for_unresolved_prefetch_promises branch from ece5534 to 1308c99CompareFebruary 21, 2026 17:57
@ztanner
ztanner marked this pull request as ready for review February 21, 2026 18:25
@ztannerztanner changed the title segment cache: add failing test for unresolved prefetch promisessegment cache: add test for passing unawaited promise to context providerFeb 21, 2026
@ztanner
ztanner enabled auto-merge (squash) February 21, 2026 18:26
@ztanner
ztanner requested a review from eps1lonFebruary 21, 2026 18:28
@ztanner
ztanner merged commit fd38d5b into canaryFeb 21, 2026
157 checks passed
@ztanner
ztanner deleted the 01-31-add_failing_test_for_unresolved_prefetch_promises branch February 21, 2026 18:29
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Mar 8, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Docs: Clicking on Learn Next.js button leads to page with missing text

3 participants

@ztanner@nextjs-bot@eps1lon