)]}'
{
  "commit": "aa81a7722b8291bbca6fada6337b292d2fddcd0b",
  "tree": "171557d907c77420e2247017cd3615d856f5416a",
  "parents": [
    "05e93bc86f1ac918ba562f69541d59bbd7938e34"
  ],
  "author": {
    "name": "vadikmironov",
    "email": "77026200+vadikmironov@users.noreply.github.com",
    "time": "Wed Nov 11 04:49:56 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Nov 11 04:49:56 2026 +0000"
  },
  "message": "feat(toolchains): support debug runtimes on Linux and macOS (#4471)\n\nFollow-up to #4442.\n\npython-build-standalone debug (`Py_DEBUG`) archives for Linux and macOS\nadd a `d` ABI flag to some names: `include/python3.14d` and\n`lib/libpython3.14d.so` (`.dylib` on macOS), or `td` for free-threaded\ndebug builds. The runtime repo only knows the release names, so a debug\nruntime registered with `python.single_version_platform_override` does\nnot work for C code: `current_py_cc_headers` fails with\n`Python.h: No such file or directory` and `current_py_cc_libs` with\n`missing input file \u0027...//:lib/libpython3.14.so\u0027`. On a macOS host, the\nrepo rule\u0027s `install_name_tool` step also looks for the release dylib.\n\nTo fix, the repo rule checks the extracted archive for the `d` include\ndir and passes that to the runtime macro, which uses the `d` names. The\nmacro also sets `abi_flags` on `py_runtime` and `py_cc_toolchain`,\nbecause `\u003cAUTO\u003e` only derives `t`. Extensions built against the debug\nheaders need a debug interpreter, so they get the debug SOABI (for\nexample `cpython-314d-x86_64-linux-gnu`) and wheel ABI tag (`cp314d`).\n\nWindows debug archives use other names (`python_d.exe`,\n`python314_d.dll`) and are not handled here. Will be addressed\nseparately.\n\n* Also registers a debug runtime for tests in `MODULE.bazel` and adds\n  `//tests/toolchains:debug_runtime_test`, which builds an extension\n  against it and imports it.\n\n---------\n\nCo-authored-by: Claude Fable 5.2 \u003cnoreply@anthropic.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "3227fba4e414c4d37ea1d57ceed84862d819c94b",
      "old_mode": 33188,
      "old_path": "MODULE.bazel",
      "new_id": "b7301c7291e9bc41ddab58f4199741d71ff81915",
      "new_mode": 33188,
      "new_path": "MODULE.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "607cf0dd1db3c4f8a408b6b0b567023bd032fed3",
      "new_mode": 33188,
      "new_path": "news/debug-runtime-unix-layout.added.md"
    },
    {
      "type": "modify",
      "old_id": "d61a040fe66b31fdc6d457d07f3ef8b07b81d47f",
      "old_mode": 33188,
      "old_path": "python/private/hermetic_runtime_repo_setup.bzl",
      "new_id": "516b1aba67506b17732a52a52d4db1fc54fbc9ec",
      "new_mode": 33188,
      "new_path": "python/private/hermetic_runtime_repo_setup.bzl"
    },
    {
      "type": "modify",
      "old_id": "5a895536c2256979e1d54c5b4bde33108a2cc45b",
      "old_mode": 33188,
      "old_path": "python/private/python_repository.bzl",
      "new_id": "3ada5dde48e20fe2cc60ebef472162f50b6cb001",
      "new_mode": 33188,
      "new_path": "python/private/python_repository.bzl"
    },
    {
      "type": "modify",
      "old_id": "45f43c89e23b912e763120406325635507b682e2",
      "old_mode": 33188,
      "old_path": "tests/support/BUILD.bazel",
      "new_id": "5060c56501beaf9afbb8bb2d41fd10d60da35214",
      "new_mode": 33188,
      "new_path": "tests/support/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "fbf2fe8eff3dfee683aa13fbe852da3c6f0352ee",
      "old_mode": 33188,
      "old_path": "tests/toolchains/BUILD.bazel",
      "new_id": "67796d0d48744a37602b0ed2d07a38ce3175c7ff",
      "new_mode": 33188,
      "new_path": "tests/toolchains/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "459aeda0581d640da950f4cfcc22bd27e2c50944",
      "new_mode": 33188,
      "new_path": "tests/toolchains/debug_ext.c"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "37b743abfa2ff41ba26c14e8cb9e331ad7ab09f0",
      "new_mode": 33188,
      "new_path": "tests/toolchains/debug_runtime_test.py"
    }
  ]
}
