)]}'
{
  "commit": "5c11b69c8ee0fdb85ea444fc91e815378a349ee3",
  "tree": "e5741d9ca13dfc14e1d79c4b588ee6ec7ee6a9dd",
  "parents": [
    "54cfbd86dac342b8eb87d8be196b336583eae253"
  ],
  "author": {
    "name": "Frank Portman",
    "email": "frank1214@gmail.com",
    "time": "Tue Oct 27 00:25:02 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Oct 27 00:25:02 2026 +0000"
  },
  "message": "feat: add PyInfo.direct_implicit_pyc_files and PyExecutableInfo.venv_runfiles (#4341)\n\n`PyInfo` had a direct counterpart for every pyc field except the\nimplicit pyc files, and `PyExecutableInfo` exposed the venv\u0027s\ninterpreter runfiles but not the application\u0027s. Tools that only see\nproviders, like a packager\u0027s aspect, need both to tell a target\u0027s own\nfiles apart from what it inherits.\n\nAlso pulls a few internals out so they can be reused, with no change in\nbehavior: `py_info_runfiles_files()` for the files a binary takes from a\ndependency\u0027s PyInfo, `get_runtime_files()` for the runtime\u0027s files, and\n`get_package_and_version()` taking the data files instead of the ctx.\n\nSplit out of #4254, which uses all of these.",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f854306a4ef8ca4f64e36c667c245e0fe2c6a8d5",
      "new_mode": 33188,
      "new_path": "news/3757-provider-fields.added.md"
    },
    {
      "type": "modify",
      "old_id": "0a2d8a115b8ba99b7044eedf396de45af3180d38",
      "old_mode": 33188,
      "old_path": "python/private/common.bzl",
      "new_id": "28f33edf90d987f91e5c3e3163c2786958381b56",
      "new_mode": 33188,
      "new_path": "python/private/common.bzl"
    },
    {
      "type": "modify",
      "old_id": "1ee926edde148fb48d311b5cf3db39be689506a4",
      "old_mode": 33188,
      "old_path": "python/private/py_executable.bzl",
      "new_id": "e8240da894936e4f0d6a8e6e3cd16b787b9e1e60",
      "new_mode": 33188,
      "new_path": "python/private/py_executable.bzl"
    },
    {
      "type": "modify",
      "old_id": "7693fa950f5e9f73bea78f9a6ab38df353e31c3f",
      "old_mode": 33188,
      "old_path": "python/private/py_executable_info.bzl",
      "new_id": "2a6ccfe2a49e89f67e5daadde3f95f1989e9a94b",
      "new_mode": 33188,
      "new_path": "python/private/py_executable_info.bzl"
    },
    {
      "type": "modify",
      "old_id": "79483ab2f5b707df003c520461711ff1cca950d9",
      "old_mode": 33188,
      "old_path": "python/private/py_info.bzl",
      "new_id": "4bda5601efa5a33defa8c2767cfa0b439c611f14",
      "new_mode": 33188,
      "new_path": "python/private/py_info.bzl"
    },
    {
      "type": "modify",
      "old_id": "6282b71ee1139f2f901eb3700dac5c3831f3d24a",
      "old_mode": 33188,
      "old_path": "python/private/py_library.bzl",
      "new_id": "9b1e064853c07f6e1ddd613b0ab72d7cb6637120",
      "new_mode": 33188,
      "new_path": "python/private/py_library.bzl"
    },
    {
      "type": "modify",
      "old_id": "63865a30e6ecdfb18e28e8fc18d87c282193afc7",
      "old_mode": 33188,
      "old_path": "tests/base_rules/precompile/precompile_tests.bzl",
      "new_id": "ef1ea3c1ca4adc81ddb048439d45435ece389596",
      "new_mode": 33188,
      "new_path": "tests/base_rules/precompile/precompile_tests.bzl"
    },
    {
      "type": "modify",
      "old_id": "34b922a6fbd1cce075783fb60cd88500216d3dc4",
      "old_mode": 33188,
      "old_path": "tests/base_rules/py_executable_base_tests.bzl",
      "new_id": "0caa7ff1125482022537cb886fd2af0de36e7959",
      "new_mode": 33188,
      "new_path": "tests/base_rules/py_executable_base_tests.bzl"
    },
    {
      "type": "modify",
      "old_id": "1aa7ff24299b3b132d52873d00259a805b6c19f6",
      "old_mode": 33188,
      "old_path": "tests/base_rules/py_info/py_info_tests.bzl",
      "new_id": "087b115eab7dc1dd4f4796b37b0b1114030fd45e",
      "new_mode": 33188,
      "new_path": "tests/base_rules/py_info/py_info_tests.bzl"
    },
    {
      "type": "modify",
      "old_id": "97216eceffa44dce63143e840d87e62b761d37b5",
      "old_mode": 33188,
      "old_path": "tests/support/py_executable_info_subject.bzl",
      "new_id": "6bedd8d0fe0cea42166fb89bbce530143efbc497",
      "new_mode": 33188,
      "new_path": "tests/support/py_executable_info_subject.bzl"
    },
    {
      "type": "modify",
      "old_id": "f526f5d563097c3d432cf7a828d4a18773bca48a",
      "old_mode": 33188,
      "old_path": "tests/support/py_info_subject.bzl",
      "new_id": "c45848ae1a2b9c6896ae459148b2e0cd15f34420",
      "new_mode": 33188,
      "new_path": "tests/support/py_info_subject.bzl"
    }
  ]
}
