Bazel: Bump rules_js, rules_ts and rules_nodejs

Update the JS ruleset stack: aspect_rules_js 3.1.2 -> 3.2.3,
aspect_rules_ts 3.8.8 -> 3.9.2, rules_nodejs 6.7.4 -> 6.7.5, and adapt
the tree to what the new versions require and enable.

The rules_ts options validator now resolves outDir through the tsconfig
extends chain and rejects the inherited yarn/IDE outDir
(../../.ts-out/...), which escapes the Bazel package. Override it in the
bazel tsconfigs, kept in sync with the out_dir attributes the ts_project
targets already carry.

rules_nodejs 6.7.5 reads the node version from .nvmrc
(node_version_from_nvmrc), so the version is pinned in one cross-tool
file that nvm, editors and CI honor as well -- previously the yarn dev
flow had no node pin at all. Versions newer than the ruleset's built-in
table are auto-fetched and recorded in MODULE.bazel.lock. This retires
the hand-maintained node checksum dict, the per-platform use_repo
boilerplate and the unused root alias of the pnpm extension (rules_js
resolves its own pnpm; the npm_translate_lock update machinery never
consumed the root alias).

The bundled pnpm moves to 10.34.5, whose import marks git-hosted tarball
resolutions with gitHosted: true (10.34.1 lockfile schema). Whether it
also records an integrity field for such tarballs depends on the local
store state: a cold store downloads the tarballs and emits integrity, a
warm store omits it and strips it on re-import -- same version, same
inputs, different lockfile. Reproducer:
https://github.com/davido/pnpm-codeload-repro, filed upstream as
https://github.com/pnpm/pnpm/issues/13338. The committed lock is the
warm-store form, consistent with the action caches below.

That nondeterminism broke CI: every fresh checkout re-ran pnpm import
(cold) and failed with "pnpm-lock.yaml file updated". The root cause is
that the npm_translate_lock action caches were gitignored, so
update_pnpm_lock could never see that the lock is current. Check the
.aspect/rules/external_repository_action_cache files in, as the rules_js
documentation prescribes -- the action cache "persists the state of
package and lock files that may effect the pnpm-lock.yaml generation and
should be checked into the source control along with the pnpm-lock.yaml
file" ("update_pnpm_lock" in
https://github.com/aspect-build/rules_js/blob/main/docs/pnpm.md): with
matching caches the import is skipped entirely and CI no longer depends
on pnpm's store-state behavior.

This stack also pulls in aspect_tools_telemetry, which reports ruleset
usage with repo and user fingerprints at module-resolution time; opt the
whole tree out via ASPECT_TOOLS_TELEMETRY=-all in .bazelrc.

Release-Notes: skip
Change-Id: I018b2e4754a921a69b6004ca78c38dbf08bd7539
diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU= b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU=
new file mode 100755
index 0000000..b1e9051
--- /dev/null
+++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_LTE4Nzc1MDcwNjU=
@@ -0,0 +1,7 @@
+# @generated
+# Input hashes for repository rule npm_translate_lock(name = "npm", pnpm_lock = "@@//:pnpm-lock.yaml").
+# This file should be checked into version control along with the pnpm-lock.yaml file.
+package.json=259674664
+pnpm-lock.yaml=640391753
+pnpm-workspace.yaml=-408937369
+yarn.lock=742513459
diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_NDEzOTg2ODE= b/.aspect/rules/external_repository_action_cache/npm_translate_lock_NDEzOTg2ODE=
new file mode 100755
index 0000000..51238c9
--- /dev/null
+++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_NDEzOTg2ODE=
@@ -0,0 +1,7 @@
+# @generated
+# Input hashes for repository rule npm_translate_lock(name = "tools_npm", pnpm_lock = "@@//tools/node_tools:pnpm-lock.yaml").
+# This file should be checked into version control along with the pnpm-lock.yaml file.
+tools/node_tools/package.json=899646160
+tools/node_tools/pnpm-lock.yaml=-1121876554
+tools/node_tools/pnpm-workspace.yaml=-408937369
+tools/node_tools/yarn.lock=1865795164
diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_ODE4NDE3MDEy b/.aspect/rules/external_repository_action_cache/npm_translate_lock_ODE4NDE3MDEy
new file mode 100755
index 0000000..3612935
--- /dev/null
+++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_ODE4NDE3MDEy
@@ -0,0 +1,7 @@
+# @generated
+# Input hashes for repository rule npm_translate_lock(name = "ui_npm", pnpm_lock = "@@//polygerrit-ui/app:pnpm-lock.yaml").
+# This file should be checked into version control along with the pnpm-lock.yaml file.
+polygerrit-ui/app/package.json=-844837576
+polygerrit-ui/app/pnpm-lock.yaml=1583889522
+polygerrit-ui/app/pnpm-workspace.yaml=1396467527
+polygerrit-ui/app/yarn.lock=-909422203
diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_ODE4OTg1MjQ0 b/.aspect/rules/external_repository_action_cache/npm_translate_lock_ODE4OTg1MjQ0
new file mode 100755
index 0000000..33edcc5
--- /dev/null
+++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_ODE4OTg1MjQ0
@@ -0,0 +1,7 @@
+# @generated
+# Input hashes for repository rule npm_translate_lock(name = "ui_dev_npm", pnpm_lock = "@@//polygerrit-ui:pnpm-lock.yaml").
+# This file should be checked into version control along with the pnpm-lock.yaml file.
+polygerrit-ui/package.json=-860495337
+polygerrit-ui/pnpm-lock.yaml=201412925
+polygerrit-ui/pnpm-workspace.yaml=-408937369
+polygerrit-ui/yarn.lock=1276229348
diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_ODUwOTM3NTg= b/.aspect/rules/external_repository_action_cache/npm_translate_lock_ODUwOTM3NTg=
new file mode 100755
index 0000000..23457d5
--- /dev/null
+++ b/.aspect/rules/external_repository_action_cache/npm_translate_lock_ODUwOTM3NTg=
@@ -0,0 +1,7 @@
+# @generated
+# Input hashes for repository rule npm_translate_lock(name = "plugins_npm", pnpm_lock = "@@//plugins:pnpm-lock.yaml").
+# This file should be checked into version control along with the pnpm-lock.yaml file.
+plugins/package.json=1633560207
+plugins/pnpm-lock.yaml=-77521523
+plugins/pnpm-workspace.yaml=-408937369
+plugins/yarn.lock=-2081175573
diff --git a/.bazelrc b/.bazelrc
index b864a3b..f5d330f 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -4,6 +4,7 @@
 common --incompatible_disallow_struct_provider_syntax=false
 common --incompatible_disallow_empty_glob=false
 common --@aspect_rules_ts//ts:default_to_tsc_transpiler
+common --repo_env=ASPECT_TOOLS_TELEMETRY=-all
 
 build --workspace_status_command="python3 ./tools/workspace_status.py"
 build --repository_cache=~/.gerritcodereview/bazel-cache/repository
diff --git a/.gitignore b/.gitignore
index cc71eb5..f42cfc0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,7 +10,6 @@
 .DS_Store
 CLAUDE.md
 js-to-ts.sh
-/.aspect/
 /.apt_generated
 /.apt_generated_tests
 /.eslintcache
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000..ca5c350
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+24.18.0
diff --git a/MODULE.bazel b/MODULE.bazel
index 037a989..55fbaa8 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -7,13 +7,13 @@
 
 # Language rules.
 bazel_dep(name = "aspect_bazel_lib", version = "2.22.5")
-bazel_dep(name = "aspect_rules_js", version = "3.1.2")
+bazel_dep(name = "aspect_rules_js", version = "3.2.3")
 bazel_dep(name = "aspect_rules_rollup", version = "2.0.1")
-bazel_dep(name = "aspect_rules_ts", version = "3.8.8")
+bazel_dep(name = "aspect_rules_ts", version = "3.9.2")
 bazel_dep(name = "rules_android", version = "0.7.2")
 bazel_dep(name = "rules_go", version = "0.60.0")
 bazel_dep(name = "rules_java", version = "9.3.0")
-bazel_dep(name = "rules_nodejs", version = "6.7.4")
+bazel_dep(name = "rules_nodejs", version = "6.7.5")
 bazel_dep(name = "rules_python", version = "2.0.2")
 bazel_dep(name = "rules_shell", version = "0.8.0")
 
@@ -60,4 +60,3 @@
 
 # Wiring for external dependencies contributed by in-tree plugins.
 include("//plugins:external_plugin_deps.MODULE.bazel")
-
diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock
index fe7c2be..7e2e9de 100644
--- a/MODULE.bazel.lock
+++ b/MODULE.bazel.lock
@@ -33,14 +33,14 @@
     "https://bcr.bazel.build/modules/aspect_bazel_lib/2.7.7/MODULE.bazel": "491f8681205e31bb57892d67442ce448cda4f472a8e6b3dc062865e29a64f89c",
     "https://bcr.bazel.build/modules/aspect_bazel_lib/2.8.1/MODULE.bazel": "812d2dd42f65dca362152101fbec418029cc8fd34cbad1a2fde905383d705838",
     "https://bcr.bazel.build/modules/aspect_rules_js/2.0.0/MODULE.bazel": "b45b507574aa60a92796e3e13c195cd5744b3b8aff516a9c0cb5ae6a048161c5",
-    "https://bcr.bazel.build/modules/aspect_rules_js/3.1.2/MODULE.bazel": "e3685502155d3cc65f3bf98e714f7435de67d7f8f355d63478a80197310311fc",
-    "https://bcr.bazel.build/modules/aspect_rules_js/3.1.2/source.json": "a32ab71831452b945f3f83a1b1feb9402007e600bce55ac76e15ef0c1e08b520",
+    "https://bcr.bazel.build/modules/aspect_rules_js/3.2.3/MODULE.bazel": "3a0363a5b8ec4931488dc327c577a78c1f5a725293ebffaa5d2613283701aa8a",
+    "https://bcr.bazel.build/modules/aspect_rules_js/3.2.3/source.json": "fa3187962f5fdeee0c6226792904aaafb2cf585717a264fa4393a767bffb99fe",
     "https://bcr.bazel.build/modules/aspect_rules_rollup/2.0.1/MODULE.bazel": "296e3a053658c2af989ba9bd62a205e6d1fa84bdd6dd5249196546e6b84770ec",
     "https://bcr.bazel.build/modules/aspect_rules_rollup/2.0.1/source.json": "2fe8ac1ccb4de74bf884761e070010280b272d94e3997205b361b91c75409726",
-    "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.8/MODULE.bazel": "b52b929a948438665809d49af610f58d1b14f63d6d21ab748f47b6050be4c1f6",
-    "https://bcr.bazel.build/modules/aspect_rules_ts/3.8.8/source.json": "5414530b761a45ab7ca6c49f0a2a9cf8dc0da772f5037cf05ca18aaa64bb1b19",
-    "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.3.3/MODULE.bazel": "37c764292861c2f70314efa9846bb6dbb44fc0308903b3285da6528305450183",
-    "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.3.3/source.json": "605086bbc197743a0d360f7ddc550a1d4dfa0441bc807236e17170f636153348",
+    "https://bcr.bazel.build/modules/aspect_rules_ts/3.9.2/MODULE.bazel": "feeb6c45b69c995eca3e5ca5872658c80df658022e01044eca00cf472bb89142",
+    "https://bcr.bazel.build/modules/aspect_rules_ts/3.9.2/source.json": "cf3075502f798f71a9c5707a7684eaf0b86da11ed440fd90ea34385dc297676a",
+    "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.4.2/MODULE.bazel": "f31aa84151d31e98cffd43eb7217ccff5ec52bdd5f2d10db8f053aeb23342eca",
+    "https://bcr.bazel.build/modules/aspect_tools_telemetry/0.4.2/source.json": "d027d264e6b6e7fc421e38189f4374fcd14a67e0bd6e0e705de8c2185c3787e1",
     "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b",
     "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd",
     "https://bcr.bazel.build/modules/bazel_features/1.10.0/MODULE.bazel": "f75e8807570484a99be90abcd52b5e1f390362c258bcb73106f4544957a48101",
@@ -237,8 +237,8 @@
     "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb",
     "https://bcr.bazel.build/modules/rules_nodejs/6.2.0/MODULE.bazel": "ec27907f55eb34705adb4e8257952162a2d4c3ed0f0b3b4c3c1aad1fac7be35e",
     "https://bcr.bazel.build/modules/rules_nodejs/6.7.3/MODULE.bazel": "c22a48b2a0dbf05a9dc5f83837bbc24c226c1f6e618de3c3a610044c9f336056",
-    "https://bcr.bazel.build/modules/rules_nodejs/6.7.4/MODULE.bazel": "e6a241a55c82e999145553d2e00a08fc6ebadf62b63d108fb5e984696ffd0bd2",
-    "https://bcr.bazel.build/modules/rules_nodejs/6.7.4/source.json": "34e7a8a3b4c8d630ac0e0492b3fed9dba41fe008a0edf220b7d88fa38ac53698",
+    "https://bcr.bazel.build/modules/rules_nodejs/6.7.5/MODULE.bazel": "97e6794043821d23c013baa4a50fd1c599f2e6ae92b06e2c5f1cd7074fd83e7c",
+    "https://bcr.bazel.build/modules/rules_nodejs/6.7.5/source.json": "d60ee5a76258b1c8f99545ed24172b44d43ba64ca1a2dfc04371ef203df19fdf",
     "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc",
     "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff",
     "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a",
@@ -311,49 +311,31 @@
   },
   "selectedYankedVersions": {},
   "moduleExtensions": {
-    "@@aspect_rules_ts+//ts:extensions.bzl%ext": {
-      "general": {
-        "bzlTransitiveDigest": "znGIWhsWB2BLftYOmjVGiqrZuccFABBogiS+i4Kg3tU=",
-        "usagesDigest": "wmTY4QJrwyD3VUSOHaA0OPkvX0ywR/XPM2EecaJ8yGk=",
-        "recordedInputs": [
-          "REPO_MAPPING:aspect_rules_ts+,aspect_rules_ts aspect_rules_ts+",
-          "REPO_MAPPING:aspect_rules_ts+,bazel_tools bazel_tools",
-          "FILE:@@//package.json 582559a124fbee5740e1c3a5b4167aa579a1deb338e413bd82f358940feae420"
-        ],
-        "generatedRepoSpecs": {
-          "npm_typescript": {
-            "repoRuleId": "@@aspect_rules_ts+//ts/private:npm_repositories.bzl%http_archive_version",
-            "attributes": {
-              "version": "",
-              "version_from": "@@//:package.json",
-              "integrity": "",
-              "urls": [
-                "https://registry.npmjs.org/typescript/-/typescript-{}.tgz"
-              ]
-            }
-          }
-        }
-      }
-    },
     "@@aspect_tools_telemetry+//:extension.bzl%telemetry": {
       "general": {
-        "bzlTransitiveDigest": "cl5A2O84vDL6Tt+Qga8FCj1DUDGqn+e7ly5rZ+4xvcc=",
-        "usagesDigest": "VyFtm1DFYJGrU6mU+xj6UF6QCpzpFzBONF0/8BC6ZC8=",
+        "bzlTransitiveDigest": "4w9RM0xjdKo1crk5zL20a/TuhqO0P1z1LsuXDneBXD4=",
+        "usagesDigest": "VuWbxUOa4PEE7KktNjLNLRMFWZRv30gglkSl7mxZj9w=",
         "recordedInputs": [
           "REPO_MAPPING:aspect_tools_telemetry+,bazel_lib bazel_lib+",
-          "REPO_MAPPING:aspect_tools_telemetry+,bazel_skylib bazel_skylib+"
+          "REPO_MAPPING:aspect_tools_telemetry+,bazel_skylib bazel_skylib+",
+          "ENV:ASPECT_TOOLS_TELEMETRY_TEST \\0"
         ],
         "generatedRepoSpecs": {
           "aspect_tools_telemetry_report": {
             "repoRuleId": "@@aspect_tools_telemetry+//:extension.bzl%tel_repository",
             "attributes": {
               "deps": {
-                "aspect_rules_js": "3.1.2",
-                "aspect_rules_ts": "3.8.8",
-                "aspect_tools_telemetry": "0.3.3"
-              }
+                "aspect_rules_js": "3.2.3",
+                "aspect_rules_ts": "3.9.2",
+                "aspect_tools_telemetry": "0.4.2"
+              },
+              "last_notice": 1
             }
           }
+        },
+        "moduleExtensionMetadata": {
+          "useAllRepos": "NO",
+          "reproducible": false
         }
       }
     },
@@ -449,425 +431,6 @@
         }
       }
     },
-    "@@rules_nodejs+//nodejs:extensions.bzl%node": {
-      "general": {
-        "bzlTransitiveDigest": "oZFClfRhTTwsYzpxVPkOpOt/r0+OzEfEV37au0jFZ0s=",
-        "usagesDigest": "rmuj3zuYtKpBbldwwQvwLpB0VwZVHNwpx5rco2PvuLY=",
-        "recordedInputs": [],
-        "generatedRepoSpecs": {
-          "nodejs_linux_amd64": {
-            "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
-            "attributes": {
-              "node_download_auth": {},
-              "node_repositories": {
-                "24.14.1-darwin_arm64": [
-                  "node-v24.14.1-darwin-arm64.tar.gz",
-                  "node-v24.14.1-darwin-arm64",
-                  "25495ff85bd89e2d8a24d88566d7e2f827c6b0d3d872b2cebf75371f93fcb1fe"
-                ],
-                "24.14.1-darwin_amd64": [
-                  "node-v24.14.1-darwin-x64.tar.gz",
-                  "node-v24.14.1-darwin-x64",
-                  "2526230ad7d922be82d4fdb1e7ee1e84303e133e3b4b0ec4c2897ab31de0253d"
-                ],
-                "24.14.1-linux_arm64": [
-                  "node-v24.14.1-linux-arm64.tar.xz",
-                  "node-v24.14.1-linux-arm64",
-                  "71e427e28b78846f201d4d5ecc30cb13d1508ca099ef3871889a1256c7d6f67e"
-                ],
-                "24.14.1-linux_ppc64le": [
-                  "node-v24.14.1-linux-ppc64le.tar.xz",
-                  "node-v24.14.1-linux-ppc64le",
-                  "95bf0c8dbb73144edb79a57399f03c70af6995b78e1c632926e53e6404662ef5"
-                ],
-                "24.14.1-linux_s390x": [
-                  "node-v24.14.1-linux-s390x.tar.xz",
-                  "node-v24.14.1-linux-s390x",
-                  "ed3bfbc0ff418b0ec4633f23d53a12a691717a34b041c3fbdb296c8774e5a98a"
-                ],
-                "24.14.1-linux_amd64": [
-                  "node-v24.14.1-linux-x64.tar.xz",
-                  "node-v24.14.1-linux-x64",
-                  "84d38715d449447117d05c3e71acd78daa49d5b1bfa8aacf610303920c3322be"
-                ],
-                "24.14.1-windows_amd64": [
-                  "node-v24.14.1-win-x64.zip",
-                  "node-v24.14.1-win-x64",
-                  "6e50ce5498c0cebc20fd39ab3ff5df836ed2f8a31aa093cecad8497cff126d70"
-                ]
-              },
-              "node_urls": [
-                "https://nodejs.org/dist/v{version}/{filename}"
-              ],
-              "node_version": "24.14.1",
-              "include_headers": false,
-              "platform": "linux_amd64"
-            }
-          },
-          "nodejs_linux_arm64": {
-            "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
-            "attributes": {
-              "node_download_auth": {},
-              "node_repositories": {
-                "24.14.1-darwin_arm64": [
-                  "node-v24.14.1-darwin-arm64.tar.gz",
-                  "node-v24.14.1-darwin-arm64",
-                  "25495ff85bd89e2d8a24d88566d7e2f827c6b0d3d872b2cebf75371f93fcb1fe"
-                ],
-                "24.14.1-darwin_amd64": [
-                  "node-v24.14.1-darwin-x64.tar.gz",
-                  "node-v24.14.1-darwin-x64",
-                  "2526230ad7d922be82d4fdb1e7ee1e84303e133e3b4b0ec4c2897ab31de0253d"
-                ],
-                "24.14.1-linux_arm64": [
-                  "node-v24.14.1-linux-arm64.tar.xz",
-                  "node-v24.14.1-linux-arm64",
-                  "71e427e28b78846f201d4d5ecc30cb13d1508ca099ef3871889a1256c7d6f67e"
-                ],
-                "24.14.1-linux_ppc64le": [
-                  "node-v24.14.1-linux-ppc64le.tar.xz",
-                  "node-v24.14.1-linux-ppc64le",
-                  "95bf0c8dbb73144edb79a57399f03c70af6995b78e1c632926e53e6404662ef5"
-                ],
-                "24.14.1-linux_s390x": [
-                  "node-v24.14.1-linux-s390x.tar.xz",
-                  "node-v24.14.1-linux-s390x",
-                  "ed3bfbc0ff418b0ec4633f23d53a12a691717a34b041c3fbdb296c8774e5a98a"
-                ],
-                "24.14.1-linux_amd64": [
-                  "node-v24.14.1-linux-x64.tar.xz",
-                  "node-v24.14.1-linux-x64",
-                  "84d38715d449447117d05c3e71acd78daa49d5b1bfa8aacf610303920c3322be"
-                ],
-                "24.14.1-windows_amd64": [
-                  "node-v24.14.1-win-x64.zip",
-                  "node-v24.14.1-win-x64",
-                  "6e50ce5498c0cebc20fd39ab3ff5df836ed2f8a31aa093cecad8497cff126d70"
-                ]
-              },
-              "node_urls": [
-                "https://nodejs.org/dist/v{version}/{filename}"
-              ],
-              "node_version": "24.14.1",
-              "include_headers": false,
-              "platform": "linux_arm64"
-            }
-          },
-          "nodejs_linux_s390x": {
-            "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
-            "attributes": {
-              "node_download_auth": {},
-              "node_repositories": {
-                "24.14.1-darwin_arm64": [
-                  "node-v24.14.1-darwin-arm64.tar.gz",
-                  "node-v24.14.1-darwin-arm64",
-                  "25495ff85bd89e2d8a24d88566d7e2f827c6b0d3d872b2cebf75371f93fcb1fe"
-                ],
-                "24.14.1-darwin_amd64": [
-                  "node-v24.14.1-darwin-x64.tar.gz",
-                  "node-v24.14.1-darwin-x64",
-                  "2526230ad7d922be82d4fdb1e7ee1e84303e133e3b4b0ec4c2897ab31de0253d"
-                ],
-                "24.14.1-linux_arm64": [
-                  "node-v24.14.1-linux-arm64.tar.xz",
-                  "node-v24.14.1-linux-arm64",
-                  "71e427e28b78846f201d4d5ecc30cb13d1508ca099ef3871889a1256c7d6f67e"
-                ],
-                "24.14.1-linux_ppc64le": [
-                  "node-v24.14.1-linux-ppc64le.tar.xz",
-                  "node-v24.14.1-linux-ppc64le",
-                  "95bf0c8dbb73144edb79a57399f03c70af6995b78e1c632926e53e6404662ef5"
-                ],
-                "24.14.1-linux_s390x": [
-                  "node-v24.14.1-linux-s390x.tar.xz",
-                  "node-v24.14.1-linux-s390x",
-                  "ed3bfbc0ff418b0ec4633f23d53a12a691717a34b041c3fbdb296c8774e5a98a"
-                ],
-                "24.14.1-linux_amd64": [
-                  "node-v24.14.1-linux-x64.tar.xz",
-                  "node-v24.14.1-linux-x64",
-                  "84d38715d449447117d05c3e71acd78daa49d5b1bfa8aacf610303920c3322be"
-                ],
-                "24.14.1-windows_amd64": [
-                  "node-v24.14.1-win-x64.zip",
-                  "node-v24.14.1-win-x64",
-                  "6e50ce5498c0cebc20fd39ab3ff5df836ed2f8a31aa093cecad8497cff126d70"
-                ]
-              },
-              "node_urls": [
-                "https://nodejs.org/dist/v{version}/{filename}"
-              ],
-              "node_version": "24.14.1",
-              "include_headers": false,
-              "platform": "linux_s390x"
-            }
-          },
-          "nodejs_linux_ppc64le": {
-            "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
-            "attributes": {
-              "node_download_auth": {},
-              "node_repositories": {
-                "24.14.1-darwin_arm64": [
-                  "node-v24.14.1-darwin-arm64.tar.gz",
-                  "node-v24.14.1-darwin-arm64",
-                  "25495ff85bd89e2d8a24d88566d7e2f827c6b0d3d872b2cebf75371f93fcb1fe"
-                ],
-                "24.14.1-darwin_amd64": [
-                  "node-v24.14.1-darwin-x64.tar.gz",
-                  "node-v24.14.1-darwin-x64",
-                  "2526230ad7d922be82d4fdb1e7ee1e84303e133e3b4b0ec4c2897ab31de0253d"
-                ],
-                "24.14.1-linux_arm64": [
-                  "node-v24.14.1-linux-arm64.tar.xz",
-                  "node-v24.14.1-linux-arm64",
-                  "71e427e28b78846f201d4d5ecc30cb13d1508ca099ef3871889a1256c7d6f67e"
-                ],
-                "24.14.1-linux_ppc64le": [
-                  "node-v24.14.1-linux-ppc64le.tar.xz",
-                  "node-v24.14.1-linux-ppc64le",
-                  "95bf0c8dbb73144edb79a57399f03c70af6995b78e1c632926e53e6404662ef5"
-                ],
-                "24.14.1-linux_s390x": [
-                  "node-v24.14.1-linux-s390x.tar.xz",
-                  "node-v24.14.1-linux-s390x",
-                  "ed3bfbc0ff418b0ec4633f23d53a12a691717a34b041c3fbdb296c8774e5a98a"
-                ],
-                "24.14.1-linux_amd64": [
-                  "node-v24.14.1-linux-x64.tar.xz",
-                  "node-v24.14.1-linux-x64",
-                  "84d38715d449447117d05c3e71acd78daa49d5b1bfa8aacf610303920c3322be"
-                ],
-                "24.14.1-windows_amd64": [
-                  "node-v24.14.1-win-x64.zip",
-                  "node-v24.14.1-win-x64",
-                  "6e50ce5498c0cebc20fd39ab3ff5df836ed2f8a31aa093cecad8497cff126d70"
-                ]
-              },
-              "node_urls": [
-                "https://nodejs.org/dist/v{version}/{filename}"
-              ],
-              "node_version": "24.14.1",
-              "include_headers": false,
-              "platform": "linux_ppc64le"
-            }
-          },
-          "nodejs_darwin_amd64": {
-            "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
-            "attributes": {
-              "node_download_auth": {},
-              "node_repositories": {
-                "24.14.1-darwin_arm64": [
-                  "node-v24.14.1-darwin-arm64.tar.gz",
-                  "node-v24.14.1-darwin-arm64",
-                  "25495ff85bd89e2d8a24d88566d7e2f827c6b0d3d872b2cebf75371f93fcb1fe"
-                ],
-                "24.14.1-darwin_amd64": [
-                  "node-v24.14.1-darwin-x64.tar.gz",
-                  "node-v24.14.1-darwin-x64",
-                  "2526230ad7d922be82d4fdb1e7ee1e84303e133e3b4b0ec4c2897ab31de0253d"
-                ],
-                "24.14.1-linux_arm64": [
-                  "node-v24.14.1-linux-arm64.tar.xz",
-                  "node-v24.14.1-linux-arm64",
-                  "71e427e28b78846f201d4d5ecc30cb13d1508ca099ef3871889a1256c7d6f67e"
-                ],
-                "24.14.1-linux_ppc64le": [
-                  "node-v24.14.1-linux-ppc64le.tar.xz",
-                  "node-v24.14.1-linux-ppc64le",
-                  "95bf0c8dbb73144edb79a57399f03c70af6995b78e1c632926e53e6404662ef5"
-                ],
-                "24.14.1-linux_s390x": [
-                  "node-v24.14.1-linux-s390x.tar.xz",
-                  "node-v24.14.1-linux-s390x",
-                  "ed3bfbc0ff418b0ec4633f23d53a12a691717a34b041c3fbdb296c8774e5a98a"
-                ],
-                "24.14.1-linux_amd64": [
-                  "node-v24.14.1-linux-x64.tar.xz",
-                  "node-v24.14.1-linux-x64",
-                  "84d38715d449447117d05c3e71acd78daa49d5b1bfa8aacf610303920c3322be"
-                ],
-                "24.14.1-windows_amd64": [
-                  "node-v24.14.1-win-x64.zip",
-                  "node-v24.14.1-win-x64",
-                  "6e50ce5498c0cebc20fd39ab3ff5df836ed2f8a31aa093cecad8497cff126d70"
-                ]
-              },
-              "node_urls": [
-                "https://nodejs.org/dist/v{version}/{filename}"
-              ],
-              "node_version": "24.14.1",
-              "include_headers": false,
-              "platform": "darwin_amd64"
-            }
-          },
-          "nodejs_darwin_arm64": {
-            "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
-            "attributes": {
-              "node_download_auth": {},
-              "node_repositories": {
-                "24.14.1-darwin_arm64": [
-                  "node-v24.14.1-darwin-arm64.tar.gz",
-                  "node-v24.14.1-darwin-arm64",
-                  "25495ff85bd89e2d8a24d88566d7e2f827c6b0d3d872b2cebf75371f93fcb1fe"
-                ],
-                "24.14.1-darwin_amd64": [
-                  "node-v24.14.1-darwin-x64.tar.gz",
-                  "node-v24.14.1-darwin-x64",
-                  "2526230ad7d922be82d4fdb1e7ee1e84303e133e3b4b0ec4c2897ab31de0253d"
-                ],
-                "24.14.1-linux_arm64": [
-                  "node-v24.14.1-linux-arm64.tar.xz",
-                  "node-v24.14.1-linux-arm64",
-                  "71e427e28b78846f201d4d5ecc30cb13d1508ca099ef3871889a1256c7d6f67e"
-                ],
-                "24.14.1-linux_ppc64le": [
-                  "node-v24.14.1-linux-ppc64le.tar.xz",
-                  "node-v24.14.1-linux-ppc64le",
-                  "95bf0c8dbb73144edb79a57399f03c70af6995b78e1c632926e53e6404662ef5"
-                ],
-                "24.14.1-linux_s390x": [
-                  "node-v24.14.1-linux-s390x.tar.xz",
-                  "node-v24.14.1-linux-s390x",
-                  "ed3bfbc0ff418b0ec4633f23d53a12a691717a34b041c3fbdb296c8774e5a98a"
-                ],
-                "24.14.1-linux_amd64": [
-                  "node-v24.14.1-linux-x64.tar.xz",
-                  "node-v24.14.1-linux-x64",
-                  "84d38715d449447117d05c3e71acd78daa49d5b1bfa8aacf610303920c3322be"
-                ],
-                "24.14.1-windows_amd64": [
-                  "node-v24.14.1-win-x64.zip",
-                  "node-v24.14.1-win-x64",
-                  "6e50ce5498c0cebc20fd39ab3ff5df836ed2f8a31aa093cecad8497cff126d70"
-                ]
-              },
-              "node_urls": [
-                "https://nodejs.org/dist/v{version}/{filename}"
-              ],
-              "node_version": "24.14.1",
-              "include_headers": false,
-              "platform": "darwin_arm64"
-            }
-          },
-          "nodejs_windows_amd64": {
-            "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
-            "attributes": {
-              "node_download_auth": {},
-              "node_repositories": {
-                "24.14.1-darwin_arm64": [
-                  "node-v24.14.1-darwin-arm64.tar.gz",
-                  "node-v24.14.1-darwin-arm64",
-                  "25495ff85bd89e2d8a24d88566d7e2f827c6b0d3d872b2cebf75371f93fcb1fe"
-                ],
-                "24.14.1-darwin_amd64": [
-                  "node-v24.14.1-darwin-x64.tar.gz",
-                  "node-v24.14.1-darwin-x64",
-                  "2526230ad7d922be82d4fdb1e7ee1e84303e133e3b4b0ec4c2897ab31de0253d"
-                ],
-                "24.14.1-linux_arm64": [
-                  "node-v24.14.1-linux-arm64.tar.xz",
-                  "node-v24.14.1-linux-arm64",
-                  "71e427e28b78846f201d4d5ecc30cb13d1508ca099ef3871889a1256c7d6f67e"
-                ],
-                "24.14.1-linux_ppc64le": [
-                  "node-v24.14.1-linux-ppc64le.tar.xz",
-                  "node-v24.14.1-linux-ppc64le",
-                  "95bf0c8dbb73144edb79a57399f03c70af6995b78e1c632926e53e6404662ef5"
-                ],
-                "24.14.1-linux_s390x": [
-                  "node-v24.14.1-linux-s390x.tar.xz",
-                  "node-v24.14.1-linux-s390x",
-                  "ed3bfbc0ff418b0ec4633f23d53a12a691717a34b041c3fbdb296c8774e5a98a"
-                ],
-                "24.14.1-linux_amd64": [
-                  "node-v24.14.1-linux-x64.tar.xz",
-                  "node-v24.14.1-linux-x64",
-                  "84d38715d449447117d05c3e71acd78daa49d5b1bfa8aacf610303920c3322be"
-                ],
-                "24.14.1-windows_amd64": [
-                  "node-v24.14.1-win-x64.zip",
-                  "node-v24.14.1-win-x64",
-                  "6e50ce5498c0cebc20fd39ab3ff5df836ed2f8a31aa093cecad8497cff126d70"
-                ]
-              },
-              "node_urls": [
-                "https://nodejs.org/dist/v{version}/{filename}"
-              ],
-              "node_version": "24.14.1",
-              "include_headers": false,
-              "platform": "windows_amd64"
-            }
-          },
-          "nodejs_windows_arm64": {
-            "repoRuleId": "@@rules_nodejs+//nodejs:repositories.bzl%_nodejs_repositories",
-            "attributes": {
-              "node_download_auth": {},
-              "node_repositories": {
-                "24.14.1-darwin_arm64": [
-                  "node-v24.14.1-darwin-arm64.tar.gz",
-                  "node-v24.14.1-darwin-arm64",
-                  "25495ff85bd89e2d8a24d88566d7e2f827c6b0d3d872b2cebf75371f93fcb1fe"
-                ],
-                "24.14.1-darwin_amd64": [
-                  "node-v24.14.1-darwin-x64.tar.gz",
-                  "node-v24.14.1-darwin-x64",
-                  "2526230ad7d922be82d4fdb1e7ee1e84303e133e3b4b0ec4c2897ab31de0253d"
-                ],
-                "24.14.1-linux_arm64": [
-                  "node-v24.14.1-linux-arm64.tar.xz",
-                  "node-v24.14.1-linux-arm64",
-                  "71e427e28b78846f201d4d5ecc30cb13d1508ca099ef3871889a1256c7d6f67e"
-                ],
-                "24.14.1-linux_ppc64le": [
-                  "node-v24.14.1-linux-ppc64le.tar.xz",
-                  "node-v24.14.1-linux-ppc64le",
-                  "95bf0c8dbb73144edb79a57399f03c70af6995b78e1c632926e53e6404662ef5"
-                ],
-                "24.14.1-linux_s390x": [
-                  "node-v24.14.1-linux-s390x.tar.xz",
-                  "node-v24.14.1-linux-s390x",
-                  "ed3bfbc0ff418b0ec4633f23d53a12a691717a34b041c3fbdb296c8774e5a98a"
-                ],
-                "24.14.1-linux_amd64": [
-                  "node-v24.14.1-linux-x64.tar.xz",
-                  "node-v24.14.1-linux-x64",
-                  "84d38715d449447117d05c3e71acd78daa49d5b1bfa8aacf610303920c3322be"
-                ],
-                "24.14.1-windows_amd64": [
-                  "node-v24.14.1-win-x64.zip",
-                  "node-v24.14.1-win-x64",
-                  "6e50ce5498c0cebc20fd39ab3ff5df836ed2f8a31aa093cecad8497cff126d70"
-                ]
-              },
-              "node_urls": [
-                "https://nodejs.org/dist/v{version}/{filename}"
-              ],
-              "node_version": "24.14.1",
-              "include_headers": false,
-              "platform": "windows_arm64"
-            }
-          },
-          "nodejs": {
-            "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias",
-            "attributes": {
-              "user_node_repository_name": "nodejs"
-            }
-          },
-          "nodejs_host": {
-            "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_repo_host_os_alias.bzl%nodejs_repo_host_os_alias",
-            "attributes": {
-              "user_node_repository_name": "nodejs"
-            }
-          },
-          "nodejs_toolchains": {
-            "repoRuleId": "@@rules_nodejs+//nodejs/private:nodejs_toolchains_repo.bzl%nodejs_toolchains_repo",
-            "attributes": {
-              "user_node_repository_name": "nodejs"
-            }
-          }
-        }
-      }
-    },
     "@@rules_python+//python/uv:uv.bzl%uv": {
       "general": {
         "bzlTransitiveDigest": "I8FPZMevE2oI/peSpMBRVIN++WOtfjtJVjbPsBZQ87A=",
@@ -1262,7 +825,7 @@
     "@@yq.bzl+//yq:extensions.bzl%yq": {
       "general": {
         "bzlTransitiveDigest": "tDqk+ntWTdxNAWPDjRY1uITgHbti2jcXR5ZdinltBs0=",
-        "usagesDigest": "Pz33iK5QtkPFivaljfReN4KzpAqM2DgY4vwgyZSNoAM=",
+        "usagesDigest": "XGLRpNcVs4WD/zog6U0sXbBo2OlR5O4mc58OU1L3EVc=",
         "recordedInputs": [],
         "generatedRepoSpecs": {
           "yq_darwin_amd64": {
@@ -1339,6 +902,9 @@
     }
   },
   "facts": {
+    "@@aspect_tools_telemetry+//:extension.bzl%telemetry": {
+      "notice_version": "1"
+    },
     "@@rules_go+//go:extensions.bzl%go_sdk": {
       "1.22.4": {
         "aix_ppc64": [
diff --git a/polygerrit-ui/app/pnpm-lock.yaml b/polygerrit-ui/app/pnpm-lock.yaml
index da97189..6d865aa 100644
--- a/polygerrit-ui/app/pnpm-lock.yaml
+++ b/polygerrit-ui/app/pnpm-lock.yaml
@@ -138,15 +138,15 @@
     engines: {node: '>=12.0.0'}
 
   highlightjs-closure-templates@https://codeload.github.com/highlightjs/highlightjs-closure-templates/tar.gz/02fb0646e0499084f96a99b8c6f4a0d7bd1d33ba:
-    resolution: {tarball: https://codeload.github.com/highlightjs/highlightjs-closure-templates/tar.gz/02fb0646e0499084f96a99b8c6f4a0d7bd1d33ba}
+    resolution: {gitHosted: true, tarball: https://codeload.github.com/highlightjs/highlightjs-closure-templates/tar.gz/02fb0646e0499084f96a99b8c6f4a0d7bd1d33ba}
     version: 0.0.1
 
   highlightjs-epp@https://codeload.github.com/highlightjs/highlightjs-epp/tar.gz/9f9e1a92f37c217c68899c7d3bdccb4d134681b9:
-    resolution: {tarball: https://codeload.github.com/highlightjs/highlightjs-epp/tar.gz/9f9e1a92f37c217c68899c7d3bdccb4d134681b9}
+    resolution: {gitHosted: true, tarball: https://codeload.github.com/highlightjs/highlightjs-epp/tar.gz/9f9e1a92f37c217c68899c7d3bdccb4d134681b9}
     version: 0.0.1
 
   highlightjs-structured-text@https://codeload.github.com/highlightjs/highlightjs-structured-text/tar.gz/e68dd7aa829529fb6c40d6287585f43273605a9e:
-    resolution: {tarball: https://codeload.github.com/highlightjs/highlightjs-structured-text/tar.gz/e68dd7aa829529fb6c40d6287585f43273605a9e}
+    resolution: {gitHosted: true, tarball: https://codeload.github.com/highlightjs/highlightjs-structured-text/tar.gz/e68dd7aa829529fb6c40d6287585f43273605a9e}
     version: 1.4.9
 
   highlightjs-ttcn3@git+https://gitea.osmocom.org/ttcn3/highlightjs-ttcn3.git#6daccff309fca1e7561a43984d42fa4f829ce06d:
@@ -154,7 +154,7 @@
     version: 0.0.1
 
   highlightjs-vue@https://codeload.github.com/paladox/highlightjs-vue/tar.gz/44eed074ea0110d1ad03d2cbd77d27027cf7bb04:
-    resolution: {tarball: https://codeload.github.com/paladox/highlightjs-vue/tar.gz/44eed074ea0110d1ad03d2cbd77d27027cf7bb04}
+    resolution: {gitHosted: true, tarball: https://codeload.github.com/paladox/highlightjs-vue/tar.gz/44eed074ea0110d1ad03d2cbd77d27027cf7bb04}
     version: 1.1.0
 
   ieee754@1.2.1:
@@ -224,7 +224,7 @@
     engines: {node: '>= 6'}
 
   resemblejs@https://codeload.github.com/rsmbl/Resemble.js/tar.gz/66a55c5bfc3bda2303ad632ee8ce3c727b415917:
-    resolution: {tarball: https://codeload.github.com/rsmbl/Resemble.js/tar.gz/66a55c5bfc3bda2303ad632ee8ce3c727b415917}
+    resolution: {gitHosted: true, tarball: https://codeload.github.com/rsmbl/Resemble.js/tar.gz/66a55c5bfc3bda2303ad632ee8ce3c727b415917}
     version: 5.0.0
 
   rxjs@6.6.7:
diff --git a/polygerrit-ui/app/tsconfig_bazel.json b/polygerrit-ui/app/tsconfig_bazel.json
index 730fc4d..8cd5dfb 100644
--- a/polygerrit-ui/app/tsconfig_bazel.json
+++ b/polygerrit-ui/app/tsconfig_bazel.json
@@ -1,6 +1,10 @@
 {
   "extends": "./tsconfig.json",
   "compilerOptions": {
+    // Override the yarn/IDE outDir from tsconfig.json: rules_ts requires the
+    // output directory to stay within the Bazel package (kept in sync with
+    // out_dir of the compile_pg ts_project in the BUILD file).
+    "outDir": "_pg_ts_out",
     "typeRoots": [
       "../../external/ui_npm/node_modules/@types",
       "../../external/ui_dev_npm/node_modules/@types"
diff --git a/polygerrit-ui/app/tsconfig_bazel_test.json b/polygerrit-ui/app/tsconfig_bazel_test.json
index 7d74ffa..e6fc2cc 100644
--- a/polygerrit-ui/app/tsconfig_bazel_test.json
+++ b/polygerrit-ui/app/tsconfig_bazel_test.json
@@ -1,6 +1,10 @@
 {
   "extends": "./tsconfig_bazel.json",
   "compilerOptions": {
+    // Override the yarn/IDE outDir from tsconfig.json: rules_ts requires the
+    // output directory to stay within the Bazel package (kept in sync with
+    // out_dir of the compile_pg_with_tests ts_project).
+    "outDir": "_pg_with_tests_out",
     "typeRoots": [
       "node_modules/@types",
       "../node_modules/@types"
diff --git a/polygerrit-ui/polygerrit.MODULE.bazel b/polygerrit-ui/polygerrit.MODULE.bazel
index d839cc8..e04ccd6 100644
--- a/polygerrit-ui/polygerrit.MODULE.bazel
+++ b/polygerrit-ui/polygerrit.MODULE.bazel
@@ -27,34 +27,12 @@
 )
 use_repo(rules_ts_ext, "npm_typescript")
 
-NODE_24_REPO = {
-    "24.14.1-darwin_arm64": ("node-v24.14.1-darwin-arm64.tar.gz", "node-v24.14.1-darwin-arm64", "25495ff85bd89e2d8a24d88566d7e2f827c6b0d3d872b2cebf75371f93fcb1fe"),
-    "24.14.1-darwin_amd64": ("node-v24.14.1-darwin-x64.tar.gz", "node-v24.14.1-darwin-x64", "2526230ad7d922be82d4fdb1e7ee1e84303e133e3b4b0ec4c2897ab31de0253d"),
-    "24.14.1-linux_arm64": ("node-v24.14.1-linux-arm64.tar.xz", "node-v24.14.1-linux-arm64", "71e427e28b78846f201d4d5ecc30cb13d1508ca099ef3871889a1256c7d6f67e"),
-    "24.14.1-linux_ppc64le": ("node-v24.14.1-linux-ppc64le.tar.xz", "node-v24.14.1-linux-ppc64le", "95bf0c8dbb73144edb79a57399f03c70af6995b78e1c632926e53e6404662ef5"),
-    "24.14.1-linux_s390x": ("node-v24.14.1-linux-s390x.tar.xz", "node-v24.14.1-linux-s390x", "ed3bfbc0ff418b0ec4633f23d53a12a691717a34b041c3fbdb296c8774e5a98a"),
-    "24.14.1-linux_amd64": ("node-v24.14.1-linux-x64.tar.xz", "node-v24.14.1-linux-x64", "84d38715d449447117d05c3e71acd78daa49d5b1bfa8aacf610303920c3322be"),
-    "24.14.1-windows_amd64": ("node-v24.14.1-win-x64.zip", "node-v24.14.1-win-x64", "6e50ce5498c0cebc20fd39ab3ff5df836ed2f8a31aa093cecad8497cff126d70"),
-}
-
+# The node version is read from //:.nvmrc, the cross-tool convention file
+# also honored by nvm and CI -- Bazel and the yarn dev flow share one pin.
+# Versions unknown to the pinned rules_nodejs release are auto-fetched and
+# recorded in MODULE.bazel.lock (rules_nodejs >= 6.7.5).
 node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
-node.toolchain(
-    name = "nodejs",
-    node_repositories = NODE_24_REPO,
-    node_version = "24.14.1",
-)
-use_repo(node, "nodejs_toolchains")
-use_repo(node, "nodejs_darwin_arm64")
-use_repo(node, "nodejs_darwin_amd64")
-use_repo(node, "nodejs_linux_arm64")
-use_repo(node, "nodejs_linux_ppc64le")
-use_repo(node, "nodejs_linux_s390x")
-use_repo(node, "nodejs_linux_amd64")
-use_repo(node, "nodejs_windows_amd64")
-
-pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm")
-pnpm.pnpm(pnpm_version = "10.33.3")
-use_repo(pnpm, "pnpm")
+node.toolchain(node_version_from_nvmrc = "//:.nvmrc")
 
 npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm")
 npm.npm_translate_lock(