Repository: vercel/next.js
Pull request: feat(test): introduce cache components testing infrastructure

### What?

Introduces a testing infrastructure to validate Next.js behavior with the experimental Cache Components feature (`dynamicIO`) enabled. This PR adds dedicated CI jobs and configuration to run a subset of existing tests with Cache Components activated.

This has 271 more disabled test suites than the Legacy PPR test suite manifest. The expectation is that we will be resolving the test failures in followup PRs.

### Why?

Cache Components (dynamicIO) represents a significant architectural change in how Next.js handles component caching and rendering. To ensure a smooth transition when this becomes the default behavior, we need to:

1. **Validate compatibility** - Ensure existing applications continue to work correctly when Cache Components is enabled
2. **Identify edge cases** - Catch potential issues early by running tests in this new mode
3. **Build confidence** - Provide a safety net for the eventual migration to Cache Components as the default

The manifest-based approach allows us to incrementally expand test coverage as we fix compatibility issues, rather than attempting to run all tests at once which would be overwhelming and block progress.

### How?

- **Test manifest** (`test/cache-components-tests-manifest.json`): Defines which tests to run and tracks known failures that need addressing
- **CI workflow changes**: Adds three new job groups that mirror existing test jobs but with Cache Components enabled:
  - `test-cache-components-integration`
  - `test-cache-components-dev` (parallelized across 6 groups)
  - `test-cache-components-prod` (parallelized across 7 groups)
- **Conditional feature activation**: When `__NEXT_EXPERIMENTAL_CACHE_COMPONENTS=true` is set during testing, `dynamicIO` is automatically enabled unless explicitly disabled
- **Test adjustments**: Updates error message expectations in tests to handle the different environment label ("Prerender" vs "Server") when Cache Components is active

The infrastructure is designed to be temporary and will be removed once Cache Components becomes the default behavior.

NAR-172


Changed files:
filename: .github/workflows/build_and_test.yml
patch: @@ -871,6 +871,75 @@ jobs:
       stepName: 'test-ppr-prod-${{ matrix.group }}'
     secrets: inherit
 
+  # TODO: remove these jobs once Cache Components is the default
+  # Manifest generated via: https://gist.github.com/wyattjoh/2ceaebd82a5bcff4819600fd60126431
+  test-cache-components-integration:
+    name: test cache components integration
+    needs: ['optimize-ci', 'changes', 'build-native', 'build-next']
+    if: ${{ needs.optimize-ci.outputs.skip == 'false' && needs.changes.outputs.docs-only == 'false' }}
+
+    uses: ./.github/workflows/build_reusable.yml
+    with:
+      nodeVersion: 18.18.2
+      afterBuild: |
+        export __NEXT_EXPERIMENTAL_PPR=true # for compatibility with the existing tests
+        export __NEXT_EXPERIMENTAL_CACHE_COMPONENTS=true
+        export NEXT_EXTERNAL_TESTS_FILTERS="test/cache-components-tests-manifest.json"
+
+        node run-tests.js \
+          --timings \
+          --type integration
+      stepName: 'test-cache-components-integration'
+    secrets: inherit
+
+  test-cache-components-dev:
+    name: test cache components dev
+    needs: ['optimize-ci', 'changes', 'build-native', 'build-next']
+    if: ${{ needs.optimize-ci.outputs.skip == 'false' && needs.changes.outputs.docs-only == 'false' }}
+
+    strategy:
+      fail-fast: false
+      matrix:
+        group: [1/6, 2/6, 3/6, 4/6, 5/6, 6/6]
+    uses: ./.github/workflows/build_reusable.yml
+    with:
+      afterBuild: |
+        export __NEXT_EXPERIMENTAL_PPR=true # for compatibility with the existing tests
+        export __NEXT_EXPERIMENTAL_CACHE_COMPONENTS=true
+        export NEXT_EXTERNAL_TESTS_FILTERS="test/cache-components-tests-manifest.json"
+        export NEXT_TEST_MODE=dev
+
+        node run-tests.js \
+          --timings \
+          -g ${{ matrix.group }} \
+          --type development
+      stepName: 'test-cache-components-dev-${{ matrix.group }}'
+    secrets: inherit
+
+  test-cache-components-prod:
+    name: test cache components prod
+    needs: ['optimize-ci', 'changes', 'build-native', 'build-next']
+    if: ${{ needs.optimize-ci.outputs.skip == 'false' && needs.changes.outputs.docs-only == 'false' }}
+
+    strategy:
+      fail-fast: false
+      matrix:
+        group: [1/7, 2/7, 3/7, 4/7, 5/7, 6/7, 7/7]
+    uses: ./.github/workflows/build_reusable.yml
+    with:
+      afterBuild: |
+        export __NEXT_EXPERIMENTAL_PPR=true # for compatibility with the existing tests
+        export __NEXT_EXPERIMENTAL_CACHE_COMPONENTS=true
+        export NEXT_EXTERNAL_TESTS_FILTERS="test/cache-components-tests-manifest.json"
+        export NEXT_TEST_MODE=start
+
+        node run-tests.js \
+          --timings \
+          -g ${{ matrix.group }} \
+          --type production
+      stepName: 'test-cache-components-prod-${{ matrix.group }}'
+    secrets: inherit
+
   tests-pass:
     needs:
       [
@@ -887,6 +956,9 @@ jobs:
         'test-ppr-dev',
         'test-ppr-prod',
         'test-ppr-integration',
+        'test-cache-components-dev',
+        'test-cache-components-prod',
+        'test-cache-components-integration',
         'test-cargo-unit',
         'rust-check',
         'rustdoc-check',

filename: packages/next/src/server/config-shared.ts
patch: @@ -1474,7 +1474,15 @@ export const defaultConfig = {
     serverComponentsHmrCache: true,
     staticGenerationMaxConcurrency: 8,
     staticGenerationMinPagesPerWorker: 25,
-    dynamicIO: false,
+    dynamicIO:
+      // TODO: remove once we've made dynamicIO the default
+      // If we're testing, and the `__NEXT_EXPERIMENTAL_CACHE_COMPONENTS` environment
+      // variable has been set to `true`, enable the experimental dynamicIO feature so long as it
+      // wasn't explicitly disabled in the config.
+      !!(
+        process.env.__NEXT_TEST_MODE &&
+        process.env.__NEXT_EXPERIMENTAL_CACHE_COMPONENTS === 'true'
+      ),
     inlineCss: false,
     useCache: undefined,
     slowModuleDetection: undefined,

filename: packages/next/src/server/config.ts
patch: @@ -249,6 +249,12 @@ function assignDefaults(
     )
   }
 
+  if (defaultConfig.experimental?.dynamicIO) {
+    Log.warn(
+      `\`experimental.dynamicIO\` has been defaulted to \`true\` because \`__NEXT_EXPERIMENTAL_CACHE_COMPONENTS\` was set to \`true\` during testing.`
+    )
+  }
+
   const result = {
     ...defaultConfig,
     ...config,

filename: test/cache-components-tests-manifest.json
patch: @@ -0,0 +1,357 @@
+{
+  "version": 2,
+  "suites": {
+    "test/production/app-dir/fetch-cache/fetch-cache.test.ts": {
+      "passed": [],
+      "failed": [
+        "fetch-cache should have correct fetchUrl field for fetches and unstable_cache",
+        "fetch-cache should not retry for failed fetch-cache GET",
+        "fetch-cache should retry 3 times when revalidate times out",
+        "fetch-cache should update cache TTL even if cache data does not change"
+      ],
+      "pending": [],
+      "flakey": [],
+      "runtimeError": false
+    },
+    "test/e2e/opentelemetry/opentelemetry.test.ts": {
+      "failed": [
+        "opentelemetry root context app router should handle RSC with fetch",
+        "opentelemetry incoming context propagation app router should handle RSC with fetch",
+        "opentelemetry incoming context propagation app router should handle route handlers in app router"
+      ]
+    },
+    "test/e2e/app-dir/searchparams-reuse-loading/searchparams-reuse-loading.test.ts": {
+      "failed": [
+        "searchparams-reuse-loading should re-use loading from \"full\" prefetch for param-full URL when navigating to param-full route",
+        "searchparams-reuse-loading should re-use loading from \"full\" prefetch for param-full URL when navigating to param-less route",
+        "searchparams-reuse-loading should re-use loading from \"full\" prefetch for param-less URL when navigating to param-full route"
+      ]
+    },
+    "test/production/app-dir/browser-chunks/browser-chunks.test.ts": {
+      "failed": [
+        "browser-chunks must not bundle any server modules into browser chunks"
+      ]
+    },
+    "test/e2e/next-form/default/next-form-prefetch.test.ts": {
+      "failed": [
+        "app dir - form prefetching should not prefetch when prefetch is set to false`",
+        "app dir - form prefetching should prefetch a loading state for the form's target"
+      ]
+    }
+  },
+  "rules": {
+    "include": [
+      "test/e2e/**/*.test.{t,j}s{,x}",
+      "test/integration/app-*/**/*.test.{t,j}s{,x}",
+      "test/production/app-*/**/*.test.{t,j}s{,x}",
+      "test/development/app-*/**/*.test.{t,j}s{,x}",
+      "test/development/acceptance-app/**/*.test.{t,j}s{,x}"
+    ],
+    "exclude": [
+      "test/development/acceptance-app/app-hmr-changes.test.ts",
+      "test/development/acceptance-app/dynamic-metadata-error.test.ts",
+      "test/development/acceptance-app/editor-links.test.ts",
+      "test/development/acceptance-app/error-message-url.test.ts",
+      "test/development/acceptance-app/error-recovery.test.ts",
+      "test/development/acceptance-app/hydration-error.test.ts",
+      "test/development/acceptance-app/invalid-imports.test.ts",
+      "test/development/acceptance-app/ReactRefresh.test.ts",
+      "test/development/acceptance-app/ReactRefreshLogBox-builtins.test.ts",
+      "test/development/acceptance-app/ReactRefreshLogBox-scss.test.ts",
+      "test/development/acceptance-app/ReactRefreshLogBox.test.ts",
+      "test/development/acceptance-app/ReactRefreshLogBoxMisc.test.ts",
+      "test/development/acceptance-app/ReactRefreshModule.test.ts",
+      "test/development/acceptance-app/ReactRefreshRegression.test.ts",
+      "test/development/acceptance-app/ReactRefreshRequire.test.ts",
+      "test/development/acceptance-app/rsc-build-errors.test.ts",
+      "test/development/acceptance-app/rsc-runtime-errors.test.ts",
+      "test/development/acceptance-app/rsc-runtime-errors.test.ts",
+      "test/development/acceptance-app/server-components.test.ts",
+      "test/development/acceptance-app/undefined-default-export.test.ts",
+      "test/development/acceptance-app/version-staleness.test.ts",
+      "test/development/app-dir/async-request-warnings/async-request-warnings.test.ts",
+      "test/development/app-dir/capture-console-error-owner-stack/capture-console-error-owner-stack.test.ts",
+      "test/development/app-dir/capture-console-error-owner-stack/capture-console-error-owner-stack.test.ts",
+      "test/development/app-dir/dev-fetch-hmr/dev-fetch-hmr.test.ts",
+      "test/development/app-dir/dev-indicator/hide-button.test.ts",
+      "test/development/app-dir/dev-indicator/route-type.test.ts",
+      "test/development/app-dir/dynamic-error-trace/index.test.ts",
+      "test/development/app-dir/dynamic-io-*/**/*",
+      "test/development/app-dir/edge-errors-hmr/index.test.ts",
+      "test/development/app-dir/next-after-app-invalid-usage/index.test.ts",
+      "test/development/app-dir/owner-stack-react-missing-key-prop/owner-stack-react-missing-key-prop.test.ts",
+      "test/development/app-dir/react-performance-track/react-performance-track.test.ts",
+      "test/development/app-dir/segment-explorer/segment-explorer.test.ts",
+      "test/development/app-dir/serialize-circular-error/serialize-circular-error.test.ts",
+      "test/development/app-dir/serialize-circular-error/serialize-circular-error.test.ts",
+      "test/development/app-dir/server-components-hmr-cache/server-components-hmr-cache.test.ts",
+      "test/development/app-dir/ssr-in-rsc/ssr-in-rsc.test.ts",
+      "test/development/app-dir/ssr-only-error/ssr-only-error.test.ts",
+      "test/development/app-hmr/hmr-env.test.ts",
+      "test/development/app-hmr/hmr.test.ts",
+      "test/e2e/app-dir/actions-navigation/index.test.ts",
+      "test/e2e/app-dir/actions-revalidate-remount/actions-revalidate-remount.test.ts",
+      "test/e2e/app-dir/actions-unrecognized/actions-unrecognized.test.ts",
+      "test/e2e/app-dir/actions/app-action-export.test.ts",
+      "test/e2e/app-dir/actions/app-action-form-state-node-middleware.test.ts",
+      "test/e2e/app-dir/actions/app-action-form-state.test.ts",
+      "test/e2e/app-dir/actions/app-action-node-middleware.test.ts",
+      "test/e2e/app-dir/actions/app-action-progressive-enhancement.test.ts",
+      "test/e2e/app-dir/actions/app-action-size-limit-invalid-node-middleware.test.ts",
+      "test/e2e/app-dir/actions/app-action-size-limit-invalid.test.ts",
+      "test/e2e/app-dir/actions/app-action.test.ts",
+      "test/e2e/app-dir/app-a11y/index.test.ts",
+      "test/e2e/app-dir/app-catch-all-optional/app-catch-all-optional.test.ts",
+      "test/e2e/app-dir/app-client-cache/client-cache.defaults.test.ts",
+      "test/e2e/app-dir/app-client-cache/client-cache.experimental.test.ts",
+      "test/e2e/app-dir/app-client-cache/client-cache.original.test.ts",
+      "test/e2e/app-dir/app-client-cache/client-cache.parallel-routes.test.ts",
+      "test/e2e/app-dir/app-compilation/index.test.ts",
+      "test/e2e/app-dir/app-css/index.test.ts",
+      "test/e2e/app-dir/app-custom-cache-handler/index.test.ts",
+      "test/e2e/app-dir/app-edge-root-layout/index.test.ts",
+      "test/e2e/app-dir/app-edge/app-edge.test.ts",
+      "test/e2e/app-dir/app-esm-js/index.test.ts",
+      "test/e2e/app-dir/app-esm-js/standalone.test.ts",
+      "test/e2e/app-dir/app-external/app-external.test.ts",
+      "test/e2e/app-dir/app-fetch-deduping-errors/app-fetch-deduping-errors.test.ts",
+      "test/e2e/app-dir/app-fetch-deduping/app-fetch-deduping.test.ts",
+      "test/e2e/app-dir/app-inline-css/index.test.ts",
+      "test/e2e/app-dir/app-invalid-revalidate/app-invalid-revalidate.test.ts",
+      "test/e2e/app-dir/app-middleware/app-middleware.test.ts",
+      "test/e2e/app-dir/app-prefetch*/**/*",
+      "test/e2e/app-dir/app-rendering/rendering.test.ts",
+      "test/e2e/app-dir/app-root-params/generate-static-params.test.ts",
+      "test/e2e/app-dir/app-root-params/multiple-roots.test.ts",
+      "test/e2e/app-dir/app-root-params/simple.test.ts",
+      "test/e2e/app-dir/app-root-params/use-cache.test.ts",
+      "test/e2e/app-dir/app-routes-trailing-slash/app-routes-trailing-slash.test.ts",
+      "test/e2e/app-dir/app-routes/app-custom-route-base-path.test.ts",
+      "test/e2e/app-dir/app-routes/app-custom-routes.test.ts",
+      "test/e2e/app-dir/app-simple-routes/app-simple-routes.test.ts",
+      "test/e2e/app-dir/app-static/app-static-custom-handler.test.ts",
+      "test/e2e/app-dir/app-static/app-static.test.ts",
+      "test/e2e/app-dir/app-validation/validation.test.ts",
+      "test/e2e/app-dir/app/experimental-compile.test.ts",
+      "test/e2e/app-dir/app/index.test.ts",
+      "test/e2e/app-dir/app/standalone-gsp.test.ts",
+      "test/e2e/app-dir/app/standalone.test.ts",
+      "test/e2e/app-dir/app/useReportWebVitals.test.ts",
+      "test/e2e/app-dir/async-component-preload/async-component-preload.test.ts",
+      "test/e2e/app-dir/autoscroll-with-css-modules/index.test.ts",
+      "test/e2e/app-dir/back-forward-cache/back-forward-cache.test.ts",
+      "test/e2e/app-dir/crypto-globally-available/crypto-globally-available.test.ts",
+      "test/e2e/app-dir/css-chunking/css-chunking.test.ts",
+      "test/e2e/app-dir/custom-cache-control/custom-cache-control.test.ts",
+      "test/e2e/app-dir/dedupe-rsc-error-log/dedupe-rsc-error-log.test.ts",
+      "test/e2e/app-dir/disable-logging-route/disable-logging-route.test.ts",
+      "test/e2e/app-dir/draft-mode/draft-mode.test.ts",
+      "test/e2e/app-dir/dynamic-css/index.test.ts",
+      "test/e2e/app-dir/dynamic-data/dynamic-data.test.ts",
+      "test/e2e/app-dir/dynamic-href/dynamic-href.test.ts",
+      "test/e2e/app-dir/dynamic-in-generate-params/index.test.ts",
+      "test/e2e/app-dir/dynamic-interception-route-revalidate/dynamic-interception-route-revalidate.test.ts",
+      "test/e2e/app-dir/dynamic-io-*/**/*",
+      "test/e2e/app-dir/dynamic-io/**/*",
+      "test/e2e/app-dir/dynamic-requests/dynamic-requests.test.ts",
+      "test/e2e/app-dir/dynamic/dynamic.test.ts",
+      "test/e2e/app-dir/edge-route-catchall/edge-route-catchall.test.ts",
+      "test/e2e/app-dir/edge-route-rewrite/edge-route-rewrite.test.ts",
+      "test/e2e/app-dir/edge-runtime-node-compatibility/edge-runtime-node-compatibility.test.ts",
+      "test/e2e/app-dir/error-boundary-navigation/index.test.ts",
+      "test/e2e/app-dir/error-boundary-navigation/override-node-env.test.ts",
+      "test/e2e/app-dir/errors/index.test.ts",
+      "test/e2e/app-dir/fallback-prefetch/fallback-prefetch.test.ts",
+      "test/e2e/app-dir/fallback-shells/**/*",
+      "test/e2e/app-dir/forbidden/basic/forbidden-basic.test.ts",
+      "test/e2e/app-dir/forbidden/default/forbidden-default.test.ts",
+      "test/e2e/app-dir/front-redirect-issue/front-redirect-issue.test.ts",
+      "test/e2e/app-dir/global-error/basic/index.test.ts",
+      "test/e2e/app-dir/global-error/catch-all/index.test.ts",
+      "test/e2e/app-dir/global-error/layout-error/index.test.ts",
+      "test/e2e/app-dir/global-error/with-style-import/index.test.ts",
+      "test/e2e/app-dir/graceful-shutdown-next-after/custom-server/index.test.ts",
+      "test/e2e/app-dir/graceful-shutdown-next-after/next-start/index.test.ts",
+      "test/e2e/app-dir/headers-static-bailout/headers-static-bailout.test.ts",
+      "test/e2e/app-dir/hooks/hooks.test.ts",
+      "test/e2e/app-dir/i18n-hybrid/i18n-hybrid.test.js",
+      "test/e2e/app-dir/instrumentation-order/instrumentation-order.test.ts",
+      "test/e2e/app-dir/interception-dynamic-segment-middleware/interception-dynamic-segment-middleware.test.ts",
+      "test/e2e/app-dir/interception-middleware-rewrite/interception-middleware-rewrite.test.ts",
+      "test/e2e/app-dir/interception-route-prefetch-cache/interception-route-prefetch-cache.test.ts",
+      "test/e2e/app-dir/interception-routes-multiple-catchall/interception-routes-multiple-catchall.test.ts",
+      "test/e2e/app-dir/interception-routes-root-catchall/interception-routes-root-catchall.test.ts",
+      "test/e2e/app-dir/layout-params/layout-params.test.ts",
+      "test/e2e/app-dir/logging/fetch-logging.test.ts",
+      "test/e2e/app-dir/logging/fetch-warning.test.ts",
+      "test/e2e/app-dir/metadata-dynamic-routes/index.test.ts",
+      "test/e2e/app-dir/metadata-edge/index.test.ts",
+      "test/e2e/app-dir/metadata-icons/metadata-icons.test.ts",
+      "test/e2e/app-dir/metadata-navigation/metadata-navigation.test.ts",
+      "test/e2e/app-dir/metadata-streaming-parallel-routes/metadata-streaming-parallel-routes.test.ts",
+      "test/e2e/app-dir/metadata-streaming/metadata-streaming-customized-rule.test.ts",
+      "test/e2e/app-dir/metadata-streaming/metadata-streaming.test.ts",
+      "test/e2e/app-dir/metadata-thrown/metadata-thrown.test.ts",
+      "test/e2e/app-dir/metadata/metadata.test.ts",
+      "test/e2e/app-dir/middleware-rewrite-dynamic/middleware-rewrite-dynamic.test.ts",
+      "test/e2e/app-dir/middleware-sitemap/no-matcher/index.test.ts",
+      "test/e2e/app-dir/navigation-layout-suspense/navigation-layout-suspense.test.ts",
+      "test/e2e/app-dir/navigation/navigation.test.ts",
+      "test/e2e/app-dir/next-after-app-api-usage/index.test.ts",
+      "test/e2e/app-dir/next-after-app-deploy/index.test.ts",
+      "test/e2e/app-dir/next-after-app-static/build-time-error/build-time-error.test.ts",
+      "test/e2e/app-dir/next-after-app-static/build-time/build-time.test.ts",
+      "test/e2e/app-dir/next-after-app/index.test.ts",
+      "test/e2e/app-dir/next-dynamic-css/next-dynamic-css.test.ts",
+      "test/e2e/app-dir/next-font/**/*",
+      "test/e2e/app-dir/next-image/next-image-https.test.ts",
+      "test/e2e/app-dir/next-image/next-image-proxy.test.ts",
+      "test/e2e/app-dir/next-image/next-image.test.ts",
+      "test/e2e/app-dir/node-extensions/node-extensions.random.test.ts",
+      "test/e2e/app-dir/not-found-default/index.test.ts",
+      "test/e2e/app-dir/not-found-with-pages-i18n/not-found-with-pages.test.ts",
+      "test/e2e/app-dir/not-found/basic/index.test.ts",
+      "test/e2e/app-dir/not-found/conflict-route/index.test.ts",
+      "test/e2e/app-dir/not-found/css-precedence/index.test.ts",
+      "test/e2e/app-dir/not-found/group-route-root-not-found/index.test.ts",
+      "test/e2e/app-dir/not-found/group-route/index.test.ts",
+      "test/e2e/app-dir/parallel-route-not-found-params/parallel-route-not-found-params.test.ts",
+      "test/e2e/app-dir/parallel-routes-and-interception-from-root/parallel-routes-and-interception-from-root.test.ts",
+      "test/e2e/app-dir/parallel-routes-and-interception-nested-dynamic-routes/parallel-routes-and-interception-nested-dynamic-routes.test.ts",
+      "test/e2e/app-dir/parallel-routes-and-interception/parallel-routes-and-interception.test.ts",
+      "test/e2e/app-dir/parallel-routes-breadcrumbs/parallel-routes-breadcrumbs.test.ts",
+      "test/e2e/app-dir/parallel-routes-catchall-specificity/parallel-routes-catchall-specificity.test.ts",
+      "test/e2e/app-dir/parallel-routes-generate-static-params/parallel-routes-generate-static-params.test.ts",
+      "test/e2e/app-dir/parallel-routes-revalidation/parallel-routes-revalidation.test.ts",
+      "test/e2e/app-dir/phase-changes/cookies.test.ts",
+      "test/e2e/app-dir/ppr-*/**/*",
+      "test/e2e/app-dir/ppr/**/*",
+      "test/e2e/app-dir/preferred-region/preferred-region.test.ts",
+      "test/e2e/app-dir/prefetch-searchparam/prefetch-searchparam.test.ts",
+      "test/e2e/app-dir/prefetching-not-found/prefetching-not-found.test.ts",
+      "test/e2e/app-dir/prerender-encoding/prerender-encoding.test.ts",
+      "test/e2e/app-dir/react-max-headers-length/react-max-headers-length.test.ts",
+      "test/e2e/app-dir/revalidate-dynamic/revalidate-dynamic.test.ts",
+      "test/e2e/app-dir/revalidatetag-rsc/revalidatetag-rsc.test.ts",
+      "test/e2e/app-dir/rewrite-with-search-params/rewrite-with-search-params.test.ts",
+      "test/e2e/app-dir/rewrites-redirects/rewrites-redirects.test.ts",
+      "test/e2e/app-dir/root-layout-render-once/index.test.ts",
+      "test/e2e/app-dir/root-layout/root-layout.test.ts",
+      "test/e2e/app-dir/router-autoscroll/router-autoscroll.test.ts",
+      "test/e2e/app-dir/router-stuck-dynamic-static-segment/router-stuck-dynamic-static-segment.test.ts",
+      "test/e2e/app-dir/rsc-basic/rsc-basic-react-experimental.test.ts",
+      "test/e2e/app-dir/rsc-basic/rsc-basic.test.ts",
+      "test/e2e/app-dir/rsc-redirect/rsc-redirect.test.ts",
+      "test/e2e/app-dir/scss/hmr-module/hmr-module.test.ts",
+      "test/e2e/app-dir/scss/multi-page/multi-page.test.ts",
+      "test/e2e/app-dir/scss/prod-module/prod-module.test.ts",
+      "test/e2e/app-dir/search-params-react-key/layout-params.test.ts",
+      "test/e2e/app-dir/searchparams-static-bailout/searchparams-static-bailout.test.ts",
+      "test/e2e/app-dir/segment-cache/basic/segment-cache-basic.test.ts",
+      "test/e2e/app-dir/segment-cache/client-only-opt-in/client-only-opt-in.test.ts",
+      "test/e2e/app-dir/segment-cache/conflicting-routes/conflicting-routes.test.ts",
+      "test/e2e/app-dir/segment-cache/export/segment-cache-output-export.test.ts",
+      "test/e2e/app-dir/segment-cache/incremental-opt-in/segment-cache-incremental-opt-in.test.ts",
+      "test/e2e/app-dir/segment-cache/memory-pressure/segment-cache-memory-pressure.test.ts",
+      "test/e2e/app-dir/segment-cache/prefetch-scheduling/prefetch-scheduling.test.ts",
+      "test/e2e/app-dir/segment-cache/revalidation/segment-cache-revalidation.test.ts",
+      "test/e2e/app-dir/segment-cache/staleness/segment-cache-stale-time.test.ts",
+      "test/e2e/app-dir/server-actions-redirect-middleware-rewrite/server-actions-redirect-middleware-rewrite.test.ts",
+      "test/e2e/app-dir/server-source-maps/server-source-maps-edge.test.ts",
+      "test/e2e/app-dir/server-source-maps/server-source-maps.test.ts",
+      "test/e2e/app-dir/set-cookies/set-cookies.test.ts",
+      "test/e2e/app-dir/shallow-routing/shallow-routing.test.ts",
+      "test/e2e/app-dir/static-generation-status/index.test.ts",
+      "test/e2e/app-dir/static-shell-debugging/static-shell-debugging.test.ts",
+      "test/e2e/app-dir/taint/process-taint.test.ts",
+      "test/e2e/app-dir/temporary-references/temporary-references.test.ts",
+      "test/e2e/app-dir/unauthorized/basic/unauthorized-basic.test.ts",
+      "test/e2e/app-dir/unauthorized/default/unauthorized-default.test.ts",
+      "test/e2e/app-dir/unstable-rethrow/unstable-rethrow.test.ts",
+      "test/e2e/app-dir/use-cache-close-over-function/**/*",
+      "test/e2e/app-dir/use-cache-custom-handler/**/*",
+      "test/e2e/app-dir/use-cache-dev/use-cache-dev.test.ts",
+      "test/e2e/app-dir/use-cache-hanging-inputs/**/*",
+      "test/e2e/app-dir/use-cache-metadata-route-handler/**/*",
+      "test/e2e/app-dir/use-cache-route-handler-only/**/*",
+      "test/e2e/app-dir/use-cache-segment-configs/use-cache-segment-configs.test.ts",
+      "test/e2e/app-dir/use-cache-standalone-search-params/use-cache-standalone-search-params.test.ts",
+      "test/e2e/app-dir/use-cache-without-experimental-flag/use-cache-without-experimental-flag.test.ts",
+      "test/e2e/app-dir/use-cache/use-cache.test.ts",
+      "test/e2e/app-dir/use-params/use-params.test.ts",
+      "test/e2e/app-dir/use-selected-layout-segment-s/use-selected-layout-segment-s.test.ts",
+      "test/e2e/app-dir/use-server-inserted-html/use-server-inserted-html.test.ts",
+      "test/e2e/app-dir/with-exported-function-config/with-exported-function-config.test.ts",
+      "test/e2e/app-document/client.test.ts",
+      "test/e2e/app-document/csp.test.ts",
+      "test/e2e/app-document/index.test.ts",
+      "test/e2e/app-document/rendering.test.ts",
+      "test/e2e/basepath/basepath.test.ts",
+      "test/e2e/basepath/error-pages.test.ts",
+      "test/e2e/basepath/query-hash.test.ts",
+      "test/e2e/basepath/redirect-and-rewrite.test.ts",
+      "test/e2e/basepath/router-events.test.ts",
+      "test/e2e/basepath/trailing-slash.test.ts",
+      "test/e2e/cancel-request/stream-cancel.test.ts",
+      "test/e2e/children-page/index.test.ts",
+      "test/e2e/edge-configurable-runtime/index.test.ts",
+      "test/e2e/edge-pages-support/edge-document.test.ts",
+      "test/e2e/edge-pages-support/index.test.ts",
+      "test/e2e/edge-runtime-uses-edge-light-import-specifier-for-packages/edge-runtime-uses-edge-light-import-specifier-for-packages.test.ts",
+      "test/e2e/import-conditions/import-conditions.test.ts",
+      "test/e2e/manual-client-base-path/index.test.ts",
+      "test/e2e/module-layer/module-layer.test.ts",
+      "test/e2e/multi-zone/multi-zone.test.ts",
+      "test/e2e/new-link-behavior/material-ui.test.ts",
+      "test/e2e/next-form/default/app-dir.test.ts",
+      "test/e2e/next-form/default/pages-dir.test.ts",
+      "test/e2e/next-link-errors/next-link-errors.test.ts",
+      "test/e2e/nonce-head-manager/index.test.ts",
+      "test/e2e/og-api/index.test.ts",
+      "test/e2e/og-routes-custom-font/og-routes-custom-font.test.ts",
+      "test/e2e/on-request-error/basic/basic.test.ts",
+      "test/e2e/on-request-error/dynamic-routes/dynamic-routes.test.ts",
+      "test/e2e/on-request-error/isr/isr.test.ts",
+      "test/e2e/on-request-error/server-action-error/server-action-error.test.ts",
+      "test/e2e/on-request-error/skip-next-internal-error/skip-next-internal-error.test.ts",
+      "test/e2e/opentelemetry/client-trace-metadata/client-trace-metadata.test.ts",
+      "test/e2e/opentelemetry/instrumentation/instrumentation-pages-app-only.test.ts",
+      "test/e2e/opentelemetry/instrumentation/opentelemetry.test.ts",
+      "test/e2e/prerender.test.ts",
+      "test/e2e/react-compiler/react-compiler.test.ts",
+      "test/e2e/react-version/react-version.test.ts",
+      "test/e2e/streaming-ssr-edge/streaming-ssr-edge.test.ts",
+      "test/e2e/switchable-runtime/index.test.ts",
+      "test/e2e/testmode/testmode.test.ts",
+      "test/e2e/use-link-status/index.test.ts",
+      "test/integration/app-dir-export/**/*",
+      "test/integration/app-dynamic-error/test/index.test.ts",
+      "test/integration/app-types/app-types.test.js",
+      "test/production/app-dir-edge-runtime-with-wasm/index.test.ts",
+      "test/production/app-dir-prevent-304-caching/index.test.ts",
+      "test/production/app-dir/actions-tree-shaking/reexport/reexport-edge.test.ts",
+      "test/production/app-dir/actions-tree-shaking/reexport/reexport.test.ts",
+      "test/production/app-dir/actions-tree-shaking/use-effect-actions/use-effect-actions-edge.test.ts",
+      "test/production/app-dir/app-fetch-build-cache/app-fetch-build-cache.test.ts",
+      "test/production/app-dir/build-output-prerender/build-output-prerender.test.ts",
+      "test/production/app-dir/build-output-tree-view/build-output-tree-view.test.ts",
+      "test/production/app-dir/build-output/index.test.ts",
+      "test/production/app-dir/client-components-tree-shaking/index.test.ts",
+      "test/production/app-dir/deopted-into-client-rendering-warning/deopted-into-client-rendering-warning.test.ts",
+      "test/production/app-dir/global-default-cache-handler/global-default-cache-handler.test.ts",
+      "test/production/app-dir/graceful-degrade/graceful-degrade-non-bot.test.ts",
+      "test/production/app-dir/graceful-degrade/graceful-degrade.test.ts",
+      "test/production/app-dir/metadata-revalidate/metadata-revalidate.test.ts",
+      "test/production/app-dir/metadata-static/metadata-static.test.ts",
+      "test/production/app-dir/metadata-streaming-config/metadata-streaming-config-customized.test.ts",
+      "test/production/app-dir/metadata-streaming-config/metadata-streaming-config.test.ts",
+      "test/production/app-dir/next-types-plugin/sync-params-type-check/sync-params-type-check.test.ts",
+      "test/production/app-dir/revalidate/revalidate.test.ts",
+      "test/production/app-dir/ssg-single-pass/ssg-single-pass.test.ts",
+      "test/production/app-dir/subresource-integrity/subresource-integrity.test.ts",
+      "test/production/app-dir/typed-routes-with-webpack-worker/typed-routes-with-webpack-worker.test.ts",
+      "test/production/app-dir/unexpected-error/unexpected-error.test.ts",
+      "test/production/app-dir/worker-restart/worker-restart.test.ts"
+    ]
+  }
+}