next.js icon indicating copy to clipboard operation
next.js copied to clipboard

Fix cardinality of opentelemetry span names on client-side navigation

Open PatNeedham opened this issue 1 year ago • 19 comments

What?

As noticed in issue https://github.com/vercel/next.js/issues/54694, span names for dynamic routes are not consistent and sometimes miss the "next.route" attribute, and have a span name that have the parameters instead of the capturing placeholders.

Fixing a bug or a limitation

  • Fixes https://github.com/vercel/next.js/issues/54694 (at least partially)
  • Adds test case for client-side navigation previously leading to wrong span attributes (test added into the test/e2e/opentelemetry/instrumentation test suite) Updated test/e2e/opentelemetry/instrumentation app used to test telemetry (some pages with link between them where created but not quite correct in the links, and were not handling the defined params)

Limits

This PR identify a case where some traces are wrong (see bellow for the detailed identified case). But there might be others that the other of https://github.com/vercel/next.js/issues/54694 might think of.

How

Function renderToHTMLOrFlightImpl is the one responsible for rendering of the page. It is also the one that set the next.route attribute, the one that has the interpreted route instead of the full url. However, there is a shortcut to exit the function before next.route is set when the condition isRSCRequest && !isStaticGeneration is met. I think we can set next.route before, so in any case the route has the correct value.

For Contributors

This is a duplicate of https://github.com/vercel/next.js/pull/59282 in order to (hopefully) regenerate the logs from the failing tests so that the original PR can be appropriately modified and then merged.

Credit to @Leonils for the change here. This PR is merely a continuation of his.

PatNeedham avatar Apr 22 '24 03:04 PatNeedham

Allow CI Workflow Run

  • [x] approve CI run for commit: c9f8807bfaa44c1b56723782379a1fcfe5a581bb

Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer

ijjk avatar Apr 22 '24 03:04 ijjk

@PatNeedham Re-adding that label so you can run CI → tests.

samcx avatar Apr 29 '24 15:04 samcx

Stats from current PR

Default Build (Increase detected ⚠️)
General
vercel/next.js canary PatNeedham/next.js fix/telemetry-client-navigation Change
buildDuration 18.8s 16.1s N/A
buildDurationCached 8.9s 8.6s N/A
nodeModulesSize 345 MB 345 MB N/A
nextStartRea..uration (ms) 441ms 416ms N/A
Client Bundles (main, webpack)
vercel/next.js canary PatNeedham/next.js fix/telemetry-client-navigation Change
1813.HASH.js gzip 169 B 169 B
3433-HASH.js gzip 5.06 kB 5.06 kB N/A
6159-HASH.js gzip 33.6 kB 33.6 kB N/A
69089819-HASH.js gzip 50.8 kB 50.8 kB N/A
framework-HASH.js gzip 55.8 kB 55.8 kB N/A
main-app-HASH.js gzip 220 B 221 B N/A
main-HASH.js gzip 32.3 kB 32.3 kB N/A
webpack-HASH.js gzip 1.71 kB 1.7 kB N/A
Overall change 169 B 169 B
Legacy Client Bundles (polyfills)
vercel/next.js canary PatNeedham/next.js fix/telemetry-client-navigation Change
polyfills-HASH.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary PatNeedham/next.js fix/telemetry-client-navigation Change
_app-HASH.js gzip 192 B 193 B N/A
_error-HASH.js gzip 192 B 192 B
amp-HASH.js gzip 511 B 510 B N/A
css-HASH.js gzip 342 B 343 B N/A
dynamic-HASH.js gzip 2.53 kB 2.52 kB N/A
edge-ssr-HASH.js gzip 265 B 266 B N/A
head-HASH.js gzip 362 B 364 B N/A
hooks-HASH.js gzip 391 B 392 B N/A
image-HASH.js gzip 4.27 kB 4.27 kB N/A
index-HASH.js gzip 269 B 268 B N/A
link-HASH.js gzip 2.69 kB 2.69 kB N/A
routerDirect..HASH.js gzip 328 B 329 B N/A
script-HASH.js gzip 394 B 397 B N/A
withRouter-HASH.js gzip 324 B 324 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Overall change 622 B 622 B
Client Build Manifests
vercel/next.js canary PatNeedham/next.js fix/telemetry-client-navigation Change
_buildManifest.js gzip 483 B 483 B
Overall change 483 B 483 B
Rendered Page Sizes
vercel/next.js canary PatNeedham/next.js fix/telemetry-client-navigation Change
index.html gzip 522 B 523 B N/A
link.html gzip 536 B 536 B
withRouter.html gzip 518 B 518 B
Overall change 1.05 kB 1.05 kB
Edge SSR bundle Size
vercel/next.js canary PatNeedham/next.js fix/telemetry-client-navigation Change
edge-ssr.js gzip 121 kB 121 kB N/A
page.js gzip 179 kB 179 kB N/A
Overall change 0 B 0 B
Middleware size
vercel/next.js canary PatNeedham/next.js fix/telemetry-client-navigation Change
middleware-b..fest.js gzip 658 B 659 B N/A
middleware-r..fest.js gzip 155 B 153 B N/A
middleware.js gzip 25.8 kB 25.8 kB N/A
edge-runtime..pack.js gzip 839 B 839 B
Overall change 839 B 839 B
Next Runtimes
vercel/next.js canary PatNeedham/next.js fix/telemetry-client-navigation Change
app-page-exp...dev.js gzip 174 kB 174 kB N/A
app-page-exp..prod.js gzip 106 kB 106 kB
app-page-tur..prod.js gzip 115 kB 115 kB N/A
app-page-tur..prod.js gzip 94.5 kB 94.5 kB N/A
app-page.run...dev.js gzip 160 kB 160 kB N/A
app-page.run..prod.js gzip 93.2 kB 93.2 kB N/A
app-route-ex...dev.js gzip 21.1 kB 21.1 kB
app-route-ex..prod.js gzip 15 kB 15 kB
app-route-tu..prod.js gzip 15 kB 15 kB
app-route-tu..prod.js gzip 14.8 kB 14.8 kB
app-route.ru...dev.js gzip 20.9 kB 20.9 kB
app-route.ru..prod.js gzip 14.8 kB 14.8 kB
pages-api-tu..prod.js gzip 9.55 kB 9.55 kB
pages-api.ru...dev.js gzip 9.82 kB 9.82 kB
pages-api.ru..prod.js gzip 9.55 kB 9.55 kB
pages-turbo...prod.js gzip 21.5 kB 21.5 kB
pages.runtim...dev.js gzip 22.1 kB 22.1 kB
pages.runtim..prod.js gzip 21.5 kB 21.5 kB
server.runti..prod.js gzip 52.2 kB 52.2 kB
Overall change 354 kB 354 kB
build cache Overall increase ⚠️
vercel/next.js canary PatNeedham/next.js fix/telemetry-client-navigation Change
0.pack gzip 1.65 MB 1.65 MB ⚠️ +1.25 kB
index.pack gzip 126 kB 127 kB ⚠️ +549 B
Overall change 1.77 MB 1.77 MB ⚠️ +1.8 kB
Diff details
Diff for page.js
@@ -15,7 +15,7 @@
       /***/
     },
 
-    /***/ 6273: /***/ (
+    /***/ 159: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -30,7 +30,7 @@
         default: () => /* binding */ nHandler,
       });
 
-      // NAMESPACE OBJECT: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statshmvCwg%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
+      // NAMESPACE OBJECT: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statshmvCwg%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
       var page_next_edge_ssr_entry_namespaceObject = {};
       __webpack_require__.r(page_next_edge_ssr_entry_namespaceObject);
       __webpack_require__.d(page_next_edge_ssr_entry_namespaceObject, {
@@ -68,24 +68,24 @@
         tree: () => tree,
       });
 
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/web/globals.js
-      var globals = __webpack_require__(5107);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/web/adapter.js + 3 modules
-      var adapter = __webpack_require__(6713);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/build/webpack/loaders/next-edge-ssr-loader/render.js + 87 modules
-      var render = __webpack_require__(6526);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/lib/incremental-cache/index.js + 3 modules
-      var incremental_cache = __webpack_require__(2116);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/app-render/app-render.js + 52 modules
-      var app_render = __webpack_require__(7906);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/future/route-modules/app-page/module.compiled.js
-      var module_compiled = __webpack_require__(4445);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/future/route-kind.js
-      var route_kind = __webpack_require__(8063);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/client/components/error-boundary.js
-      var error_boundary = __webpack_require__(3483);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/app-render/entry-base.js + 9 modules
-      var entry_base = __webpack_require__(7165); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statshmvCwg%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/web/globals.js
+      var globals = __webpack_require__(4009);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/web/adapter.js + 3 modules
+      var adapter = __webpack_require__(6978);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/build/webpack/loaders/next-edge-ssr-loader/render.js + 87 modules
+      var render = __webpack_require__(8791);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/lib/incremental-cache/index.js + 3 modules
+      var incremental_cache = __webpack_require__(994);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/app-render/app-render.js + 52 modules
+      var app_render = __webpack_require__(3653);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/future/route-modules/app-page/module.compiled.js
+      var module_compiled = __webpack_require__(8414);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/future/route-kind.js
+      var route_kind = __webpack_require__(2229);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/client/components/error-boundary.js
+      var error_boundary = __webpack_require__(8002);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/app-render/entry-base.js + 9 modules
+      var entry_base = __webpack_require__(7832); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/build/webpack/loaders/next-app-loader.js?name=app%2Fapp-edge-ssr%2Fpage&page=%2Fapp-edge-ssr%2Fpage&pagePath=private-next-app-dir%2Fapp-edge-ssr%2Fpage.js&appDir=%2Ftmp%2Fnext-statshmvCwg%2Fstats-app%2Fapp&appPaths=%2Fapp-edge-ssr%2Fpage&pageExtensions=tsx&pageExtensions=ts&pageExtensions=jsx&pageExtensions=js&basePath=&assetPrefix=&nextConfigOutput=&preferredRegion=&middlewareConfig=e30%3D!./app/app-edge-ssr/page.js?__next_edge_ssr_entry__
       // We inject the tree and pages here so that we can use them in the route
       // module.
       const tree = {
@@ -102,7 +102,7 @@
                     page: [
                       () =>
                         Promise.resolve(/* import() eager */).then(
-                          __webpack_require__.bind(__webpack_require__, 4791)
+                          __webpack_require__.bind(__webpack_require__, 3053)
                         ),
                       "/tmp/next-statshmvCwg/stats-app/app/app-edge-ssr/page.js",
                     ],
@@ -116,14 +116,14 @@
             layout: [
               () =>
                 Promise.resolve(/* import() eager */).then(
-                  __webpack_require__.bind(__webpack_require__, 9469)
+                  __webpack_require__.bind(__webpack_require__, 9363)
                 ),
               "/tmp/next-statshmvCwg/stats-app/app/layout.js",
             ],
             "not-found": [
               () =>
                 Promise.resolve(/* import() eager */).then(
-                  __webpack_require__.bind(__webpack_require__, 3048)
+                  __webpack_require__.bind(__webpack_require__, 6385)
                 ),
               "next/dist/client/components/not-found-error",
             ],
@@ -159,12 +159,12 @@
       });
 
       //# sourceMappingURL=app-page.js.map
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/lib/page-types.js
-      var page_types = __webpack_require__(3047);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/app-render/encryption-utils.js
-      var encryption_utils = __webpack_require__(866);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/esm/server/app-render/action-utils.js
-      var action_utils = __webpack_require__(2041); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js?{"absolute500Path":"","absoluteAppPath":"next/dist/pages/_app","absoluteDocumentPath":"next/dist/pages/_document","absoluteErrorPath":"next/dist/pages/_error","absolutePagePath":"private-next-app-dir/app-edge-ssr/page.js","dev":false,"isServerComponent":true,"page":"/app-edge-ssr/page","stringifiedConfig":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImJ1aWxkQWN0aXZpdHkiOnRydWUsImJ1aWxkQWN0aXZpdHlQb3NpdGlvbiI6ImJvdHRvbS1yaWdodCJ9LCJvbkRlbWFuZEVudHJpZXMiOnsibWF4SW5hY3RpdmVBZ2UiOjYwMDAwLCJwYWdlc0J1ZmZlckxlbmd0aCI6NX0sImFtcCI6eyJjYW5vbmljYWxCYXNlIjoiIn0sImJhc2VQYXRoIjoiIiwic2Fzc09wdGlvbnMiOnt9LCJ0cmFpbGluZ1NsYXNoIjpmYWxzZSwiaTE4biI6bnVsbCwicHJvZHVjdGlvbkJyb3dzZXJTb3VyY2VNYXBzIjpmYWxzZSwib3B0aW1pemVGb250cyI6dHJ1ZSwiZXhjbHVkZURlZmF1bHRNb21lbnRMb2NhbGVzIjp0cnVlLCJzZXJ2ZXJSdW50aW1lQ29uZmlnIjp7fSwicHVibGljUnVudGltZUNvbmZpZyI6e30sInJlYWN0UHJvZHVjdGlvblByb2ZpbGluZyI6ZmFsc2UsInJlYWN0U3RyaWN0TW9kZSI6bnVsbCwiaHR0cEFnZW50T3B0aW9ucyI6eyJrZWVwQWxpdmUiOnRydWV9LCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sImV4cGVyaW1lbnRhbCI6eyJmbHlpbmdTaHV0dGxlIjpmYWxzZSwicHJlcmVuZGVyRWFybHlFeGl0IjpmYWxzZSwic2VydmVyTWluaWZpY2F0aW9uIjp0cnVlLCJzZXJ2ZXJTb3VyY2VNYXBzIjpmYWxzZSwibGlua05vVG91Y2hTdGFydCI6ZmFsc2UsImNhc2VTZW5zaXRpdmVSb3V0ZXMiOmZhbHNlLCJwcmVsb2FkRW50cmllc09uU3RhcnQiOnRydWUsImNsaWVudFJvdXRlckZpbHRlciI6dHJ1ZSwiY2xpZW50Um91dGVyRmlsdGVyUmVkaXJlY3RzIjpmYWxzZSwiZmV0Y2hDYWNoZUtleVByZWZpeCI6IiIsIm1pZGRsZXdhcmVQcmVmZXRjaCI6ImZsZXhpYmxlIiwib3B0aW1pc3RpY0NsaWVudENhY2hlIjp0cnVlLCJtYW51YWxDbGllbnRCYXNlUGF0aCI6ZmFsc2UsImNwdXMiOjE5LCJtZW1vcnlCYXNlZFdvcmtlcnNDb3VudCI6ZmFsc2UsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwib3V0cHV0RmlsZVRyYWNpbmdSb290IjoiL3RtcC9uZXh0LXN0YXRzaG12Q3dnL3N0YXRzLWFwcCIsInN3Y1RyYWNlUHJvZmlsaW5nIjpmYWxzZSwiZm9yY2VTd2NUcmFuc2Zvcm1zIjpmYWxzZSwibGFyZ2VQYWdlRGF0YUJ5dGVzIjoxMjgwMDAsImFkanVzdEZvbnRGYWxsYmFja3MiOmZhbHNlLCJhZGp1c3RGb250RmFsbGJhY2tzV2l0aFNpemVBZGp1c3QiOmZhbHNlLCJ0eXBlZFJvdXRlcyI6ZmFsc2UsImluc3RydW1lbnRhdGlvbkhvb2siOmZhbHNlLCJwYXJhbGxlbFNlcnZlckNvbXBpbGVzIjpmYWxzZSwicGFyYWxsZWxTZXJ2ZXJCdWlsZFRyYWNlcyI6ZmFsc2UsInBwciI6ZmFsc2UsIm9wdGltaXplU2VydmVyUmVhY3QiOnRydWUsInVzZUVhcmx5SW1wb3J0IjpmYWxzZSwic3RhbGVUaW1lcyI6eyJkeW5hbWljIjozMCwic3RhdGljIjozMDB9LCJvcHRpbWl6ZVBhY2thZ2VJbXBvcnRzIjpbImx1Y2lkZS1yZWFjdCIsImRhdGUtZm5zIiwibG9kYXNoLWVzIiwicmFtZGEiLCJhbnRkIiwicmVhY3QtYm9vdHN0cmFwIiwiYWhvb2tzIiwiQGFudC1kZXNpZ24vaWNvbnMiLCJAaGVhZGxlc3N1aS9yZWFjdCIsIkBoZWFkbGVzc3VpLWZsb2F0L3JlYWN0IiwiQGhlcm9pY29ucy9yZWFjdC8yMC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvc29saWQiLCJAaGVyb2ljb25zL3JlYWN0LzI0L291dGxpbmUiLCJAdmlzeC92aXN4IiwiQHRyZW1vci9yZWFjdCIsInJ4anMiLCJAbXVpL21hdGVyaWFsIiwiQG11aS9pY29ucy1tYXRlcmlhbCIsInJlY2hhcnRzIiwicmVhY3QtdXNlIiwiQG1hdGVyaWFsLXVpL2NvcmUiLCJAbWF0ZXJpYWwtdWkvaWNvbnMiLCJAdGFibGVyL2ljb25zLXJlYWN0IiwibXVpLWNvcmUiLCJyZWFjdC1pY29ucy9haSIsInJlYWN0LWljb25zL2JpIiwicmVhY3QtaWNvbnMvYnMiLCJyZWFjdC1pY29ucy9jZyIsInJlYWN0LWljb25zL2NpIiwicmVhY3QtaWNvbnMvZGkiLCJyZWFjdC1pY29ucy9mYSIsInJlYWN0LWljb25zL2ZhNiIsInJlYWN0LWljb25zL2ZjIiwicmVhY3QtaWNvbnMvZmkiLCJyZWFjdC1pY29ucy9naSIsInJlYWN0LWljb25zL2dvIiwicmVhY3QtaWNvbnMvZ3IiLCJyZWFjdC1pY29ucy9oaSIsInJlYWN0LWljb25zL2hpMiIsInJlYWN0LWljb25zL2ltIiwicmVhY3QtaWNvbnMvaW8iLCJyZWFjdC1pY29ucy9pbzUiLCJyZWFjdC1pY29ucy9saWEiLCJyZWFjdC1pY29ucy9saWIiLCJyZWFjdC1pY29ucy9sdSIsInJlYWN0LWljb25zL21kIiwicmVhY3QtaWNvbnMvcGkiLCJyZWFjdC1pY29ucy9yaSIsInJlYWN0LWljb25zL3J4IiwicmVhY3QtaWNvbnMvc2kiLCJyZWFjdC1pY29ucy9zbCIsInJlYWN0LWljb25zL3RiIiwicmVhY3QtaWNvbnMvdGZpIiwicmVhY3QtaWNvbnMvdGkiLCJyZWFjdC1pY29ucy92c2MiLCJyZWFjdC1pY29ucy93aSJdfSwiYnVuZGxlUGFnZXNSb3V0ZXJEZXBlbmRlbmNpZXMiOmZhbHNlLCJjb25maWdGaWxlIjoiL3RtcC9uZXh0LXN0YXRzaG12Q3dnL3N0YXRzLWFwcC9uZXh0LmNvbmZpZy5qcyIsImNvbmZpZ0ZpbGVOYW1lIjoibmV4dC5jb25maWcuanMifQ==","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzaG12Q3dnJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JnByZWZlcnJlZFJlZ2lvbj0mbWlkZGxld2FyZUNvbmZpZz1lMzAlM0Qh","sriEnabled":false,"middlewareConfig":"e30="}!
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/lib/page-types.js
+      var page_types = __webpack_require__(9287);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/app-render/encryption-utils.js
+      var encryption_utils = __webpack_require__(3934);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/esm/server/app-render/action-utils.js
+      var action_utils = __webpack_require__(1730); // CONCATENATED MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/dist/build/webpack/loaders/next-edge-ssr-loader/index.js?{"absolute500Path":"","absoluteAppPath":"next/dist/pages/_app","absoluteDocumentPath":"next/dist/pages/_document","absoluteErrorPath":"next/dist/pages/_error","absolutePagePath":"private-next-app-dir/app-edge-ssr/page.js","dev":false,"isServerComponent":true,"page":"/app-edge-ssr/page","stringifiedConfig":"eyJlbnYiOnt9LCJlc2xpbnQiOnsiaWdub3JlRHVyaW5nQnVpbGRzIjpmYWxzZX0sInR5cGVzY3JpcHQiOnsiaWdub3JlQnVpbGRFcnJvcnMiOmZhbHNlLCJ0c2NvbmZpZ1BhdGgiOiJ0c2NvbmZpZy5qc29uIn0sImRpc3REaXIiOiIubmV4dCIsImNsZWFuRGlzdERpciI6dHJ1ZSwiYXNzZXRQcmVmaXgiOiIiLCJjYWNoZU1heE1lbW9yeVNpemUiOjUyNDI4ODAwLCJjb25maWdPcmlnaW4iOiJuZXh0LmNvbmZpZy5qcyIsInVzZUZpbGVTeXN0ZW1QdWJsaWNSb3V0ZXMiOnRydWUsImdlbmVyYXRlRXRhZ3MiOnRydWUsInBhZ2VFeHRlbnNpb25zIjpbInRzeCIsInRzIiwianN4IiwianMiXSwicG93ZXJlZEJ5SGVhZGVyIjp0cnVlLCJjb21wcmVzcyI6dHJ1ZSwiaW1hZ2VzIjp7ImRldmljZVNpemVzIjpbNjQwLDc1MCw4MjgsMTA4MCwxMjAwLDE5MjAsMjA0OCwzODQwXSwiaW1hZ2VTaXplcyI6WzE2LDMyLDQ4LDY0LDk2LDEyOCwyNTYsMzg0XSwicGF0aCI6Ii9fbmV4dC9pbWFnZSIsImxvYWRlciI6ImRlZmF1bHQiLCJsb2FkZXJGaWxlIjoiIiwiZG9tYWlucyI6W10sImRpc2FibGVTdGF0aWNJbWFnZXMiOmZhbHNlLCJtaW5pbXVtQ2FjaGVUVEwiOjYwLCJmb3JtYXRzIjpbImltYWdlL3dlYnAiXSwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyI6ZmFsc2UsImNvbnRlbnRTZWN1cml0eVBvbGljeSI6InNjcmlwdC1zcmMgJ25vbmUnOyBmcmFtZS1zcmMgJ25vbmUnOyBzYW5kYm94OyIsImNvbnRlbnREaXNwb3NpdGlvblR5cGUiOiJhdHRhY2htZW50IiwicmVtb3RlUGF0dGVybnMiOltdLCJ1bm9wdGltaXplZCI6ZmFsc2V9LCJkZXZJbmRpY2F0b3JzIjp7ImJ1aWxkQWN0aXZpdHkiOnRydWUsImJ1aWxkQWN0aXZpdHlQb3NpdGlvbiI6ImJvdHRvbS1yaWdodCJ9LCJvbkRlbWFuZEVudHJpZXMiOnsibWF4SW5hY3RpdmVBZ2UiOjYwMDAwLCJwYWdlc0J1ZmZlckxlbmd0aCI6NX0sImFtcCI6eyJjYW5vbmljYWxCYXNlIjoiIn0sImJhc2VQYXRoIjoiIiwic2Fzc09wdGlvbnMiOnt9LCJ0cmFpbGluZ1NsYXNoIjpmYWxzZSwiaTE4biI6bnVsbCwicHJvZHVjdGlvbkJyb3dzZXJTb3VyY2VNYXBzIjpmYWxzZSwib3B0aW1pemVGb250cyI6dHJ1ZSwiZXhjbHVkZURlZmF1bHRNb21lbnRMb2NhbGVzIjp0cnVlLCJzZXJ2ZXJSdW50aW1lQ29uZmlnIjp7fSwicHVibGljUnVudGltZUNvbmZpZyI6e30sInJlYWN0UHJvZHVjdGlvblByb2ZpbGluZyI6ZmFsc2UsInJlYWN0U3RyaWN0TW9kZSI6bnVsbCwiaHR0cEFnZW50T3B0aW9ucyI6eyJrZWVwQWxpdmUiOnRydWV9LCJzdGF0aWNQYWdlR2VuZXJhdGlvblRpbWVvdXQiOjYwLCJtb2R1bGFyaXplSW1wb3J0cyI6eyJAbXVpL2ljb25zLW1hdGVyaWFsIjp7InRyYW5zZm9ybSI6IkBtdWkvaWNvbnMtbWF0ZXJpYWwve3ttZW1iZXJ9fSJ9LCJsb2Rhc2giOnsidHJhbnNmb3JtIjoibG9kYXNoL3t7bWVtYmVyfX0ifX0sImV4cGVyaW1lbnRhbCI6eyJmbHlpbmdTaHV0dGxlIjpmYWxzZSwicHJlcmVuZGVyRWFybHlFeGl0IjpmYWxzZSwic2VydmVyTWluaWZpY2F0aW9uIjp0cnVlLCJzZXJ2ZXJTb3VyY2VNYXBzIjpmYWxzZSwibGlua05vVG91Y2hTdGFydCI6ZmFsc2UsImNhc2VTZW5zaXRpdmVSb3V0ZXMiOmZhbHNlLCJwcmVsb2FkRW50cmllc09uU3RhcnQiOnRydWUsImNsaWVudFJvdXRlckZpbHRlciI6dHJ1ZSwiY2xpZW50Um91dGVyRmlsdGVyUmVkaXJlY3RzIjpmYWxzZSwiZmV0Y2hDYWNoZUtleVByZWZpeCI6IiIsIm1pZGRsZXdhcmVQcmVmZXRjaCI6ImZsZXhpYmxlIiwib3B0aW1pc3RpY0NsaWVudENhY2hlIjp0cnVlLCJtYW51YWxDbGllbnRCYXNlUGF0aCI6ZmFsc2UsImNwdXMiOjE5LCJtZW1vcnlCYXNlZFdvcmtlcnNDb3VudCI6ZmFsc2UsImlzckZsdXNoVG9EaXNrIjp0cnVlLCJ3b3JrZXJUaHJlYWRzIjpmYWxzZSwib3B0aW1pemVDc3MiOmZhbHNlLCJuZXh0U2NyaXB0V29ya2VycyI6ZmFsc2UsInNjcm9sbFJlc3RvcmF0aW9uIjpmYWxzZSwiZXh0ZXJuYWxEaXIiOmZhbHNlLCJkaXNhYmxlT3B0aW1pemVkTG9hZGluZyI6ZmFsc2UsImd6aXBTaXplIjp0cnVlLCJjcmFDb21wYXQiOmZhbHNlLCJlc21FeHRlcm5hbHMiOnRydWUsImZ1bGx5U3BlY2lmaWVkIjpmYWxzZSwib3V0cHV0RmlsZVRyYWNpbmdSb290IjoiL3RtcC9uZXh0LXN0YXRzaG12Q3dnL3N0YXRzLWFwcCIsInN3Y1RyYWNlUHJvZmlsaW5nIjpmYWxzZSwiZm9yY2VTd2NUcmFuc2Zvcm1zIjpmYWxzZSwibGFyZ2VQYWdlRGF0YUJ5dGVzIjoxMjgwMDAsImFkanVzdEZvbnRGYWxsYmFja3MiOmZhbHNlLCJhZGp1c3RGb250RmFsbGJhY2tzV2l0aFNpemVBZGp1c3QiOmZhbHNlLCJ0eXBlZFJvdXRlcyI6ZmFsc2UsImluc3RydW1lbnRhdGlvbkhvb2siOmZhbHNlLCJwYXJhbGxlbFNlcnZlckNvbXBpbGVzIjpmYWxzZSwicGFyYWxsZWxTZXJ2ZXJCdWlsZFRyYWNlcyI6ZmFsc2UsInBwciI6ZmFsc2UsIm9wdGltaXplU2VydmVyUmVhY3QiOnRydWUsInVzZUVhcmx5SW1wb3J0IjpmYWxzZSwic3RhbGVUaW1lcyI6eyJkeW5hbWljIjozMCwic3RhdGljIjozMDB9LCJvcHRpbWl6ZVBhY2thZ2VJbXBvcnRzIjpbImx1Y2lkZS1yZWFjdCIsImRhdGUtZm5zIiwibG9kYXNoLWVzIiwicmFtZGEiLCJhbnRkIiwicmVhY3QtYm9vdHN0cmFwIiwiYWhvb2tzIiwiQGFudC1kZXNpZ24vaWNvbnMiLCJAaGVhZGxlc3N1aS9yZWFjdCIsIkBoZWFkbGVzc3VpLWZsb2F0L3JlYWN0IiwiQGhlcm9pY29ucy9yZWFjdC8yMC9zb2xpZCIsIkBoZXJvaWNvbnMvcmVhY3QvMjQvc29saWQiLCJAaGVyb2ljb25zL3JlYWN0LzI0L291dGxpbmUiLCJAdmlzeC92aXN4IiwiQHRyZW1vci9yZWFjdCIsInJ4anMiLCJAbXVpL21hdGVyaWFsIiwiQG11aS9pY29ucy1tYXRlcmlhbCIsInJlY2hhcnRzIiwicmVhY3QtdXNlIiwiQG1hdGVyaWFsLXVpL2NvcmUiLCJAbWF0ZXJpYWwtdWkvaWNvbnMiLCJAdGFibGVyL2ljb25zLXJlYWN0IiwibXVpLWNvcmUiLCJyZWFjdC1pY29ucy9haSIsInJlYWN0LWljb25zL2JpIiwicmVhY3QtaWNvbnMvYnMiLCJyZWFjdC1pY29ucy9jZyIsInJlYWN0LWljb25zL2NpIiwicmVhY3QtaWNvbnMvZGkiLCJyZWFjdC1pY29ucy9mYSIsInJlYWN0LWljb25zL2ZhNiIsInJlYWN0LWljb25zL2ZjIiwicmVhY3QtaWNvbnMvZmkiLCJyZWFjdC1pY29ucy9naSIsInJlYWN0LWljb25zL2dvIiwicmVhY3QtaWNvbnMvZ3IiLCJyZWFjdC1pY29ucy9oaSIsInJlYWN0LWljb25zL2hpMiIsInJlYWN0LWljb25zL2ltIiwicmVhY3QtaWNvbnMvaW8iLCJyZWFjdC1pY29ucy9pbzUiLCJyZWFjdC1pY29ucy9saWEiLCJyZWFjdC1pY29ucy9saWIiLCJyZWFjdC1pY29ucy9sdSIsInJlYWN0LWljb25zL21kIiwicmVhY3QtaWNvbnMvcGkiLCJyZWFjdC1pY29ucy9yaSIsInJlYWN0LWljb25zL3J4IiwicmVhY3QtaWNvbnMvc2kiLCJyZWFjdC1pY29ucy9zbCIsInJlYWN0LWljb25zL3RiIiwicmVhY3QtaWNvbnMvdGZpIiwicmVhY3QtaWNvbnMvdGkiLCJyZWFjdC1pY29ucy92c2MiLCJyZWFjdC1pY29ucy93aSJdfSwiYnVuZGxlUGFnZXNSb3V0ZXJEZXBlbmRlbmNpZXMiOmZhbHNlLCJjb25maWdGaWxlIjoiL3RtcC9uZXh0LXN0YXRzaG12Q3dnL3N0YXRzLWFwcC9uZXh0LmNvbmZpZy5qcyIsImNvbmZpZ0ZpbGVOYW1lIjoibmV4dC5jb25maWcuanMifQ==","pagesType":"app","appDirLoader":"bmV4dC1hcHAtbG9hZGVyP25hbWU9YXBwJTJGYXBwLWVkZ2Utc3NyJTJGcGFnZSZwYWdlPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZVBhdGg9cHJpdmF0ZS1uZXh0LWFwcC1kaXIlMkZhcHAtZWRnZS1zc3IlMkZwYWdlLmpzJmFwcERpcj0lMkZ0bXAlMkZuZXh0LXN0YXRzaG12Q3dnJTJGc3RhdHMtYXBwJTJGYXBwJmFwcFBhdGhzPSUyRmFwcC1lZGdlLXNzciUyRnBhZ2UmcGFnZUV4dGVuc2lvbnM9dHN4JnBhZ2VFeHRlbnNpb25zPXRzJnBhZ2VFeHRlbnNpb25zPWpzeCZwYWdlRXh0ZW5zaW9ucz1qcyZiYXNlUGF0aD0mYXNzZXRQcmVmaXg9Jm5leHRDb25maWdPdXRwdXQ9JnByZWZlcnJlZFJlZ2lvbj0mbWlkZGxld2FyZUNvbmZpZz1lMzAlM0Qh","sriEnabled":false,"middlewareConfig":"e30="}!
       var _self___RSC_MANIFEST;
 
       const incrementalCacheHandler = null;
@@ -402,47 +402,47 @@
       /***/
     },
 
-    /***/ 744: /***/ (
+    /***/ 4480: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 1817)
+        __webpack_require__.bind(__webpack_require__, 4394)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 9652)
+        __webpack_require__.bind(__webpack_require__, 4988)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 3519)
+        __webpack_require__.bind(__webpack_require__, 9932)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 4977)
+        __webpack_require__.bind(__webpack_require__, 6371)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 9558)
+        __webpack_require__.bind(__webpack_require__, 9592)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 2096)
+        __webpack_require__.bind(__webpack_require__, 2380)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 3392)
+        __webpack_require__.bind(__webpack_require__, 6487)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 9693)
+        __webpack_require__.bind(__webpack_require__, 7202)
       );
       Promise.resolve(/* import() eager */).then(
-        __webpack_require__.bind(__webpack_require__, 5675)
+        __webpack_require__.bind(__webpack_require__, 4645)
       );
 
       /***/
     },
 
-    /***/ 7129: /***/ () => {
+    /***/ 8402: /***/ () => {
       /***/
     },
 
-    /***/ 4791: /***/ (
+    /***/ 3053: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -462,7 +462,7 @@
       /***/
     },
 
-    /***/ 9469: /***/ (
+    /***/ 9363: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -474,7 +474,7 @@
         /* harmony export */
       });
       /* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__ =
-        __webpack_require__(3251);
+        __webpack_require__(4470);
 
       function RootLayout({ children }) {
         return /*#__PURE__*/ (0,
@@ -493,7 +493,7 @@
     // webpackRuntimeModules
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
-    /******/ __webpack_require__.O(0, [33, 320], () => __webpack_exec__(6273));
+    /******/ __webpack_require__.O(0, [778, 793], () => __webpack_exec__(159));
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ (_ENTRIES = typeof _ENTRIES === "undefined" ? {} : _ENTRIES)[
       "middleware_app/app-edge-ssr/page"
Diff for middleware.js

Diff too large to display

Diff for edge-ssr.js

Diff too large to display

Diff for image-HASH.js
@@ -1,7 +1,7 @@
 (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([
   [8358],
   {
-    /***/ 5497: /***/ (
+    /***/ 2307: /***/ (
       __unused_webpack_module,
       __unused_webpack_exports,
       __webpack_require__
@@ -9,7 +9,7 @@
       (window.__NEXT_P = window.__NEXT_P || []).push([
         "/image",
         function () {
-          return __webpack_require__(5700);
+          return __webpack_require__(4720);
         },
       ]);
       if (false) {
@@ -18,7 +18,7 @@
       /***/
     },
 
-    /***/ 959: /***/ (module, exports, __webpack_require__) => {
+    /***/ 8697: /***/ (module, exports, __webpack_require__) => {
       "use strict";
       /* __next_internal_client_entry_do_not_use__  cjs */
       Object.defineProperty(exports, "__esModule", {
@@ -40,15 +40,15 @@
         __webpack_require__(5439)
       );
       const _head = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(232)
+        __webpack_require__(2185)
       );
-      const _getimgprops = __webpack_require__(7335);
-      const _imageconfig = __webpack_require__(7712);
-      const _imageconfigcontextsharedruntime = __webpack_require__(1207);
-      const _warnonce = __webpack_require__(9114);
-      const _routercontextsharedruntime = __webpack_require__(8426);
+      const _getimgprops = __webpack_require__(9461);
+      const _imageconfig = __webpack_require__(5517);
+      const _imageconfigcontextsharedruntime = __webpack_require__(8947);
+      const _warnonce = __webpack_require__(5860);
+      const _routercontextsharedruntime = __webpack_require__(7328);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(8106)
+        __webpack_require__(7310)
       );
       // This is replaced by webpack define plugin
       const configEnv = {
@@ -376,7 +376,7 @@
       /***/
     },
 
-    /***/ 7335: /***/ (
+    /***/ 9461: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -392,9 +392,9 @@
           return getImgProps;
         },
       });
-      const _warnonce = __webpack_require__(9114);
-      const _imageblursvg = __webpack_require__(9966);
-      const _imageconfig = __webpack_require__(7712);
+      const _warnonce = __webpack_require__(5860);
+      const _imageblursvg = __webpack_require__(5425);
+      const _imageconfig = __webpack_require__(5517);
       const VALID_LOADING_VALUES =
         /* unused pure expression or super */ null && [
           "lazy",
@@ -769,7 +769,7 @@
       /***/
     },
 
-    /***/ 9966: /***/ (__unused_webpack_module, exports) => {
+    /***/ 5425: /***/ (__unused_webpack_module, exports) => {
       "use strict";
       /**
        * A shared function, used on both client and server, to generate a SVG blur placeholder.
@@ -824,7 +824,7 @@
       /***/
     },
 
-    /***/ 8366: /***/ (
+    /***/ 9578: /***/ (
       __unused_webpack_module,
       exports,
       __webpack_require__
@@ -851,10 +851,10 @@
         },
       });
       const _interop_require_default = __webpack_require__(1478);
-      const _getimgprops = __webpack_require__(7335);
-      const _imagecomponent = __webpack_require__(959);
+      const _getimgprops = __webpack_require__(9461);
+      const _imagecomponent = __webpack_require__(8697);
       const _imageloader = /*#__PURE__*/ _interop_require_default._(
-        __webpack_require__(8106)
+        __webpack_require__(7310)
       );
       function getImageProps(imgProps) {
         const { props } = (0, _getimgprops.getImgProps)(imgProps, {
@@ -886,7 +886,7 @@
       /***/
     },
 
-    /***/ 8106: /***/ (__unused_webpack_module, exports) => {
+    /***/ 7310: /***/ (__unused_webpack_module, exports) => {
       "use strict";
 
       Object.defineProperty(exports, "__esModule", {
@@ -921,7 +921,7 @@
       /***/
     },
 
-    /***/ 5700: /***/ (
+    /***/ 4720: /***/ (
       __unused_webpack_module,
       __webpack_exports__,
       __webpack_require__
@@ -938,8 +938,8 @@
 
       // EXTERNAL MODULE: ./node_modules/.pnpm/[email protected]/node_modules/react/jsx-runtime.js
       var jsx_runtime = __webpack_require__(3456);
-      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+main-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_65yyqpgvftv4sckwrae5ytuiki/node_modules/next/image.js
-      var next_image = __webpack_require__(5008);
+      // EXTERNAL MODULE: ./node_modules/.pnpm/file+..+diff-repo+packages+next+next-packed.tgz_react-dom@19.0.0-beta-4508873393-20240430_rea_bi4li5t763kdoqq4snruxkmfcu/node_modules/next/image.js
+      var next_image = __webpack_require__(932);
       var image_default = /*#__PURE__*/ __webpack_require__.n(next_image); // CONCATENATED MODULE: ./pages/nextjs.png
       /* harmony default export */ const nextjs = {
         src: "/_next/static/media/nextjs.cae0b805.png",
@@ -969,12 +969,12 @@
       /***/
     },
 
-    /***/ 5008: /***/ (
+    /***/ 932: /***/ (
       module,
       __unused_webpack_exports,
       __webpack_require__
     ) => {
-      module.exports = __webpack_require__(8366);
+      module.exports = __webpack_require__(9578);
 
       /***/
     },
@@ -984,7 +984,7 @@
     /******/ var __webpack_exec__ = (moduleId) =>
       __webpack_require__((__webpack_require__.s = moduleId));
     /******/ __webpack_require__.O(0, [2888, 9774, 179], () =>
-      __webpack_exec__(5497)
+      __webpack_exec__(2307)
     );
     /******/ var __webpack_exports__ = __webpack_require__.O();
     /******/ _N_E = __webpack_exports__;
Diff for main-HASH.js

Diff too large to display

Diff for app-page-exp..ntime.dev.js

Diff too large to display

Diff for app-page-exp..time.prod.js

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page-tur..time.prod.js

Diff too large to display

Diff for app-page.runtime.dev.js

Diff too large to display

Diff for app-page.runtime.prod.js

Diff too large to display

Commit: a0262641d0901489750d4c8bf3d3d7f20d379664

ijjk avatar Apr 29 '24 15:04 ijjk

Failing test suites

Commit: e28b95c9abd6bfc3751c416b01c1f7f0033555c0

pnpm test-start test/production/deterministic-build/index.test.ts

  • deterministic build > should have same md5 file across build
Expand output

● deterministic build › should have same md5 file across build

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

- Expected  - 2
+ Received  + 2

@@ -12,21 +12,21 @@
      "9fce7989bff5d35b01e177447faca50d",
      "d7aa1834e4b5ee75408143d266ce2f1c",
      "4f3949b630a0e25d6cb90a5a8a79459a",
      "c80caa65f66639d08c05a9f2de812440",
      "775fb25ff0d4bbf78bf4789e47160d77",
-     "cbf8e847e74d128ace43621124e950f3",
+     "ba293c1928a7ce7fa6dab423a5b5ae69",
    ],
    "/app-route/edge/route": Array [
      "1b1d23e65fe6680a71bfa119a1a4621a",
      "49318b1fadb2d705059a2e0d8df88bb6",
      "9fce7989bff5d35b01e177447faca50d",
      "d7aa1834e4b5ee75408143d266ce2f1c",
      "4f3949b630a0e25d6cb90a5a8a79459a",
      "c80caa65f66639d08c05a9f2de812440",
      "775fb25ff0d4bbf78bf4789e47160d77",
-     "adaa37da1ad72cd0cded7b8cbed06e37",
+     "58997aa0200dd74be61f2fc94ea732eb",
    ],
    "/pages-page/edge": Array [
      "1b1d23e65fe6680a71bfa119a1a4621a",
      "49318b1fadb2d705059a2e0d8df88bb6",
      "9fce7989bff5d35b01e177447faca50d",

  63 |
  64 |   it('should have same md5 file across build', async () => {
> 65 |     expect(edgeBuildFileMd5Hashes[0]).toEqual(edgeBuildFileMd5Hashes[1])
     |                                       ^
  66 |     expect(nodeBuildFileMd5Hashes[0]).toEqual(nodeBuildFileMd5Hashes[1])
  67 |   })
  68 | })

  at Object.toEqual (production/deterministic-build/index.test.ts:65:39)

Read more about building and testing Next.js in contributing.md.

pnpm test-start test/e2e/opentelemetry/instrumentation/opentelemetry.test.ts

  • opentelemetry > incoming context propagation > app router > should handle client-side navigation
  • opentelemetry > root context > app router > should handle client-side navigation
Expand output

● opentelemetry › root context › app router › should handle client-side navigation

expect(received).toMatchSnapshot()

Snapshot name: `opentelemetry root context app router should handle client-side navigation 1`

- Snapshot  - 109
+ Received  + 109

@@ -3,159 +3,159 @@
      "attributes": {
        "next.route": "/app/[param]/loading/page1",
        "next.span_name": "resolve page components",
        "next.span_type": "NextNodeServer.findPageComponents",
      },
-     "duration": 87.5,
+     "duration": 247.521,
      "events": [],
-     "id": "98978cccb0a87e95",
+     "id": "725b034e09facb60",
      "kind": 0,
      "links": [],
      "name": "resolve page components",
-     "parentId": "a8ef684cf17adeb9",
+     "parentId": "9439414607d0c59e",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828309586000,
-     "traceId": "dfab070c61d3909e9c61144462be133e",
+     "timestamp": 1716176291797000,
+     "traceId": "fb88d4d07f6033061ed90934cba9e154",
    },
    {
      "attributes": {
-       "next.segment": "[param]",
-       "next.span_name": "resolve segment modules",
-       "next.span_type": "NextNodeServer.getLayoutOrPageModule",
+       "next.span_name": "build component tree",
+       "next.span_type": "NextNodeServer.createComponentTree",
      },
-     "duration": 34.084,
+     "duration": 3509.753,
      "events": [],
-     "id": "34bb44ac38b6f0a5",
+     "id": "977c965ca536607a",
      "kind": 0,
      "links": [],
-     "name": "resolve segment modules",
-     "parentId": "3c37465e5e82510d",
+     "name": "build component tree",
+     "parentId": "b63d279b0f12bd61",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828309589000,
-     "traceId": "dfab070c61d3909e9c61144462be133e",
+     "timestamp": 1716176291801000,
+     "traceId": "fb88d4d07f6033061ed90934cba9e154",
    },
    {
      "attributes": {
-       "next.span_name": "build component tree",
-       "next.span_type": "NextNodeServer.createComponentTree",
+       "next.span_name": "start response",
+       "next.span_type": "NextNodeServer.startResponse",
      },
-     "duration": 1412.541,
+     "duration": 24.621,
      "events": [],
-     "id": "3c37465e5e82510d",
+     "id": "d39c72f476dc4c87",
      "kind": 0,
      "links": [],
-     "name": "build component tree",
-     "parentId": "f74e9bbee479cd47",
+     "name": "start response",
+     "parentId": "b63d279b0f12bd61",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828309588000,
-     "traceId": "dfab070c61d3909e9c61144462be133e",
+     "timestamp": 1716176291817000,
+     "traceId": "fb88d4d07f6033061ed90934cba9e154",
    },
    {
      "attributes": {
-       "next.route": "/app/[param]/loading/page1",
-       "next.span_name": "render route (app) /app/[param]/loading/page1",
-       "next.span_type": "AppRender.getBodyResult",
+       "next.page": "/app/[param]/layout",
+       "next.span_name": "generateMetadata /app/[param]/layout",
+       "next.span_type": "ResolveMetadata.generateMetadata",
      },
-     "duration": 7391.792,
+     "duration": 54.126,
      "events": [],
-     "id": "f74e9bbee479cd47",
+     "id": "4f08da86e6ec953d",
      "kind": 0,
      "links": [],
-     "name": "render route (app) /app/[param]/loading/page1",
-     "parentId": "a8ef684cf17adeb9",
+     "name": "generateMetadata /app/[param]/layout",
+     "parentId": "b63d279b0f12bd61",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828309587000,
-     "traceId": "dfab070c61d3909e9c61144462be133e",
+     "timestamp": 1716176291809000,
+     "traceId": "fb88d4d07f6033061ed90934cba9e154",
    },
    {
      "attributes": {
-       "next.segment": "__PAGE__",
-       "next.span_name": "resolve segment modules",
-       "next.span_type": "NextNodeServer.getLayoutOrPageModule",
+       "next.route": "/app/[param]/loading/page1",
+       "next.span_name": "render route (app) /app/[param]/loading/page1",
+       "next.span_type": "AppRender.getBodyResult",
      },
-     "duration": 25.709,
+     "duration": 12576.104,
      "events": [],
-     "id": "6b95decf0bbaf8b1",
+     "id": "b63d279b0f12bd61",
      "kind": 0,
      "links": [],
-     "name": "resolve segment modules",
-     "parentId": "3c37465e5e82510d",
+     "name": "render route (app) /app/[param]/loading/page1",
+     "parentId": "9439414607d0c59e",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828309589000,
-     "traceId": "dfab070c61d3909e9c61144462be133e",
+     "timestamp": 1716176291800000,
+     "traceId": "fb88d4d07f6033061ed90934cba9e154",
    },
    {
      "attributes": {
-       "next.page": "/app/[param]/layout",
-       "next.span_name": "generateMetadata /app/[param]/layout",
-       "next.span_type": "ResolveMetadata.generateMetadata",
+       "next.segment": "[param]",
+       "next.span_name": "resolve segment modules",
+       "next.span_type": "NextNodeServer.getLayoutOrPageModule",
      },
-     "duration": 19.5,
+     "duration": 102.554,
      "events": [],
-     "id": "7d04403a7cb8d014",
+     "id": "56c2bec96207f123",
      "kind": 0,
      "links": [],
-     "name": "generateMetadata /app/[param]/layout",
-     "parentId": "f74e9bbee479cd47",
+     "name": "resolve segment modules",
+     "parentId": "977c965ca536607a",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828309592000,
-     "traceId": "dfab070c61d3909e9c61144462be133e",
+     "timestamp": 1716176291802000,
+     "traceId": "fb88d4d07f6033061ed90934cba9e154",
    },
    {
      "attributes": {
-       "next.span_name": "start response",
-       "next.span_type": "NextNodeServer.startResponse",
+       "next.segment": "__PAGE__",
+       "next.span_name": "resolve segment modules",
+       "next.span_type": "NextNodeServer.getLayoutOrPageModule",
      },
-     "duration": 10.208,
+     "duration": 937.056,
      "events": [],
-     "id": "57c7f4ac74cb7cbf",
+     "id": "3b7e481f377374dc",
      "kind": 0,
      "links": [],
-     "name": "start response",
-     "parentId": "f74e9bbee479cd47",
+     "name": "resolve segment modules",
+     "parentId": "977c965ca536607a",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828309596000,
-     "traceId": "dfab070c61d3909e9c61144462be133e",
+     "timestamp": 1716176291803000,
+     "traceId": "fb88d4d07f6033061ed90934cba9e154",
    },
    {
      "attributes": {
        "next.clientComponentLoadCount": 5,
      },
-     "duration": 14.25,
+     "duration": 15.577,
      "events": [],
-     "id": "c79bbdc913a7fd41",
+     "id": "ec07ce927b3975c3",
      "kind": 0,
      "links": [],
      "name": "NextNodeServer.clientComponentLoading",
-     "parentId": "f74e9bbee479cd47",
+     "parentId": "b63d279b0f12bd61",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828309591483.8,
-     "traceId": "dfab070c61d3909e9c61144462be133e",
+     "timestamp": 1716176291808643.8,
+     "traceId": "fb88d4d07f6033061ed90934cba9e154",
    },
    {
      "attributes": {
        "http.method": "GET",
        "http.route": "/app/[param]/loading/page1",
@@ -164,61 +164,61 @@
        "next.route": "/app/[param]/loading/page1",
        "next.rsc": false,
        "next.span_name": "GET /app/[param]/loading/page1",
        "next.span_type": "BaseServer.handleRequest",
      },
-     "duration": 521727.708,
+     "duration": 519102.079,
      "events": [],
-     "id": "a8ef684cf17adeb9",
+     "id": "9439414607d0c59e",
      "kind": 1,
      "links": [],
      "name": "GET /app/[param]/loading/page1",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828309585000,
-     "traceId": "dfab070c61d3909e9c61144462be133e",
+     "timestamp": 1716176291796000,
+     "traceId": "fb88d4d07f6033061ed90934cba9e154",
    },
    {
      "attributes": {
        "next.route": "/app/[param]/loading/page2",
        "next.span_name": "resolve page components",
        "next.span_type": "NextNodeServer.findPageComponents",
      },
-     "duration": 156.542,
+     "duration": 257.947,
      "events": [],
-     "id": "0c79afdbfbb1e0f6",
+     "id": "5005f5b8f96dc66a",
      "kind": 0,
      "links": [],
      "name": "resolve page components",
-     "parentId": "f95c305a64c1d71c",
+     "parentId": "d2d5728b782467a3",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828310141000,
-     "traceId": "c8ee82aa15bab3736d7e0f608c92bbe8",
+     "timestamp": 1716176292360000,
+     "traceId": "136fe973fba4072110230df19c54b0ef",
    },
    {
      "attributes": {
        "next.span_name": "start response",
        "next.span_type": "NextNodeServer.startResponse",
      },
-     "duration": 18.667,
+     "duration": 40.771,
      "events": [],
-     "id": "f4a9aa06018c421d",
+     "id": "a0fc6213241f02fb",
      "kind": 0,
      "links": [],
      "name": "start response",
-     "parentId": "f95c305a64c1d71c",
+     "parentId": "d2d5728b782467a3",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828310146000,
-     "traceId": "c8ee82aa15bab3736d7e0f608c92bbe8",
+     "timestamp": 1716176292366000,
+     "traceId": "136fe973fba4072110230df19c54b0ef",
    },
    {
      "attributes": {
        "http.method": "GET",
        "http.route": "/app/[param]/loading/page2",
@@ -227,120 +227,120 @@
        "next.route": "/app/[param]/loading/page2",
        "next.rsc": true,
        "next.span_name": "RSC GET /app/[param]/loading/page2",
        "next.span_type": "BaseServer.handleRequest",
      },
-     "duration": 7208.166,
+     "duration": 12725.349,
      "events": [],
-     "id": "f95c305a64c1d71c",
+     "id": "d2d5728b782467a3",
      "kind": 1,
      "links": [],
      "name": "RSC GET /app/[param]/loading/page2",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828310140000,
-     "traceId": "c8ee82aa15bab3736d7e0f608c92bbe8",
+     "timestamp": 1716176292359000,
+     "traceId": "136fe973fba4072110230df19c54b0ef",
    },
    {
      "attributes": {
        "next.route": "/app/[param]/loading/page2",
        "next.span_name": "resolve page components",
        "next.span_type": "NextNodeServer.findPageComponents",
      },
-     "duration": 95.5,
+     "duration": 223.148,
      "events": [],
-     "id": "f53658b0f59fa556",
+     "id": "858f1caaa95814c4",
      "kind": 0,
      "links": [],
      "name": "resolve page components",
-     "parentId": "6e8569377f2a6820",
+     "parentId": "63c4a9ce29c86cdc",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828310207000,
-     "traceId": "00a2fc222e9b84a206b4e051abb37507",
+     "timestamp": 1716176292474000,
+     "traceId": "e4f4855d71ee17799e2c4a164ed64342",
    },
    {
      "attributes": {
        "next.span_name": "build component tree",
        "next.span_type": "NextNodeServer.createComponentTree",
      },
-     "duration": 433.791,
+     "duration": 1145.968,
      "events": [],
-     "id": "033016075b37475b",
+     "id": "09b3044ada7daaf5",
      "kind": 0,
      "links": [],
      "name": "build component tree",
-     "parentId": "6e8569377f2a6820",
+     "parentId": "63c4a9ce29c86cdc",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828310209000,
-     "traceId": "00a2fc222e9b84a206b4e051abb37507",
+     "timestamp": 1716176292476000,
+     "traceId": "e4f4855d71ee17799e2c4a164ed64342",
    },
    {
      "attributes": {
        "next.span_name": "start response",
        "next.span_type": "NextNodeServer.startResponse",
      },
-     "duration": 9.291,
+     "duration": 28.38,
      "events": [],
-     "id": "2f39a1cc4c856ace",
+     "id": "225e3174d805dcbc",
      "kind": 0,
      "links": [],
      "name": "start response",
-     "parentId": "6e8569377f2a6820",
+     "parentId": "63c4a9ce29c86cdc",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828310210000,
-     "traceId": "00a2fc222e9b84a206b4e051abb37507",
+     "timestamp": 1716176292481000,
+     "traceId": "e4f4855d71ee17799e2c4a164ed64342",
    },
    {
      "attributes": {
        "next.page": "/app/[param]/layout",
        "next.span_name": "generateMetadata /app/[param]/layout",
        "next.span_type": "ResolveMetadata.generateMetadata",
      },
-     "duration": 18.959,
+     "duration": 60.366,
      "events": [],
-     "id": "1bc21cf0c9c5a53d",
+     "id": "16ae95d9955d28b7",
      "kind": 0,
      "links": [],
      "name": "generateMetadata /app/[param]/layout",
-     "parentId": "6e8569377f2a6820",
+     "parentId": "63c4a9ce29c86cdc",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828310211000,
-     "traceId": "00a2fc222e9b84a206b4e051abb37507",
+     "timestamp": 1716176292483000,
+     "traceId": "e4f4855d71ee17799e2c4a164ed64342",
    },
    {
      "attributes": {
        "next.segment": "__PAGE__",
        "next.span_name": "resolve segment modules",
        "next.span_type": "NextNodeServer.getLayoutOrPageModule",
      },
-     "duration": 44.709,
+     "duration": 130.915,
      "events": [],
-     "id": "cdcaa32b04cba524",
+     "id": "3c5e59dfa4593284",
      "kind": 0,
      "links": [],
      "name": "resolve segment modules",
-     "parentId": "033016075b37475b",
+     "parentId": "09b3044ada7daaf5",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828310209000,
-     "traceId": "00a2fc222e9b84a206b4e051abb37507",
+     "timestamp": 1716176292476000,
+     "traceId": "e4f4855d71ee17799e2c4a164ed64342",
    },
    {
      "attributes": {
        "http.method": "GET",
        "http.route": "/app/[param]/loading/page2",
@@ -349,19 +349,19 @@
        "next.route": "/app/[param]/loading/page2",
        "next.rsc": true,
        "next.span_name": "RSC GET /app/[param]/loading/page2",
        "next.span_type": "BaseServer.handleRequest",
      },
-     "duration": 509500.541,
+     "duration": 510767.812,
      "events": [],
-     "id": "6e8569377f2a6820",
+     "id": "63c4a9ce29c86cdc",
      "kind": 1,
      "links": [],
      "name": "RSC GET /app/[param]/loading/page2",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828310207000,
-     "traceId": "00a2fc222e9b84a206b4e051abb37507",
+     "timestamp": 1716176292473000,
+     "traceId": "e4f4855d71ee17799e2c4a164ed64342",
    },
  ]

  535 |           await browser.elementByCss('a').click().waitForElementByCss('#page2')
  536 |
> 537 |           expect(getCollector().getSpans()).toMatchSnapshot()
      |                                             ^
  538 |         })
  539 |       })
  540 |

  at Object.toMatchSnapshot (e2e/opentelemetry/instrumentation/opentelemetry.test.ts:537:45)

● opentelemetry › incoming context propagation › app router › should handle client-side navigation

expect(received).toMatchSnapshot()

Snapshot name: `opentelemetry incoming context propagation app router should handle client-side navigation 1`

- Snapshot  - 106
+ Received  + 106

@@ -3,159 +3,159 @@
      "attributes": {
        "next.route": "/app/[param]/loading/page1",
        "next.span_name": "resolve page components",
        "next.span_type": "NextNodeServer.findPageComponents",
      },
-     "duration": 170.875,
+     "duration": 327.556,
      "events": [],
-     "id": "09c96f86f462995f",
+     "id": "cdf7c2f4833f1e1f",
      "kind": 0,
      "links": [],
      "name": "resolve page components",
-     "parentId": "b5d89814ae8a3785",
+     "parentId": "db5c88dd8122c20b",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828323740000,
-     "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+     "timestamp": 1716176305999000,
+     "traceId": "0050b8b49bfe9635f698deda4170ec58",
    },
    {
      "attributes": {
-       "next.segment": "[param]",
-       "next.span_name": "resolve segment modules",
-       "next.span_type": "NextNodeServer.getLayoutOrPageModule",
+       "next.page": "/app/[param]/layout",
+       "next.span_name": "generateMetadata /app/[param]/layout",
+       "next.span_type": "ResolveMetadata.generateMetadata",
      },
-     "duration": 21.583,
+     "duration": 55.241,
      "events": [],
-     "id": "474afbf4c184decb",
+     "id": "4d0d25771db86b65",
      "kind": 0,
      "links": [],
-     "name": "resolve segment modules",
-     "parentId": "5e4ad2d3e35c5ca6",
+     "name": "generateMetadata /app/[param]/layout",
+     "parentId": "2faa2ec24416a7d1",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828323742000,
-     "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+     "timestamp": 1716176306010000,
+     "traceId": "0050b8b49bfe9635f698deda4170ec58",
    },
    {
      "attributes": {
        "next.span_name": "build component tree",
        "next.span_type": "NextNodeServer.createComponentTree",
      },
-     "duration": 531.708,
+     "duration": 1666.356,
      "events": [],
-     "id": "5e4ad2d3e35c5ca6",
+     "id": "fbb44b200e1d4b63",
      "kind": 0,
      "links": [],
      "name": "build component tree",
-     "parentId": "d9f18e48ee445b87",
+     "parentId": "2faa2ec24416a7d1",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828323742000,
-     "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+     "timestamp": 1716176306002000,
+     "traceId": "0050b8b49bfe9635f698deda4170ec58",
    },
    {
      "attributes": {
-       "next.segment": "__PAGE__",
-       "next.span_name": "resolve segment modules",
-       "next.span_type": "NextNodeServer.getLayoutOrPageModule",
+       "next.span_name": "start response",
+       "next.span_type": "NextNodeServer.startResponse",
      },
-     "duration": 20.75,
+     "duration": 27.737,
      "events": [],
-     "id": "1f3de733e4e72874",
+     "id": "1688548c09c16a05",
      "kind": 0,
      "links": [],
-     "name": "resolve segment modules",
-     "parentId": "5e4ad2d3e35c5ca6",
+     "name": "start response",
+     "parentId": "2faa2ec24416a7d1",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828323742000,
-     "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+     "timestamp": 1716176306018000,
+     "traceId": "0050b8b49bfe9635f698deda4170ec58",
    },
    {
      "attributes": {
-       "next.page": "/app/[param]/layout",
-       "next.span_name": "generateMetadata /app/[param]/layout",
-       "next.span_type": "ResolveMetadata.generateMetadata",
+       "next.route": "/app/[param]/loading/page1",
+       "next.span_name": "render route (app) /app/[param]/loading/page1",
+       "next.span_type": "AppRender.getBodyResult",
      },
-     "duration": 18.167,
+     "duration": 11816.775,
      "events": [],
-     "id": "947a0cdf9d432ddb",
+     "id": "2faa2ec24416a7d1",
      "kind": 0,
      "links": [],
-     "name": "generateMetadata /app/[param]/layout",
-     "parentId": "d9f18e48ee445b87",
+     "name": "render route (app) /app/[param]/loading/page1",
+     "parentId": "db5c88dd8122c20b",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828323745000,
-     "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+     "timestamp": 1716176306001000,
+     "traceId": "0050b8b49bfe9635f698deda4170ec58",
    },
    {
      "attributes": {
-       "next.span_name": "start response",
-       "next.span_type": "NextNodeServer.startResponse",
+       "next.segment": "[param]",
+       "next.span_name": "resolve segment modules",
+       "next.span_type": "NextNodeServer.getLayoutOrPageModule",
      },
-     "duration": 9.5,
+     "duration": 88.834,
      "events": [],
-     "id": "4729a09c9abaf881",
+     "id": "439ef96cb10c07f9",
      "kind": 0,
      "links": [],
-     "name": "start response",
-     "parentId": "d9f18e48ee445b87",
+     "name": "resolve segment modules",
+     "parentId": "fbb44b200e1d4b63",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828323747000,
-     "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+     "timestamp": 1716176306003000,
+     "traceId": "0050b8b49bfe9635f698deda4170ec58",
    },
    {
      "attributes": {
-       "next.route": "/app/[param]/loading/page1",
-       "next.span_name": "render route (app) /app/[param]/loading/page1",
-       "next.span_type": "AppRender.getBodyResult",
+       "next.segment": "__PAGE__",
+       "next.span_name": "resolve segment modules",
+       "next.span_type": "NextNodeServer.getLayoutOrPageModule",
      },
-     "duration": 4530.667,
+     "duration": 80.428,
      "events": [],
-     "id": "d9f18e48ee445b87",
+     "id": "14acabcce20f6c8f",
      "kind": 0,
      "links": [],
-     "name": "render route (app) /app/[param]/loading/page1",
-     "parentId": "b5d89814ae8a3785",
+     "name": "resolve segment modules",
+     "parentId": "fbb44b200e1d4b63",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828323741000,
-     "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+     "timestamp": 1716176306003000,
+     "traceId": "0050b8b49bfe9635f698deda4170ec58",
    },
    {
      "attributes": {
        "next.clientComponentLoadCount": 5,
      },
-     "duration": 9.958,
+     "duration": 22.895,
      "events": [],
-     "id": "9a80488e523592a4",
+     "id": "9fc0f501851d9626",
      "kind": 0,
      "links": [],
      "name": "NextNodeServer.clientComponentLoading",
-     "parentId": "d9f18e48ee445b87",
+     "parentId": "2faa2ec24416a7d1",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828323744233,
-     "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+     "timestamp": 1716176306009033.2,
+     "traceId": "0050b8b49bfe9635f698deda4170ec58",
    },
    {
      "attributes": {
        "http.method": "GET",
        "http.route": "/app/[param]/loading/page1",
@@ -164,61 +164,61 @@
        "next.route": "/app/[param]/loading/page1",
        "next.rsc": false,
        "next.span_name": "GET /app/[param]/loading/page1",
        "next.span_type": "BaseServer.handleRequest",
      },
-     "duration": 512386.25,
+     "duration": 516375.447,
      "events": [],
-     "id": "b5d89814ae8a3785",
+     "id": "db5c88dd8122c20b",
      "kind": 1,
      "links": [],
      "name": "GET /app/[param]/loading/page1",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828323740000,
-     "traceId": "5d5a2e8cb93bce9598d008f9527acce7",
+     "timestamp": 1716176305998000,
+     "traceId": "0050b8b49bfe9635f698deda4170ec58",
    },
    {
      "attributes": {
        "next.route": "/app/[param]/loading/page2",
        "next.span_name": "resolve page components",
        "next.span_type": "NextNodeServer.findPageComponents",
      },
-     "duration": 102.875,
+     "duration": 244.298,
      "events": [],
-     "id": "d3dbb304cf8b1d20",
+     "id": "fd5ee1a4da3a6ee7",
      "kind": 0,
      "links": [],
      "name": "resolve page components",
-     "parentId": "2be589c6b654639f",
+     "parentId": "4260c0b116dd4fa3",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828324275000,
-     "traceId": "b108b059df9687b1ddc7f7668c3c1d1c",
+     "timestamp": 1716176306543000,
+     "traceId": "003d8aa97955f4df7bd89e0554e4beac",
    },
    {
      "attributes": {
        "next.span_name": "start response",
        "next.span_type": "NextNodeServer.startResponse",
      },
-     "duration": 11.209,
+     "duration": 26.034,
      "events": [],
-     "id": "9b71a10e381ba2d9",
+     "id": "8fad53515c6b4013",
      "kind": 0,
      "links": [],
      "name": "start response",
-     "parentId": "2be589c6b654639f",
+     "parentId": "4260c0b116dd4fa3",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828324277000,
-     "traceId": "b108b059df9687b1ddc7f7668c3c1d1c",
+     "timestamp": 1716176306546000,
+     "traceId": "003d8aa97955f4df7bd89e0554e4beac",
    },
    {
      "attributes": {
        "http.method": "GET",
        "http.route": "/app/[param]/loading/page2",
@@ -227,120 +227,120 @@
        "next.route": "/app/[param]/loading/page2",
        "next.rsc": true,
        "next.span_name": "RSC GET /app/[param]/loading/page2",
        "next.span_type": "BaseServer.handleRequest",
      },
-     "duration": 3384.292,
+     "duration": 8417.915,
      "events": [],
-     "id": "2be589c6b654639f",
+     "id": "4260c0b116dd4fa3",
      "kind": 1,
      "links": [],
      "name": "RSC GET /app/[param]/loading/page2",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828324274000,
-     "traceId": "b108b059df9687b1ddc7f7668c3c1d1c",
+     "timestamp": 1716176306542000,
+     "traceId": "003d8aa97955f4df7bd89e0554e4beac",
    },
    {
      "attributes": {
        "next.route": "/app/[param]/loading/page2",
        "next.span_name": "resolve page components",
        "next.span_type": "NextNodeServer.findPageComponents",
      },
-     "duration": 120.792,
+     "duration": 206.667,
      "events": [],
-     "id": "2047a97fc18855ec",
+     "id": "44b9de99168c1515",
      "kind": 0,
      "links": [],
      "name": "resolve page components",
-     "parentId": "e38488814f571329",
+     "parentId": "2d8667fcd65d1d4f",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828324340000,
-     "traceId": "0d6c1543230df4c288312d4c179d2d79",
+     "timestamp": 1716176306636000,
+     "traceId": "6fd3e12883415675d0de7678d8867b16",
    },
    {
      "attributes": {
        "next.span_name": "build component tree",
        "next.span_type": "NextNodeServer.createComponentTree",
      },
-     "duration": 560.917,
+     "duration": 781.839,
      "events": [],
-     "id": "4cee7b5a66761fd6",
+     "id": "88db6db56a4f81e8",
      "kind": 0,
      "links": [],
      "name": "build component tree",
-     "parentId": "e38488814f571329",
+     "parentId": "2d8667fcd65d1d4f",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828324341000,
-     "traceId": "0d6c1543230df4c288312d4c179d2d79",
+     "timestamp": 1716176306638000,
+     "traceId": "6fd3e12883415675d0de7678d8867b16",
    },
    {
      "attributes": {
        "next.span_name": "start response",
        "next.span_type": "NextNodeServer.startResponse",
      },
-     "duration": 12.667,
+     "duration": 32.69,
      "events": [],
-     "id": "e0656af2298f1a78",
+     "id": "9f1125bfc068e0e1",
      "kind": 0,
      "links": [],
      "name": "start response",
-     "parentId": "e38488814f571329",
+     "parentId": "2d8667fcd65d1d4f",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828324343000,
-     "traceId": "0d6c1543230df4c288312d4c179d2d79",
+     "timestamp": 1716176306641000,
+     "traceId": "6fd3e12883415675d0de7678d8867b16",
    },
    {
      "attributes": {
        "next.page": "/app/[param]/layout",
        "next.span_name": "generateMetadata /app/[param]/layout",
        "next.span_type": "ResolveMetadata.generateMetadata",
      },
-     "duration": 22.833,
+     "duration": 55.178,
      "events": [],
-     "id": "bbcc32e4994f8a16",
+     "id": "90cd8d9f188ed890",
      "kind": 0,
      "links": [],
      "name": "generateMetadata /app/[param]/layout",
-     "parentId": "e38488814f571329",
+     "parentId": "2d8667fcd65d1d4f",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828324344000,
-     "traceId": "0d6c1543230df4c288312d4c179d2d79",
+     "timestamp": 1716176306643000,
+     "traceId": "6fd3e12883415675d0de7678d8867b16",
    },
    {
      "attributes": {
        "next.segment": "__PAGE__",
        "next.span_name": "resolve segment modules",
        "next.span_type": "NextNodeServer.getLayoutOrPageModule",
      },
-     "duration": 82,
+     "duration": 69.521,
      "events": [],
-     "id": "6cfa448cf5fdd5fe",
+     "id": "6f2b571b2fd01455",
      "kind": 0,
      "links": [],
      "name": "resolve segment modules",
-     "parentId": "4cee7b5a66761fd6",
+     "parentId": "88db6db56a4f81e8",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828324341000,
-     "traceId": "0d6c1543230df4c288312d4c179d2d79",
+     "timestamp": 1716176306638000,
+     "traceId": "6fd3e12883415675d0de7678d8867b16",
    },
    {
      "attributes": {
        "http.method": "GET",
        "http.route": "/app/[param]/loading/page2",
@@ -349,19 +349,19 @@
        "next.route": "/app/[param]/loading/page2",
        "next.rsc": true,
        "next.span_name": "RSC GET /app/[param]/loading/page2",
        "next.span_type": "BaseServer.handleRequest",
      },
-     "duration": 507666.583,
+     "duration": 508118.08,
      "events": [],
-     "id": "e38488814f571329",
+     "id": "2d8667fcd65d1d4f",
      "kind": 1,
      "links": [],
      "name": "RSC GET /app/[param]/loading/page2",
      "runtime": "nodejs",
      "status": {
        "code": 0,
      },
-     "timestamp": 1715828324340000,
-     "traceId": "0d6c1543230df4c288312d4c179d2d79",
+     "timestamp": 1716176306635000,
+     "traceId": "6fd3e12883415675d0de7678d8867b16",
    },
  ]

  535 |           await browser.elementByCss('a').click().waitForElementByCss('#page2')
  536 |
> 537 |           expect(getCollector().getSpans()).toMatchSnapshot()
      |                                             ^
  538 |         })
  539 |       })
  540 |

  at Object.toMatchSnapshot (e2e/opentelemetry/instrumentation/opentelemetry.test.ts:537:45)

Read more about building and testing Next.js in contributing.md.

ijjk avatar Apr 29 '24 15:04 ijjk

@PatNeedham Looks like that test fail (pnpm test-start test/production/graceful-shutdown/index.test.ts) was a flaky fail.

CleanShot 2024-04-29 at 08 59 15@2x

samcx avatar Apr 29 '24 15:04 samcx

@samcx any suggestion for how @Leonils be added as a co-author on this PR so he gets credit for resolving the initial bug?

PatNeedham avatar Apr 29 '24 16:04 PatNeedham

@PatNeedham Unfortunately GitHub doesn't provide a way for this besides adding a co-author to a commit. But you can add it to the :pr: description!

samcx avatar Apr 29 '24 17:04 samcx

Thank you a lot for the time you took to complete this @PatNeedham. I tried several times to run ci tests locally, but always got some randomly failing tests and wasn't able to understand how to stabilize my environment to finish my PR and retrigger a run.

Leonils avatar Apr 29 '24 18:04 Leonils

@PatNeedham I think we're missing the test from the previous :pr: → https://github.com/Leonils/next.js/blob/697f99e1fd9d9e8bd3728e0872deb5dfcadeff5d/test/e2e/opentelemetry/opentelemetry.test.ts

samcx avatar Apr 29 '24 19:04 samcx

Good catch, let me add that back and update this branch shortly. In the mean time, what would be the right way to run just a subset of the e2e tests locally? For example, from the original PR's test checks, only these ones failed:

I see the test dev (1 through 4) processes are defined here: https://github.com/vercel/next.js/blob/v14.3.0-canary.30/.github/workflows/build_and_test.yml#L287-L300 - so I tried running this command locally:

NEXT_TEST_MODE=dev node run-tests.js --timings -g 2/4 -c 8 --type development

(replacing TEST_CONCURRENCY with 8 since it's specified in the env section further up in the file)

That's running now for the past ~15 minutes still ongoing. I'm guessing there's a -- --matchingTests opentelemetry type of argument I need to include to limit which ones get run?

I can't fully add back the it('should handle client-side navigation', async () => { ... }) test because the supporting helper functions use traceFile from the ./constants file, but that value got removed a couple months back: https://github.com/vercel/next.js/pull/62120/files#diff-95fdfa81f6699cf4ad4345cd01cc66ae151d91091ddf3f5ea4f04dd714c49f1b - is it safe to re-add it to that file?

export const traceFile = 'otel-trace.txt'

PatNeedham avatar Apr 29 '24 21:04 PatNeedham

Back then I used pnpm testheadless test/e2e/opentelemetry/opentelemetry-client-navigation.test.ts to develop the test, but when I tried to run more tests, I took also ages...

For the test "should handle client-side navigation", it's essentially a snapshot test. I ran the test first expecting nothing, reviewed the traces and was happy with what I got. I saw some changes in theses files last time, so there might be new/modified traces too. The only important part is that we have target with the actual value ("http.target": "/app/foo/loading/page1") and route with the placeholder: "next.route": "/app/[param]/loading/page1"

Leonils avatar Apr 29 '24 21:04 Leonils

@PatNeedham I can confirm the previously failed run were test flakes so that's fine (the Next.js team needs to fix this separately, but not blocking). No need to merge canary as well—I'll merge it if necessary.

samcx avatar Apr 29 '24 21:04 samcx

I doubt reintroducing the file will be enough : the TestReporter that was reporting the the file has been rewritten to send to a mock server.

See what was done in the instrumentation when I wrote my PR versus now :

  • Old (when I wrote my PR): https://github.com/Leonils/next.js/blob/697f99e1fd9d9e8bd3728e0872deb5dfcadeff5d/test/e2e/opentelemetry/instrumentation-node-test.ts
  • New: https://github.com/vercel/next.js/blob/canary/test/e2e/opentelemetry/instrumentation-test.ts

Leonils avatar Apr 29 '24 21:04 Leonils

@Leonils you were right - ~10 of the opentelemetry tests are failing in the most recent run. From https://github.com/vercel/next.js/actions/runs/8885666248/job/24397637495?pr=64852 :

image

I'll revisit this tomorrow, gotta take a break now. But feel free to push to my branch if you want to test anything. expect(received).toMatchObject(expected) appears 8 times in the logs linked to above; some/most of them appear that just additional fields were added to the trace objects, nothing removed, which is somewhat reassuring.

PatNeedham avatar Apr 29 '24 21:04 PatNeedham

Last commit I just pushed is as close as I've been to get everything passing.

pnpm testheadless test/e2e/opentelemetry/opentelemetry.test.ts

Running that locally shows 2 failed, 25 passed, 27 total

The 2 failed ones are just

opentelemetry › incoming context propagation › app router › should handle client-side navigation
opentelemetry › root context › app router › should handle client-side navigation

And it looks like the issue is just contained to the parentTraceId value:

image

What might be going awry in that test? @dvoytenko I want to loop you in on this since I see you introduced that expectTrace function a couple months back as part of https://github.com/vercel/next.js/pull/62120

PatNeedham avatar May 02 '24 04:05 PatNeedham

For the root context › app router path invocation of that test, it looks like the value received as "parentId": undefined, in all places while the expected value was "parentId": "<random-id>",.

PatNeedham avatar May 02 '24 04:05 PatNeedham

Last commit I just pushed is as close as I've been to get everything passing.

pnpm testheadless test/e2e/opentelemetry/opentelemetry.test.ts

Running that locally shows 2 failed, 25 passed, 27 total

The 2 failed ones are just

opentelemetry › incoming context propagation › app router › should handle client-side navigation
opentelemetry › root context › app router › should handle client-side navigation

And it looks like the issue is just contained to the parentTraceId value:

image

What might be going awry in that test? @dvoytenko I want to loop you in on this since I see you introduced that expectTrace function a couple months back as part of #62120

IMHO those tests just need to change to use snapshots.

dvoytenko avatar May 14 '24 22:05 dvoytenko

Thank you @dvoytenko for the suggestion, I've modified the test to use that approach and updated this PR's description so I believe it's in a mergeable state now.

PatNeedham avatar May 16 '24 03:05 PatNeedham

Is there anything that can be done here to get this merged? Would love to see it land soon.

harry-gocity avatar Oct 18 '24 14:10 harry-gocity

Would also like to see this land. For now we're using an OTEL span processor to reduce cardinality but it's less than ideal because we lose route information

  span/nextjs:
    include:
      attributes:
      - key: next.span_type
        value: (BaseServer\.handleRequest|AppRender\.fetch)
      match_type: regexp
    name:
      to_attributes:
        rules:
        - ^(RSC|fetch)?.?(GET|POST|PUT) (?P<url>.+)$

tredman avatar Oct 21 '24 16:10 tredman

Are there anything we can help with to get this merged @dvoytenko, @Blackskar875 ?

Starefossen avatar Feb 10 '25 19:02 Starefossen