)]}'
{
  "commit": "ade3edfd93b58d8631ad50fed8009522654f2912",
  "tree": "3490901f3ccdf87505710c80ac510562e83e0584",
  "parents": [
    "a6f7f71dc91838527f772abba7d39a95ea2a4554"
  ],
  "author": {
    "name": "Richard Levasseur",
    "email": "richardlev@gmail.com",
    "time": "Sat Aug 15 12:35:00 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sat Aug 15 12:35:00 2026 -0700"
  },
  "message": "workflow(release): surface subprocess output and improve error handling in backport operations (#4056)\n\nWhen backporting changes or creating pull requests during release\nautomation, subprocess errors frequently hid command failure details\nbecause stdout and stderr were not captured in the raised exceptions.\nAdditionally, process logging relied on raw print statements and\ncleanup operations lacked diagnostic logs.\n\nTo improve debuggability and observability:\n- Capture and surface stdout and stderr in backport errors and\n  CreatePrError exceptions when PR creation fails.\n- Transition print calls to standard logging in backport processing.\n- Log cleanup actions explicitly within the changelog sync finally\n  block.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "7e19b2232c678e2a618662a8f080b11228612ec9",
      "old_mode": 33188,
      "old_path": "tests/tools/private/release/gh_test.py",
      "new_id": "4027edd6bd1617ee55f8359368d0b10809db9165",
      "new_mode": 33188,
      "new_path": "tests/tools/private/release/gh_test.py"
    },
    {
      "type": "modify",
      "old_id": "5c37e63a977d80a87107c1e3540b23dee7185dd9",
      "old_mode": 33188,
      "old_path": "tests/tools/private/release/process_backports_test.py",
      "new_id": "dd768400ba5bf519d1984c2232347714aa983a7d",
      "new_mode": 33188,
      "new_path": "tests/tools/private/release/process_backports_test.py"
    },
    {
      "type": "modify",
      "old_id": "651af24c2faf80202dc75aeb4b626575b9878bd2",
      "old_mode": 33188,
      "old_path": "tests/tools/private/release/release_test.py",
      "new_id": "f383c856fd85a87cf012edd2f912b99a9a6f505d",
      "new_mode": 33188,
      "new_path": "tests/tools/private/release/release_test.py"
    },
    {
      "type": "modify",
      "old_id": "48abbad8d45ff1c8c02b9008ed3ecf3be0552bab",
      "old_mode": 33188,
      "old_path": "tests/tools/private/release/utils_test.py",
      "new_id": "83faa7c00b89594e90315b42a90a6559883f26b7",
      "new_mode": 33188,
      "new_path": "tests/tools/private/release/utils_test.py"
    },
    {
      "type": "modify",
      "old_id": "c21041384ee2635c0f5dff0701e993b4ec44d1c3",
      "old_mode": 33188,
      "old_path": "tools/private/release/gh.py",
      "new_id": "dbe644c29f844a8fda2229254cb2722627708390",
      "new_mode": 33188,
      "new_path": "tools/private/release/gh.py"
    },
    {
      "type": "modify",
      "old_id": "4ad846c0acfaf86d5de44992ac053d9e3e0db8ac",
      "old_mode": 33188,
      "old_path": "tools/private/release/process_backports.py",
      "new_id": "ce1d54ee347d042e4cedb259c269ceb8f8933caf",
      "new_mode": 33188,
      "new_path": "tools/private/release/process_backports.py"
    },
    {
      "type": "modify",
      "old_id": "7f1896ecf4c4bed5a549a4f677d3621cdfd50de3",
      "old_mode": 33188,
      "old_path": "tools/private/release/release.py",
      "new_id": "416d9b54fd2a79bf853e83786e89330b9790f700",
      "new_mode": 33188,
      "new_path": "tools/private/release/release.py"
    },
    {
      "type": "modify",
      "old_id": "244138062ac0cde4aeb572f78cb14e2bee212026",
      "old_mode": 33188,
      "old_path": "tools/private/release/utils.py",
      "new_id": "b0573d2af7201207fcc79831b47f582277a5a1bc",
      "new_mode": 33188,
      "new_path": "tools/private/release/utils.py"
    }
  ]
}
