Skip to content

backport: implement LRU cache with invocation ID scoping for minimal mode response cache#89122

Merged
ztanner merged 1 commit intonext-16-1from
ztanner/backport-88509
Jan 27, 2026
Merged

backport: implement LRU cache with invocation ID scoping for minimal mode response cache#89122
ztanner merged 1 commit intonext-16-1from
ztanner/backport-88509

Conversation

@ztanner
Copy link
Member

@ztanner ztanner commented Jan 27, 2026

… response cache (#88509)

## Summary

Implements an LRU cache with compound keys for the minimal mode response
cache to improve cache hit rates during parallel revalidation scenarios.

**Problem**: The previous single-entry cache (`previousCacheItem`) keyed
by pathname caused cache collisions when multiple concurrent invocations
(e.g., during ISR revalidation) accessed the same pathname. Each
invocation would overwrite the previous entry, leading to cache misses
and redundant work.

**Solution**: An LRU cache using compound keys (`pathname +
invocationID`) that allows multiple invocations to cache entries for the
same pathname independently:

```
Cache Key Structure
─────────────────────
/blog/post-1\0inv-abc  →  {entry, expiresAt}
/blog/post-1\0inv-def  →  {entry, expiresAt}
/blog/post-1\0__ttl__  →  {entry, expiresAt}  (TTL fallback)
/api/data\0inv-ghi     →  {entry, expiresAt}
```

### Cache Key Strategy

- **With `x-invocation-id` header**: Entries are keyed by invocation ID
for exact-match lookups (always a cache hit if the entry exists)
- **Without header (TTL fallback)**: Entries use a `__ttl__` sentinel
key and validate via expiration timestamp

### Configuration via Environment Variables

Cache sizing can be tuned via environment variables (using
`NEXT_PRIVATE_*` prefix for infrastructure-level settings):

| Environment Variable | Default | Description |
|---------------------|---------|-------------|
| `NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE` | 150 | Max entries in the LRU
cache |
| `NEXT_PRIVATE_RESPONSE_CACHE_TTL` | 10000 | TTL in ms for cache
entries (fallback validation) |

### LRU Cache Enhancement

Added an optional `onEvict` callback to `LRUCache` that fires when
entries are evicted due to capacity limits. This enables tracking
evicted invocation IDs for warning detection without introducing
timer-based cleanup.

### Eviction Warnings

When a cache entry is evicted and later accessed by the same invocation,
a warning is logged suggesting to increase
`NEXT_PRIVATE_RESPONSE_CACHE_MAX_SIZE`. This helps developers tune cache
sizes for their workload.

### Additional Changes

- Renamed header from `x-vercel-id` to `x-invocation-id` for clarity
- Added `withInvocationId()` test helper for cache testing

## Test Plan

- Existing response cache tests pass with updated header name
- Unit tests for `LRUCache` including `onEvict` callback behavior
- Updated standalone mode tests to use `withInvocationId()` helper
Comment on lines +66 to +69
* Uses KEY_SEPARATOR prefix to guarantee uniqueness since null bytes cannot appear
* in HTTP headers (RFC 7230), making collision with real invocation IDs impossible.
*/
const TTL_SENTINEL = `${KEY_SEPARATOR}ttl`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
* Uses KEY_SEPARATOR prefix to guarantee uniqueness since null bytes cannot appear
* in HTTP headers (RFC 7230), making collision with real invocation IDs impossible.
*/
const TTL_SENTINEL = `${KEY_SEPARATOR}ttl`
* Must NOT contain KEY_SEPARATOR to ensure extractInvocationID can correctly identify it.
* This value cannot collide with real invocation IDs because UUIDs don't match this format.
*/
const TTL_SENTINEL = '__ttl_sentinel__'

TTL_SENTINEL containing KEY_SEPARATOR causes extractInvocationID to incorrectly return "ttl" instead of undefined for TTL-mode cache entries

Fix on Vercel

@nextjs-bot
Copy link
Collaborator

Stats from current PR

Default Build
General
vercel/next.js canary vercel/next.js ztanner/backport-88509 Change
buildDuration 17.6s 17.3s N/A
buildDurationCached 14s 10.9s N/A
nodeModulesSize 462 MB 458 MB N/A
nextStartRea..uration (ms) 717ms 717ms
Client Bundles (main, webpack)
vercel/next.js canary vercel/next.js ztanner/backport-88509 Change
2086.HASH.js gzip 169 B 169 B
2161-HASH.js gzip 5.47 kB 5.42 kB N/A
2747-HASH.js gzip 4.53 kB 4.46 kB N/A
4322-HASH.js gzip 52.8 kB 51 kB N/A
ec793fe8-HASH.js gzip 62.3 kB 62.3 kB N/A
framework-HASH.js gzip 59.8 kB 59.8 kB N/A
main-app-HASH.js gzip 251 B 251 B
main-HASH.js gzip 38.7 kB 38.7 kB N/A
webpack-HASH.js gzip 1.68 kB 1.68 kB N/A
Overall change 420 B 420 B
Legacy Client Bundles (polyfills)
vercel/next.js canary vercel/next.js ztanner/backport-88509 Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Overall change 39.4 kB 39.4 kB
Client Pages
vercel/next.js canary vercel/next.js ztanner/backport-88509 Change
_app-HASH.js gzip 194 B 193 B N/A
_error-HASH.js gzip 182 B 182 B
css-HASH.js gzip 336 B 335 B N/A
dynamic-HASH.js gzip 1.8 kB 1.8 kB N/A
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 352 B 349 B N/A
hooks-HASH.js gzip 385 B 384 B N/A
image-HASH.js gzip 580 B 580 B
index-HASH.js gzip 259 B 258 B N/A
link-HASH.js gzip 2.5 kB 2.51 kB N/A
routerDirect..HASH.js gzip 319 B 317 B N/A
script-HASH.js gzip 385 B 387 B N/A
withRouter-HASH.js gzip 316 B 315 B N/A
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 1.12 kB 1.12 kB
Client Build Manifests
vercel/next.js canary vercel/next.js ztanner/backport-88509 Change
_buildManifest.js gzip 736 B 738 B N/A
Overall change 0 B 0 B
Rendered Page Sizes
vercel/next.js canary vercel/next.js ztanner/backport-88509 Change
index.html gzip 522 B 525 B N/A
link.html gzip 537 B 538 B N/A
withRouter.html gzip 518 B 521 B N/A
Overall change 0 B 0 B
Edge SSR bundle Size
vercel/next.js canary vercel/next.js ztanner/backport-88509 Change
edge-ssr.js gzip 126 kB 126 kB N/A
page.js gzip 246 kB 243 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary vercel/next.js ztanner/backport-88509 Change
middleware-b..fest.js gzip 614 B 653 B N/A
middleware-r..fest.js gzip 155 B 156 B N/A
middleware.js gzip 33 kB 32.9 kB N/A
edge-runtime..pack.js gzip 842 B 842 B
Overall change 842 B 842 B
Next Runtimes
vercel/next.js canary vercel/next.js ztanner/backport-88509 Change
app-page-exp...dev.js gzip 308 kB 303 kB N/A
app-page-exp..prod.js gzip 164 kB 158 kB N/A
app-page-tur...dev.js gzip 308 kB 303 kB N/A
app-page-tur..prod.js gzip 164 kB 158 kB N/A
app-page-tur...dev.js gzip 305 kB 300 kB N/A
app-page-tur..prod.js gzip 162 kB 156 kB N/A
app-page.run...dev.js gzip 305 kB 300 kB N/A
app-page.run..prod.js gzip 162 kB 156 kB N/A
app-route-ex...dev.js gzip 70.2 kB 69.1 kB N/A
app-route-ex..prod.js gzip 48.8 kB 48 kB N/A
app-route-tu...dev.js gzip 70.2 kB 69.2 kB N/A
app-route-tu..prod.js gzip 48.8 kB 48 kB N/A
app-route-tu...dev.js gzip 69.8 kB 68.8 kB N/A
app-route-tu..prod.js gzip 48.6 kB 47.8 kB N/A
app-route.ru...dev.js gzip 69.7 kB 68.7 kB N/A
app-route.ru..prod.js gzip 48.6 kB 47.7 kB N/A
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.1 kB 42.3 kB N/A
pages-api-tu..prod.js gzip 32.8 kB 32.1 kB N/A
pages-api.ru...dev.js gzip 43.1 kB 42.2 kB N/A
pages-api.ru..prod.js gzip 32.8 kB 32.1 kB N/A
pages-turbo....dev.js gzip 52.4 kB 51.5 kB N/A
pages-turbo...prod.js gzip 39.3 kB 38.6 kB N/A
pages.runtim...dev.js gzip 52.3 kB 51.5 kB N/A
pages.runtim..prod.js gzip 39.3 kB 38.6 kB N/A
server.runti..prod.js gzip 62.5 kB 62.1 kB N/A
Overall change 1.28 kB 1.28 kB
build cache
vercel/next.js canary vercel/next.js ztanner/backport-88509 Change
0.pack gzip 3.71 MB 3.64 MB N/A
index.pack gzip 102 kB 101 kB N/A
Overall change 0 B 0 B
Diff details
Diff for page.js

Diff too large to display

Diff for middleware-b..-manifest.js
@@ -1,97 +1,98 @@
 globalThis.__BUILD_MANIFEST = {
   polyfillFiles: ["static/chunks/polyfills-42372ed130431b0a.js"],
   devFiles: [],
-  lowPriorityFiles: [
-    "static/BUILD_ID/_buildManifest.js",
-    "static/BUILD_ID/_ssgManifest.js",
-  ],
+  lowPriorityFiles: [],
   rootMainFiles: [
-    "static/chunks/webpack-d5f35f70cffceeb2.js",
-    "static/chunks/ec793fe8-bfbd89d435505e0a.js",
-    "static/chunks/4322-ab1560844353df31.js",
-    "static/chunks/main-app-845f6326896999e0.js",
+    "static/chunks/webpack-c1a44bedea8fda3c.js",
+    "static/chunks/b17a3386-b7223d4e072529f8.js",
+    "static/chunks/2658-19f1e86c1906a56f.js",
+    "static/chunks/main-app-26d1ec7570dd9006.js",
   ],
   rootMainFilesTree: {},
   pages: {
     "/": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/pages/index-dda7d8b64d4ba15c.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/pages/index-d95f7ec6af4d2644.js",
     ],
     "/_app": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/pages/_app-86d60bbd6645ce79.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/pages/_app-aa3493662e808880.js",
     ],
     "/_error": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/pages/_error-6ef44d3954f25711.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/pages/_error-209c0c82205a7c9f.js",
     ],
     "/css": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
       "static/css/ded6b86ab9cc0a1f.css",
-      "static/chunks/pages/css-c8aaa7211416a045.js",
+      "static/chunks/pages/css-62710339bc830ded.js",
     ],
     "/dynamic": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/pages/dynamic-d53bb7f318f342c2.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/pages/dynamic-8ed3486bb68dd6c6.js",
     ],
     "/edge-ssr": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/pages/edge-ssr-1383106d4a3e7d72.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/pages/edge-ssr-0db9f7bb610d3072.js",
     ],
     "/head": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/pages/head-1db1c4be1a45662f.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/pages/head-747416c4075e42aa.js",
     ],
     "/hooks": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/pages/hooks-e6deee5b72a5b112.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/pages/hooks-8b10205be7505244.js",
     ],
     "/image": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/2747-b146e0287b0310e9.js",
-      "static/chunks/pages/image-868472cd5e84efc9.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/6349-ee9aecde860d4832.js",
+      "static/chunks/pages/image-f90ae17c3ad1d38b.js",
     ],
     "/link": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/pages/link-0ec374e48b2ce5d9.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/pages/link-6ab9a67b348df1bf.js",
     ],
     "/routerDirect": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/pages/routerDirect-1a34bfadbc088491.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/pages/routerDirect-f132fb471e65a8b9.js",
     ],
     "/script": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/pages/script-52320f59afbd096d.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/pages/script-8e2028e44b8da2d9.js",
     ],
     "/withRouter": [
-      "static/chunks/webpack-d5f35f70cffceeb2.js",
-      "static/chunks/framework-e5a13aaa6ca25cd1.js",
-      "static/chunks/main-63b0c3156c72657e.js",
-      "static/chunks/pages/withRouter-3b1a16d3dfa21c16.js",
+      "static/chunks/webpack-c1a44bedea8fda3c.js",
+      "static/chunks/framework-8abd72ada1c074fb.js",
+      "static/chunks/main-d57dc93503311544.js",
+      "static/chunks/pages/withRouter-a86d259faa012c1c.js",
     ],
   },
 };
+globalThis.__BUILD_MANIFEST.lowPriorityFiles = [
+  "/static/" + process.env.__NEXT_BUILD_ID + "/_buildManifest.js",
+  "/static/" + process.env.__NEXT_BUILD_ID + "/_ssgManifest.js",
+];
Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js
failed to diff
Diff for _buildManifest.js
@@ -611,35 +611,35 @@ self.__BUILD_MANIFEST = (function (a, b, c) {
       numHashes: NaN,
       bitArray: [],
     },
-    "/": ["static\u002Fchunks\u002Fpages\u002Findex-dda7d8b64d4ba15c.js"],
+    "/": ["static\u002Fchunks\u002Fpages\u002Findex-d95f7ec6af4d2644.js"],
     "/_error": [
-      "static\u002Fchunks\u002Fpages\u002F_error-6ef44d3954f25711.js",
+      "static\u002Fchunks\u002Fpages\u002F_error-209c0c82205a7c9f.js",
     ],
     "/css": [
       "static\u002Fcss\u002Fded6b86ab9cc0a1f.css",
-      "static\u002Fchunks\u002Fpages\u002Fcss-c8aaa7211416a045.js",
+      "static\u002Fchunks\u002Fpages\u002Fcss-62710339bc830ded.js",
     ],
     "/dynamic": [
-      "static\u002Fchunks\u002Fpages\u002Fdynamic-d53bb7f318f342c2.js",
+      "static\u002Fchunks\u002Fpages\u002Fdynamic-8ed3486bb68dd6c6.js",
     ],
     "/edge-ssr": [
-      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-1383106d4a3e7d72.js",
+      "static\u002Fchunks\u002Fpages\u002Fedge-ssr-0db9f7bb610d3072.js",
     ],
-    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-1db1c4be1a45662f.js"],
-    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-e6deee5b72a5b112.js"],
+    "/head": ["static\u002Fchunks\u002Fpages\u002Fhead-747416c4075e42aa.js"],
+    "/hooks": ["static\u002Fchunks\u002Fpages\u002Fhooks-8b10205be7505244.js"],
     "/image": [
-      "static\u002Fchunks\u002F2747-b146e0287b0310e9.js",
-      "static\u002Fchunks\u002Fpages\u002Fimage-868472cd5e84efc9.js",
+      "static\u002Fchunks\u002F6349-ee9aecde860d4832.js",
+      "static\u002Fchunks\u002Fpages\u002Fimage-f90ae17c3ad1d38b.js",
     ],
-    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-0ec374e48b2ce5d9.js"],
+    "/link": ["static\u002Fchunks\u002Fpages\u002Flink-6ab9a67b348df1bf.js"],
     "/routerDirect": [
-      "static\u002Fchunks\u002Fpages\u002FrouterDirect-1a34bfadbc088491.js",
+      "static\u002Fchunks\u002Fpages\u002FrouterDirect-f132fb471e65a8b9.js",
     ],
     "/script": [
-      "static\u002Fchunks\u002Fpages\u002Fscript-52320f59afbd096d.js",
+      "static\u002Fchunks\u002Fpages\u002Fscript-8e2028e44b8da2d9.js",
     ],
     "/withRouter": [
-      "static\u002Fchunks\u002Fpages\u002FwithRouter-3b1a16d3dfa21c16.js",
+      "static\u002Fchunks\u002Fpages\u002FwithRouter-a86d259faa012c1c.js",
     ],
     sortedPages: [
       "\u002F",
Diff for dynamic-HASH.js
@@ -1,17 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [2291],
   {
-    /***/ 1231: /***/ (
-      module,
+    /***/ 2604: /***/ (
+      __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(4464);
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/dynamic",
+        function () {
+          return __webpack_require__(3643);
+        },
+      ]);
+      if (false) {
+      }
 
       /***/
     },
 
-    /***/ 2101: /***/ (
+    /***/ 3401: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -38,24 +45,63 @@
       /***/
     },
 
-    /***/ 3458: /***/ (
+    /***/ 3643: /***/ (
       __unused_webpack_module,
-      __unused_webpack_exports,
+      __webpack_exports__,
       __webpack_require__
     ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/dynamic",
-        function () {
-          return __webpack_require__(9381);
-        },
-      ]);
-      if (false) {
-      }
+      "use strict";
+      __webpack_require__.r(__webpack_exports__);
+      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
+        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
+        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
+        /* harmony export */
+      });
+      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
+        __webpack_require__(3108);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
+        __webpack_require__(3973);
+      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
+        /*#__PURE__*/ __webpack_require__.n(
+          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
+        );
+
+      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
+        () =>
+          __webpack_require__
+            .e(/* import() */ 1596)
+            .then(__webpack_require__.bind(__webpack_require__, 1596))
+            .then((mod) => mod.Hello),
+        {
+          loadableGenerated: {
+            webpack: () => [/*require.resolve*/ 1596],
+          },
+        }
+      );
+      const Page = () =>
+        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
+          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
+          {
+            children: [
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
+                children: "testing next/dynamic size",
+              }),
+              /*#__PURE__*/ (0,
+              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
+                DynamicHello,
+                {}
+              ),
+            ],
+          }
+        );
+      var __N_SSP = true;
+      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
 
       /***/
     },
 
-    /***/ 4464: /***/ (module, exports, __webpack_require__) => {
+    /***/ 3660: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -88,7 +134,7 @@
         __webpack_require__(4312)
       );
       const _loadablesharedruntime = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(9799)
+        __webpack_require__(4539)
       );
       const isServerSide = "object" === "undefined";
       // Normalize loader to return the module as form { default: Component } for `React.lazy`.
@@ -188,63 +234,17 @@
       /***/
     },
 
-    /***/ 9381: /***/ (
-      __unused_webpack_module,
-      __webpack_exports__,
+    /***/ 3973: /***/ (
+      module,
+      __unused_webpack_exports,
       __webpack_require__
     ) => {
-      "use strict";
-      __webpack_require__.r(__webpack_exports__);
-      /* harmony export */ __webpack_require__.d(__webpack_exports__, {
-        /* harmony export */ __N_SSP: () => /* binding */ __N_SSP,
-        /* harmony export */ default: () => __WEBPACK_DEFAULT_EXPORT__,
-        /* harmony export */
-      });
-      /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3108);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1231);
-      /* harmony import */ var next_dynamic__WEBPACK_IMPORTED_MODULE_1___default =
-        /*#__PURE__*/ __webpack_require__.n(
-          next_dynamic__WEBPACK_IMPORTED_MODULE_1__
-        );
-
-      const DynamicHello = next_dynamic__WEBPACK_IMPORTED_MODULE_1___default()(
-        () =>
-          __webpack_require__
-            .e(/* import() */ 2086)
-            .then(__webpack_require__.bind(__webpack_require__, 2086))
-            .then((mod) => mod.Hello),
-        {
-          loadableGenerated: {
-            webpack: () => [/*require.resolve*/ 2086],
-          },
-        }
-      );
-      const Page = () =>
-        /*#__PURE__*/ (0, react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxs)(
-          react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment,
-          {
-            children: [
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)("p", {
-                children: "testing next/dynamic size",
-              }),
-              /*#__PURE__*/ (0,
-              react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__.jsx)(
-                DynamicHello,
-                {}
-              ),
-            ],
-          }
-        );
-      var __N_SSP = true;
-      /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = Page;
+      module.exports = __webpack_require__(3660);
 
       /***/
     },
 
-    /***/ 9799: /***/ (
+    /***/ 4539: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -286,7 +286,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
       const _react = /*#__PURE__*/ _interop_require_default._(
         __webpack_require__(4312)
       );
-      const _loadablecontextsharedruntime = __webpack_require__(2101);
+      const _loadablecontextsharedruntime = __webpack_require__(3401);
       function resolve(obj) {
         return obj && obj.default ? obj.default : obj;
       }
@@ -524,7 +524,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(3458)
+      __webpack_exec__(2604)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for edge-ssr-HASH.js
@@ -1,7 +1,24 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [676],
   {
-    /***/ 1564: /***/ (
+    /***/ 7046: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/edge-ssr",
+        function () {
+          return __webpack_require__(7142);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7142: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -20,30 +37,13 @@
 
       /***/
     },
-
-    /***/ 4300: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/edge-ssr",
-        function () {
-          return __webpack_require__(1564);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4300)
+      __webpack_exec__(7046)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for head-HASH.js
@@ -1,34 +1,17 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [5350],
   {
-    /***/ 1548: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/head",
-        function () {
-          return __webpack_require__(4282);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 3952: /***/ (
+    /***/ 3770: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(1653);
+      module.exports = __webpack_require__(9025);
 
       /***/
     },
 
-    /***/ 4282: /***/ (
+    /***/ 6236: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +26,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(3952);
+        __webpack_require__(3770);
       /* harmony import */ var next_head__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_head__WEBPACK_IMPORTED_MODULE_1__
@@ -76,13 +59,30 @@
 
       /***/
     },
+
+    /***/ 6510: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/head",
+        function () {
+          return __webpack_require__(6236);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(1548)
+      __webpack_exec__(6510)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for index-HASH.js
@@ -1,24 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3332],
   {
-    /***/ 6376: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/",
-        function () {
-          return __webpack_require__(8460);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 8460: /***/ (
+    /***/ 830: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -36,13 +19,30 @@
 
       /***/
     },
+
+    /***/ 1938: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/",
+        function () {
+          return __webpack_require__(830);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6376)
+      __webpack_exec__(1938)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for link-HASH.js
@@ -1,7 +1,220 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4672],
   {
-    /***/ 857: /***/ (module, exports, __webpack_require__) => {
+    /***/ 2774: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useIntersection", {
+        enumerable: true,
+        get: function () {
+          return useIntersection;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      const _requestidlecallback = __webpack_require__(9413);
+      const hasIntersectionObserver =
+        typeof IntersectionObserver === "function";
+      const observers = new Map();
+      const idList = [];
+      function createObserver(options) {
+        const id = {
+          root: options.root || null,
+          margin: options.rootMargin || "",
+        };
+        const existing = idList.find(
+          (obj) => obj.root === id.root && obj.margin === id.margin
+        );
+        let instance;
+        if (existing) {
+          instance = observers.get(existing);
+          if (instance) {
+            return instance;
+          }
+        }
+        const elements = new Map();
+        const observer = new IntersectionObserver((entries) => {
+          entries.forEach((entry) => {
+            const callback = elements.get(entry.target);
+            const isVisible =
+              entry.isIntersecting || entry.intersectionRatio > 0;
+            if (callback && isVisible) {
+              callback(isVisible);
+            }
+          });
+        }, options);
+        instance = {
+          id,
+          observer,
+          elements,
+        };
+        idList.push(id);
+        observers.set(id, instance);
+        return instance;
+      }
+      function observe(element, callback, options) {
+        const { id, observer, elements } = createObserver(options);
+        elements.set(element, callback);
+        observer.observe(element);
+        return function unobserve() {
+          elements.delete(element);
+          observer.unobserve(element);
+          // Destroy observer when there's nothing left to watch:
+          if (elements.size === 0) {
+            observer.disconnect();
+            observers.delete(id);
+            const index = idList.findIndex(
+              (obj) => obj.root === id.root && obj.margin === id.margin
+            );
+            if (index > -1) {
+              idList.splice(index, 1);
+            }
+          }
+        };
+      }
+      function useIntersection({ rootRef, rootMargin, disabled }) {
+        const isDisabled = disabled || !hasIntersectionObserver;
+        const [visible, setVisible] = (0, _react.useState)(false);
+        const elementRef = (0, _react.useRef)(null);
+        const setElement = (0, _react.useCallback)((element) => {
+          elementRef.current = element;
+        }, []);
+        (0, _react.useEffect)(() => {
+          if (hasIntersectionObserver) {
+            if (isDisabled || visible) return;
+            const element = elementRef.current;
+            if (element && element.tagName) {
+              const unobserve = observe(
+                element,
+                (isVisible) => isVisible && setVisible(isVisible),
+                {
+                  root: rootRef?.current,
+                  rootMargin,
+                }
+              );
+              return unobserve;
+            }
+          } else {
+            if (!visible) {
+              const idleCallback = (0,
+              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
+              return () =>
+                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
+            }
+          }
+          // eslint-disable-next-line react-hooks/exhaustive-deps
+        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
+        const resetVisible = (0, _react.useCallback)(() => {
+          setVisible(false);
+        }, []);
+        return [setElement, visible, resetVisible];
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-intersection.js.map
+
+      /***/
+    },
+
+    /***/ 3351: /***/ (module, exports, __webpack_require__) => {
+      "use strict";
+
+      Object.defineProperty(exports, "__esModule", {
+        value: true,
+      });
+      Object.defineProperty(exports, "useMergedRef", {
+        enumerable: true,
+        get: function () {
+          return useMergedRef;
+        },
+      });
+      const _react = __webpack_require__(4312);
+      function useMergedRef(refA, refB) {
+        const cleanupA = (0, _react.useRef)(null);
+        const cleanupB = (0, _react.useRef)(null);
+        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
+        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
+        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
+        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
+        // (because it hasn't been updated for React 19)
+        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
+        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
+        return (0, _react.useCallback)(
+          (current) => {
+            if (current === null) {
+              const cleanupFnA = cleanupA.current;
+              if (cleanupFnA) {
+                cleanupA.current = null;
+                cleanupFnA();
+              }
+              const cleanupFnB = cleanupB.current;
+              if (cleanupFnB) {
+                cleanupB.current = null;
+                cleanupFnB();
+              }
+            } else {
+              if (refA) {
+                cleanupA.current = applyRef(refA, current);
+              }
+              if (refB) {
+                cleanupB.current = applyRef(refB, current);
+              }
+            }
+          },
+          [refA, refB]
+        );
+      }
+      function applyRef(refA, current) {
+        if (typeof refA === "function") {
+          const cleanup = refA(current);
+          if (typeof cleanup === "function") {
+            return cleanup;
+          } else {
+            return () => refA(null);
+          }
+        } else {
+          refA.current = current;
+          return () => {
+            refA.current = null;
+          };
+        }
+      }
+      if (
+        (typeof exports.default === "function" ||
+          (typeof exports.default === "object" && exports.default !== null)) &&
+        typeof exports.default.__esModule === "undefined"
+      ) {
+        Object.defineProperty(exports.default, "__esModule", {
+          value: true,
+        });
+        Object.assign(exports.default, exports);
+        module.exports = exports.default;
+      } //# sourceMappingURL=use-merged-ref.js.map
+
+      /***/
+    },
+
+    /***/ 3440: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(4757);
+
+      /***/
+    },
+
+    /***/ 4757: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -23,22 +236,22 @@
           return useLinkStatus;
         },
       });
-      const _interop_require_wildcard = __webpack_require__(8781);
+      const _interop_require_wildcard = __webpack_require__(1162);
       const _jsxruntime = __webpack_require__(3108);
       const _react = /*#__PURE__*/ _interop_require_wildcard._(
         __webpack_require__(4312)
       );
-      const _resolvehref = __webpack_require__(4055);
-      const _islocalurl = __webpack_require__(7175);
-      const _formaturl = __webpack_require__(9674);
-      const _utils = __webpack_require__(7424);
-      const _addlocale = __webpack_require__(589);
-      const _routercontextsharedruntime = __webpack_require__(7010);
-      const _useintersection = __webpack_require__(2330);
-      const _getdomainlocale = __webpack_require__(7207);
-      const _addbasepath = __webpack_require__(9942);
-      const _usemergedref = __webpack_require__(8067);
-      const _erroronce = __webpack_require__(1945);
+      const _resolvehref = __webpack_require__(4691);
+      const _islocalurl = __webpack_require__(4763);
+      const _formaturl = __webpack_require__(3246);
+      const _utils = __webpack_require__(7372);
+      const _addlocale = __webpack_require__(1809);
+      const _routercontextsharedruntime = __webpack_require__(2254);
+      const _useintersection = __webpack_require__(2774);
+      const _getdomainlocale = __webpack_require__(8803);
+      const _addbasepath = __webpack_require__(5834);
+      const _usemergedref = __webpack_require__(3351);
+      const _erroronce = __webpack_require__(6021);
       const prefetched = new Set();
       function prefetch(router, href, as, options) {
         if (false) {
@@ -417,168 +630,43 @@
       /***/
     },
 
-    /***/ 1945: /***/ (__unused_webpack_module, exports) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "errorOnce", {
-        enumerable: true,
-        get: function () {
-          return errorOnce;
+    /***/ 5326: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/link",
+        function () {
+          return __webpack_require__(9058);
         },
-      });
-      let errorOnce = (_) => {};
+      ]);
       if (false) {
-      } //# sourceMappingURL=error-once.js.map
+      }
 
       /***/
     },
 
-    /***/ 2330: /***/ (module, exports, __webpack_require__) => {
+    /***/ 6021: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
         value: true,
       });
-      Object.defineProperty(exports, "useIntersection", {
+      Object.defineProperty(exports, "errorOnce", {
         enumerable: true,
         get: function () {
-          return useIntersection;
+          return errorOnce;
         },
       });
-      const _react = __webpack_require__(4312);
-      const _requestidlecallback = __webpack_require__(601);
-      const hasIntersectionObserver =
-        typeof IntersectionObserver === "function";
-      const observers = new Map();
-      const idList = [];
-      function createObserver(options) {
-        const id = {
-          root: options.root || null,
-          margin: options.rootMargin || "",
-        };
-        const existing = idList.find(
-          (obj) => obj.root === id.root && obj.margin === id.margin
-        );
-        let instance;
-        if (existing) {
-          instance = observers.get(existing);
-          if (instance) {
-            return instance;
-          }
-        }
-        const elements = new Map();
-        const observer = new IntersectionObserver((entries) => {
-          entries.forEach((entry) => {
-            const callback = elements.get(entry.target);
-            const isVisible =
-              entry.isIntersecting || entry.intersectionRatio > 0;
-            if (callback && isVisible) {
-              callback(isVisible);
-            }
-          });
-        }, options);
-        instance = {
-          id,
-          observer,
-          elements,
-        };
-        idList.push(id);
-        observers.set(id, instance);
-        return instance;
-      }
-      function observe(element, callback, options) {
-        const { id, observer, elements } = createObserver(options);
-        elements.set(element, callback);
-        observer.observe(element);
-        return function unobserve() {
-          elements.delete(element);
-          observer.unobserve(element);
-          // Destroy observer when there's nothing left to watch:
-          if (elements.size === 0) {
-            observer.disconnect();
-            observers.delete(id);
-            const index = idList.findIndex(
-              (obj) => obj.root === id.root && obj.margin === id.margin
-            );
-            if (index > -1) {
-              idList.splice(index, 1);
-            }
-          }
-        };
-      }
-      function useIntersection({ rootRef, rootMargin, disabled }) {
-        const isDisabled = disabled || !hasIntersectionObserver;
-        const [visible, setVisible] = (0, _react.useState)(false);
-        const elementRef = (0, _react.useRef)(null);
-        const setElement = (0, _react.useCallback)((element) => {
-          elementRef.current = element;
-        }, []);
-        (0, _react.useEffect)(() => {
-          if (hasIntersectionObserver) {
-            if (isDisabled || visible) return;
-            const element = elementRef.current;
-            if (element && element.tagName) {
-              const unobserve = observe(
-                element,
-                (isVisible) => isVisible && setVisible(isVisible),
-                {
-                  root: rootRef?.current,
-                  rootMargin,
-                }
-              );
-              return unobserve;
-            }
-          } else {
-            if (!visible) {
-              const idleCallback = (0,
-              _requestidlecallback.requestIdleCallback)(() => setVisible(true));
-              return () =>
-                (0, _requestidlecallback.cancelIdleCallback)(idleCallback);
-            }
-          }
-          // eslint-disable-next-line react-hooks/exhaustive-deps
-        }, [isDisabled, rootMargin, rootRef, visible, elementRef.current]);
-        const resetVisible = (0, _react.useCallback)(() => {
-          setVisible(false);
-        }, []);
-        return [setElement, visible, resetVisible];
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-intersection.js.map
-
-      /***/
-    },
-
-    /***/ 4972: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/link",
-        function () {
-          return __webpack_require__(7600);
-        },
-      ]);
+      let errorOnce = (_) => {};
       if (false) {
-      }
+      } //# sourceMappingURL=error-once.js.map
 
       /***/
     },
 
-    /***/ 7207: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8803: /***/ (module, exports, __webpack_require__) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -590,7 +678,7 @@
           return getDomainLocale;
         },
       });
-      const _normalizetrailingslash = __webpack_require__(151);
+      const _normalizetrailingslash = __webpack_require__(1315);
       const basePath =
         /* unused pure expression or super */ null && (false || "");
       function getDomainLocale(path, locale, locales, domainLocales) {
@@ -614,7 +702,7 @@
       /***/
     },
 
-    /***/ 7600: /***/ (
+    /***/ 9058: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -629,7 +717,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(7830);
+        __webpack_require__(3440);
       /* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_link__WEBPACK_IMPORTED_MODULE_1__
@@ -659,101 +747,13 @@
 
       /***/
     },
-
-    /***/ 7830: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(857);
-
-      /***/
-    },
-
-    /***/ 8067: /***/ (module, exports, __webpack_require__) => {
-      "use strict";
-
-      Object.defineProperty(exports, "__esModule", {
-        value: true,
-      });
-      Object.defineProperty(exports, "useMergedRef", {
-        enumerable: true,
-        get: function () {
-          return useMergedRef;
-        },
-      });
-      const _react = __webpack_require__(4312);
-      function useMergedRef(refA, refB) {
-        const cleanupA = (0, _react.useRef)(null);
-        const cleanupB = (0, _react.useRef)(null);
-        // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.
-        // (this happens often if the user doesn't pass a ref to Link/Form/Image)
-        // But this can cause us to leak a cleanup-ref into user code (previously via `<Link legacyBehavior>`),
-        // and the user might pass that ref into ref-merging library that doesn't support cleanup refs
-        // (because it hasn't been updated for React 19)
-        // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.
-        // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.
-        return (0, _react.useCallback)(
-          (current) => {
-            if (current === null) {
-              const cleanupFnA = cleanupA.current;
-              if (cleanupFnA) {
-                cleanupA.current = null;
-                cleanupFnA();
-              }
-              const cleanupFnB = cleanupB.current;
-              if (cleanupFnB) {
-                cleanupB.current = null;
-                cleanupFnB();
-              }
-            } else {
-              if (refA) {
-                cleanupA.current = applyRef(refA, current);
-              }
-              if (refB) {
-                cleanupB.current = applyRef(refB, current);
-              }
-            }
-          },
-          [refA, refB]
-        );
-      }
-      function applyRef(refA, current) {
-        if (typeof refA === "function") {
-          const cleanup = refA(current);
-          if (typeof cleanup === "function") {
-            return cleanup;
-          } else {
-            return () => refA(null);
-          }
-        } else {
-          refA.current = current;
-          return () => {
-            refA.current = null;
-          };
-        }
-      }
-      if (
-        (typeof exports.default === "function" ||
-          (typeof exports.default === "object" && exports.default !== null)) &&
-        typeof exports.default.__esModule === "undefined"
-      ) {
-        Object.defineProperty(exports.default, "__esModule", {
-          value: true,
-        });
-        Object.assign(exports.default, exports);
-        module.exports = exports.default;
-      } //# sourceMappingURL=use-merged-ref.js.map
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(4972)
+      __webpack_exec__(5326)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for routerDirect-HASH.js
@@ -1,17 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [188],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 1640: /***/ (
+    /***/ 2014: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -46,7 +36,17 @@
       /***/
     },
 
-    /***/ 2172: /***/ (
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
+
+    /***/ 4414: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -54,7 +54,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/routerDirect",
         function () {
-          return __webpack_require__(1640);
+          return __webpack_require__(2014);
         },
       ]);
       if (false) {
@@ -68,7 +68,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2172)
+      __webpack_exec__(4414)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for script-HASH.js
@@ -1,17 +1,34 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [1209],
   {
-    /***/ 4977: /***/ (
+    /***/ 2591: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(326);
+      module.exports = __webpack_require__(4634);
 
       /***/
     },
 
-    /***/ 5887: /***/ (
+    /***/ 5030: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/script",
+        function () {
+          return __webpack_require__(7557);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 7557: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -26,7 +43,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(4977);
+        __webpack_require__(2591);
       /* harmony import */ var next_script__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_script__WEBPACK_IMPORTED_MODULE_1__
@@ -58,30 +75,13 @@
 
       /***/
     },
-
-    /***/ 6268: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/script",
-        function () {
-          return __webpack_require__(5887);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(6268)
+      __webpack_exec__(5030)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for withRouter-HASH.js
@@ -1,34 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [3263],
   {
-    /***/ 1179: /***/ (
-      module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      module.exports = __webpack_require__(9864);
-
-      /***/
-    },
-
-    /***/ 2028: /***/ (
-      __unused_webpack_module,
-      __unused_webpack_exports,
-      __webpack_require__
-    ) => {
-      (window.__NEXT_P = window.__NEXT_P || []).push([
-        "/withRouter",
-        function () {
-          return __webpack_require__(4501);
-        },
-      ]);
-      if (false) {
-      }
-
-      /***/
-    },
-
-    /***/ 4501: /***/ (
+    /***/ 559: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -43,7 +16,7 @@
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
         __webpack_require__(3108);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1__ =
-        __webpack_require__(1179);
+        __webpack_require__(4169);
       /* harmony import */ var next_router__WEBPACK_IMPORTED_MODULE_1___default =
         /*#__PURE__*/ __webpack_require__.n(
           next_router__WEBPACK_IMPORTED_MODULE_1__
@@ -61,13 +34,40 @@
 
       /***/
     },
+
+    /***/ 726: /***/ (
+      __unused_webpack_module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      (window.__NEXT_P = window.__NEXT_P || []).push([
+        "/withRouter",
+        function () {
+          return __webpack_require__(559);
+        },
+      ]);
+      if (false) {
+      }
+
+      /***/
+    },
+
+    /***/ 4169: /***/ (
+      module,
+      __unused_webpack_exports,
+      __webpack_require__
+    ) => {
+      module.exports = __webpack_require__(9700);
+
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [636, 6593, 8792], () =>
-      __webpack_exec__(2028)
+      __webpack_exec__(726)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for 2161-HASH.js

Diff too large to display

Diff for 2747-HASH.js

Diff too large to display

Diff for 4322-HASH.js
failed to diff
Diff for ec793fe8-HASH.js
@@ -1,13 +1,13 @@
 "use strict";
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
-  [5639],
+  [8580],
   {
-    /***/ 5808: /***/ (
+    /***/ 2314: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
     ) => {
-      /* provided dependency */ var process = __webpack_require__(6075);
+      /* provided dependency */ var process = __webpack_require__(2433);
       /**
        * @license React
        * react-dom-client.production.js
@@ -22,9 +22,9 @@
  Modernizr 3.0.0pre (Custom Build) | MIT
 */
 
-      var Scheduler = __webpack_require__(212),
-        React = __webpack_require__(8947),
-        ReactDOM = __webpack_require__(4629);
+      var Scheduler = __webpack_require__(9018),
+        React = __webpack_require__(6009),
+        ReactDOM = __webpack_require__(5932);
       function formatProdErrorMessage(code) {
         var url = "https://react.dev/errors/" + code;
         if (1 < arguments.length) {
@@ -47,16 +47,18 @@
         );
       }
       function getNearestMountedFiber(fiber) {
-        for (
-          var node = fiber, nextNode = node;
-          nextNode && !nextNode.alternate;
-
-        )
-          (node = nextNode),
-            0 !== (node.flags & 4098) && (fiber = node.return),
-            (nextNode = node.return);
-        for (; node.return; ) node = node.return;
-        return 3 === node.tag ? fiber : null;
+        var node = fiber,
+          nearestMounted = fiber;
+        if (fiber.alternate) for (; node.return; ) node = node.return;
+        else {
+          fiber = node;
+          do
+            (node = fiber),
+              0 !== (node.flags & 4098) && (nearestMounted = node.return),
+              (fiber = node.return);
+          while (fiber);
+        }
+        return 3 === node.tag ? nearestMounted : null;
       }
       function getSuspenseInstanceFromFiber(fiber) {
         if (13 === fiber.tag) {
@@ -2709,7 +2711,7 @@
             (workInProgress.flags = 0),
             (workInProgress.subtreeFlags = 0),
             (workInProgress.deletions = null));
-        workInProgress.flags = current.flags & 133169152;
+        workInProgress.flags = current.flags & 132120576;
         workInProgress.childLanes = current.childLanes;
         workInProgress.lanes = current.lanes;
         workInProgress.child = current.child;
@@ -2731,7 +2733,7 @@
         return workInProgress;
       }
       function resetWorkInProgress(workInProgress, renderLanes) {
-        workInProgress.flags &= 133169154;
+        workInProgress.flags &= 132120578;
         var current = workInProgress.alternate;
         null === current
           ? ((workInProgress.childLanes = 0),
@@ -5658,7 +5660,7 @@
             hook
           );
         if (
-          0 === (renderLanes & 106) ||
+          0 === (renderLanes & 42) ||
           (0 !== (renderLanes & 1073741824) &&
             0 === (workInProgressRootRenderLanes & 261930))
         )
@@ -5934,32 +5936,32 @@
         }
       }
       var ContextOnlyDispatcher = {
-          readContext: readContext,
-          use: use,
-          useCallback: throwInvalidHookError,
-          useContext: throwInvalidHookError,
-          useEffect: throwInvalidHookError,
-          useImperativeHandle: throwInvalidHookError,
-          useLayoutEffect: throwInvalidHookError,
-          useInsertionEffect: throwInvalidHookError,
-          useMemo: throwInvalidHookError,
-          useReducer: throwInvalidHookError,
-          useRef: throwInvalidHookError,
-          useState: throwInvalidHookError,
-          useDebugValue: throwInvalidHookError,
-          useDeferredValue: throwInvalidHookError,
-          useTransition: throwInvalidHookError,
-          useSyncExternalStore: throwInvalidHookError,
-          useId: throwInvalidHookError,
-          useHostTransitionStatus: throwInvalidHookError,
-          useFormState: throwInvalidHookError,
-          useActionState: throwInvalidHookError,
-          useOptimistic: throwInvalidHookError,
-          useMemoCache: throwInvalidHookError,
-          useCacheRefresh: throwInvalidHookError,
-          useEffectEvent: throwInvalidHookError,
-        },
-        HooksDispatcherOnMount = {
+        readContext: readContext,
+        use: use,
+        useCallback: throwInvalidHookError,
+        useContext: throwInvalidHookError,
+        useEffect: throwInvalidHookError,
+        useImperativeHandle: throwInvalidHookError,
+        useLayoutEffect: throwInvalidHookError,
+        useInsertionEffect: throwInvalidHookError,
+        useMemo: throwInvalidHookError,
+        useReducer: throwInvalidHookError,
+        useRef: throwInvalidHookError,
+        useState: throwInvalidHookError,
+        useDebugValue: throwInvalidHookError,
+        useDeferredValue: throwInvalidHookError,
+        useTransition: throwInvalidHookError,
+        useSyncExternalStore: throwInvalidHookError,
+        useId: throwInvalidHookError,
+        useHostTransitionStatus: throwInvalidHookError,
+        useFormState: throwInvalidHookError,
+        useActionState: throwInvalidHookError,
+        useOptimistic: throwInvalidHookError,
+        useMemoCache: throwInvalidHookError,
+        useCacheRefresh: throwInvalidHookError,
+      };
+      ContextOnlyDispatcher.useEffectEvent = throwInvalidHookError;
+      var HooksDispatcherOnMount = {
           readContext: readContext,
           use: use,
           useCallback: function (callback, deps) {
@@ -6225,66 +6227,66 @@
           },
           useMemoCache: useMemoCache,
           useCacheRefresh: updateRefresh,
-          useEffectEvent: updateEvent,
+        };
+      HooksDispatcherOnUpdate.useEffectEvent = updateEvent;
+      var HooksDispatcherOnRerender = {
+        readContext: readContext,
+        use: use,
+        useCallback: updateCallback,
+        useContext: readContext,
+        useEffect: updateEffect,
+        useImperativeHandle: updateImperativeHandle,
+        useInsertionEffect: updateInsertionEffect,
+        useLayoutEffect: updateLayoutEffect,
+        useMemo: updateMemo,
+        useReducer: rerenderReducer,
+        useRef: updateRef,
+        useState: function () {
+          return rerenderReducer(basicStateReducer);
         },
-        HooksDispatcherOnRerender = {
-          readContext: readContext,
-          use: use,
-          useCallback: updateCallback,
-          useContext: readContext,
-          useEffect: updateEffect,
-          useImperativeHandle: updateImperativeHandle,
-          useInsertionEffect: updateInsertionEffect,
-          useLayoutEffect: updateLayoutEffect,
-          useMemo: updateMemo,
-          useReducer: rerenderReducer,
-          useRef: updateRef,
-          useState: function () {
-            return rerenderReducer(basicStateReducer);
-          },
-          useDebugValue: mountDebugValue,
-          useDeferredValue: function (value, initialValue) {
-            var hook = updateWorkInProgressHook();
-            return null === currentHook
-              ? mountDeferredValueImpl(hook, value, initialValue)
-              : updateDeferredValueImpl(
-                  hook,
-                  currentHook.memoizedState,
-                  value,
-                  initialValue
-                );
-          },
-          useTransition: function () {
-            var booleanOrThenable = rerenderReducer(basicStateReducer)[0],
-              start = updateWorkInProgressHook().memoizedState;
-            return [
-              "boolean" === typeof booleanOrThenable
-                ? booleanOrThenable
-                : useThenable(booleanOrThenable),
-              start,
-            ];
-          },
-          useSyncExternalStore: updateSyncExternalStore,
-          useId: updateId,
-          useHostTransitionStatus: useHostTransitionStatus,
-          useFormState: rerenderActionState,
-          useActionState: rerenderActionState,
-          useOptimistic: function (passthrough, reducer) {
-            var hook = updateWorkInProgressHook();
-            if (null !== currentHook)
-              return updateOptimisticImpl(
+        useDebugValue: mountDebugValue,
+        useDeferredValue: function (value, initialValue) {
+          var hook = updateWorkInProgressHook();
+          return null === currentHook
+            ? mountDeferredValueImpl(hook, value, initialValue)
+            : updateDeferredValueImpl(
                 hook,
-                currentHook,
-                passthrough,
-                reducer
+                currentHook.memoizedState,
+                value,
+                initialValue
               );
-            hook.baseState = passthrough;
-            return [passthrough, hook.queue.dispatch];
-          },
-          useMemoCache: useMemoCache,
-          useCacheRefresh: updateRefresh,
-          useEffectEvent: updateEvent,
-        };
+        },
+        useTransition: function () {
+          var booleanOrThenable = rerenderReducer(basicStateReducer)[0],
+            start = updateWorkInProgressHook().memoizedState;
+          return [
+            "boolean" === typeof booleanOrThenable
+              ? booleanOrThenable
+              : useThenable(booleanOrThenable),
+            start,
+          ];
+        },
+        useSyncExternalStore: updateSyncExternalStore,
+        useId: updateId,
+        useHostTransitionStatus: useHostTransitionStatus,
+        useFormState: rerenderActionState,
+        useActionState: rerenderActionState,
+        useOptimistic: function (passthrough, reducer) {
+          var hook = updateWorkInProgressHook();
+          if (null !== currentHook)
+            return updateOptimisticImpl(
+              hook,
+              currentHook,
+              passthrough,
+              reducer
+            );
+          hook.baseState = passthrough;
+          return [passthrough, hook.queue.dispatch];
+        },
+        useMemoCache: useMemoCache,
+        useCacheRefresh: updateRefresh,
+      };
+      HooksDispatcherOnRerender.useEffectEvent = updateEvent;
       function applyDerivedStateFromProps(
         workInProgress,
         ctor,
@@ -7656,7 +7658,7 @@
               mode: "hidden",
               children: nextProps.children,
             })),
-            (nextProps.subtreeFlags = prevState.subtreeFlags & 133169152),
+            (nextProps.subtreeFlags = prevState.subtreeFlags & 132120576),
             null !== digest
               ? (nextPrimaryChildren = createWorkInProgress(
                   digest,
@@ -8595,13 +8597,6 @@
             );
           case 30:
             return (
-              null === workInProgress.stateNode &&
-                (workInProgress.stateNode = {
-                  autoName: null,
-                  paired: null,
-                  clones: null,
-                  ref: null,
-                }),
               (props = workInProgress.pendingProps),
               null != props.name && "auto" !== props.name
                 ? (workInProgress.flags |=
@@ -8719,8 +8714,8 @@
         if (didBailout)
           for (var child$111 = completedWork.child; null !== child$111; )
             (newChildLanes |= child$111.lanes | child$111.childLanes),
-              (subtreeFlags |= child$111.subtreeFlags & 133169152),
-              (subtreeFlags |= child$111.flags & 133169152),
+              (subtreeFlags |= child$111.subtreeFlags & 132120576),
+              (subtreeFlags |= child$111.flags & 132120576),
               (child$111.return = completedWork),
               (child$111 = child$111.sibling);
         else
@@ -10113,9 +10108,7 @@
                 (viewTransitionCancelableChildren = []),
               viewTransitionCancelableChildren.push(
                 instance,
-                0 === viewTransitionHostInstanceIdx
-                  ? oldName
-                  : oldName + "_" + viewTransitionHostInstanceIdx,
+                oldName,
                 child.memoizedProps
               ));
             viewTransitionHostInstanceIdx++;
@@ -12675,7 +12668,7 @@
                 if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;
                 pendingEffectsLanes = lanes;
                 shouldTimeSlice.timeoutHandle = scheduleTimeout(
-                  completeRootWhenReady.bind(
+                  commitRootWhenReady.bind(
                     null,
                     shouldTimeSlice,
                     forceSync,
@@ -12696,7 +12689,7 @@
                 );
                 break a;
               }
-              completeRootWhenReady(
+              commitRootWhenReady(
                 shouldTimeSlice,
                 forceSync,
                 workInProgressRootRecoverableErrors,
@@ -12718,7 +12711,7 @@
         } while (1);
         ensureRootIsScheduled(root$jscomp$0);
       }
-      function completeRootWhenReady(
+      function commitRootWhenReady(
         root,
         finishedWork,
         recoverableErrors,
@@ -12790,7 +12783,7 @@
           ) {
             pendingEffectsLanes = lanes;
             root.cancelPendingCommit = subtreeFlags(
-              completeRoot.bind(
+              commitRoot.bind(
                 null,
                 root,
                 finishedWork,
@@ -12801,7 +12794,6 @@
                 spawnedLane,
                 updatedLanes,
                 suspendedRetryLanes,
-                didSkipSuspendedSiblings,
                 exitStatus,
                 suspendedCommitReason,
                 null,
@@ -12817,7 +12809,7 @@
             );
             return;
           }
-        completeRoot(
+        commitRoot(
           root,
           finishedWork,
           lanes,
@@ -12827,7 +12819,6 @@
           spawnedLane,
           updatedLanes,
           suspendedRetryLanes,
-          didSkipSuspendedSiblings,
           exitStatus,
           suspendedCommitReason
         );
@@ -13264,14 +13255,6 @@
             break;
           case 5:
             resetHooksOnUnwind(next);
-            var fiber = next;
-            fiber === hydrationParentFiber &&
-              (isHydrating
-                ? (popToNextHostParent(fiber),
-                  5 === fiber.tag &&
-                    null != fiber.stateNode &&
-                    (nextHydratableInstance = fiber.stateNode))
-                : (popToNextHostParent(fiber), (isHydrating = !0)));
           default:
             unwindInterruptedWork(current, next),
               (next = workInProgress =
@@ -13399,7 +13382,7 @@
         workInProgressRootExitStatus = 6;
         workInProgress = null;
       }
-      function completeRoot(
+      function commitRoot(
         root,
         finishedWork,
         lanes,
@@ -13409,7 +13392,6 @@
         spawnedLane,
         updatedLanes,
         suspendedRetryLanes,
-        didSkipSuspendedSiblings,
         exitStatus,
         suspendedState
       ) {
@@ -13421,92 +13403,77 @@
         if (null !== finishedWork) {
           if (finishedWork === root.current)
             throw Error(formatProdErrorMessage(177));
+          didIncludeRenderPhaseUpdate =
+            finishedWork.lanes | finishedWork.childLanes;
+          didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;
+          markRootFinished(
+            root,
+            lanes,
+            didIncludeRenderPhaseUpdate,
+            spawnedLane,
+            updatedLanes,
+            suspendedRetryLanes
+          );
           root === workInProgressRoot &&
             ((workInProgress = workInProgressRoot = null),
             (workInProgressRootRenderLanes = 0));
           pendingFinishedWork = finishedWork;
           pendingEffectsRoot = root;
           pendingEffectsLanes = lanes;
+          pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;
           pendingPassiveTransitions = transitions;
           pendingRecoverableErrors = recoverableErrors;
-          commitRoot(
-            root,
-            finishedWork,
-            lanes,
-            spawnedLane,
-            updatedLanes,
-            suspendedRetryLanes,
-            suspendedState
-          );
-        }
-      }
-      function commitRoot(
-        root,
-        finishedWork,
-        lanes,
-        spawnedLane,
-        updatedLanes,
-        suspendedRetryLanes,
-        suspendedState
-      ) {
-        var remainingLanes = finishedWork.lanes | finishedWork.childLanes;
-        pendingEffectsRemainingLanes = remainingLanes;
-        remainingLanes |= concurrentlyUpdatedLanes;
-        markRootFinished(
-          root,
-          lanes,
-          remainingLanes,
-          spawnedLane,
-          updatedLanes,
-          suspendedRetryLanes
-        );
-        pendingViewTransitionEvents = null;
-        (lanes & 335544064) === lanes
-          ? ((pendingTransitionTypes = claimQueuedTransitionTypes(root)),
-            (spawnedLane = 10262))
-          : ((pendingTransitionTypes = null), (spawnedLane = 10256));
-        0 !== (finishedWork.subtreeFlags & spawnedLane) ||
-        0 !== (finishedWork.flags & spawnedLane)
-          ? ((root.callbackNode = null),
-            (root.callbackPriority = 0),
-            scheduleCallback$1(NormalPriority$1, function () {
-              flushPassiveEffects();
-              return null;
-            }))
-          : ((root.callbackNode = null), (root.callbackPriority = 0));
-        shouldStartViewTransition = !1;
-        spawnedLane = 0 !== (finishedWork.flags & 13878);
-        if (0 !== (finishedWork.subtreeFlags & 13878) || spawnedLane) {
-          spawnedLane = ReactSharedInternals.T;
-          ReactSharedInternals.T = null;
-          updatedLanes = ReactDOMSharedInternals.p;
-          ReactDOMSharedInternals.p = 2;
-          suspendedRetryLanes = executionContext;
-          executionContext |= 4;
-          try {
-            commitBeforeMutationEffects(root, finishedWork, lanes);
-          } finally {
-            (executionContext = suspendedRetryLanes),
-              (ReactDOMSharedInternals.p = updatedLanes),
-              (ReactSharedInternals.T = spawnedLane);
+          pendingViewTransitionEvents = null;
+          (lanes & 335544064) === lanes
+            ? ((pendingTransitionTypes = claimQueuedTransitionTypes(root)),
+              (recoverableErrors = 10262))
+            : ((pendingTransitionTypes = null), (recoverableErrors = 10256));
+          0 !== (finishedWork.subtreeFlags & recoverableErrors) ||
+          0 !== (finishedWork.flags & recoverableErrors)
+            ? ((root.callbackNode = null),
+              (root.callbackPriority = 0),
+              scheduleCallback$1(NormalPriority$1, function () {
+                flushPassiveEffects();
+                return null;
+              }))
+            : ((root.callbackNode = null), (root.callbackPriority = 0));
+          shouldStartViewTransition = !1;
+          recoverableErrors = 0 !== (finishedWork.flags & 13878);
+          if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {
+            recoverableErrors = ReactSharedInternals.T;
+            ReactSharedInternals.T = null;
+            transitions = ReactDOMSharedInternals.p;
+            ReactDOMSharedInternals.p = 2;
+            spawnedLane = executionContext;
+            executionContext |= 4;
+            try {
+              commitBeforeMutationEffects(root, finishedWork, lanes);
+            } finally {
+              (executionContext = spawnedLane),
+                (ReactDOMSharedInternals.p = transitions),
+                (ReactSharedInternals.T = recoverableErrors);
+            }
           }
+          finishedWork = shouldStartViewTransition;
+          pendingEffectsStatus = 1;
+          finishedWork
+            ? (pendingViewTransition = startViewTransition(
+                suspendedState,
+                root.containerInfo,
+                pendingTransitionTypes,
+                flushMutationEffects,
+                flushLayoutEffects,
+                flushAfterMutationEffects,
+                flushSpawnedWork,
+                flushPassiveEffects,
+                reportViewTransitionError,
+                null,
+                null
+              ))
+            : (flushMutationEffects(),
+              flushLayoutEffects(),
+              flushSpawnedWork());
         }
-        pendingEffectsStatus = 1;
-        shouldStartViewTransition
-          ? (pendingViewTransition = startViewTransition(
-              suspendedState,
-              root.containerInfo,
-              pendingTransitionTypes,
-              flushMutationEffects,
-              flushLayoutEffects,
-              flushAfterMutationEffects,
-              flushSpawnedWork,
-              flushPassiveEffects,
-              reportViewTransitionError,
-              null,
-              null
-            ))
-          : (flushMutationEffects(), flushLayoutEffects(), flushSpawnedWork());
       }
       function reportViewTransitionError(error) {
         if (0 !== pendingEffectsStatus) {
@@ -13684,7 +13651,6 @@
       function flushSpawnedWork() {
         if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {
           pendingEffectsStatus = 0;
-          var committedViewTransition = pendingViewTransition;
           pendingViewTransition = null;
           requestPaint();
           var root = pendingEffectsRoot,
@@ -13739,22 +13705,15 @@
           recoverableErrors = pendingViewTransitionEvents;
           onRecoverableError = pendingTransitionTypes;
           pendingTransitionTypes = null;
-          if (
-            null !== recoverableErrors &&
-            ((pendingViewTransitionEvents = null),
-            null === onRecoverableError && (onRecoverableError = []),
-            null !== committedViewTransition)
-          )
+          if (null !== recoverableErrors)
             for (
-              recoverableError = 0;
+              pendingViewTransitionEvents = null,
+                null === onRecoverableError && (onRecoverableError = []),
+                recoverableError = 0;
               recoverableError < recoverableErrors.length;
               recoverableError++
             )
-              (finishedWork = (0, recoverableErrors[recoverableError])(
-                onRecoverableError
-              )),
-                void 0 !== finishedWork &&
-                  committedViewTransition.finished.finally(finishedWork);
+              (0, recoverableErrors[recoverableError])(onRecoverableError);
           0 !== (pendingEffectsLanes & 3) && flushPendingEffects();
           ensureRootIsScheduled(root);
           passiveSubtreeMask = root.pendingLanes;
@@ -14192,6 +14151,16 @@
           ? actionProp
           : sanitizeURL("" + actionProp);
       }
+      function createFormDataWithSubmitter(form, submitter) {
+        var temp = submitter.ownerDocument.createElement("input");
+        temp.name = submitter.name;
+        temp.value = submitter.value;
+        form.id && temp.setAttribute("form", form.id);
+        submitter.parentNode.insertBefore(temp, submitter);
+        form = new FormData(form);
+        temp.parentNode.removeChild(temp);
+        return form;
+      }
       function extractEvents$1(
         dispatchQueue,
         domEventName,
@@ -14230,7 +14199,12 @@
                 listener: function () {
                   if (nativeEvent.defaultPrevented) {
                     if (0 !== currentEventTransitionLane) {
-                      var formData = new FormData(nativeEventTarget, submitter);
+                      var formData = submitter
+                        ? createFormDataWithSubmitter(
+                            nativeEventTarget,
+                            submitter
+                          )
+                        : new FormData(nativeEventTarget);
                       startHostTransition(
                         maybeTargetInst,
                         {
@@ -14246,7 +14220,12 @@
                   } else
                     "function" === typeof action &&
                       (event.preventDefault(),
-                      (formData = new FormData(nativeEventTarget, submitter)),
+                      (formData = submitter
+                        ? createFormDataWithSubmitter(
+                            nativeEventTarget,
+                            submitter
+                          )
+                        : new FormData(nativeEventTarget)),
                       startHostTransition(
                         maybeTargetInst,
                         {
@@ -14266,20 +14245,20 @@
         }
       }
       for (
-        var i$jscomp$inline_1695 = 0;
-        i$jscomp$inline_1695 < simpleEventPluginEvents.length;
-        i$jscomp$inline_1695++
+        var i$jscomp$inline_1691 = 0;
+        i$jscomp$inline_1691 < simpleEventPluginEvents.length;
+        i$jscomp$inline_1691++
       ) {
-        var eventName$jscomp$inline_1696 =
-            simpleEventPluginEvents[i$jscomp$inline_1695],
-          domEventName$jscomp$inline_1697 =
-            eventName$jscomp$inline_1696.toLowerCase(),
-          capitalizedEvent$jscomp$inline_1698 =
-            eventName$jscomp$inline_1696[0].toUpperCase() +
-            eventName$jscomp$inline_1696.slice(1);
+        var eventName$jscomp$inline_1692 =
+            simpleEventPluginEvents[i$jscomp$inline_1691],
+          domEventName$jscomp$inline_1693 =
+            eventName$jscomp$inline_1692.toLowerCase(),
+          capitalizedEvent$jscomp$inline_1694 =
+            eventName$jscomp$inline_1692[0].toUpperCase() +
+            eventName$jscomp$inline_1692.slice(1);
         registerSimpleEvent(
-          domEventName$jscomp$inline_1697,
-          "on" + capitalizedEvent$jscomp$inline_1698
+          domEventName$jscomp$inline_1693,
+          "on" + capitalizedEvent$jscomp$inline_1694
         );
       }
       registerSimpleEvent(ANIMATION_END, "onAnimationEnd");
@@ -19157,16 +19136,16 @@
           0 === i && attemptExplicitHydrationTarget(target);
         }
       };
-      var isomorphicReactPackageVersion$jscomp$inline_2044 = React.version;
+      var isomorphicReactPackageVersion$jscomp$inline_2040 = React.version;
       if (
-        "19.3.0-canary-10680271-20260126" !==
-        isomorphicReactPackageVersion$jscomp$inline_2044
+        "19.3.0-canary-f93b9fd4-20251217" !==
+        isomorphicReactPackageVersion$jscomp$inline_2040
       )
         throw Error(
           formatProdErrorMessage(
             527,
-            isomorphicReactPackageVersion$jscomp$inline_2044,
-            "19.3.0-canary-10680271-20260126"
+            isomorphicReactPackageVersion$jscomp$inline_2040,
+            "19.3.0-canary-f93b9fd4-20251217"
           )
         );
       ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -19186,24 +19165,24 @@
           null === componentOrElement ? null : componentOrElement.stateNode;
         return componentOrElement;
       };
-      var internals$jscomp$inline_2634 = {
+      var internals$jscomp$inline_2628 = {
         bundleType: 0,
-        version: "19.3.0-canary-10680271-20260126",
+        version: "19.3.0-canary-f93b9fd4-20251217",
         rendererPackageName: "react-dom",
         currentDispatcherRef: ReactSharedInternals,
-        reconcilerVersion: "19.3.0-canary-10680271-20260126",
+        reconcilerVersion: "19.3.0-canary-f93b9fd4-20251217",
       };
       if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
-        var hook$jscomp$inline_2635 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
+        var hook$jscomp$inline_2629 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
         if (
-          !hook$jscomp$inline_2635.isDisabled &&
-          hook$jscomp$inline_2635.supportsFiber
+          !hook$jscomp$inline_2629.isDisabled &&
+          hook$jscomp$inline_2629.supportsFiber
         )
           try {
-            (rendererID = hook$jscomp$inline_2635.inject(
-              internals$jscomp$inline_2634
+            (rendererID = hook$jscomp$inline_2629.inject(
+              internals$jscomp$inline_2628
             )),
-              (injectedHook = hook$jscomp$inline_2635);
+              (injectedHook = hook$jscomp$inline_2629);
           } catch (err) {}
       }
       exports.createRoot = function (container, options) {
@@ -19293,7 +19272,7 @@
         listenToAllSupportedEvents(container);
         return new ReactDOMHydrationRoot(initialChildren);
       };
-      exports.version = "19.3.0-canary-10680271-20260126";
+      exports.version = "19.3.0-canary-f93b9fd4-20251217";
 
       /***/
     },
Diff for main-HASH.js

Diff too large to display

Diff for main-app-HASH.js
@@ -1,64 +1,64 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [4977],
   {
-    /***/ 341: /***/ () => {
-      /* (ignored) */
-      /***/
-    },
-
-    /***/ 9450: /***/ (
+    /***/ 46: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 375, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7413, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2972, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9898, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7508, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9854, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6043, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9261, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 9797, 23)
+        __webpack_require__.t.bind(__webpack_require__, 867, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 2933, 23)
+        __webpack_require__.t.bind(__webpack_require__, 2463, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 4220, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1866, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 97, 23)
+        __webpack_require__.t.bind(__webpack_require__, 9667, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 464, 23)
+        __webpack_require__.t.bind(__webpack_require__, 8822, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 619, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1717, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 1464, 23)
+        __webpack_require__.t.bind(__webpack_require__, 5366, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 5297)
+        __webpack_require__.bind(__webpack_require__, 1155)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7937, 23)
+        __webpack_require__.t.bind(__webpack_require__, 391, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 7584, 23)
+        __webpack_require__.t.bind(__webpack_require__, 7346, 23)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.t.bind(__webpack_require__, 6826, 23)
+        __webpack_require__.t.bind(__webpack_require__, 1340, 23)
       );
 
       /***/
     },
+
+    /***/ 2751: /***/ () => {
+      /* (ignored) */
+      /***/
+    },
   },
   /******/ (__webpack_require__) => {
     // webpackRuntimeModules
@@ -66,8 +66,8 @@
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(
       0,
-      [5639, 4322],
-      () => (__webpack_exec__(2193), __webpack_exec__(9450))
+      [8580, 2658],
+      () => (__webpack_exec__(9851), __webpack_exec__(46))
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for app-page-exp..ntime.dev.js
failed to diff
Diff for app-page-exp..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js
failed to diff
Diff for app-page-tur..time.prod.js
failed to diff
Diff for app-page-tur..ntime.dev.js
failed to diff
Diff for app-page-tur..time.prod.js
failed to diff
Diff for app-page.runtime.dev.js
failed to diff
Diff for app-page.runtime.prod.js
failed to diff
Diff for app-route-ex..ntime.dev.js

Diff too large to display

Diff for app-route-ex..time.prod.js

Diff too large to display

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

Diff too large to display

Diff for app-route-tu..time.prod.js

Diff too large to display

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

Diff too large to display

Diff for app-route-tu..time.prod.js

Diff too large to display

Diff for app-route.runtime.dev.js

Diff too large to display

Diff for app-route.ru..time.prod.js

Diff too large to display

Diff for pages-api-tu..ntime.dev.js

Diff too large to display

Diff for pages-api-tu..time.prod.js

Diff too large to display

Diff for pages-api.runtime.dev.js

Diff too large to display

Diff for pages-api.ru..time.prod.js

Diff too large to display

Diff for pages-turbo...ntime.dev.js

Diff too large to display

Diff for pages-turbo...time.prod.js

Diff too large to display

Diff for pages.runtime.dev.js

Diff too large to display

Diff for pages.runtime.prod.js

Diff too large to display

Diff for server.runtime.prod.js

Diff too large to display

Commit: 730df59

@ztanner ztanner merged commit 4324698 into next-16-1 Jan 27, 2026
142 of 144 checks passed
@ztanner ztanner deleted the ztanner/backport-88509 branch January 27, 2026 20:00
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Feb 11, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants