Skip to content

Add export fallbacks for cache components routes#92555

Draft
feedthejim wants to merge 1 commit intocanaryfrom
feedthejim/export-dynamic-fallback
Draft

Add export fallbacks for cache components routes#92555
feedthejim wants to merge 1 commit intocanaryfrom
feedthejim/export-dynamic-fallback

Conversation

@feedthejim
Copy link
Copy Markdown
Contributor

Summary

This adds dynamic param fallback support for App Router output: 'export' routes when cacheComponents is enabled.

  • reuse the existing fallback-shell / param-omission render path during export builds
  • emit per-route __fallback artifacts plus a global /_fallback.html entry for static hosts
  • teach the client router to discover and load fallback payloads for unenumerated params
  • auto-enable the required router internals for this export mode (optimisticRouting and varyParams)
  • document the new behavior and add focused unit + e2e coverage

Testing

  • pnpm --filter=next build
  • pnpm testonly packages/next/src/lib/output-export-dynamic-fallback.test.ts packages/next/src/client/output-export-fallback.test.ts packages/next/src/client/flight-data-helpers.test.ts

Notes

The new export browser e2e coverage is included in this PR, but I could not fully execute it locally because this checkout has a mismatched native @next/swc setup and fails in the fixture build with bindings.lockfileTryAcquireSync is not a function.

@nextjs-bot nextjs-bot added created-by: Next.js team PRs by the Next.js team. Documentation Related to Next.js' official documentation. tests type: next labels Apr 9, 2026
@nextjs-bot
Copy link
Copy Markdown
Collaborator

nextjs-bot commented Apr 9, 2026

Failing test suites

Commit: 3be5080 | About building and testing Next.js

pnpm test-start test/e2e/app-dir-export/test/dynamic-fallback-known-params-cache-components.test.ts (job)

  • app dir - with output export - cacheComponents fallback with known params > emits both prerendered known params and fallback artifacts (DD)
  • app dir - with output export - cacheComponents fallback with known params > serves both prerendered and fallback params (DD)
Expand output

● app dir - with output export - cacheComponents fallback with known params › emits both prerendered known params and fallback artifacts

expect(received).toBe(expected) // Object.is equality

Expected: true
Received: false

  66 |         const outDir = join(next.testDir, 'out')
  67 |
> 68 |         expect(await fs.pathExists(join(outDir, '_fallback.html'))).toBe(true)
     |                                                                     ^
  69 |         expect(
  70 |           await fs.pathExists(
  71 |             join(outDir, 'another', '__fallback', 'index.txt')

  at Object.toBe (e2e/app-dir-export/test/dynamic-fallback-known-params-cache-components.test.ts:68:69)

● app dir - with output export - cacheComponents fallback with known params › serves both prerendered and fallback params

ENOENT: no such file or directory, open '/tmp/next-install-e4284397b1af70e9a47a571448b871f069602dd2d70e323634714a2df86f7ed7/out/_fallback.html'

● app dir - with output export - cacheComponents fallback with known params › serves both prerendered and fallback params

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

  50 |       }
  51 |
> 52 |       const result = Reflect.apply(target, thisArg, args)
     |                              ^
  53 |       return typeof result === 'function' ? wrapJestTestFn(result) : result
  54 |     },
  55 |     get(target, prop, receiver) {

  at Object.apply (lib/e2e-utils/index.ts:52:30)
  at it (e2e/app-dir-export/test/dynamic-fallback-known-params-cache-components.test.ts:85:7)
  at Object.describeProduction (e2e/app-dir-export/test/dynamic-fallback-known-params-cache-components.test.ts:19:3)

● Test suite failed to run

next instance not destroyed before exiting, make sure to call .destroy() after the tests after finished

  209 |     if (nextInstance) {
  210 |       await nextInstance.destroy()
> 211 |       throw new Error(
      |             ^
  212 |         `next instance not destroyed before exiting, make sure to call .destroy() after the tests after finished`
  213 |       )
  214 |     }

  at Object.<anonymous> (lib/e2e-utils/index.ts:211:13)

pnpm test-start test/e2e/app-dir-export/test/dynamic-fallback-cache-components.test.ts (job)

  • app dir - with output export - cacheComponents fallback dynamic params > writes fallback artifacts instead of per-param prerenders (DD)
  • app dir - with output export - cacheComponents fallback dynamic params > renders an unenumerated slug on hard load and client navigation (DD)
  • app dir - with output export - cacheComponents fallback dynamic params > renders the app not-found page when no fallback route matches (DD)
Expand output

● app dir - with output export - cacheComponents fallback dynamic params › writes fallback artifacts instead of per-param prerenders

expect(received).toBe(expected) // Object.is equality

Expected: true
Received: false

  77 |         const outDir = join(next.testDir, 'out')
  78 |
> 79 |         expect(await fs.pathExists(join(outDir, '_fallback.html'))).toBe(true)
     |                                                                     ^
  80 |         expect(
  81 |           await fs.readFile(join(outDir, '_fallback.html'), 'utf8')
  82 |         ).toContain('__NEXT_EXPORT_FALLBACK=1')

  at Object.toBe (e2e/app-dir-export/test/dynamic-fallback-cache-components.test.ts:79:69)

● app dir - with output export - cacheComponents fallback dynamic params › renders an unenumerated slug on hard load and client navigation

ENOENT: no such file or directory, open '/tmp/next-install-6a26f090b9dd0527d01cc2bfe00aca31aa7707ba66b5db8769f782d44d373e3a/out/_fallback.html'

● app dir - with output export - cacheComponents fallback dynamic params › renders an unenumerated slug on hard load and client navigation

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

  50 |       }
  51 |
> 52 |       const result = Reflect.apply(target, thisArg, args)
     |                              ^
  53 |       return typeof result === 'function' ? wrapJestTestFn(result) : result
  54 |     },
  55 |     get(target, prop, receiver) {

  at Object.apply (lib/e2e-utils/index.ts:52:30)
  at it (e2e/app-dir-export/test/dynamic-fallback-cache-components.test.ts:98:7)
  at Object.describeProduction (e2e/app-dir-export/test/dynamic-fallback-cache-components.test.ts:19:3)

● app dir - with output export - cacheComponents fallback dynamic params › renders the app not-found page when no fallback route matches

ENOENT: no such file or directory, open '/tmp/next-install-6a26f090b9dd0527d01cc2bfe00aca31aa7707ba66b5db8769f782d44d373e3a/out/_fallback.html'

● app dir - with output export - cacheComponents fallback dynamic params › renders the app not-found page when no fallback route matches

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

  50 |       }
  51 |
> 52 |       const result = Reflect.apply(target, thisArg, args)
     |                              ^
  53 |       return typeof result === 'function' ? wrapJestTestFn(result) : result
  54 |     },
  55 |     get(target, prop, receiver) {

  at Object.apply (lib/e2e-utils/index.ts:52:30)
  at it (e2e/app-dir-export/test/dynamic-fallback-cache-components.test.ts:120:7)
  at Object.describeProduction (e2e/app-dir-export/test/dynamic-fallback-cache-components.test.ts:19:3)

● Test suite failed to run

next instance not destroyed before exiting, make sure to call .destroy() after the tests after finished

  209 |     if (nextInstance) {
  210 |       await nextInstance.destroy()
> 211 |       throw new Error(
      |             ^
  212 |         `next instance not destroyed before exiting, make sure to call .destroy() after the tests after finished`
  213 |       )
  214 |     }

  at Object.<anonymous> (lib/e2e-utils/index.ts:211:13)

pnpm test-start test/e2e/app-dir/optimistic-routing/optimistic-routing.test.ts (job)

  • segment cache - root params segment prefetch > does not encode root param placeholders in segment-prefetch responses (DD)
Expand output

● segment cache - root params segment prefetch › does not encode root param placeholders in segment-prefetch responses

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start test/e2e/app-dir/app-root-params-getters/generate-static-params.test.ts (job)

  • use-cache-with-server-function-props > should be able to use inline server actions as props (DD)
  • use-cache-with-server-function-props > should be able to use nested cache functions as props (DD)
Expand output

● use-cache-with-server-function-props › should be able to use inline server actions as props

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache-with-server-function-props › should be able to use nested cache functions as props

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start test/e2e/app-dir/partial-fallback-root-blocking/partial-fallback-root-blocking.test.ts (job)

  • ppr-use-server-inserted-html > should mark the route as ppr rendered (DD)
  • ppr-use-server-inserted-html > should not log insertion in build (DD)
  • ppr-use-server-inserted-html > should insert the html insertion into html body (DD)
Expand output

● ppr-use-server-inserted-html › should mark the route as ppr rendered

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● ppr-use-server-inserted-html › should not log insertion in build

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● ppr-use-server-inserted-html › should insert the html insertion into html body

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start test/e2e/app-dir/app-basepath/index.test.ts (job)

  • use-cache > should cache results (DD)
  • use-cache > should cache results custom handler (DD)
  • use-cache > should cache complex args (DD)
  • use-cache > should dedupe with react cache inside "use cache" (DD)
  • use-cache > should return the same object reference for multiple invocations (DD)
  • use-cache > should dedupe cached data in the RSC payload (DD)
  • use-cache > should cache results in route handlers (DD)
  • use-cache > should revalidate before redirecting in a route handler (DD)
  • use-cache > should cache results for cached functions imported from client components (DD)
  • use-cache > should cache results for cached functions passed to client components (DD)
  • use-cache > should update after revalidateTag correctly (DD)
  • use-cache > should revalidate caches after redirect (DD)
  • use-cache > should revalidate caches nested in unstable_cache (DD)
  • use-cache > should revalidate caches during on-demand revalidation (DD)
  • use-cache > should not use stale caches in server actions that have revalidated (DD)
  • use-cache > should prerender fully cacheable pages as static HTML (DD)
  • use-cache > should match the expected revalidate and expire configs on the prerender manifest (DD)
  • use-cache > should match the expected stale config in the page header (DD)
  • use-cache > should send an SWR cache-control header based on the revalidate and expire values (DD)
  • use-cache > should omit dynamic caches from prerendered shells (DD)
  • use-cache > should not have hydration errors when resuming a partial shell with dynamic caches (DD)
  • use-cache > should propagate unstable_cache tags correctly (DD)
  • use-cache > can reference server actions in "use cache" functions (DD)
  • use-cache > should be able to revalidate a page using revalidateTag (DD)
  • use-cache > should use revalidate config in fetch (DD)
  • use-cache > should cache fetch without no-store (DD)
  • use-cache > should override fetch with no-store in use cache properly (DD)
  • use-cache > should store a fetch response without no-store in the incremental cache handler during build (DD)
  • use-cache > should not store a fetch response with no-store in the incremental cache handler during build (DD)
  • use-cache > should NOT update immediately after revalidateTag with profile (stale-while-revalidate) (DD)
  • use-cache > should override fetch with cookies/auth in use cache properly (DD)
  • use-cache > works with useActionState if previousState parameter is not used in "use cache" function (DD)
  • use-cache > works with useActionState if previousState parameter is not used in "use cache" function (separate export) (DD)
  • use-cache > works with "use cache" in method props (DD)
  • use-cache > works with "use cache" in static class methods (DD)
  • use-cache > renders the not-found page when notFound() is used (DD)
  • use-cache > should exclude inner caches and omitted caches from the resume data cache (RDC) (DD)
  • use-cache > shares caches between the page/layout and generateMetadata (DD)
  • use-cache > can resume a cached generateMetadata function (DD)
  • use-cache > can resume a cached generateMetadata function that does not read params (DD)
  • use-cache > can serialize parent metadata as generateMetadata argument (DD)
  • use-cache > makes a cached generateMetadata function that implicitly depends on params dynamic during prerendering (DD)
  • use-cache > makes a cached generateMetadata function that reads params dynamic during prerendering (DD)
  • use-cache > can resume a cached generateViewport function (DD)
  • use-cache > can resume a cached generateViewport function that does not read params (DD)
  • use-cache > makes a cached generateViewport function that reads params dynamic during prerendering (DD)
  • use-cache > caches a higher-order component in a "use cache" module (DD)
  • use-cache > ignores unused arguments in a "use cache" function (DD)
  • use-cache > should allow nested short-lived caches after connection() (DD)
  • use-cache > should not read nor write cached data when draft mode is enabled > js enabled, with cookies (DD)
  • use-cache > should not read nor write cached data when draft mode is enabled > js disabled, with cookies (DD)
  • use-cache > should not read nor write cached data when draft mode is enabled > js enabled, without cookies (DD)
  • use-cache > should not read nor write cached data when draft mode is enabled > js disabled, without cookies (DD)
  • use-cache > usage in node_modules > should cache results when using a directive without a handler (DD)
  • use-cache > usage in node_modules > should cache results when using a directive with a handler (DD)
Expand output

● use-cache › should cache results

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should cache results custom handler

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should cache complex args

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should dedupe with react cache inside "use cache"

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should return the same object reference for multiple invocations

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should dedupe cached data in the RSC payload

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should cache results in route handlers

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should revalidate before redirecting in a route handler

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should cache results for cached functions imported from client components

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should cache results for cached functions passed to client components

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should update after revalidateTag correctly

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should revalidate caches after redirect

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should revalidate caches nested in unstable_cache

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should revalidate caches during on-demand revalidation

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should not use stale caches in server actions that have revalidated

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should prerender fully cacheable pages as static HTML

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should match the expected revalidate and expire configs on the prerender manifest

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should match the expected stale config in the page header

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should send an SWR cache-control header based on the revalidate and expire values

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should omit dynamic caches from prerendered shells

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should not have hydration errors when resuming a partial shell with dynamic caches

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should propagate unstable_cache tags correctly

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › can reference server actions in "use cache" functions

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should be able to revalidate a page using revalidateTag

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should use revalidate config in fetch

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should cache fetch without no-store

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should override fetch with no-store in use cache properly

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should store a fetch response without no-store in the incremental cache handler during build

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should not store a fetch response with no-store in the incremental cache handler during build

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should NOT update immediately after revalidateTag with profile (stale-while-revalidate)

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should override fetch with cookies/auth in use cache properly

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › works with useActionState if previousState parameter is not used in "use cache" function

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › works with useActionState if previousState parameter is not used in "use cache" function (separate export)

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › works with "use cache" in method props

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › works with "use cache" in static class methods

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › renders the not-found page when notFound() is used

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

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

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

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

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

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

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

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

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should exclude inner caches and omitted caches from the resume data cache (RDC)

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › usage in node_modules › should cache results when using a directive without a handler

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › usage in node_modules › should cache results when using a directive with a handler

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › shares caches between the page/layout and generateMetadata

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › can resume a cached generateMetadata function

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › can resume a cached generateMetadata function that does not read params

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

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

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › makes a cached generateMetadata function that implicitly depends on params dynamic during prerendering

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › makes a cached generateMetadata function that reads params dynamic during prerendering

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › can resume a cached generateViewport function

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › can resume a cached generateViewport function that does not read params

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › makes a cached generateViewport function that reads params dynamic during prerendering

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › caches a higher-order component in a "use cache" module

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › ignores unused arguments in a "use cache" function

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache › should allow nested short-lived caches after connection()

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start test/e2e/app-dir/parallel-route-navigations/parallel-route-navigations.test.ts (job)

  • segment cache - root params segment prefetch > does not encode root param placeholders in segment-prefetch responses (DD)
Expand output

● segment cache - root params segment prefetch › does not encode root param placeholders in segment-prefetch responses

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start test/e2e/app-dir/conflicting-search-and-route-params/conflicting-search-and-route-params.test.ts (job)

  • use-cache-search-params > should fail the build with errors (DD)
  • use-cache-search-params > should resume a cached page that does not access search params without hydration errors (DD)
Expand output

● use-cache-search-params › should fail the build with errors

expect(received).not.toInclude(expected)

Expected string to not include:
  "Error occurred prerendering page \"/search-params-unused\""
Received:
  "▲ Next.js 16.2.1-canary.29 (webpack)
- Cache Components enabled
- Experiments (use with caution):
  ✓ appNewScrollHandler (enabled by `__NEXT_EXPERIMENTAL_APP_NEW_SCROLL_HANDLER`)
  ✓ cachedNavigations (enabled by `__NEXT_EXPERIMENTAL_CACHED_NAVIGATIONS`)
  ⨯ prerenderEarlyExit
  ✓ useCache·
  Creating an optimized production build ...
✓ Compiled successfully in 1192ms
  Running TypeScript ...
  Finished TypeScript in 1241ms ...
  Collecting page data using 8 workers ...
  Generating static pages using 8 workers (0/7) ...
⨯ Error: Route /search-params-used-generate-metadata used `searchParams` inside \"use cache\". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await `searchParams` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache

  at g (../.next/server/app/search-params-used-generate-metadata/page.js:1:2616)
  at g (../.next/server/chunks/498.js:1:12617)
  at Object.then (../.next/server/chunks/967.js:20:4169) {
    digest: '2137134095@E842'
  }
  ⨯ Error: Route /search-params-used used `searchParams` inside \"use cache\". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await `searchParams` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache
  at h (../.next/server/app/search-params-used/page.js:2:11105)
  at h (../.next/server/chunks/498.js:1:12617)
  at Object.then (../.next/server/chunks/967.js:20:4169) {
    digest: '91142685@E842'
  }
  ⨯ Error: Route /search-params-used-generate-viewport used `searchParams` inside \"use cache\". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await `searchParams` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache
  at g (../.next/server/app/search-params-used-generate-viewport/page.js:2:12124)
  at g (../.next/server/chunks/498.js:1:12617)
  at Object.then (../.next/server/chunks/967.js:20:4169) {
    digest: '3201360226@E842'
  }
  Error: Route /search-params-caught used `searchParams` inside \"use cache\". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await `searchParams` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache
  at h (../.next/server/app/search-params-caught/page.js:1:1564)
  at h (../.next/server/chunks/498.js:1:12617)
  at Object.then (../.next/server/chunks/967.js:20:4169)
  To get a more detailed stack trace and pinpoint the issue, try one of the following:
    - Start the app in development mode by running `next dev`, then open \"/search-params-caught\" in your browser to investigate the error.
    - Rerun the production build with `next build --debug-prerender` to generate better stack traces.
  Error occurred prerendering page \"/search-params-caught\". Read more: https://nextjs.org/docs/messages/prerender-error
  Error: Route /search-params-used-generate-metadata used `searchParams` inside \"use cache\". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await `searchParams` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache
  at g (../.next/server/app/search-params-used-generate-metadata/page.js:1:2616)
  at g (../.next/server/chunks/498.js:1:12617)
  at Object.then (../.next/server/chunks/967.js:20:4169) {
    digest: '2137134095@E842'
  }
  To get a more detailed stack trace and pinpoint the issue, try one of the following:
    - Start the app in development mode by running `next dev`, then open \"/search-params-used-generate-metadata\" in your browser to investigate the error.
    - Rerun the production build with `next build --debug-prerender` to generate better stack traces.
  Error occurred prerendering page \"/search-params-used-generate-metadata\". Read more: https://nextjs.org/docs/messages/prerender-error
  Error: Route /search-params-used used `searchParams` inside \"use cache\". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await `searchParams` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache
  at h (../.next/server/app/search-params-used/page.js:2:11105)
  at h (../.next/server/chunks/498.js:1:12617)
  at Object.then (../.next/server/chunks/967.js:20:4169) {
    digest: '91142685@E842'
  }
  To get a more detailed stack trace and pinpoint the issue, try one of the following:
    - Start the app in development mode by running `next dev`, then open \"/search-params-used\" in your browser to investigate the error.
    - Rerun the production build with `next build --debug-prerender` to generate better stack traces.
  Error occurred prerendering page \"/search-params-used\". Read more: https://nextjs.org/docs/messages/prerender-error
  Error: Route /search-params-used-generate-viewport used `searchParams` inside \"use cache\". Accessing dynamic request data inside a cache scope is not supported. If you need some search params inside a cached function await `searchParams` outside of the cached function and pass only the required search params as arguments to the cached function. See more info here: https://nextjs.org/docs/messages/next-request-in-use-cache
  at g (../.next/server/app/search-params-used-generate-viewport/page.js:2:12124)
  at g (../.next/server/chunks/498.js:1:12617)
  at Object.then (../.next/server/chunks/967.js:20:4169) {
    digest: '3201360226@E842'
  }
  To get a more detailed stack trace and pinpoint the issue, try one of the following:
    - Start the app in development mode by running `next dev`, then open \"/search-params-used-generate-viewport\" in your browser to investigate the error.
    - Rerun the production build with `next build --debug-prerender` to generate better stack traces.
  Error occurred prerendering page \"/search-params-used-generate-viewport\". Read more: https://nextjs.org/docs/messages/prerender-error
  Error occurred prerendering page \"/_not-found\". Read more: https://nextjs.org/docs/messages/prerender-error
  Error: Invariant: page postponed without PPR being enabled
      at ignore-listed frames
  Error occurred prerendering page \"/search-params-unused\". Read more: https://nextjs.org/docs/messages/prerender-error
  Error: Invariant: page postponed without PPR being enabled
      at ignore-listed frames
    Generating static pages using 8 workers (1/7)···
  > Export encountered errors on 6 paths:
  	/_not-found/page: /_not-found
  	/search-params-caught/page: /search-params-caught
  	/search-params-unused/page: /search-params-unused
  	/search-params-used-generate-metadata/page: /search-params-used-generate-metadata
  	/search-params-used-generate-viewport/page: /search-params-used-generate-viewport
  	/search-params-used/page: /search-params-used
  "
  at Object.toInclude (e2e/app-dir/use-cache-search-params/use-cache-search-params.test.ts:201:29)

● use-cache-search-params › should resume a cached page that does not access search params without hydration errors

page.goto: net::ERR_CONNECTION_RESET at http://localhost:36273/search-params-unused
Call log:
  - navigating to "http://localhost:36273/search-params-unused", waiting until "load"

  369 |     await opts?.beforePageLoad?.(page)
  370 |
> 371 |     await page.goto(url, { waitUntil: opts?.waitUntil ?? 'load' })
      |                ^
  372 |   }
  373 |
  374 |   back(options?: Parameters<Page['goBack']>[0]) {

  at Playwright.goto (lib/browsers/playwright.ts:371:16)
  at webdriver (lib/next-webdriver.ts:160:3)
  at Object.<anonymous> (e2e/app-dir/use-cache-search-params/use-cache-search-params.test.ts:213:21)

pnpm test-start test/e2e/app-dir/default-error-page-ui/default-error-page-ui.test.ts (job)

  • use-cache-with-server-function-props > should be able to use inline server actions as props (DD)
  • use-cache-with-server-function-props > should be able to use nested cache functions as props (DD)
Expand output

● use-cache-with-server-function-props › should be able to use inline server actions as props

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● use-cache-with-server-function-props › should be able to use nested cache functions as props

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start test/e2e/app-dir/segment-cache/search-params/segment-cache-search-params-shared-loading-state.test.ts (job)

  • instant-validation-build > basic dynamic hole detection > valid - suspense around runtime > should succeed build when cookies are inside Suspense (DD)
  • instant-validation-build > caches > valid - static prefetch - awaiting a cache in the static stage does not require a suspense boundary (DD)
  • instant-validation-build > caches > valid - runtime prefetch - awaiting a cache in the runtime stage does not require a suspense boundary (DD)
  • instant-validation-build > caches > valid - runtime prefetch - awaiting a mix of caches in the static and runtime stages does not require a suspense boundary (DD)
  • instant-validation-build > caches > valid - runtime prefetch - awaiting a private cache in the runtime stage does not require a suspense boundary (DD)
  • instant-validation-build > cookies > cookies are correctly read from samples (DD)
  • instant-validation-build > cookies > valid - cookies passed to a cache (DD)
  • instant-validation-build > generateStaticParams > valid - page with generateStaticParams and samples only runs validation once (DD)
  • instant-validation-build > headers > headers are correctly read from samples (DD)
  • instant-validation-build > headers > valid - header value passed to a cache (DD)
  • instant-validation-build > headers > valid - header value passed to a client component (DD)
  • instant-validation-build > params > valid - params are correctly read from samples (DD)
  • instant-validation-build > params > useParams() receives params from samples (DD)
  • instant-validation-build > params > valid - awaited params passed to a cache (DD)
  • instant-validation-build > params > valid - awaited params passed to a client component (DD)
  • instant-validation-build > pathname > valid - usePathname() on a route without params (DD)
  • instant-validation-build > pathname > valid - usePathname() on a route with params (all provided in samples) (DD)
  • instant-validation-build > pathname > valid - usePathname() on a route inside a route group does not include the group segment (DD)
  • instant-validation-build > pathname > valid - usePathname() on a catch-all route (DD)
  • instant-validation-build > pathname > valid - usePathname() on an optional catch-all route (DD)
  • instant-validation-build > root params > valid - static - root params are correctly read from samples (DD)
  • instant-validation-build > root params > valid - runtime - root params are correctly read from samples (DD)
  • instant-validation-build > root params > error - reading a root param not present in samples (DD)
  • instant-validation-build > root params > error - reading a root param not present in samples and catching the error (DD)
  • instant-validation-build > samples precedence > page samples override layout samples (DD)
  • instant-validation-build > samples precedence > page inherits samples from layout when it has none (DD)
  • instant-validation-build > searchParams > search params are correctly read from samples (DD)
  • instant-validation-build > searchParams > useSearchParams() receives search params from samples (DD)
  • instant-validation-build > searchParams > valid - awaited search params passed to a cache (DD)
  • instant-validation-build > searchParams > valid - awaited search params passed to a client component (DD)
  • instant-validation-build > server errors > valid - ignores server errors that do not surface in SSR (DD)
Expand output

● instant-validation-build › basic dynamic hole detection › valid - suspense around runtime › should succeed build when cookies are inside Suspense

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:55:38)

● instant-validation-build › server errors › valid - ignores server errors that do not surface in SSR

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:84:36)

● instant-validation-build › searchParams › search params are correctly read from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:214:36)

● instant-validation-build › searchParams › useSearchParams() receives search params from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:247:36)

● instant-validation-build › searchParams › valid - awaited search params passed to a cache

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:333:36)

● instant-validation-build › searchParams › valid - awaited search params passed to a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:341:36)

● instant-validation-build › headers › headers are correctly read from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:352:36)

● instant-validation-build › headers › valid - header value passed to a cache

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:436:36)

● instant-validation-build › headers › valid - header value passed to a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:444:36)

● instant-validation-build › cookies › cookies are correctly read from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:455:36)

● instant-validation-build › cookies › valid - cookies passed to a cache

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:540:36)

● instant-validation-build › params › valid - params are correctly read from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:551:36)

● instant-validation-build › params › useParams() receives params from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:611:36)

● instant-validation-build › params › valid - awaited params passed to a cache

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:670:36)

● instant-validation-build › params › valid - awaited params passed to a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:678:36)

● instant-validation-build › pathname › valid - usePathname() on a route without params

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:688:36)

● instant-validation-build › pathname › valid - usePathname() on a route with params (all provided in samples)

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:696:36)

● instant-validation-build › pathname › valid - usePathname() on a route inside a route group does not include the group segment

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:704:36)

● instant-validation-build › pathname › valid - usePathname() on a catch-all route

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:712:36)

● instant-validation-build › pathname › valid - usePathname() on an optional catch-all route

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:720:36)

● instant-validation-build › root params › valid - static - root params are correctly read from samples

Expected exactly 2 validation markers, found 0.
CLI output:
▲ Next.js 16.2.1-canary.29 (Turbopack)
- Cache Components enabled
- Experiments (use with caution):
  ✓ strictRouteTypes (enabled by `__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES`)

  Creating an optimized production build ...
  Collecting page data using 4 workers ...
  Generating static pages using 4 workers (0/4) ...
Error occurred prerendering page "/root-params/en/valid-root-param-in-samples/static". Read more: https://nextjs.org/docs/messages/prerender-error
Error: Invariant: page postponed without PPR being enabled
    at ignore-listed frames
Export encountered an error on /root-params/[lang]/valid-root-param-in-samples/static/page: /root-params/en/valid-root-param-in-samples/static, exiting the build.
⨯ Next.js build worker exited with code: 1 and signal: null

  47 |   // Expect exactly two markers: one validation_start and one validation_end
  48 |   if (markers.length !== 2) {
> 49 |     throw new Error(
     |           ^
  50 |       `Expected exactly 2 validation markers, found ${markers.length}.\n` +
  51 |         `CLI output:\n${cliOutput}`
  52 |     )

  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:49:11)
  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:145:10)
  at e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:758:38

● instant-validation-build › root params › valid - runtime - root params are correctly read from samples

Expected exactly 2 validation markers, found 0.
CLI output:
▲ Next.js 16.2.1-canary.29 (Turbopack)
- Cache Components enabled
- Experiments (use with caution):
  ✓ strictRouteTypes (enabled by `__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES`)

  Creating an optimized production build ...
  Collecting page data using 4 workers ...
  Generating static pages using 4 workers (0/4) ...
Error occurred prerendering page "/root-params/en/valid-root-param-in-samples/runtime". Read more: https://nextjs.org/docs/messages/prerender-error
Error: Invariant: page postponed without PPR being enabled
    at ignore-listed frames
Export encountered an error on /root-params/[lang]/valid-root-param-in-samples/runtime/page: /root-params/en/valid-root-param-in-samples/runtime, exiting the build.
⨯ Next.js build worker exited with code: 1 and signal: null

  47 |   // Expect exactly two markers: one validation_start and one validation_end
  48 |   if (markers.length !== 2) {
> 49 |     throw new Error(
     |           ^
  50 |       `Expected exactly 2 validation markers, found ${markers.length}.\n` +
  51 |         `CLI output:\n${cliOutput}`
  52 |     )

  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:49:11)
  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:145:10)
  at e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:758:38

● instant-validation-build › root params › error - reading a root param not present in samples

Expected exactly 2 validation markers, found 0.
CLI output:
▲ Next.js 16.2.1-canary.29 (Turbopack)
- Cache Components enabled
- Experiments (use with caution):
  ✓ strictRouteTypes (enabled by `__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES`)

  Creating an optimized production build ...
  Collecting page data using 4 workers ...
  Generating static pages using 4 workers (0/4) ...
Error occurred prerendering page "/root-params/en/invalid-root-param-not-provided". Read more: https://nextjs.org/docs/messages/prerender-error
Error: Invariant: page postponed without PPR being enabled
    at ignore-listed frames
Export encountered an error on /root-params/[lang]/invalid-root-param-not-provided/page: /root-params/en/invalid-root-param-not-provided, exiting the build.
⨯ Next.js build worker exited with code: 1 and signal: null

  47 |   // Expect exactly two markers: one validation_start and one validation_end
  48 |   if (markers.length !== 2) {
> 49 |     throw new Error(
     |           ^
  50 |       `Expected exactly 2 validation markers, found ${markers.length}.\n` +
  51 |         `CLI output:\n${cliOutput}`
  52 |     )

  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:49:11)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:768:41)

● instant-validation-build › root params › error - reading a root param not present in samples and catching the error

Expected exactly 2 validation markers, found 0.
CLI output:
▲ Next.js 16.2.1-canary.29 (Turbopack)
- Cache Components enabled
- Experiments (use with caution):
  ✓ strictRouteTypes (enabled by `__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES`)

  Creating an optimized production build ...
  Collecting page data using 4 workers ...
  Generating static pages using 4 workers (0/4) ...
Error occurred prerendering page "/root-params/en/invalid-root-param-not-provided-caught". Read more: https://nextjs.org/docs/messages/prerender-error
Error: Invariant: page postponed without PPR being enabled
    at ignore-listed frames
Export encountered an error on /root-params/[lang]/invalid-root-param-not-provided-caught/page: /root-params/en/invalid-root-param-not-provided-caught, exiting the build.
⨯ Next.js build worker exited with code: 1 and signal: null

  47 |   // Expect exactly two markers: one validation_start and one validation_end
  48 |   if (markers.length !== 2) {
> 49 |     throw new Error(
     |           ^
  50 |       `Expected exactly 2 validation markers, found ${markers.length}.\n` +
  51 |         `CLI output:\n${cliOutput}`
  52 |     )

  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:49:11)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:794:41)

● instant-validation-build › samples precedence › page samples override layout samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:822:36)

● instant-validation-build › samples precedence › page inherits samples from layout when it has none

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:830:36)

● instant-validation-build › generateStaticParams › valid - page with generateStaticParams and samples only runs validation once

expect(received).toEqual(expected) // deep equality

- Expected  - 8
+ Received  + 1

- Array [
-   ObjectContaining {
-     "type": "validation_start",
-   },
-   ObjectContaining {
-     "type": "validation_end",
-   },
- ]
+ Array []

  839 |       // If validation ran once, we expect one "validation_start"/"validation_end" pair
  840 |       const validationMessages = parseValidationMessages(result.cliOutput)
> 841 |       expect(validationMessages).toEqual([
      |                                  ^
  842 |         expect.objectContaining({ type: 'validation_start' }),
  843 |         expect.objectContaining({ type: 'validation_end' }),
  844 |       ])

  at Object.toEqual (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:841:34)

● instant-validation-build › caches › valid - static prefetch - awaiting a cache in the static stage does not require a suspense boundary

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:856:36)

● instant-validation-build › caches › valid - runtime prefetch - awaiting a cache in the runtime stage does not require a suspense boundary

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:863:36)

● instant-validation-build › caches › valid - runtime prefetch - awaiting a mix of caches in the static and runtime stages does not require a suspense boundary

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:870:36)

● instant-validation-build › caches › valid - runtime prefetch - awaiting a private cache in the runtime stage does not require a suspense boundary

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:877:36)

pnpm test-start test/e2e/app-dir/concurrent-navigations/server-patch-history.test.ts (job)

  • app dir - with output export - cacheComponents fallback with known params > emits both prerendered known params and fallback artifacts (DD)
  • app dir - with output export - cacheComponents fallback with known params > serves both prerendered and fallback params (DD)
Expand output

● app dir - with output export - cacheComponents fallback with known params › emits both prerendered known params and fallback artifacts

expect(received).toBe(expected) // Object.is equality

Expected: true
Received: false

  66 |         const outDir = join(next.testDir, 'out')
  67 |
> 68 |         expect(await fs.pathExists(join(outDir, '_fallback.html'))).toBe(true)
     |                                                                     ^
  69 |         expect(
  70 |           await fs.pathExists(
  71 |             join(outDir, 'another', '__fallback', 'index.txt')

  at Object.toBe (e2e/app-dir-export/test/dynamic-fallback-known-params-cache-components.test.ts:68:69)

● app dir - with output export - cacheComponents fallback with known params › serves both prerendered and fallback params

ENOENT: no such file or directory, open '/tmp/next-install-81de60659ce0dc51d551b7fc904ff56fd309e6c78a5ae7ff963add738124c5ce/out/_fallback.html'

● app dir - with output export - cacheComponents fallback with known params › serves both prerendered and fallback params

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

  50 |       }
  51 |
> 52 |       const result = Reflect.apply(target, thisArg, args)
     |                              ^
  53 |       return typeof result === 'function' ? wrapJestTestFn(result) : result
  54 |     },
  55 |     get(target, prop, receiver) {

  at Object.apply (lib/e2e-utils/index.ts:52:30)
  at it (e2e/app-dir-export/test/dynamic-fallback-known-params-cache-components.test.ts:85:7)
  at Object.describeProduction (e2e/app-dir-export/test/dynamic-fallback-known-params-cache-components.test.ts:19:3)

● Test suite failed to run

next instance not destroyed before exiting, make sure to call .destroy() after the tests after finished

  209 |     if (nextInstance) {
  210 |       await nextInstance.destroy()
> 211 |       throw new Error(
      |             ^
  212 |         `next instance not destroyed before exiting, make sure to call .destroy() after the tests after finished`
  213 |       )
  214 |     }

  at Object.<anonymous> (lib/e2e-utils/index.ts:211:13)

pnpm test-start test/e2e/app-dir/autoscroll-with-css-modules/index.test.ts (job)

  • app dir - with output export - cacheComponents fallback with known params > emits both prerendered known params and fallback artifacts (DD)
  • app dir - with output export - cacheComponents fallback with known params > serves both prerendered and fallback params (DD)
Expand output

● app dir - with output export - cacheComponents fallback with known params › emits both prerendered known params and fallback artifacts

expect(received).toBe(expected) // Object.is equality

Expected: true
Received: false

  66 |         const outDir = join(next.testDir, 'out')
  67 |
> 68 |         expect(await fs.pathExists(join(outDir, '_fallback.html'))).toBe(true)
     |                                                                     ^
  69 |         expect(
  70 |           await fs.pathExists(
  71 |             join(outDir, 'another', '__fallback', 'index.txt')

  at Object.toBe (e2e/app-dir-export/test/dynamic-fallback-known-params-cache-components.test.ts:68:69)

● app dir - with output export - cacheComponents fallback with known params › serves both prerendered and fallback params

ENOENT: no such file or directory, open '/tmp/next-install-471a9da948a689b64ac26f262d3bac9d5cb19a375fdd510932d5c8fca0b6aa6a/out/_fallback.html'

● app dir - with output export - cacheComponents fallback with known params › serves both prerendered and fallback params

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

  50 |       }
  51 |
> 52 |       const result = Reflect.apply(target, thisArg, args)
     |                              ^
  53 |       return typeof result === 'function' ? wrapJestTestFn(result) : result
  54 |     },
  55 |     get(target, prop, receiver) {

  at Object.apply (lib/e2e-utils/index.ts:52:30)
  at it (e2e/app-dir-export/test/dynamic-fallback-known-params-cache-components.test.ts:85:7)
  at Object.describeProduction (e2e/app-dir-export/test/dynamic-fallback-known-params-cache-components.test.ts:19:3)

● Test suite failed to run

next instance not destroyed before exiting, make sure to call .destroy() after the tests after finished

  209 |     if (nextInstance) {
  210 |       await nextInstance.destroy()
> 211 |       throw new Error(
      |             ^
  212 |         `next instance not destroyed before exiting, make sure to call .destroy() after the tests after finished`
  213 |       )
  214 |     }

  at Object.<anonymous> (lib/e2e-utils/index.ts:211:13)

pnpm test-start test/e2e/app-dir/cache-components-bot-ua/cache-components-bot-ua.test.ts (job)

  • Node Extensions > Random > Cache Components > should not error when accessing middlware that use Math.random() (DD)
  • Node Extensions > Random > Cache Components > should not error when accessing pages that use Math.random() in App Router (DD)
  • Node Extensions > Random > Cache Components > should not error when accessing routes that use Math.random() in App Router (DD)
  • Node Extensions > Random > Cache Components > should not error when accessing pages that use Math.random() in Pages Router (DD)
  • Node Extensions > Random > Cache Components > should not error when accessing routes that use Math.random() in Pages Router (DD)
Expand output

● Node Extensions › Random › Cache Components › should not error when accessing middlware that use Math.random()

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● Node Extensions › Random › Cache Components › should not error when accessing pages that use Math.random() in App Router

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● Node Extensions › Random › Cache Components › should not error when accessing routes that use Math.random() in App Router

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● Node Extensions › Random › Cache Components › should not error when accessing pages that use Math.random() in Pages Router

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● Node Extensions › Random › Cache Components › should not error when accessing routes that use Math.random() in Pages Router

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start-turbo test/e2e/app-dir/cache-components/cache-components.cookies.test.ts (turbopack) (job)

  • app-dir - server source maps > logged errors have a sourcemapped stack with a codeframe (DD)
  • app-dir - server source maps > logged errors have a sourcemapped cause (DD)
  • app-dir - server source maps > logged errors collapse deeply nested causes at depth 2 (DD)
  • app-dir - server source maps > logged errors include [errors] for AggregateError (DD)
  • app-dir - server source maps > logged errors in client components during ssr have a sourcemapped stack with a codeframe (DD)
  • app-dir - server source maps > stack frames are ignore-listed in ssr (DD)
  • app-dir - server source maps > stack frames are ignore-listed in rsc (DD)
  • app-dir - server source maps > thrown SSR errors (DD)
  • app-dir - server source maps > logged errors preserve their name (DD)
  • app-dir - server source maps > handles invalid sourcemaps gracefully (DD)
  • app-dir - server source maps > sourcemaps errors during module evaluation (DD)
  • app-dir - server source maps > ignore-lists anonymous rsc stack frame sandwiches (DD)
  • app-dir - server source maps > ignore-lists anonymous ssr stack frame sandwiches (DD)
Expand output

● app-dir - server source maps › logged errors have a sourcemapped stack with a codeframe

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › logged errors have a sourcemapped cause

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › logged errors collapse deeply nested causes at depth 2

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › logged errors include [errors] for AggregateError

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › logged errors in client components during ssr have a sourcemapped stack with a codeframe

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › stack frames are ignore-listed in ssr

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › stack frames are ignore-listed in rsc

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › thrown SSR errors

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › logged errors preserve their name

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › handles invalid sourcemaps gracefully

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › sourcemaps errors during module evaluation

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › ignore-lists anonymous rsc stack frame sandwiches

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● app-dir - server source maps › ignore-lists anonymous ssr stack frame sandwiches

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start test/e2e/app-dir/instant-validation-static-shells/instant-validation-static-shells.test.ts (job)

  • instant validation > build > valid - static prefetch - suspense around runtime and dynamic (DD)
  • instant validation > build > valid - runtime prefetch - suspense only around dynamic (DD)
  • instant validation > build > valid - runtime prefetch - does not require Suspense around params (DD)
  • instant validation > build > valid - runtime prefetch - does not require Suspense around search params (DD)
  • instant validation > build > valid - target segment not visible in all navigations (DD)
  • instant validation > build > valid - runtime prefetch - sync IO in a static parent layout is allowed (DD)
  • instant validation > build > valid - runtime prefetch - sync IO in generateMetadata on a static page is allowed (DD)
  • instant validation > build > valid - runtime prefetch - sync IO in layout generateMetadata when page is NOT prefetchable (DD)
  • instant validation > build > valid - no suspense needed around dynamic in page if loading.js is present (DD)
  • instant validation > build > blocking > valid - blocking layout with unstable_instant = false is allowed to block (DD)
  • instant validation > build > blocking > valid - blocking page inside a static layout is allowed if the layout has suspense (DD)
  • instant validation > build > blocking > valid - blocking page inside a runtime layout is allowed if the layout has suspense (DD)
  • instant validation > build > client components > valid - parent suspends on client data but does not block children (DD)
  • instant validation > build > client components > valid - parent uses sync IO in a client component (DD)
  • instant validation > build > client components > valid - parent uses dynamic usePathname() in a client component (DD)
  • instant validation > build > client components > valid - parent uses useSearchParams() in a client component (DD)
  • instant validation > build > client errors > valid - client error from sibling of children slot with suspense (DD)
  • instant validation > build > disabling validation > in a layout (DD)
  • instant validation > build > disabling validation > in a page (DD)
  • instant validation > build > disabling validation > in a page with a parent that has a config (DD)
  • instant validation > build > disabling validation > disabling build validation (DD)
  • instant validation > build > head > valid - runtime prefetch - dynamic generateMetadata does not block navigation (DD)
  • instant validation > build > head > valid - static prefetch - runtime generateMetadata does not block navigation (DD)
  • instant validation > build > head > valid - runtime prefetch - runtime generateViewport does not block navigation (DD)
  • instant validation > build > head > valid - blocking layout - dynamic viewport is allowed to block (DD)
Expand output

● instant validation › build › valid - static prefetch - suspense around runtime and dynamic

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:146:38)

● instant validation › build › valid - runtime prefetch - suspense only around dynamic

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:160:38)

● instant validation › build › valid - runtime prefetch - does not require Suspense around params

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:532:38)

● instant validation › build › valid - runtime prefetch - does not require Suspense around search params

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:608:38)

● instant validation › build › valid - target segment not visible in all navigations

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:629:38)

● instant validation › build › valid - runtime prefetch - sync IO in a static parent layout is allowed

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:945:38)

● instant validation › build › valid - runtime prefetch - sync IO in generateMetadata on a static page is allowed

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1016:38)

● instant validation › build › valid - runtime prefetch - sync IO in layout generateMetadata when page is NOT prefetchable

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1099:38)

● instant validation › build › valid - no suspense needed around dynamic in page if loading.js is present

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1113:38)

● instant validation › build › blocking › valid - blocking layout with unstable_instant = false is allowed to block

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1259:40)

● instant validation › build › blocking › valid - blocking page inside a static layout is allowed if the layout has suspense

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1335:40)

● instant validation › build › blocking › valid - blocking page inside a runtime layout is allowed if the layout has suspense

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1349:40)

● instant validation › build › client components › valid - parent suspends on client data but does not block children

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1744:40)

● instant validation › build › client components › valid - parent uses sync IO in a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1758:40)

● instant validation › build › client components › valid - parent uses dynamic usePathname() in a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1772:40)

● instant validation › build › client components › valid - parent uses useSearchParams() in a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1786:40)

● instant validation › build › client errors › valid - client error from sibling of children slot with suspense

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:2208:40)

● instant validation › build › head › valid - runtime prefetch - dynamic generateMetadata does not block navigation

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:2226:40)

● instant validation › build › head › valid - static prefetch - runtime generateMetadata does not block navigation

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:2242:40)

● instant validation › build › head › valid - runtime prefetch - runtime generateViewport does not block navigation

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:2380:40)

● instant validation › build › head › valid - blocking layout - dynamic viewport is allowed to block

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  154 |   expect(result.cliOutput).not.toContain('Build-time instant validation failed')
  155 |   expect(parseValidationMessages(result.cliOutput)).toHaveLength(0)
> 156 |   expect(result.exitCode).toBe(0)
      |                           ^
  157 | }
  158 |

  at toBe (lib/e2e-utils/instant-validation.ts:156:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:2400:39)

● instant validation › build › disabling validation › in a layout

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  154 |   expect(result.cliOutput).not.toContain('Build-time instant validation failed')
  155 |   expect(parseValidationMessages(result.cliOutput)).toHaveLength(0)
> 156 |   expect(result.exitCode).toBe(0)
      |                           ^
  157 | }
  158 |

  at toBe (lib/e2e-utils/instant-validation.ts:156:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:3359:39)

● instant validation › build › disabling validation › in a page

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  154 |   expect(result.cliOutput).not.toContain('Build-time instant validation failed')
  155 |   expect(parseValidationMessages(result.cliOutput)).toHaveLength(0)
> 156 |   expect(result.exitCode).toBe(0)
      |                           ^
  157 | }
  158 |

  at toBe (lib/e2e-utils/instant-validation.ts:156:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:3373:39)

● instant validation › build › disabling validation › in a page with a parent that has a config

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  154 |   expect(result.cliOutput).not.toContain('Build-time instant validation failed')
  155 |   expect(parseValidationMessages(result.cliOutput)).toHaveLength(0)
> 156 |   expect(result.exitCode).toBe(0)
      |                           ^
  157 | }
  158 |

  at toBe (lib/e2e-utils/instant-validation.ts:156:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:3387:39)

● instant validation › build › disabling validation › disabling build validation

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  154 |   expect(result.cliOutput).not.toContain('Build-time instant validation failed')
  155 |   expect(parseValidationMessages(result.cliOutput)).toHaveLength(0)
> 156 |   expect(result.exitCode).toBe(0)
      |                           ^
  157 | }
  158 |

  at toBe (lib/e2e-utils/instant-validation.ts:156:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:3461:39)

pnpm test-start test/e2e/app-dir/partial-fallback-shell-upgrade/partial-fallback-shell-upgrade.test.ts (job)

  • ppr-use-server-inserted-html > should mark the route as ppr rendered (DD)
  • ppr-use-server-inserted-html > should not log insertion in build (DD)
  • ppr-use-server-inserted-html > should insert the html insertion into html body (DD)
Expand output

● ppr-use-server-inserted-html › should mark the route as ppr rendered

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● ppr-use-server-inserted-html › should not log insertion in build

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● ppr-use-server-inserted-html › should insert the html insertion into html body

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start test/e2e/app-dir/instant-navigation-testing-api/instant-navigation-testing-api.test.ts (job)

  • unstable_io with cache components > should make content after unstable_io() dynamic during prerender (DD)
  • unstable_io with cache components > should resolve immediately inside a "use cache" scope (DD)
  • unstable_io with cache components > should work in pages router with getServerSideProps (CC) (DD)
  • unstable_io with cache components > should work in pages router with getStaticProps (CC) (DD)
  • unstable_io with cache components > should work in pages router with React.use() (CC) (DD)
Expand output

● unstable_io with cache components › should make content after unstable_io() dynamic during prerender

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● unstable_io with cache components › should resolve immediately inside a "use cache" scope

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● unstable_io with cache components › should work in pages router with getServerSideProps (CC)

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● unstable_io with cache components › should work in pages router with getStaticProps (CC)

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● unstable_io with cache components › should work in pages router with React.use() (CC)

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start test/e2e/app-dir/cache-components-allow-otel-spans/cache-components-allow-otel-spans.test.ts (job)

  • cache-components > should not prerender GET route handlers that use dynamic APIs (DD)
  • cache-components > should prerender GET route handlers that have entirely cached io (fetches) (DD)
  • cache-components > should not prerender GET route handlers that have some uncached io (fetches) (DD)
  • cache-components > should prerender GET route handlers that have entirely cached io (unstable_cache) (DD)
  • cache-components > should prerender GET route handlers that have entirely cached io ("use cache") (DD)
  • cache-components > should not prerender GET route handlers that have some uncached io (unstable_cache) (DD)
  • cache-components > should prerender GET route handlers that complete synchronously or in a microtask (DD)
  • cache-components > should not prerender GET route handlers that complete in a new Task (DD)
  • cache-components > should prerender GET route handlers when accessing params (DD)
Expand output

● cache-components › should not prerender GET route handlers that use dynamic APIs

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● cache-components › should prerender GET route handlers that have entirely cached io (fetches)

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● cache-components › should not prerender GET route handlers that have some uncached io (fetches)

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● cache-components › should prerender GET route handlers that have entirely cached io (unstable_cache)

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● cache-components › should prerender GET route handlers that have entirely cached io ("use cache")

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● cache-components › should not prerender GET route handlers that have some uncached io (unstable_cache)

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● cache-components › should prerender GET route handlers that complete synchronously or in a microtask

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● cache-components › should not prerender GET route handlers that complete in a new Task

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

● cache-components › should prerender GET route handlers when accessing params

next build failed with code/signal 1

   97 |             if (code || signal)
   98 |               reject(
>  99 |                 new Error(
      |                 ^
  100 |                   `next build failed with code/signal ${code || signal}`
  101 |                 )
  102 |               )

  at ChildProcess.<anonymous> (lib/next-modes/next-start.ts:99:17)

pnpm test-start-turbo test/e2e/app-dir/fallback-shells/fallback-shells.test.ts (turbopack) (job)

  • deterministic build - changing deployment id > build output API - cacheComponents adapter > should produce identical build outputs even when changing deployment id (DD)
  • deterministic build - changing deployment id > build output API - cacheComponents builder > should produce identical build outputs even when changing deployment id (DD)
Expand output

● deterministic build - changing deployment id › build output API - cacheComponents builder › should produce identical build outputs even when changing deployment id

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  123 |   // First build
  124 |   next.env['NEXT_DEPLOYMENT_ID'] = 'foo-dpl-id'
> 125 |   expect((await next.build()).exitCode).toBe(0)
      |                                         ^
  126 |   let run1 = await readFiles(next)
  127 |
  128 |   // Second build

  at toBe (production/deterministic-build/deployment-id.test.ts:125:41)
  at Object.<anonymous> (production/deterministic-build/deployment-id.test.ts:262:32)

● deterministic build - changing deployment id › build output API - cacheComponents adapter › should produce identical build outputs even when changing deployment id

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  123 |   // First build
  124 |   next.env['NEXT_DEPLOYMENT_ID'] = 'foo-dpl-id'
> 125 |   expect((await next.build()).exitCode).toBe(0)
      |                                         ^
  126 |   let run1 = await readFiles(next)
  127 |
  128 |   // Second build

  at toBe (production/deterministic-build/deployment-id.test.ts:125:41)
  at Object.<anonymous> (production/deterministic-build/deployment-id.test.ts:262:32)

pnpm test-start-turbo test/e2e/app-dir/cache-components/cache-components.server-action.test.ts (turbopack) (job)

  • instant-validation-build > basic dynamic hole detection > valid - suspense around runtime > should succeed build when cookies are inside Suspense (DD)
  • instant-validation-build > caches > valid - static prefetch - awaiting a cache in the static stage does not require a suspense boundary (DD)
  • instant-validation-build > caches > valid - runtime prefetch - awaiting a cache in the runtime stage does not require a suspense boundary (DD)
  • instant-validation-build > caches > valid - runtime prefetch - awaiting a mix of caches in the static and runtime stages does not require a suspense boundary (DD)
  • instant-validation-build > caches > valid - runtime prefetch - awaiting a private cache in the runtime stage does not require a suspense boundary (DD)
  • instant-validation-build > cookies > cookies are correctly read from samples (DD)
  • instant-validation-build > cookies > valid - cookies passed to a cache (DD)
  • instant-validation-build > generateStaticParams > valid - page with generateStaticParams and samples only runs validation once (DD)
  • instant-validation-build > headers > headers are correctly read from samples (DD)
  • instant-validation-build > headers > valid - header value passed to a cache (DD)
  • instant-validation-build > headers > valid - header value passed to a client component (DD)
  • instant-validation-build > params > valid - params are correctly read from samples (DD)
  • instant-validation-build > params > useParams() receives params from samples (DD)
  • instant-validation-build > params > valid - awaited params passed to a cache (DD)
  • instant-validation-build > params > valid - awaited params passed to a client component (DD)
  • instant-validation-build > pathname > valid - usePathname() on a route without params (DD)
  • instant-validation-build > pathname > valid - usePathname() on a route with params (all provided in samples) (DD)
  • instant-validation-build > pathname > valid - usePathname() on a route inside a route group does not include the group segment (DD)
  • instant-validation-build > pathname > valid - usePathname() on a catch-all route (DD)
  • instant-validation-build > pathname > valid - usePathname() on an optional catch-all route (DD)
  • instant-validation-build > root params > valid - static - root params are correctly read from samples (DD)
  • instant-validation-build > root params > valid - runtime - root params are correctly read from samples (DD)
  • instant-validation-build > root params > error - reading a root param not present in samples (DD)
  • instant-validation-build > root params > error - reading a root param not present in samples and catching the error (DD)
  • instant-validation-build > samples precedence > page samples override layout samples (DD)
  • instant-validation-build > samples precedence > page inherits samples from layout when it has none (DD)
  • instant-validation-build > searchParams > search params are correctly read from samples (DD)
  • instant-validation-build > searchParams > useSearchParams() receives search params from samples (DD)
  • instant-validation-build > searchParams > valid - awaited search params passed to a cache (DD)
  • instant-validation-build > searchParams > valid - awaited search params passed to a client component (DD)
  • instant-validation-build > server errors > valid - ignores server errors that do not surface in SSR (DD)
Expand output

● instant-validation-build › basic dynamic hole detection › valid - suspense around runtime › should succeed build when cookies are inside Suspense

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:55:38)

● instant-validation-build › server errors › valid - ignores server errors that do not surface in SSR

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:84:36)

● instant-validation-build › searchParams › search params are correctly read from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:214:36)

● instant-validation-build › searchParams › useSearchParams() receives search params from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:247:36)

● instant-validation-build › searchParams › valid - awaited search params passed to a cache

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:333:36)

● instant-validation-build › searchParams › valid - awaited search params passed to a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:341:36)

● instant-validation-build › headers › headers are correctly read from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:352:36)

● instant-validation-build › headers › valid - header value passed to a cache

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:436:36)

● instant-validation-build › headers › valid - header value passed to a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:444:36)

● instant-validation-build › cookies › cookies are correctly read from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:455:36)

● instant-validation-build › cookies › valid - cookies passed to a cache

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:540:36)

● instant-validation-build › params › valid - params are correctly read from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:551:36)

● instant-validation-build › params › useParams() receives params from samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:611:36)

● instant-validation-build › params › valid - awaited params passed to a cache

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:670:36)

● instant-validation-build › params › valid - awaited params passed to a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:678:36)

● instant-validation-build › pathname › valid - usePathname() on a route without params

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:688:36)

● instant-validation-build › pathname › valid - usePathname() on a route with params (all provided in samples)

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:696:36)

● instant-validation-build › pathname › valid - usePathname() on a route inside a route group does not include the group segment

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:704:36)

● instant-validation-build › pathname › valid - usePathname() on a catch-all route

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:712:36)

● instant-validation-build › pathname › valid - usePathname() on an optional catch-all route

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:720:36)

● instant-validation-build › root params › valid - static - root params are correctly read from samples

Expected exactly 2 validation markers, found 0.
CLI output:
▲ Next.js 16.2.1-canary.29 (Turbopack)
- Cache Components enabled
- Experiments (use with caution):
  ✓ strictRouteTypes (enabled by `__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES`)

  Creating an optimized production build ...
  Collecting page data using 4 workers ...
  Generating static pages using 4 workers (0/4) ...
Error occurred prerendering page "/root-params/en/valid-root-param-in-samples/static". Read more: https://nextjs.org/docs/messages/prerender-error
Error: Invariant: page postponed without PPR being enabled
    at ignore-listed frames
Export encountered an error on /root-params/[lang]/valid-root-param-in-samples/static/page: /root-params/en/valid-root-param-in-samples/static, exiting the build.
⨯ Next.js build worker exited with code: 1 and signal: null

  47 |   // Expect exactly two markers: one validation_start and one validation_end
  48 |   if (markers.length !== 2) {
> 49 |     throw new Error(
     |           ^
  50 |       `Expected exactly 2 validation markers, found ${markers.length}.\n` +
  51 |         `CLI output:\n${cliOutput}`
  52 |     )

  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:49:11)
  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:145:10)
  at e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:758:38

● instant-validation-build › root params › valid - runtime - root params are correctly read from samples

Expected exactly 2 validation markers, found 0.
CLI output:
▲ Next.js 16.2.1-canary.29 (Turbopack)
- Cache Components enabled
- Experiments (use with caution):
  ✓ strictRouteTypes (enabled by `__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES`)

  Creating an optimized production build ...
  Collecting page data using 4 workers ...
  Generating static pages using 4 workers (0/4) ...
Error occurred prerendering page "/root-params/en/valid-root-param-in-samples/runtime". Read more: https://nextjs.org/docs/messages/prerender-error
Error: Invariant: page postponed without PPR being enabled
    at ignore-listed frames
Export encountered an error on /root-params/[lang]/valid-root-param-in-samples/runtime/page: /root-params/en/valid-root-param-in-samples/runtime, exiting the build.
⨯ Next.js build worker exited with code: 1 and signal: null

  47 |   // Expect exactly two markers: one validation_start and one validation_end
  48 |   if (markers.length !== 2) {
> 49 |     throw new Error(
     |           ^
  50 |       `Expected exactly 2 validation markers, found ${markers.length}.\n` +
  51 |         `CLI output:\n${cliOutput}`
  52 |     )

  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:49:11)
  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:145:10)
  at e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:758:38

● instant-validation-build › root params › error - reading a root param not present in samples

Expected exactly 2 validation markers, found 0.
CLI output:
▲ Next.js 16.2.1-canary.29 (Turbopack)
- Cache Components enabled
- Experiments (use with caution):
  ✓ strictRouteTypes (enabled by `__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES`)

  Creating an optimized production build ...
  Collecting page data using 4 workers ...
  Generating static pages using 4 workers (0/4) ...
Error occurred prerendering page "/root-params/en/invalid-root-param-not-provided". Read more: https://nextjs.org/docs/messages/prerender-error
Error: Invariant: page postponed without PPR being enabled
    at ignore-listed frames
Export encountered an error on /root-params/[lang]/invalid-root-param-not-provided/page: /root-params/en/invalid-root-param-not-provided, exiting the build.
⨯ Next.js build worker exited with code: 1 and signal: null

  47 |   // Expect exactly two markers: one validation_start and one validation_end
  48 |   if (markers.length !== 2) {
> 49 |     throw new Error(
     |           ^
  50 |       `Expected exactly 2 validation markers, found ${markers.length}.\n` +
  51 |         `CLI output:\n${cliOutput}`
  52 |     )

  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:49:11)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:768:41)

● instant-validation-build › root params › error - reading a root param not present in samples and catching the error

Expected exactly 2 validation markers, found 0.
CLI output:
▲ Next.js 16.2.1-canary.29 (Turbopack)
- Cache Components enabled
- Experiments (use with caution):
  ✓ strictRouteTypes (enabled by `__NEXT_EXPERIMENTAL_STRICT_ROUTE_TYPES`)

  Creating an optimized production build ...
  Collecting page data using 4 workers ...
  Generating static pages using 4 workers (0/4) ...
Error occurred prerendering page "/root-params/en/invalid-root-param-not-provided-caught". Read more: https://nextjs.org/docs/messages/prerender-error
Error: Invariant: page postponed without PPR being enabled
    at ignore-listed frames
Export encountered an error on /root-params/[lang]/invalid-root-param-not-provided-caught/page: /root-params/en/invalid-root-param-not-provided-caught, exiting the build.
⨯ Next.js build worker exited with code: 1 and signal: null

  47 |   // Expect exactly two markers: one validation_start and one validation_end
  48 |   if (markers.length !== 2) {
> 49 |     throw new Error(
     |           ^
  50 |       `Expected exactly 2 validation markers, found ${markers.length}.\n` +
  51 |         `CLI output:\n${cliOutput}`
  52 |     )

  at extractBuildValidationError (lib/e2e-utils/instant-validation.ts:49:11)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:794:41)

● instant-validation-build › samples precedence › page samples override layout samples

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:822:36)

● instant-validation-build › samples precedence › page inherits samples from layout when it has none

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:830:36)

● instant-validation-build › generateStaticParams › valid - page with generateStaticParams and samples only runs validation once

expect(received).toEqual(expected) // deep equality

- Expected  - 8
+ Received  + 1

- Array [
-   ObjectContaining {
-     "type": "validation_start",
-   },
-   ObjectContaining {
-     "type": "validation_end",
-   },
- ]
+ Array []

  839 |       // If validation ran once, we expect one "validation_start"/"validation_end" pair
  840 |       const validationMessages = parseValidationMessages(result.cliOutput)
> 841 |       expect(validationMessages).toEqual([
      |                                  ^
  842 |         expect.objectContaining({ type: 'validation_start' }),
  843 |         expect.objectContaining({ type: 'validation_end' }),
  844 |       ])

  at Object.toEqual (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:841:34)

● instant-validation-build › caches › valid - static prefetch - awaiting a cache in the static stage does not require a suspense boundary

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:856:36)

● instant-validation-build › caches › valid - runtime prefetch - awaiting a cache in the runtime stage does not require a suspense boundary

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:863:36)

● instant-validation-build › caches › valid - runtime prefetch - awaiting a mix of caches in the static and runtime stages does not require a suspense boundary

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:870:36)

● instant-validation-build › caches › valid - runtime prefetch - awaiting a private cache in the runtime stage does not require a suspense boundary

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation-build/instant-validation-build.test.ts:877:36)

pnpm test-start test/e2e/app-dir/gesture-transitions/gesture-transitions.test.ts (job)

  • empty-shell-route-cache > should emit both routes as partially static build artifacts (DD)
  • empty-shell-route-cache > after next start > should not rewrite /with-suspense build artifacts on the first request (DD)
  • empty-shell-route-cache > after next start > should not rewrite /without-suspense build artifacts on the first request (DD)
Expand output

● empty-shell-route-cache › should emit both routes as partially static build artifacts

ENOENT: no such file or directory, open '/tmp/next-install-089aa38fc80fa820b16c90821bb1e58e055082b27ae5a44139f6df27b1764f20/.next/prerender-manifest.json'

● empty-shell-route-cache › after next start › should not rewrite /with-suspense build artifacts on the first request

ENOENT: no such file or directory, open '/tmp/next-install-089aa38fc80fa820b16c90821bb1e58e055082b27ae5a44139f6df27b1764f20/.next/server/app/with-suspense.meta'

● empty-shell-route-cache › after next start › should not rewrite /without-suspense build artifacts on the first request

ENOENT: no such file or directory, open '/tmp/next-install-089aa38fc80fa820b16c90821bb1e58e055082b27ae5a44139f6df27b1764f20/.next/server/app/without-suspense.meta'

pnpm test-start-turbo test/e2e/app-dir/concurrent-navigations/mismatching-prefetch.test.ts (turbopack) (job)

  • instant validation > build > valid - static prefetch - suspense around runtime and dynamic (DD)
  • instant validation > build > valid - runtime prefetch - suspense only around dynamic (DD)
  • instant validation > build > valid - runtime prefetch - does not require Suspense around params (DD)
  • instant validation > build > valid - runtime prefetch - does not require Suspense around search params (DD)
  • instant validation > build > valid - target segment not visible in all navigations (DD)
  • instant validation > build > valid - runtime prefetch - sync IO in a static parent layout is allowed (DD)
  • instant validation > build > valid - runtime prefetch - sync IO in generateMetadata on a static page is allowed (DD)
  • instant validation > build > valid - runtime prefetch - sync IO in layout generateMetadata when page is NOT prefetchable (DD)
  • instant validation > build > valid - no suspense needed around dynamic in page if loading.js is present (DD)
  • instant validation > build > blocking > valid - blocking layout with unstable_instant = false is allowed to block (DD)
  • instant validation > build > blocking > valid - blocking page inside a static layout is allowed if the layout has suspense (DD)
  • instant validation > build > blocking > valid - blocking page inside a runtime layout is allowed if the layout has suspense (DD)
  • instant validation > build > client components > valid - parent suspends on client data but does not block children (DD)
  • instant validation > build > client components > valid - parent uses sync IO in a client component (DD)
  • instant validation > build > client components > valid - parent uses dynamic usePathname() in a client component (DD)
  • instant validation > build > client components > valid - parent uses useSearchParams() in a client component (DD)
  • instant validation > build > client errors > valid - client error from sibling of children slot with suspense (DD)
  • instant validation > build > disabling validation > in a layout (DD)
  • instant validation > build > disabling validation > in a page (DD)
  • instant validation > build > disabling validation > in a page with a parent that has a config (DD)
  • instant validation > build > disabling validation > disabling build validation (DD)
  • instant validation > build > head > valid - runtime prefetch - dynamic generateMetadata does not block navigation (DD)
  • instant validation > build > head > valid - static prefetch - runtime generateMetadata does not block navigation (DD)
  • instant validation > build > head > valid - runtime prefetch - runtime generateViewport does not block navigation (DD)
  • instant validation > build > head > valid - blocking layout - dynamic viewport is allowed to block (DD)
Expand output

● instant validation › build › valid - static prefetch - suspense around runtime and dynamic

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:146:38)

● instant validation › build › valid - runtime prefetch - suspense only around dynamic

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:160:38)

● instant validation › build › valid - runtime prefetch - does not require Suspense around params

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:532:38)

● instant validation › build › valid - runtime prefetch - does not require Suspense around search params

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:608:38)

● instant validation › build › valid - target segment not visible in all navigations

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:629:38)

● instant validation › build › valid - runtime prefetch - sync IO in a static parent layout is allowed

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:945:38)

● instant validation › build › valid - runtime prefetch - sync IO in generateMetadata on a static page is allowed

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1016:38)

● instant validation › build › valid - runtime prefetch - sync IO in layout generateMetadata when page is NOT prefetchable

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1099:38)

● instant validation › build › valid - no suspense needed around dynamic in page if loading.js is present

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1113:38)

● instant validation › build › blocking › valid - blocking layout with unstable_instant = false is allowed to block

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1259:40)

● instant validation › build › blocking › valid - blocking page inside a static layout is allowed if the layout has suspense

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1335:40)

● instant validation › build › blocking › valid - blocking page inside a runtime layout is allowed if the layout has suspense

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1349:40)

● instant validation › build › client components › valid - parent suspends on client data but does not block children

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1744:40)

● instant validation › build › client components › valid - parent uses sync IO in a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1758:40)

● instant validation › build › client components › valid - parent uses dynamic usePathname() in a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1772:40)

● instant validation › build › client components › valid - parent uses useSearchParams() in a client component

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:1786:40)

● instant validation › build › client errors › valid - client error from sibling of children slot with suspense

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:2208:40)

● instant validation › build › head › valid - runtime prefetch - dynamic generateMetadata does not block navigation

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:2226:40)

● instant validation › build › head › valid - static prefetch - runtime generateMetadata does not block navigation

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:2242:40)

● instant validation › build › head › valid - runtime prefetch - runtime generateViewport does not block navigation

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  146 |     'Build-time instant validation failed'
  147 |   )
> 148 |   expect(result.exitCode).toBe(0)
      |                           ^
  149 | }
  150 |
  151 | export function expectBuildValidationSkipped(result: PrerenderResult) {

  at toBe (lib/e2e-utils/instant-validation.ts:148:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:2380:40)

● instant validation › build › head › valid - blocking layout - dynamic viewport is allowed to block

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  154 |   expect(result.cliOutput).not.toContain('Build-time instant validation failed')
  155 |   expect(parseValidationMessages(result.cliOutput)).toHaveLength(0)
> 156 |   expect(result.exitCode).toBe(0)
      |                           ^
  157 | }
  158 |

  at toBe (lib/e2e-utils/instant-validation.ts:156:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:2400:39)

● instant validation › build › disabling validation › in a layout

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  154 |   expect(result.cliOutput).not.toContain('Build-time instant validation failed')
  155 |   expect(parseValidationMessages(result.cliOutput)).toHaveLength(0)
> 156 |   expect(result.exitCode).toBe(0)
      |                           ^
  157 | }
  158 |

  at toBe (lib/e2e-utils/instant-validation.ts:156:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:3359:39)

● instant validation › build › disabling validation › in a page

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  154 |   expect(result.cliOutput).not.toContain('Build-time instant validation failed')
  155 |   expect(parseValidationMessages(result.cliOutput)).toHaveLength(0)
> 156 |   expect(result.exitCode).toBe(0)
      |                           ^
  157 | }
  158 |

  at toBe (lib/e2e-utils/instant-validation.ts:156:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:3373:39)

● instant validation › build › disabling validation › in a page with a parent that has a config

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  154 |   expect(result.cliOutput).not.toContain('Build-time instant validation failed')
  155 |   expect(parseValidationMessages(result.cliOutput)).toHaveLength(0)
> 156 |   expect(result.exitCode).toBe(0)
      |                           ^
  157 | }
  158 |

  at toBe (lib/e2e-utils/instant-validation.ts:156:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:3387:39)

● instant validation › build › disabling validation › disabling build validation

expect(received).toBe(expected) // Object.is equality

Expected: 0
Received: 1

  154 |   expect(result.cliOutput).not.toContain('Build-time instant validation failed')
  155 |   expect(parseValidationMessages(result.cliOutput)).toHaveLength(0)
> 156 |   expect(result.exitCode).toBe(0)
      |                           ^
  157 | }
  158 |

  at toBe (lib/e2e-utils/instant-validation.ts:156:27)
  at Object.<anonymous> (e2e/app-dir/instant-validation/instant-validation.test.ts:3461:39)

@nextjs-bot
Copy link
Copy Markdown
Collaborator

Stats from current PR

🔴 1 regression

Metric Canary PR Change Trend
node_modules Size 489 MB 490 MB 🔴 +165 kB (+0%) █████
📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

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

Build Metrics:

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

Change Thresholds:

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

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 456ms 455ms ▁█▅▅▅
Cold (Ready in log) 444ms 443ms ▁▂▅▇▄
Cold (First Request) 1.108s 1.103s ▆▁▁▂▂
Warm (Listen) 456ms 457ms █▁██▁
Warm (Ready in log) 443ms 443ms ▂▂▇█▁
Warm (First Request) 344ms 343ms ▃▄▇█▄
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 455ms 455ms ▁▁▅▁▅
Cold (Ready in log) 438ms 439ms ▁▃▆▂▂
Cold (First Request) 1.868s 1.853s ▇▇▇▆▁
Warm (Listen) 456ms 456ms ▁▁▁▁▁
Warm (Ready in log) 438ms 440ms ▁▂▅▁▂
Warm (First Request) 1.876s 1.867s ▆▇█▆▁

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 3.962s 3.862s ▇▆██▁
Cached Build 3.973s 3.940s ▄███▄
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.319s 14.438s ▁▂▅▂▂
Cached Build 14.512s 14.533s ▁▂▇▃▄
node_modules Size 489 MB 490 MB 🔴 +165 kB (+0%) █████
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
00-sfwc7hh0nr.js gzip 12.9 kB N/A -
04g8kkrpof4y4.js gzip 153 B N/A -
085r3m2vm209v.js gzip 157 B N/A -
09rgvusfdf6kn.js gzip 155 B N/A -
0cvu08z98y4ki.js gzip 153 B N/A -
0cz1d0mv5g_q7.js gzip 39.4 kB 39.4 kB
0h9lhpjlvfuqq.js gzip 65.6 kB N/A -
0h9n4ueu1o3po.js gzip 160 B N/A -
0qz0fg1bxtbyh.js gzip 8.58 kB N/A -
0sruc84tgbi7a.js gzip 10.1 kB N/A -
12amk1ibnf4st.js gzip 8.47 kB N/A -
16jdy7mb2hpzo.js gzip 2.28 kB N/A -
16lhqjoqbznyg.js gzip 220 B 220 B
1ecex550zhb99.js gzip 49 kB N/A -
1elt1qium-r2m.css gzip 115 B 115 B
1ftbkyv1z2_x2.js gzip 9.2 kB N/A -
1g35gmnxav1f_.js gzip 168 B N/A -
1ianzfav6cg3j.js gzip 153 B N/A -
1lti_nqcijcmi.js gzip 225 B N/A -
1wh_bhnqf-6j0.js gzip 10.4 kB N/A -
1z7b2jcanlpqu.js gzip 8.47 kB N/A -
2-otcwbb_ce90.js gzip 13.3 kB N/A -
246le60fytek6.js gzip 1.46 kB N/A -
25c1ukc-mir52.js gzip 70.8 kB N/A -
2dkcnuvqvwnsk.js gzip 155 B N/A -
2ipc3se0d9mja.js gzip 7.61 kB N/A -
2k5-hkx-pwu9f.js gzip 8.55 kB N/A -
2m8m1g6m7mgym.js gzip 8.52 kB N/A -
2ozeyro5-5x52.js gzip 150 B N/A -
2rv_frnfv1elu.js gzip 13 kB N/A -
2t_ui66y8284y.js gzip 156 B N/A -
3_x1qzkrrsxvb.js gzip 154 B N/A -
30z650ayitjz3.js gzip 5.67 kB N/A -
3bue52q4myst9.js gzip 9.77 kB N/A -
3cq10epinkxrc.js gzip 450 B N/A -
3jmciayc6uehc.js gzip 8.53 kB N/A -
3p47jfv5q3pae.js gzip 154 B N/A -
3t1792qlrg1i5.js gzip 13.8 kB N/A -
3w-wwtj1m-6gg.js gzip 158 B N/A -
40u8wq1xwkg4n.js gzip 8.52 kB N/A -
42pywc4_-w69b.js gzip 8.55 kB N/A -
turbopack-0m..xupy.js gzip 4.18 kB N/A -
turbopack-0n..iv2i.js gzip 4.16 kB N/A -
turbopack-0o..-iaz.js gzip 4.17 kB N/A -
turbopack-22..i9nc.js gzip 4.17 kB N/A -
turbopack-2t..u6lv.js gzip 4.17 kB N/A -
turbopack-3-..s02m.js gzip 4.17 kB N/A -
turbopack-38..o3hw.js gzip 4.17 kB N/A -
turbopack-38..ykr7.js gzip 4.17 kB N/A -
turbopack-3d..xejq.js gzip 4.17 kB N/A -
turbopack-3f..88de.js gzip 4.17 kB N/A -
turbopack-3f..ukf-.js gzip 4.17 kB N/A -
turbopack-3i..oi3-.js gzip 4.17 kB N/A -
turbopack-3p..i3gh.js gzip 4.17 kB N/A -
turbopack-43.._zy3.js gzip 4.17 kB N/A -
05_r_-_rf4w-n.js gzip N/A 7.61 kB -
07edtvuknn9aj.js gzip N/A 158 B -
087v-6541yj-c.js gzip N/A 157 B -
0eihfygkvyao-.js gzip N/A 1.46 kB -
0f3kh1v1-la83.js gzip N/A 65.7 kB -
0jhgwwl5cx6aa.js gzip N/A 8.48 kB -
0mbrwbt_112f1.js gzip N/A 8.55 kB -
1-47usxbvijyt.js gzip N/A 169 B -
1-7i7ocjo3t_x.js gzip N/A 8.52 kB -
13msa0s8dfi1u.js gzip N/A 71 kB -
14hk6zq4_i1a9.js gzip N/A 159 B -
16b25kfjz59kf.js gzip N/A 155 B -
19nidcupfk_bm.js gzip N/A 8.58 kB -
1fd23spooi5r7.js gzip N/A 225 B -
1h8d-j5ufbln6.js gzip N/A 49.4 kB -
1nw99o32asytf.js gzip N/A 450 B -
1vfmp5-1v9dfa.js gzip N/A 8.48 kB -
1wofry-bnw1-_.js gzip N/A 9.2 kB -
1y_i925hckv2b.js gzip N/A 8.55 kB -
21_awyqp5ifp-.js gzip N/A 157 B -
284u7nxntygl8.js gzip N/A 13.8 kB -
2q-zb91f9iilw.js gzip N/A 10.4 kB -
2ra7ptusq6_gq.js gzip N/A 157 B -
2u87ln5_zfir_.js gzip N/A 5.67 kB -
2wmvwntu-vggf.js gzip N/A 13.3 kB -
2zmx56aensjs9.js gzip N/A 160 B -
31t7rq3_1hyxt.js gzip N/A 152 B -
393ek2yzi8-nv.js gzip N/A 8.54 kB -
3ecb2jyv0tgkm.js gzip N/A 10.1 kB -
3ex_2w58fcfif.js gzip N/A 9.78 kB -
3ge-yifqzaps2.js gzip N/A 156 B -
3ncb45_q4l5vt.js gzip N/A 156 B -
3oe0ewudfmke4.js gzip N/A 8.52 kB -
3tblcr7py7zqr.js gzip N/A 156 B -
3y97_kdf6zxqw.js gzip N/A 13 kB -
3yypm2pwzx0mq.js gzip N/A 12.9 kB -
42aoz_uk5lwoe.js gzip N/A 155 B -
42lado0_6oegq.js gzip N/A 2.28 kB -
turbopack-0i..yv8v.js gzip N/A 4.18 kB -
turbopack-0n..hzcg.js gzip N/A 4.18 kB -
turbopack-0y..p8mh.js gzip N/A 4.18 kB -
turbopack-1c..pi2l.js gzip N/A 4.18 kB -
turbopack-1l..s9-6.js gzip N/A 4.18 kB -
turbopack-1s..y5ch.js gzip N/A 4.18 kB -
turbopack-1x..cx4p.js gzip N/A 4.18 kB -
turbopack-2h..bm6h.js gzip N/A 4.18 kB -
turbopack-2j..8iod.js gzip N/A 4.18 kB -
turbopack-2w..9xkp.js gzip N/A 4.19 kB -
turbopack-3_..udke.js gzip N/A 4.18 kB -
turbopack-3d..5lb6.js gzip N/A 4.18 kB -
turbopack-3x..w4xq.js gzip N/A 4.16 kB -
turbopack-44..wex8.js gzip N/A 4.18 kB -
Total 464 kB 465 kB ⚠️ +663 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 718 B 718 B
Total 718 B 718 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 434 B 431 B
Total 434 B 431 B ✅ -3 B

📦 Webpack

Client

Main Bundles
Canary PR Change
1011-HASH.js gzip 5.58 kB N/A -
2168.HASH.js gzip 169 B N/A -
2225-HASH.js gzip 4.64 kB N/A -
61a8f394-HASH.js gzip 62.8 kB N/A -
850-HASH.js gzip 60.6 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 257 B 252 B 🟢 5 B (-2%)
main-HASH.js gzip 39.2 kB 39.6 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
36c7d9a6-HASH.js gzip N/A 62.8 kB -
3967-HASH.js gzip N/A 4.63 kB -
5025-HASH.js gzip N/A 5.58 kB -
634-HASH.js gzip N/A 61.4 kB -
7586.HASH.js gzip N/A 170 B -
Total 235 kB 236 kB ⚠️ +1.09 kB
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 194 B 194 B
_error-HASH.js gzip 182 B 181 B
css-HASH.js gzip 334 B 333 B
dynamic-HASH.js gzip 1.8 kB 1.81 kB
edge-ssr-HASH.js gzip 255 B 254 B
head-HASH.js gzip 352 B 352 B
hooks-HASH.js gzip 384 B 384 B
image-HASH.js gzip 580 B 581 B
index-HASH.js gzip 259 B 259 B
link-HASH.js gzip 2.52 kB 2.52 kB
routerDirect..HASH.js gzip 320 B 317 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 315 B 315 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.98 kB 7.99 kB ⚠️ +4 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 125 kB 126 kB
page.js gzip 272 kB 273 kB
Total 398 kB 399 kB ⚠️ +1.23 kB
Middleware
Canary PR Change
middleware-b..fest.js gzip 615 B 617 B
middleware-r..fest.js gzip 156 B 156 B
middleware.js gzip 44.3 kB 44.2 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.9 kB 45.8 kB ✅ -110 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 719 B 718 B
Total 719 B 718 B ✅ -1 B
Build Cache
Canary PR Change
0.pack gzip 4.38 MB 4.39 MB 🔴 +8.8 kB (+0%)
index.pack gzip 114 kB 115 kB
index.pack.old gzip 114 kB 114 kB
Total 4.61 MB 4.61 MB ⚠️ +8.93 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 345 kB 345 kB
app-page-exp..prod.js gzip 191 kB 192 kB
app-page-tur...dev.js gzip 345 kB 345 kB
app-page-tur..prod.js gzip 191 kB 191 kB
app-page-tur...dev.js gzip 341 kB 341 kB
app-page-tur..prod.js gzip 189 kB 189 kB
app-page.run...dev.js gzip 342 kB 342 kB
app-page.run..prod.js gzip 189 kB 190 kB
app-route-ex...dev.js gzip 76.9 kB 76.9 kB
app-route-ex..prod.js gzip 52.5 kB 52.5 kB
app-route-tu...dev.js gzip 76.9 kB 76.9 kB
app-route-tu..prod.js gzip 52.5 kB 52.5 kB
app-route-tu...dev.js gzip 76.5 kB 76.5 kB
app-route-tu..prod.js gzip 52.2 kB 52.2 kB
app-route.ru...dev.js gzip 76.5 kB 76.5 kB
app-route.ru..prod.js gzip 52.2 kB 52.2 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 43.9 kB 43.9 kB
pages-api-tu..prod.js gzip 33.4 kB 33.4 kB
pages-api.ru...dev.js gzip 43.8 kB 43.8 kB
pages-api.ru..prod.js gzip 33.4 kB 33.4 kB
pages-turbo....dev.js gzip 53.2 kB 53.2 kB
pages-turbo...prod.js gzip 39 kB 39 kB
pages.runtim...dev.js gzip 53.2 kB 53.2 kB
pages.runtim..prod.js gzip 39 kB 39 kB
server.runti..prod.js gzip 62.8 kB 62.8 kB
Total 3.05 MB 3.05 MB ⚠️ +979 B
📝 Changed Files (9 files)

Files with changes:

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

Diff too large to display

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

Diff too large to display

server.runtime.prod.js

Diff too large to display

📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/5261f0f86f69aa6b26dbd914cd4346322541e75b/next

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.

2 participants