Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix cardinality of opentelemetry span names on client-side navigation #64852

Open
wants to merge 16 commits into
base: canary
Choose a base branch
from

Conversation

PatNeedham
Copy link

@PatNeedham PatNeedham commented Apr 22, 2024

What?

As noticed in issue #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 High-cardinality HTTP span names #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 #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 #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.

@ijjk
Copy link
Member

ijjk commented Apr 22, 2024

Allow CI Workflow Run

  • approve CI run for commit: c9f8807

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

@samcx samcx added the CI approved Approve running CI for fork label Apr 29, 2024
@samcx
Copy link
Member

samcx commented Apr 29, 2024

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

@ijjk
Copy link
Member

ijjk commented Apr 29, 2024

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/react@19.0.0-beta-4508873393-20240430/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: a026264

@ijjk
Copy link
Member

ijjk commented Apr 29, 2024

Failing test suites

Commit: e28b95c

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.

@samcx
Copy link
Member

samcx commented Apr 29, 2024

@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

@PatNeedham
Copy link
Author

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

@samcx
Copy link
Member

samcx commented Apr 29, 2024

@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!

@PatNeedham PatNeedham marked this pull request as ready for review April 29, 2024 17:49
@Leonils
Copy link

Leonils commented Apr 29, 2024

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.

@samcx
Copy link
Member

samcx commented Apr 29, 2024

@PatNeedham
Copy link
Author

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'

@Leonils
Copy link

Leonils commented Apr 29, 2024

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"

@samcx
Copy link
Member

samcx commented Apr 29, 2024

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

@Leonils
Copy link

Leonils commented Apr 29, 2024

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 :

@PatNeedham
Copy link
Author

@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
Copy link
Author

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

@PatNeedham
Copy link
Author

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

@dvoytenko
Copy link
Member

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.

@PatNeedham
Copy link
Author

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.

@@ -877,6 +877,8 @@ async function renderToHTMLOrFlightImpl(
res,
}

getTracer().getRootSpanAttributes()?.set('next.route', pagePath)
Copy link
Member

Choose a reason for hiding this comment

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

Why move it up? Are some steps below sensitive to it?

Overall, the pagePath is not a great value here and it takes some time to update it to the right value. IMHO, too late.

Copy link
Author

@PatNeedham PatNeedham May 24, 2024

Choose a reason for hiding this comment

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

Why move it up? Are some steps below sensitive to it?

Yes - the if (isRSCRequest && !isStaticGeneration) { ... } check is where this function can end early, which affects whether next.route gets set.

But also, the snapshot testing looks problematic, for example this is from the most recent PR build-and-test logs:

image

id, parentId, timestamp, traceId & duration values appear dependent on something that's preventing consistent results. Maybe jest.setSystemTime could address the timestamp part? For the others I'm not sure what might ensure that consistency.

Copy link
Member

Choose a reason for hiding this comment

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

We can definitely just use matchAny for timestamp and duration. And probably for traceId. However, id and parentId are not so simple - they represent the nesting hierarchy which is somewhat important for telemetry. We can matchAny them too, but maybe we can find a way to link them up? E.g. maybe we can drop id/parentId, but instead add a synthetic parentName? That way we can test hierarchy as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
CI approved Approve running CI for fork tests type: next
Projects
None yet
Development

Successfully merging this pull request may close these issues.

High-cardinality HTTP span names
5 participants