Skip to content

Upgrade React from 10680271-20260126 to 87ae75b3-20260128 - #89179

Closed
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128
Closed

Upgrade React from 10680271-20260126 to 87ae75b3-20260128#89179
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128

Conversation

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

Failing test suites

Commit: 1c06d93 | About building and testing Next.js

pnpm test-dev test/development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts (job)

  • browser-log-forwarding verbose level > should forward all logs to terminal (DD)
Expand output

● browser-log-forwarding verbose level › should forward all logs to terminal

expect(received).toMatchInlineSnapshot(snapshot)
Snapshot name: `browser-log-forwarding verbose level should forward all logs to terminal 1`
- Snapshot - 1
+ Received + 0
[browser] browser log: this is a log message (app/page.tsx:7:13)
[browser] browser info: this is an info message (app/page.tsx:8:13)
[browser] browser warn: this is a warning message (app/page.tsx:9:13)
[browser] browser error: this is an error message - [browser] browser debug: this is a debug message (app/page.tsx:11:13)
36 | .join('\n')
37 |
> 38 | expect(browserLogs).toMatchInlineSnapshot(`
| ^
39 | "[browser] browser log: this is a log message (app/page.tsx:7:13)
40 | [browser] browser info: this is an info message (app/page.tsx:8:13)
41 | [browser] browser warn: this is a warning message (app/page.tsx:9:13)
at Object.toMatchInlineSnapshot (development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts:38:25)

pnpm test-start-turbo test/e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts (turbopack) (job)

  • app dir client cache with parallel routes > prefetch={true} > should re-use the cache for the full page, only for 5 mins (DD)
Expand output

● app dir client cache with parallel routes › prefetch={true} › should re-use the cache for the full page, only for 5 mins

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."
54 | })
55 |
> 56 | it('should re-use the cache for the full page, only for 5 mins', async () => {
| ^
57 | let page: PlaywrightPage
58 | const browser = await next.browser('/', {
59 | async beforePageLoad(p) {
at it (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:56:5)
at describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:30:3)
at Object.describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:7:1)

pnpm test-start test/e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts (job)

  • runtime prefetching > in a page > can completely prefetch a page that uses cookies and no uncached IO (DD)
Expand output

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

pnpm test packages/next/src/server/app-render/action-handler.test.ts (job)

Expand output

● Test suite failed to run

Jest encountered an unexpected token
Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.
Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.
By default "node_modules" folder is ignored by transformers.
Here's what you can do:
• If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.
• If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
• If you need a custom transformation specify a "transform" option in your config.
• If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/configuration
For information about custom transformations, see:
https://jestjs.io/docs/code-transformation
Details:
C:\actions-runner\_work\next.js\next.js\packages\next\src\server\app-render\action-handler.ts:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import { RSC_HEADER, RSC_CONTENT_TYPE_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, ACTION_HEADER, NEXT_ACTION_NOT_FOUND_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_URL, NEXT_ACTION_REVALIDATED_HEADER } from '../../client/components/app-router-headers';
^^^^^^
SyntaxError: Cannot use import statement outside a module
3 | describe('parseHostHeader', () => {
4 | it('should return correct host', () => {
> 5 | expect(parseHostHeader({})).toBe(undefined)
| ^
6 |
7 | expect(
8 | parseHostHeader({
at Runtime.createScriptFromCode (../node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1505:14)
at Object.<anonymous> (../packages/next/src/server/app-render/action-handler.test.ts:5:24)

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

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)455ms455ms▁▁▁█▁
Cold (Ready in log)439ms440ms▇▇▄▆▂
Cold (First Request)1.152s1.201s██▇▄▂
Warm (Listen)457ms457ms▁▁▁█▁
Warm (Ready in log)443ms444ms▁▂▁█▃
Warm (First Request)342ms340ms██▇▅▄
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms455ms▁▁▁█▁
Cold (Ready in log)437ms437ms▃▁▃█▃
Cold (First Request)1.820s1.825s▂▁▂█▂
Warm (Listen)456ms456ms▁▁▁█▁
Warm (Ready in log)438ms437ms▃▁▃█▃
Warm (First Request)1.846s1.851s▂▁▂█▂

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.373s4.304s▁▁▁█▆
Cached Build4.314s4.256s▁▁▁█▆
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build13.976s13.904s▁▁▁█▁
Cached Build14.105s14.017s▁▁▂█▁
node_modules Size462 MB462 MB█████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **432 kB** → **432 kB** ✅ -19 B

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

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip770 B762 B🟢 8 B (-1%)
Total770 B762 B✅ -8 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.47 kBN/A-
6280-HASH.js gzip52.7 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.3 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B253 B🟢 3 B (-1%)
main-HASH.js gzip39 kB39 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.52 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.48 kB-
6948ada0-HASH.js gzipN/A62.3 kB-
9544-HASH.js gzipN/A53.2 kB-
Total226 kB226 kB⚠️ +478 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.49 kB2.49 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✅ -1 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip126 kB126 kB
page.js gzip246 kB247 kB
Total373 kB373 kB⚠️ +247 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip33.1 kB33 kB
edge-runtime..pack.js gzip842 B842 B
Total34.7 kB34.6 kB✅ -128 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip732 B736 B
Total732 B736 B⚠️ +4 B
Build Cache
CanaryPRChange
0.pack gzip3.72 MB3.72 MB🔴 +4.66 kB (+0%)
index.pack gzip100 kB101 kB🔴 +1.15 kB (+1%)
index.pack.old gzip101 kB102 kB
Total3.92 MB3.93 MB⚠️ +6.72 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip308 kB308 kB
app-page-exp..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip308 kB308 kB
app-page-tur..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip305 kB305 kB
app-page-tur..prod.js gzip162 kB162 kB
app-page.run...dev.js gzip305 kB305 kB
app-page.run..prod.js gzip162 kB162 kB
app-route-ex...dev.js gzip70.2 kB70.2 kB
app-route-ex..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip70.2 kB70.2 kB
app-route-tu..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip69.8 kB69.8 kB
app-route-tu..prod.js gzip48.6 kB48.6 kB
app-route.ru...dev.js gzip69.8 kB69.8 kB
app-route.ru..prod.js gzip48.6 kB48.6 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.1 kB43.1 kB
pages-api-tu..prod.js gzip32.8 kB32.8 kB
pages-api.ru...dev.js gzip43.1 kB43.1 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.4 kB52.4 kB
pages-turbo...prod.js gzip39.3 kB39.3 kB
pages.runtim...dev.js gzip52.3 kB52.3 kB
pages.runtim..prod.js gzip39.3 kB39.3 kB
server.runti..prod.js gzip62.5 kB62.5 kB
Total2.75 MB2.75 MB⚠️ +30 B
📝 Changed Files (5 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page.runtime.dev.js
  • server.runtime.prod.js
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page.runtime.dev.js
failed to diff
server.runtime.prod.js

Diff too large to display

@eps1lon
eps1lonforce-pushed the update/react/19.3.0-canary-87ae75b3-20260128 branch from 5b0a7b4 to 1c06d93CompareJanuary 28, 2026 21:30
@eps1lon

Copy link
Copy Markdown
Member

Replaced by #89250

@eps1loneps1lon closed this Jan 29, 2026
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Feb 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@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" + '
Upgrade React from `10680271-20260126` to `87ae75b3-20260128` by nextjs-bot · Pull Request #89179 · vercel/next.js · GitHub
Skip to content

Upgrade React from 10680271-20260126 to 87ae75b3-20260128 - #89179

Closed
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128
Closed

Upgrade React from 10680271-20260126 to 87ae75b3-20260128#89179
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128

Conversation

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

Failing test suites

Commit: 1c06d93 | About building and testing Next.js

pnpm test-dev test/development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts (job)

  • browser-log-forwarding verbose level > should forward all logs to terminal (DD)
Expand output

● browser-log-forwarding verbose level › should forward all logs to terminal

expect(received).toMatchInlineSnapshot(snapshot)
Snapshot name: `browser-log-forwarding verbose level should forward all logs to terminal 1`
- Snapshot - 1
+ Received + 0
[browser] browser log: this is a log message (app/page.tsx:7:13)
[browser] browser info: this is an info message (app/page.tsx:8:13)
[browser] browser warn: this is a warning message (app/page.tsx:9:13)
[browser] browser error: this is an error message - [browser] browser debug: this is a debug message (app/page.tsx:11:13)
36 | .join('\n')
37 |
> 38 | expect(browserLogs).toMatchInlineSnapshot(`
| ^
39 | "[browser] browser log: this is a log message (app/page.tsx:7:13)
40 | [browser] browser info: this is an info message (app/page.tsx:8:13)
41 | [browser] browser warn: this is a warning message (app/page.tsx:9:13)
at Object.toMatchInlineSnapshot (development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts:38:25)

pnpm test-start-turbo test/e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts (turbopack) (job)

  • app dir client cache with parallel routes > prefetch={true} > should re-use the cache for the full page, only for 5 mins (DD)
Expand output

● app dir client cache with parallel routes › prefetch={true} › should re-use the cache for the full page, only for 5 mins

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."
54 | })
55 |
> 56 | it('should re-use the cache for the full page, only for 5 mins', async () => {
| ^
57 | let page: PlaywrightPage
58 | const browser = await next.browser('/', {
59 | async beforePageLoad(p) {
at it (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:56:5)
at describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:30:3)
at Object.describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:7:1)

pnpm test-start test/e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts (job)

  • runtime prefetching > in a page > can completely prefetch a page that uses cookies and no uncached IO (DD)
Expand output

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

pnpm test packages/next/src/server/app-render/action-handler.test.ts (job)

Expand output

● Test suite failed to run

Jest encountered an unexpected token
Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.
Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.
By default "node_modules" folder is ignored by transformers.
Here's what you can do:
• If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.
• If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
• If you need a custom transformation specify a "transform" option in your config.
• If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/configuration
For information about custom transformations, see:
https://jestjs.io/docs/code-transformation
Details:
C:\actions-runner\_work\next.js\next.js\packages\next\src\server\app-render\action-handler.ts:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import { RSC_HEADER, RSC_CONTENT_TYPE_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, ACTION_HEADER, NEXT_ACTION_NOT_FOUND_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_URL, NEXT_ACTION_REVALIDATED_HEADER } from '../../client/components/app-router-headers';
^^^^^^
SyntaxError: Cannot use import statement outside a module
3 | describe('parseHostHeader', () => {
4 | it('should return correct host', () => {
> 5 | expect(parseHostHeader({})).toBe(undefined)
| ^
6 |
7 | expect(
8 | parseHostHeader({
at Runtime.createScriptFromCode (../node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1505:14)
at Object.<anonymous> (../packages/next/src/server/app-render/action-handler.test.ts:5:24)

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

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)455ms455ms▁▁▁█▁
Cold (Ready in log)439ms440ms▇▇▄▆▂
Cold (First Request)1.152s1.201s██▇▄▂
Warm (Listen)457ms457ms▁▁▁█▁
Warm (Ready in log)443ms444ms▁▂▁█▃
Warm (First Request)342ms340ms██▇▅▄
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms455ms▁▁▁█▁
Cold (Ready in log)437ms437ms▃▁▃█▃
Cold (First Request)1.820s1.825s▂▁▂█▂
Warm (Listen)456ms456ms▁▁▁█▁
Warm (Ready in log)438ms437ms▃▁▃█▃
Warm (First Request)1.846s1.851s▂▁▂█▂

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.373s4.304s▁▁▁█▆
Cached Build4.314s4.256s▁▁▁█▆
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build13.976s13.904s▁▁▁█▁
Cached Build14.105s14.017s▁▁▂█▁
node_modules Size462 MB462 MB█████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **432 kB** → **432 kB** ✅ -19 B

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

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip770 B762 B🟢 8 B (-1%)
Total770 B762 B✅ -8 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.47 kBN/A-
6280-HASH.js gzip52.7 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.3 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B253 B🟢 3 B (-1%)
main-HASH.js gzip39 kB39 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.52 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.48 kB-
6948ada0-HASH.js gzipN/A62.3 kB-
9544-HASH.js gzipN/A53.2 kB-
Total226 kB226 kB⚠️ +478 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.49 kB2.49 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✅ -1 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip126 kB126 kB
page.js gzip246 kB247 kB
Total373 kB373 kB⚠️ +247 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip33.1 kB33 kB
edge-runtime..pack.js gzip842 B842 B
Total34.7 kB34.6 kB✅ -128 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip732 B736 B
Total732 B736 B⚠️ +4 B
Build Cache
CanaryPRChange
0.pack gzip3.72 MB3.72 MB🔴 +4.66 kB (+0%)
index.pack gzip100 kB101 kB🔴 +1.15 kB (+1%)
index.pack.old gzip101 kB102 kB
Total3.92 MB3.93 MB⚠️ +6.72 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip308 kB308 kB
app-page-exp..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip308 kB308 kB
app-page-tur..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip305 kB305 kB
app-page-tur..prod.js gzip162 kB162 kB
app-page.run...dev.js gzip305 kB305 kB
app-page.run..prod.js gzip162 kB162 kB
app-route-ex...dev.js gzip70.2 kB70.2 kB
app-route-ex..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip70.2 kB70.2 kB
app-route-tu..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip69.8 kB69.8 kB
app-route-tu..prod.js gzip48.6 kB48.6 kB
app-route.ru...dev.js gzip69.8 kB69.8 kB
app-route.ru..prod.js gzip48.6 kB48.6 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.1 kB43.1 kB
pages-api-tu..prod.js gzip32.8 kB32.8 kB
pages-api.ru...dev.js gzip43.1 kB43.1 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.4 kB52.4 kB
pages-turbo...prod.js gzip39.3 kB39.3 kB
pages.runtim...dev.js gzip52.3 kB52.3 kB
pages.runtim..prod.js gzip39.3 kB39.3 kB
server.runti..prod.js gzip62.5 kB62.5 kB
Total2.75 MB2.75 MB⚠️ +30 B
📝 Changed Files (5 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page.runtime.dev.js
  • server.runtime.prod.js
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page.runtime.dev.js
failed to diff
server.runtime.prod.js

Diff too large to display

@eps1lon
eps1lonforce-pushed the update/react/19.3.0-canary-87ae75b3-20260128 branch from 5b0a7b4 to 1c06d93CompareJanuary 28, 2026 21:30
@eps1lon

Copy link
Copy Markdown
Member

Replaced by #89250

@eps1loneps1lon closed this Jan 29, 2026
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Feb 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@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('^' + ".*" + ' Upgrade React from `10680271-20260126` to `87ae75b3-20260128` by nextjs-bot · Pull Request #89179 · vercel/next.js · GitHub
Skip to content

Upgrade React from 10680271-20260126 to 87ae75b3-20260128 - #89179

Closed
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128
Closed

Upgrade React from 10680271-20260126 to 87ae75b3-20260128#89179
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128

Conversation

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

Failing test suites

Commit: 1c06d93 | About building and testing Next.js

pnpm test-dev test/development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts (job)

  • browser-log-forwarding verbose level > should forward all logs to terminal (DD)
Expand output

● browser-log-forwarding verbose level › should forward all logs to terminal

expect(received).toMatchInlineSnapshot(snapshot)
Snapshot name: `browser-log-forwarding verbose level should forward all logs to terminal 1`
- Snapshot - 1
+ Received + 0
[browser] browser log: this is a log message (app/page.tsx:7:13)
[browser] browser info: this is an info message (app/page.tsx:8:13)
[browser] browser warn: this is a warning message (app/page.tsx:9:13)
[browser] browser error: this is an error message - [browser] browser debug: this is a debug message (app/page.tsx:11:13)
36 | .join('\n')
37 |
> 38 | expect(browserLogs).toMatchInlineSnapshot(`
| ^
39 | "[browser] browser log: this is a log message (app/page.tsx:7:13)
40 | [browser] browser info: this is an info message (app/page.tsx:8:13)
41 | [browser] browser warn: this is a warning message (app/page.tsx:9:13)
at Object.toMatchInlineSnapshot (development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts:38:25)

pnpm test-start-turbo test/e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts (turbopack) (job)

  • app dir client cache with parallel routes > prefetch={true} > should re-use the cache for the full page, only for 5 mins (DD)
Expand output

● app dir client cache with parallel routes › prefetch={true} › should re-use the cache for the full page, only for 5 mins

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."
54 | })
55 |
> 56 | it('should re-use the cache for the full page, only for 5 mins', async () => {
| ^
57 | let page: PlaywrightPage
58 | const browser = await next.browser('/', {
59 | async beforePageLoad(p) {
at it (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:56:5)
at describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:30:3)
at Object.describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:7:1)

pnpm test-start test/e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts (job)

  • runtime prefetching > in a page > can completely prefetch a page that uses cookies and no uncached IO (DD)
Expand output

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

pnpm test packages/next/src/server/app-render/action-handler.test.ts (job)

Expand output

● Test suite failed to run

Jest encountered an unexpected token
Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.
Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.
By default "node_modules" folder is ignored by transformers.
Here's what you can do:
• If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.
• If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
• If you need a custom transformation specify a "transform" option in your config.
• If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/configuration
For information about custom transformations, see:
https://jestjs.io/docs/code-transformation
Details:
C:\actions-runner\_work\next.js\next.js\packages\next\src\server\app-render\action-handler.ts:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import { RSC_HEADER, RSC_CONTENT_TYPE_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, ACTION_HEADER, NEXT_ACTION_NOT_FOUND_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_URL, NEXT_ACTION_REVALIDATED_HEADER } from '../../client/components/app-router-headers';
^^^^^^
SyntaxError: Cannot use import statement outside a module
3 | describe('parseHostHeader', () => {
4 | it('should return correct host', () => {
> 5 | expect(parseHostHeader({})).toBe(undefined)
| ^
6 |
7 | expect(
8 | parseHostHeader({
at Runtime.createScriptFromCode (../node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1505:14)
at Object.<anonymous> (../packages/next/src/server/app-render/action-handler.test.ts:5:24)

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

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)455ms455ms▁▁▁█▁
Cold (Ready in log)439ms440ms▇▇▄▆▂
Cold (First Request)1.152s1.201s██▇▄▂
Warm (Listen)457ms457ms▁▁▁█▁
Warm (Ready in log)443ms444ms▁▂▁█▃
Warm (First Request)342ms340ms██▇▅▄
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms455ms▁▁▁█▁
Cold (Ready in log)437ms437ms▃▁▃█▃
Cold (First Request)1.820s1.825s▂▁▂█▂
Warm (Listen)456ms456ms▁▁▁█▁
Warm (Ready in log)438ms437ms▃▁▃█▃
Warm (First Request)1.846s1.851s▂▁▂█▂

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.373s4.304s▁▁▁█▆
Cached Build4.314s4.256s▁▁▁█▆
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build13.976s13.904s▁▁▁█▁
Cached Build14.105s14.017s▁▁▂█▁
node_modules Size462 MB462 MB█████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **432 kB** → **432 kB** ✅ -19 B

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

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip770 B762 B🟢 8 B (-1%)
Total770 B762 B✅ -8 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.47 kBN/A-
6280-HASH.js gzip52.7 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.3 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B253 B🟢 3 B (-1%)
main-HASH.js gzip39 kB39 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.52 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.48 kB-
6948ada0-HASH.js gzipN/A62.3 kB-
9544-HASH.js gzipN/A53.2 kB-
Total226 kB226 kB⚠️ +478 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.49 kB2.49 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✅ -1 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip126 kB126 kB
page.js gzip246 kB247 kB
Total373 kB373 kB⚠️ +247 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip33.1 kB33 kB
edge-runtime..pack.js gzip842 B842 B
Total34.7 kB34.6 kB✅ -128 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip732 B736 B
Total732 B736 B⚠️ +4 B
Build Cache
CanaryPRChange
0.pack gzip3.72 MB3.72 MB🔴 +4.66 kB (+0%)
index.pack gzip100 kB101 kB🔴 +1.15 kB (+1%)
index.pack.old gzip101 kB102 kB
Total3.92 MB3.93 MB⚠️ +6.72 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip308 kB308 kB
app-page-exp..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip308 kB308 kB
app-page-tur..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip305 kB305 kB
app-page-tur..prod.js gzip162 kB162 kB
app-page.run...dev.js gzip305 kB305 kB
app-page.run..prod.js gzip162 kB162 kB
app-route-ex...dev.js gzip70.2 kB70.2 kB
app-route-ex..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip70.2 kB70.2 kB
app-route-tu..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip69.8 kB69.8 kB
app-route-tu..prod.js gzip48.6 kB48.6 kB
app-route.ru...dev.js gzip69.8 kB69.8 kB
app-route.ru..prod.js gzip48.6 kB48.6 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.1 kB43.1 kB
pages-api-tu..prod.js gzip32.8 kB32.8 kB
pages-api.ru...dev.js gzip43.1 kB43.1 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.4 kB52.4 kB
pages-turbo...prod.js gzip39.3 kB39.3 kB
pages.runtim...dev.js gzip52.3 kB52.3 kB
pages.runtim..prod.js gzip39.3 kB39.3 kB
server.runti..prod.js gzip62.5 kB62.5 kB
Total2.75 MB2.75 MB⚠️ +30 B
📝 Changed Files (5 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page.runtime.dev.js
  • server.runtime.prod.js
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page.runtime.dev.js
failed to diff
server.runtime.prod.js

Diff too large to display

@eps1lon
eps1lonforce-pushed the update/react/19.3.0-canary-87ae75b3-20260128 branch from 5b0a7b4 to 1c06d93CompareJanuary 28, 2026 21:30
@eps1lon

Copy link
Copy Markdown
Member

Replaced by #89250

@eps1loneps1lon closed this Jan 29, 2026
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Feb 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@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('^' + ".*" + ' Upgrade React from `10680271-20260126` to `87ae75b3-20260128` by nextjs-bot · Pull Request #89179 · vercel/next.js · GitHub
Skip to content

Upgrade React from 10680271-20260126 to 87ae75b3-20260128 - #89179

Closed
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128
Closed

Upgrade React from 10680271-20260126 to 87ae75b3-20260128#89179
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128

Conversation

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

Failing test suites

Commit: 1c06d93 | About building and testing Next.js

pnpm test-dev test/development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts (job)

  • browser-log-forwarding verbose level > should forward all logs to terminal (DD)
Expand output

● browser-log-forwarding verbose level › should forward all logs to terminal

expect(received).toMatchInlineSnapshot(snapshot)
Snapshot name: `browser-log-forwarding verbose level should forward all logs to terminal 1`
- Snapshot - 1
+ Received + 0
[browser] browser log: this is a log message (app/page.tsx:7:13)
[browser] browser info: this is an info message (app/page.tsx:8:13)
[browser] browser warn: this is a warning message (app/page.tsx:9:13)
[browser] browser error: this is an error message - [browser] browser debug: this is a debug message (app/page.tsx:11:13)
36 | .join('\n')
37 |
> 38 | expect(browserLogs).toMatchInlineSnapshot(`
| ^
39 | "[browser] browser log: this is a log message (app/page.tsx:7:13)
40 | [browser] browser info: this is an info message (app/page.tsx:8:13)
41 | [browser] browser warn: this is a warning message (app/page.tsx:9:13)
at Object.toMatchInlineSnapshot (development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts:38:25)

pnpm test-start-turbo test/e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts (turbopack) (job)

  • app dir client cache with parallel routes > prefetch={true} > should re-use the cache for the full page, only for 5 mins (DD)
Expand output

● app dir client cache with parallel routes › prefetch={true} › should re-use the cache for the full page, only for 5 mins

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."
54 | })
55 |
> 56 | it('should re-use the cache for the full page, only for 5 mins', async () => {
| ^
57 | let page: PlaywrightPage
58 | const browser = await next.browser('/', {
59 | async beforePageLoad(p) {
at it (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:56:5)
at describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:30:3)
at Object.describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:7:1)

pnpm test-start test/e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts (job)

  • runtime prefetching > in a page > can completely prefetch a page that uses cookies and no uncached IO (DD)
Expand output

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

pnpm test packages/next/src/server/app-render/action-handler.test.ts (job)

Expand output

● Test suite failed to run

Jest encountered an unexpected token
Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.
Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.
By default "node_modules" folder is ignored by transformers.
Here's what you can do:
• If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.
• If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
• If you need a custom transformation specify a "transform" option in your config.
• If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/configuration
For information about custom transformations, see:
https://jestjs.io/docs/code-transformation
Details:
C:\actions-runner\_work\next.js\next.js\packages\next\src\server\app-render\action-handler.ts:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import { RSC_HEADER, RSC_CONTENT_TYPE_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, ACTION_HEADER, NEXT_ACTION_NOT_FOUND_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_URL, NEXT_ACTION_REVALIDATED_HEADER } from '../../client/components/app-router-headers';
^^^^^^
SyntaxError: Cannot use import statement outside a module
3 | describe('parseHostHeader', () => {
4 | it('should return correct host', () => {
> 5 | expect(parseHostHeader({})).toBe(undefined)
| ^
6 |
7 | expect(
8 | parseHostHeader({
at Runtime.createScriptFromCode (../node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1505:14)
at Object.<anonymous> (../packages/next/src/server/app-render/action-handler.test.ts:5:24)

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

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)455ms455ms▁▁▁█▁
Cold (Ready in log)439ms440ms▇▇▄▆▂
Cold (First Request)1.152s1.201s██▇▄▂
Warm (Listen)457ms457ms▁▁▁█▁
Warm (Ready in log)443ms444ms▁▂▁█▃
Warm (First Request)342ms340ms██▇▅▄
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms455ms▁▁▁█▁
Cold (Ready in log)437ms437ms▃▁▃█▃
Cold (First Request)1.820s1.825s▂▁▂█▂
Warm (Listen)456ms456ms▁▁▁█▁
Warm (Ready in log)438ms437ms▃▁▃█▃
Warm (First Request)1.846s1.851s▂▁▂█▂

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.373s4.304s▁▁▁█▆
Cached Build4.314s4.256s▁▁▁█▆
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build13.976s13.904s▁▁▁█▁
Cached Build14.105s14.017s▁▁▂█▁
node_modules Size462 MB462 MB█████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **432 kB** → **432 kB** ✅ -19 B

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

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip770 B762 B🟢 8 B (-1%)
Total770 B762 B✅ -8 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.47 kBN/A-
6280-HASH.js gzip52.7 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.3 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B253 B🟢 3 B (-1%)
main-HASH.js gzip39 kB39 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.52 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.48 kB-
6948ada0-HASH.js gzipN/A62.3 kB-
9544-HASH.js gzipN/A53.2 kB-
Total226 kB226 kB⚠️ +478 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.49 kB2.49 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✅ -1 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip126 kB126 kB
page.js gzip246 kB247 kB
Total373 kB373 kB⚠️ +247 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip33.1 kB33 kB
edge-runtime..pack.js gzip842 B842 B
Total34.7 kB34.6 kB✅ -128 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip732 B736 B
Total732 B736 B⚠️ +4 B
Build Cache
CanaryPRChange
0.pack gzip3.72 MB3.72 MB🔴 +4.66 kB (+0%)
index.pack gzip100 kB101 kB🔴 +1.15 kB (+1%)
index.pack.old gzip101 kB102 kB
Total3.92 MB3.93 MB⚠️ +6.72 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip308 kB308 kB
app-page-exp..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip308 kB308 kB
app-page-tur..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip305 kB305 kB
app-page-tur..prod.js gzip162 kB162 kB
app-page.run...dev.js gzip305 kB305 kB
app-page.run..prod.js gzip162 kB162 kB
app-route-ex...dev.js gzip70.2 kB70.2 kB
app-route-ex..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip70.2 kB70.2 kB
app-route-tu..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip69.8 kB69.8 kB
app-route-tu..prod.js gzip48.6 kB48.6 kB
app-route.ru...dev.js gzip69.8 kB69.8 kB
app-route.ru..prod.js gzip48.6 kB48.6 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.1 kB43.1 kB
pages-api-tu..prod.js gzip32.8 kB32.8 kB
pages-api.ru...dev.js gzip43.1 kB43.1 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.4 kB52.4 kB
pages-turbo...prod.js gzip39.3 kB39.3 kB
pages.runtim...dev.js gzip52.3 kB52.3 kB
pages.runtim..prod.js gzip39.3 kB39.3 kB
server.runti..prod.js gzip62.5 kB62.5 kB
Total2.75 MB2.75 MB⚠️ +30 B
📝 Changed Files (5 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page.runtime.dev.js
  • server.runtime.prod.js
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page.runtime.dev.js
failed to diff
server.runtime.prod.js

Diff too large to display

@eps1lon
eps1lonforce-pushed the update/react/19.3.0-canary-87ae75b3-20260128 branch from 5b0a7b4 to 1c06d93CompareJanuary 28, 2026 21:30
@eps1lon

Copy link
Copy Markdown
Member

Replaced by #89250

@eps1loneps1lon closed this Jan 29, 2026
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Feb 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@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" + ' Upgrade React from `10680271-20260126` to `87ae75b3-20260128` by nextjs-bot · Pull Request #89179 · vercel/next.js · GitHub
Skip to content

Upgrade React from 10680271-20260126 to 87ae75b3-20260128 - #89179

Closed
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128
Closed

Upgrade React from 10680271-20260126 to 87ae75b3-20260128#89179
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128

Conversation

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

Failing test suites

Commit: 1c06d93 | About building and testing Next.js

pnpm test-dev test/development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts (job)

  • browser-log-forwarding verbose level > should forward all logs to terminal (DD)
Expand output

● browser-log-forwarding verbose level › should forward all logs to terminal

expect(received).toMatchInlineSnapshot(snapshot)
Snapshot name: `browser-log-forwarding verbose level should forward all logs to terminal 1`
- Snapshot - 1
+ Received + 0
[browser] browser log: this is a log message (app/page.tsx:7:13)
[browser] browser info: this is an info message (app/page.tsx:8:13)
[browser] browser warn: this is a warning message (app/page.tsx:9:13)
[browser] browser error: this is an error message - [browser] browser debug: this is a debug message (app/page.tsx:11:13)
36 | .join('\n')
37 |
> 38 | expect(browserLogs).toMatchInlineSnapshot(`
| ^
39 | "[browser] browser log: this is a log message (app/page.tsx:7:13)
40 | [browser] browser info: this is an info message (app/page.tsx:8:13)
41 | [browser] browser warn: this is a warning message (app/page.tsx:9:13)
at Object.toMatchInlineSnapshot (development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts:38:25)

pnpm test-start-turbo test/e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts (turbopack) (job)

  • app dir client cache with parallel routes > prefetch={true} > should re-use the cache for the full page, only for 5 mins (DD)
Expand output

● app dir client cache with parallel routes › prefetch={true} › should re-use the cache for the full page, only for 5 mins

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."
54 | })
55 |
> 56 | it('should re-use the cache for the full page, only for 5 mins', async () => {
| ^
57 | let page: PlaywrightPage
58 | const browser = await next.browser('/', {
59 | async beforePageLoad(p) {
at it (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:56:5)
at describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:30:3)
at Object.describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:7:1)

pnpm test-start test/e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts (job)

  • runtime prefetching > in a page > can completely prefetch a page that uses cookies and no uncached IO (DD)
Expand output

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

pnpm test packages/next/src/server/app-render/action-handler.test.ts (job)

Expand output

● Test suite failed to run

Jest encountered an unexpected token
Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.
Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.
By default "node_modules" folder is ignored by transformers.
Here's what you can do:
• If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.
• If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
• If you need a custom transformation specify a "transform" option in your config.
• If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/configuration
For information about custom transformations, see:
https://jestjs.io/docs/code-transformation
Details:
C:\actions-runner\_work\next.js\next.js\packages\next\src\server\app-render\action-handler.ts:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import { RSC_HEADER, RSC_CONTENT_TYPE_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, ACTION_HEADER, NEXT_ACTION_NOT_FOUND_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_URL, NEXT_ACTION_REVALIDATED_HEADER } from '../../client/components/app-router-headers';
^^^^^^
SyntaxError: Cannot use import statement outside a module
3 | describe('parseHostHeader', () => {
4 | it('should return correct host', () => {
> 5 | expect(parseHostHeader({})).toBe(undefined)
| ^
6 |
7 | expect(
8 | parseHostHeader({
at Runtime.createScriptFromCode (../node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1505:14)
at Object.<anonymous> (../packages/next/src/server/app-render/action-handler.test.ts:5:24)

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

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)455ms455ms▁▁▁█▁
Cold (Ready in log)439ms440ms▇▇▄▆▂
Cold (First Request)1.152s1.201s██▇▄▂
Warm (Listen)457ms457ms▁▁▁█▁
Warm (Ready in log)443ms444ms▁▂▁█▃
Warm (First Request)342ms340ms██▇▅▄
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms455ms▁▁▁█▁
Cold (Ready in log)437ms437ms▃▁▃█▃
Cold (First Request)1.820s1.825s▂▁▂█▂
Warm (Listen)456ms456ms▁▁▁█▁
Warm (Ready in log)438ms437ms▃▁▃█▃
Warm (First Request)1.846s1.851s▂▁▂█▂

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.373s4.304s▁▁▁█▆
Cached Build4.314s4.256s▁▁▁█▆
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build13.976s13.904s▁▁▁█▁
Cached Build14.105s14.017s▁▁▂█▁
node_modules Size462 MB462 MB█████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **432 kB** → **432 kB** ✅ -19 B

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

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip770 B762 B🟢 8 B (-1%)
Total770 B762 B✅ -8 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.47 kBN/A-
6280-HASH.js gzip52.7 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.3 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B253 B🟢 3 B (-1%)
main-HASH.js gzip39 kB39 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.52 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.48 kB-
6948ada0-HASH.js gzipN/A62.3 kB-
9544-HASH.js gzipN/A53.2 kB-
Total226 kB226 kB⚠️ +478 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.49 kB2.49 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✅ -1 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip126 kB126 kB
page.js gzip246 kB247 kB
Total373 kB373 kB⚠️ +247 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip33.1 kB33 kB
edge-runtime..pack.js gzip842 B842 B
Total34.7 kB34.6 kB✅ -128 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip732 B736 B
Total732 B736 B⚠️ +4 B
Build Cache
CanaryPRChange
0.pack gzip3.72 MB3.72 MB🔴 +4.66 kB (+0%)
index.pack gzip100 kB101 kB🔴 +1.15 kB (+1%)
index.pack.old gzip101 kB102 kB
Total3.92 MB3.93 MB⚠️ +6.72 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip308 kB308 kB
app-page-exp..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip308 kB308 kB
app-page-tur..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip305 kB305 kB
app-page-tur..prod.js gzip162 kB162 kB
app-page.run...dev.js gzip305 kB305 kB
app-page.run..prod.js gzip162 kB162 kB
app-route-ex...dev.js gzip70.2 kB70.2 kB
app-route-ex..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip70.2 kB70.2 kB
app-route-tu..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip69.8 kB69.8 kB
app-route-tu..prod.js gzip48.6 kB48.6 kB
app-route.ru...dev.js gzip69.8 kB69.8 kB
app-route.ru..prod.js gzip48.6 kB48.6 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.1 kB43.1 kB
pages-api-tu..prod.js gzip32.8 kB32.8 kB
pages-api.ru...dev.js gzip43.1 kB43.1 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.4 kB52.4 kB
pages-turbo...prod.js gzip39.3 kB39.3 kB
pages.runtim...dev.js gzip52.3 kB52.3 kB
pages.runtim..prod.js gzip39.3 kB39.3 kB
server.runti..prod.js gzip62.5 kB62.5 kB
Total2.75 MB2.75 MB⚠️ +30 B
📝 Changed Files (5 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page.runtime.dev.js
  • server.runtime.prod.js
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page.runtime.dev.js
failed to diff
server.runtime.prod.js

Diff too large to display

@eps1lon
eps1lonforce-pushed the update/react/19.3.0-canary-87ae75b3-20260128 branch from 5b0a7b4 to 1c06d93CompareJanuary 28, 2026 21:30
@eps1lon

Copy link
Copy Markdown
Member

Replaced by #89250

@eps1loneps1lon closed this Jan 29, 2026
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Feb 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@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('^' + ".*" + ' Upgrade React from `10680271-20260126` to `87ae75b3-20260128` by nextjs-bot · Pull Request #89179 · vercel/next.js · GitHub
Skip to content

Upgrade React from 10680271-20260126 to 87ae75b3-20260128 - #89179

Closed
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128
Closed

Upgrade React from 10680271-20260126 to 87ae75b3-20260128#89179
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128

Conversation

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

Failing test suites

Commit: 1c06d93 | About building and testing Next.js

pnpm test-dev test/development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts (job)

  • browser-log-forwarding verbose level > should forward all logs to terminal (DD)
Expand output

● browser-log-forwarding verbose level › should forward all logs to terminal

expect(received).toMatchInlineSnapshot(snapshot)
Snapshot name: `browser-log-forwarding verbose level should forward all logs to terminal 1`
- Snapshot - 1
+ Received + 0
[browser] browser log: this is a log message (app/page.tsx:7:13)
[browser] browser info: this is an info message (app/page.tsx:8:13)
[browser] browser warn: this is a warning message (app/page.tsx:9:13)
[browser] browser error: this is an error message - [browser] browser debug: this is a debug message (app/page.tsx:11:13)
36 | .join('\n')
37 |
> 38 | expect(browserLogs).toMatchInlineSnapshot(`
| ^
39 | "[browser] browser log: this is a log message (app/page.tsx:7:13)
40 | [browser] browser info: this is an info message (app/page.tsx:8:13)
41 | [browser] browser warn: this is a warning message (app/page.tsx:9:13)
at Object.toMatchInlineSnapshot (development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts:38:25)

pnpm test-start-turbo test/e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts (turbopack) (job)

  • app dir client cache with parallel routes > prefetch={true} > should re-use the cache for the full page, only for 5 mins (DD)
Expand output

● app dir client cache with parallel routes › prefetch={true} › should re-use the cache for the full page, only for 5 mins

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."
54 | })
55 |
> 56 | it('should re-use the cache for the full page, only for 5 mins', async () => {
| ^
57 | let page: PlaywrightPage
58 | const browser = await next.browser('/', {
59 | async beforePageLoad(p) {
at it (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:56:5)
at describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:30:3)
at Object.describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:7:1)

pnpm test-start test/e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts (job)

  • runtime prefetching > in a page > can completely prefetch a page that uses cookies and no uncached IO (DD)
Expand output

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

pnpm test packages/next/src/server/app-render/action-handler.test.ts (job)

Expand output

● Test suite failed to run

Jest encountered an unexpected token
Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.
Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.
By default "node_modules" folder is ignored by transformers.
Here's what you can do:
• If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.
• If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
• If you need a custom transformation specify a "transform" option in your config.
• If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/configuration
For information about custom transformations, see:
https://jestjs.io/docs/code-transformation
Details:
C:\actions-runner\_work\next.js\next.js\packages\next\src\server\app-render\action-handler.ts:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import { RSC_HEADER, RSC_CONTENT_TYPE_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, ACTION_HEADER, NEXT_ACTION_NOT_FOUND_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_URL, NEXT_ACTION_REVALIDATED_HEADER } from '../../client/components/app-router-headers';
^^^^^^
SyntaxError: Cannot use import statement outside a module
3 | describe('parseHostHeader', () => {
4 | it('should return correct host', () => {
> 5 | expect(parseHostHeader({})).toBe(undefined)
| ^
6 |
7 | expect(
8 | parseHostHeader({
at Runtime.createScriptFromCode (../node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1505:14)
at Object.<anonymous> (../packages/next/src/server/app-render/action-handler.test.ts:5:24)

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

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)455ms455ms▁▁▁█▁
Cold (Ready in log)439ms440ms▇▇▄▆▂
Cold (First Request)1.152s1.201s██▇▄▂
Warm (Listen)457ms457ms▁▁▁█▁
Warm (Ready in log)443ms444ms▁▂▁█▃
Warm (First Request)342ms340ms██▇▅▄
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms455ms▁▁▁█▁
Cold (Ready in log)437ms437ms▃▁▃█▃
Cold (First Request)1.820s1.825s▂▁▂█▂
Warm (Listen)456ms456ms▁▁▁█▁
Warm (Ready in log)438ms437ms▃▁▃█▃
Warm (First Request)1.846s1.851s▂▁▂█▂

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.373s4.304s▁▁▁█▆
Cached Build4.314s4.256s▁▁▁█▆
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build13.976s13.904s▁▁▁█▁
Cached Build14.105s14.017s▁▁▂█▁
node_modules Size462 MB462 MB█████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **432 kB** → **432 kB** ✅ -19 B

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

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip770 B762 B🟢 8 B (-1%)
Total770 B762 B✅ -8 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.47 kBN/A-
6280-HASH.js gzip52.7 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.3 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B253 B🟢 3 B (-1%)
main-HASH.js gzip39 kB39 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.52 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.48 kB-
6948ada0-HASH.js gzipN/A62.3 kB-
9544-HASH.js gzipN/A53.2 kB-
Total226 kB226 kB⚠️ +478 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.49 kB2.49 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✅ -1 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip126 kB126 kB
page.js gzip246 kB247 kB
Total373 kB373 kB⚠️ +247 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip33.1 kB33 kB
edge-runtime..pack.js gzip842 B842 B
Total34.7 kB34.6 kB✅ -128 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip732 B736 B
Total732 B736 B⚠️ +4 B
Build Cache
CanaryPRChange
0.pack gzip3.72 MB3.72 MB🔴 +4.66 kB (+0%)
index.pack gzip100 kB101 kB🔴 +1.15 kB (+1%)
index.pack.old gzip101 kB102 kB
Total3.92 MB3.93 MB⚠️ +6.72 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip308 kB308 kB
app-page-exp..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip308 kB308 kB
app-page-tur..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip305 kB305 kB
app-page-tur..prod.js gzip162 kB162 kB
app-page.run...dev.js gzip305 kB305 kB
app-page.run..prod.js gzip162 kB162 kB
app-route-ex...dev.js gzip70.2 kB70.2 kB
app-route-ex..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip70.2 kB70.2 kB
app-route-tu..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip69.8 kB69.8 kB
app-route-tu..prod.js gzip48.6 kB48.6 kB
app-route.ru...dev.js gzip69.8 kB69.8 kB
app-route.ru..prod.js gzip48.6 kB48.6 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.1 kB43.1 kB
pages-api-tu..prod.js gzip32.8 kB32.8 kB
pages-api.ru...dev.js gzip43.1 kB43.1 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.4 kB52.4 kB
pages-turbo...prod.js gzip39.3 kB39.3 kB
pages.runtim...dev.js gzip52.3 kB52.3 kB
pages.runtim..prod.js gzip39.3 kB39.3 kB
server.runti..prod.js gzip62.5 kB62.5 kB
Total2.75 MB2.75 MB⚠️ +30 B
📝 Changed Files (5 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page.runtime.dev.js
  • server.runtime.prod.js
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page.runtime.dev.js
failed to diff
server.runtime.prod.js

Diff too large to display

@eps1lon
eps1lonforce-pushed the update/react/19.3.0-canary-87ae75b3-20260128 branch from 5b0a7b4 to 1c06d93CompareJanuary 28, 2026 21:30
@eps1lon

Copy link
Copy Markdown
Member

Replaced by #89250

@eps1loneps1lon closed this Jan 29, 2026
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Feb 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@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('^' + ".*" + ' Upgrade React from `10680271-20260126` to `87ae75b3-20260128` by nextjs-bot · Pull Request #89179 · vercel/next.js · GitHub
Skip to content

Upgrade React from 10680271-20260126 to 87ae75b3-20260128 - #89179

Closed
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128
Closed

Upgrade React from 10680271-20260126 to 87ae75b3-20260128#89179
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128

Conversation

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

Failing test suites

Commit: 1c06d93 | About building and testing Next.js

pnpm test-dev test/development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts (job)

  • browser-log-forwarding verbose level > should forward all logs to terminal (DD)
Expand output

● browser-log-forwarding verbose level › should forward all logs to terminal

expect(received).toMatchInlineSnapshot(snapshot)
Snapshot name: `browser-log-forwarding verbose level should forward all logs to terminal 1`
- Snapshot - 1
+ Received + 0
[browser] browser log: this is a log message (app/page.tsx:7:13)
[browser] browser info: this is an info message (app/page.tsx:8:13)
[browser] browser warn: this is a warning message (app/page.tsx:9:13)
[browser] browser error: this is an error message - [browser] browser debug: this is a debug message (app/page.tsx:11:13)
36 | .join('\n')
37 |
> 38 | expect(browserLogs).toMatchInlineSnapshot(`
| ^
39 | "[browser] browser log: this is a log message (app/page.tsx:7:13)
40 | [browser] browser info: this is an info message (app/page.tsx:8:13)
41 | [browser] browser warn: this is a warning message (app/page.tsx:9:13)
at Object.toMatchInlineSnapshot (development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts:38:25)

pnpm test-start-turbo test/e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts (turbopack) (job)

  • app dir client cache with parallel routes > prefetch={true} > should re-use the cache for the full page, only for 5 mins (DD)
Expand output

● app dir client cache with parallel routes › prefetch={true} › should re-use the cache for the full page, only for 5 mins

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."
54 | })
55 |
> 56 | it('should re-use the cache for the full page, only for 5 mins', async () => {
| ^
57 | let page: PlaywrightPage
58 | const browser = await next.browser('/', {
59 | async beforePageLoad(p) {
at it (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:56:5)
at describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:30:3)
at Object.describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:7:1)

pnpm test-start test/e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts (job)

  • runtime prefetching > in a page > can completely prefetch a page that uses cookies and no uncached IO (DD)
Expand output

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

pnpm test packages/next/src/server/app-render/action-handler.test.ts (job)

Expand output

● Test suite failed to run

Jest encountered an unexpected token
Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.
Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.
By default "node_modules" folder is ignored by transformers.
Here's what you can do:
• If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.
• If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
• If you need a custom transformation specify a "transform" option in your config.
• If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/configuration
For information about custom transformations, see:
https://jestjs.io/docs/code-transformation
Details:
C:\actions-runner\_work\next.js\next.js\packages\next\src\server\app-render\action-handler.ts:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import { RSC_HEADER, RSC_CONTENT_TYPE_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, ACTION_HEADER, NEXT_ACTION_NOT_FOUND_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_URL, NEXT_ACTION_REVALIDATED_HEADER } from '../../client/components/app-router-headers';
^^^^^^
SyntaxError: Cannot use import statement outside a module
3 | describe('parseHostHeader', () => {
4 | it('should return correct host', () => {
> 5 | expect(parseHostHeader({})).toBe(undefined)
| ^
6 |
7 | expect(
8 | parseHostHeader({
at Runtime.createScriptFromCode (../node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1505:14)
at Object.<anonymous> (../packages/next/src/server/app-render/action-handler.test.ts:5:24)

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

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)455ms455ms▁▁▁█▁
Cold (Ready in log)439ms440ms▇▇▄▆▂
Cold (First Request)1.152s1.201s██▇▄▂
Warm (Listen)457ms457ms▁▁▁█▁
Warm (Ready in log)443ms444ms▁▂▁█▃
Warm (First Request)342ms340ms██▇▅▄
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms455ms▁▁▁█▁
Cold (Ready in log)437ms437ms▃▁▃█▃
Cold (First Request)1.820s1.825s▂▁▂█▂
Warm (Listen)456ms456ms▁▁▁█▁
Warm (Ready in log)438ms437ms▃▁▃█▃
Warm (First Request)1.846s1.851s▂▁▂█▂

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.373s4.304s▁▁▁█▆
Cached Build4.314s4.256s▁▁▁█▆
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build13.976s13.904s▁▁▁█▁
Cached Build14.105s14.017s▁▁▂█▁
node_modules Size462 MB462 MB█████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **432 kB** → **432 kB** ✅ -19 B

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

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip770 B762 B🟢 8 B (-1%)
Total770 B762 B✅ -8 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.47 kBN/A-
6280-HASH.js gzip52.7 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.3 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B253 B🟢 3 B (-1%)
main-HASH.js gzip39 kB39 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.52 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.48 kB-
6948ada0-HASH.js gzipN/A62.3 kB-
9544-HASH.js gzipN/A53.2 kB-
Total226 kB226 kB⚠️ +478 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.49 kB2.49 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✅ -1 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip126 kB126 kB
page.js gzip246 kB247 kB
Total373 kB373 kB⚠️ +247 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip33.1 kB33 kB
edge-runtime..pack.js gzip842 B842 B
Total34.7 kB34.6 kB✅ -128 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip732 B736 B
Total732 B736 B⚠️ +4 B
Build Cache
CanaryPRChange
0.pack gzip3.72 MB3.72 MB🔴 +4.66 kB (+0%)
index.pack gzip100 kB101 kB🔴 +1.15 kB (+1%)
index.pack.old gzip101 kB102 kB
Total3.92 MB3.93 MB⚠️ +6.72 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip308 kB308 kB
app-page-exp..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip308 kB308 kB
app-page-tur..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip305 kB305 kB
app-page-tur..prod.js gzip162 kB162 kB
app-page.run...dev.js gzip305 kB305 kB
app-page.run..prod.js gzip162 kB162 kB
app-route-ex...dev.js gzip70.2 kB70.2 kB
app-route-ex..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip70.2 kB70.2 kB
app-route-tu..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip69.8 kB69.8 kB
app-route-tu..prod.js gzip48.6 kB48.6 kB
app-route.ru...dev.js gzip69.8 kB69.8 kB
app-route.ru..prod.js gzip48.6 kB48.6 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.1 kB43.1 kB
pages-api-tu..prod.js gzip32.8 kB32.8 kB
pages-api.ru...dev.js gzip43.1 kB43.1 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.4 kB52.4 kB
pages-turbo...prod.js gzip39.3 kB39.3 kB
pages.runtim...dev.js gzip52.3 kB52.3 kB
pages.runtim..prod.js gzip39.3 kB39.3 kB
server.runti..prod.js gzip62.5 kB62.5 kB
Total2.75 MB2.75 MB⚠️ +30 B
📝 Changed Files (5 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page.runtime.dev.js
  • server.runtime.prod.js
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page.runtime.dev.js
failed to diff
server.runtime.prod.js

Diff too large to display

@eps1lon
eps1lonforce-pushed the update/react/19.3.0-canary-87ae75b3-20260128 branch from 5b0a7b4 to 1c06d93CompareJanuary 28, 2026 21:30
@eps1lon

Copy link
Copy Markdown
Member

Replaced by #89250

@eps1loneps1lon closed this Jan 29, 2026
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Feb 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@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); } })(); })(); Upgrade React from `10680271-20260126` to `87ae75b3-20260128` by nextjs-bot · Pull Request #89179 · vercel/next.js · GitHub
Skip to content

Upgrade React from 10680271-20260126 to 87ae75b3-20260128 - #89179

Closed
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128
Closed

Upgrade React from 10680271-20260126 to 87ae75b3-20260128#89179
nextjs-bot wants to merge 6 commits into
canaryfrom
update/react/19.3.0-canary-87ae75b3-20260128

Conversation

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

Failing test suites

Commit: 1c06d93 | About building and testing Next.js

pnpm test-dev test/development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts (job)

  • browser-log-forwarding verbose level > should forward all logs to terminal (DD)
Expand output

● browser-log-forwarding verbose level › should forward all logs to terminal

expect(received).toMatchInlineSnapshot(snapshot)
Snapshot name: `browser-log-forwarding verbose level should forward all logs to terminal 1`
- Snapshot - 1
+ Received + 0
[browser] browser log: this is a log message (app/page.tsx:7:13)
[browser] browser info: this is an info message (app/page.tsx:8:13)
[browser] browser warn: this is a warning message (app/page.tsx:9:13)
[browser] browser error: this is an error message - [browser] browser debug: this is a debug message (app/page.tsx:11:13)
36 | .join('\n')
37 |
> 38 | expect(browserLogs).toMatchInlineSnapshot(`
| ^
39 | "[browser] browser log: this is a log message (app/page.tsx:7:13)
40 | [browser] browser info: this is an info message (app/page.tsx:8:13)
41 | [browser] browser warn: this is a warning message (app/page.tsx:9:13)
at Object.toMatchInlineSnapshot (development/app-dir/browser-log-forwarding/fixtures/verbose-level/verbose-level.test.ts:38:25)

pnpm test-start-turbo test/e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts (turbopack) (job)

  • app dir client cache with parallel routes > prefetch={true} > should re-use the cache for the full page, only for 5 mins (DD)
Expand output

● app dir client cache with parallel routes › prefetch={true} › should re-use the cache for the full page, only for 5 mins

thrown: "Exceeded timeout of 120000 ms for a test.
Add a timeout value to this test to increase the timeout, if this is a long-running test. See https://jestjs.io/docs/api#testname-fn-timeout."
54 | })
55 |
> 56 | it('should re-use the cache for the full page, only for 5 mins', async () => {
| ^
57 | let page: PlaywrightPage
58 | const browser = await next.browser('/', {
59 | async beforePageLoad(p) {
at it (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:56:5)
at describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:30:3)
at Object.describe (e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts:7:1)

pnpm test-start test/e2e/app-dir/segment-cache/prefetch-runtime/prefetch-runtime.test.ts (job)

  • runtime prefetching > in a page > can completely prefetch a page that uses cookies and no uncached IO (DD)
Expand output

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

● runtime prefetching › in a page › can completely prefetch a page that uses cookies and no uncached IO

apiRequestContext.fetch: read ECONNRESET
Call log:
- → GET http://localhost:40675/in-page/cookies-only?_rsc=xlawk
- user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/130.0.6723.31 Safari/537.36
- accept: */*
- accept-encoding: gzip,deflate,br
- cookie: testCookie=initialValue
- next-test-fetch-priority: low
- referer: http://localhost:40675/
- next-router-prefetch: 1
- next-router-segment-prefetch: /!KGRlZmF1bHQp/in-page
- next-url: /
- rsc: 1
- sec-ch-ua: "Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"
- sec-ch-ua-mobile: ?0
- sec-ch-ua-platform: "Linux"
225 | // server; we pass the request to the server the immediately.
226 | result: (async () => {
> 227 | const originalResponse = await page.request.fetch(request, {
| ^
228 | maxRedirects: 0,
229 | })
230 |
at fetch (lib/router-act.ts:227:59)
at lib/router-act.ts:245:13
at routeHandler (lib/router-act.ts:257:7)

pnpm test packages/next/src/server/app-render/action-handler.test.ts (job)

Expand output

● Test suite failed to run

Jest encountered an unexpected token
Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.
Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.
By default "node_modules" folder is ignored by transformers.
Here's what you can do:
• If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.
• If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript
• To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
• If you need a custom transformation specify a "transform" option in your config.
• If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.
You'll find more details and examples of these config options in the docs:
https://jestjs.io/docs/configuration
For information about custom transformations, see:
https://jestjs.io/docs/code-transformation
Details:
C:\actions-runner\_work\next.js\next.js\packages\next\src\server\app-render\action-handler.ts:1
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){import { RSC_HEADER, RSC_CONTENT_TYPE_HEADER, NEXT_ROUTER_STATE_TREE_HEADER, ACTION_HEADER, NEXT_ACTION_NOT_FOUND_HEADER, NEXT_ROUTER_PREFETCH_HEADER, NEXT_ROUTER_SEGMENT_PREFETCH_HEADER, NEXT_URL, NEXT_ACTION_REVALIDATED_HEADER } from '../../client/components/app-router-headers';
^^^^^^
SyntaxError: Cannot use import statement outside a module
3 | describe('parseHostHeader', () => {
4 | it('should return correct host', () => {
> 5 | expect(parseHostHeader({})).toBe(undefined)
| ^
6 |
7 | expect(
8 | parseHostHeader({
at Runtime.createScriptFromCode (../node_modules/.pnpm/jest-runtime@29.7.0/node_modules/jest-runtime/build/index.js:1505:14)
at Object.<anonymous> (../packages/next/src/server/app-render/action-handler.test.ts:5:24)

@nextjs-bot

nextjs-bot commented Jan 28, 2026

Copy link
Copy Markdown
ContributorAuthor

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)455ms455ms▁▁▁█▁
Cold (Ready in log)439ms440ms▇▇▄▆▂
Cold (First Request)1.152s1.201s██▇▄▂
Warm (Listen)457ms457ms▁▁▁█▁
Warm (Ready in log)443ms444ms▁▂▁█▃
Warm (First Request)342ms340ms██▇▅▄
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

MetricCanaryPRChangeTrend
Cold (Listen)456ms455ms▁▁▁█▁
Cold (Ready in log)437ms437ms▃▁▃█▃
Cold (First Request)1.820s1.825s▂▁▂█▂
Warm (Listen)456ms456ms▁▁▁█▁
Warm (Ready in log)438ms437ms▃▁▃█▃
Warm (First Request)1.846s1.851s▂▁▂█▂

⚡ Production Builds

MetricCanaryPRChangeTrend
Fresh Build4.373s4.304s▁▁▁█▆
Cached Build4.314s4.256s▁▁▁█▆
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

MetricCanaryPRChangeTrend
Fresh Build13.976s13.904s▁▁▁█▁
Cached Build14.105s14.017s▁▁▂█▁
node_modules Size462 MB462 MB█████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles: **432 kB** → **432 kB** ✅ -19 B

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

Server

Middleware
CanaryPRChange
middleware-b..fest.js gzip770 B762 B🟢 8 B (-1%)
Total770 B762 B✅ -8 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.47 kBN/A-
6280-HASH.js gzip52.7 kBN/A-
6335.HASH.js gzip169 BN/A-
912-HASH.js gzip4.53 kBN/A-
e8aec2e4-HASH.js gzip62.3 kBN/A-
framework-HASH.js gzip59.7 kB59.7 kB
main-app-HASH.js gzip256 B253 B🟢 3 B (-1%)
main-HASH.js gzip39 kB39 kB
webpack-HASH.js gzip1.68 kB1.68 kB
262-HASH.js gzipN/A4.52 kB-
2889.HASH.js gzipN/A169 B-
5602-HASH.js gzipN/A5.48 kB-
6948ada0-HASH.js gzipN/A62.3 kB-
9544-HASH.js gzipN/A53.2 kB-
Total226 kB226 kB⚠️ +478 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.49 kB2.49 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✅ -1 B

Server

Edge SSR
CanaryPRChange
edge-ssr.js gzip126 kB126 kB
page.js gzip246 kB247 kB
Total373 kB373 kB⚠️ +247 B
Middleware
CanaryPRChange
middleware-b..fest.js gzip614 B613 B
middleware-r..fest.js gzip156 B155 B
middleware.js gzip33.1 kB33 kB
edge-runtime..pack.js gzip842 B842 B
Total34.7 kB34.6 kB✅ -128 B
Build Details
Build Manifests
CanaryPRChange
_buildManifest.js gzip732 B736 B
Total732 B736 B⚠️ +4 B
Build Cache
CanaryPRChange
0.pack gzip3.72 MB3.72 MB🔴 +4.66 kB (+0%)
index.pack gzip100 kB101 kB🔴 +1.15 kB (+1%)
index.pack.old gzip101 kB102 kB
Total3.92 MB3.93 MB⚠️ +6.72 kB

🔄 Shared (bundler-independent)

Runtimes
CanaryPRChange
app-page-exp...dev.js gzip308 kB308 kB
app-page-exp..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip308 kB308 kB
app-page-tur..prod.js gzip164 kB164 kB
app-page-tur...dev.js gzip305 kB305 kB
app-page-tur..prod.js gzip162 kB162 kB
app-page.run...dev.js gzip305 kB305 kB
app-page.run..prod.js gzip162 kB162 kB
app-route-ex...dev.js gzip70.2 kB70.2 kB
app-route-ex..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip70.2 kB70.2 kB
app-route-tu..prod.js gzip48.8 kB48.8 kB
app-route-tu...dev.js gzip69.8 kB69.8 kB
app-route-tu..prod.js gzip48.6 kB48.6 kB
app-route.ru...dev.js gzip69.8 kB69.8 kB
app-route.ru..prod.js gzip48.6 kB48.6 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.1 kB43.1 kB
pages-api-tu..prod.js gzip32.8 kB32.8 kB
pages-api.ru...dev.js gzip43.1 kB43.1 kB
pages-api.ru..prod.js gzip32.8 kB32.8 kB
pages-turbo....dev.js gzip52.4 kB52.4 kB
pages-turbo...prod.js gzip39.3 kB39.3 kB
pages.runtim...dev.js gzip52.3 kB52.3 kB
pages.runtim..prod.js gzip39.3 kB39.3 kB
server.runti..prod.js gzip62.5 kB62.5 kB
Total2.75 MB2.75 MB⚠️ +30 B
📝 Changed Files (5 files)

Files with changes:

  • app-page-exp..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page-tur..ntime.dev.js
  • app-page.runtime.dev.js
  • server.runtime.prod.js
View diffs
app-page-exp..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page-tur..ntime.dev.js
failed to diff
app-page.runtime.dev.js
failed to diff
server.runtime.prod.js

Diff too large to display

@eps1lon
eps1lonforce-pushed the update/react/19.3.0-canary-87ae75b3-20260128 branch from 5b0a7b4 to 1c06d93CompareJanuary 28, 2026 21:30
@eps1lon

Copy link
Copy Markdown
Member

Replaced by #89250

@eps1loneps1lon closed this Jan 29, 2026
@github-actionsgithub-actionsBot locked as resolved and limited conversation to collaborators Feb 13, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@nextjs-bot@eps1lon