)]}'
{
  "log": [
    {
      "commit": "bcc63420973722c7cf9885f77aca556d083c69a9",
      "tree": "b04c8b6ae9ee31345230d70a8e5b63fee532fef5",
      "parents": [
        "c4eceec8ac4f6ab9e2b02a47faa6770bcd0e4794"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Sat May 09 13:01:16 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 09 13:01:16 2026 -0700"
      },
      "message": "Changes by create-pull-request action (#2832)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: alexeagle \u003c47395+alexeagle@users.noreply.github.com\u003e"
    },
    {
      "commit": "c4eceec8ac4f6ab9e2b02a47faa6770bcd0e4794",
      "tree": "46fd7b84a0684875d05dc9ca10af4669860f1477",
      "parents": [
        "315b6dd6d39cfb980b10b486d8d16db0977ef42d"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Fri May 08 16:06:30 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 16:06:30 2026 -0700"
      },
      "message": "feat: handle watch protocol v3 CYCLE_RESET (#2822)\n\nTo handle https://github.com/aspect-build/aspect-gazelle/pull/302\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases\n- New test cases added\n- Manual testing; please provide instructions so we can reproduce:"
    },
    {
      "commit": "315b6dd6d39cfb980b10b486d8d16db0977ef42d",
      "tree": "e4fbc047cfd8efc1ed200f6bb070af205dfbccd6",
      "parents": [
        "9f3c4109fb34f50d15241a7407b5a71a75ed0c6b"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Thu May 07 09:22:18 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 09:22:18 2026 -0700"
      },
      "message": "Changes by create-pull-request action (#2831)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: alexeagle \u003c47395+alexeagle@users.noreply.github.com\u003e"
    },
    {
      "commit": "9f3c4109fb34f50d15241a7407b5a71a75ed0c6b",
      "tree": "098a9fd801a232b3797810754686066fca4401db",
      "parents": [
        "b6caba8f0ed688470a19eb09f1cbbd0678c4db6f"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Wed May 06 09:41:42 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 09:41:42 2026 -0700"
      },
      "message": "fix: revert buggy chdir simplification (#2829)\n\nCommit 19955f0b tried to simplify the `chdir` logic in the launcher\nscript, but this introduced a bug in `js_test`. I believe the logic was\ncorrect for `js_binary` and `js_run_binary`, since those execute in the\ntarget bin directory, but it did not work for `js_test`, which executes\nin the runfiles directory. I added a new test case to cover this\nsituation.\n\nFixes #2827.\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: yes\n\nFixes #2827, a bug with `chdir` on `js_test` introduced in v3.1.0.\n\n### Test plan\n\n- Covered by existing test cases\n- New test cases added"
    },
    {
      "commit": "b6caba8f0ed688470a19eb09f1cbbd0678c4db6f",
      "tree": "7ad87791d5749bd9cb9eb881f46db81772e55704",
      "parents": [
        "b914fcbb866c1d50813cd93e5f071567b2dfba42"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Wed May 06 08:48:01 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 08:48:01 2026 -0700"
      },
      "message": "Changes by create-pull-request action (#2828)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: alexeagle \u003c47395+alexeagle@users.noreply.github.com\u003e"
    },
    {
      "commit": "b914fcbb866c1d50813cd93e5f071567b2dfba42",
      "tree": "43a4adbace9576a743db5761909f19b75a56b4a0",
      "parents": [
        "40b7476d4e3df2f6cb5e02e9f3c5daa39fed725f"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Tue May 05 00:59:53 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 00:59:53 2026 -0700"
      },
      "message": "Changes by create-pull-request action (#2825)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: alexeagle \u003c47395+alexeagle@users.noreply.github.com\u003e"
    },
    {
      "commit": "40b7476d4e3df2f6cb5e02e9f3c5daa39fed725f",
      "tree": "d90166dd3cf8ad9f1592aff888c813c550ebc210",
      "parents": [
        "80d7460aac4ff72d16739393b4261518cc32d2a3"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Mon May 04 17:13:02 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 04 17:13:02 2026 -0700"
      },
      "message": "Changes by create-pull-request action (#2821)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: alexeagle \u003c47395+alexeagle@users.noreply.github.com\u003e"
    },
    {
      "commit": "80d7460aac4ff72d16739393b4261518cc32d2a3",
      "tree": "badda91927695a53247397164963b251ecad1f28",
      "parents": [
        "739dbdca1fac9187744c0e9a65e072b764012c29"
      ],
      "author": {
        "name": "Sharmila",
        "email": "sharmila@openai.com",
        "time": "Sun May 03 15:59:38 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 03 22:59:38 2026 +0000"
      },
      "message": "chore: support pnpm 11 managed toolchain (#2819)\n\nSupport pnpm v11.x.x\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n(note that /bin/pnpm.cjs exists in the older versions too)\n- Suggested release notes appear below: no\n\n### Test plan\n\n- New test cases added\n- Manual testing; please provide instructions so we can reproduce:\n```\ncd e2e/pnpm_repo_install\nbazel run @pnpm//:pnpm -- --version\n11.0.3\n```"
    },
    {
      "commit": "739dbdca1fac9187744c0e9a65e072b764012c29",
      "tree": "85a1581e2fd2a5d612c058910919ec2917d1e988",
      "parents": [
        "f10e4fa55dcc8dbc1fc98bb3815972e3ff31d43e"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Sun May 03 15:43:53 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 03 15:43:53 2026 -0700"
      },
      "message": "feat: support pnpm 11 binary (#2820)\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: no\n\n### Test plan\n\n- Covered by existing test cases\n- New test cases added"
    },
    {
      "commit": "f10e4fa55dcc8dbc1fc98bb3815972e3ff31d43e",
      "tree": "248ccdbe455f737dcbcdfd4237b61a15686e6222",
      "parents": [
        "19955f0bdd887a6ef236af4e61a5389bb1a673fa"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Wed Apr 29 09:41:20 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 09:41:20 2026 -0700"
      },
      "message": "fix: correctly handle an empty chdir argument on js_run_binary (#2817)\n\nThe `js_run_binary` macro has a `chdir` parameter for determining the\nworking directory where the target should run, and this should take\nprecedence over the `chdir` attribute on the underlying `js_binary`.\n\nCurrently this does not work correctly if you set `chdir \u003d\npackage_name()` on a `js_run_binary` at the top level of a repo, because\nin that case `chdir` is the empty string and it is ignored. This change\nfixes that problem by having the macro make a distinction between `None`\nand the empty string, and if `chdir` is empty then we replace it with a\ndot so that it represents the top-level package.\n\nThis does for `js_run_binary` what 7d28f8e7 recently did for `js_binary`\nand `js_test`.\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: yes\n\nThe `js_run_binary` macro now correctly handles an empty string for\n`chdir`.\n\n### Test plan\n\n- Covered by existing test cases\n- New test cases added"
    },
    {
      "commit": "19955f0bdd887a6ef236af4e61a5389bb1a673fa",
      "tree": "ff7b4539318ed7bd298812aa7a9c75d4185b6780",
      "parents": [
        "7d28f8e76383824af3130de6ea9453eb82b90bce"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Tue Apr 28 10:10:59 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 17:10:59 2026 +0000"
      },
      "message": "refactor: simplify launcher script logic for `chdir` (#2813)\n\nThe `js_binary()` and `js_run_binary()` rules provide a `chdir` option\nthat you can use to indicate a directory to cd to before the main entry\npoint is invoked. This turns into a `JS_BINARY__CHDIR` environment\nvariable that the launcher script looks at to decide where to cd.\n\nThe logic has a special case for when `JS_BINARY__CHDIR` begins with\n`external/`, in which case we call `resolve_execroot_bin_path` to\ncanonicalize the path. This special casing seems to be unnecessary, and\n`resolve_execroot_bin_path` also contains more logic than we need. I\ntherefore replaced all this with a one-liner that cds to the correct\nabsolute path.\n\nThe motivation for this is that in another PR I am going to change the\nbehavior of `resolve_execroot_bin_path` so that it always refers to the\nexec platform bin directory, but this is not something we want to affect\n`chdir`.\n\n---\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "7d28f8e76383824af3130de6ea9453eb82b90bce",
      "tree": "e17f3cffda56f048a679aa2fc3a502130f8617ec",
      "parents": [
        "bde0ec578139d5330f53dc8083fb1125ffd153eb"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Tue Apr 28 09:52:22 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 09:52:22 2026 -0700"
      },
      "message": "fix: correctly handle empty chdir on js_binary (#2815)\n\nThe `js_binary` rule has a `chdir` attribute, and it is common to set\n`chdir \u003d package_name()` to indicate that the binary should run under\nthe target bin directory in the subdirectory corresponding to the\ncurrent package.\n\nThe logic for this checks `if ctx.attr.chdir`, which is usually fine but\ndoes not work correctly when the target is at the top level of an\nexternal repo. In that case `package_name()` is empty, making `chdir`\nfalsy, but we do still need to change directories since the package is\nin an external repo.\n\nThis change fixes that bug and adds a test verifying that the binary\nruns in the expected working directory.\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: yes\n\nThe js_binary rule now correctly handles an empty chdir in a target in\nan external repo.\n\n### Test plan\n\n- Covered by existing test cases\n- New test cases added"
    },
    {
      "commit": "bde0ec578139d5330f53dc8083fb1125ffd153eb",
      "tree": "893d75a1a9da09256123d46fa5d2b0f248cdf3eb",
      "parents": [
        "5bb1161d9d4638dcd7df2b33926b7e5b030f2f71"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Sat Apr 25 13:01:34 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 25 13:01:34 2026 -0700"
      },
      "message": "Changes by create-pull-request action (#2811)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: alexeagle \u003c47395+alexeagle@users.noreply.github.com\u003e"
    },
    {
      "commit": "5bb1161d9d4638dcd7df2b33926b7e5b030f2f71",
      "tree": "29af3229201ee85896f27f2c89e809dbfc7b2fc3",
      "parents": [
        "40ad11c440833301f3491ded68d60b0f6ca063c2"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Fri Apr 24 12:33:48 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 24 12:33:48 2026 -0700"
      },
      "message": "fix: support for pnpm 11.0.0-rc.5 (#2812)\n\nWhen we initially added support for 11.0.0-rc.0, we had to put in a\nworkaround in lockfile-test.bzl due to the way peer suffixes changed\nunexpectedly: https://github.com/pnpm/pnpm/issues/11272 This has now\nbeen fixed in more recent release candidates, so we can drop that\nworkaround.\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes/no\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: no\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "40ad11c440833301f3491ded68d60b0f6ca063c2",
      "tree": "e2212c70b80d0cc5c3906f6c0f67f578bb32a06f",
      "parents": [
        "401406a1984917e4d17a1596b5c0dbced0927ff4"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Fri Apr 17 09:38:11 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 09:38:11 2026 -0700"
      },
      "message": "feat: add js_rpc_library and js_rpc_toolchain for ConnectRPC support (#2797)\n\nAdds a new `js_rpc_library` rule and `js_rpc_toolchain` macro to support\nprotoc-based RPC code generators such as `protoc-gen-connect-query`.\n\n- `js_rpc_library`: a rule that runs a protoc plugin on its immediate\nproto_library deps and exposes the output as JsInfo.\n- `js_rpc_toolchain`: a macro wrapping `_js_proto_toolchain` but with a\nnew `//js/toolchains:protoc_rpc_plugin` toolchain type.\n- Updates to `e2e/protobuf-es` showing how to use Connect and\nConnect-Query\n - Updates to `e2/protobuf-google` showing how to use grpc-js\n    \nSupport for Connect-Query seems to be the only thing in the deprecated\n`ts_proto_library` rule that was lacking in `rules_js`. Hopefully now\nthat we have support for it, we can start recommending that everyone\nmigrate away from `ts_proto_library`.\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: no\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: yes\n\nA `js_rpc_library` rule is now available and can generate RPC bindings\nfor any RPC system that is built on a protoc plugin. The plugin just\nneeds to be registered with the `js_rpc_toolchain` macro.\n\n### Test plan\n\n- New test cases added\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "401406a1984917e4d17a1596b5c0dbced0927ff4",
      "tree": "f1338a5a6e36522ca0abd6e4b24461853f4891e4",
      "parents": [
        "a55809f16ae4b7b56b5d812577fb04357d3e2652"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Thu Apr 16 10:25:57 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 10:25:57 2026 -0700"
      },
      "message": "feat: add support for pnpm 11 (#2802)\n\npnpm 11 introduced several breaking changes to the lockfile format that\nthis commit addresses:\n1. patchedDependencies path moved to pnpm-workspace.yaml: pnpm 11 no\nlonger includes the patch file path in pnpm-lock.yaml (only the hash).\nAdd _normalize_patched_dependencies() to look up the path from\npnpm-workspace.yaml and restore the dict form expected by the rest of\nthe code.\n2. Multi-document lockfile format: in some situations, such as when\nconfigDependencies are present, pnpm 11 prepends an \"env lockfile\" YAML\ndocument to pnpm-lock.yaml. Update the yq invocation to always return\nthe last document regardless of whether the file has one or two YAML\ndocuments.\n3. Changed peer dependency path encoding in snapshot keys: pnpm 11\nencodes workspace-relative peer dep paths with a leading \u0027+\u0027 (e.g.\n`@scoped/b@+projects+b` instead of `@scoped/b@projects+b`), which\nchanges the generated virtual store target names.\n\nAlso adds v110 test fixtures (lockfile, workspace config, snapshots) and\nreorganizes the e2e/pnpm_lockfiles setup so each version (v90, v101,\nv110) is self-contained. v90 needs its own package.json and\npnpm-workspace.yaml, because pnpm 9 requires some things to be in\npackage.json that are expected in pnpm-workspace.yaml in later versions.\n\nFixes #2798.\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: no\n\n### Test plan\n\n- New test cases added\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "a55809f16ae4b7b56b5d812577fb04357d3e2652",
      "tree": "eb0ea091559c429df1be5d87fed89d29656fb5b8",
      "parents": [
        "dc0205c7b35c09c33f3942f23fa125c87c76ed17"
      ],
      "author": {
        "name": "Tyler Breisacher",
        "email": "tyler.breisacher@flyzipline.com",
        "time": "Mon Apr 13 15:19:57 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 15:19:57 2026 -0700"
      },
      "message": "docs: fix link to pnpm public-hoist-pattern docs (#2800)\n\nIt looks like pnpm rearranged their docs site at some point.\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: yes\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "dc0205c7b35c09c33f3942f23fa125c87c76ed17",
      "tree": "cfe79426313c3885779b30a57f61cf0280608c71",
      "parents": [
        "4960a9ee7fa7246fc1a33c53a09c6cccbd408378"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Mon Apr 06 15:40:42 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 22:40:42 2026 +0000"
      },
      "message": "test: reduce Bazel module count by consolidating e2e tests into examples (#2791)\n\nRemove 5 standalone e2e Bazel modules (44 → 39) by merging or moving \ntests that don\u0027t require their own module-level configuration:\n\n- e2e/npm_link_package-esm: merged into e2e/npm_link_package by adding \n  .mjs ESM variants alongside existing .js files\n\n- e2e/package_json_module: moved to examples/package_json_module; the\n  \"type: module\" scoping is per-directory so it works as a sub-package\n\n- e2e/runfiles: merged into examples/runfiles; added module-name path\n  tests (module_name_test.js), nested binary runfiles propagation tests\n  (outer.js), and js_run_binary tests (resolve-args.js)\n\n- e2e/stamped_package_json: moved to examples/stamped_package_json;\n  added jq.bzl as a dev dep to examples/MODULE.bazel; excluded from\n  pnpm workspace since package.json contains a stamp template version\n\n- e2e/worker: moved to examples/worker; no npm deps and bazel_lib +\n  rules_nodejs are already available in examples\n\nI also moved the protobuf examples from examples/protobuf into e2e/ for\nconsistency.\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n\n---\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases\n\n---------\n\nCo-authored-by: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "4960a9ee7fa7246fc1a33c53a09c6cccbd408378",
      "tree": "0888ce9d9f106dca9c9ca96dee9a2147dc9146ac",
      "parents": [
        "a14989a2be61d777d3dbc62da5f16db1a512eec0"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Mon Apr 06 14:30:40 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 14:30:40 2026 -0700"
      },
      "message": "feat: add support for `{strip_,}import_prefix` on `proto_library` (#2787)\n\nThe `import_prefix` and `strip_import_prefix` attributes on the\n`proto_library` rule allow you to adjust the import path for the .proto\nfile by prepending or removing a prefix. However, we do not currently\nsupport this in rules_js. These attributes cause the generated code to\nend up in a `_virtual_imports` subdirectory under `bazel-bin/`, and\nother generated code does not know that it needs to look there for its\ndependencies.\n\nThis change partially fixes the problem by collecting the necessary\ninformation in an aspect and passing it to the protoc plugin to tell it\nhow to adjust its generated imports. There are two reasons that this is\nonly a partial fix:\n1. This only fixes the problem for Buf.build\u0027s protobuf-es\nimplementation, because it depends on a flag supported only by this\nparticular plugin.\n2. Ordinary code (i.e. not protobuf generated code) still has to import\nfrom an ugly path involving `_virtual_imports`. It is very difficult to\navoid that, so I think the best we can do for now is to get things\nworking but recommend against using `import_prefix` or\n`strip_import_prefix`.\n\n\u003c!-- Delete this comment! \nInclude a summary of your changes, links to related issue(s), relevant\nmotivation and context for why you made the change, how you arrived at\nthis design, or alternatives considered.\n\nFor repositories that use a squash merge strategy, the pull request\ndescription may also be used as the landed commit description ensuring\nthat useful information ends up in the git log.\n--\u003e\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes (not\nneeded)\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: no\n\n### Test plan\n\n- New test cases added"
    },
    {
      "commit": "a14989a2be61d777d3dbc62da5f16db1a512eec0",
      "tree": "1d77a6b4081829491b675cbff53b81b18f98dd0b",
      "parents": [
        "98cbb45e120287afc7c3f75810fe67dd87ded89d"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Mon Apr 06 14:19:15 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 14:19:15 2026 -0700"
      },
      "message": "refactor: update js_proto_toolchain() to streamline the way output extensions are specified (#2794)\n\nCurrently, you can set something like `output_file_extensions \u003d\n[\"_pb.js\", \"_pb.d.ts\"]` on a `js_proto_toolchain()` to indicate the\noutputs you expect the plugin to produce. However, experience has shown\nthat this API is a little bit awkward for us because we end up needing\nto loop over the list to find the extension we want. In practice there\nis always a .js file and sometimes a .d.ts file, so this commit provides\na parameter for each one.\n\nThis is not a breaking change, because the existing API has not made it\ninto a release yet.\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: no\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "98cbb45e120287afc7c3f75810fe67dd87ded89d",
      "tree": "877959b315a3c31fa483cd888643b96283c9bdaf",
      "parents": [
        "e84f69585e199c175b1b2bf2b9990d1ee064df4e"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Fri Apr 03 13:02:39 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 13:02:39 2026 -0700"
      },
      "message": "fix: fix examples/js_binary on Windows (#2793)\n\nOn Windows, ESM imports must begin with file:// rather than a drive\nletter like C:. This will hopefully fix #2776.\n\n---\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "e84f69585e199c175b1b2bf2b9990d1ee064df4e",
      "tree": "842006ba3f5635916e6e966f360c910d325f1126",
      "parents": [
        "7316607b74f5b665b102c3c132ddb40dcef19355"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "eagle@post.harvard.edu",
        "time": "Thu Apr 02 11:13:11 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 02 11:13:11 2026 -0700"
      },
      "message": "chore: remove Alex Eagle from maintainers (#2790)\n\nRemoved Alex Eagle from maintainers list in metadata.\n\nCo-authored-by: Alex Eagle \u003calex@aspect.build\u003e"
    },
    {
      "commit": "7316607b74f5b665b102c3c132ddb40dcef19355",
      "tree": "ee3c9058f751f600fbf89309bd1111116a1440c1",
      "parents": [
        "44a9f1987a6948d5eb756d61541fa282991db809"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Apr 01 10:49:10 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 10:49:10 2026 -0700"
      },
      "message": "test: move examples into isolated bazel module (#2784)\n\nThis reduces the (dev)dependencies within the main rules_js MODULE,\nreduces the (dev/testing) code within the MODULE and some of the unit\ntests.\n\nIn theory this could allow the removal of `examples/` from the\nproduction module.\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases\n- New test cases added"
    },
    {
      "commit": "44a9f1987a6948d5eb756d61541fa282991db809",
      "tree": "0138e71ec8b1ebe93f155ec071086b8e4f434b69",
      "parents": [
        "e7038b817afad62aa42420fc67c6232a70744316"
      ],
      "author": {
        "name": "Tyler Breisacher",
        "email": "matrixfrog@gmail.com",
        "time": "Tue Mar 31 14:13:47 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 21:13:47 2026 +0000"
      },
      "message": "fix: ensure nextjs picks up the correct config file when called by nextjs_standalone_build() (#2778)\n\nWithout this change, there are two next config files available to the\n`next` binary: the one the user passed in, and\n[next.bazel.mjs](https://github.com/aspect-build/rules_js/blob/main/contrib/nextjs/next.bazel.mjs),\nwhich has been renamed to `next.config.mjs` by copy_file(). We want it\nto use the next.bazel.mjs one as the config file, but if the one from\nthe user is named next.config.js, then it gets picked up by the next CLI\ninstead.\n\nBy renaming the user\u0027s config (prefixing it with `__original`), we\nensure that `next` will pick up the one we want it to.\n\nFix https://github.com/aspect-build/rules_js/issues/2789\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: I don\u0027t\nthink there is any docs update needed\n- Breaking change (forces users to change their own code or config): I\nsuppose it could be, if someone was inadvertently depending on the\ncurrent behavior, but it seems unlikely.\n- Suggested release notes appear below: no\n\n### Test plan\n\n- New test cases added\n- Manual testing\n\n---------\n\nCo-authored-by: Jason Bedard \u003cjason+github@jbedard.ca\u003e"
    },
    {
      "commit": "e7038b817afad62aa42420fc67c6232a70744316",
      "tree": "6e9ba1e1bb44c2d1157c159ff74dcc0522242875",
      "parents": [
        "fb2fee2518208c7097cb750e77c5e9e9b6643a52"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 31 13:37:55 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 13:37:55 2026 -0700"
      },
      "message": "test: ensure js_library(srcs) do not end up in runfiles while data does (#2785)\n\nAdd explicit tests for this behaviour change introduced in rules_js v3.\n\nThis is asserting the v3 logic where:\n* runfiles is for files required **at runtime**\n* the files **being run** are not in runfiles but in something such as\n`DefaultInfo.files` or `JsInfo.sources`\n\nThis allows tools to modify the `DefaultInfo` or `JsInfo` (such as\nbundling the files into a single file) while blindly passing along the\nrunfiles for use at runtime.\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- New test cases added"
    },
    {
      "commit": "fb2fee2518208c7097cb750e77c5e9e9b6643a52",
      "tree": "afc62ab9d14aaf51fc77f702cb4e363b147b1b21",
      "parents": [
        "b944a5c2e526d2b0936468cab3ce2e735f43354f"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Mon Mar 30 12:01:41 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 12:01:41 2026 -0700"
      },
      "message": "feat: generalize js_proto_toolchain() to work with other implementations (#2743)\n\nCurrently we are not set up to support any JavaScript or TypeScript\nprotobuf implementations other than protobuf-es from Buf.build. This is\nbecause we have a hard-coded assumption that the protobuf plugin will\nproduce files matching the .proto file name except with \"_pb.js\" and\n\"_pb.d.ts\" in place of \".proto\". This assumption holds for protobuf-es\nbut not for other implementations such as Google\u0027s protobuf-javascript\nimplementation.\n\nThis change addresses that problem by adding a new\n`output_file_extensions` parameter on `js_proto_toolchain()` to allow\nusers to specify the generated files they expect the plugin to produce.\n\nTo make this work, I had to copy most of the logic from the\n`proto_lang_toolchain()` rule into a new `js_proto_toolchain()` rule.\nThis was necessary because we need a rule that continues to produce the\n`ProtoLangToolchainInfo` provider but additionally produces a new\n`JsProtoToolchainInfo` provider with the new file extension information\nwe need.\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: no\n\n### Test plan\n\n- New test cases added\n\n---------\n\nCo-authored-by: Jason Bedard \u003cjason+github@jbedard.ca\u003e"
    },
    {
      "commit": "b944a5c2e526d2b0936468cab3ce2e735f43354f",
      "tree": "8b30f2631d346abf5cb4bcbfd327a14a973e46ae",
      "parents": [
        "3114c1bcbc6746469eb2fb6b0f118c7d6248f560"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Mon Mar 30 10:16:56 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 10:16:56 2026 -0700"
      },
      "message": "fix(ci): abandon reusable workflow (#2786)\n\nAfter a couple hours of debugging, it\u0027s too complicated to get\npermissions and tokens wired correctly, and in the end it\u0027s not even\nshorter.\nI think it\u0027s better to use composite actions instead, we don\u0027t actually\nneed to sequence them together into steps which is what reusable\nworkflows is for."
    },
    {
      "commit": "3114c1bcbc6746469eb2fb6b0f118c7d6248f560",
      "tree": "5ccc2161953e62b8038efbdb8bde2675d145f38a",
      "parents": [
        "a1c075b1a56c8fd8856e7442e8beda9ab3c389d0"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Wed Mar 25 20:39:43 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 20:39:43 2026 -0700"
      },
      "message": "chore: changes by create-pull-request action (#2783)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: alexeagle \u003c47395+alexeagle@users.noreply.github.com\u003e"
    },
    {
      "commit": "a1c075b1a56c8fd8856e7442e8beda9ab3c389d0",
      "tree": "e357bfc5e7eaef440e7337547b531559f0104fff",
      "parents": [
        "2d7fa8820bb0b380b170484ad541b86e12356fae"
      ],
      "author": {
        "name": "Tyler Breisacher",
        "email": "tyler.breisacher@flyzipline.com",
        "time": "Tue Mar 24 18:45:41 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 18:45:41 2026 -0700"
      },
      "message": "test: drop fallback for import.meta.dirname in example code (#2781)\n\nI was following this example in our internal repo and Greptile caught\nthis error -- we were using dirname without importing it. That fallback\nseems to be only for Node 19 and below so it should be safe to drop it\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases\n\nCo-authored-by: Tyler Breisacher \u003cmatrixfrog@gmail.com\u003e"
    },
    {
      "commit": "2d7fa8820bb0b380b170484ad541b86e12356fae",
      "tree": "37453120e4aecfd383ee913f4f3e2405ffca56ff",
      "parents": [
        "059485c86901bd47a731fa7ef36fae53223b6d6c"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 24 12:10:40 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 12:10:40 2026 -0700"
      },
      "message": "docs: provide explicit docs for js_binary and js_test macros instead of internal rules (#2782)\n\nNow the public macros have correct docs, but the real internal\n`rule(docs)` are blank 🤷\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases\n\n---------\n\nCo-authored-by: Alex Eagle \u003calex@aspect.build\u003e"
    },
    {
      "commit": "059485c86901bd47a731fa7ef36fae53223b6d6c",
      "tree": "080ae9385efc4f50d8a3f461cea6ccbb55557611",
      "parents": [
        "491c100db8b60063d026efce4912d56d4b6c4db8"
      ],
      "author": {
        "name": "Tyler Breisacher",
        "email": "tyler.breisacher@flyzipline.com",
        "time": "Fri Mar 20 11:18:53 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 20 11:18:53 2026 -0700"
      },
      "message": "docs: Add a note about the config having a different name in Next 14 (#2780)\n\nHopefully this will help people out if they are following this example\nand not checking the Next docs carefully.\n\n### Changes are visible to end-users: no\n\n### Test plan\n\nNo new tests -- comment-only change.\n\n---------\n\nCo-authored-by: Jason Bedard \u003cjason+github@jbedard.ca\u003e"
    },
    {
      "commit": "491c100db8b60063d026efce4912d56d4b6c4db8",
      "tree": "379719605cfd86a689fd128b043ad34cc037d532",
      "parents": [
        "40bfcb4306edc1d18179ef64a1acfa4b5c89e5a8"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 17 17:27:47 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 17:27:47 2026 -0700"
      },
      "message": "chore: enable testing on bazel 9.0.1 (#2774)\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "40bfcb4306edc1d18179ef64a1acfa4b5c89e5a8",
      "tree": "a9657c7001452cf72acdf809b9602fca11341e33",
      "parents": [
        "99ce5aa229a9900ca87e315e84614c40237a15cf"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 17 16:54:04 2026 -0700"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 17 17:20:47 2026 -0700"
      },
      "message": "chore: upgrade aspect_rules_lint to 2.3.0\n"
    },
    {
      "commit": "99ce5aa229a9900ca87e315e84614c40237a15cf",
      "tree": "43f1df17e30aa5c3916592a995e927da5efa7f08",
      "parents": [
        "199fbdda3d7969f5755711dc43ca49b68dd925ce"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 16 14:56:12 2026 -0700"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 16 17:09:53 2026 -0700"
      },
      "message": "fix: unspecified npm_translate_lock package.json inputs\n"
    },
    {
      "commit": "199fbdda3d7969f5755711dc43ca49b68dd925ce",
      "tree": "ca7c0c3876b7e5b01b803853fdff70eb9605a332",
      "parents": [
        "8c7dfcd6d4905bf624e4073b74616ed2e9ab2d4e"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Thu Mar 12 12:34:59 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 12 19:34:59 2026 +0000"
      },
      "message": "refactor: don\u0027t add js proto aspect on js_binary/test data (#2768)\n\nBelated code review comment"
    },
    {
      "commit": "8c7dfcd6d4905bf624e4073b74616ed2e9ab2d4e",
      "tree": "8eb666169b2a2d8b08d32f6925ab104e5a0f3ce2",
      "parents": [
        "9a76eb9ff9bd7de4b5338b01e0b4c21720430e4b"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Thu Mar 12 12:24:05 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 12 12:24:05 2026 -0700"
      },
      "message": "feat: add example of using proto_library with Node.js (#2767)\n\nAlso fix a bug where `js_library` deps ran the proto aspect, but\njs_binary/js_test did not.\n\n/cc @acozzette"
    },
    {
      "commit": "9a76eb9ff9bd7de4b5338b01e0b4c21720430e4b",
      "tree": "c7a98d5f6d14a7a98ba4426f9365a77af298bdb2",
      "parents": [
        "b809b526f9d0e603fe084c8631bd670e7ff3260b"
      ],
      "author": {
        "name": "Alan Agius",
        "email": "17563226+alan-agius4@users.noreply.github.com",
        "time": "Tue Mar 10 10:54:35 2026 +0000"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Mar 11 10:37:45 2026 -0700"
      },
      "message": "fix: handle missing packages in _collect_dep_constraints\n\nWhen an optional dependency is a \"link:\" dependency or otherwise not present in the `packages` dictionary, `npm_translate_lock` would fail with a \"key not found\" error such as: `Error: key \"link:@angular/core|packages/core\" not found in dictionary`\n\nThis occurs because `_collect_dep_constraints` iterates over optional dependencies but assumes they all exist in the `packages` dictionary. Link dependencies are often not represented in the lockfile as standard\npackages, leading to this missing key.\n"
    },
    {
      "commit": "b809b526f9d0e603fe084c8631bd670e7ff3260b",
      "tree": "e4e84a3ba6c6cb79362913681beda7226306f2b0",
      "parents": [
        "f1c59d5005841a75f61c435ffae07ff8091c9a58"
      ],
      "author": {
        "name": "alexeagle",
        "email": "47395+alexeagle@users.noreply.github.com",
        "time": "Wed Mar 11 07:06:03 2026 +0000"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Mar 11 10:30:46 2026 -0700"
      },
      "message": "chore: mirror external releases\n"
    },
    {
      "commit": "f1c59d5005841a75f61c435ffae07ff8091c9a58",
      "tree": "18c84c498fa0282c321e72ac9bb2192a066f73f8",
      "parents": [
        "5329e9275b3dcb0101dfaba4c5ad6811c3abc3e3"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 09 22:42:41 2026 -0700"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 10 18:08:43 2026 -0700"
      },
      "message": "test: update e2e/npm_translate_lock_auth to not change lockfile during test\n"
    },
    {
      "commit": "5329e9275b3dcb0101dfaba4c5ad6811c3abc3e3",
      "tree": "98aa9500931a0d4a545ffdd03f30bc908314399c",
      "parents": [
        "d670621cdd9e07e05f5cab770547be218ddfa189"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 10 17:28:58 2026 -0700"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 10 17:54:19 2026 -0700"
      },
      "message": "test: fix archive hashes changed by gh\n"
    },
    {
      "commit": "d670621cdd9e07e05f5cab770547be218ddfa189",
      "tree": "65cd8f4ad36ba2b85f6068160c2ed37af667c319",
      "parents": [
        "74e5deddaea26e726444b1db884bc018bc43c430"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 10 13:52:20 2026 -0700"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 10 14:55:10 2026 -0700"
      },
      "message": "fix: consumption of @npm//:node_modules/{pkg}/package_json.bzl targets across workspaces\n"
    },
    {
      "commit": "74e5deddaea26e726444b1db884bc018bc43c430",
      "tree": "770eee24364ee41a51c3c065f08b6e1885a5194d",
      "parents": [
        "1b4dd8800d24cda5b15cb5d85c52186c3758a9d4"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 10 14:49:54 2026 -0700"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 10 14:49:54 2026 -0700"
      },
      "message": "ci: use bazel 9.0.0 and prevent 9.0.1\n"
    },
    {
      "commit": "1b4dd8800d24cda5b15cb5d85c52186c3758a9d4",
      "tree": "97af705cf8dd98768d0aec1d68e81a2bf3832542",
      "parents": [
        "73cdb2b200a71e243896ee59b34ac4028f8c7c66"
      ],
      "author": {
        "name": "alexeagle",
        "email": "47395+alexeagle@users.noreply.github.com",
        "time": "Tue Mar 10 07:04:16 2026 +0000"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 10 08:33:32 2026 -0700"
      },
      "message": "chore: mirror external releases\n"
    },
    {
      "commit": "73cdb2b200a71e243896ee59b34ac4028f8c7c66",
      "tree": "aace1c79f1e8c20e326df22a816e5592efb5a0af",
      "parents": [
        "d75c5c86200acf04115ff2d6a0b14a124083e7ea"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 09 23:17:43 2026 -0700"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 09 23:18:00 2026 -0700"
      },
      "message": "Revert \"chore: remove use of update_pnpm_lock in e2e/npm_translate_lock_auth\"\n\nThis reverts commit d75c5c86200acf04115ff2d6a0b14a124083e7ea.\n"
    },
    {
      "commit": "d75c5c86200acf04115ff2d6a0b14a124083e7ea",
      "tree": "bc4b262e41e8036e78726d4aef353c28c6a30012",
      "parents": [
        "b9a510b4044996704a6baeb1c589b0bd8d334dd0"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 09 11:15:25 2026 -0700"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 09 12:18:09 2026 -0700"
      },
      "message": "chore: remove use of update_pnpm_lock in e2e/npm_translate_lock_auth\n"
    },
    {
      "commit": "b9a510b4044996704a6baeb1c589b0bd8d334dd0",
      "tree": "6a37e0494b282d847b9b02b461ba17cbec8690d0",
      "parents": [
        "76b432938b7068ce1a86310aa7bd323cbf3fa98c"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 09 11:15:25 2026 -0700"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 09 11:26:17 2026 -0700"
      },
      "message": "chore: upgrade gha deps\n"
    },
    {
      "commit": "76b432938b7068ce1a86310aa7bd323cbf3fa98c",
      "tree": "e50010e899d3cbf490c92d869af0bb3ae3bf9365",
      "parents": [
        "786a74a158dd36ed073188b0e506c423cd05501a"
      ],
      "author": {
        "name": "alexeagle",
        "email": "47395+alexeagle@users.noreply.github.com",
        "time": "Sun Mar 08 07:00:36 2026 +0000"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 09 09:45:26 2026 -0700"
      },
      "message": "chore: mirror external releases\n"
    },
    {
      "commit": "786a74a158dd36ed073188b0e506c423cd05501a",
      "tree": "06ae50cc4f8b189b7bb5c4aecff74da18e4c4134",
      "parents": [
        "3977ee27e02945641431bde6a7dd30d6d7d10df0"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Mar 05 10:04:50 2026 -0800"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Mar 05 18:01:26 2026 -0800"
      },
      "message": "fix: ignore optional packages with os:alpine\n"
    },
    {
      "commit": "3977ee27e02945641431bde6a7dd30d6d7d10df0",
      "tree": "8c2cc45d093fa14003537b493ebf0802dc82fa5e",
      "parents": [
        "86e22e312d08ad695038da8b75b7df570e8ba40c"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Mar 05 16:29:39 2026 -0800"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Mar 05 18:01:12 2026 -0800"
      },
      "message": "test: add path-mapping test\n"
    },
    {
      "commit": "86e22e312d08ad695038da8b75b7df570e8ba40c",
      "tree": "c7ca7f7ef541f3a638156948394414f3ea607a5d",
      "parents": [
        "064dce2daa38acb193a798952c96e0057ffa9c1d"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Mar 05 15:06:50 2026 -0800"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Mar 05 16:56:38 2026 -0800"
      },
      "message": "fix: nested js_binary invocations\n"
    },
    {
      "commit": "064dce2daa38acb193a798952c96e0057ffa9c1d",
      "tree": "ebb7eece081cc87b872c36d547d16b976830d2dc",
      "parents": [
        "a871602f7b07a909376d1295e629fc81800b2afb"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Mar 05 14:47:16 2026 -0800"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Mar 05 16:56:38 2026 -0800"
      },
      "message": "fix: declare public RUNFILES_DIR for use by @bazel/runfiles\n"
    },
    {
      "commit": "a871602f7b07a909376d1295e629fc81800b2afb",
      "tree": "a55e96fa4174f68b5c3b5b00142e1e2ea039cd82",
      "parents": [
        "a7039af93b9d0bd26714e28b26efd11f30999a57"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Mar 04 13:37:08 2026 -0800"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Mar 05 09:31:34 2026 -0800"
      },
      "message": "refactor: upgrade bazel_lib to include cac2d78\n"
    },
    {
      "commit": "a7039af93b9d0bd26714e28b26efd11f30999a57",
      "tree": "e313202d3857747041b7239f206e191b9ccda379",
      "parents": [
        "caa2dd7416c90542a49ba1969d476eda49532488"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Tue Mar 03 14:33:28 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 14:33:28 2026 -0800"
      },
      "message": "fix(docs): the proto plugin target can live with the toolchain (#2724)\n\n"
    },
    {
      "commit": "caa2dd7416c90542a49ba1969d476eda49532488",
      "tree": "4936a44453ea0224ad4f5643de71fd99b188cae5",
      "parents": [
        "6d1c3108a112ea8ef3935dc72c8aba11c239fcd1"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 03 12:37:12 2026 -0800"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Mar 03 14:11:54 2026 -0800"
      },
      "message": "refactor: add error message when invalid link_package is specified\n"
    },
    {
      "commit": "6d1c3108a112ea8ef3935dc72c8aba11c239fcd1",
      "tree": "ff61c95d3dbac5d006f65ac2983f4ff966df418a",
      "parents": [
        "edd727bab33a0a11356bdf23bf13f65125edd46e"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 02 09:01:35 2026 -0800"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Mar 02 09:01:35 2026 -0800"
      },
      "message": "Revert \"refactor: remove deprecated module(compatibility_level)\"\n\nThis reverts commit edd727bab33a0a11356bdf23bf13f65125edd46e.\n"
    },
    {
      "commit": "edd727bab33a0a11356bdf23bf13f65125edd46e",
      "tree": "3deddd612f9fcbe2f06cb871d82e414ee2a3ff73",
      "parents": [
        "86d61aca105b4c59ae955ab3de98787b74e0185e"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Feb 26 20:38:21 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Sun Mar 01 18:48:30 2026 -0600"
      },
      "message": "refactor: remove deprecated module(compatibility_level)\n"
    },
    {
      "commit": "86d61aca105b4c59ae955ab3de98787b74e0185e",
      "tree": "ff61c95d3dbac5d006f65ac2983f4ff966df418a",
      "parents": [
        "27d8f9d2c4a0cb889038b35c83dc6660820ae25e"
      ],
      "author": {
        "name": "Adam Cozzette",
        "email": "adamc@aspect.build",
        "time": "Fri Feb 27 12:26:39 2026 -0800"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Sun Mar 01 18:37:54 2026 -0600"
      },
      "message": "test: upgrade version of node-gyp\n\n`//npm/private/test:node_modules_test` and\n`//npm/private/test:pkg_versions_test` have been failing to build for me with\nan error like this:\n```\n  File \"/home/adam/.cache/bazel/_bazel_adam/6ed6476489dfd4242e2dc3f0487ba25a/execroot/_main/bazel-out/k8-fastbuild/bin/node_modules/.aspect_rules_js/node-gyp@9.3.0/node_modules/node-gyp/gyp/pylib/gyp/input.py\", line 19, in \u003cmodule\u003e\n    from distutils.version import StrictVersion\nModuleNotFoundError: No module named \u0027distutils\u0027\n```\nI suspect this has something to do with distutils being removed from Python\n3.12. This commit fixes the tests by upgrading node-gyp to its most recent\nversion.\n"
    },
    {
      "commit": "27d8f9d2c4a0cb889038b35c83dc6660820ae25e",
      "tree": "c3a74904545c08c9f70d4aa286449915b68c3f0b",
      "parents": [
        "21528e0de1b099e7fc91c05b8295b01bc181e17a"
      ],
      "author": {
        "name": "alexeagle",
        "email": "47395+alexeagle@users.noreply.github.com",
        "time": "Fri Feb 27 07:05:49 2026 +0000"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Fri Feb 27 01:23:45 2026 -0600"
      },
      "message": "chore: mirror external releases\n"
    },
    {
      "commit": "21528e0de1b099e7fc91c05b8295b01bc181e17a",
      "tree": "4a362f92aa60d68e9c102b2b8b8e9726adfb98da",
      "parents": [
        "4747da746d81edc34f677289ac4ef92359cccba1"
      ],
      "author": {
        "name": "alexeagle",
        "email": "47395+alexeagle@users.noreply.github.com",
        "time": "Thu Feb 26 07:07:03 2026 +0000"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Feb 26 15:28:20 2026 -0600"
      },
      "message": "chore: mirror external releases\n"
    },
    {
      "commit": "4747da746d81edc34f677289ac4ef92359cccba1",
      "tree": "aebc8a81a9a697f8c8e6fb91c1357ea73da202bd",
      "parents": [
        "5aa65902a30d1a800dbd0083b3e32a12d74f5499"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 16:53:00 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Feb 26 01:35:16 2026 -0600"
      },
      "message": "fix: do not try updating lockfile with update_pnpm_lock\u003dTrue in non-root module\n"
    },
    {
      "commit": "5aa65902a30d1a800dbd0083b3e32a12d74f5499",
      "tree": "9735e331172efee96568343115b323858b43fb29",
      "parents": [
        "714538b2689b1e8fbf2ab14c21a434c01d35fc24"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Feb 26 00:44:51 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Feb 26 01:35:16 2026 -0600"
      },
      "message": "refactor: remove always overwritten initial private field value\n"
    },
    {
      "commit": "714538b2689b1e8fbf2ab14c21a434c01d35fc24",
      "tree": "d8b5e64df34041491abbb367351730cb2226847a",
      "parents": [
        "25d0c1b3ab380fd49ae8edc00e40ffd96bba469b"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Feb 26 00:04:52 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Feb 26 01:35:16 2026 -0600"
      },
      "message": "refactor: remove unused private \"repo_root\" var\n"
    },
    {
      "commit": "25d0c1b3ab380fd49ae8edc00e40ffd96bba469b",
      "tree": "fa2bcb0b415f0fd3885fa5c34684c98444dcb886",
      "parents": [
        "47dcd5763101d0e33399bfe45b64308598493dff"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 19:28:25 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 23:39:07 2026 -0600"
      },
      "message": "refactor: inline lifecycle attr processing into _get_npm_imports, remove npm_translate_lock_macro_helpers\n"
    },
    {
      "commit": "47dcd5763101d0e33399bfe45b64308598493dff",
      "tree": "a2f52db545dbe55a5463855f0e454583167b9b3e",
      "parents": [
        "6569cd3ca03cea6d5431138eb0db8560ffe1643d"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 20:58:46 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 23:39:07 2026 -0600"
      },
      "message": "refactor: inline trivial single-use accessor functions in npm_translate_lock_state\n"
    },
    {
      "commit": "6569cd3ca03cea6d5431138eb0db8560ffe1643d",
      "tree": "e45fb934d5c4972b600b150f385246e391c02e57",
      "parents": [
        "257344b1a4844c768dcb176ade06db5e5855a8f1"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 19:53:54 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 23:39:07 2026 -0600"
      },
      "message": "refactor: inline _copy_input_file_action into _copy_input_file\n"
    },
    {
      "commit": "257344b1a4844c768dcb176ade06db5e5855a8f1",
      "tree": "67604416d52584df3a4c3af0b80c0ea654b7d90a",
      "parents": [
        "82fdfad17435815e23d64b73cf2b84ed8cdc1025"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 20:14:31 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 23:39:07 2026 -0600"
      },
      "message": "refactor: remove dead lifecycle_hooks_no_sandbox and run_lifecycle_hooks from npm_import tag\n"
    },
    {
      "commit": "82fdfad17435815e23d64b73cf2b84ed8cdc1025",
      "tree": "e4faa99aea08ae301da5e4f9f4facc2bda350dde",
      "parents": [
        "700fd5aa334feb71c21278629e6b1fe0d50b67ca"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 19:42:11 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 23:39:07 2026 -0600"
      },
      "message": "refactor: remove redundant rctx_name params, derive from attr.name via state\n"
    },
    {
      "commit": "700fd5aa334feb71c21278629e6b1fe0d50b67ca",
      "tree": "2a575e85323426babcfac1072ef4d6a31fb65d63",
      "parents": [
        "0b76a0cf88b84a3935631b31f8197f317c51e522"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 19:39:33 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 23:39:07 2026 -0600"
      },
      "message": "refactor: remove redundant rctx_name params where attr.name suffices\n"
    },
    {
      "commit": "0b76a0cf88b84a3935631b31f8197f317c51e522",
      "tree": "1ed71354712147f84bea7f145859538dee26fd3d",
      "parents": [
        "bc5612caf95b577bc7107188e775c3fd1c3fac64"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 19:31:29 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 23:39:07 2026 -0600"
      },
      "message": "refactor: remove unnecessary _get_npm_imports params\n"
    },
    {
      "commit": "bc5612caf95b577bc7107188e775c3fd1c3fac64",
      "tree": "56b0c6940612f699b00fd29fc91b369ee58c54d7",
      "parents": [
        "e61ba049f21e1282781d77b204aca4f83b23fee4"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 19:21:05 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 23:39:07 2026 -0600"
      },
      "message": "refactor: remove unnecessary _verify_node_modules_ignored params\n"
    },
    {
      "commit": "e61ba049f21e1282781d77b204aca4f83b23fee4",
      "tree": "cfa453f28f67a9fb0576da67803da8b0ca3850ec",
      "parents": [
        "acdd17ffa1832c1cf88bcd716c08a5229845c239"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 19:20:45 2026 -0600"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Feb 25 23:39:07 2026 -0600"
      },
      "message": "refactor: remove unnecessary _verify_lifecycle_hooks_specified params\n"
    },
    {
      "commit": "acdd17ffa1832c1cf88bcd716c08a5229845c239",
      "tree": "5b22e5db8541d4186a4000372151e0b714007072",
      "parents": [
        "b0348a011a1c387be296b9f953d206e64f8fc7cf"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Feb 24 17:52:38 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 24 15:52:38 2026 -0800"
      },
      "message": "feat: support watch protocol v1 (#2411)\n\nUpdate the `AspectWatchProtocol` class to support v1 of the protocol.\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases\n- Manual testing; please provide instructions so we can reproduce:"
    },
    {
      "commit": "b0348a011a1c387be296b9f953d206e64f8fc7cf",
      "tree": "df8fc4455d79d03e8c10ccfb3003146953f844a2",
      "parents": [
        "c89f571ab213c15fdc6338d4fa323ca2bbdf4476"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Tue Feb 24 17:51:42 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Feb 24 15:51:42 2026 -0800"
      },
      "message": "test: packages with nested peer deps (#2730)\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- New test cases added"
    },
    {
      "commit": "c89f571ab213c15fdc6338d4fa323ca2bbdf4476",
      "tree": "23c99be4b5358e92cc093d3621ad94d81d3f3e68",
      "parents": [
        "31384de6036410cb1e8f66ab314d1b851c226c1e"
      ],
      "author": {
        "name": "Kapunahele Wong",
        "email": "kapunahelewong@gmail.com",
        "time": "Fri Feb 20 06:51:40 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 20 06:51:40 2026 -0800"
      },
      "message": "refactor(docs): remove content that\u0027s been moved to Aspect docs (#2729)\n\nRemoves contents of readme with a link to the official rules_js doc.\n\nThis is a follow-up to: https://github.com/aspect-build/docs/pull/144\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: no\n\n### Test plan\n\n\u003c!-- Delete any which do not apply --\u003e\n\n- Manual testing; please provide instructions so we can reproduce:\n   - Tested link to make sure it\u0027s the correct link to the new doc."
    },
    {
      "commit": "31384de6036410cb1e8f66ab314d1b851c226c1e",
      "tree": "3422157b53a6399630f6bf134354632e4eef50bd",
      "parents": [
        "fe1f8d98e0758abbb78e1cedff1141b17041468a"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Wed Feb 18 07:21:25 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 18 07:21:25 2026 -0700"
      },
      "message": "chore: update homepage URL in metadata template"
    },
    {
      "commit": "fe1f8d98e0758abbb78e1cedff1141b17041468a",
      "tree": "b598b93ef07b1c0a95a038a8fdd74687b9f85eb2",
      "parents": [
        "3c166558dc57636212ec731380250c2eb500db77"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Sat Feb 14 17:44:43 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 14 17:44:43 2026 -0800"
      },
      "message": "chore: mirror external pnpm releases (#2720)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\nCo-authored-by: alexeagle \u003c47395+alexeagle@users.noreply.github.com\u003e"
    },
    {
      "commit": "3c166558dc57636212ec731380250c2eb500db77",
      "tree": "4b9ab0ac95d5f06d85546dee1575f72663615f1a",
      "parents": [
        "49201d1a4d362a3bf745b257fbf8d1f032e198c7"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Fri Feb 13 23:59:33 2026 -0800"
      },
      "committer": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Sat Feb 14 00:00:15 2026 -0800"
      },
      "message": "chore(ci): make e2e test.sh step conditional\n"
    },
    {
      "commit": "49201d1a4d362a3bf745b257fbf8d1f032e198c7",
      "tree": "0bb2354225613a64d709a53806bbe8681305bfa0",
      "parents": [
        "c3cde360364ac36cfa691ce6510e1788841e8a2c"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Fri Feb 13 21:02:32 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 13 21:02:32 2026 -0800"
      },
      "message": "fix: run npm package target in other repo (#2726)\n\nRef #2725\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases\n- New test cases added"
    },
    {
      "commit": "c3cde360364ac36cfa691ce6510e1788841e8a2c",
      "tree": "2b604559eb77d1a7275985ae247037e9f76fb89e",
      "parents": [
        "5b57cda778166f20cf328fc4de5b4ddf724b381b"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Fri Feb 13 17:34:55 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 13 17:34:55 2026 -0800"
      },
      "message": "chore: remove tests from gha which also run on aspect workflows (#2707)\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "5b57cda778166f20cf328fc4de5b4ddf724b381b",
      "tree": "dbb9ca1c3e19c405ef94151335f99acac994e80f",
      "parents": [
        "a413051cac3072a8eb72ce074fa80c1b82a9d41b"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Wed Feb 11 18:45:01 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 11 18:45:01 2026 -0800"
      },
      "message": "chore(docs): add API docs for proto (#2722)\n\nIncludes some minor syntax sugaring to better match how protoc plugins\nare documented"
    },
    {
      "commit": "a413051cac3072a8eb72ce074fa80c1b82a9d41b",
      "tree": "706199b4ed8d4e8b0d1489c0c994e1295913f4c7",
      "parents": [
        "5a20c3a48a442ecaad5ff91f28ad1afe5c911a25"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Wed Feb 11 15:34:13 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 11 15:34:13 2026 -0800"
      },
      "message": "feat: allow proto_library as js_library#dep (#2721)\n\nDesign:\n- user expected to register a toolchain providing their protoc plugin\nfor gen-es\n- use an aspect to adapt `ProtoInfo` to `JsInfo`, so a proto_library\ntarget can appear anywhere a js_library does\n- no need for `js_proto_library` targets to pollute the package where\nthe proto_library appears\n- similar to https://github.com/bazel-contrib/rules_ruby/pull/292\n\nExample of use currently in\nhttps://github.com/aspect-build/rules_ts/pull/894\n\nTODO:\n- for typescript, place .d.ts files in the source tree, with @kormide\nusing diff.bzl as a validation action. Maybe this belongs in rules_ts\n- support connect_query - we didn\u0027t have any test/example usage of it"
    },
    {
      "commit": "5a20c3a48a442ecaad5ff91f28ad1afe5c911a25",
      "tree": "44446b725e7d9122089ba1ef231f2da2e1e2def7",
      "parents": [
        "21ca6e2198a4c222389c58093bedb11dd950f4ec"
      ],
      "author": {
        "name": "Mihail Vratchanski",
        "email": "Mivr@users.noreply.github.com",
        "time": "Fri Feb 06 19:49:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 06 09:49:48 2026 -0800"
      },
      "message": "fix: npm_deps tests on Windows, add a fix for Bazel 9.0.0 #2261  (#2700)\n\nBazel 8.x is not compatible with Windows at the moment due to:\nhttps://github.com/bazelbuild/bazel/issues/26701.\nThis branch fixes some common Windows issues so that the bug\nformentioned can be observed at all.\nThen it introduces a fix for Bazel 9.0.0+ where the needed attribute is\npresent.\n\nBazel 8.x will not work with rules_js until the fix is backported.\n\nFor now this seems unlikely:\nhttps://github.com/bazelbuild/bazel/issues/27607\n\nFixes: #2261 \n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "21ca6e2198a4c222389c58093bedb11dd950f4ec",
      "tree": "2256ad2937edee386ce2a7be9e8729bd3866d33b",
      "parents": [
        "879a724aefaa34955df6926e9c8353e0eceaaae3"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Mon Feb 02 16:46:17 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 02 16:46:17 2026 -0800"
      },
      "message": "refactor: update pnpm versions (#2713)\n\nAutomated changes by\n[create-pull-request](https://github.com/peter-evans/create-pull-request)\nGitHub action\n\n---------\n\nCo-authored-by: alexeagle \u003c47395+alexeagle@users.noreply.github.com\u003e\nCo-authored-by: Jason Bedard \u003cjason+github@jbedard.ca\u003e"
    },
    {
      "commit": "879a724aefaa34955df6926e9c8353e0eceaaae3",
      "tree": "95be4367cc7ee4c3c94a055a32aa4f11b41df1c1",
      "parents": [
        "10462a0eabb56da1686a1343fcc3411043f9b7c0"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Mon Feb 02 14:41:33 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 02 14:41:33 2026 -0800"
      },
      "message": "docs: fix typos and grammar in docstrings (#2714)\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "10462a0eabb56da1686a1343fcc3411043f9b7c0",
      "tree": "1fbe8010b069b3a5d1e9692ec3a3805364cc5d9d",
      "parents": [
        "a80126d65b28126e52485e5f262743a6c8deccda"
      ],
      "author": {
        "name": "Sebastian Barfurth",
        "email": "s@barfurth.com",
        "time": "Mon Feb 02 19:43:20 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 02 18:43:20 2026 +0000"
      },
      "message": "fix: convert hex from packageManager integrity to base64 format (#2709)\n\nThe hash on the `packageManager` field in `package.json` is specified as\na hex string for the sha512 checksum. This representation is what\ncorepack\n[expects](https://github.com/nodejs/corepack?tab\u003dreadme-ov-file#when-authoring-packages)\nand what something like `pnpm install` can understand. However, Bazel\nneeds an integrity hash in SRI format with a base64 representation of\nthe checksum. The repository code will now convert from hex to base64 on\nthe fly. This makes the `pnpm_version_from` field actually useful with a\nhash. Before it was only useful without it since the hash format was\nmismatched between corepack and Bazel and thus caused errors on one side\nor the other.\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: no\n\n### Test plan\n\n- New test cases added"
    },
    {
      "commit": "a80126d65b28126e52485e5f262743a6c8deccda",
      "tree": "1439a91a78cc84ee7c37ca3fce50bf7c4d0aeb28",
      "parents": [
        "b1ff456e8e9e4125170601296e8be61af5c2e344"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Sun Feb 01 17:58:15 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Feb 01 17:58:15 2026 -0700"
      },
      "message": "chore(docs): minor tweaks to be Mintlify-MDX compatible (#2712)\n\nRan the docs.tar.gz through my new mintlify converter for\ndocs.aspect.build"
    },
    {
      "commit": "b1ff456e8e9e4125170601296e8be61af5c2e344",
      "tree": "5d0e00f4f8f8496a1aec26a2bcd293796cfaaa19",
      "parents": [
        "cecda769fd41d2b17e8d4aa276d1f09385a13990"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Fri Jan 30 16:50:05 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 30 16:50:05 2026 -0800"
      },
      "message": "feat: use aspect-build org CI checks (#2706)\n\nnote: main floating ref is intentional so we can roll out checks to the\norg without the toil of visiting each repo"
    },
    {
      "commit": "cecda769fd41d2b17e8d4aa276d1f09385a13990",
      "tree": "4bc548b4a04aa83a88a55893bb20891cae2453c3",
      "parents": [
        "503e2eea6bf4f5e5d09d7a95d843b41bc9fc4362"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Fri Jan 30 15:12:00 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 30 15:12:00 2026 -0800"
      },
      "message": "chore(docs): document public APIs, not private ones (#2711)\n\n"
    },
    {
      "commit": "503e2eea6bf4f5e5d09d7a95d843b41bc9fc4362",
      "tree": "f6cb184bf8c8e90a5886f87403c0b08bd3d62a7c",
      "parents": [
        "3bf471eeaa82280bacffecdeb1fc77703b90c7d7"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Fri Jan 30 14:21:43 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 30 14:21:43 2026 -0800"
      },
      "message": "Revert \"fix: produce starlark_doc_extract rules for public API\" (#2710)\n\nReverts aspect-build/rules_js#2703\n\nIt didn\u0027t work because this repo relies on private/ bzl files to give\ndocumentation on npm_translate_lock, among others.\n\nAlso we don\u0027t want the examples to have documentation generated. See\nhttps://registry.bazel.build/docs/aspect_rules_js/3.0.0-rc3 which was\nwrong 😓"
    },
    {
      "commit": "3bf471eeaa82280bacffecdeb1fc77703b90c7d7",
      "tree": "1e50f1a0fc15d70d0fc6927726e8e0fe753eec6f",
      "parents": [
        "6eac6559cd3a53fe851bf834960ee191dde372bc"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Jan 29 16:44:25 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 16:44:25 2026 -0800"
      },
      "message": "test: remove primary bazel version testing from gha (#2701)\n\nTesting on linux across bazel versions is done on Aspect Workflows.\n\nThis is the first step to changing GHA to only be used for: mac,\nwindows, non-bazel tests\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "6eac6559cd3a53fe851bf834960ee191dde372bc",
      "tree": "0a1171719558ae6dc8fd2b0efdab97d810fc26c8",
      "parents": [
        "d2a259410a2f88907c74c3d7162c09425f4b46ee"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Jan 29 15:12:46 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 15:12:46 2026 -0800"
      },
      "message": "test: remove use of WORKSPACE.bzlmod in tests, prep e2e tests for bazel 8+ (#2705)\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "d2a259410a2f88907c74c3d7162c09425f4b46ee",
      "tree": "96d964c472b1fb8fee69117a972fabadcc26d5bc",
      "parents": [
        "cdbef7f5e904d648a4ce905dc00a18af4629d050"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Thu Jan 29 15:00:27 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 15:00:27 2026 -0800"
      },
      "message": "fix: produce starlark_doc_extract rules for public API (#2703)\n\nJust switch to bazel-lib which has a macro for bzl_library that produces\nstarlark_doc_extract if `native.package_name()` isn\u0027t /private/"
    },
    {
      "commit": "cdbef7f5e904d648a4ce905dc00a18af4629d050",
      "tree": "cded780f2825fe6eb73dca282c4c7e05c6377a9f",
      "parents": [
        "57b958e81077e6b0d095f6990a29210568602023"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Thu Jan 29 14:36:55 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 14:36:55 2026 -0800"
      },
      "message": "refactor(deps): remove use of path-exists, upgrade @pnpm/lifecycle (#2682)\n\n"
    },
    {
      "commit": "57b958e81077e6b0d095f6990a29210568602023",
      "tree": "d521851518acc84f220d4b4eef00e1da846705d1",
      "parents": [
        "e83f3d99e20ac8a4502fb65eb3de9646077ee6d4"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Thu Jan 29 13:43:05 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 13:43:05 2026 -0800"
      },
      "message": "refactor: upgrade platforms bzlmod dep to v1 (#2704)\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- Covered by existing test cases"
    },
    {
      "commit": "e83f3d99e20ac8a4502fb65eb3de9646077ee6d4",
      "tree": "d1e1841b4f7538779f04c550046a83ec257bc03d",
      "parents": [
        "37eb63ff72a677203aec58f57720dd97a4f788a8"
      ],
      "author": {
        "name": "Sridhar Mocherla",
        "email": "smocherla@brex.com",
        "time": "Thu Jan 29 13:02:53 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 10:02:53 2026 -0800"
      },
      "message": "fix: add check to ensure home npmrc exists in module extension (#2702)\n\nFix: #2068\n\nMore detail there but when we want to use `~/.npmrc` for using\ncredentials for private npm repos, bazel build fails with bzlmod even\nwhen don\u0027t build any JS package because the module extension tries to\neagerly read the `~/.npmrc` which may not exist on all machines. This\nreplicates the same behavior that exists with WORKSPACE so that the file\nis read only if it exists. I used `module_ctx.path` here as it seems to\nwork for absolute system paths too (although it is not documented in\nbazel docs).\n\n### Test plan\n\nthis patch works in our internal repo. I also did manual testing with\none of the examples in `e2e`. Before this change and adding\n`use_home_npmrc` in the module extension\n```\nnpm.npm_translate_lock(\n    name \u003d \"npm\",\n    data \u003d [\"//:package.json\"],\n    npmrc \u003d \"//:.npmrc\",\n    pnpm_lock \u003d \"//:pnpm-lock.yaml\",\n    use_home_npmrc \u003d True,\n    update_pnpm_lock \u003d True,\n    verify_node_modules_ignored \u003d \"//:.bazelignore\",\n)\n```\n\n```\nnpm_translate_lock git:(main) ✗ bazel query //...\nINFO: Invocation ID: 905153da-591c-4604-9784-522087e2ed33\nERROR: /home/owner/.cache/bazel/_bazel_owner/ea1866dc89f57aaaf8a3c2a396a9c5d2/external/aspect_rules_js~/npm/extensions.bzl:126:53: Traceback (most recent call last):\n        File \"/home/owner/.cache/bazel/_bazel_owner/ea1866dc89f57aaaf8a3c2a396a9c5d2/external/aspect_rules_js~/npm/extensions.bzl\", line 64, column 39, in _npm_extension_impl\n                _npm_translate_lock_bzlmod(module_ctx, attr, exclude_package_contents_config, replace_packages)\n        File \"/home/owner/.cache/bazel/_bazel_owner/ea1866dc89f57aaaf8a3c2a396a9c5d2/external/aspect_rules_js~/npm/extensions.bzl\", line 126, column 53, in _npm_translate_lock_bzlmod\n                home_npmrc \u003d parse_npmrc(module_ctx.read(home_npmrc_path))\nError in read: java.io.FileNotFoundException: /home/owner/.npmrc (No such file or directory)\nERROR: Target parsing failed due to unexpected exception: error evaluating module extension npm in @@aspect_rules_js~//npm:extensions.bzl\nLoading: 0 packages loaded\n    currently loading: \n    Fetching module extension npm in @@aspect_rules_js~//npm:extensions.bzl; Generating starlark for npm dependencies\n```\n\nafter this change, it successfully runs."
    },
    {
      "commit": "37eb63ff72a677203aec58f57720dd97a4f788a8",
      "tree": "5801ea68556eda41a314c254ca6edec6ce5b9d54",
      "parents": [
        "821ed3145d31b5c455712e547c25badad9ed6bcf"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Wed Jan 28 01:01:29 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 28 01:01:29 2026 -0800"
      },
      "message": "feat: support reproducible pnpm downloads using bazel facts api (#2698)\n\nClose #2695\n\n---\n\n### Changes are visible to end-users: yes\n\n- Searched for relevant documentation and updated as needed: yes\n- Breaking change (forces users to change their own code or config): no\n- Suggested release notes appear below: yes\n\nPNPM versions not known to rules_js may now be used without manually\nspecifying integrity hashes by using the Bazel 9 [facts\nAPI](https://bazel.build/rules/lib/builtins/module_ctx#facts) to\nfetch+persist pnpm integrity hashes in the MODULE lock file.\n\n### Test plan\n\n- Covered by existing test cases\n- Manual testing; please provide instructions so we can reproduce: when\nusing bazel9, update MODULE.bazel to use a `pnpm_version` not specified\nin `npm/private/versions.bzl`"
    },
    {
      "commit": "821ed3145d31b5c455712e547c25badad9ed6bcf",
      "tree": "4ff68cabe77e1beb3524bdc0f5b85a9ded0ae645",
      "parents": [
        "5336b7e778d46da9c6563c418ac23b679f792624"
      ],
      "author": {
        "name": "Tyler Breisacher",
        "email": "tyler.breisacher@flyzipline.com",
        "time": "Sun Jan 25 19:00:56 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jan 25 19:00:56 2026 -0800"
      },
      "message": "chore: Fix up a few broken links (#2697)\n\n"
    },
    {
      "commit": "5336b7e778d46da9c6563c418ac23b679f792624",
      "tree": "b9823180ebb8578f377d11e3e7bac9284359127c",
      "parents": [
        "944ec74dcfc2e513ab61ebcba9df2be5b3350422"
      ],
      "author": {
        "name": "Alex Eagle",
        "email": "alex@aspect.build",
        "time": "Sun Jan 25 09:26:45 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jan 25 09:26:45 2026 -0800"
      },
      "message": "chore(docs): point to bazel-starters\n\nAdded \u0027Getting started\u0027 and \u0027More from Aspect\u0027 sections to README."
    },
    {
      "commit": "944ec74dcfc2e513ab61ebcba9df2be5b3350422",
      "tree": "649cae459110eb006797c9aa93061d8e165145f4",
      "parents": [
        "87976ffb00e8f3be36dcfaef3d2d7253a039ade7"
      ],
      "author": {
        "name": "renovate[bot]",
        "email": "29139614+renovate[bot]@users.noreply.github.com",
        "time": "Sat Jan 24 00:04:17 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jan 24 00:04:17 2026 -0800"
      },
      "message": "chore(deps): update pre-commit hook commitizen-tools/commitizen to v4 (#2680)\n\nThis PR contains the following updates:\n\n| Package | Type | Update | Change |\n|---|---|---|---|\n|\n[commitizen-tools/commitizen](https://redirect.github.com/commitizen-tools/commitizen)\n| repository | major | `v3.31.0` → `v4.12.1` |\n\nNote: The `pre-commit` manager in Renovate is not supported by the\n`pre-commit` maintainers or community. Please do not report any problems\nthere, instead [create a Discussion in the Renovate\nrepository](https://redirect.github.com/renovatebot/renovate/discussions/new)\nif you have any questions.\n\n---\n\n### Release Notes\n\n\u003cdetails\u003e\n\u003csummary\u003ecommitizen-tools/commitizen\n(commitizen-tools/commitizen)\u003c/summary\u003e\n\n###\n[`v4.12.1`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v4121-2026-01-22)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.12.0...v4.12.1)\n\n##### Fix\n\n- **pre-commit-hooks**: remove magic constants on pre-push hook\n([#\u0026#8203;1815](https://redirect.github.com/commitizen-tools/commitizen/issues/1815))\n\n###\n[`v4.12.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v4120-2026-01-19)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.11.6...v4.12.0)\n\n##### Feat\n\n- **prek**: supporting prek as an alternative to pre-commit and\nswitching to prek\n([#\u0026#8203;1799](https://redirect.github.com/commitizen-tools/commitizen/issues/1799))\n\n###\n[`v4.11.6`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v4116-2026-01-15)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.11.5...v4.11.6)\n\n##### Fix\n\n- **git**: commit bodies with carriage returns are correctly split by …\n([#\u0026#8203;1780](https://redirect.github.com/commitizen-tools/commitizen/issues/1780))\n\n###\n[`v4.11.5`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v4115-2026-01-15)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.11.4...v4.11.5)\n\n##### Fix\n\n- **config**: ensure the actually used config file is correct, better\ntest coverage\n([#\u0026#8203;1784](https://redirect.github.com/commitizen-tools/commitizen/issues/1784))\n\n###\n[`v4.11.4`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v4114-2026-01-15)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.11.3...v4.11.4)\n\n##### Fix\n\n- **cli**: move sys.excepthook override to correct line, rename \u0027type\u0027\nparameter, fix no argv test\n([#\u0026#8203;1791](https://redirect.github.com/commitizen-tools/commitizen/issues/1791))\n\n###\n[`v4.11.3`](https://redirect.github.com/commitizen-tools/commitizen/releases/tag/v4.11.3)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.11.2...v4.11.3)\n\n#### v4.11.3 (2026-01-13)\n\n##### Fix\n\n- **bump**: fix the issue that changelog\\_merge\\_prerelease not working\non cz bump\n\n\\[master\n[`aa82b98`](https://redirect.github.com/commitizen-tools/commitizen/commit/aa82b982)]\nbump: version 4.11.2 → 4.11.3\n5 files changed, 10 insertions(+), 4 deletions(-)\n\n###\n[`v4.11.2`](https://redirect.github.com/commitizen-tools/commitizen/releases/tag/v4.11.2)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.11.1...v4.11.2)\n\n#### v4.11.2 (2026-01-12)\n\n##### Fix\n\n- **config**: add warning for multiple configuration files and update\ndocumentation\n([#\u0026#8203;1773](https://redirect.github.com/commitizen-tools/commitizen/issues/1773))\n\n\\[master\n[`193859b`](https://redirect.github.com/commitizen-tools/commitizen/commit/193859be)]\nbump: version 4.11.1 → 4.11.2\n5 files changed, 10 insertions(+), 4 deletions(-)\n\n###\n[`v4.11.1`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v4111-2026-01-03)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.11.0...v4.11.1)\n\n##### Fix\n\n- **providers**: normalize package names in uv provider for uv.lock\nmatching\n\n###\n[`v4.11.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v4110-2025-12-29)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.10.1...v4.11.0)\n\n##### Feat\n\n- Drop support for Python 3.9 as EOL reached and add Python 3.14 support\n- add custom validation\n\n###\n[`v4.10.1`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v4101-2025-12-11)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.10.0...v4.10.1)\n\n##### Fix\n\n- **version**: fix the behavior of cz version --major\n- **cli**: debug and no\\_raise can be used together in sys.excepthook\n- **git**: replace lstrip with strip for compatibility issue\n- **bump**: remove NotAllowed related to --get-next option, other\nrelated refactoring\n\n##### Refactor\n\n- **version**: rename class member to align with other classes\n- **cargo\\_provider**: cleanup and get rid of potential type errors\n- **bump**: extract option validation and new version resolution to new\nfunctions\n- **changelog**: raise NotAllow when file\\_name not passed instead of\nusing assert\n- **bump**: rename parameter and variables\n\n##### Perf\n\n- **ruff**: enable ruff rules TC001\\~TC006\n- add TYPE\\_CHECKING to CzQuestion imports\n\n###\n[`v4.10.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v4100-2025-11-10)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.9.1...v4.10.0)\n\n##### Feat\n\n- add config option for line length warning\n- **conventional\\_commits**: allow exclamation in title on BC\n- **version**: add the ability to just print major or minor version\n- allow `amend!` prefix as created by `git --fixup\u003dreword:\u003ccommit\u003e`\n\n##### Fix\n\n- **commands/version**: add missing return\n- **test**: set terminal width for cli tests\n- **Init**: raise InitFailedError on keyboard interrupt on pre-commit\nhook question, simplify logic, remove unreachable code path\n\n##### Refactor\n\n- **bump**: cleanup related to update\\_version\\_file\n- **RestructuredTest**: rename variable, fix typo and remove unnecessary\nstring copy\n- **TomlConfig**: minor cleanups for DX\n- **Commit**: refactor \\_prompt\\_commit\\_questions and fix some type\nhint\n- **hooks**: refactor to improve readability\n- **Init**: make project\\_info a module and remove self.project\\_info\n- **BaseConfig**: update docstring, extract factory method and remove\nunnecessary variable assignment\n- remove self.encoding for better maintainability\n- **utils**: make get\\_backup\\_file\\_path to return a path for semantic\ncorrectness\n- remove unnecessary class member tag\\_format\n- **Bump**: remove use of getattr\n- **ConventionalCommitsCz**: rewrite message method to make the pattern\nmore clear\n- **cmd**: unnest try except\n- **BaseCommitizen**: remove NotImplementedError and make them abstract\nmethod\n- **BaseCommitizen**: construct Style object directly to get rid of\npotential type error\n\n###\n[`v4.9.1`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v491-2025-09-10)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.9.0...v4.9.1)\n\n##### Fix\n\n- **dependency**: move deprecated to project.dependencies\n\n###\n[`v4.9.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v490-2025-09-09)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.8.4...v4.9.0)\n\n##### Feat\n\n- **check**: add check against default branch\n\n##### Fix\n\n- **changelog**: mark get\\_smart\\_tag\\_range as deprecated\n- **init**: use pre-push as pre-commit stage\n- **init**: use pre-push as pre-commit stage\n- **init**: make welcome message easier to read\n- **Init**: fix a typo in \\_ask\\_version\\_provider options and remove\nunnecessary filter, use named tuple for options\n- **ExitCode**: add from\\_str in ExitCode and replace parse\\_no\\_raise\nwith it\n- raise NoVersionSpecifiedError if version is None, and adjust call\nsites of get\\_version\n- **Changelog**: fix \\_export\\_template variable type\n- **Bump**: rewrite --get-next NotAllowed error message for consistency\n\n##### Refactor\n\n- **changelog**: add get\\_next\\_tag\\_name\\_after\\_version and test, mark\nunused for get\\_smart\\_tag\\_range\n- **changelog**: simplify logic for get\\_oldest\\_and\\_newest\\_rev\n- **changelog**: shorten generate\\_tree\\_from\\_commits\n- **Init**: remove the variable values\\_to\\_add and the update\\_config\nfunction for readability\n- **Init**: remove unnecessary methods from ProjectInfo and refactor\n\\_ask\\_tag\n- **Init**: fix unbounded variable in \\_ask\\_tag\\_format\n- **init**: remote extra words\n- **process\\_commit\\_message**: better type and early return\n- **Init**: extract \\_get\\_config\\_data for readability\n- **changelog**: shorten condition expression and early return\n- **Changelog**: remove unnecessary intermediate variables for better\nreadability\n- **bump**: use a loop to shorten a series of similar NotAllowed\nexceptions\n- **Init**: use ternary operator\n- **TagRules**: extract tag\\_formats property and simplify list\ncomprehension\n- **git**: remove redundant if branch\n- **ScmProvider**: replace sorted with max\n- **ExpectedExit**: make the constructor more compact\n- **ParseArgs**: simplify **call** function body\n\n###\n[`v4.8.4`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v484-2025-09-05)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.8.3...v4.8.4)\n\n##### Fix\n\n- members in workspace, use exclude\n- cargo workspaces\n\n##### Refactor\n\n- reduce code indentation\n\n###\n[`v4.8.3`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v483-2025-06-09)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.8.2...v4.8.3)\n\n##### Fix\n\n- **cli**: update description for deprecate warning\n- **commit**: emit deprecated warning of cz commit -s\n- **Check**: make parameters backward compatible\n- **BaseConfig**: mypy error\n- **deprecated**: mark deprecate in v5\n- **defaults**: add non-capitalized default constants back and\ndeprecated warning\n\n##### Refactor\n\n- **jira**: refactor message\n- **conventional\\_commits**: use TypedDict for answers\n- **conventional\\_commits**: make schema\\_pattern more readable\n- do not guess if changelog format is provided\n- **check**: compile once and rename variable\n- **questions**: type questions with TypedDict\n- **bump**: simplify nested if\n- **git**: retype get\\_commits parameter to make it more friendly to\ncall sites\n- **git**: simplify tag logic\n- **bump**: eliminate similar patterns in code\n- **bump**: use any to replace \u0027or\u0027 chain\n- remove unnecessary bool() and remove Any type from TypedDict get\n- **bump**: improve readability and still bypass mypy check\n- **commands**: remove unused args, type version command args\n- **commit**: type commit args\n- **check**: type CheckArgs arguments\n- **check**: remove unused argument\n- **changelog**: type untyped arguments\n- **bump**: TypedDict for bump argument\n- make methods protected, better type\n- **conventional\\_commits**: remove unnecessary checks\n- fix mypy output and better type\n- **BaseCommitizen**: remove unused process\\_commit\n- remove `TypeError` handling since `Python \u003e\u003d3.9` is required\n- add comment clarifying `no_raise` parsing to `list[int]`\n- **cli.py**: add type hints\n- **mypy**: remove `unused-ignore`\n- **changelog**: better typing, yield\n- **cli**: early return and improve test coverage\n- **git**: extract \\_create\\_commit\\_cmd\\_string\n- misc cleanup\n- **bump**: clean up\n- **bump**: add type for out, replace function with re escape\n- **BaseConfig**: use setter\n- **changelog**: minor cleanup\n- **git**: refactor get\\_tag\\_names\n- **EOLType**: add eol enum back and reorganize methods\n- **git**: code cleanup and better test coverage\n- **commit**: simplify call\n- **version\\_scheme**: cleanup\n- improve readability and fix typos\n\n##### Perf\n\n- **bump**: avoid unnecessary list construction and rename variable to\navoid confusion\n- **tags**: use set\n\n###\n[`v4.8.2`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v482-2025-05-22)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.8.1...v4.8.2)\n\n##### Refactor\n\n- **check**: simplify code\n- **check**: remove unnecessary variable\n\n###\n[`v4.8.1`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v481-2025-05-22)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.8.0...v4.8.1)\n\n##### Refactor\n\n- **customize**: improve code readability\n\n###\n[`v4.8.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v480-2025-05-20)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.7.2...v4.8.0)\n\n##### Feat\n\n- **cli**: add --tag-format argument to changelog command\n\n###\n[`v4.7.2`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v472-2025-05-18)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.7.1...v4.7.2)\n\n##### Refactor\n\n- **default**: capitalize all constants and remove unnecessary variable\n\n###\n[`v4.7.1`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v471-2025-05-16)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.7.0...v4.7.1)\n\n##### Fix\n\n- **bump**: don\u0027t fail if an invalid version tag is present (fix\n[#\u0026#8203;1410](https://redirect.github.com/commitizen-tools/commitizen/issues/1410))\n([#\u0026#8203;1418](https://redirect.github.com/commitizen-tools/commitizen/issues/1418))\n\n###\n[`v4.7.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v470-2025-05-10)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.6.3...v4.7.0)\n\n##### Feat\n\n- **providers**: add support for `Cargo.lock`\n\n##### Refactor\n\n- **tests**: increase verbosity of variables\n\n###\n[`v4.6.3`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v463-2025-05-07)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.6.2...v4.6.3)\n\n##### Fix\n\n- **changelog.py**: cross-platform path handling using os.path.join and\nmodify the path linter and test parameter\n- **changelog.py**: modify the CHANGELOG.md generated by cz bump\n--changelog to the right place\n\n###\n[`v4.6.2`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v462-2025-05-05)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.6.1...v4.6.2)\n\n##### Fix\n\n- **docs**: fix url link and table formatting in the customization docs\n([#\u0026#8203;1399](https://redirect.github.com/commitizen-tools/commitizen/issues/1399))\n\n###\n[`v4.6.1`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v461-2025-05-05)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.6.0...v4.6.1)\n\n##### Fix\n\n- **commit**: use os.unlink to remove temp file\n\n###\n[`v4.6.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v460-2025-04-13)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.5.1...v4.6.0)\n\n##### Feat\n\n- **changelog**: expose commit parents\u0027 digests when processing commits\n- **git**: add parents\u0027 digests in commit information\n\n###\n[`v4.5.1`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v451-2025-04-09)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.5.0...v4.5.1)\n\n##### Fix\n\n- print which tag is invalid\n\n###\n[`v4.5.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v450-2025-04-04)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.4.1...v4.5.0)\n\n##### Feat\n\n- **init**: set uv to default value if both pyproject.toml and uv.lock\npresent\n\n##### Fix\n\n- **commands/init**: add missing uv provider to \"cz init\"\n\n###\n[`v4.4.1`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v441-2025-03-02)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.4.0...v4.4.1)\n\n##### Fix\n\n- **tags**: fixes ImportError on Python \u003e\u003d3.11\n([#\u0026#8203;1363](https://redirect.github.com/commitizen-tools/commitizen/issues/1363))\n([#\u0026#8203;1364](https://redirect.github.com/commitizen-tools/commitizen/issues/1364))\n\n###\n[`v4.4.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v440-2025-03-02)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.3.0...v4.4.0)\n\n##### Feat\n\n- **tags**: adds `legacy_tag_formats` and `ignored_tag_formats` settings\n\n##### Refactor\n\n- **get\\_tag\\_regexes**: dedup tag regexes definition\n\n###\n[`v4.3.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v430-2025-02-28)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.2.2...v4.3.0)\n\n##### Feat\n\n- **providers**: add uv\\_provider\n\n###\n[`v4.2.2`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v422-2025-02-18)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.2.1...v4.2.2)\n\n##### Fix\n\n- **bump**: manual version bump if prerelease offset is configured\n\n###\n[`v4.2.1`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v421-2025-02-08)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.2.0...v4.2.1)\n\n##### Fix\n\n- **bump**: add debugging to bump\n\n###\n[`v4.2.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v420-2025-02-07)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.1.1...v4.2.0)\n\n##### Feat\n\n- draft of the --empty parameter\n\n##### Refactor\n\n- **bump**: rename --empty as --allow-no-commit\n\n###\n[`v4.1.1`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v411-2025-01-26)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.1.0...v4.1.1)\n\n##### Fix\n\n- **get-next-bump**: add a test case\n- **get-next-bump**: fix to permit usage of --get-next options even when\nupdate\\_changelog\\_on\\_bump is set to true\n\n###\n[`v4.1.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v410-2024-12-06)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v4.0.0...v4.1.0)\n\n##### Feat\n\n- **commit**: allow \u0027-- --allow-empty\u0027 to create empty commits\n\n###\n[`v4.0.0`](https://redirect.github.com/commitizen-tools/commitizen/blob/HEAD/CHANGELOG.md#v400-2024-11-26)\n\n[Compare\nSource](https://redirect.github.com/commitizen-tools/commitizen/compare/v3.31.0...v4.0.0)\n\n\u003c/details\u003e\n\n---\n\n### Configuration\n\n📅 **Schedule**: Branch creation - At any time (no schedule defined),\nAutomerge - At any time (no schedule defined).\n\n🚦 **Automerge**: Disabled by config. Please merge this manually once you\nare satisfied.\n\n♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the\nrebase/retry checkbox.\n\n🔕 **Ignore**: Close this PR and you won\u0027t be reminded about this update\nagain.\n\n---\n\n- [ ] \u003c!-- rebase-check --\u003eIf you want to rebase/retry this PR, check\nthis box\n\n---\n\nThis PR was generated by [Mend Renovate](https://mend.io/renovate/).\nView the [repository job\nlog](https://developer.mend.io/github/aspect-build/rules_js).\n\n\u003c!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NS4xIiwidXBkYXRlZEluVmVyIjoiNDIuODUuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwcyJdfQ\u003d\u003d--\u003e\n\nCo-authored-by: renovate[bot] \u003c29139614+renovate[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "87976ffb00e8f3be36dcfaef3d2d7253a039ade7",
      "tree": "99dcc023ca2c9ee0cd7ef66ab539e3f6ceb4dafd",
      "parents": [
        "d266e8a485d4e33fcfcaba1e3290a64143d75202"
      ],
      "author": {
        "name": "Jason Bedard",
        "email": "jason+github@jbedard.ca",
        "time": "Fri Jan 23 10:37:40 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 23 10:37:40 2026 -0800"
      },
      "message": "fix: support negated pnpm os|cpu constraints (#2696)\n\nFix #2694\n\nPNPM os/cpu constraints can also be negated such as `!arm`, for example:\n\n```\n  sass-embedded-all-unknown@1.97.3:\n    resolution: {integrity: sha512-...\u003d\u003d}\n    cpu: [\u0027!arm\u0027, \u0027!arm64\u0027, \u0027!riscv64\u0027, \u0027!x64\u0027]\n```\n\nSee:\nhttps://docs.npmjs.com/cli/v10/configuring-npm/package-json#cpu\nhttps://nodejs.org/docs/latest-v24.x/api/process.html#processarch\nhttps://nodejs.org/docs/latest-v24.x/api/process.html#processplatform\n\n### Changes are visible to end-users: no\n\n### Test plan\n\n- New test cases added"
    }
  ],
  "next": "d266e8a485d4e33fcfcaba1e3290a64143d75202"
}
