)]}'
{
  "commit": "739faa8c53213505574eb1da73f6e44ee3e7d4f6",
  "tree": "b4fe3c65c56e65c4e055e81b8a75378f37aef9e8",
  "parents": [
    "54edc2d3e2990f760f08f8386b5eb9f9fd91a742"
  ],
  "author": {
    "name": "Tobias Schlatter",
    "email": "schlatter.tobias@gmail.com",
    "time": "Fri Jun 19 20:14:08 2026 +0200"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Jun 19 11:14:08 2026 -0700"
  },
  "message": "feat: auto-fetch node versions in module extension (#3919)\n\nMore aggressive alternative to #3916: We even do the fetching if facts\nare not available.\n\n## PR Checklist\n\nPlease check if your PR fulfills the following requirements:\n\n- [x] Tests for the changes have been added (for bug fixes / features)\n- [x] Docs have been added / updated (for bug fixes / features)\n\n\n## PR Type\n\nWhat kind of change does this PR introduce?\n\n\u003c!-- Please check the one that applies to this PR using \"x\". --\u003e\n\n- [ ] Bugfix\n- [x] Feature (please, look at the \"Scope of the project\" section in the\nREADME.md file)\n- [ ] Code style update (formatting, local variables)\n- [ ] Refactoring (no functional changes, no api changes)\n- [ ] Build related changes\n- [ ] CI related changes\n- [ ] Documentation content changes\n- [ ] Other... Please describe:\n\n\n## What is the current behavior?\n\u003c!-- Please describe the current behavior that you are modifying, or\nlink to a relevant issue. --\u003e\n\nNode versions / digests are hardcoded and shipped with rules_nodejs.\n\n## What is the new behavior?\n\nrules_nodejs retrieves required Node digests as needed and stores them\nin facts or in generatedRepoSpecs in the bzlmod lockfile.\n\n## Does this PR introduce a breaking change?\n\n- [ ] Yes\n- [x] No\n\n\n\u003c!-- If this PR contains a breaking change, please describe the impact\nand migration path for existing applications below. --\u003e\n\n\n## Other information\n\n- #3916 (fact only alternative)\n- [Example lockfile with bazel\n8.1.0](https://gist.github.com/gzm0/777a23ce5201d2c70a3b18bde4b83d4a)\n- [Example lockfile with bazel\n9.1.1](https://gist.github.com/gzm0/eeb1e54658e78259a33f763376a79004)",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1871163ff400abd4bbfb3ed5d8651d3de503b64f",
      "old_mode": 33188,
      "old_path": "e2e/nodejs_host/BUILD.bazel",
      "new_id": "9a54ae28939ccc61d4c8328eaba4ebbe66e06680",
      "new_mode": 33188,
      "new_path": "e2e/nodejs_host/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "8c2b4ffc830cc0525f611da5e948be08e3069c31",
      "old_mode": 33188,
      "old_path": "e2e/nodejs_host/MODULE.bazel",
      "new_id": "ff12b2fa3f63bdb88a702e759ce42a59876113a9",
      "new_mode": 33188,
      "new_path": "e2e/nodejs_host/MODULE.bazel"
    },
    {
      "type": "modify",
      "old_id": "622b1f771cf7303629aac9e43c36864caf6a9800",
      "old_mode": 33188,
      "old_path": "nodejs/BUILD.bazel",
      "new_id": "202be5a59da48c5e08aba8ce47c24ecad11271b9",
      "new_mode": 33188,
      "new_path": "nodejs/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "3b4b53f10c9a6d64f9632c7a590b39855288ae1a",
      "old_mode": 33188,
      "old_path": "nodejs/extensions.bzl",
      "new_id": "720b0568bcf82af5d1cc73ce2960edcb2278acc5",
      "new_mode": 33188,
      "new_path": "nodejs/extensions.bzl"
    },
    {
      "type": "modify",
      "old_id": "7388dc4f8b15a18233811f4c69ff7a9a0e85edce",
      "old_mode": 33188,
      "old_path": "nodejs/private/BUILD.bazel",
      "new_id": "9c92ac714f3310a51539c2b1a756cac6a3f0cd31",
      "new_mode": 33188,
      "new_path": "nodejs/private/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ab0627aaf9cebd0d5f191b9e66a407a9d5f09ba5",
      "new_mode": 33188,
      "new_path": "nodejs/private/fetch_node_repositories.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6d7fa206554ac15d3f9c02024af6986caee1a2d2",
      "new_mode": 33188,
      "new_path": "nodejs/private/version_from_attr.bzl"
    },
    {
      "type": "modify",
      "old_id": "3a278cf0bd40f13ec475cd8dae6aa35e5c9e44a1",
      "old_mode": 33188,
      "old_path": "nodejs/repositories.bzl",
      "new_id": "d5f7ab29ce4bfd9b4d5d75e29d2f4ddf13b72c17",
      "new_mode": 33188,
      "new_path": "nodejs/repositories.bzl"
    }
  ]
}
