Skip to content

Conversation

@lubieowoce
Copy link
Member

No description provided.

gnoff and others added 30 commits November 7, 2025 13:34
Prior to this change any "hole" in a prerender that would block the shell was considered an error and you would be presented with a very generic message explaining all the different ways you could have failed this validation check.

With this change we use a new technique to validate the static shell which can now tell the difference between waiting on uncached data or runtime data. It also improves the heuristics around generateMetadata and generateViewport errors.

I added new error pages for runtime sync IO and ensure we only validate sync IO after runtime data if the page will be validating runtime prefetches.

I restored the validation on HMR update so you can get feedback after saving a new file.
in theory this shouldn't be necessary but currently we only track awaits and just rendering the promise as is doesn't cause there to be and IO stack line to generate a codeframe off of
This ensures that any I/O awaited during the dynamic stage (i.e. after
other uncached I/O resolved) does not contaminate the owner stacks used
for error reporting.
Removing the old implementation of `spawnDynamicValidationInDev` seems
to make the stray error messages go away.
after the validation changes, we're no longer running three renders,
so the log only appears once
@ijjk ijjk added created-by: Next.js team PRs by the Next.js team. Documentation Related to Next.js' official documentation. tests type: next labels Nov 7, 2025
@ijjk
Copy link
Member

ijjk commented Nov 7, 2025

Failing test suites

Commit: a67fe1d | About building and testing Next.js

pnpm test-dev test/development/app-dir/cache-components-dev-fallback-validation/cache-components-dev-fallback-validation.test.ts (job)

  • Cache Components Fallback Validation > should warn about missing Suspense when accessing params if static params are entirely missing at build time (DD)
Expand output

● Cache Components Fallback Validation › should warn about missing Suspense when accessing params if static params are entirely missing at build time

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Fallback Validation should warn about missing Suspense when accessing params if static params are entirely missing at build time 1`

- Snapshot  - 7
+ Received  + 5

@@ -1,19 +1,17 @@
  {
-   "description": "Runtime data was accessed outside of <Suspense>
+   "description": "Data that blocks navigation was accessed outside of <Suspense>

- This delays the entire page from rendering, resulting in a slow user experience. Next.js uses this error to ensure your app loads instantly on every navigation. cookies(), headers(), and searchParams, are examples of Runtime data that can only come from a user request.
+ This delays the entire page from rendering, resulting in a slow user experience. Next.js uses this error to ensure your app loads instantly on every navigation. Uncached data such as fetch(...), cached data with a low expire time, or connection() are all examples of data that only resolve on navigation.

- To fix this:
+ To fix this, you can either:

- Provide a fallback UI using <Suspense> around this component.
+ Provide a fallback UI using <Suspense> around this component. This allows Next.js to stream its contents to the user as soon as it's ready, without blocking the rest of the app.

  or

- Move the Runtime data access into a deeper component wrapped in <Suspense>.
-
- In either case this allows Next.js to stream its contents to the user when they request the page, while still providing an initial UI that is prerendered and prefetchable for instant navigations.
+ Move the asynchronous await into a Cache Component ("use cache"). This allows Next.js to statically prerender the component as part of the HTML document, so it's instantly visible to the user.

  Learn more: https://nextjs.org/docs/messages/blocking-route",
    "environmentLabel": "Server",
    "label": "Blocking Route",
    "source": "app/none/[top]/wrapped/layout.tsx (10:3) @ Layout

  238 |     const browser = await next.browser('/none/prerendered/wrapped/prerendered')
  239 |     if (isTurbopack) {
> 240 |       await expect(browser).toDisplayCollapsedRedbox(`
      |                             ^
  241 |        {
  242 |          "description": "Runtime data was accessed outside of <Suspense>
  243 | 

  at Object.toDisplayCollapsedRedbox (development/app-dir/cache-components-dev-fallback-validation/cache-components-dev-fallback-validation.test.ts:240:29)

pnpm test-dev test/e2e/app-dir/log-file/log-file.test.ts (job)

  • log-file > should capture RSC logging in log file (DD)
  • log-file > should capture client logging in log file (DD)
Expand output

● log-file › should capture RSC logging in log file

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `log-file should capture RSC logging in log file 1`

- Snapshot  -  3
+ Received  + 13

- [xx:xx:xx.xxx] Server  LOG     RSC: This is a log message from server component
- [xx:xx:xx.xxx] Server  ERROR   RSC: This is an error message from server component
- [xx:xx:xx.xxx] Server  WARN    RSC: This is a warning message from server component
+ [xx:xx:xx.xxx] Server  LOG     
+
+ ##########################################################
+ [xx:xx:xx.xxx] Server  LOG     [app-render] :: rendering /server (/server)
+
+ [xx:xx:xx.xxx] Server  LOG     =================== [initial] Static ===================
+ [xx:xx:xx.xxx] Server  LOG     RSC: This is a log message from server component
+ [xx:xx:xx.xxx] Server  ERROR   RSC: This is an error message from server component
+ [xx:xx:xx.xxx] Server  WARN    RSC: This is a warning message from server component
+ [xx:xx:xx.xxx] Server  LOG     =================== [initial] Runtime ===================
+ [xx:xx:xx.xxx] Server  LOG     [staged-rendering] resolving runtime stage
+ [xx:xx:xx.xxx] Server  LOG     =================== [initial] Dynamic ===================
+ [xx:xx:xx.xxx] Server  LOG     [staged-rendering] resolving dynamic stage
  ↵

  82 |       await retry(async () => {
  83 |         const newLogContent = getNewLogContent()
> 84 |         expect(newLogContent).toMatchInlineSnapshot(`
     |                               ^
  85 |          "[xx:xx:xx.xxx] Server  LOG     RSC: This is a log message from server component
  86 |          [xx:xx:xx.xxx] Server  ERROR   RSC: This is an error message from server component
  87 |          [xx:xx:xx.xxx] Server  WARN    RSC: This is a warning message from server component

  at toMatchInlineSnapshot (e2e/app-dir/log-file/log-file.test.ts:84:31)
  at fn (lib/next-test-utils.ts:797:20)
  at Object.<anonymous> (e2e/app-dir/log-file/log-file.test.ts:82:18)

● log-file › should capture client logging in log file

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `log-file should capture client logging in log file 1`

- Snapshot  -  1
+ Received  + 11

- "[xx:xx:xx.xxx] Browser LOG     Client: Complex circular object: {"data":{"nested":{"items":[1,2,3],"value":42},"parent":"[Circular]"},"metadata":{"name":"safe stringify","version":"1.0.0"},"name":"test"}
+ "[xx:xx:xx.xxx] Server  LOG     
+
+ ##########################################################
+ [xx:xx:xx.xxx] Server  LOG     [app-render] :: rendering /client (/client)
+
+ [xx:xx:xx.xxx] Server  LOG     =================== [initial] Static ===================
+ [xx:xx:xx.xxx] Server  LOG     =================== [initial] Runtime ===================
+ [xx:xx:xx.xxx] Server  LOG     [staged-rendering] resolving runtime stage
+ [xx:xx:xx.xxx] Server  LOG     =================== [initial] Dynamic ===================
+ [xx:xx:xx.xxx] Server  LOG     [staged-rendering] resolving dynamic stage
+ [xx:xx:xx.xxx] Browser LOG     Client: Complex circular object: {"data":{"nested":{"items":[1,2,3],"value":42},"parent":"[Circular]"},"metadata":{"name":"safe stringify","version":"1.0.0"},"name":"test"}
  [xx:xx:xx.xxx] Browser ERROR   Client: This is an error message from client component
  [xx:xx:xx.xxx] Browser WARN    Client: This is a warning message from client component
  "

  119 |       await retry(async () => {
  120 |         const newLogContent = getNewLogContent()
> 121 |         expect(newLogContent).toMatchInlineSnapshot(`
      |                               ^
  122 |          "[xx:xx:xx.xxx] Browser LOG     Client: Complex circular object: {"data":{"nested":{"items":[1,2,3],"value":42},"parent":"[Circular]"},"metadata":{"name":"safe stringify","version":"1.0.0"},"name":"test"}
  123 |          [xx:xx:xx.xxx] Browser ERROR   Client: This is an error message from client component
  124 |          [xx:xx:xx.xxx] Browser WARN    Client: This is a warning message from client component

  at toMatchInlineSnapshot (e2e/app-dir/log-file/log-file.test.ts:121:31)
  at fn (lib/next-test-utils.ts:797:20)
  at Object.<anonymous> (e2e/app-dir/log-file/log-file.test.ts:119:18)

pnpm test-dev test/e2e/app-dir/cache-components-errors/cache-components-console-patch.test.ts (job)

  • Cache Components Errors > Sync IO in console methods > Console Patching > does not warn about sync IO if console.log is patched to call new Date() internally (DD)
Expand output

● Cache Components Errors › Sync IO in console methods › Console Patching › does not warn about sync IO if console.log is patched to call new Date() internally

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Errors Sync IO in console methods Console Patching does not warn about sync IO if console.log is patched to call new Date() internally 1`

- Snapshot  -   1
+ Received  + 143

- "[<timestamp>] This is a console log from a server component page"
+ "[<timestamp>] 
+
+ ##########################################################
+ [<timestamp>] [app-render] :: rendering / (/)
+
+ [<timestamp>] =================== [initial] Static ===================
+ [<timestamp>] This is a console log from a server component page
+ [<timestamp>] =================== [initial] Runtime ===================
+ [<timestamp>] [staged-rendering] resolving runtime stage
+ [<timestamp>] =================== [initial] Dynamic ===================
+ [<timestamp>] [staged-rendering] resolving dynamic stage
+ [<timestamp>] Static chunks (8)
+ [<timestamp>] ------------------------
+ [<timestamp>] 4:I["(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-d10799c8bba6bd03a90fe1d7cf5133c03f78b035c082ccdc33488c35c4a96861+packages+n_b4cabdljqn7mtgi6hejqhnkutm/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js",["app-pages-internals","static/chunks/app-pages-internals.js"],"SegmentViewNode"]
+ 6:"$Sreact.fragment"
+ 15:I["(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-d10799c8bba6bd03a90fe1d7cf5133c03f78b035c082ccdc33488c35c4a96861+packages+n_b4cabdljqn7mtgi6hejqhnkutm/node_modules/next/dist/client/components/layout-router.js",["app-pages-internals","static/chunks/app-pages-internals.js"],""]
+ 17:I["(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-d10799c8bba6bd03a90fe1d7cf5133c03f78b035c082ccdc33488c35c4a96861+packages+n_b4cabdljqn7mtgi6hejqhnkutm/node_modules/next/dist/client/components/render-from-template-context.js",["app-pages-internals","static/chunks/app-pages-internals.js"],""]
+ 2f:I["(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-d10799c8bba6bd03a90fe1d7cf5133c03f78b035c082ccdc33488c35c4a96861+packages+n_b4cabdljqn7mtgi6hejqhnkutm/node_modules/next/dist/lib/framework/boundary-components.js",["app-pages-internals","static/chunks/app-pages-internals.js"],"OutletBoundary"]
+ 31:"$Sreact.suspense"
+ 3a:I["(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-d10799c8bba6bd03a90fe1d7cf5133c03f78b035c082ccdc33488c35c4a96861+packages+n_b4cabdljqn7mtgi6hejqhnkutm/node_modules/next/dist/lib/framework/boundary-components.js",["app-pages-internals","static/chunks/app-pages-internals.js"],"ViewportBoundary"]
+ 41:I["(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-d10799c8bba6bd03a90fe1d7cf5133c03f78b035c082ccdc33488c35c4a96861+packages+n_b4cabdljqn7mtgi6hejqhnkutm/node_modules/next/dist/lib/framework/boundary-components.js",["app-pages-internals","static/chunks/app-pages-internals.js"],"MetadataBoundary"]
+ 46:I["(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-d10799c8bba6bd03a90fe1d7cf5133c03f78b035c082ccdc33488c35c4a96861+packages+n_b4cabdljqn7mtgi6hejqhnkutm/node_modules/next/dist/client/components/builtin/global-error.js",["app-pages-internals","static/chunks/app-pages-internals.js"],""]
+ :N1762641612475.7922
+ 2:{"name":"Preloads","key":null,"env":"Prerender","stack":[],"props":{"preloadCallbacks":[]}}
+ 3:[]
+ 5:[]
+ 9:I["(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-d10799c8bba6bd03a90fe1d7cf5133c03f78b035c082ccdc33488c35c4a96861+packages+n_b4cabdljqn7mtgi6hejqhnkutm/node_modules/next/dist/client/components/layout-router.js",["app-pages-internals","static/chunks/app-pages-internals.js"],""]
+ c:I["(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-d10799c8bba6bd03a90fe1d7cf5133c03f78b035c082ccdc33488c35c4a96861+packages+n_b4cabdljqn7mtgi6hejqhnkutm/node_modules/next/dist/client/components/render-from-template-context.js",["app-pages-internals","static/chunks/app-pages-internals.js"],""]
+ d:{}
+ e:[["Function.all","",0,0,0,0,true]]
+ b:{"children":["$","$Lc",null,"$d",null,"$e",1]}
+ f:[["Function.all","",0,0,0,0,true]]
+ a:{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$6",null,"$b",null,"$f",0],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$Y","forbidden":"$undefined","unauthorized":"$undefined","segmentViewBoundaries":"$Y"}
+ 10:[["Function.all","",0,0,0,0,true]]
+ 8:{"name":"Root","key":null,"env":"Prerender","stack":[],"props":{"children":["$","$L9",null,"$a",null,"$10",1],"params":"$Y"}}
+ 11:[["Root","webpack-internal:///(rsc)/./app/layout.tsx",9,87,8,1,false]]
+ 12:[["Root","webpack-internal:///(rsc)/./app/layout.tsx",10,94,8,1,false]]
+ 13:[["Root","webpack-internal:///(rsc)/./app/layout.tsx",11,98,8,1,false]]
+ 14:[["Function.all","",0,0,0,0,true]]
+ 16:[["Function.all","",0,0,0,0,true]]
+ 18:[]
+ 1a:{"name":"NotFound","key":null,"env":"Prerender","stack":[],"props":{}}
+ 1b:{"name":"HTTPAccessErrorFallback","key":null,"env":"Prerender","owner":"$1a","stack":[],"props":{"status":404,"message":"This page could not be found."}}
+ 1c:[]
+ 1d:[]
+ 1e:[]
+
+ [<timestamp>] 1f:[]
+ 20:[]
+ 21:[]
+ 22:[]
+ 23:[["Function.all","",0,0,0,0,true]]
+ 24:[["Function.all","",0,0,0,0,true]]
+ 25:[["Function.all","",0,0,0,0,true]]
+ 26:[["Function.all","",0,0,0,0,true]]
+ 28:{"name":"Page","key":null,"env":"Prerender","stack":[["Function.all","",0,0,0,0,true]],"props":{"params":"$@29","searchParams":"$@2a"}}
+ 2b:[["Page","webpack-internal:///(rsc)/./app/page.tsx",9,13,8,1,false]]
+ :W["log","$2b","$28","Prerender","This is a console log from a server component page"]
+ 2d:{"name":"Next.MetadataOutlet","key":null,"env":"Prerender","stack":[["Function.all","",0,0,0,0,true]],"props":{}}
+ 2e:[]
+ 30:[]
+ 33:[]
+
+ [<timestamp>] 36:"$EObject.defineProperty(function(type,config,children){for(var propName,i=2;i<arguments.length;i++)validateChildKeys(arguments[i]);i={};var key=null;if(null!=config)for(propName in didWarnAboutOldJSXRuntime||!(\"__self\"in config)||\"key\"in config||(didWarnAboutOldJSXRuntime=!0,console.warn(\"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\")),hasValidKey(config)&&(checkKeyStringCoercion(config.key),key=\"\"+config.key),config)hasOwnProperty.call(config,propName)&&\"key\"!==propName&&\"__self\"!==propName&&\"__source\"!==propName&&(i[propName]=config[propName]);var childrenLength=arguments.length-2;if(1===childrenLength)i.children=children;else if(1<childrenLength){for(var childArray=Array(childrenLength),_i=0;_i<childrenLength;_i++)childArray[_i]=arguments[_i+2];Object.freeze&&Object.freeze(childArray),i.children=childArray}if(type&&type.defaultProps)for(propName in childrenLength=type.defaultProps)void 0===i[propName]&&(i[propName]=childrenLength[propName]);return key&&function(props,displayName){function warnAboutAccessingKey(){specialPropKeyWarningShown||(specialPropKeyWarningShown=!0,console.error(\"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",displayName))}warnAboutAccessingKey.isReactWarning=!0,Object.defineProperty(props,\"key\",{get:warnAboutAccessingKey,configurable:!0})}(i,\"function\"==typeof type?type.displayName||type.name||\"Unknown\":type),(propName=1e4>ReactSharedInternals.recentlyCreatedOwnerStacks++)?(childArray=Error.stackTraceLimit,Error.stackTraceLimit=10,childrenLength=Error(\"react-stack-top-frame\"),Error.stackTraceLimit=childArray):childrenLength=unknownOwnerDebugStack,ReactElement(type,key,i,getOwner(),childrenLength,propName?createTask(getTaskName(type)):unknownOwnerDebugTask)},\"name\",{value:\"\"})"
+
+ [<timestamp>] 35:{"name":"NonIndex","key":null,"env":"Prerender","stack":[],"props":{"createElement":"$36","pagePath":"/","statusCode":200,"isPossibleServerAction":false}}
+ 38:{"name":"ViewportWrapper","key":null,"env":"Prerender","stack":[],"props":{}}
+ 39:[]
+ 3c:{"name":"Next.Viewport","key":null,"env":"Prerender","owner":"$38","stack":[],"props":{}}
+ 3e:{"name":"MetadataWrapper","key":null,"env":"Prerender","stack":[],"props":{}}
+ 3f:[]
+ 40:[]
+ 42:[]
+ 44:{"name":"Next.Metadata","key":null,"env":"Prerender","owner":"$3e","stack":[],"props":{}}
+ 47:[]
+ 1:D{"time":3.3432254791259766}
+ 1:D"$2"
+ 1:D{"time":3.6192626953125}
+ 1:null
+ 7:D{"time":4.996910095214844}
+ 7:D"$8"
+ 7:D{"time":6.311697006225586}
+ 19:D{"time":6.80390739440918}
+ 19:D"$1a"
+ 19:D{"time":7.102642059326172}
+ 19:D"$1b"
+ 19:D{"time":7.365121841430664}
+ 19:[["$","title",null,{"children":"404: This page could not be found."},"$1b","$1c",1],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}},"$1b","$1f",1],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404},"$1b","$20",1],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."},"$1b","$22",1]},"$1b","$21",1]]},"$1b","$1e",1]},"$1b","$1d",1]]
+ 7:["$","html",null,{"children":["$","body",null,{"children":["$","main",null,{"children":["$","$L15",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L17",null,{},null,"$16",1],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":["$","$L4","c-not-found",{"type":"not-found","pagePath":"__next_builtin__not-found.js","children":["$19",[]]},null,"$18",0],"forbidden":"$undefined","unauthorized":"$undefined","segmentViewBoundaries":[["$","$L4",null,{"type":"boundary:not-found","pagePath":"__next_builtin__not-found.js@boundary"},null,"$23",1],"$undefined","$undefined",["$","$L4",null,{"type":"boundary:global-error","pagePath":"__next_builtin__global-error.js"},null,"$24",1]]},null,"$14",1]},"$8","$13",1]},"$8","$12",1]},"$8","$11",1]
+ 27:D{"time":8.708755493164062}
+ 27:D"$28"
+ 2c:D{"time":9.507986068725586}
+ 2c:D"$2d"
+ 2c:D{"time":12.542533874511719}
+ 2c:["$","$L2f",null,{"children":["$","$31",null,{"name":"Next.MetadataOutlet","children":"$@32"},"$2d","$30",1]},"$2d","$2e",1]
+ 34:D{"time":13.447830200195312}
+ 34:D"$35"
+ 34:D{"time":13.527351379394531}
+ 34:null
+ 37:D{"time":13.618656158447266}
+ 37:D"$38"
+ 37:D{"time":13.744909286499023}
+ 3b:D{"time":13.886543273925781}
+ 3b:D"$3c"
+ 37:["$","$L3a",null,{"children":"$L3b"},"$38","$39",1]
+ 3d:D{"time":14.427532196044922}
+ 3d:D"$3e"
+ 3d:D{"time":14.607065200805664}
+ 43:D{"time":14.723443984985352}
+ 43:D"$44"
+ 3d:["$","div",null,{"hidden":true,"children":["$","$L41",null,{"children":["$","$31",null,{"name":"Next.Metadata","children":"$L43"},"$3e","$42",1]},"$3e","$40",1]},"$3e","$3f",1]
+ 45:[]
+ 0:{"P":"$1","b":"development","c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",true],[["$","$L4","layout",{"type":"layout","pagePath":"layout.tsx","children":["$","$6","c",{"children":[null,"$7"]},null,"$5",1]},null,"$3",0],{"children":[["$","$6","c",{"children":[["$","$L4","c-page",{"type":"page","pagePath":"page.tsx","children":"$L27"},null,"$26",1],null,"$2c"]},null,"$25",0],{},null,false,false]},null,false,false],["$","$6","h",{"children"
+ [<timestamp>] :["$34","$37","$3d",null]},null,"$33",0],false]],"m":"$W45","G":["$46",["$","$L4","ge-svn",{"type":"global-error","pagePath":"__next_builtin__global-error.js","children":[]},null,"$47",0]],"S":false,"_validation":"$@48"}
+
+ [<timestamp>] 29:{}
+ 2a:
+ 49:[["Page","webpack-internal:///(rsc)/./app/page.tsx",10,87,8,1,false]]
+ 27:D{"time":16.992916107177734}
+ 27:["$","div",null,{"children":"This page uses a console.log that has been patched before Next.js runs to include a timestamp in the log line. It does not actually print the timestamp because we want the assertions to be stable but we are asserting that this sync IO does not interrupt the prerender when Cache Components are enabled"},"$28","$49",1]
+
+ [<timestamp>] 4a:[]
+ 4b:[]
+ 3b:D{"time":21.21273422241211}
+ 3b:[["$","meta","0",{"charSet":"utf-8"},"$2d","$4a",0],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"},"$2d","$4b",0]]
+
+ [<timestamp>] 32:D{"time":22.739126205444336}
+ 32:null
+ 43:D{"time":22.760046005249023}
+ 43:[]
+
+ [<timestamp>] ------------------------
+ [<timestamp>] 
+
+ [<timestamp>] Runtime chunks (0)
+ [<timestamp>] ------------------------
+ [<timestamp>] ------------------------
+ [<timestamp>] 
+
+ [<timestamp>] Dynamic chunks (0)
+ [<timestamp>] ------------------------
+ [<timestamp>] ------------------------
+ [<timestamp>]"

  46 |           const snapshot = output.slice(0, output.indexOf('GET / 200')).trim()
  47 |
> 48 |           expect(snapshot).toMatchInlineSnapshot(
     |                            ^
  49 |             `"[<timestamp>] This is a console log from a server component page"`
  50 |           )
  51 |         })

  at Object.toMatchInlineSnapshot (e2e/app-dir/cache-components-errors/cache-components-console-patch.test.ts:48:28)

pnpm test-dev test/e2e/app-dir/cache-components-create-component-tree/cache-components-create-component-tree.test.ts (job)

  • hello-world > should not indicate there is an error when incidental math.random calls occur during component tree generation during dev (DD)
Expand output

● hello-world › should not indicate there is an error when incidental math.random calls occur during component tree generation during dev

expect(received).not.toContain(expected) // indexOf

Expected substring: not "Math.random()"
Received string:        "   ▲ Next.js 16.0.2-canary.9 (webpack, Cache Components)
   - Local:         http://localhost:42073
   - Network:       http://65.21.220.145:42073

 ✓ Starting...

   We detected TypeScript in your project and created a tsconfig.json file for you.
 ✓ Ready in 1383ms
 ○ Compiling / ...
patching


##########################################################
[app-render] :: rendering / (/)

=================== [initial] Static ===================
=================== [initial] Runtime ===================
[staged-rendering] resolving runtime stage
=================== [initial] Dynamic ===================
[staged-rendering] resolving dynamic stage
Static chunks (7)
------------------------
4:I[\"(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-8471688238c9c731641baf4a87c1fdce6f3d974fff520a7fa93af0390b8e36d1+packages+n_k3h2zgvzfpw2vvwojio47zgfbu/node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.js\",[\"app-pages-internals\",\"static/chunks/app-pages-internals.js\"],\"SegmentViewNode\"]
6:\"$Sreact.fragment\"
14:I[\"(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-8471688238c9c731641baf4a87c1fdce6f3d974fff520a7fa93af0390b8e36d1+packages+n_k3h2zgvzfpw2vvwojio47zgfbu/node_modules/next/dist/client/components/layout-router.js\",[\"app-pages-internals\",\"static/chunks/app-pages-internals.js\"],\"\"]
16:I[\"(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-8471688238c9c731641baf4a87c1fdce6f3d974fff520a7fa93af0390b8e36d1+packages+n_k3h2zgvzfpw2vvwojio47zgfbu/node_modules/next/dist/client/components/render-from-template-context.js\",[\"app-pages-internals\",\"static/chunks/app-pages-internals.js\"],\"\"]
2f:I[\"(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-8471688238c9c731641baf4a87c1fdce6f3d974fff520a7fa93af0390b8e36d1+packages+n_k3h2zgvzfpw2vvwojio47zgfbu/node_modules/next/dist/lib/framework/boundary-components.js\",[\"app-pages-internals\",\"static/chunks/app-pages-internals.js\"],\"OutletBoundary\"]
31:\"$Sreact.suspense\"
3a:I[\"(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-8471688238c9c731641baf4a87c1fdce6f3d974fff520a7fa93af0390b8e36d1+packages+n_k3h2zgvzfpw2vvwojio47zgfbu/node_modules/next/dist/lib/framework/boundary-components.js\",[\"app-pages-internals\",\"static/chunks/app-pages-internals.js\"],\"ViewportBoundary\"]
41:I[\"(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-8471688238c9c731641baf4a87c1fdce6f3d974fff520a7fa93af0390b8e36d1+packages+n_k3h2zgvzfpw2vvwojio47zgfbu/node_modules/next/dist/lib/framework/boundary-components.js\",[\"app-pages-internals\",\"static/chunks/app-pages-internals.js\"],\"MetadataBoundary\"]
46:I[\"(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-8471688238c9c731641baf4a87c1fdce6f3d974fff520a7fa93af0390b8e36d1+packages+n_k3h2zgvzfpw2vvwojio47zgfbu/node_modules/next/dist/client/components/builtin/global-error.js\",[\"app-pages-internals\",\"static/chunks/app-pages-internals.js\"],\"\"]
:N1762641645162.7366
2:{\"name\":\"Preloads\",\"key\":null,\"env\":\"Prerender\",\"stack\":[],\"props\":{\"preloadCallbacks\":[]}}
3:[]
5:[]
9:I[\"(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-8471688238c9c731641baf4a87c1fdce6f3d974fff520a7fa93af0390b8e36d1+packages+n_k3h2zgvzfpw2vvwojio47zgfbu/node_modules/next/dist/client/components/layout-router.js\",[\"app-pages-internals\",\"static/chunks/app-pages-internals.js\"],\"\"]
c:I[\"(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-8471688238c9c731641baf4a87c1fdce6f3d974fff520a7fa93af0390b8e36d1+packages+n_k3h2zgvzfpw2vvwojio47zgfbu/node_modules/next/dist/client/components/render-from-template-context.js\",[\"app-pages-internals\",\"static/chunks/app-pages-internals.js\"],\"\"]
d:{}
e:[[\"Function.all\",\"\",0,0,0,0,true]]
b:{\"children\":[\"$\",\"$Lc\",null,\"$d\",null,\"$e\",1]}
f:[[\"Function.all\",\"\",0,0,0,0,true]]
a:{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$6\",null,\"$b\",null,\"$f\",0],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$Y\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\",\"segmentViewBoundaries\":\"$Y\"}
10:[[\"Function.all\",\"\",0,0,0,0,true]]
8:{\"name\":\"Root\",\"key\":null,\"env\":\"Prerender\",\"stack\":[],\"props\":{\"children\":[\"$\",\"$L9\",null,\"$a\",null,\"$10\",1],\"params\":\"$Y\"}}
11:[[\"Root\",\"webpack-internal:///(rsc)/./app/layout.tsx\",35,87,34,1,false]]
12:[[\"Root\",\"webpack-internal:///(rsc)/./app/layout.tsx\",36,94,34,1,false]]
13:[[\"Function.all\",\"\",0,0,0,0,true]]
15:[[\"Function.all\",\"\",0,0,0,0,true]]
17:[]
19:{\"name\":\"NotFound\",\"key\":null,\"env\":\"Prerender\",\"stack\":[],\"props\":{}}
1a:{\"name\":\"HTTPAccessErrorFallback\",\"key\":null,\"env\":\"Prerender\",\"owner\":\"$19\",\"stack\":[],\"props\":{\"status\":404,\"message\":\"This page could not be found.\"}}
1b:[]
1c:[]
1d:[]
1e:[]
1f:[]
20:[]
21:[]
22:[[\"Function.all\",\"\",0,0,0,0,true]]
23:[[\"Func
tion.all\",\"\",0,0,0,0,true]]
24:[[\"Function.all\",\"\",0,0,0,0,true]]
25:[[\"Function.all\",\"\",0,0,0,0,true]]
27:{\"name\":\"Page\",\"key\":null,\"env\":\"Prerender\",\"stack\":[[\"Function.all\",\"\",0,0,0,0,true]],\"props\":{\"params\":\"$@28\",\"searchParams\":\"$@29\"}}
2a:[[\"Page\",\"webpack-internal:///(rsc)/./app/page.tsx\",11,88,8,1,false]]
2b:[[\"Page\",\"webpack-internal:///(rsc)/./app/page.tsx\",18,88,8,1,false]]
2d:{\"name\":\"Next.MetadataOutlet\",\"key\":null,\"env\":\"Prerender\",\"stack\":[[\"Function.all\",\"\",0,0,0,0,true]],\"props\":{}}
2e:[]
30:[]
33:[]

36:\"$EObject.defineProperty(function(type,config,children){for(var propName,i=2;i<arguments.length;i++)validateChildKeys(arguments[i]);i={};var key=null;if(null!=config)for(propName in didWarnAboutOldJSXRuntime||!(\\\"__self\\\"in config)||\\\"key\\\"in config||(didWarnAboutOldJSXRuntime=!0,console.warn(\\\"Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform\\\")),hasValidKey(config)&&(checkKeyStringCoercion(config.key),key=\\\"\\\"+config.key),config)hasOwnProperty.call(config,propName)&&\\\"key\\\"!==propName&&\\\"__self\\\"!==propName&&\\\"__source\\\"!==propName&&(i[propName]=config[propName]);var childrenLength=arguments.length-2;if(1===childrenLength)i.children=children;else if(1<childrenLength){for(var childArray=Array(childrenLength),_i=0;_i<childrenLength;_i++)childArray[_i]=arguments[_i+2];Object.freeze&&Object.freeze(childArray),i.children=childArray}if(type&&type.defaultProps)for(propName in childrenLength=type.defaultProps)void 0===i[propName]&&(i[propName]=childrenLength[propName]);return key&&function(props,displayName){function warnAboutAccessingKey(){specialPropKeyWarningShown||(specialPropKeyWarningShown=!0,console.error(\\\"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\\\",displayName))}warnAboutAccessingKey.isReactWarning=!0,Object.defineProperty(props,\\\"key\\\",{get:warnAboutAccessingKey,configurable:!0})}(i,\\\"function\\\"==typeof type?type.displayName||type.name||\\\"Unknown\\\":type),(propName=1e4>ReactSharedInternals.recentlyCreatedOwnerStacks++)?(childArray=Error.stackTraceLimit,Error.stackTraceLimit=10,childrenLength=Error(\\\"react-stack-top-frame\\\"),Error.stackTraceLimit=childArray):childrenLength=unknownOwnerDebugStack,ReactElement(type,key,i,getOwner(),childrenLength,propName?createTask(getTaskName(type)):unknownOwnerDebugTask)},\\\"name\\\",{value:\\\"\\\"})\"

35:{\"name\":\"NonIndex\",\"key\":null,\"env\":\"Prerender\",\"stack\":[],\"props\":{\"createElement\":\"$36\",\"pagePath\":\"/\",\"statusCode\":200,\"isPossibleServerAction\":false}}
38:{\"name\":\"ViewportWrapper\",\"key\":null,\"env\":\"Prerender\",\"stack\":[],\"props\":{}}
39:[]
3c:{\"name\":\"Next.Viewport\",\"key\":null,\"env\":\"Prerender\",\"owner\":\"$38\",\"stack\":[],\"props\":{}}
3e:{\"name\":\"MetadataWrapper\",\"key\":null,\"env\":\"Prerender\",\"stack\":[],\"props\":{}}
3f:[]
40:[]
42:[]
44:{\"name\":\"Next.Metadata\",\"key\":null,\"env\":\"Prerender\",\"owner\":\"$3e\",\"stack\":[],\"props\":{}}
47:[]
1:D{\"time\":3.380748748779297}
1:D\"$2\"
1:D{\"time\":3.6524219512939453}
1:null
7:D{\"time\":5.11189079284668}
7:D\"$8\"
7:D{\"time\":6.606853485107422}
18:D{\"time\":7.076740264892578}
18:D\"$19\"
18:D{\"time\":7.47279167175293}
18:D\"$1a\"
18:D{\"time\":7.8346099853515625}
18:[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"},\"$1a\",\"$1b\",1],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}},\"$1a\",\"$1e\",1],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404},\"$1a\",\"$1f\",1],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"},\"$1a\",\"$21\",1]},\"$1a\",\"$20\",1]]},\"$1a\",\"$1d\",1]},\"$1a\",\"$1c\",1]]
7:[\"$\",\"html\",null,{\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L14\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L16\",null,{},null,\"$15\",1],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[\"$\",\"$L4\",\"c-not-found\",{\"type\":\"not-found\",\"pagePath\":\"__next_builtin__not-found.js\",\"children\":[\"$18\",[]]},null,\"$17\",0],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\",\"segmentViewBoundaries\":[[\"$\",\"$L4\",null,{\"type\":\"boundary:not-found\",\"pagePath\":\"__next_builtin__not-found.js@boundary\"},null,\"$22\",1],\"$undefined\",\"$undefined\",[\"$\",\"$L4\",null,{\"type\":\"boundary:global-error\",\"pagePath\":\"__next_builtin__global-error.js\"},null,\"$23\",1]]},null,\"$13\",1]},\"$8\",\"$12\",1]},\"$8\",\"$11\",1]
26:D{\"time\":9.922666549682617}
26:D\"$27\"
26:D{\"time\":10.097122192382812}
26:[[\"$\",\"p\",null,{\"children\":\"This test does some hacky stuff to cause a `Math.random()` call to happen during the component tree creation which happens before the RSC render. Before the fix that this test accompanied landed this kind of sync IO was reported as a problem in Dev and in runtime during start. In practice this would be because of an OTEL span generation during create-component-tree. With this fix in place the create-component-tree function will not leak any sync IO results into the final prerender.\"},\"$27\",\"$2a\",1],[\"$\",\"p\",null,{\"children\":\"In the long run we ought to move create-component-tree into the render itself and ensure the tree structure comports with CacheComponent rules. This test can be deleted at that time.\"},\"$27\",\"$2b\",1]]
2c:D{\"time\":10.510536193847656}
2c:D\"$2d\"
2c:D{\"time\":13.690542221069336}
2c:[\"$\",\"$L2f\",null,{\"children\":[\"$\",\"$31\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@32\"},\"$2d\",\"$30\",1]},\"$2d\",\"$2e\",1]
34:D{\"time\":14.705907821655273}
34:D\"$35\"
34:D{\"time\":14.783241271972656}
34:null
37:D{\"time\":14.920206069946289}
37:D\"$38\"
37:D{\"time\":15.096685409545898}
3b:D{\"time\":15.338088989257812}
3b:D\"$3c\"
37:[\"$\",\"$L3a\",null,{\"children\":\"$L3b\"},\"$38\",\"$39\",1]
3d:D{\"time\":16.170303344726562}
3d:D\"$3
e\"
3d:D{\"time\":16.39742088317871}
43:D{\"time\":16.625934600830078}
43:D\"$44\"
3d:[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L41\",null,{\"children\":[\"$\",\"$31\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L43\"},\"$3e\",\"$42\",1]},\"$3e\",\"$40\",1]},\"$3e\",\"$3f\",1]
45:[]
0:{\"P\":\"$1\",\"b\":\"development\",\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$L4\",\"layout\",{\"type\":\"layout\",\"pagePath\":\"layout.tsx\",\"children\":[\"$\",\"$6\",\"c\",{\"children\":[null,\"$7\"]},null,\"$5\",1]},null,\"$3\",0],{\"children\":[[\"$\",\"$6\",\"c\",{\"children\":[[\"$\",\"$L4\",\"c-page\",{\"type\":\"page\",\"pagePath\":\"page.tsx\",\"children\":\"$26\"},null,\"$25\",1],null,\"$2c\"]},null,\"$24\",0],{},null,false,false]},null,false,false],[\"$\",\"$6\",\"h\",{\"children\":[\"$34\",\"$37\",\"$3d\",null]},null,\"$33\",0],false]],\"m\":\"$W45\",\"G\":[\"$46\",[\"$\",\"$L4\",\"ge-svn\",{\"type\":\"global-error\",\"pagePath\":\"__next_builtin__global-error.js\",\"children\":[]},null,\"$47\",0]],\"S\":false,\"_validation\":\"$@48\"}

28:{}
29:
49:[]
4a:[]
3b:D{\"time\":31.234249114990234}
3b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"},\"$2d\",\"$49\",0],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"},\"$2d\",\"$4a\",0]]

4d:I[\"(app-pages-browser)/./node_modules/.pnpm/file+..+next-repo-8471688238c9c731641baf4a87c1fdce6f3d974fff520a7fa93af0390b8e36d1+packages+n_k3h2zgvzfpw2vvwojio47zgfbu/node_modules/next/dist/lib/metadata/generate/icon-mark.js\",[\"app-pages-internals\",\"static/chunks/app-pages-internals.js\"],\"IconMark\"]
4b:[[\"Array.map\",\"\",0,0,0,0,false]]
4c:[]
32:D{\"time\":35.558488845825195}
32:null
43:D{\"time\":35.5850887298584}
43:[[\"$\",\"link\",\"0\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?35749ea079272401\",\"type\":\"image/x-icon\",\"sizes\":\"16x16\"},\"$2d\",\"$4b\",0],[\"$\",\"$L4d\",\"1\",{},\"$2d\",\"$4c\",0]]

------------------------


Runtime chunks (0)
------------------------
------------------------


Dynamic chunks (0)
------------------------
------------------------



 GET / 200 in 7.7s (compile: 5.6s, render: 2.1s)
"

  15 |
  16 |       // The redbox assertion is currently unreliable in this test and so this is an additional check to ensure the CLI didn't print anything with `Math.random()` in it.
> 17 |       expect(next.cliOutput).not.toContain('Math.random()')
     |                                  ^
  18 |     })
  19 |   } else {
  20 |     it('should not indicate there is an error when incidental math.random calls occur during component tree generation during build', async () => {

  at Object.toContain (e2e/app-dir/cache-components-create-component-tree/cache-components-create-component-tree.test.ts:17:34)

pnpm test-dev test/e2e/app-dir/cache-components-errors/cache-components-dev-cache-bypass.test.ts (job)

  • Cache Components Errors > Warning for Bypassing Caches in Dev > warns if you render with cache-control: no-cache in dev on initial page load (DD)
  • Cache Components Errors > Warning for Bypassing Caches in Dev > warns if you render with cache-control: no-cache in dev on client navigation (DD)
  • Cache Components Errors > Warning for Bypassing Caches in Dev > does not warn if you render without cache-control: no-cache in dev on initial page load (DD)
  • Cache Components Errors > Warning for Bypassing Caches in Dev > does not warn if you render without cache-control: no-cache in dev on client navigation (DD)
Expand output

● Cache Components Errors › Warning for Bypassing Caches in Dev › warns if you render with cache-control: no-cache in dev on initial page load

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Errors Warning for Bypassing Caches in Dev warns if you render with cache-control: no-cache in dev on initial page load 1`

- Snapshot  - 1
+ Received  + 3

- Route / is rendering with server caches disabled. For this navigation, Component Metadata in React DevTools will not accurately reflect what is statically prerenderable and runtime prefetchable. See more info here: https://nextjs.org/docs/messages/cache-bypass-in-dev
+ Route / is rendering with server caches disabled. For this navigation, Component Metadata in React DevTools will not accurately reflect what is statically prerenderable and runtime prefetchable. See more info here: https://nextjs.org/docs/messages/cache-bypass-in-dev
+ [staged-rendering] resolving runtime stage
+ [staged-rendering] resolving dynamic stage
  ↵

  20 |
  21 |         expect(stripGetLines(next.cliOutput.slice(from)))
> 22 |           .toMatchInlineSnapshot(`
     |            ^
  23 |          "Route / is rendering with server caches disabled. For this navigation, Component Metadata in React DevTools will not accurately reflect what is statically prerenderable and runtime prefetchable. See more info here: https://nextjs.org/docs/messages/cache-bypass-in-dev
  24 |          "
  25 |         `)

  at Object.toMatchInlineSnapshot (e2e/app-dir/cache-components-errors/cache-components-dev-cache-bypass.test.ts:22:12)

● Cache Components Errors › Warning for Bypassing Caches in Dev › warns if you render with cache-control: no-cache in dev on client navigation

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Errors Warning for Bypassing Caches in Dev warns if you render with cache-control: no-cache in dev on client navigation 1`

- Snapshot  - 1
+ Received  + 3

- Route /other is rendering with server caches disabled. For this navigation, Component Metadata in React DevTools will not accurately reflect what is statically prerenderable and runtime prefetchable. See more info here: https://nextjs.org/docs/messages/cache-bypass-in-dev
+ Route /other is rendering with server caches disabled. For this navigation, Component Metadata in React DevTools will not accurately reflect what is statically prerenderable and runtime prefetchable. See more info here: https://nextjs.org/docs/messages/cache-bypass-in-dev
+ [staged-rendering] resolving runtime stage
+ [staged-rendering] resolving dynamic stage
  ↵

  34 |
  35 |         expect(stripGetLines(next.cliOutput.slice(from)))
> 36 |           .toMatchInlineSnapshot(`
     |            ^
  37 |          "Route /other is rendering with server caches disabled. For this navigation, Component Metadata in React DevTools will not accurately reflect what is statically prerenderable and runtime prefetchable. See more info here: https://nextjs.org/docs/messages/cache-bypass-in-dev
  38 |          "
  39 |         `)

  at Object.toMatchInlineSnapshot (e2e/app-dir/cache-components-errors/cache-components-dev-cache-bypass.test.ts:36:12)

● Cache Components Errors › Warning for Bypassing Caches in Dev › does not warn if you render without cache-control: no-cache in dev on initial page load

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Errors Warning for Bypassing Caches in Dev does not warn if you render without cache-control: no-cache in dev on initial page load 1`

- Snapshot  -  0
+ Received  + 11

+
+
+ ##########################################################
+ [app-render] :: rendering / (/)
+
+ =================== [initial] Static ===================
+ =================== [initial] Runtime ===================
+ [staged-rendering] resolving runtime stage
+ =================== [initial] Dynamic ===================
+ [staged-rendering] resolving dynamic stage
+

  45 |         await next.fetch('/')
  46 |
> 47 |         expect(stripGetLines(next.cliOutput.slice(from))).toMatchInlineSnapshot(
     |                                                           ^
  48 |           `""`
  49 |         )
  50 |       })

  at Object.toMatchInlineSnapshot (e2e/app-dir/cache-components-errors/cache-components-dev-cache-bypass.test.ts:47:59)

● Cache Components Errors › Warning for Bypassing Caches in Dev › does not warn if you render without cache-control: no-cache in dev on client navigation

expect(received).toMatchInlineSnapshot(snapshot)

Snapshot name: `Cache Components Errors Warning for Bypassing Caches in Dev does not warn if you render without cache-control: no-cache in dev on client navigation 1`

- Snapshot  -  0
+ Received  + 11

+
+
+ ##########################################################
+ [app-render] :: rendering / (/)
+
+ =================== [initial] Static ===================
+ =================== [initial] Runtime ===================
+ [staged-rendering] resolving runtime stage
+ =================== [initial] Dynamic ===================
+ [staged-rendering] resolving dynamic stage
+

  57 |         })
  58 |
> 59 |         expect(stripGetLines(next.cliOutput.slice(from))).toMatchInlineSnapshot(
     |                                                           ^
  60 |           `""`
  61 |         )
  62 |       })

  at Object.toMatchInlineSnapshot (e2e/app-dir/cache-components-errors/cache-components-dev-cache-bypass.test.ts:59:59)

pnpm test test/integration/required-server-files-ssr-404/test/index.test.ts (job)

  • Required Server Files > production mode > should output required-server-files manifest correctly (DD)
  • Required Server Files > production mode > should render SSR page correctly (DD)
  • Required Server Files > production mode > should render dynamic SSR page correctly (DD)
  • Required Server Files > production mode > should render fallback page correctly (DD)
  • Required Server Files > production mode > should render SSR page correctly with x-matched-path (DD)
  • Required Server Files > production mode > should render dynamic SSR page correctly with x-matched-path (DD)
  • Required Server Files > production mode > should render fallback page correctly with x-matched-path and routes-matches (DD)
  • Required Server Files > production mode > should return data correctly with x-matched-path (DD)
  • Required Server Files > production mode > should render fallback optional catch-all route correctly with x-matched-path and routes-matches (DD)
  • Required Server Files > production mode > should return data correctly with x-matched-path for optional catch-all route (DD)
  • Required Server Files > production mode > should not apply trailingSlash redirect (DD)
  • Required Server Files > production mode > should normalize catch-all rewrite query values correctly (DD)
  • Required Server Files > production mode > should bubble error correctly for gip page (DD)
  • Required Server Files > production mode > should bubble error correctly for gssp page (DD)
  • Required Server Files > production mode > should bubble error correctly for gsp page (DD)
  • Required Server Files > production mode > should normalize optional values correctly for SSP page (DD)
  • Required Server Files > production mode > should normalize optional values correctly for SSG page (DD)
  • Required Server Files > production mode > should normalize optional values correctly for API page (DD)
  • Required Server Files > production mode > should match the index page correctly (DD)
  • Required Server Files > production mode > should match the root dynamic page correctly (DD)
  • Required Server Files > production mode > should handle 404s properly (DD)
  • Required Server Files > production mode > partial optional catch-all route > should render /partial-catch-all/hello.com (DD)
  • Required Server Files > production mode > partial optional catch-all route > should render /partial-catch-all/hello.com/hello (DD)
  • Required Server Files > production mode > partial optional catch-all route > should render /partial-catch-all/hello.com/hello/world (DD)
Expand output

● Required Server Files › production mode › should output required-server-files manifest correctly

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should render SSR page correctly

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should render dynamic SSR page correctly

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should render fallback page correctly

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should render SSR page correctly with x-matched-path

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should render dynamic SSR page correctly with x-matched-path

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should render fallback page correctly with x-matched-path and routes-matches

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should return data correctly with x-matched-path

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should render fallback optional catch-all route correctly with x-matched-path and routes-matches

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › partial optional catch-all route › should render /partial-catch-all/hello.com

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › partial optional catch-all route › should render /partial-catch-all/hello.com/hello

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › partial optional catch-all route › should render /partial-catch-all/hello.com/hello/world

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should return data correctly with x-matched-path for optional catch-all route

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should not apply trailingSlash redirect

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should normalize catch-all rewrite query values correctly

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should bubble error correctly for gip page

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should bubble error correctly for gssp page

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should bubble error correctly for gsp page

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should normalize optional values correctly for SSP page

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should normalize optional values correctly for SSG page

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should normalize optional values correctly for API page

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should match the index page correctly

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should match the root dynamic page correctly

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Required Server Files › production mode › should handle 404s properly

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  17 |     'production mode',
  18 |     () => {
> 19 |       beforeAll(async () => {
     |       ^
  20 |         await fs.remove(join(appDir, '.next'))
  21 |         await nextBuild(appDir, undefined, {
  22 |           env: {

  at beforeAll (integration/required-server-files-ssr-404/test/index.test.ts:19:7)
  at integration/required-server-files-ssr-404/test/index.test.ts:16:56
  at Object.describe (integration/required-server-files-ssr-404/test/index.test.ts:15:1)

● Test suite failed to run

ENOENT: no such file or directory, rename '/root/actions-runner/_work/next.js/next.js/test/integration/required-server-files-ssr-404/pages-bak' -> '/root/actions-runner/_work/next.js/next.js/test/integration/required-server-files-ssr-404/pages'

pnpm test-start test/e2e/app-dir/app-prefetch/prefetching.stale-times.test.ts (job)

  • app dir - prefetching (custom staleTime) > should not re-fetch cached data when navigating back to a route group (DD)
Expand output

● app dir - prefetching (custom staleTime) › should not re-fetch cached data when navigating back to a route group

Expected no network requests to be initiated.

URL: http://localhost:35693/prefetch-auto-route-groups?_rsc=1tsbd
Headers: {"vary":"rsc, next-router-state-tree, next-router-prefetch, next-router-segment-prefetch, Accept-Encoding","cache-control":"private, no-cache, no-store, max-age=0, must-revalidate","content-type":"text/x-component","content-encoding":"gzip","date":"Sat, 08 Nov 2025 22:45:51 GMT","connection":"keep-alive","keep-alive":"timeout=5"}

Response:
1:"$Sreact.fragment"
3:I[1301,[],"OutletBoundary"]
4:"$Sreact.suspense"
6:I[1301,[],"ViewportBoundary"]
8:I[1301,[],"MetadataBoundary"]
0:{"b":"bKnqlt6rvqwKrwyhZqMrF","f":[["children","prefetch-auto-route-groups","children","(dashboard)","children","__PAGE__",["__PAGE__",{}],[["$","$1","c",{"children":["$L2",null,["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],{},null,false,false],["$","$1","h",{"children":[null,["$","$L6","7zkAm9psV4-F2wdLvGbZYv",{"children":"$L7"}],["$","div","7zkAm9psV4-F2wdLvGbZYm",{"hidden":true,"children":["$","$L8",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":"$L9"}]}]}]]}],false]],"S":false}
7:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
5:null
9:[]
2:["$","h1",null,{"children":["Dashboard ","data",["$","div",null,{"children":["Fetch Count: ",["$","span",null,{"id":"count","children":4}]]}]]}]

  164 |
  165 |     // Finally, go back to the route group page - should use cached data with no additional fetch
> 166 |     await act(async () => {
      |           ^
  167 |       await browser.elementByCss("[href='/prefetch-auto-route-groups']").click()
  168 |     }, 'no-requests')
  169 |

  at Object.act (e2e/app-dir/app-prefetch/prefetching.stale-times.test.ts:166:11)

pnpm test test/integration/telemetry/test/page-features.test.ts (job)

  • page features telemetry > production mode > should detect app page counts (DD)
  • page features telemetry > production mode > detects reportWebVitals with no _app correctly for next build (DD)
  • page features telemetry > production mode > detect with reportWebVitals correctly for next build (DD)
  • page features telemetry > production mode > detect without reportWebVitals correctly for next build (DD)
Expand output

● page features telemetry › production mode › should detect app page counts

thrown: "Exceeded timeout of 60000 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."

  124 |       'production mode',
  125 |       () => {
> 126 |         it('should detect app page counts', async () => {
      |         ^
  127 |           await fs.ensureFile(path.join(__dirname, '../app/ssr/page.js'))
  128 |           await fs.writeFile(
  129 |             path.join(__dirname, '../app/ssr/page.js'),

  at it (integration/telemetry/test/page-features.test.ts:126:9)
  at integration/telemetry/test/page-features.test.ts:123:58
  at Object.describe (integration/telemetry/test/page-features.test.ts:14:1)

● page features telemetry › production mode › detects reportWebVitals with no _app correctly for next build

expect(received).toContain(expected) // indexOf

Expected substring: "NEXT_BUILD_OPTIMIZED"
Received string:    " ⨯ Unable to acquire lock at /root/actions-runner/_work/next.js/next.js/test/integration/telemetry/.next/lock, is another instance of next build running?
"

  202 |           })
  203 |
> 204 |           expect(build.stderr).toContain('NEXT_BUILD_OPTIMIZED')
      |                                ^
  205 |           let event1 = /NEXT_BUILD_OPTIMIZED[\s\S]+?{([\s\S]+?)}/
  206 |             .exec(build.stderr)
  207 |             .pop()

  at Object.toContain (integration/telemetry/test/page-features.test.ts:204:32)

● page features telemetry › production mode › detect with reportWebVitals correctly for next build

expect(received).toContain(expected) // indexOf

Expected substring: "NEXT_BUILD_OPTIMIZED"
Received string:    " ⨯ Unable to acquire lock at /root/actions-runner/_work/next.js/next.js/test/integration/telemetry/.next/lock, is another instance of next build running?
"

  232 |
  233 |           try {
> 234 |             expect(build.stderr).toContain('NEXT_BUILD_OPTIMIZED')
      |                                  ^
  235 |             const event1 = /NEXT_BUILD_OPTIMIZED[\s\S]+?{([\s\S]+?)}/
  236 |               .exec(build.stderr)
  237 |               .pop()

  at Object.toContain (integration/telemetry/test/page-features.test.ts:234:34)

● page features telemetry › production mode › detect without reportWebVitals correctly for next build

expect(received).toContain(expected) // indexOf

Expected substring: "NEXT_BUILD_OPTIMIZED"
Received string:    " ⨯ Unable to acquire lock at /root/actions-runner/_work/next.js/next.js/test/integration/telemetry/.next/lock, is another instance of next build running?
"

  266 |
  267 |           try {
> 268 |             expect(build.stderr).toContain('NEXT_BUILD_OPTIMIZED')
      |                                  ^
  269 |             const event1 = /NEXT_BUILD_OPTIMIZED[\s\S]+?{([\s\S]+?)}/
  270 |               .exec(build.stderr)
  271 |               .pop()

  at Object.toContain (integration/telemetry/test/page-features.test.ts:268:34)

pnpm test test/integration/react-profiling-mode/test/index.test.ts (job)

  • React Profiling Mode > production mode > with config enabled > should have used the react-dom profiling bundle for pages (DD)
  • React Profiling Mode > production mode > with config enabled > should have used the react-dom profiling bundle for client component (DD)
  • React Profiling Mode > production mode > with config enabled > should have used the react-dom profiling bundle for server component (DD)
  • React Profiling Mode > production mode > without config enabled > should not have used the react-dom profiling bundle (DD)
Expand output

● React Profiling Mode › production mode › without config enabled › should not have used the react-dom profiling bundle

thrown: "Exceeded timeout of 60000 ms for a hook.
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."

  15 |     () => {
  16 |       describe('without config enabled', () => {
> 17 |         beforeAll(async () => {
     |         ^
  18 |           await nextBuild(appDir, [], {
  19 |             env: { TEST_REACT_PRODUCTION_PROFILING: 'false' },
  20 |           })

  at beforeAll (integration/react-profiling-mode/test/index.test.ts:17:9)
  at describe (integration/react-profiling-mode/test/index.test.ts:16:7)
  at integration/react-profiling-mode/test/index.test.ts:13:56
  at Object.describe (integration/react-profiling-mode/test/index.test.ts:12:1)

● React Profiling Mode › production mode › with config enabled › should have used the react-dom profiling bundle for pages

command failed with code 1 signal null
 ⚠ Profiling is enabled. Note: This may affect performance.
 ⨯ Unable to acquire lock at /root/actions-runner/_work/next.js/next.js/test/integration/react-profiling-mode/.next/lock, is another instance of next build running?
   Suggestion: If you intended to restart next build, terminate the other process, and then try again.

  323 |       ) {
  324 |         return reject(
> 325 |           new Error(
      |           ^
  326 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  327 |           )
  328 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:325:11)

● React Profiling Mode › production mode › with config enabled › should have used the react-dom profiling bundle for client component

command failed with code 1 signal null
 ⚠ Profiling is enabled. Note: This may affect performance.
 ⨯ Unable to acquire lock at /root/actions-runner/_work/next.js/next.js/test/integration/react-profiling-mode/.next/lock, is another instance of next build running?
   Suggestion: If you intended to restart next build, terminate the other process, and then try again.

  323 |       ) {
  324 |         return reject(
> 325 |           new Error(
      |           ^
  326 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  327 |           )
  328 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:325:11)

● React Profiling Mode › production mode › with config enabled › should have used the react-dom profiling bundle for server component

command failed with code 1 signal null
 ⚠ Profiling is enabled. Note: This may affect performance.
 ⨯ Unable to acquire lock at /root/actions-runner/_work/next.js/next.js/test/integration/react-profiling-mode/.next/lock, is another instance of next build running?
   Suggestion: If you intended to restart next build, terminate the other process, and then try again.

  323 |       ) {
  324 |         return reject(
> 325 |           new Error(
      |           ^
  326 |             `command failed with code ${code} signal ${signal}\n${mergedStdio}`
  327 |           )
  328 |         )

  at ChildProcess.<anonymous> (lib/next-test-utils.ts:325:11)

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

  • segment cache (revalidation) > evict client cache when Server Action calls revalidateTag (DD)
Expand output

● segment cache (revalidation) › evict client cache when Server Action calls revalidateTag

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."

  201 |   })
  202 |
> 203 |   it('evict client cache when Server Action calls revalidateTag', async () => {
      |   ^
  204 |     let act: ReturnType<typeof createRouterAct>
  205 |     const browser = await next.browser('/', {
  206 |       beforePageLoad(page) {

  at it (e2e/app-dir/segment-cache/revalidation/segment-cache-revalidation.test.ts:203:3)
  at Object.describe (e2e/app-dir/segment-cache/revalidation/segment-cache-revalidation.test.ts:7:1)

pnpm test-dev test/e2e/app-dir/use-cache/use-cache.test.ts (job)

  • use-cache > can resume a cached generateMetadata function (DD)
  • use-cache > can serialize parent metadata as generateMetadata argument (DD)
  • use-cache > should not read nor write cached data when draft mode is enabled > js disabled, without cookies (DD)
Expand output

● use-cache › should not read nor write cached data when draft mode is enabled › js disabled, without cookies

page.waitForLoadState: Timeout 60000ms exceeded.

  526 |         // it seems selenium waits longer and tests rely on this behavior
  527 |         // so we wait for the load event fire before returning
> 528 |         await page.waitForLoadState(waitUntil)
      |                    ^
  529 |       }
  530 |       return this.wrapElement(
  531 |         // Playwright has `null` as a possible return type in case `state` is `detached`,

  at waitForLoadState (lib/browsers/playwright.ts:528:20)
  at e2e/app-dir/use-cache/use-cache.test.ts:879:7
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at waitForElementByCss (e2e/app-dir/use-cache/use-cache.test.ts:879:21)

● use-cache › can resume a cached generateMetadata function

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('head title')

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:405:17)
  at Object.elementByCss (e2e/app-dir/use-cache/use-cache.test.ts:1084:10)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:433:17)
  at Object.text (e2e/app-dir/use-cache/use-cache.test.ts:1085:10)

● use-cache › can serialize parent metadata as generateMetadata argument

page.waitForSelector: Timeout 5000ms exceeded.
Call log:
  - waiting for locator('head link[rel="canonical"]')

  519 |
  520 |     return this.startChain(async () => {
> 521 |       const el = await page.waitForSelector(selector, {
      |                             ^
  522 |         timeout,
  523 |         state,
  524 |       })

  at waitForSelector (lib/browsers/playwright.ts:521:29)
  at Playwright._chain (lib/browsers/playwright.ts:651:23)
  at Playwright._chain [as startChain] (lib/browsers/playwright.ts:632:17)
  at Playwright.startChain [as waitForElementByCss] (lib/browsers/playwright.ts:520:17)
  at Playwright.waitForElementByCss [as elementByCss] (lib/browsers/playwright.ts:405:17)
  at Object.elementByCss (e2e/app-dir/use-cache/use-cache.test.ts:1158:10)
  at Proxy._chain (lib/browsers/playwright.ts:651:23)
  at Proxy._chain (lib/browsers/playwright.ts:627:17)
  at Proxy.continueChain (lib/browsers/playwright.ts:455:17)
  at Object.getAttribute (e2e/app-dir/use-cache/use-cache.test.ts:1159:10)

@ijjk
Copy link
Member

ijjk commented Nov 7, 2025

Stats from current PR

Default Build (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary vercel/next.js lubieowoce/discriminated-dynamic-errors-debug Change
buildDuration 24.9s 26.4s ⚠️ +1.5s
buildDurationCached 22.2s 17.6s N/A
nodeModulesSize 453 MB 454 MB ⚠️ +1.03 MB
nextStartRea..uration (ms) 703ms 694ms N/A
Client Bundles (main, webpack) Overall increase ⚠️
vercel/next.js canary vercel/next.js lubieowoce/discriminated-dynamic-errors-debug Change
436-HASH.js gzip 5.32 kB 5.32 kB N/A
4779.HASH.js gzip 169 B 169 B
9760-HASH.js gzip 54.7 kB 55 kB ⚠️ +324 B
c57d0559-HASH.js gzip 62.3 kB 62.3 kB N/A
framework-HASH.js gzip 59.8 kB 59.8 kB
main-app-HASH.js gzip 253 B 257 B N/A
main-HASH.js gzip 39.8 kB 39.9 kB N/A
webpack-HASH.js gzip 1.69 kB 1.69 kB
Overall change 116 kB 117 kB ⚠️ +324 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js lubieowoce/discriminated-dynamic-errors-debug Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages
vercel/next.js canary vercel/next.js lubieowoce/discriminated-dynamic-errors-debug Change
_app-HASH.js gzip 193 B 194 B N/A
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 334 B 334 B
dynamic-HASH.js gzip 1.81 kB 1.81 kB N/A
edge-ssr-HASH.js gzip 255 B 254 B N/A
head-HASH.js gzip 350 B 351 B N/A
hooks-HASH.js gzip 384 B 384 B
image-HASH.js gzip 4.78 kB 4.77 kB N/A
index-HASH.js gzip 260 B 259 B N/A
link-HASH.js gzip 2.5 kB 2.5 kB N/A
routerDirect..HASH.js gzip 316 B 320 B N/A
script-HASH.js gzip 388 B 388 B
withRouter-HASH.js gzip 316 B 314 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 1.39 kB 1.39 kB
Client Build Manifests
vercel/next.js canary vercel/next.js lubieowoce/discriminated-dynamic-errors-debug Change
_buildManifest.js gzip 718 B 720 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js lubieowoce/discriminated-dynamic-errors-debug Change
index.html gzip 523 B 523 B
link.html gzip 537 B 537 B
withRouter.html gzip 520 B 519 B N/A
Overall change 1.06 kB 1.06 kB
Edge SSR bundle Size Overall increase ⚠️
vercel/next.js canary vercel/next.js lubieowoce/discriminated-dynamic-errors-debug Change
edge-ssr.js gzip 128 kB 128 kB N/A
page.js gzip 256 kB 257 kB ⚠️ +999 B
Overall change 256 kB 257 kB ⚠️ +999 B
Middleware size Overall increase ⚠️
vercel/next.js canary vercel/next.js lubieowoce/discriminated-dynamic-errors-debug Change
middleware-b..fest.js gzip 635 B 636 B N/A
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 32.8 kB 32.9 kB ⚠️ +103 B
edge-runtime..pack.js gzip 846 B 846 B
Overall change 33.8 kB 33.9 kB ⚠️ +103 B
Next Runtimes Overall increase ⚠️
vercel/next.js canary vercel/next.js lubieowoce/discriminated-dynamic-errors-debug Change
app-page-exp...dev.js gzip 296 kB 298 kB ⚠️ +2.93 kB
app-page-exp..prod.js gzip 155 kB 155 kB ⚠️ +101 B
app-page-tur...dev.js gzip 295 kB 298 kB ⚠️ +2.93 kB
app-page-tur..prod.js gzip 155 kB 155 kB ⚠️ +102 B
app-page-tur...dev.js gzip 292 kB 295 kB ⚠️ +2.93 kB
app-page-tur..prod.js gzip 153 kB 153 kB N/A
app-page.run...dev.js gzip 293 kB 295 kB ⚠️ +2.93 kB
app-page.run..prod.js gzip 153 kB 153 kB ⚠️ +101 B
app-route-ex...dev.js gzip 70.7 kB 70.7 kB N/A
app-route-ex..prod.js gzip 49.4 kB 49.4 kB
app-route-tu...dev.js gzip 70.7 kB 70.8 kB N/A
app-route-tu..prod.js gzip 49.5 kB 49.5 kB
app-route-tu...dev.js gzip 70.4 kB 70.4 kB N/A
app-route-tu..prod.js gzip 49.3 kB 49.3 kB
app-route.ru...dev.js gzip 70.4 kB 70.4 kB N/A
app-route.ru..prod.js gzip 49.2 kB 49.2 kB
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 328 B 328 B
dist_client_...dev.js gzip 320 B 320 B
dist_client_...dev.js gzip 318 B 318 B
pages-api-tu...dev.js gzip 43.2 kB 43.2 kB
pages-api-tu..prod.js gzip 33.1 kB 33.1 kB
pages-api.ru...dev.js gzip 43.2 kB 43.2 kB
pages-api.ru..prod.js gzip 33.1 kB 33.1 kB
pages-turbo....dev.js gzip 52.8 kB 52.8 kB
pages-turbo...prod.js gzip 40.1 kB 40.1 kB
pages.runtim...dev.js gzip 52.7 kB 52.7 kB
pages.runtim..prod.js gzip 40.1 kB 40.1 kB
server.runti..prod.js gzip 78.9 kB 78.9 kB
Overall change 2.25 MB 2.27 MB ⚠️ +12 kB
build cache Overall increase ⚠️
vercel/next.js canary vercel/next.js lubieowoce/discriminated-dynamic-errors-debug Change
0.pack gzip 3.25 MB 3.27 MB ⚠️ +23.9 kB
index.pack gzip 94.3 kB 95.3 kB ⚠️ +1 kB
Overall change 3.35 MB 3.37 MB ⚠️ +24.9 kB
Diff details
Diff for page.js

Diff too large to display

Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for dynamic-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 1033: /***/ (
+    /***/ 431: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/dynamic",
         function () {
-          return __webpack_require__(6490);
+          return __webpack_require__(8084);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 5323: /***/ (
+    /***/ 2699: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -60,7 +60,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(2223)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(9289);
+      const _loadablecontextsharedruntime = __webpack_require__(3785);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -293,73 +293,34 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 6490: /***/ (
+    /***/ 3785: /***/ (
       __unused_webpack_module,
-      __webpack_exports__,
+      exports,
       __webpack_require__
     ) => {
       "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
+      /* __next_internal_client_entry_do_not_use__  cjs */
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
       });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(1503);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7320);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 4779)
-            .then(__webpack_require__.bind(__webpack_require__, 4779))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 4779],
-          },
-        }
+      Object.defineProperty(exports, "LoadableContext", {
+        enumerable: true,
+        get: function () {
+          return LoadableContext;
+        },
+      });
+      const _interop_require_default = __webpack_require__(1532);
+      const _react = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(2223)
       );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
-
-      /***/
-    },
-
-    /***/ 7320: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(7340);
+      const LoadableContext = _react.default.createContext(null);
+      if (false) {
+      } //# sourceMappingURL=loadable-context.shared-runtime.js.map
 
       /***/
     },
 
-    /***/ 7340: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6828: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -392,7 +353,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
         __webpack_require__(2223)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(5323)
+        __webpack_require__(2699)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -492,29 +453,68 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       /***/
     },
 
-    /***/ 9289: /***/ (
+    /***/ 7514: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(6828);
+
+      /***/
+    },
+
+    /***/ 8084: /***/ (
       __unused_webpack_module,
-      exports,
+      __webpack_exports__,
       __webpack_require__
     ) => {
       "use strict";
-      /* __next_internal_client_entry_do_not_use__  cjs */
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "LoadableContext", {
-        enumerable: true,
-        get: function () {
-          return LoadableContext;
-        },
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
       });
-      const _interop_require_default = __webpack_require__(1532);
-      const _react = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(2223)
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(1503);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(7514);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 9573)
+            .then(__webpack_require__.bind(__webpack_require__, 9573))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 9573],
+          },
+        }
       );
-      const LoadableContext = _react.default.createContext(null);
-      if (false) {
-      } //# sourceMappingURL=loadable-context.shared-runtime.js.map
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
 
       /***/
     },
@@ -524,7 +524,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1033)
+      __webpack_exec__(431)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 1819: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(7521);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 7521: /***/ (
+    /***/ 983: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -37,13 +20,30 @@
 
       /***/
     },
+
+    /***/ 985: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(983);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1819)
+      __webpack_exec__(985)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,34 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 619: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(9891);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 7997: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(6705);
-
-      /***/
-    },
-
-    /***/ 9891: /***/ (
+    /***/ 1417: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1503);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7997);
+        __webpack_require__(5171);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -76,13 +49,40 @@
 
       /***/
     },
+
+    /***/ 1937: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(1417);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 5171: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(7505);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(619)
+      __webpack_exec__(1937)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for hooks-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [9804],
   {
-    /***/ 1679: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/hooks",
-        function () {
-          return __webpack_require__(4655);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 4655: /***/ (
+    /***/ 1598: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 3925: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/hooks",
+        function () {
+          return __webpack_require__(1598);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1679)
+      __webpack_exec__(3925)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for image-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2983],
   {
-    /***/ 797: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/image",
-        function () {
-          return __webpack_require__(5999);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 1713: /***/ (__unused_webpack_module, exports) => {
+    /***/ 881: /***/ (__unused_webpack_module, exports) => {
       "use strict";
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
@@ -58,7 +41,7 @@
       /***/
     },
 
-    /***/ 2263: /***/ (module, exports, __webpack_require__) => {
+    /***/ 1511: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -136,7 +119,137 @@
       /***/
     },
 
-    /***/ 2728: /***/ (module, exports, __webpack_require__) => {
+    /***/ 1744: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "default", {
+        enumerable: true,
+        get: function () {
+          return _default;
+        },
+      });
+      const _findclosestquality = __webpack_require__(7054);
+      function defaultLoader({ config, src, width, quality }) {
+        if (
+          src.startsWith("/") &&
+          src.includes("?") &&
+          config.localPatterns?.length === 1 &&
+          config.localPatterns[0].pathname === "**" &&
+          config.localPatterns[0].search === ""
+        ) {
+          throw Object.defineProperty(
+            new Error(
+              `Image with src "${src}" is using a query string which is not configured in images.localPatterns.` +
+                `\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`
+            ),
+            "__NEXT_ERROR_CODE",
+            {
+              value: "E871",
+              enumerable: false,
+              configurable: true,
+            }
+          );
+        }
+        if (false) {
+        }
+        const q = (0, _findclosestquality.findClosestQuality)(quality, config);
+        return `${config.path}?url=${encodeURIComponent(
+          src
+        )}&w=${width}&q=${q}${
+          src.startsWith("/_next/static/media/") && false ? 0 : ""
+        }`;
+      }
+      // We use this to determine if the import is the default loader
+      // or a custom loader defined by the user in next.config.js
+      defaultLoader.__next_img_default = true;
+      const _default = defaultLoader; //# sourceMappingURL=image-loader.js.map
+
+      /***/
+    },
+
+    /***/ 2388: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
+      __webpack_require__
+    ) => {
+      "use strict";
+      // ESM COMPAT FLAG
+      __webpack_require__.r(__webpack_exports__);
+
+      // EXPORTS
+      __webpack_require__.d(__webpack_exports__, {
+        __N_SSP: () => /* binding */ __N_SSP,
+        default: () => /* binding */ pages_image,
+      });
+
+      // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected]/node_modules/react/jsx-runtime.js
+      var jsx_runtime = __webpack_require__(1503);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/next@[email protected][email protected][email protected]/node_modules/next/image.js
+      var next_image = __webpack_require__(3866);
+      var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // ./pages/nextjs.png
+      /* harmony default export */ const nextjs = {
+        src: "/_next/static/media/nextjs.cae0b805.png",
+        height: 1347,
+        width: 1626,
+        blurDataURL:
+          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAHCAMAAAACh/xsAAAAD1BMVEX////x8fH6+vrb29vo6Oh8o70bAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAH0lEQVR4nGNgwARMjIyMjCAGCzMzMwsTRISJCcRABwAEcAAkLCQfgAAAAABJRU5ErkJggg==",
+        blurWidth: 8,
+        blurHeight: 7,
+      }; // ./pages/image.js
+      function ImagePage(props) {
+        return /*#__PURE__*/ (0, jsx_runtime.jsxs)(jsx_runtime.Fragment, {
+          children: [
+            /*#__PURE__*/ (0, jsx_runtime.jsx)("h1", {
+              children: "next/image example",
+            }),
+            /*#__PURE__*/ (0, jsx_runtime.jsx)(image_default(), {
+              src: nextjs,
+              placeholder: "blur",
+            }),
+          ],
+        });
+      }
+      var __N_SSP = true;
+      /* harmony default export */ const pages_image = ImagePage;
+
+      /***/
+    },
+
+    /***/ 3866: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(6888);
+
+      /***/
+    },
+
+    /***/ 4483: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/image",
+        function () {
+          return __webpack_require__(2388);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 6600: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -158,17 +271,17 @@
         __webpack_require__(9507)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(6705)
+        __webpack_require__(7505)
       );
-      const _getimgprops = __webpack_require__(3556);
-      const _imageconfig = __webpack_require__(3157);
-      const _imageconfigcontextsharedruntime = __webpack_require__(9323);
-      const _warnonce = __webpack_require__(6173);
-      const _routercontextsharedruntime = __webpack_require__(6046);
+      const _getimgprops = __webpack_require__(9588);
+      const _imageconfig = __webpack_require__(2645);
+      const _imageconfigcontextsharedruntime = __webpack_require__(5451);
+      const _warnonce = __webpack_require__(7549);
+      const _routercontextsharedruntime = __webpack_require__(5470);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(3744)
+        __webpack_require__(1744)
       );
-      const _usemergedref = __webpack_require__(2263);
+      const _usemergedref = __webpack_require__(1511);
       // This is replaced by webpack define plugin
       const configEnv = {
         deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
@@ -495,7 +608,96 @@
       /***/
     },
 
-    /***/ 3556: /***/ (
+    /***/ 6888: /***/ (
+      __unused_webpack_module,
+      exports,
+      __webpack_require__
+    ) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      0 && 0;
+      function _export(target, all) {
+        for (var name in all)
+          Object.defineProperty(target, name, {
+            enumerable: true,
+            get: all[name],
+          });
+      }
+      _export(exports, {
+        default: function () {
+          return _default;
+        },
+        getImageProps: function () {
+          return getImageProps;
+        },
+      });
+      const _interop_require_default = __webpack_require__(1532);
+      const _getimgprops = __webpack_require__(9588);
+      const _imagecomponent = __webpack_require__(6600);
+      const _imageloader = /*#__PURE__*/ _interop_require_default._(
+        __webpack_require__(1744)
+      );
+      function getImageProps(imgProps) {
+        const { props } = (0, _getimgprops.getImgProps)(imgProps, {
+          defaultLoader: _imageloader.default,
+          // This is replaced by webpack define plugin
+          imgConf: {
+            deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
+            imageSizes: [32, 48, 64, 96, 128, 256, 384],
+            qualities: [75],
+            path: "/_next/image",
+            loader: "default",
+            dangerouslyAllowSVG: false,
+            unoptimized: false,
+          },
+        });
+        // Normally we don't care about undefined props because we pass to JSX,
+        // but this exported function could be used by the end user for anything
+        // so we delete undefined props to clean it up a little.
+        for (const [key, value] of Object.entries(props)) {
+          if (value === undefined) {
+            delete props[key];
+          }
+        }
+        return {
+          props,
+        };
+      }
+      const _default = _imagecomponent.Image; //# sourceMappingURL=image-external.js.map
+
+      /***/
+    },
+
+    /***/ 7054: /***/ (__unused_webpack_module, exports) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "findClosestQuality", {
+        enumerable: true,
+        get: function () {
+          return findClosestQuality;
+        },
+      });
+      function findClosestQuality(quality, config) {
+        const q = quality || 75;
+        if (!config?.qualities?.length) {
+          return q;
+        }
+        return config.qualities.reduce(
+          (prev, cur) => (Math.abs(cur - q) < Math.abs(prev - q) ? cur : prev),
+          0
+        );
+      } //# sourceMappingURL=find-closest-quality.js.map
+
+      /***/
+    },
+
+    /***/ 9588: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -511,9 +713,9 @@
           return getImgProps;
         },
       });
-      const _warnonce = __webpack_require__(6173);
-      const _imageblursvg = __webpack_require__(1713);
-      const _imageconfig = __webpack_require__(3157);
+      const _warnonce = __webpack_require__(7549);
+      const _imageblursvg = __webpack_require__(881);
+      const _imageconfig = __webpack_require__(2645);
       const VALID_LOADING_VALUES =
         /* unused pure expression or super */ null && [
           "lazy",
@@ -943,215 +1145,13 @@
 
       /***/
     },
-
-    /***/ 3744: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "default", {
-        enumerable: true,
-        get: function () {
-          return _default;
-        },
-      });
-      const _findclosestquality = __webpack_require__(8494);
-      function defaultLoader({ config, src, width, quality }) {
-        if (
-          src.startsWith("/") &&
-          src.includes("?") &&
-          config.localPatterns?.length === 1 &&
-          config.localPatterns[0].pathname === "**" &&
-          config.localPatterns[0].search === ""
-        ) {
-          throw Object.defineProperty(
-            new Error(
-              `Image with src "${src}" is using a query string which is not configured in images.localPatterns.` +
-                `\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns`
-            ),
-            "__NEXT_ERROR_CODE",
-            {
-              value: "E871",
-              enumerable: false,
-              configurable: true,
-            }
-          );
-        }
-        if (false) {
-        }
-        const q = (0, _findclosestquality.findClosestQuality)(quality, config);
-        return `${config.path}?url=${encodeURIComponent(
-          src
-        )}&w=${width}&q=${q}${
-          src.startsWith("/_next/static/media/") && false ? 0 : ""
-        }`;
-      }
-      // We use this to determine if the import is the default loader
-      // or a custom loader defined by the user in next.config.js
-      defaultLoader.__next_img_default = true;
-      const _default = defaultLoader; //# sourceMappingURL=image-loader.js.map
-
-      /***/
-    },
-
-    /***/ 4292: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(7896);
-
-      /***/
-    },
-
-    /***/ 5999: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
-      __webpack_require__
-    ) => {
-      "use strict";
-      // ESM COMPAT FLAG
-      __webpack_require__.r(__webpack_exports__);
-
-      // EXPORTS
-      __webpack_require__.d(__webpack_exports__, {
-        __N_SSP: () => /* binding */ __N_SSP,
-        default: () => /* binding */ pages_image,
-      });
-
-      // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected]/node_modules/react/jsx-runtime.js
-      var jsx_runtime = __webpack_require__(1503);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/next@[email protected][email protected][email protected]/node_modules/next/image.js
-      var next_image = __webpack_require__(4292);
-      var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // ./pages/nextjs.png
-      /* harmony default export */ const nextjs = {
-        src: "/_next/static/media/nextjs.cae0b805.png",
-        height: 1347,
-        width: 1626,
-        blurDataURL:
-          "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAHCAMAAAACh/xsAAAAD1BMVEX////x8fH6+vrb29vo6Oh8o70bAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAH0lEQVR4nGNgwARMjIyMjCAGCzMzMwsTRISJCcRABwAEcAAkLCQfgAAAAABJRU5ErkJggg==",
-        blurWidth: 8,
-        blurHeight: 7,
-      }; // ./pages/image.js
-      function ImagePage(props) {
-        return /*#__PURE__*/ (0, jsx_runtime.jsxs)(jsx_runtime.Fragment, {
-          children: [
-            /*#__PURE__*/ (0, jsx_runtime.jsx)("h1", {
-              children: "next/image example",
-            }),
-            /*#__PURE__*/ (0, jsx_runtime.jsx)(image_default(), {
-              src: nextjs,
-              placeholder: "blur",
-            }),
-          ],
-        });
-      }
-      var __N_SSP = true;
-      /* harmony default export */ const pages_image = ImagePage;
-
-      /***/
-    },
-
-    /***/ 7896: /***/ (
-      __unused_webpack_module,
-      exports,
-      __webpack_require__
-    ) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      0 && 0;
-      function _export(target, all) {
-        for (var name in all)
-          Object.defineProperty(target, name, {
-            enumerable: true,
-            get: all[name],
-          });
-      }
-      _export(exports, {
-        default: function () {
-          return _default;
-        },
-        getImageProps: function () {
-          return getImageProps;
-        },
-      });
-      const _interop_require_default = __webpack_require__(1532);
-      const _getimgprops = __webpack_require__(3556);
-      const _imagecomponent = __webpack_require__(2728);
-      const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(3744)
-      );
-      function getImageProps(imgProps) {
-        const { props } = (0, _getimgprops.getImgProps)(imgProps, {
-          defaultLoader: _imageloader.default,
-          // This is replaced by webpack define plugin
-          imgConf: {
-            deviceSizes: [640, 750, 828, 1080, 1200, 1920, 2048, 3840],
-            imageSizes: [32, 48, 64, 96, 128, 256, 384],
-            qualities: [75],
-            path: "/_next/image",
-            loader: "default",
-            dangerouslyAllowSVG: false,
-            unoptimized: false,
-          },
-        });
-        // Normally we don't care about undefined props because we pass to JSX,
-        // but this exported function could be used by the end user for anything
-        // so we delete undefined props to clean it up a little.
-        for (const [key, value] of Object.entries(props)) {
-          if (value === undefined) {
-            delete props[key];
-          }
-        }
-        return {
-          props,
-        };
-      }
-      const _default = _imagecomponent.Image; //# sourceMappingURL=image-external.js.map
-
-      /***/
-    },
-
-    /***/ 8494: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "findClosestQuality", {
-        enumerable: true,
-        get: function () {
-          return findClosestQuality;
-        },
-      });
-      function findClosestQuality(quality, config) {
-        const q = quality || 75;
-        if (!config?.qualities?.length) {
-          return q;
-        }
-        return config.qualities.reduce(
-          (prev, cur) => (Math.abs(cur - q) < Math.abs(prev - q) ? cur : prev),
-          0
-        );
-      } //# sourceMappingURL=find-closest-quality.js.map
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(797)
+      __webpack_exec__(4483)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,338 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 69: /***/ (module, exports, __webpack_require__) => {
+    /***/ 1511: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useMergedRef", {
+        enumerable: true,
+        get: function () {
+          return useMergedRef;
+        },
+      });
+      const _react = __webpack_require__(2223);
+      function useMergedRef(refA, refB) {
+        const cleanupA = (0, _react.useRef)(null);
+        const cleanupB = (0, _react.useRef)(null);
+        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
+        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
+        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
+        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
+        // (because it hasn't been updated for React 19)
+        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
+        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
+        return (0, _react.useCallback)(
+          (current) => {
+            if (current === null) {
+              const cleanupFnA = cleanupA.current;
+              if (cleanupFnA) {
+                cleanupA.current = null;
+                cleanupFnA();
+              }
+              const cleanupFnB = cleanupB.current;
+              if (cleanupFnB) {
+                cleanupB.current = null;
+                cleanupFnB();
+              }
+            } else {
+              if (refA) {
+                cleanupA.current = applyRef(refA, current);
+              }
+              if (refB) {
+                cleanupB.current = applyRef(refB, current);
+              }
+            }
+          },
+          [refA, refB]
+        );
+      }
+      function applyRef(refA, current) {
+        if (typeof refA === "function") {
+          const cleanup = refA(current);
+          if (typeof cleanup === "function") {
+            return cleanup;
+          } else {
+            return () => refA(null);
+          }
+        } else {
+          refA.current = current;
+          return () => {
+            refA.current = null;
+          };
+        }
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-merged-ref.js.map
+
+      /***/
+    },
+
+    /***/ 2025: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(4591);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 3267: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "getDomainLocale", {
+        enumerable: true,
+        get: function () {
+          return getDomainLocale;
+        },
+      });
+      const _normalizetrailingslash = __webpack_require__(2371);
+      const basePath =
+        /* unused pure expression or super */ null && (false || "");
+      function getDomainLocale(path, locale, locales, domainLocales) {
+        if (false) {
+        } else {
+          return false;
+        }
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=get-domain-locale.js.map
+
+      /***/
+    },
+
+    /***/ 4591: /***/ (
+      __unused_webpack_module,
+      __webpack_exports__,
+      __webpack_require__
+    ) => {
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(1503);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(6929);
+      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_link__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      function aLink(props) {
+        return /*#__PURE__*/ (0,
+        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
+          children: [
+            /*#__PURE__*/ (0,
+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
+              children: "A Link page!",
+            }),
+            /*#__PURE__*/ (0,
+            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+              next_link__WEBPACK_IMPORTED_MODULE_1___default(),
+              {
+                href: "/",
+                children: "Go to /",
+              }
+            ),
+          ],
+        });
+      }
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
+
+      /***/
+    },
+
+    /***/ 5305: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useIntersection", {
+        enumerable: true,
+        get: function () {
+          return useIntersection;
+        },
+      });
+      const _react = __webpack_require__(2223);
+      const _requestidlecallback = __webpack_require__(901);
+      const hasIntersectionObserver =
+        typeof IntersectionObserver === "function";
+      const observers = new Map();
+      const idList = [];
+      function createObserver(options) {
+        const id = {
+          root: options.root || null,
+          margin: options.rootMargin || "",
+        };
+        const existing = idList.find(
+          (obj) => obj.root === id.root && obj.margin === id.margin
+        );
+        let instance;
+        if (existing) {
+          instance = observers.get(existing);
+          if (instance) {
+            return instance;
+          }
+        }
+        const elements = new Map();
+        const observer = new IntersectionObserver((entries) => {
+          entries.forEach((entry) => {
+            const callback = elements.get(entry.target);
+            const isVisible =
+              entry.isIntersecting || entry.intersectionRatio > 0;
+            if (callback && isVisible) {
+              callback(isVisible);
+            }
+          });
+        }, options);
+        instance = {
+          id,
+          observer,
+          elements,
+        };
+        idList.push(id);
+        observers.set(id, instance);
+        return instance;
+      }
+      function observe(element, callback, options) {
+        const { id, observer, elements } = createObserver(options);
+        elements.set(element, callback);
+        observer.observe(element);
+        return function unobserve() {
+          elements.delete(element);
+          observer.unobserve(element);
+          // Destroy observer when there's nothing left to watch:
+          if (elements.size === 0) {
+            observer.disconnect();
+            observers.delete(id);
+            const index = idList.findIndex(
+              (obj) => obj.root === id.root && obj.margin === id.margin
+            );
+            if (index > -1) {
+              idList.splice(index, 1);
+            }
+          }
+        };
+      }
+      function useIntersection({ rootRef, rootMargin, disabled }) {
+        const isDisabled = disabled || !hasIntersectionObserver;
+        const [visible, setVisible] = (0, _react.useState)(false);
+        const elementRef = (0, _react.useRef)(null);
+        const setElement = (0, _react.useCallback)((element) => {
+          elementRef.current = element;
+        }, []);
+        (0, _react.useEffect)(() => {
+          if (hasIntersectionObserver) {
+            if (isDisabled || visible) return;
+            const element = elementRef.current;
+            if (element && element.tagName) {
+              const unobserve = observe(
+                element,
+                (isVisible) => isVisible && setVisible(isVisible),
+                {
+                  root: rootRef?.current,
+                  rootMargin,
+                }
+              );
+              return unobserve;
+            }
+          } else {
+            if (!visible) {
+              const idleCallback = (0,
+              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
+              return () =>
+                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
+            }
+          }
+          // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
+        const resetVisible = (0, _react.useCallback)(() => {
+          setVisible(false);
+        }, []);
+        return [setElement, visible, resetVisible];
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-intersection.js.map
+
+      /***/
+    },
+
+    /***/ 6929: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(8885);
+
+      /***/
+    },
+
+    /***/ 8101: /***/ (__unused_webpack_module, exports) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "errorOnce", {
+        enumerable: true,
+        get: function () {
+          return errorOnce;
+        },
+      });
+      let errorOnce = (_) => {};
+      if (false) {
+      } //# sourceMappingURL=error-once.js.map
+
+      /***/
+    },
+
+    /***/ 8885: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -28,17 +359,17 @@
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(2223)
       );
-      const _resolvehref = __webpack_require__(2275);
-      const _islocalurl = __webpack_require__(3179);
-      const _formaturl = __webpack_require__(5486);
-      const _utils = __webpack_require__(3708);
-      const _addlocale = __webpack_require__(8225);
-      const _routercontextsharedruntime = __webpack_require__(6046);
-      const _useintersection = __webpack_require__(2678);
-      const _getdomainlocale = __webpack_require__(4499);
-      const _addbasepath = __webpack_require__(7434);
-      const _usemergedref = __webpack_require__(2263);
-      const _erroronce = __webpack_require__(2197);
+      const _resolvehref = __webpack_require__(7379);
+      const _islocalurl = __webpack_require__(4843);
+      const _formaturl = __webpack_require__(9374);
+      const _utils = __webpack_require__(3116);
+      const _addlocale = __webpack_require__(8065);
+      const _routercontextsharedruntime = __webpack_require__(5470);
+      const _useintersection = __webpack_require__(5305);
+      const _getdomainlocale = __webpack_require__(3267);
+      const _addbasepath = __webpack_require__(1450);
+      const _usemergedref = __webpack_require__(1511);
+      const _erroronce = __webpack_require__(8101);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -416,344 +747,13 @@
 
       /***/
     },
-
-    /***/ 2197: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
-        },
-      });
-      let errorOnce = (_) => {};
-      if (false) {
-      } //# sourceMappingURL=error-once.js.map
-
-      /***/
-    },
-
-    /***/ 2263: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "useMergedRef", {
-        enumerable: true,
-        get: function () {
-          return useMergedRef;
-        },
-      });
-      const _react = __webpack_require__(2223);
-      function useMergedRef(refA, refB) {
-        const cleanupA = (0, _react.useRef)(null);
-        const cleanupB = (0, _react.useRef)(null);
-        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
-        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
-        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
-        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
-        // (because it hasn't been updated for React 19)
-        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
-        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
-        return (0, _react.useCallback)(
-          (current) => {
-            if (current === null) {
-              const cleanupFnA = cleanupA.current;
-              if (cleanupFnA) {
-                cleanupA.current = null;
-                cleanupFnA();
-              }
-              const cleanupFnB = cleanupB.current;
-              if (cleanupFnB) {
-                cleanupB.current = null;
-                cleanupFnB();
-              }
-            } else {
-              if (refA) {
-                cleanupA.current = applyRef(refA, current);
-              }
-              if (refB) {
-                cleanupB.current = applyRef(refB, current);
-              }
-            }
-          },
-          [refA, refB]
-        );
-      }
-      function applyRef(refA, current) {
-        if (typeof refA === "function") {
-          const cleanup = refA(current);
-          if (typeof cleanup === "function") {
-            return cleanup;
-          } else {
-            return () => refA(null);
-          }
-        } else {
-          refA.current = current;
-          return () => {
-            refA.current = null;
-          };
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-merged-ref.js.map
-
-      /***/
-    },
-
-    /***/ 2369: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
-      __webpack_require__
-    ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(1503);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(6691);
-      /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_link__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      function aLink(props) {
-        return /*#__PURE__*/ (0,
-        react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)("div", {
-          children: [
-            /*#__PURE__*/ (0,
-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("h3", {
-              children: "A Link page!",
-            }),
-            /*#__PURE__*/ (0,
-            react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-              next_link__WEBPACK_IMPORTED_MODULE_1___default(),
-              {
-                href: "/",
-                children: "Go to /",
-              }
-            ),
-          ],
-        });
-      }
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = aLink;
-
-      /***/
-    },
-
-    /***/ 2678: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "useIntersection", {
-        enumerable: true,
-        get: function () {
-          return useIntersection;
-        },
-      });
-      const _react = __webpack_require__(2223);
-      const _requestidlecallback = __webpack_require__(4213);
-      const hasIntersectionObserver =
-        typeof IntersectionObserver === "function";
-      const observers = new Map();
-      const idList = [];
-      function createObserver(options) {
-        const id = {
-          root: options.root || null,
-          margin: options.rootMargin || "",
-        };
-        const existing = idList.find(
-          (obj) => obj.root === id.root && obj.margin === id.margin
-        );
-        let instance;
-        if (existing) {
-          instance = observers.get(existing);
-          if (instance) {
-            return instance;
-          }
-        }
-        const elements = new Map();
-        const observer = new IntersectionObserver((entries) => {
-          entries.forEach((entry) => {
-            const callback = elements.get(entry.target);
-            const isVisible =
-              entry.isIntersecting || entry.intersectionRatio > 0;
-            if (callback && isVisible) {
-              callback(isVisible);
-            }
-          });
-        }, options);
-        instance = {
-          id,
-          observer,
-          elements,
-        };
-        idList.push(id);
-        observers.set(id, instance);
-        return instance;
-      }
-      function observe(element, callback, options) {
-        const { id, observer, elements } = createObserver(options);
-        elements.set(element, callback);
-        observer.observe(element);
-        return function unobserve() {
-          elements.delete(element);
-          observer.unobserve(element);
-          // Destroy observer when there's nothing left to watch:
-          if (elements.size === 0) {
-            observer.disconnect();
-            observers.delete(id);
-            const index = idList.findIndex(
-              (obj) => obj.root === id.root && obj.margin === id.margin
-            );
-            if (index > -1) {
-              idList.splice(index, 1);
-            }
-          }
-        };
-      }
-      function useIntersection({ rootRef, rootMargin, disabled }) {
-        const isDisabled = disabled || !hasIntersectionObserver;
-        const [visible, setVisible] = (0, _react.useState)(false);
-        const elementRef = (0, _react.useRef)(null);
-        const setElement = (0, _react.useCallback)((element) => {
-          elementRef.current = element;
-        }, []);
-        (0, _react.useEffect)(() => {
-          if (hasIntersectionObserver) {
-            if (isDisabled || visible) return;
-            const element = elementRef.current;
-            if (element && element.tagName) {
-              const unobserve = observe(
-                element,
-                (isVisible) => isVisible && setVisible(isVisible),
-                {
-                  root: rootRef?.current,
-                  rootMargin,
-                }
-              );
-              return unobserve;
-            }
-          } else {
-            if (!visible) {
-              const idleCallback = (0,
-              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
-              return () =>
-                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
-            }
-          }
-          // eslint-disable-next-line react-hooks/exhaustive-deps
-        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
-        const resetVisible = (0, _react.useCallback)(() => {
-          setVisible(false);
-        }, []);
-        return [setElement, visible, resetVisible];
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-intersection.js.map
-
-      /***/
-    },
-
-    /***/ 4499: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "getDomainLocale", {
-        enumerable: true,
-        get: function () {
-          return getDomainLocale;
-        },
-      });
-      const _normalizetrailingslash = __webpack_require__(1379);
-      const basePath =
-        /* unused pure expression or super */ null && (false || "");
-      function getDomainLocale(path, locale, locales, domainLocales) {
-        if (false) {
-        } else {
-          return false;
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=get-domain-locale.js.map
-
-      /***/
-    },
-
-    /***/ 6691: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(69);
-
-      /***/
-    },
-
-    /***/ 6771: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(2369);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6771)
+      __webpack_exec__(2025)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,7 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 97: /***/ (
+    /***/ 417: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/routerDirect",
+        function () {
+          return __webpack_require__(5491);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 1840: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(3252);
+
+      /***/
+    },
+
+    /***/ 5491: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -16,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1503);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7798);
+        __webpack_require__(1840);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -35,40 +62,13 @@
 
       /***/
     },
-
-    /***/ 4283: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/routerDirect",
-        function () {
-          return __webpack_require__(97);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 7798: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9300);
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4283)
+      __webpack_exec__(417)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 5964: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(2010);
-
-      /***/
-    },
-
-    /***/ 7758: /***/ (
+    /***/ 1312: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1503);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(5964);
+        __webpack_require__(2398);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -59,7 +49,17 @@
       /***/
     },
 
-    /***/ 8803: /***/ (
+    /***/ 2398: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(8954);
+
+      /***/
+    },
+
+    /***/ 4305: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -67,7 +67,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/script",
         function () {
-          return __webpack_require__(7758);
+          return __webpack_require__(1312);
         },
       ]);
       if (false) {
@@ -81,7 +81,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(8803)
+      __webpack_exec__(4305)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 184: /***/ (
+    /***/ 358: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -16,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(1503);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7798);
+        __webpack_require__(1840);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -35,7 +35,17 @@
       /***/
     },
 
-    /***/ 3163: /***/ (
+    /***/ 1840: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(3252);
+
+      /***/
+    },
+
+    /***/ 4041: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -43,7 +53,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/withRouter",
         function () {
-          return __webpack_require__(184);
+          return __webpack_require__(358);
         },
       ]);
       if (false) {
@@ -51,23 +61,13 @@
 
       /***/
     },
-
-    /***/ 7798: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9300);
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3163)
+      __webpack_exec__(4041)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 436-HASH.js

Diff too large to display

Diff for 9760-HASH.js
failed to diff
Diff for main-HASH.js

Diff too large to display

Diff for main-app-HASH.js
@@ -1,64 +1,64 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4977],
   {
-    /***/ 2658: /***/ (
+    /***/ 2788: /***/ () => {
+      /* (ignored) */
+      /***/
+    },
+
+    /***/ 7686: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7126, 23)
+        __webpack_require__.t.bind(__webpack_require__, 844, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4031, 23)
+        __webpack_require__.t.bind(__webpack_require__, 4365, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1117, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3903, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1522, 23)
+        __webpack_require__.t.bind(__webpack_require__, 3100, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1798, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7364, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 8366, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5632, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6571, 23)
+        __webpack_require__.t.bind(__webpack_require__, 8889, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 596, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9958, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1321, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7839, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 724, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1270, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6999, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1885, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 854)
+        __webpack_require__.bind(__webpack_require__, 4088)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7752, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9622, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1201, 23)
+        __webpack_require__.t.bind(__webpack_require__, 995, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7823, 23)
+        __webpack_require__.t.bind(__webpack_require__, 8577, 23)
       );
 
       /***/
     },
-
-    /***/ 7854: /***/ () => {
-      /* (ignored) */
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
@@ -66,8 +66,8 @@
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(
       0,
-      [9137, 9760],
-      () => (__webpack_exec__(4730), __webpack_exec__(2658))
+      [2494, 4936],
+      () => (__webpack_exec__(204), __webpack_exec__(7686))
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for app-page-exp..ntime.dev.js
failed to diff
Diff for app-page-exp..time.prod.js

Diff too large to display

Diff for app-page-tur..ntime.dev.js
failed to diff
Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page-tur..ntime.dev.js
failed to diff
Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js
failed to diff
Diff for app-page.runtime.prod.js

Diff too large to display

Diff for app-route-ex..ntime.dev.js

Diff too large to display

Diff for app-route-tu..ntime.dev.js

Diff too large to display

Diff for app-route-tu..ntime.dev.js

Diff too large to display

Diff for app-route.runtime.dev.js

Diff too large to display

Commit: a67fe1d

@lubieowoce lubieowoce force-pushed the lubieowoce/discriminated-dynamic-errors-debug branch 2 times, most recently from 90f229d to 2295be6 Compare November 7, 2025 17:04
@lubieowoce lubieowoce force-pushed the lubieowoce/discriminated-dynamic-errors-debug branch from 2295be6 to 15602df Compare November 7, 2025 17:21
@lubieowoce lubieowoce force-pushed the lubieowoce/discriminated-dynamic-errors-debug branch from 15602df to 21051bd Compare November 7, 2025 18:12
@lubieowoce lubieowoce force-pushed the lubieowoce/discriminated-dynamic-errors-debug branch from 21051bd to 7bcb33c Compare November 7, 2025 18:41
@lubieowoce lubieowoce changed the base branch from canary to lubieowoce/discriminated-dynamic-errors-2 November 7, 2025 18:42
@lubieowoce lubieowoce force-pushed the lubieowoce/discriminated-dynamic-errors-debug branch from 7bcb33c to a67fe1d Compare November 7, 2025 19:17
@unstubbable unstubbable force-pushed the lubieowoce/discriminated-dynamic-errors-debug branch from 53c8fac to a67fe1d Compare November 8, 2025 22:35
@lubieowoce lubieowoce force-pushed the lubieowoce/discriminated-dynamic-errors-debug branch from 3b147e1 to db5272a Compare November 11, 2025 14:40
@lubieowoce lubieowoce force-pushed the lubieowoce/discriminated-dynamic-errors-debug branch from db5272a to 454dbe5 Compare November 11, 2025 14:44
@lubieowoce lubieowoce force-pushed the lubieowoce/discriminated-dynamic-errors-2 branch 7 times, most recently from 7b29f2c to 6460215 Compare November 20, 2025 14:12
Base automatically changed from lubieowoce/discriminated-dynamic-errors-2 to canary November 20, 2025 16:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

created-by: Next.js team PRs by the Next.js team. Documentation Related to Next.js' official documentation. tests type: next

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants