)]}'
{
  "commit": "2c8e8ac3d0d23294cd666c6eeaea7770a721768f",
  "tree": "8ca4d14c2d319b2123df4cc38a8050d25b5602ab",
  "parents": [
    "97d4d4f79022fcc82a926227a19e32146b63e43e"
  ],
  "author": {
    "name": "Simon Mavi Stewart",
    "email": "simon.m.stewart@gmail.com",
    "time": "Wed Jul 08 20:31:04 2026 +0100"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Jul 08 20:31:04 2026 +0100"
  },
  "message": "Preserve Gradle variant identity in the lock graph (#1576)\n\nThe Gradle resolver was flattening multiple selected variants of the same\nmodule into a single dependency node. When a module was resolved both as its\nmain jar and as test fixtures, we merged their outgoing dependencies and then\nstamped that merged child set onto both output coordinates. That can create\nself loops and main-to-test-fixtures back-edges in the generated lockfile,\nwhich Bazel cannot repair downstream.\n\nFix this by keeping variant identity through resolution so each selected\nvariant keeps its own dependency set. Variants are classified and artifacts\nare attached to them using Gradle capabilities, the canonical identity for\nfeature variants, so any capability-based variant is handled, not just test\nfixtures. Requested test-fixtures classifiers resolve through Gradle\u0027s\ntestFixtures(...) notation instead of being treated like an ad hoc classifier\nfetch.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6ebfa620f7e920541c196b5cdd48ac3a520e8e1d",
      "old_mode": 33188,
      "old_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleBuildScriptGenerator.java",
      "new_id": "4beeafe0d40d9fc4b22282e724ca055bf4692936",
      "new_mode": 33188,
      "new_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleBuildScriptGenerator.java"
    },
    {
      "type": "modify",
      "old_id": "79e9414e308f32fd7ba248e558f60e444c6a2c0c",
      "old_mode": 33188,
      "old_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleResolver.java",
      "new_id": "88d245ee8e6c44c68b65c00ce8352114378429f2",
      "new_mode": 33188,
      "new_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleResolver.java"
    },
    {
      "type": "modify",
      "old_id": "102304426895840c1372002fc0240edc50590c22",
      "old_mode": 33188,
      "old_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/data/build.gradle.hbs",
      "new_id": "1d6caba337f5b44d8057d1eb022072a57a94a7f3",
      "new_mode": 33188,
      "new_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/data/build.gradle.hbs"
    },
    {
      "type": "modify",
      "old_id": "b6d7f32978e18d807bc18567aae267dd61aa37d2",
      "old_mode": 33188,
      "old_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedArtifact.java",
      "new_id": "b5efc3c8e10579aa05517ac4191fa1e17368003d",
      "new_mode": 33188,
      "new_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedArtifact.java"
    },
    {
      "type": "modify",
      "old_id": "1d1ff66ed820c847d3ebad4d4a78312806200787",
      "old_mode": 33188,
      "old_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedArtifactImpl.java",
      "new_id": "f79f96fdfb5d647bd5fb5ce811425a529d3f1b6e",
      "new_mode": 33188,
      "new_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedArtifactImpl.java"
    },
    {
      "type": "modify",
      "old_id": "ca537d5b5ad95a4b526454ee3198ca488ddc26e4",
      "old_mode": 33188,
      "old_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependency.java",
      "new_id": "3bc9b7782cd84b17e93349dee5ddef1cc63e0085",
      "new_mode": 33188,
      "new_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependency.java"
    },
    {
      "type": "modify",
      "old_id": "95442856a390ed7be186cc8ede4c8331594bab7d",
      "old_mode": 33188,
      "old_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependencyImpl.java",
      "new_id": "e721cd5966541bfe56fafa99fcd82f9c5692b9d0",
      "new_mode": 33188,
      "new_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/models/GradleResolvedDependencyImpl.java"
    },
    {
      "type": "modify",
      "old_id": "e299593aac3c02fe30b4e8206d1aa60556edf936",
      "old_mode": 33188,
      "old_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/GradleDependencyModelBuilder.java",
      "new_id": "b53b27cbc9e9a077a6dd7adfbe8302b675422de4",
      "new_mode": 33188,
      "new_path": "private/tools/java/com/github/bazelbuild/rules_jvm_external/resolver/gradle/plugin/GradleDependencyModelBuilder.java"
    },
    {
      "type": "modify",
      "old_id": "28307863fc85eb37d2183e0618ae9e9c892f6ab3",
      "old_mode": 33188,
      "old_path": "tests/com/github/bazelbuild/rules_jvm_external/resolver/MavenRepo.java",
      "new_id": "22687991375cf7c472033044f72b67ccf8a69697",
      "new_mode": 33188,
      "new_path": "tests/com/github/bazelbuild/rules_jvm_external/resolver/MavenRepo.java"
    },
    {
      "type": "modify",
      "old_id": "9ce5360ca8c14957318d053e5ef8bbcb8ae5a7ad",
      "old_mode": 33188,
      "old_path": "tests/com/github/bazelbuild/rules_jvm_external/resolver/gradle/BUILD",
      "new_id": "1898ee754d3ff9f6deee075404b452ddf8afe858",
      "new_mode": 33188,
      "new_path": "tests/com/github/bazelbuild/rules_jvm_external/resolver/gradle/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8d9971098fe5c11e5410ae6f3e03d408fabadaa2",
      "new_mode": 33188,
      "new_path": "tests/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleBuildScriptGeneratorTestFixturesTest.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "26b958e637dfae9b06f75ba7acacf3ad82d37d96",
      "new_mode": 33188,
      "new_path": "tests/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleResolvedDependencyImplTest.java"
    },
    {
      "type": "modify",
      "old_id": "b8a2c6b69fb3c883f6e5c33485d8927eac5972b1",
      "old_mode": 33188,
      "old_path": "tests/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleResolverTest.java",
      "new_id": "1e872cb627ae6573e2237da57351d58c5956088e",
      "new_mode": 33188,
      "new_path": "tests/com/github/bazelbuild/rules_jvm_external/resolver/gradle/GradleResolverTest.java"
    },
    {
      "type": "modify",
      "old_id": "5cacf15c025f0814fc08c2d3b55d5ac9818ebae5",
      "old_mode": 33188,
      "old_path": "tests/com/github/bazelbuild/rules_jvm_external/resolver/gradle/fixtures/BUILD",
      "new_id": "06dbbfe7135a415ef8b3147c160d98ec1af799e7",
      "new_mode": 33188,
      "new_path": "tests/com/github/bazelbuild/rules_jvm_external/resolver/gradle/fixtures/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "96befb0e25a1e1627aca038422cf4fe754311c2d",
      "new_mode": 33188,
      "new_path": "tests/com/github/bazelbuild/rules_jvm_external/resolver/gradle/fixtures/testFixturesVariant/sample-1.0.module"
    }
  ]
}
