)]}'
{
  "commit": "96085bf7f752a6da82f5ccd36a28762ad5868df9",
  "tree": "beddb69ddacba55ccef2faed731035e0d02c613c",
  "parents": [
    "41f7bd49a9911cb767dccdb78cd230d912b22bd7"
  ],
  "author": {
    "name": "nikolai-manzhos",
    "email": "nikolaim@uber.com",
    "time": "Thu Jul 23 17:19:53 2026 +0200"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Jul 23 08:19:53 2026 -0700"
  },
  "message": "Fingerprint KSP2 classloader cache by jar content, not just path (#1672)\n\nBazel keeps the same output path across incremental rebuilds of a KSP processor, so the path-only cache key can\u0027t tell a recompiled jar from an unchanged one. This causes the worker to reuse a stale classloader after a processor is edited and rebuilt.\n\nReplace `computeIfAbsent` with `compute` and pair each cached classloader with a SHA-256 content fingerprint (path + size + bytes). When the fingerprint changes for a cached classpath, the stale classloader is closed and replaced. This keeps at most one entry per distinct classpath, so it can\u0027t regress the metaspace OOM the cache was originally added to fix.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "0429a52cb4210753e17b07d580dd58ec62131cbc",
      "old_mode": 33188,
      "old_path": "src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/Ksp2Task.kt",
      "new_id": "119c2c57bb792b7e9a51494e6c6f2dbd919ef70f",
      "new_mode": 33188,
      "new_path": "src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/Ksp2Task.kt"
    },
    {
      "type": "modify",
      "old_id": "abe5cdeba6c64f8ccba03f473d2a1fda2c7be20a",
      "old_mode": 33188,
      "old_path": "src/test/kotlin/io/bazel/kotlin/builder/tasks/Ksp2TaskTest.kt",
      "new_id": "f5e5c38ad7ca85501dafd03b2fdf148b68021ac7",
      "new_mode": 33188,
      "new_path": "src/test/kotlin/io/bazel/kotlin/builder/tasks/Ksp2TaskTest.kt"
    }
  ]
}
