)]}'
{
  "log": [
    {
      "commit": "bbeacc846555ffe6738ad79ea3013f2c255c8081",
      "tree": "8c000ea47bdbfdcffb2e0e2c5399fe941f1c73bc",
      "parents": [
        "f69123b80dfea2559d7cfb6c85143b05c9a82627"
      ],
      "author": {
        "name": "Taylor Edwards",
        "email": "108641549+inzombieack@users.noreply.github.com",
        "time": "Fri Oct 09 14:25:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 14:25:42 2026"
      },
      "message": "Provide defaults for optional CrateInfo fields in _create_crate_info (#4322)\n\nCurrently, `_create_crate_info` only provides defaults for a small\nsubset of the fields on the `CrateInfo` provider. If custom rules\ninstantiate `CrateInfo` using only the fields they care about, they are\nsusceptible to sudden runtime `AttributeError` crashes if `rules_rust`\ninternal logic is updated to unconditionally access a field that wasn\u0027t\npreviously required.\n\nThis PR adds defaults for all remaining non-essential fields in\n`_create_crate_info` and the only fields left without defaults are the\nstrictly required semantic fields (`name` and `type`).\n\n---------\n\nSigned-off-by: Taylor Edwards \u003ctayloredwards@google.com\u003e"
    },
    {
      "commit": "f69123b80dfea2559d7cfb6c85143b05c9a82627",
      "tree": "9e04c158a03db4e3eb346e15f4f46043e58525d0",
      "parents": [
        "e04560c1f71f3e0b2d35d5f9cafb0a58ffb5623d"
      ],
      "author": {
        "name": "Corentin Kerisit",
        "email": "corentin.kerisit@gmail.com",
        "time": "Thu Oct 08 14:43:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 14:43:59 2026"
      },
      "message": "Normalize Clang forwarded system header paths (#4321)\n\nCargo build scripts change working directory, so execroot-relative C/C++\nheader operands must be made absolute. The existing path mapper does not\nrecognize `-internal-externc-isystem`, and clears its pending operand\nwhen it encounters `-Xpreprocessor`. Clang then loses the libc headers,\ncausing failures such as `stdlib.h` not found when building lz4-sys.\n\nRecognize the extern-C system-header category and skip either Clang\nforwarding token while awaiting the path. Keep absolute paths and\nunrelated flags unchanged. This supports both late `-Xclang` forwarding\nand early `-Xpreprocessor` forwarding without changing header order.\n\nEight generated-action regressions cover the two forwarding forms, two\nheader categories, and relative/absolute operands. On unmodified main,\nthe three newly affected relative-path cases report missing rewritten\noperands during analysis. With the fix, all 38 tests pass:\n\n```sh\nUSE_BAZEL_VERSION\u003d8.6.0 bazel test --lockfile_mode\u003doff //cargo/tests/cargo_build_script/cc_args_and_env:all\n```"
    },
    {
      "commit": "e04560c1f71f3e0b2d35d5f9cafb0a58ffb5623d",
      "tree": "c364681fe807b5d03216b4ce8065a8c2bb20be59",
      "parents": [
        "6a5879bffea34919e8255aa3e6e622253903f6c3"
      ],
      "author": {
        "name": "Taylor Edwards",
        "email": "108641549+inzombieack@users.noreply.github.com",
        "time": "Wed Oct 07 08:25:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 07 08:25:33 2026"
      },
      "message": "Automatically assign needs-triage label (#4318)\n\n- Added new action in `issue_triage.yaml` that automatically adds the\n`needs-triage` label to newly opened issues\n- Updated `feature_request.md` to include `needs-triage` label by\ndefault, matching the existing behavior of `bug_report.md`\n\n---------\n\nSigned-off-by: Taylor Edwards \u003ctayloredwards@google.com\u003e"
    },
    {
      "commit": "6a5879bffea34919e8255aa3e6e622253903f6c3",
      "tree": "257de524a05c945f7ab551be4c7a073a5471eb83",
      "parents": [
        "2e02c5367fe549bf369ee45d1c7eed5501963e68"
      ],
      "author": {
        "name": "schachmat",
        "email": "schachmat@users.noreply.github.com",
        "time": "Mon Oct 05 10:22:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 10:22:44 2026"
      },
      "message": "Catch unrecognized processor warnings from LLVM (#4316)\n\nThis is very similar to the unrecognized feature warnings."
    },
    {
      "commit": "2e02c5367fe549bf369ee45d1c7eed5501963e68",
      "tree": "d478611bda6643b444d50b48425d661490cccc06",
      "parents": [
        "a1fac488c979416bc594d326399c31f9bf1f763a"
      ],
      "author": {
        "name": "Erick Tryzelaar",
        "email": "erick.tryzelaar@gmail.com",
        "time": "Wed Sep 30 18:43:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 18:43:00 2026"
      },
      "message": "Order rust lints before clippy lints to allow ignoring unknown lints (#4030)\n\nWhen updating the Rust toolchain in a quickly moving repository, it can\nbe difficult to atomically fix all the lints and update the toolchain in\na single commit. It can be helpful to:\n\n* land a patch that adds the flags `-Aunknown_lints\n-Aclippy::useless_borrows_in_formatting`. Rust needs them in that order,\notherwise it will error out.\n* land the toolchain update.\n* clean up the remaining lint failures.\n\nUnfortunately before this patch rules_rust would emit the clippy lints\nfirst, then the rustc lints, so we couldn\u0027t use this pattern. This patch\nreverses the order and fixes this issue.\n\nCo-authored-by: Daniel Wagner-Hall \u003cdawagner@gmail.com\u003e"
    },
    {
      "commit": "a1fac488c979416bc594d326399c31f9bf1f763a",
      "tree": "ed9de535db1798caaf85328fca065881ebd7e93a",
      "parents": [
        "caa7307a633cb4f83ed38a839aec13ab9b3b1e94"
      ],
      "author": {
        "name": "Randolf J.",
        "email": "me@jrandolf.com",
        "time": "Wed Sep 30 16:11:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 16:11:16 2026"
      },
      "message": "rust: include macOS LLVM runtime libraries (#4303)\n\nInclude macOS LLVM shared libraries in the generated `llvm_lib`\nfilegroup so coverage tools retain their SDK runtime dependencies in\nsandboxes and remote execution. The existing Linux matches and\nempty-library behavior are preserved. Minimal SDK repositories exercise\nthe actual generated glob for macOS, Linux and statically linked tools.\n\nFixes #4298.\n\nValidation: `bazel test //test/unit/repository_utils:all` (7 tests\npassed); formatting and whitespace checks passed."
    },
    {
      "commit": "caa7307a633cb4f83ed38a839aec13ab9b3b1e94",
      "tree": "6e261d9764b08f4aafe078f4720d3b48f3dcd111",
      "parents": [
        "a8457d58d83a634ab6e7c229bc161f4af765f919"
      ],
      "author": {
        "name": "Randolf J.",
        "email": "me@jrandolf.com",
        "time": "Wed Sep 30 16:06:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 16:06:23 2026"
      },
      "message": "cargo: propagate target-scoped build-script linker arguments (#4304)\n\nBuild scripts emitting binary or cdylib linker arguments currently lose\nthose arguments. This recreates #4097 by @ashi009 on current main,\nretaining the original author’s commit and updating the implementation\nand regression coverage.\n\nBoth `rustc-link-arg-cdylib` and its legacy `rustc-cdylib-link-arg`\nalias reach cdylib consumers. Binary directives remain direct-only and\nexclude test harnesses. `rustc-link-arg-bin\u003dBIN\u003dFLAG` matches the exact\nCargo binary name; generated targets can set `cargo_bin_name` when their\nBazel name differs. Interleaved named and all-binary arguments retain\ntheir emission order, including flags containing equals signs. The new\nflag files use the current build-script path substitution mechanism.\n\nAndré’s requested binary/library regression coverage now includes\ncdylibs, rlibs, two binary names, a test harness, transitive build\nscripts, and actual compiler/linker execution. An invalid flag for an\nunrelated binary must be filtered out for those builds to succeed.\nBuildifier formatting is corrected.\n\nRelated: #1062. The new binary-scoped argument format is internal to the\nrunner/process-wrapper pair; existing general argument files retain\ntheir format.\n\nThe real-build regression also passes with\n`--experimental_output_paths\u003dstrip` on macOS.\n\nFixes #4299.\n\nValidation: `bazel test\n//cargo/tests/cargo_build_script/cdylib_bin_link_args:all\n//cargo/private/cargo_build_script_runner:all\n//util/process_wrapper:process_wrapper_test` (10 tests passed);\nformatting and whitespace checks passed.\n\n---------\n\nCo-authored-by: Xiaoyi Shi \u003cxiaoyi.shi@wondersco.com\u003e"
    },
    {
      "commit": "a8457d58d83a634ab6e7c229bc161f4af765f919",
      "tree": "00e1955297042cd8dfec2567841ea4456abccf11",
      "parents": [
        "bffa933c7aaae9e2158ed00242ad28599927b4ec"
      ],
      "author": {
        "name": "Jorge Gorbe Moya",
        "email": "slack@codemaniacs.com",
        "time": "Wed Sep 30 12:01:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 12:01:21 2026"
      },
      "message": "Disable link_deps warning for proc macros (#4308)\n\nlink_deps was added to `_COMMON_ATTRS` by #4024, but that PR also\nspecifically filtered `link_deps` out of `rust_proc_macro`. So,\ncurrently, if you have a C++ dep in a proc_macro you get a warning\ntelling you to use `link_deps` instead, and if you follow its advice you\nbreak the build because rust_proc_macro doesn\u0027t have that attribute.\n\nThis change skips the warning if the current crate is a proc macro."
    },
    {
      "commit": "bffa933c7aaae9e2158ed00242ad28599927b4ec",
      "tree": "954eb28199e1ae201c2127167758bbb802e1ad63",
      "parents": [
        "0dc7271040c5a6d191cb6d7a4a129df94340e011"
      ],
      "author": {
        "name": "Randolf J.",
        "email": "me@jrandolf.com",
        "time": "Tue Sep 29 17:48:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 17:48:22 2026"
      },
      "message": "Preserve runtime files for compiled doctests (#4272)\n\nCompiled doctests currently inherit their compilation inputs as\nrunfiles. This omits declared crate/dependency runtime data while\nsending the compiler SDK to the test machine.\n\nBuild the runtime files from the crate, explicit dependencies, runner,\nand compile_data. Preserve native shared libraries from CcInfo,\nincluding their resolved symlink targets. The compilation action retains\nall its original inputs.\n\nA real persisted doctest reads crate, transitive, and extra-dependency\ndata and calls a shared C library. An analysis regression checks that\nthe compiler SDK is absent from runfiles and remains a compilation\ninput. The shared-library fixture uses a runfiles-relative install\nname/SONAME to isolate file propagation from persisted-doctest rpath\nbehavior. This does not add a `data` attribute or change the public rule\nAPI.\n\nValidation: both regressions and their fixtures pass locally on macOS\narm64 with Bazel 9.2.0 at 878c4fd4, using nightly compiled doctests. The\nstable legacy smoke test also passes on the combined branch. The new\nfixtures remain disabled on Windows; Linux and Windows execution were\nnot tested locally.\n\nCloses #4289."
    },
    {
      "commit": "0dc7271040c5a6d191cb6d7a4a129df94340e011",
      "tree": "d9515a338888c1428958013d31208960cc7b328d",
      "parents": [
        "ffa3edef30e35dec026db970ec1d6522cb169711"
      ],
      "author": {
        "name": "Randolf J.",
        "email": "me@jrandolf.com",
        "time": "Tue Sep 29 16:09:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 16:09:04 2026"
      },
      "message": "cargo: apply explicit lint config to build scripts (#4275)\n\nAllow `cargo_build_script` to accept an explicit `lint_config` and\nforward it to build-script compilation. Explicit rustc lints also apply\nin execution configurations, so build scripts and procedural macros\nhonor the configuration attached to them.\n\nAnalysis coverage checks the configured rustc lint and check-cfg flags\non a library, a build script, and a proc-macro in both target and\nexecution configurations. Existing Clippy and rustdoc cases remain in\nthe suite.\n\nValidation: all five tests and the real fixture builds pass locally on\nmacOS arm64 with Bazel 9.2.0 at bfd28454 (`bazel test\n//test/unit/lint_flags:all`). The new proc-macro case checks both target\nand execution configurations. Formatting checks also pass.\n\nCloses #3486."
    },
    {
      "commit": "ffa3edef30e35dec026db970ec1d6522cb169711",
      "tree": "edcc9dd539635e1320e424ed7e50ae12a9418405",
      "parents": [
        "bb276bd2f105eaca378337b980ccc26ecf68cb2e"
      ],
      "author": {
        "name": "Randolf J.",
        "email": "me@jrandolf.com",
        "time": "Mon Sep 28 15:03:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 15:03:07 2026"
      },
      "message": "Map all generated input roots into legacy doctest runfiles (#4271)\n\nLegacy doctests run from a runfiles directory, but the launcher only\nstrips output roots found through crate and C++ library providers. A\ngenerated rustc environment file built in an execution configuration\nretains a `bazel-out/...` path and fails before rustdoc starts.\n\nCollect the nonempty roots of every declared action input instead. This\nalso covers generated compiler/linker tools and keeps source paths\nintact. The new regression executes a doctest using an environment file\nforwarded through an execution transition; it fails with a missing-file\nerror on main and passes with this change.\n\nValidation on macOS with Bazel 9.2.0: 17 owning tests pass on this\nstandalone branch. This extends the C++ runtime-root handling from\n#4220. Windows execution was not tested locally.\n\nCloses #4288."
    },
    {
      "commit": "bb276bd2f105eaca378337b980ccc26ecf68cb2e",
      "tree": "f4f9c03d4ec27dbd3dfd3cccd53b43974bcddc47",
      "parents": [
        "57138262c136783d45b9d3d2a753f17f3a8514e4"
      ],
      "author": {
        "name": "Randolf J.",
        "email": "me@jrandolf.com",
        "time": "Mon Sep 28 15:02:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 15:02:30 2026"
      },
      "message": "rustdoc: preserve the test invocation environment (#4277)\n\nPreserve Bazel\u0027s test and runfiles variables when the legacy doctest\nlauncher starts rustdoc. Invocation values override stale action-time\nvalues, and temporary-directory variables follow TEST_TMPDIR.\n\nThe doctest-writer tests and existing Rustdoc analysis suite pass on\nmacOS. Regressions cover Unix execution, Windows script generation, and\na Windows execution test for CI. Related to #4209; this does not\nintroduce env or env_inherit attributes.\n\nCloses #4292."
    },
    {
      "commit": "57138262c136783d45b9d3d2a753f17f3a8514e4",
      "tree": "57540fe668be82937da1a56afbac394aa4848d1d",
      "parents": [
        "73672ac506ef486a1a9fee580132440a7d1142b7"
      ],
      "author": {
        "name": "Randolf J.",
        "email": "me@jrandolf.com",
        "time": "Mon Sep 28 14:32:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 14:32:25 2026"
      },
      "message": "rustdoc: align the doctest runner with the test platform (#4279)\n\nBuild the compiled-doctest runner for Bazel\u0027s test execution platform\nand preserve its executable suffix. Reject cross-built legacy doctests\nwith a diagnostic explaining that they must use nightly compiled\ndoctests, since legacy doctests execute the compiler during testing.\n\nThe Rustdoc analysis suite passes on macOS in stable-only, nightly-only,\nand Bazel 7.4.1 configurations. A current-Bazel platform regression\nfails with the old runner transition and passes with path mapping\nenabled. Compiled-only tests inherit the selected toolchain and run only\nwhen nightly compiled doctests are enabled. Windows execution remains\nfor CI.\n\nCloses #4293."
    },
    {
      "commit": "73672ac506ef486a1a9fee580132440a7d1142b7",
      "tree": "bb9b9209cec556d8f00d7dab49664a2237f01399",
      "parents": [
        "83d85cce0ab56b42a7466d8b34f4e52949d2d064"
      ],
      "author": {
        "name": "backtr4ce",
        "email": "fabrice@schaub-dev.xyz",
        "time": "Mon Sep 28 14:31:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 14:31:49 2026"
      },
      "message": "Support `cc_lib` targets that only provide a dynamic library (#4249)\n\nThis fixes two issues I\u0027ve raised a while ago. Specifically: \n- https://github.com/bazelbuild/rules_rust/issues/4234\n- https://github.com/bazelbuild/rules_rust/issues/4233\n\nI signed the CLA with the Mail which I used to create the commit.\n\nCo-authored-by: Fabrice \u003cschaubfabrice@gmail.com\u003e\nCo-authored-by: Krasimir Georgiev \u003ckrasimir@google.com\u003e"
    },
    {
      "commit": "83d85cce0ab56b42a7466d8b34f4e52949d2d064",
      "tree": "3e5f4c675998ae3a809f512075a5bbb7c28b161d",
      "parents": [
        "c708b236becca33d0afb49920760a71ed636873b"
      ],
      "author": {
        "name": "Jay Zhuang",
        "email": "jayzhuang@google.com",
        "time": "Mon Sep 28 14:30:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 14:30:54 2026"
      },
      "message": "Add support for riscv64gc-unknown-fuchsia (#4294)\n\nAdd riscv64gc-unknown-fuchsia to rules_rust\u0027s supported triples. This is\nnecessary for Fuchsia build RISCV targets with rules_rust."
    },
    {
      "commit": "c708b236becca33d0afb49920760a71ed636873b",
      "tree": "6791416e4b04e474bf9e3e7e23763b240c450762",
      "parents": [
        "e995f478eee163c46cb8ff8e2f97f4b7dca481cb"
      ],
      "author": {
        "name": "Pieter-Jan Briers",
        "email": "pieterjan.briers@gmail.com",
        "time": "Sun Sep 27 17:58:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 27 17:58:52 2026"
      },
      "message": "Fix rust_analyzer_proc_macro_srv on Windows by setting PATH in launcher (#4286)\n\nThis effectively resolves `..\\..\\bin` from the target exe, and adds that\nto PATH, enabling the dlls for rust_analyzer_proc_macro_srv to be\nlocated.\n\nI\u0027m not sure this is the best way to go about this, but I\u0027m committing\nit in case it\u0027s useful for somebody else or a maintainer has a better\nidea.\n\nFixes https://github.com/bazelbuild/rules_rust/issues/4285"
    },
    {
      "commit": "e995f478eee163c46cb8ff8e2f97f4b7dca481cb",
      "tree": "979c8fabfd3554a0711e60ff87773ac50e23623e",
      "parents": [
        "4139da8f1b76d327f8647434f2d6189d704a3069"
      ],
      "author": {
        "name": "Randolf J.",
        "email": "me@jrandolf.com",
        "time": "Sun Sep 27 17:58:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 27 17:58:05 2026"
      },
      "message": "Honor build-script execution constraints in compilation and run actions (#4270)\n\n`cargo_build_script(exec_compatible_with \u003d ...)` currently constrains\nthe generated script target but not both actions that compile and run\nit. A build script can therefore be scheduled on an execution platform\nthat the caller explicitly excluded.\n\nApply the constraint to the generated Rust binary and the build-script\nrun target. The analysis regression checks both stages and fails when\neither propagation is removed.\n\nVerification:\n`//cargo/tests/cargo_build_script/compatible_with:exec_constraints_test`\nand the owning build-script test suite pass on macOS. Buildifier and\n`git diff --check` pass."
    },
    {
      "commit": "4139da8f1b76d327f8647434f2d6189d704a3069",
      "tree": "b040c613f77d102c40ce31caf86f7901c7a8200e",
      "parents": [
        "402503f3a76df8ee8f04684866f5d9009cf80a7e"
      ],
      "author": {
        "name": "Y.B.",
        "email": "paranoyouz@gmail.com",
        "time": "Thu Sep 24 22:02:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 22:02:36 2026"
      },
      "message": "Set the Apple deployment target for rustc from the linker args (#4282)\n\nFixes #4149.\n\nFollowing keith\u0027s suggestion on the issue: when the link args carry an\nApple `-target` triple with an OS version, rustc links now get the\nmatching `*_DEPLOYMENT_TARGET` env var, so rustc\u0027s `-m\u003cos\u003e-version-min`\nagrees with the triple and clang stops warning. A value from\n`--action_env`, `rustc_env` or the toolchain\u0027s `env` still wins, and\nnon-Apple targets are untouched.\n\nTests: a unit test for the triple parser, plus analysis tests for the\nlinkopt case and the precedence rules. The two linkopt tests skip on\nmacOS, because apple_support\u0027s toolchain appends its own `-target` after\nuser linkopts there, so the last triple is the toolchain\u0027s. I\u0027d be glad\nto swap that for a macOS-specific assertion if you prefer.\n\nVerified locally on Linux with bazelisk: 20 passed, 2 unrelated skips. I\ndon\u0027t have a Mac, so macOS coverage comes from CI."
    },
    {
      "commit": "402503f3a76df8ee8f04684866f5d9009cf80a7e",
      "tree": "77292e6bcad28d0d4fada5dade0e61133543f82e",
      "parents": [
        "87870459bd503bd2816225b66e78c3a6f4209f83"
      ],
      "author": {
        "name": "Randolf J.",
        "email": "me@jrandolf.com",
        "time": "Thu Sep 24 16:30:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 16:30:38 2026"
      },
      "message": "Build the coverage collector for the test execution platform (#4273)\n\nThe Rust coverage collector runs during test execution, but it is built\nfor the ordinary execution platform. When compilation and testing use\ndifferent platforms, Bazel can therefore try to run an incompatible\ncollector alongside the test.\n\nBuild the collector in Bazel\u0027s `test` execution group. An analysis\nregression assigns different compiler/test platform constraints on Bazel\n9: it fails with `cfg \u003d \"exec\"` and passes with this change. It also\nverifies compatibility with Bazel 7.4.1, where the test group retains\nthe legacy execution platform. The analysis fixture avoids building\nsynthetic-platform coverage metadata; a fresh coverage run with path\nmapping confirms that those binaries are not requested. Native macOS\ncoverage also passes and produces a nonempty LCOV report (one function\nand three covered lines).\n\nThis change only corrects the collector transition. It does not provide\ntarget-native llvm-cov/llvm-profdata selection for every\ncross-compilation configuration. Linux and Windows execution were not\ntested locally."
    },
    {
      "commit": "87870459bd503bd2816225b66e78c3a6f4209f83",
      "tree": "b62e6f1629854b1c34b66eb1a5e13d69db2f979d",
      "parents": [
        "377fe732e3ecf0c22c37c09a45ea0ffb979e56d9"
      ],
      "author": {
        "name": "u9g",
        "email": "jason.lernerman@livekit.io",
        "time": "Thu Sep 24 16:21:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 16:21:38 2026"
      },
      "message": "Added Rust 1.98.1 (#4280)\n\nAdds the known sha256s for Rust\n[1.98.1](https://blog.rust-lang.org/2026/09/03/Rust-1.98.1/), plus the\n2026-09-03 nightly, to `rust/private/known_shas.bzl`, and lists both in\n`util/fetch_shas`.\n\nWithout these, a project pinning 1.98.1 has no integrity for its\ntoolchain downloads, so they can\u0027t be served from Bazel\u0027s repository\ncache and are fetched from static.rust-lang.org on every fresh output\nbase.\n\n- Generated with `util/fetch_shas/fetch_shas.py`. Where the run\noverlapped existing entries (the 2026-08-20 nightly), it matched `main`\nexactly, and the diff only adds lines.\n- Spot-checked entries against the individual `.sha256` files on\nstatic.rust-lang.org (gnu, musl, darwin, windows, rust-src).\n- `rust/private/nightly_versions.bzl` is unchanged: the 2026-09-03\nnightly is still 1.100.0, which the 2026-08-20 entry already covers.\n- `DEFAULT_RUST_VERSION` is not bumped, since that also needs\n`util/repin_all.sh` across the workspaces. Happy to add it here if you\u0027d\nlike.\n\nThis change was prepared with AI assistance (Claude), per\nCONTRIBUTING.md."
    },
    {
      "commit": "377fe732e3ecf0c22c37c09a45ea0ffb979e56d9",
      "tree": "702cd6e8250e56cec54e521387ed89373a3fb357",
      "parents": [
        "e016c082820e896cc50d9b34bdf4fd453ffff1bb"
      ],
      "author": {
        "name": "Randolf J.",
        "email": "me@jrandolf.com",
        "time": "Thu Sep 24 15:14:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 15:14:12 2026"
      },
      "message": "rust: build lint runners for the test execution platform (#4278)\n\nBuild the Clippy and rustfmt test runner for Bazel\u0027s test execution\nplatform. Preserve its Windows executable suffix and select the\nmarker-path separator from the runner platform.\n\nThe owning lint and rustfmt suites pass on macOS with Bazel 7.4.1 and\n9.2.0. Current-Bazel analysis regressions choose a different test\nplatform, fail with the old transition, and pass with path mapping\nenabled. Older Bazel retains format checks while skipping the platform\ndistinction it cannot select through the default test toolchain. Windows\nexecution remains for CI."
    },
    {
      "commit": "e016c082820e896cc50d9b34bdf4fd453ffff1bb",
      "tree": "6138446ec31dc39875f070bdf690db96996c6d18",
      "parents": [
        "88f6b08714cb251638f5676e10ac121e972aa6a4"
      ],
      "author": {
        "name": "Jorge Gorbe Moya",
        "email": "slack@codemaniacs.com",
        "time": "Thu Sep 24 10:14:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 10:14:49 2026"
      },
      "message": "Prevent bindgen from filtering \"-O...\" flags. (#4269)\n\nOptimization level changes some preprocessor macros defined by the\ncompiler, which can cause some files to be parsed differently. For\nexample, this can cause warnings with `_FORTIFY_SOURCE`, which requires\noptimization and warns if it can\u0027t detect the right macros.\n\nFixes #4254."
    },
    {
      "commit": "88f6b08714cb251638f5676e10ac121e972aa6a4",
      "tree": "378273445ff29fadacb247070b84fe046f5ca34f",
      "parents": [
        "5d80db45e199755809b5742cb19db03e5bec0e12"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Thu Sep 17 09:11:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 09:11:47 2026"
      },
      "message": "Move coverage tooling to `//rust/coverage` (#4257)\n\nThis mirrors `rules_cc` in an effort to promote consistency among rules\nhttps://github.com/bazelbuild/rules_cc/pull/867"
    },
    {
      "commit": "5d80db45e199755809b5742cb19db03e5bec0e12",
      "tree": "73bc3eb4b3ae613770de9a1e79ba8484ce110b00",
      "parents": [
        "dd2b107baf21198f85c89989ce4a4d7c4004ba2e"
      ],
      "author": {
        "name": "tomatotomata",
        "email": "Ahmadalgaidy@hotmail.com",
        "time": "Wed Sep 16 21:12:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 21:12:08 2026"
      },
      "message": "feat(mdbook): allow default configuration (#4207)\n\n## Summary\n\n- make the `book` attribute optional for the `mdbook` rule\n- generate an empty `book.toml` so mdBook uses its documented default\nconfiguration\n- add a build test covering a book with only `src/SUMMARY.md` and\nchapter sources\n\nThis addresses #4194. The issue discussion asked for a PR that\ndemonstrates mdBook can run without a user-provided `book.toml`; an\nempty configuration parses to mdBook\u0027s defaults, including `src` as the\nsource directory. I kept the generated file in the package staging tree\nso the existing input mapping and `mdbook_server` provider continue to\nuse the same config path. Let me know what you think.\n\n## Validation\n\n- `git diff --check` passed\n- inspected mdBook 0.4.44 configuration defaults: an empty TOML file\nloads `src` as the source directory\n- Bazel execution was not available in this Windows environment, so the\nnew build target is left for the repository CI matrix\n\n---------\n\nSigned-off-by: ahmadalguydi \u003cahmadalgaidy@hotmail.com\u003e"
    },
    {
      "commit": "dd2b107baf21198f85c89989ce4a4d7c4004ba2e",
      "tree": "f1ecf4075965a52f815311d411961c8180e1e3bb",
      "parents": [
        "030e3d9473d08f8cd810f369cf0abda298e0c005"
      ],
      "author": {
        "name": "Keith Smiley",
        "email": "keithbsmiley@gmail.com",
        "time": "Tue Sep 15 20:02:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 20:02:58 2026"
      },
      "message": "Remove unused _grep_includes attribute (#4261)\n\nThis was required for some cc* API before bazel 6.3:\n\n\nhttps://github.com/bazel-contrib/bazel_features/blob/700eab729c4fb2c7c316e3d83fd3dee50e8cbf71/features.bzl#L21-L23\n\nIt is unused in this repo since\nhttps://github.com/bazelbuild/rules_rust/pull/2072"
    },
    {
      "commit": "030e3d9473d08f8cd810f369cf0abda298e0c005",
      "tree": "dcf23e2008fb6c4ab17e19ac7ce29f90dfb9d5ae",
      "parents": [
        "1cca8bbc03777fdcf96de269bcca92efb3014cf0"
      ],
      "author": {
        "name": "Keith Smiley",
        "email": "keithbsmiley@gmail.com",
        "time": "Tue Sep 15 17:41:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 17:41:29 2026"
      },
      "message": "Move off deprecated grep-includes alias (#4259)\n\nThis script in bazel has always been an invalid no-op, but this alias is\ndeprecated and it should come from rules_cc instead"
    },
    {
      "commit": "1cca8bbc03777fdcf96de269bcca92efb3014cf0",
      "tree": "46549c1c3d0453fb853af7e41b4e63654e597002",
      "parents": [
        "3f52382eebb3fb6330af30bf8f1daa914c006934"
      ],
      "author": {
        "name": "Max Kanat-Alexander",
        "email": "avatraxiom@gmail.com",
        "time": "Mon Sep 14 05:50:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 05:50:16 2026"
      },
      "message": "Allow lint configuration on PyO3 extensions (#4256)\n\n`pyo3_extension` forwards its remaining `**kwargs` to both\n`rust_shared_library` and `py_pyo3_library`. As a result, the valid Rust\n`lint_config` attribute reaches the generated Python target and is\nrejected during analysis.\n\nMake `lint_config` an explicit argument and forward it only to the Rust\nshared library. The existing PyO3 integration test now supplies a\n`rust_lint_config`, covering both attribute acceptance and successful\nextension compilation/import.\n\nFixes #4255.\n\nValidation:\n\n- `bazelisk test //...` from `extensions/pyo3` (20 passed, 3\nplatform-specific tests skipped)\n- Buildifier formatting and lint checks on the changed Starlark and\nBUILD files"
    },
    {
      "commit": "3f52382eebb3fb6330af30bf8f1daa914c006934",
      "tree": "0c8802fcc7bae138451c5234056b58d51d09c7c8",
      "parents": [
        "51f304215a885d2e7d86e7d2fa04bca8a4c05aad"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Mon Sep 07 14:48:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 14:48:23 2026"
      },
      "message": "Remove use of run_shell (#4252)\n\nAvoiding the use of shell on Windows"
    },
    {
      "commit": "51f304215a885d2e7d86e7d2fa04bca8a4c05aad",
      "tree": "958809b0e8db66c60408eedeb835c396b54c68b1",
      "parents": [
        "a2df978962d26028897b72380ba2075cc5272b10"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Wed Sep 02 17:05:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 17:05:47 2026"
      },
      "message": "Add regression testing for override_target annotations (#4248)\n\nThis is a followup to https://github.com/bazelbuild/rules_rust/pull/4226"
    },
    {
      "commit": "a2df978962d26028897b72380ba2075cc5272b10",
      "tree": "9abc46d81263d6bfffb41a7d3740d999e07010c6",
      "parents": [
        "6a80a5db72ba306e97dcb42c179993452a6baa64"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Fri Aug 28 19:37:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 19:37:08 2026"
      },
      "message": "Release 0.74.0 (#4245)"
    },
    {
      "commit": "6a80a5db72ba306e97dcb42c179993452a6baa64",
      "tree": "7fbaa539f90848e808c3feb2427884967f596376",
      "parents": [
        "fcae4717debfd8ed4822864eed82969467f9e6e7"
      ],
      "author": {
        "name": "alivenets",
        "email": "a.livenets@gmail.com",
        "time": "Fri Aug 28 19:12:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 19:12:00 2026"
      },
      "message": "Fix custom build script override key names (#4226)\n\nThis PR fixes crate.annotation allowing to configure custom build\nscript.\n\nSigned-off-by: Alexander Livenets \u003ca.livenets@gmail.com\u003e"
    },
    {
      "commit": "fcae4717debfd8ed4822864eed82969467f9e6e7",
      "tree": "3f25ecef13c857ba83debd345e2f8c2da5ee6733",
      "parents": [
        "979dea2a0cff04eff22d1b80398194a6c7a620c3"
      ],
      "author": {
        "name": "Chris Wood",
        "email": "45291962+cpcwood@users.noreply.github.com",
        "time": "Fri Aug 28 18:16:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 18:16:28 2026"
      },
      "message": "Remap the exec root out of build script rustflags (#4202)\n\nFixes issue: https://github.com/bazelbuild/rules_rust/issues/4201\n\nBuild scripts that invoke `rustc` themselves bake the exec root into\ntheir output, because `cargo_build_script` does not include\n`--remap-path-prefix` in the `CARGO_ENCODED_RUSTFLAGS` it passes to\nthem.\n\n`rustix`\u0027s `build.rs` feature probe pipes source to `rustc` on stdin, so\nthe working directory is the only path input rustc has, and it folds\nthat into the `--emit\u003dmetadata` output written to `$OUT_DIR`. That is a\ndeclared build-script output, hashed into the cache key of every\ndependent crate, so the same source built at two different absolute\npaths produces different cache keys for the whole dependent chain.\n\n`construct_arguments()` already applies `--remap-path-prefix` to every\nrustc invocation the ruleset constructs, *\"For determinism to help with\nbuild distribution and such\"*. Build scripts reach rustc through\n`CARGO_ENCODED_RUSTFLAGS` rather than `construct_arguments()`, so they\nnever inherited it. `rustdoc` is the only other exception and is\ndocumented as one.\n\nReproduction, with a Bazel-free minimal check and a four-workspace Bazel\nproof:\nhttps://github.com/cpcwood/bazel-rules-rust-rustix-cache-bust-demo\n\n```\nprobe output\n  unpatched  e27190bc...  01079d73...   differ\n  patched    7e887e12...  7e887e12...   identical\n\nRustc actions re-executed at a second path\n  unpatched  3   (rustix, //:mylib, //:myapp)\n  patched    0\n```\n\nVerified on `aarch64-darwin` and `ubuntu-latest`. Hash values are\nplatform-specific.\n\nCo-authored-by: UebelAndre \u003cgithub@uebelandre.com\u003e"
    },
    {
      "commit": "979dea2a0cff04eff22d1b80398194a6c7a620c3",
      "tree": "cd367cdb55a69f119deea5f02a760c722dfe62e0",
      "parents": [
        "7f9fefce61350b98e9b6040a605354872753e9e2"
      ],
      "author": {
        "name": "Tyler Breisacher",
        "email": "tyler.breisacher@flyzipline.com",
        "time": "Fri Aug 28 18:14:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 18:14:48 2026"
      },
      "message": "flycheck: Fix label for source file (#4238)\n\nFor example, if you have a BUILD file at `my/cool/project/BUILD`, and a\nsource file at `my/cool/project/src/utils/lib.rs`, the label for that\nsource file should be `//my/cool/project:src/utils/lib.rs` not\n`//my/cool/project:lib.rs`"
    },
    {
      "commit": "7f9fefce61350b98e9b6040a605354872753e9e2",
      "tree": "60f828407379d8b5e34851297c11f66c425c34c1",
      "parents": [
        "9ec97bd8ec3b7e335184702343f5fcfe35d9926c"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Fri Aug 28 17:32:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 17:32:31 2026"
      },
      "message": "Reduce size of cargo-bazel-lock.json (#4133)\n\nThis is achieved by avoiding unnecessary serialization."
    },
    {
      "commit": "9ec97bd8ec3b7e335184702343f5fcfe35d9926c",
      "tree": "430911dbf88ef687315c3c1c09052e8d0ff33fdb",
      "parents": [
        "7e06192bde0abd252693b9a4314a7e0ac7e2dfa0"
      ],
      "author": {
        "name": "Tyler Breisacher",
        "email": "tyler.breisacher@flyzipline.com",
        "time": "Fri Aug 28 17:18:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 17:18:37 2026"
      },
      "message": "Fix broken links to rust-analyzer docs (#4190)\n\nCo-authored-by: UebelAndre \u003cgithub@uebelandre.com\u003e"
    },
    {
      "commit": "7e06192bde0abd252693b9a4314a7e0ac7e2dfa0",
      "tree": "bcba1401de3ef5c1b60b17c449b57d50f8a44faa",
      "parents": [
        "1e9b22891ea88a169fb5857038358a579ef280a3"
      ],
      "author": {
        "name": "Maximilian Hils",
        "email": "github@maximilianhils.com",
        "time": "Fri Aug 28 15:34:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 15:34:02 2026"
      },
      "message": "rust_bindgen_library: forward more attributes (#4246)\n\nThis PR makes `rust_bindgen_library` work with `compatible_with` and\n`restricted_to` kwargs.\n\nCo-authored-by: Krasimir Georgiev \u003ckrasimir@google.com\u003e"
    },
    {
      "commit": "1e9b22891ea88a169fb5857038358a579ef280a3",
      "tree": "628636d83e6f1e7798278254d1276e3034b59172",
      "parents": [
        "85f7bd21df65c8ed58d5d2c5c6892bd356fb7c33"
      ],
      "author": {
        "name": "Corentin Kerisit",
        "email": "corentin.kerisit@gmail.com",
        "time": "Fri Aug 28 14:55:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 14:55:46 2026"
      },
      "message": "Fix clang-cl paths in Cargo build script flags (#4247)\n\nUpstream of what was required to build codex-cli for Windows MSVC using\nwindows_support and hermetic-llvm new hermetic Windows MSVC hermetic\ncross link env.\n\n## Summary\n\n- rewrite execroot-relative clang-cl `/imsvc` and slash `/LIBPATH` paths\nexported to Cargo build scripts\n- rewrite VFS overlay paths, including arguments forwarded through\nclang-cl\u0027s `/clang:` wrapper\n- preserve absolute paths and restore `/clang:` after applying the\nexisting path-rewrite passes\n\n## Motivation\n\n`cargo_build_script` runs build scripts from their manifest directory,\nwhile C/C++ toolchain arguments are commonly relative to Bazel\u0027s\nexecroot. `rules_rust` already prefixes recognized relative paths with\n`${pwd}`, which the build-script runner expands to the execroot.\n\nclang-cl toolchains can express the same inputs with `/imsvc`,\n`/LIBPATH`, VFS-overlay flags, and `/clang:`-forwarded arguments. Those\nspellings bypassed the existing passes, leaving paths relative to the\nwrong working directory.\n\nThis was reproduced while cross-compiling the real `openai/codex` CLI to\n`x86_64-pc-windows-msvc` with Linux remote execution. A `tree-sitter`\nCargo build script received execroot-relative `/imsvc` and\n`/clang:-ivfsoverlay` arguments and clang-cl could not open the overlay.\n\nAssisted-by: OpenAI Codex. The contributor reviewed and owns the\nsubmitted change."
    },
    {
      "commit": "85f7bd21df65c8ed58d5d2c5c6892bd356fb7c33",
      "tree": "5d77f7f2ee9495e9a94afca065ab9f0d94785430",
      "parents": [
        "a18fffad32d83729af483cb95e64cc53378aad42"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Fri Aug 28 14:54:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 14:54:18 2026"
      },
      "message": "Fix rust-analyzer helix config (#4199)\n\ncloses https://github.com/bazelbuild/rules_rust/issues/4197"
    },
    {
      "commit": "a18fffad32d83729af483cb95e64cc53378aad42",
      "tree": "c1df0409cfa524a81d15dafa50ce82a4f87163d5",
      "parents": [
        "9c9204ea49d69fc243a789285fa330f351c8a52e"
      ],
      "author": {
        "name": "Michael Hackner",
        "email": "mhackner@gmail.com",
        "time": "Fri Aug 28 14:10:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 14:10:46 2026"
      },
      "message": "Don\u0027t delete CARGO_MANIFEST_DIR entries that shadow execroot entries (#4236)\n\nWhen `experimental_symlink_execroot` is enabled, the build script runner\nsymlinks every top-level execroot entry into CARGO_MANIFEST_DIR and\nremoves those symlinks once the script has run. `symlink_if_not_exists`\ndeliberately tolerates an entry that is already there — it belongs to\nthe manifest dir, not to the runner — but the path was recorded for\ncleanup regardless, so the runner went on to delete something it never\ncreated.\n\nA crate whose manifest dir contains a directory named like an execroot\nentry (`src` is enough, in any workspace with a top-level `src/`) fails\nthe action outright, because `remove_symlink` is `remove_file` on Unix\nand returns EISDIR. A colliding file is worse: the removal succeeds and\nsilently drops the crate\u0027s own file from the manifest dir.\n\nCo-authored-by: Krasimir Georgiev \u003ckrasimir@google.com\u003e"
    },
    {
      "commit": "9c9204ea49d69fc243a789285fa330f351c8a52e",
      "tree": "3b1efef7d2bee015d7d6455ed3c1aecd943deea6",
      "parents": [
        "9e8445f3d783e77afa8f3a0104a45d225a4ba79e"
      ],
      "author": {
        "name": "beef",
        "email": "ent3rm4n@gmail.com",
        "time": "Fri Aug 28 14:07:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 14:07:55 2026"
      },
      "message": "fix external crate paths for gen_rust_project (#4200)\n\nThis addresses part 1 of #4057"
    },
    {
      "commit": "9e8445f3d783e77afa8f3a0104a45d225a4ba79e",
      "tree": "a7d049974269a0075438974e2f651d146d5d779d",
      "parents": [
        "35501366a2345fc02a5bb25a5ad700a4526e5f55"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Fri Aug 28 08:41:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 08:41:05 2026"
      },
      "message": "Added Rust 1.98.0 (#4244)\n\nhttps://blog.rust-lang.org/2026/08/20/Rust-1.98.0/"
    },
    {
      "commit": "35501366a2345fc02a5bb25a5ad700a4526e5f55",
      "tree": "abfc5bbb084032c332e046819624de2a530b318d",
      "parents": [
        "a4eb36a92010d110070a449ee30865f672cc82c1"
      ],
      "author": {
        "name": "Régis Desgroppes",
        "email": "rdesgroppes@gmail.com",
        "time": "Thu Aug 27 23:15:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 23:15:23 2026"
      },
      "message": "Derive `dlltool` path from the linker for Windows-GNU builds (#4206)\n\n`rustc` on Windows-GNU shells out to `dlltool` to synthesize import\nlibraries: for `#[link(... kind \u003d \"raw-dylib\")]` declarations in any\ncrate (`windows-sys` 0.61+ is the common case), and for the `*.dll.a`\ncompanion that `cdylib` crates emit alongside their `.dll`.\n\n`cc_toolchain` has no action/tool slot for `dlltool`, since `gcc` used\nas a linker runs it internally, but `rustc` drives the linker directly\nand so needs an explicit `--codegen dlltool\u003d` pointer, which previously\nhad to be supplied by hand via `extra_rustc_flags` on every target.\n\nEvery MinGW toolchain, whether a native Windows distribution (winlibs,\nMSYS2 mingw64, llvm-mingw) or a Unix cross toolchain, ships `dlltool`\nright next to the linker with the same naming convention (`.exe`/`.EXE`\nsuffix or none), so derive its path from the `cc_toolchain`\u0027s own linker\ntool path instead.\n\nA user-supplied `-Cdlltool\u003d` via `extra_rustc_flags` still wins, since\n`rustc` honors the last `-C\u003ckey\u003e\u003d` for a given key.\n\nThis adds no new `constraint_value` nor `config_setting` and does not\naffect toolchain auto-registration or resolution: `target_abi` is\nalready parsed from the target triple on the resolved `rust_toolchain`,\nthe same field `portable_link_flags` and `symlink_for_ambiguous_lib` key\noff of a few lines below.\n\nAssisted-by: Claude"
    },
    {
      "commit": "a4eb36a92010d110070a449ee30865f672cc82c1",
      "tree": "7df27095e1365d3cce63220f7e75b8e652cffd5a",
      "parents": [
        "21efd84ef1a6c64331f36cbfccc5299e19ef56e0"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Thu Aug 27 15:04:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 15:04:32 2026"
      },
      "message": "Add additional tests for aliases attribute (#4242)\n\ncloses https://github.com/bazelbuild/rules_rust/issues/3692"
    },
    {
      "commit": "21efd84ef1a6c64331f36cbfccc5299e19ef56e0",
      "tree": "b3f915868c55bf65fb06e1e0835f3d9d2ffb590a",
      "parents": [
        "9290bb7f4dea37e3a794089e5cab112af9143706"
      ],
      "author": {
        "name": "Krasimir Georgiev",
        "email": "krasimir@google.com",
        "time": "Thu Aug 27 13:39:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 13:39:02 2026"
      },
      "message": "Support `root_path` attribute in `cargo_build_script` (#4243)\n\nFollowing https://github.com/bazelbuild/rules_rust/pull/4142 which added\n`root_path` to Rust compilation rules, this change adds it to the\n`cargo_build_script` macro."
    },
    {
      "commit": "9290bb7f4dea37e3a794089e5cab112af9143706",
      "tree": "4b88b0fcf7dade6ec08996987fea6c31f06975e4",
      "parents": [
        "a113357b1139c85de0298f9e748b29c65fa0b114"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Thu Aug 27 13:37:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 13:37:40 2026"
      },
      "message": "Support passing args to rustfmt (#4241)\n\nThis implementation was inspired by @dougthor42 for\nhttps://github.com/bazelbuild/rules_rust/issues/4188, special thanks!\n\ncloses https://github.com/bazelbuild/rules_rust/issues/4188\ncloses https://github.com/bazelbuild/rules_rust/pull/4189"
    },
    {
      "commit": "a113357b1139c85de0298f9e748b29c65fa0b114",
      "tree": "fc5133d527d433bb7d5b13dd4fac57fd72a94132",
      "parents": [
        "25963d4df306557a8c6ce52bde28eebc5238f0e0"
      ],
      "author": {
        "name": "Krasimir Georgiev",
        "email": "krasimir@google.com",
        "time": "Wed Aug 26 10:22:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 10:22:44 2026"
      },
      "message": "use crate_info.owner for linker inputs, if available (#4177)\n\nFixes an inconsistency where we use crate_info.owner as the owner of\nRust actions, while we used ctx.label as the owner of the corresponding\nC++ linker inputs. Most of the time, these are the same, but we\u0027ve got a\nuse case in rust proto integration where we wanna be able to customize\nthe owner of the C++ infos (so that these can be distinguished from the\nC++ infos of the standard c++ proto bindings)."
    },
    {
      "commit": "25963d4df306557a8c6ce52bde28eebc5238f0e0",
      "tree": "552b38ec8360211268a9da1a95b3c3071d4d68fc",
      "parents": [
        "61786d54bc91869f0b80260f6b84ab96eea91ee8"
      ],
      "author": {
        "name": "Xiaoyi",
        "email": "ashi009@users.noreply.github.com",
        "time": "Tue Aug 25 21:41:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 21:41:25 2026"
      },
      "message": "Fix aliased crate handling in aliases attribute (#3693)\n\n## Description\n\nThis PR fixes an issue where `crate_universe` configuration using\n`default_alias_rule_bzl` would fail when processing aliased crates in\nthe aliases() function.\n\n## Problem\n\nWhen using `default_alias_rule_bzl` in crate_universe configuration,\nBazel fails to build targets that depend on aliased crates. The error\noccurs because the current logic assumes a direct correspondence between\ntarget labels (`k.label`) and their crate info owners\n(`crate_info.owner`), but for aliased targets, `crate_info.owner` points\nto the original target, not the alias label.\n\n## Solution\n\nThis change updates the alias resolution logic in\n`rust/private/rustc.bzl` to correctly handle aliased crates by:\n\n1. Checking if a target has `rust_common.crate_info` \n2. Using `crate_info.owner` if available, otherwise falling back to\n`k.label`\n3. Ensuring consistent alias generation for both regular and aliased\ntargets\n\n## Code Changes\n\n**Modified files:**\n- `rust/private/rustc.bzl`: Updated alias processing logic in\n`collect_deps` function\n\n**Before:**\n```starlark\naliases \u003d {k.label: v for k, v in aliases.items()}\n```\n\n**After:**\n```starlark\naliases \u003d {\n    k[rust_common.crate_info].owner if rust_common.crate_info in k else k.label: v\n    for k, v in aliases.items()\n}\n```\n\n## Testing\n\nThis fix enables the use of `default_alias_rule_bzl` functionality\nwithout breaking alias generation for crates that have aliased targets.\n\n## Related Issues\n\nFixes #3692\n\n## Checklist\n\n- [x] Code follows the existing style and patterns  \n- [x] No breaking changes to existing functionality\n- [x] Maintains backward compatibility\n- [x] Issue was created and linked\n\n---\n\n**Note**: This change is essential for users who want to leverage\n`default_alias_rule_bzl` with crate_universe to integrate with existing\nBazel rule sets like `@rules_cc`."
    },
    {
      "commit": "61786d54bc91869f0b80260f6b84ab96eea91ee8",
      "tree": "bb7dab65803ae17899ab4f4133b39af11c0fbe6c",
      "parents": [
        "f5dff0d9485711ad3cbae089a09491f78b843039"
      ],
      "author": {
        "name": "Jonathan Bunton",
        "email": "47643825+buntonj@users.noreply.github.com",
        "time": "Tue Aug 25 21:21:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 21:21:06 2026"
      },
      "message": "Add support for Rust ABI dynamic libraries (#4179)\n\nCurrently, there is not explicit stable Rust ABI for dynamic libraries,\nbut Rust library may still be compiled as one. This can be useful if a\nlarge project wants to compile some core portion of its code as a shared\nobject that can be dynamically linked against several different\nbinaries. Bevy, for example, offers this capability as a way to allow\ncustomers of Bevy to tweak their own code without having to statically\nre-link the central Bevy engine code.\n\nThis PR exposes the Rust ABI dylib capabilities with a new rule,\n`rust_dylib_library`. For clarity, it also creates a\n`rust_cylib_library` rule, and updates methods to this name, with\n`rust_shared_library` just aliasing to the `rust_cdylib_library`\nimplementation.\n\nBuilding a Rust ABI dylib may cause the standard library to be linked\ndynamically against the generated dylib. When depended on, the dynamic\nstandard library needs to be included to get the binary to execute.\nCurrently, `rules_rust` offers this as a toolchain-level flag, but\napplying a toolchain transition at the dylib\u0027s interface imposes a new\ntoolchain on its deps, which then forces any upstream `rlibs`, for\nexample, to recompile.\n\nTo fix this, this PR exposes a `link_std_dylib` attr to `rust_binary`,\n`rust_dylib_library` and `rust_test` to allow these targets to\noptionally bundle themselves with the dynamically-linked stdlib.\n\n---------\n\nCo-authored-by: UebelAndre \u003cgithub@uebelandre.com\u003e"
    },
    {
      "commit": "f5dff0d9485711ad3cbae089a09491f78b843039",
      "tree": "c507a3bce980c38dce38faa73a6d091426aaaba6",
      "parents": [
        "7c229c22fad826c002e03bcef4ef64fbd6ac4ba3"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Tue Aug 25 08:05:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 08:05:31 2026"
      },
      "message": "Ignore existing buildifier configs for crate_universe vendoring (#4205)\n\ncloses https://github.com/bazelbuild/rules_rust/issues/4125"
    },
    {
      "commit": "7c229c22fad826c002e03bcef4ef64fbd6ac4ba3",
      "tree": "35fd0b283d0af50a0d12ed2af362d06187768e0b",
      "parents": [
        "091903bb7a1fc60336e05a165ba8531cb87a452a"
      ],
      "author": {
        "name": "Kirill Timofeev",
        "email": "timofeev.kirill.a@gmail.com",
        "time": "Mon Aug 24 22:14:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 22:14:00 2026"
      },
      "message": "fix: prefix pwd for compiler response file paths (#4216)\n\nOur prebuilt `clang` ships with a compiler response file containing\nmultiple `-D` switches.\nWhile `cc_toolchain` already handles passing this file in our main\nbuild, we also need to pass it to `clang` invocations made inside\n`Cargo`.\n\nPassing the response file directly is much simpler and more robust than\nreading the file and injecting its contents into the `CXXFLAGS` list.\n\nOnly the path to the response file is fixed. Its contents are left\nuntouched and may be not resolved if contains execroot-relative paths. I\nbelieve it is still an positive improvement.\n\nTested:\n```\nbazel test //cargo/tests/cargo_build_script/cc_args_and_env:all\n```"
    },
    {
      "commit": "091903bb7a1fc60336e05a165ba8531cb87a452a",
      "tree": "024565a5bd5dfa08611ba12820858b0c7082cb94",
      "parents": [
        "fbb2779f3717c905211e7e9be36aa6be52305a91"
      ],
      "author": {
        "name": "Ricardo Delfin",
        "email": "ricardo.delfin.garcia@gmail.com",
        "time": "Mon Aug 24 22:07:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 22:07:58 2026"
      },
      "message": "[crate_universe] Implemented logic for having splicer follow .bazelignore (#4219)\n\nCurrently the splicer simply has a manually created list of\nfiles/folders is skips over. This makes it hard for users to override\nthis list, add new items, or configure it in any way. This fixes the\nissue by parsing the respective files and matching against them when\nsplicing.\n\n This fixes #3590"
    },
    {
      "commit": "fbb2779f3717c905211e7e9be36aa6be52305a91",
      "tree": "0ed77e85e6dd7acebfca9c6738897f3af75d49c0",
      "parents": [
        "d210177b6ddcfdf980303fb31ecbbb8320ff2947"
      ],
      "author": {
        "name": "Xeonacid",
        "email": "h.dwwwwww@gmail.com",
        "time": "Mon Aug 24 22:03:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 22:03:27 2026"
      },
      "message": "Add RISC-V Linux host toolchain support (#4237)\n\nriscv64gc-unknown-linux-gnu is Rust tier 2 with host tools\n(https://doc.rust-lang.org/rustc/platform-support/riscv64gc-unknown-linux-gnu.html).\nrules_rust already listed it as a T2 target (PR #3487) but with\nhost_tools \u003d False, and it was missing from the default exec-triple map\nand from get_host_triple(). Native builds on RISC-V Linux then fail\ntoolchain resolution with:\n\nNo matching toolchains found for types\n@@rules_rust+//rust:toolchain_type\n\nRegister a rust_linux_riscv64 repository set alongside the existing\nLinux aarch64/x86_64/s390x/ppc64le hosts, mark the triple as having host\ntools, and teach get_host_triple() to accept repository_ctx.os.arch \u003d\u003d\n\"riscv64\". The host triple is riscv64gc-unknown-linux-gnu (G + C), not\nthe bare riscv64-unknown-linux-gnu name."
    },
    {
      "commit": "d210177b6ddcfdf980303fb31ecbbb8320ff2947",
      "tree": "dc55d5ccea91a068be73fbae6755cd8b43f7005f",
      "parents": [
        "e22086c0ad4575b81d92979a90d353095a516463"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Mon Aug 24 14:37:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 14:37:08 2026"
      },
      "message": "Updated granularity of docs summary (#4195)\n\nI\u0027ve done a pass on both starlark code comments and the mdbook page to\ntry and improve search-ability within the book. The general direction of\nthis change is to fix outdated starlark docs and then add more sub-pages\nto surface things in `SUMMARY.md` so they pop out at a glance."
    },
    {
      "commit": "e22086c0ad4575b81d92979a90d353095a516463",
      "tree": "ee0757ba4b5f754bd2a78e03532856ffbd8afca9",
      "parents": [
        "ed7afd2fc3fa5a3d8b8d03240b75501f0314c2d0"
      ],
      "author": {
        "name": "Corentin Kerisit",
        "email": "corentin.kerisit@gmail.com",
        "time": "Wed Aug 19 16:51:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 16:51:18 2026"
      },
      "message": "Preserve native final-link requirements through rust_static_library (#4232)\n\n## Summary\n\nPreserve native final-link requirements when a `rust_static_library` is\nconsumed by C or C++.\n\nThe existing `CcInfo` construction correctly avoids propagating\ndependency static archives that rustc has already bundled into the Rust\nstaticlib. However, it rebuilds each dependency `LinkerInput` using only\ndynamic libraries, which also drops `user_link_flags` and\n`additional_inputs`. Those values cannot be encoded in a `.a` archive\nand are still required by the eventual foreign-language final link.\n\n## Rustc behavior being ported\n\nThis change maps rustc\u0027s staticlib orchestration onto Bazel\u0027s\nlinking-provider model rather than inventing new linkage behavior.\n\nAt rust revision\n[`67854e511de21d881bb16426996cd4259d44aa2e`](https://github.com/rust-lang/rust/commit/67854e511de21d881bb16426996cd4259d44aa2e):\n\n-\n[`link_staticlib`](https://github.com/rust-lang/rust/blob/67854e511de21d881bb16426996cd4259d44aa2e/compiler/rustc_codegen_ssa/src/back/link.rs#L745-L755)\ndescribes a staticlib as an archive containing upstream objects and\nbundled native libraries, while noting that dynamic libraries cannot be\nlinked into the archive.\n- The implementation [adds upstream Rust archives and bundled native\narchives](https://github.com/rust-lang/rust/blob/67854e511de21d881bb16426996cd4259d44aa2e/compiler/rustc_codegen_ssa/src/back/link.rs#L778-L830),\nthen [collects native requirements from upstream crates and the current\ncrate](https://github.com/rust-lang/rust/blob/67854e511de21d881bb16426996cd4259d44aa2e/compiler/rustc_codegen_ssa/src/back/link.rs#L870-L898).\n-\n[`print_native_static_libs`](https://github.com/rust-lang/rust/blob/67854e511de21d881bb16426996cd4259d44aa2e/compiler/rustc_codegen_ssa/src/back/link.rs#L1973-L2063)\nconverts the requirements that were not bundled into\nplatform-appropriate final-link arguments, including native\ndynamic/unspecified libraries, unbundled static libraries, frameworks,\nand Rust dylibs.\n\nThe Rust Reference describes the same contract: a `staticlib` contains\nlocal and upstream Rust code, but its system and dynamic dependencies\nmust be supplied when another linker consumes it.\n`--print\u003dnative-static-libs` exists to communicate those requirements:\nhttps://doc.rust-lang.org/reference/linkage.html#static-and-dynamic-runtimes\n\nRust tests this behavior directly:\n\n-\n[`print-native-static-libs`](https://github.com/rust-lang/rust/blob/67854e511de21d881bb16426996cd4259d44aa2e/tests/run-make/print-native-static-libs/rmake.rs#L17-L67)\nbuilds an upstream rlib and a staticlib, then asserts that\n`--print\u003dnative-static-libs` contains native requirements from both the\ncurrent crate and the transitive crate, including command-line `-l`\narguments.\n-\n[`staticlib-dylib-linkage`](https://github.com/rust-lang/rust/blob/67854e511de21d881bb16426996cd4259d44aa2e/tests/run-make/staticlib-dylib-linkage/rmake.rs#L14-L35)\ntakes the emitted native link arguments, passes them to a C compiler\ntogether with the Rust staticlib, and runs the resulting executable.\n\n## Mapping to Bazel\n\nRustc and Bazel represent the same boundary differently:\n\n| rustc staticlib behavior | rules_rust/Bazel representation |\n| --- | --- |\n| Bundle upstream Rust objects and bundled native static libraries |\nKeep dependency static `LibraryToLink` values out of the exported\n`CcInfo`; they are already in the Rust archive |\n| Leave dynamic/native system requirements for the foreign final linker\n| Preserve dynamic `LibraryToLink` values and dependency\n`user_link_flags` |\n| Return final-link requirements through `--print\u003dnative-static-libs` |\nReturn them transitively through the `rust_static_library` target\u0027s\n`CcInfo` |\n| No equivalent filesystem dependency model | Preserve Bazel\n`additional_inputs`, such as linker scripts, so the final action remains\nhermetic |\n\nBazel defines `LinkerInput` as the libraries, flags, and other files\npassed to a linker, and defines `additional_linker_inputs` as files\nrequired specifically by the link action:\nhttps://bazel.build/rules/lib/builtins/LinkerInput and\nhttps://bazel.build/reference/be/c-cpp\n\nThe implementation preserves the complete `user_link_flags` field\ninstead of parsing only `-l` flags. Rustc has semantic `NativeLibKind`\ninformation when producing its list; rules_rust receives platform- and\ntoolchain-encoded Bazel linker flags. Parsing those strings here would\nduplicate C++ toolchain behavior and mishandle constructs such as\nframeworks, MSVC options, library search paths, and linker scripts.\n\n## Root cause\n\n`_collect_nonstatic_linker_inputs` was shared by `staticlib` and\n`cdylib`. It reconstructed dependency `LinkerInput` values with only\nnon-static libraries:\n\n- Dropping static `LibraryToLink` values is correct for both outputs\nbecause those archives were consumed while creating the Rust output.\n- Dropping `user_link_flags` and `additional_inputs` is correct for\n`cdylib`, whose final link has already consumed them.\n- Dropping them for `staticlib` is incorrect because archive creation is\nnot the foreign final link.\n\nConsequently, a native dependency such as `cc_library(linkopts \u003d\n[\"-lresolv\"])` could be used while compiling a Rust staticlib, but its\nrequirement disappeared from the `CcInfo` seen by a downstream\n`cc_binary` or `cc_test`.\n\n## Change\n\n- Continue propagating dependency dynamic libraries.\n- Preserve dependency `user_link_flags` and `additional_inputs` for\n`staticlib` only.\n- Continue excluding dependency static archives already bundled into the\nRust staticlib.\n- Keep `cdylib` propagation unchanged.\n- Add an analysis regression covering flags, additional inputs, and\nexclusion of the bundled static archive.\n- Add a Linux end-to-end regression using `libresolv`.\n\n## Proof\n\nOn current upstream `main`, with only the new analysis fixture applied,\nthe regression fails because the final `CppLink` action contains neither\n`-L/doesnotexist` nor `empty.so`. With the implementation change\napplied, the same test passes and confirms that the dependency static\narchive remains excluded.\n\nThe Linux regression is:\n\n```text\ncc_library(linkopts \u003d [\"-lresolv\"])\n        -\u003e rust_static_library(link_deps \u003d [...])\n        -\u003e cc_test\n```\n\nThe Rust staticlib exports a function returning the address of\n`ns_initparse`; the C++ test references that function, forcing the\nrelevant Rust object out of the archive.\n\nThe same production change was additionally tested in the hermeticbuild\nfork with its hermetic LLVM C/C++ toolchain. With the fixture but\nwithout the fix, the Linux x86_64 link fails:\n\n```text\nld.lld: error: undefined symbol: ns_initparse\nreferenced by ... in archive libstaticlib_uses_resolver_linkopts.a\n```\n\nThe archive contains `U ns_initparse`, confirming that the system\ndependency was not bundled. With the fix, the final C++ link contains\n`-lresolv`, succeeds, and produces an x86_64 ELF recording:\n\n```text\nNEEDED Shared library: [libresolv.so.2]\nU ns_initparse\n```\n\nThe undefined dynamic symbol is expected because `libresolv.so.2` is now\nrecorded as the provider that resolves it at load time.\n\n## Tests\n\n```shell\nbazel test //test/unit/linker_inputs_propagation:linker_inputs_propagation_test_suite\n```\n\nBaseline with test fixture only: the new regression fails. With this\nchange: two analysis tests pass and four platform-incompatible tests are\nskipped on macOS.\n\nAdditional Linux x86_64 cross-link verification in the hermeticbuild\nfork:\n\n```shell\nbazel build --config\u003dremote \\\n  --extra_toolchains\u003d@llvm//toolchain:all \\\n  --platforms\u003d@llvm//platforms:linux_x86_64 \\\n  //test/linker_inputs_propagation:depends_on_resolver_linkopts_via_staticlib\n```\n\nThe Linux executable was cross-linked from a macOS host and inspected as\nan ELF; it was not executed on that host."
    },
    {
      "commit": "ed7afd2fc3fa5a3d8b8d03240b75501f0314c2d0",
      "tree": "b2166b5503fe38c3f68ed130133b41bf864d144f",
      "parents": [
        "df8c833da61ec3098e928e2e37d2eacadc6215fc"
      ],
      "author": {
        "name": "Marvin Hansen",
        "email": "marvin.hansen@gmail.com",
        "time": "Wed Aug 19 15:42:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 15:42:49 2026"
      },
      "message": "fix(rustdoc): link doc tests against the cc_toolchain\u0027s runtime libs (#4220)\n\n`rust_doc_test` fails to link on any cc_toolchain that supplies its\nC++/unwind\nruntime via `static_runtime_lib` (i.e. enables\n`static_link_cpp_runtimes`).\nThis happens when cross compiling with the hermetic-LLVM e.g.:\n\n```\nld.lld: error: undefined symbol: _Unwind_Resume\n\u003e\u003e\u003e referenced by alloc.rs:0 ... liballoc-*.rlib\n... and the rest of the _Unwind_* family\n```\n\n`rust_library` / `rust_binary` / `rust_test` are fine. Only doc tests\nfail.\n\n## Evidence\n\nThe first commit adds only a test to reproduce the issue by extending\nthe\nfixture from #3741 (which already declares a cc_toolchain with\n`static_runtime_lib \u003d \":dummy.a\"`); the second commit adds the fix:\n\n| commit |\n`//test/unit/cc_toolchain_runtime_lib:runtime_libs_test/doc_test` |\n|---|---|\n| `test(rustdoc): reproduce ...` | **FAILED** |\n| `fix(rustdoc): link doc tests ...` | **PASSED** |\n\nThe failing action\u0027s argv shows the search path arriving while the\nlibrary\nreference never does:\n\n```\n\"-Lnative\u003dtest/unit/cc_toolchain_runtime_lib\",   \u003c- present\n...                                              \u003c- no -Clink-arg\u003d-ldummy\n```\n\n## Cause\n\n`add_native_link_flags` emits the runtime libs\u0027 `-Lnative\u003d`\nunconditionally but\ngates the matching `-lstatic\u003d` behind `include_link_flags`, which\nrustdoc sets\nto False (#2467). #4080 added a compensating `-Clink-arg\u003d-l` loop for\ndoc tests,\nbut this does not work for a `static_runtime_lib`.\n\n## Alternatives  \n\nInjecting the flag from outside doesn\u0027t work. The archive is already in\nthe\ndoc test\u0027s runfiles (via #3741), so `-Clink-arg\u003d\u003cits short_path\u003e` does\nfix doc\ntests. However, `toolchain.extra_rustc_flags` applies to every rustc\ninvocation,\nand normal `rust_test` binaries link in the execroot, where that\nrunfiles-relative path doesn\u0027t exist: `clang++: error: no such file or\ndirectory`. Doc tests and normal links need *different paths to the same\nfile*,\nNo single toolchain-level flag satisfies both. Per-target\n`rustdoc_flags`\ndoes work, but only by hardcoding the canonical repo name and the\nruntime lib\u0027s\ninternal layout in every `rust_doc_test`. However, this is\nunmaintainable in any major project.\n\n## Changes\n\n- `rustdoc.bzl` — extend the #4080 loop to the cc_toolchain runtime\nlibs,\nmirroring the crate-type split in `collect_inputs`. Guarded on\n`cc_toolchain`\n  being present (#3665).\n- `rustdoc_test.bzl` — add those libs\u0027 root to `--strip_substring`.\nRequired:\n  they\u0027re built in a different configuration than the crate outputs, so\notherwise the `-Lnative\u003d` path stays an execroot path that doesn\u0027t exist\nin\nthe runfiles tree the doc test runs from. Only non-empty roots are added\n—\nsource-file runtime libs need no stripping, and an empty root would emit\n  `--strip_substring\u003d/`, which `rustdoc_test_writer` applies as a plain\n  `str::replace`.\n\nThe libs already reach runfiles via `ctx.runfiles(transitive_files \u003d\naction.inputs)`\nthanks to #3741.\n\n## Testing\n\n`bazel test -- //... -//test/unit/remap_path_prefix:integration_test` on\nmacOS:\n**569 passed / 35 skipped**, against **568 / 35** before. The new doc\ntest is\nthe only target that changed status; every other action was a cache hit,\nso\nthis is a provable no-op where `static_runtime_lib` is empty.\n \nThe patch has also been verified against a repo that builds with\nhermetic-LLVM and all failing doc tests\npassed.\n\n---------\n\nSigned-off-by: Marvin Hansen \u003cmarvin.hansen@gmail.com\u003e"
    },
    {
      "commit": "df8c833da61ec3098e928e2e37d2eacadc6215fc",
      "tree": "3db505a2b96329a43e3a4a3bcbad93e749931d14",
      "parents": [
        "ca5c131b9275634b2ada8f41f43357cf4ab640c4"
      ],
      "author": {
        "name": "Austin Schuh",
        "email": "AustinSchuh@users.noreply.github.com",
        "time": "Wed Aug 19 13:17:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 13:17:13 2026"
      },
      "message": "Fix rust_bindgen\u0027s clang include path and dep wiring (#4218)\n\nrust_bindgen rebuilds clang\u0027s command line from the cc_toolchain, but\nonly keeps flags from an allowlist, and -idirafter isn\u0027t on it.\ntoolchains_llvm passes every sysroot and builtin include directory that\nway (together with -nostdinc, so clang won\u0027t rediscover them on its\nown), which leaves bindgen parsing headers against a truncated include\npath.\n\nWhatever survives that filter is still a C++ compile\u0027s flags being\nhanded to a C parse, so clang warns \"argument unused during compilation\"\nfor each one, burying the real output. Add\n-Wno-unused-command-line-argument the same way the rule already adds\n-Wno-unknown-warning-option; both are clang-only, which is fine since\neverything after `--` goes to the clang bindgen forcibly uses.\n\nFinally, rules_rust now warns that a CcInfo-only target in a\nrust_library\u0027s \u0027deps\u0027 should be in \u0027link_deps\u0027. Two of the targets the\nmacro generates trip that: the thunks cc_library, and the bindgen target\nitself when merge_cc_lib_objects_into_rlib is off. Move those.\n\nThe bindgen target has to stay in \u0027deps\u0027 when that flag is on (the\ndefault). There it links cc_lib into the rlib through a BuildInfo\ncarrying -lstatic\u003d/-Lnative\u003d flags, and deliberately withholds cc_lib\u0027s\nlibraries from its CcInfo so nothing downstream links them twice.\ntransform_link_deps keeps only CcInfo, so routing it through \u0027link_deps\u0027\ndrops the objects and the binary fails to link. It also never warned,\nsince BuildInfo already marks it as a Rust target.\n\nSigned-off-by: Austin Schuh \u003caustin.linux@gmail.com\u003e\nCo-authored-by: Krasimir Georgiev \u003ckrasimir@google.com\u003e"
    },
    {
      "commit": "ca5c131b9275634b2ada8f41f43357cf4ab640c4",
      "tree": "e5b055662de10fa27c4a7a07569e2eef691aa1e8",
      "parents": [
        "a8b5fd31b4ea6dfac9a3e8fb503e79d8e08e309d"
      ],
      "author": {
        "name": "Corentin Kerisit",
        "email": "corentin.kerisit@gmail.com",
        "time": "Sat Aug 15 17:45:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 17:45:56 2026"
      },
      "message": "Fix Windows GNU staticlib output naming (#4231)\n\n## Summary\n\nMake Rust static-library naming ABI-aware on Windows.\n\nRust emits `lib\u003ccrate\u003e.a` for the GNU and GNULLVM Windows ABIs, while\nMSVC emits `\u003ccrate\u003e.lib`. The generated Rust toolchain currently selects\n`.lib` from the operating system alone, and `determine_lib_name` removes\nthe `lib` prefix for every Windows static library. As a result, Bazel\ndeclares an output different from the file emitted by rustc for Windows\nGNU-like targets.\n\nThis change passes the target ABI through repository and toolchain\ngeneration, selects `.a` for Windows GNU/GNULLVM static libraries, and\npreserves their `lib` prefix. MSVC behavior and Windows dynamic-library\nnaming remain unchanged.\n\nRegression coverage exercises the extension mapping, rendered toolchain\nmetadata, final GNU/GNULLVM/MSVC static-library names, and the unchanged\nGNU `cdylib` name."
    },
    {
      "commit": "a8b5fd31b4ea6dfac9a3e8fb503e79d8e08e309d",
      "tree": "9d7988e01fbc5c3af6a749ad013a4d30b4d1de82",
      "parents": [
        "bb4e9e8cf14511e7b9cf7bda3d1c1f277d076e24"
      ],
      "author": {
        "name": "Jordan",
        "email": "jordan.mele@outlook.com.au",
        "time": "Fri Aug 14 18:41:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 18:41:54 2026"
      },
      "message": "Upgrade `cargo-lock` from v10 to v11 (#4228)\n\nUpgraded version includes https://github.com/rustsec/rustsec/pull/1406\nwhich improves unambiguous source spec removal, better matching `cargo`\nbehaviour.\n\ne.g. when different versions of the same crate sourced from different\nsources (e.g. git forks) are in `Cargo.lock`, including the source is\nunnecessary.\n```diff\n- \"vello_common 0.1.0 (git+https://github.com/linebender/vello?rev\u003d...)\",\n+ \"vello_common 0.1.0\",\n...\n- \"vello_common 0.0.9 (git+https://github.com/linebender/vello?rev\u003d...)\",\n+ \"vello_common 0.0.9\",\n```"
    },
    {
      "commit": "bb4e9e8cf14511e7b9cf7bda3d1c1f277d076e24",
      "tree": "7365fabe1fc41fd7a10f51e3dc295b256f8fd8f0",
      "parents": [
        "226c4886e9243e9b6045ce4adb7e6c1bb6a4ab07"
      ],
      "author": {
        "name": "Takeshi Yoneda",
        "email": "t.y.mathetake@gmail.com",
        "time": "Fri Aug 07 16:36:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 16:36:54 2026"
      },
      "message": "Fixes lockfile checksum for non-root repo (#3866)\n\nFixes https://github.com/bazelbuild/rules_rust/issues/3521\n\n---------\n\nSigned-off-by: Takeshi Yoneda \u003ctyoneda@netflix.com\u003e\nSigned-off-by: Takeshi Yoneda \u003ct.y.mathetake@gmail.com\u003e\nCo-authored-by: UebelAndre \u003cgithub@uebelandre.com\u003e"
    },
    {
      "commit": "226c4886e9243e9b6045ce4adb7e6c1bb6a4ab07",
      "tree": "143c4fa7611d58a2f23ef1fe3333334cd1f4ff9c",
      "parents": [
        "b0076d5cd925634c01fadb1090a212f2bd307c41"
      ],
      "author": {
        "name": "Finn Ball",
        "email": "finn.ball@codificasolutions.com",
        "time": "Wed Aug 05 13:31:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 05 13:31:54 2026"
      },
      "message": "Include link_deps in Rust runfiles (#4204)\n\n## Summary\n\n- merge default runfiles from `link_deps` into Rust target runfiles\n- include dynamic libraries supplied through `link_deps` alongside those\nfrom `deps`\n\n## Why\n\n`link_deps` participates in native linking, but its runfiles and dynamic\nlibraries were omitted when `rustc_compile_action` assembled runtime\nfiles. Binaries and library targets that link native dependencies\nthrough `link_deps` could therefore be built successfully while missing\nrequired runtime artifacts.\n\n## Impact\n\nRust binaries, `cdylib`s, and `staticlib`s now carry the runtime files\nneeded by dependencies declared through `link_deps`.\n\n## Validation\n\n- `bazel test //test/unit/link_deps:all`\n- `git diff --check`"
    },
    {
      "commit": "b0076d5cd925634c01fadb1090a212f2bd307c41",
      "tree": "febe6c0d50e06109b6532afec062454b02558467",
      "parents": [
        "4e0d17a23e440daf108eb611edfe713d297de032"
      ],
      "author": {
        "name": "Jorge Gorbe Moya",
        "email": "slack@codemaniacs.com",
        "time": "Tue Aug 04 15:56:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 15:56:02 2026"
      },
      "message": "Check for nightly toolchain when enabling split debug info. (#4186)\n\nThis fixes a problem pointed out by\n\nhttps://github.com/bazelbuild/rules_rust/pull/4092#issuecomment-5136906807.\n\n`-Zsplit-dwarf-out-dir` is only available on nightly, so we have to gate\nsplit debug info on it. Now, if the user requests `--fission` while\nusing a non-nightly Rust toolchain, the build will fail. To avoid\nbreaking users relying on the previous behavior, a\n`skip_fission_for_rust` flag has been added. Users can add it to their\nbazelrc file to explicitly signal that they\u0027re okay with Rust compiles\nnot producing split debug info, even if requested in the command line.\n\nAssisted-by: Gemini"
    },
    {
      "commit": "4e0d17a23e440daf108eb611edfe713d297de032",
      "tree": "ddfa5fe02b7a01a0a327ff199a9ef6db23ff70fa",
      "parents": [
        "60231db04d16432f9fef673765cb11cd7e6f1a61"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Mon Aug 03 14:32:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 03 14:32:40 2026"
      },
      "message": "Fix release notes (#4174)\n\nI\u0027ve had to go back and manually edit it so did a pass to update it a\nbit and make sure it renders correctly"
    },
    {
      "commit": "60231db04d16432f9fef673765cb11cd7e6f1a61",
      "tree": "12836733b6de67d9bb76147125e0b25ac01a1f3c",
      "parents": [
        "d7c7117399990e73fd12964d7ea2c78967aa210e"
      ],
      "author": {
        "name": "Finn Ball",
        "email": "finn.ball@codificasolutions.com",
        "time": "Fri Jul 31 17:55:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 17:55:06 2026"
      },
      "message": "Release 0.73.0 (#4187)"
    },
    {
      "commit": "d7c7117399990e73fd12964d7ea2c78967aa210e",
      "tree": "2643ca813cf10ec94789c415700d2c908ae7fc26",
      "parents": [
        "ea0592c50fd437dc07cec6f757f3010ede156f7a"
      ],
      "author": {
        "name": "Finn Ball",
        "email": "finn.ball@codificasolutions.com",
        "time": "Fri Jul 31 15:07:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 15:07:23 2026"
      },
      "message": "Add build_script_env_files crate annotation (#4166)\n\n## Summary\n\nAdd `build_script_env_files` support to `crate.annotation`, allowing\nenvironment files to be passed to generated `cargo_build_script`\ntargets.\n\nThe change:\n\n- Exposes `build_script_env_files` through bzlmod and legacy crate\nannotations.\n- Propagates the annotation through crate-universe configuration and\nbuild-script context.\n- Renders the attribute on generated `cargo_build_script` rules.\n- Supports unconditional and platform-selected values.\n- Updates the configuration digest.\n- Adds tests for annotation propagation and BUILD-file rendering.\n\n## Testing\n\n- `bazel test //crate_universe:unit_test`"
    },
    {
      "commit": "ea0592c50fd437dc07cec6f757f3010ede156f7a",
      "tree": "971a4fa31961b08770213cdee002af4a0f3ed72e",
      "parents": [
        "02749ca8edc37e56a1ad33deaea2eed9cc719ade"
      ],
      "author": {
        "name": "FabianWolff",
        "email": "16052130+FabianWolff@users.noreply.github.com",
        "time": "Fri Jul 31 14:50:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 14:50:52 2026"
      },
      "message": "Set `toolchain` parameter to `toolchain_type` instead of `None` (#4185)\n\nI don\u0027t understand the exact mechanics of this, but it appears to be\nnecessary to support multiple different exec configurations."
    },
    {
      "commit": "02749ca8edc37e56a1ad33deaea2eed9cc719ade",
      "tree": "934cc5ee4f075b0c475bc0ffe6d15d132ed02259",
      "parents": [
        "d6e7cc353b126000a39b497b6acf9b23b712d7f6"
      ],
      "author": {
        "name": "Georges Farah",
        "email": "georges.farah@datadoghq.com",
        "time": "Thu Jul 30 18:54:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 18:54:22 2026"
      },
      "message": "fix(crate_universe): pass OUTPUT_BASE as --output_base startup flag to bazel info (#4183)\n\n## Problem\n\nThe `OUTPUT_BASE` env var was added to let CI environments supply the\noutput_base without relying on `bazel info`. However, the override is\napplied **after** parsing the `bazel info` output:\n\n```rust\nlet output \u003d process::Command::new(bazel).arg(\"info\")...output()?;\nif !output.status.success() {\n    bail!(output.status)    // \u003c-- bails here when output_base is not writable\n}\n// ... parse output ...\nif let Ok(path) \u003d env::var(\"OUTPUT_BASE\") {  // \u003c-- never reached\n    bazel_info.insert(...);\n}\n```\n\nWhen `bazel info` fails (e.g. the default `~/.cache/bazel/...` is not\nwritable in a sandboxed CI), the function bails before `OUTPUT_BASE` is\never checked — making the env var useless for its intended purpose.\n\n## Fix\n\nPass `OUTPUT_BASE` as a `--output_base` Bazel **startup flag** (before\nthe subcommand):\n\n```\nbazel --output_base\u003d/path/to/base info release output_base\n```\n\nStartup flags take effect before Bazel accesses any path, so it never\ntouches the default (possibly non-writable) output_base. The `bazel\ninfo` subprocess runs normally and the post-parsing override is no\nlonger needed.\n\n## Changes\n\n- `crate_universe/src/cli/vendor.rs`: restructure `BazelInfo::try_new`\nto optionally inject `--output_base` as a startup flag; remove the\npost-parsing `OUTPUT_BASE` override.\n- Removed `test_parse_bazel_info_output_base_env_override` since\n`parse_bazel_info` no longer handles the `OUTPUT_BASE` override — the\nexisting `test_bazel_info` already covers the parsing logic."
    },
    {
      "commit": "d6e7cc353b126000a39b497b6acf9b23b712d7f6",
      "tree": "6cc6d9bf0f063780563b95acfe5e16f9049d5300",
      "parents": [
        "b88f87a6148db823b409b235e27ea0950760ad2c"
      ],
      "author": {
        "name": "Cameron Mulhern",
        "email": "csmulhern@gmail.com",
        "time": "Thu Jul 30 18:01:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 18:01:59 2026"
      },
      "message": "Stabilizes per_crate_rustc_flag (#4182)\n\nFixes #1711."
    },
    {
      "commit": "b88f87a6148db823b409b235e27ea0950760ad2c",
      "tree": "e5037c4a88f8df8c42e9d6455cc29d68a64152af",
      "parents": [
        "8bad538608529bf24e4ef6e4ced97ade05b66b4e"
      ],
      "author": {
        "name": "Georges Farah",
        "email": "georges.farah2114@gmail.com",
        "time": "Thu Jul 30 15:01:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 15:01:25 2026"
      },
      "message": "fix(crate_universe): fix OUTPUT_BASE env var value format in crates_vendor (#4102)\n\n## Summary\n\nFix the `OUTPUT_BASE` environment variable override in\n`crate_universe/src/cli/vendor.rs` — it has never worked correctly.\n\n## Bug\n\nThe `bazel info` output parser splits each line on `:` and stores only\nthe part after the colon as the HashMap value:\n\n```rust\nlet (k, v) \u003d line.split_at(line.find(\u0027:\u0027)?);\nOk((k.to_string(), (v[1..]).trim().to_string()))\n```\n\nSo for output like `output_base: /data/output`, the HashMap contains\n`{\"output_base\" \u003d\u003e \"/data/output\"}`.\n\nHowever, the `OUTPUT_BASE` env var override stores the **full formatted\nstring** as the value:\n\n```rust\nbazel_info.insert(\"output_base\".to_owned(), format!(\"output_base: {}\", path));\n```\n\nThis produces `{\"output_base\" \u003d\u003e \"output_base: /data/output\"}`. When\n`TryFrom` later converts this to a `PathBuf` via `.map(Into::into)`, it\nproduces `PathBuf(\"output_base: /data/output\")` — an invalid path.\n\n## Fix\n\nStore the raw path string without the prefix:\n\n```rust\nbazel_info.insert(\"output_base\".to_owned(), path);\n```\n\nAlso extract `parse_bazel_info` from `try_new` so the parsing and env\nvar override logic can be unit-tested without spawning a `bazel info`\nsubprocess.\n\n## Test plan\n\nAdded `test_parse_bazel_info_output_base_env_override` which verifies:\n- Without `OUTPUT_BASE` set, the parsed value from `bazel info` output\nis used\n- With `OUTPUT_BASE` set, it overrides the parsed value with the correct\npath\n\n## Note\n\nThe test uses `env::set_var`/`env::remove_var`, which are `unsafe` in\nRust 1.83+ (and required to be in `unsafe` blocks starting with edition\n2024). This matches the existing test style in this file (see\n`test_bazel_info`). A follow-up could migrate both tests to use `unsafe\n{}` blocks or `#[serial_test::serial]` if the project upgrades its Rust\nedition.\n\nCo-authored-by: UebelAndre \u003cgithub@uebelandre.com\u003e"
    },
    {
      "commit": "8bad538608529bf24e4ef6e4ced97ade05b66b4e",
      "tree": "98bd1331436c759e3aecadfebd786690f0f5fc26",
      "parents": [
        "48b42911a97f837061b99a0b93f0f48190e8f15b"
      ],
      "author": {
        "name": "Georges Farah",
        "email": "georges.farah2114@gmail.com",
        "time": "Thu Jul 30 14:19:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 14:19:11 2026"
      },
      "message": "release: remove WORKSPACE snippets from release notes template (#4180)\n\n## Summary\n\nWORKSPACE support was removed in #4005 (released in 0.71.0). The release\nnotes template was not updated at the time, so every release since\n0.71.0 (0.71.0, 0.71.1, 0.71.2, 0.71.3, 0.72.0) has advertised\n`http_archive` WORKSPACE snippets that don\u0027t work.\n\nThis removes all WORKSPACE sections from the template so future release\nnotes only show the Bzlmod setup.\n\nAlso fixes a pre-existing missing `\u003c/details\u003e` closing tag in the Prost\nextension section."
    },
    {
      "commit": "48b42911a97f837061b99a0b93f0f48190e8f15b",
      "tree": "8ab53cc298087fca0ff42ca259a9428ce55fcdc2",
      "parents": [
        "6da7aa0442c1f79194ffff1300face951d42ccb9"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Mon Jul 27 17:51:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 17:51:03 2026"
      },
      "message": "Release 0.72.0 (#4171)"
    },
    {
      "commit": "6da7aa0442c1f79194ffff1300face951d42ccb9",
      "tree": "3b0d7104200f556b9c19eb90c43d1afa4a24b7f2",
      "parents": [
        "618c0916a358db1db5ac0ef608ff34d7d77ec303"
      ],
      "author": {
        "name": "Xiaoyi",
        "email": "ashi009@users.noreply.github.com",
        "time": "Mon Jul 27 17:26:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 17:26:44 2026"
      },
      "message": "crate_universe: move build-script dep to extra_deps (#4090)\n\nFixes #4089.\n\nA crate with a build script depends on its own `build_script_build`\ntarget. That edge was stored in `common_attrs.deps`, which\n`Context::workspace_member_deps()` collects to emit crate-hub aliases —\nso a library crate with a build script got a dead crate-hub alias for\nitself.\n\nStore the edge in `common_attrs.extra_deps` instead:\n`workspace_member_deps()` does not read `extra_deps`, so the\nself-reference no longer yields an alias. (`extra_deps` holds resolved\nlabels, so the edge becomes a relative `:build_script_build` — same\ntarget, same package.)\n\nCo-authored-by: UebelAndre \u003cgithub@uebelandre.com\u003e"
    },
    {
      "commit": "618c0916a358db1db5ac0ef608ff34d7d77ec303",
      "tree": "88119669af5ab6dd60977744752630a1e53124ba",
      "parents": [
        "a0633ba25adea1b82830d189149746b07170366d"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Mon Jul 27 17:25:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 17:25:00 2026"
      },
      "message": "Respect `--instrumentation_filer` for Rust coverage (#4173)\n\nre-implements https://github.com/bazelbuild/rules_rust/pull/4013\n\nFull credits to @tamasvajk. Thank you so much!"
    },
    {
      "commit": "a0633ba25adea1b82830d189149746b07170366d",
      "tree": "df8710eea48b43941e0af860fec01c5866a69fe9",
      "parents": [
        "4a67cca2dfc43f173581a0cfe31b4c1138727e9d"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Mon Jul 27 16:54:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 16:54:09 2026"
      },
      "message": "Avoid force excluding `bazel-*` in vscode (#4169)\n\nWe shouldn\u0027t blanket exclude `bazel-*` so users can continue to inspect\nthese directories in the file browser."
    },
    {
      "commit": "4a67cca2dfc43f173581a0cfe31b4c1138727e9d",
      "tree": "b355de8054ec39af8bd4f38211fa65cd8d65df89",
      "parents": [
        "e468ae28638506715ab9ab25305f46292273904d"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Mon Jul 27 16:14:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 16:14:05 2026"
      },
      "message": "Propagate wasm runfiles (#4168)\n\nThis change allows the wasm targets to propagate runfiles with the\nbindgen outputs."
    },
    {
      "commit": "e468ae28638506715ab9ab25305f46292273904d",
      "tree": "5ba8b6f3badecadc1bf0fb6e75313a898d40ed19",
      "parents": [
        "8ad225a81487f5b4fa00dce91ad99cfa14da1db5"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Mon Jul 27 16:06:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 16:06:49 2026"
      },
      "message": "Fix crate_universe deps interface (#4134)\n\nThis change updates the deps interface to refer to the\n`crates_vendor_remote_repository` repository.\n\ncloses https://github.com/bazelbuild/rules_rust/issues/4132"
    },
    {
      "commit": "8ad225a81487f5b4fa00dce91ad99cfa14da1db5",
      "tree": "b7a12973ef86b8031d412c1df590117cf9ea5b00",
      "parents": [
        "6503de22ca3fb4c5b04c81d5d97c9f0a0d7f6b3a"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Mon Jul 27 15:26:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 15:26:57 2026"
      },
      "message": "Add `RunfilesBuilder` to runfiles (#4170)\n\nThis change aims to enable the use of the runfiles library on\nenvironments like `wasm` where `fs` and `env` support is limited. The\nbuilder allows for more explicit control over the construction of a\n`Runfiles` instance."
    },
    {
      "commit": "6503de22ca3fb4c5b04c81d5d97c9f0a0d7f6b3a",
      "tree": "a570b58411a082a311803c5d9e3355fa1088caaf",
      "parents": [
        "5f04c8c14c2ffacfe10ad14e55298be21454be04"
      ],
      "author": {
        "name": "Jakob Koschel",
        "email": "jakobkoschel@google.com",
        "time": "Mon Jul 27 15:20:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 15:20:39 2026"
      },
      "message": "Handle PIC/NOPIC correctly in establish_cc_info (#4131)\n\nThis change determines whether to use `pic_static_library` or\n`static_library` in `cc_common.create_library_to_link` based on the\n`should_use_pic` helper. It also updates the unit tests to expect only\none of the libraries depending on the configuration.\n\nCo-authored-by: UebelAndre \u003cgithub@uebelandre.com\u003e"
    },
    {
      "commit": "5f04c8c14c2ffacfe10ad14e55298be21454be04",
      "tree": "61e49d85a611d3273212ec2fb2db1d46306a9762",
      "parents": [
        "0c5c01d9ec017c622c99c11df717b7464e99347c"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Fri Jul 24 09:14:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 09:14:57 2026"
      },
      "message": "Add `cargo_build_script.use_cc_toolchain` (#4161)\n\nThis change introduces `use_cc_toolchain` to `cargo_build_script` which\ncan be used to control whether or not a `cc_toolchain` is explicitly\nwithheld from `CargoBuildScript` actions. Additionally a global flag\n`--@rules_rust//cargo/settings:use_cc_toolchain` can be used to control\nthe default of any build script that has not either explicitly set\n`use_cc_toolchain \u003d 1` (always include cc toolchains) or\n`use_cc_toolchain \u003d 0` (always exclude cc toolchains).\n\ncloses https://github.com/bazelbuild/rules_rust/issues/3680\ncloses https://github.com/bazelbuild/rules_rust/pull/3679\n\nCo-authored-by: Krasimir Georgiev \u003ckrasimir@google.com\u003e"
    },
    {
      "commit": "0c5c01d9ec017c622c99c11df717b7464e99347c",
      "tree": "e81fe649b82b75c2404db8229a042ea0decb3a0b",
      "parents": [
        "e65f64b8b9e76064d2ec22d057200e4209582c27"
      ],
      "author": {
        "name": "Krasimir Georgiev",
        "email": "krasimir@google.com",
        "time": "Thu Jul 23 15:18:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 15:18:38 2026"
      },
      "message": "deprecate force_all_deps_direct in favor of extra_named_deps (#4160)\n\nThis is intended to give better control and more flexibility for\nextensions like Crubit, which automatically generates rust bindings for\nC++ code. The bindings generator uses an aspect to crawl over a\ndependency graph of cc_libraries, plugs itself as a tool similar to a\nC++ compiler, parses the header files and generates the corresponding\nRust bindings.\nDue to the C++ compilation model, it\u0027s possible that a header file in a\nlibrary uses a C++ symbol that is only defined in a header file owned by\nan indirect dependency of a c++ library. For example:\n\n```\nrust_library(name \u003d \"a\", hdrs \u003d [\"a.h\"])\nrust_library(name \u003d \"b\", hdrs \u003d [\"b.h\"], deps \u003d [\"a\"]) \nrust_library(name \u003d \"c\", hdrs \u003d [\"c.h\"], deps \u003d [\"b\"])\n\n# c.h\nusing C \u003d int;\n# a.h\nC f();\n```\n\nWhile compiling the generated Rust bindings of `c`, the Rust compiler\nneeds access to the generated Rust bindings of `a`, which is an indirect\ndependency. Historically, this was achieved via the\n`force_all_deps_direct` feature, which has the effect of putting all\ndirect and indirect crate dependencies as `--extern` while compiling the\nbindings for a c++ target. This is imprecise and suffers from crate name\ncollisions.\n\nIt is imprecise, because if any cc_library happens to depend on a rust\nlibrary as an implementation detail, that rust library does not need to\nbe made available via `--extern`.\n\nIt suffers from crate name collisions, because by default the crate\nnames of generated bindings are derived from the name of the label of\nthe c++ library. In a build graph where where two c++ libraries from\ndifferent packages share the same name, there is a naming collision when\nclient bindings are compiled:\n```\n# the generated bindings of both //p:a and //q:a produce a crate named a.\ncc_library(name \u003d \"client\", deps \u003d [\"//p:a\", \"//q:a\"])\n```\nTo handle these, we provide `extra_named_deps` a mechanism for\nextensions calling `rustc_compile_action` to supply an extra `depset` of\nnamed dependencies. The Crubit aspect can then compute appropriate names\nfor the generated bindings of dependencies. For this to work at scale,\nwe supply this as a depset to be computed recursively by the aspect\ncrawling the dependency graph, avoiding quadratic blaze analysis time\noverhead.\n\nThe supplied test is a mock of the type of code pattern possible in this\ncontext -- a chain of 3 rust libraries, where the top-level one refers\nto its indirect dependency via a custom crate name."
    },
    {
      "commit": "e65f64b8b9e76064d2ec22d057200e4209582c27",
      "tree": "ed851ebfaabef577abf1657b7b27829cdc5e228b",
      "parents": [
        "9c1dcbbcc87e6cf2f80ed2bebde8f6c163ca50c7"
      ],
      "author": {
        "name": "Krasimir Georgiev",
        "email": "krasimir@google.com",
        "time": "Wed Jul 22 18:49:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 18:49:20 2026"
      },
      "message": "add a docstring for _get_crate_root_path (no functional changes intended) (#4162)"
    },
    {
      "commit": "9c1dcbbcc87e6cf2f80ed2bebde8f6c163ca50c7",
      "tree": "9c392ec9f67e369017cf86c437532c2dc0ede0bb",
      "parents": [
        "a700d1ab5a6897a11edfdeb8f5a4ae2473b9b404"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Tue Jul 21 16:01:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 16:01:37 2026"
      },
      "message": "Fix NoneType error in rustdoc (#4159)\n\nThere seemed to be a confusion around `CrateInfo.output` being optional\nwithin the rustdoc rules that leads to a `NoneType` error when using\nrustdoc on a generated crate root:\n```\nexternal/rules_rust+/rust/private/rustc.bzl:1090:38: Traceback (most recent call last):\nFile \"external/rules_rust+/rust/private/rustc.bzl\", line 2883, column 16, in _get_dirname\n    return file.dirname\nError: \u0027NoneType\u0027 value has no field or method \u0027dirname\u0027\n```\n\nThis change adds a proper output to satisfy the the current `CrateInfo`\ninterface."
    },
    {
      "commit": "a700d1ab5a6897a11edfdeb8f5a4ae2473b9b404",
      "tree": "227edc9096ee349f5e4871486e43d66b04301329",
      "parents": [
        "7a7ea1c3b4f2c510d023b6421d18dfb5546e5175"
      ],
      "author": {
        "name": "Krasimir Georgiev",
        "email": "krasimir@google.com",
        "time": "Tue Jul 21 11:07:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 11:07:36 2026"
      },
      "message": "Add `root_path` attribute for directory crate roots (#4142)\n\nAllows specifying `root_path` when the crate root (`srcs` entrypoint) is\na directory artifact (`TreeArtifact`). This enables rules_rust targets\n(`rust_library`, `rust_binary`, `rust_test`, etc.) to consume directory\nartifacts produced by upstream rules and correctly construct the path to\nthe crate root (`lib.rs` / `main.rs`).\n\nWe use something like this internally to build standard libraries from\nsources distributed as .zip source archives: a custom rule extracts the\ncontents into a generated directory artifact, which then the rust rules\ncan consume as sources.\n\nThis may be helpful to achieve the request from\nhttps://github.com/bazelbuild/rules_rust/issues/3757, where the user is\ntrying to consume a directory of generated sources.\n\n* Adds `root_path` attribute to `_COMMON_ATTRS` and `CrateInfo`\nprovider.\n* Updates `rustc_compile_action` argument construction (`rustc.bzl`) to\njoin `crate_info.root.path` with `root_path` when\n`crate_info.root.is_directory` is true.\n* Adds a unit and build test case under `test/root_path/` using a custom\nrule that packages its `srcs` as a directory artifact (`TreeArtifact`)\nand compiles a `rust_library` and `rust_test` from it.\n\nI have taken special care in the rustc argument construction to ensure\nit is compatible with the new [bazel path remapping\nguidelines](https://github.com/bazelbuild/bazel/discussions/22658).\n\nWhile here, added a few checks in the rules for combinations of `srcs`,\n`crate` and `crate_root` attributes that don\u0027t make sense and would\ncause compilation to fail later anyways."
    },
    {
      "commit": "7a7ea1c3b4f2c510d023b6421d18dfb5546e5175",
      "tree": "bcd36d40462f5009bd4dbd528d14056615bd58dc",
      "parents": [
        "eaad03d4341a878a62fcdb6b31f7bf5f8587177a"
      ],
      "author": {
        "name": "Alex Conrey",
        "email": "ajcblz2019@gmail.com",
        "time": "Mon Jul 20 18:34:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 18:34:30 2026"
      },
      "message": "Reexport output groups for rustfmt and clippy tests (#4158)\n\nThis change updates `rustfmt_test` and `rust_clippy_test` to behave more\nconsistently with the aspect output groups by ensuring transitive\ntargets in the transitioned configuration get added to `//...`\ninvocations."
    },
    {
      "commit": "eaad03d4341a878a62fcdb6b31f7bf5f8587177a",
      "tree": "64c504bfdda7cf7905971c5bd3c4711e4d018863",
      "parents": [
        "c49e0bb62cacc9dc3c5f44dc19782dd07aa3eb1a"
      ],
      "author": {
        "name": "Synchronization Acknowledgement",
        "email": "77421532+sin-ack@users.noreply.github.com",
        "time": "Mon Jul 20 17:32:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 17:32:06 2026"
      },
      "message": "Point CARGO_MANIFEST_DIR to transformed sources dir (#4154)\n\nCrates with generated inputs have their source files and compile data\nstaged under bazel-out so rustc can resolve modules from one root. The\ncompile action still points `CARGO_MANIFEST_DIR` at the source package,\nwhich is absent from the sandbox and breaks proc macros that read files\nrelative to the manifest.\n\nAssisted-by: GPT-5.6 Sol"
    },
    {
      "commit": "c49e0bb62cacc9dc3c5f44dc19782dd07aa3eb1a",
      "tree": "da9c9ad0c264d8bb279c6a99e8336b28d180719b",
      "parents": [
        "9e9c4eca6c6fb4c44338829a1a473ebba149be0d"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Mon Jul 20 08:29:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 08:29:07 2026"
      },
      "message": "Added Rust 1.97.1 (#4155)\n\nhttps://blog.rust-lang.org/2026/07/16/Rust-1.97.1/"
    },
    {
      "commit": "9e9c4eca6c6fb4c44338829a1a473ebba149be0d",
      "tree": "365c2cd7e69b14be8f8ce0d077048dfc9f208e99",
      "parents": [
        "6c5cc322721c5783f853eee6c0c5f708aea14c1e"
      ],
      "author": {
        "name": "Alex Conrey",
        "email": "ajcblz2019@gmail.com",
        "time": "Fri Jul 17 19:01:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 19:01:37 2026"
      },
      "message": "Add lint test rules for transitive targets (#4156)\n\nChanges:\n- Add `rust_clippy_test` for having a test target that runs clippy on a\nlist of targets\n- Add a `transitive` bool to `rustfmt_test` that aggregates\n`rustfmt_aspect` outputs from deps of `targets`. This behavior also\napplies to the new `rust_clippy_test`"
    },
    {
      "commit": "6c5cc322721c5783f853eee6c0c5f708aea14c1e",
      "tree": "0ce2f45699a87bd610f06253f5866e674507ddda",
      "parents": [
        "5786455b5c3fc189cb907ef7d29ff3e895d589ed"
      ],
      "author": {
        "name": "Jorge Gorbe Moya",
        "email": "slack@codemaniacs.com",
        "time": "Mon Jul 13 08:28:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 08:28:45 2026"
      },
      "message": "Move flags passed in `rust_flags` near the end of the rustc invocation. (#4135)\n\nThis allows callers of rustc_compile_action to override the default\nflags.\n\nThe motivating example for making this change was some path remapping\ndone by Crubit\n(https://github.com/google/crubit/blob/685a46aabbdf6552803c5bd77da6628008d0d245/rs_bindings_from_cc/bazel_support/compile_rust.bzl#L100).\nPR #4106 added another `--remap-path-prefix` flag after the code that\nadds `rust_flags` to the rustc invocation, and the new remapping took\nprecedence."
    },
    {
      "commit": "5786455b5c3fc189cb907ef7d29ff3e895d589ed",
      "tree": "a16d5703b690adb29fef0591d8b61285a588e228",
      "parents": [
        "dd6729b94835b851e1ff50722174585d96534e53"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Fri Jul 10 12:51:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 12:51:08 2026"
      },
      "message": "Added Rust 1.97.0 (#4144)\n\nhttps://blog.rust-lang.org/2026/07/09/Rust-1.97.0/"
    },
    {
      "commit": "dd6729b94835b851e1ff50722174585d96534e53",
      "tree": "e29564cc1c1b1c36b64c1ee06bbc61be90a1d4fb",
      "parents": [
        "ed321505851d2cc8a5ace048188ef3ba8f7e8d71"
      ],
      "author": {
        "name": "Alex Conrey",
        "email": "ajcblz2019@gmail.com",
        "time": "Fri Jul 10 06:52:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 06:52:37 2026"
      },
      "message": "Add rust-analyzer clippy end-to-end test (#4147)\n\nImplements https://github.com/bazelbuild/rules_rust/pull/4143 and also\nfixes a memory leak from multiple rust-analyzer processes for different\nrust-analyzer-workspaces.\n\ncloses https://github.com/bazelbuild/rules_rust/pull/4143"
    },
    {
      "commit": "ed321505851d2cc8a5ace048188ef3ba8f7e8d71",
      "tree": "32c002ca83f24de564513b85275e10e9b0f1100f",
      "parents": [
        "7cd42b83c0f4d1bbd68376685b425de08fa58d83"
      ],
      "author": {
        "name": "Keith Smiley",
        "email": "keithbsmiley@gmail.com",
        "time": "Thu Jul 09 18:26:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 18:26:18 2026"
      },
      "message": "Return repo_metadata from repository rules (#4146)\n\nThis allows the remote repo contents cache to cache the result of these"
    },
    {
      "commit": "7cd42b83c0f4d1bbd68376685b425de08fa58d83",
      "tree": "929dcf723e77f47dbcae9b030ed13d2e9d223d9b",
      "parents": [
        "88ab9d0c3e21fa3f8721cea2875809315930d6fc"
      ],
      "author": {
        "name": "Martin Kuntz Jacobsen",
        "email": "56176095+TrapsterDK@users.noreply.github.com",
        "time": "Wed Jul 08 22:18:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 22:18:38 2026"
      },
      "message": "Fix rust-analyzer proc-macro merge for k8-opt-exec paths (#4140)\n\nWritten by AI, reviewed by human.\n\nFixes #4139.\n\n## Summary\n\n`consolidate_crate_specs` prefers proc-macro dylib paths that look like\nexec outputs. The previous marker matched paths with `-opt-exec-`, but\nBazel can also emit exec paths like `bazel-out/k8-opt-exec/bin/...`.\n\nThis updates the marker to match both forms and adds a regression test\nfor the unsuffixed `k8-opt-exec/bin` path shape.\n\n## Testing\n\n```sh\nbazel test --cache_test_results\u003dno //tools/rust_analyzer:gen_rust_project_lib_test\n```"
    },
    {
      "commit": "88ab9d0c3e21fa3f8721cea2875809315930d6fc",
      "tree": "d1d5609e9baa57a7625458c822ca416c707842f8",
      "parents": [
        "16d03098f1a4d8b40ed672c8b6650dd274e66282"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Wed Jul 08 21:50:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 21:50:09 2026"
      },
      "message": "Add jsonc support for rust-analyzer setup (#4126)\n\nThe change aims to cleanly handle merging rust-analyzer settings into\nexisting vscode config files that are `jsonc` vs valid `json`."
    },
    {
      "commit": "16d03098f1a4d8b40ed672c8b6650dd274e66282",
      "tree": "68788498337417f5af1dd404581ed57638451000",
      "parents": [
        "46d67bc1fda4592dab7465c8152d94ae6f969cfc"
      ],
      "author": {
        "name": "UebelAndre",
        "email": "github@uebelandre.com",
        "time": "Wed Jul 08 21:45:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 21:45:56 2026"
      },
      "message": "Fix rust-analyzer selecting the wrong proc-macro cfg (#4137)\n\ncloses https://github.com/bazelbuild/rules_rust/issues/4136"
    },
    {
      "commit": "46d67bc1fda4592dab7465c8152d94ae6f969cfc",
      "tree": "87eb5b45e13a610f4dac65e96670e40cca09d6a6",
      "parents": [
        "dedf05304354aace6a76ae78030a9d69c74e37d4"
      ],
      "author": {
        "name": "Cameron Mulhern",
        "email": "csmulhern@gmail.com",
        "time": "Tue Jul 07 05:43:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 05:43:50 2026"
      },
      "message": "Fixes BEP path handling for rust analyzer specs (#4130)\n\nThe rewrite of the Rust Analyzer auto-discovery pipeline (see #4075)\nintroduced a bug for users who use\n`--experimental_convenience_symlinks\u003dignore` (i.e. have no bazel-out\nsymlink in their workspace).\n\n`parse_output_group_paths` documentation suggests that output paths are\nalways absolute\n\n\nhttps://github.com/bazelbuild/rules_rust/blob/dedf05304354aace6a76ae78030a9d69c74e37d4/tools/rust_analyzer/bep.rs#L107-L110\n\nbut that is not true for BEP events that trigger the fallback\nreconstruction path\n\n\nhttps://github.com/bazelbuild/rules_rust/blob/dedf05304354aace6a76ae78030a9d69c74e37d4/tools/rust_analyzer/bep.rs#L241-L243\n\nThis PR detects those cases and anchors those paths to the execution\nroot, making them also absolute."
    },
    {
      "commit": "dedf05304354aace6a76ae78030a9d69c74e37d4",
      "tree": "56dd577aab3d961bed8b1282889d2188aba50c12",
      "parents": [
        "64c826a3741aae38aa27e0c02c4e080aa20f19cb"
      ],
      "author": {
        "name": "Bas van Dijk",
        "email": "bas@van.dijk.ch",
        "time": "Sun Jul 05 14:19:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 05 14:19:22 2026"
      },
      "message": "Fix unresolved `${out_dir}` token in dep env files (#4124)\n\n### The bug\n\nSince the `OUT_DIR` sanitization work (#4050 / #4011, first released in\n0.71.x), `outputs_to_dep_env` redacts the producer\u0027s `out_dir` to the\ngeneric `${out_dir}` substitution token, the same way `outputs_to_env`\ndoes.\n\nThat redaction is only correct for `_bs.env` files, which are consumed\nby the target that directly owns the build script (where\n`process_wrapper`\u0027s `--out-dir` resolves the token to the right\ndirectory). Dep env (`DEP_*`) files, however, are consumed by\n*downstream* crates\u0027 build scripts: their runner only substitutes\n`${pwd}`, and their own `out_dir` points to a different directory. The\ntoken is therefore left unresolved, or would resolve to the wrong\ndirectory.\n\nReal-world failure: `libssh2-sys`\u0027s build script fails to find `zlib.h`\nbecause `libz-sys`\u0027s `DEP_Z_INCLUDE` contains a literal `${out_dir}`\npath component. Found while upgrading `rules_rust` to 0.71.3 in\ndfinity/ic (see dfinity/ic#10632, where this fix is currently carried as\na patch).\n\n### The fix\n\nOnly substitute the exec root in dep env files and keep the real\n`out_dir` path. That path is valid for consumers: the producer\u0027s\n`out_dir` is a declared input of downstream build script actions.\n\n### Tests\n\n* Unit test\n`out_dir_in_dep_env_value_is_not_redacted_to_substitution_token` in\n`cargo/private/cargo_build_script_runner/lib.rs`.\n* End-to-end regression test `//cargo/tests/dep_env:build_read_out_dir`\nmirroring the libz-sys → libssh2-sys scenario: a producer build script\nadvertises `cargo:include\u003d$OUT_DIR/include` and the consumer build\nscript asserts `DEP_Z_INCLUDE` points at an existing directory. Fails\nwithout the fix, passes with it.\n\n---\n\nAssisted-by: GitHub Copilot"
    },
    {
      "commit": "64c826a3741aae38aa27e0c02c4e080aa20f19cb",
      "tree": "0192f70fe137af48098d542bfc58624e1b91986b",
      "parents": [
        "bd2a8f01549844fd91a9e5098fabc78c56d55734"
      ],
      "author": {
        "name": "Keegan Carruthers-Smith",
        "email": "keegan.csmith@gmail.com",
        "time": "Sun Jul 05 12:39:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 05 12:39:00 2026"
      },
      "message": "fix: declare rustfmt aspect action toolchain (#4128)\n\nThe --incompatible_auto_exec_groups flag requires Starlark actions to\ndeclare whether their executable/tools come from an action toolchain.\nThis is not a Bazel default today, but it is exposed through strict\npreset configurations and is intended to catch rules that rely on\nimplicit action toolchain inference.\n\nrustfmt_aspect runs rustfmt from rules_rust\u0027s rustfmt toolchain, but the\nformatting action does not declare that action toolchain. Declare the\nmatching rustfmt toolchain so the action\u0027s toolchain behavior is\nexplicit without changing its inputs or execution model."
    },
    {
      "commit": "bd2a8f01549844fd91a9e5098fabc78c56d55734",
      "tree": "fe50a3e8e6deca47db7abaa1a1fa2aae11b1cad8",
      "parents": [
        "4c2c46038fd9d794191c5df0865d0e0de059b73d"
      ],
      "author": {
        "name": "Martin Geisler",
        "email": "martin@geisler.net",
        "time": "Sun Jul 05 12:21:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 05 12:21:40 2026"
      },
      "message": "Fix Clippy errors from #4127 (#4129)\n\nThese were not triggered before the PR was merged. I’m not sure why more\ntests are run on `main` than on PRs, but maybe this could be revisited\nto at least gate PRs on this kind of thing?"
    },
    {
      "commit": "4c2c46038fd9d794191c5df0865d0e0de059b73d",
      "tree": "7e218e4c2ca7e2aeebb2426ada02f9de2f8c68b4",
      "parents": [
        "7fb3e6d051719d5d4f1d59f6499c40435351e67e"
      ],
      "author": {
        "name": "Martin Geisler",
        "email": "martin.geisler@proton.ch",
        "time": "Fri Jul 03 23:25:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 23:25:05 2026"
      },
      "message": "Tolerate partial build failures during rust-analyzer discovery (#4127)\n\n`discover_bazel_rust_project` builds the rust-analyzer aspect over the\nwhole workspace and bailed on any non-zero Bazel exit. In a large\nmonorepo a single broken target (e.g. an unrelated, unmaintained one)\naborted the build, leaving rust-analyzer with no Bazel project model. It\nthen silently falls back to a Cargo workspace, which breaks proc-macro\nexpansion (toolchain ABI mismatch) and materializes a stray `target/`.\n\nPass `--keep_going` so Bazel keeps building the rest of the graph, and\ntreat the result as usable when the BEP still yielded crate specs:\nproceed with a `log::warn` that the project may be incomplete, and only\nfail when zero specs were produced. This mirrors `flycheck`\u0027s existing\nexit-code handling.\n\nAdd an end-to-end test that stands up a workspace with one good\n`rust_library` and one target that fails analysis, then checks discovery\nstill returns a project containing the good crate. Unit tests cover the\n`assess_discovery` decision.\n\nWritten with Claude, but I believe I understand what is going on."
    },
    {
      "commit": "7fb3e6d051719d5d4f1d59f6499c40435351e67e",
      "tree": "b26e2def6f32d68f2688ddc96f0a33f3c69dc051",
      "parents": [
        "256b6b92476204e2b6a0ee2e6659cde0017bafdd"
      ],
      "author": {
        "name": "Jorge Gorbe Moya",
        "email": "slack@codemaniacs.com",
        "time": "Fri Jul 03 14:55:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 14:55:05 2026"
      },
      "message": "rustc: add support for split debuginfo (#4092)\n\nThis is #3168 by @durin42, with fixes for some of the pre-merge checks.\n\nThis PR adapts the original change to support path mapping when passing\n`-Zsplit-dwarf-out-dir\u003d\u003cpath\u003e`. In order to do this, it adds to\n`construct_arguments` the option to pass `(format_string, File)` as\nelements in the list form of `rustc_flags`. This PR also adds tests for\nthe new functionality.\n\nThe new changes on top of the original PR were written with assistance\nby Gemini.\n\n---------\n\nCo-authored-by: Augie Fackler \u003caugie@google.com\u003e"
    },
    {
      "commit": "256b6b92476204e2b6a0ee2e6659cde0017bafdd",
      "tree": "f1215881fb2158d5d11e9a3a65b9b22f05471e9c",
      "parents": [
        "8f4cba1695aff1bfc1346541abb09ec55bb0f354"
      ],
      "author": {
        "name": "Glenn LeBlanc",
        "email": "g.leblanc135@gmail.com",
        "time": "Thu Jul 02 21:33:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 21:33:05 2026"
      },
      "message": "fix: prefix pwd for imacros flag (#4116)\n\ntoolchains_llvm\n[now](https://github.com/bazel-contrib/toolchains_llvm/commit/119492322ea93f90870a6c8f9c6438480c0f0524)\nforce-includes a header via `-imacros`, which surfaced this bug."
    }
  ],
  "next": "8f4cba1695aff1bfc1346541abb09ec55bb0f354"
}
