)]}'
{
  "commit": "fa647c03cb47e442e1183ac2f34716e61b3aa138",
  "tree": "e40daba2db6dcf563f25a054354b97a6d271c99e",
  "parents": [
    "e340b539ce20d41ba88e6b3c9a77d868d58b71e4"
  ],
  "author": {
    "name": "Tim Saucer",
    "email": "timsaucer@gmail.com",
    "time": "Wed Sep 16 12:23:12 2026 -0400"
  },
  "committer": {
    "name": "Tim Saucer",
    "email": "timsaucer@gmail.com",
    "time": "Wed Sep 16 13:54:30 2026 -0400"
  },
  "message": "fix: refuse a declared pair written without its inner parentheses\n\n`__post_init__` catches `udfs\u003dfn` written for `udfs\u003d(fn,)` so the error\nlands in the extension library\u0027s own frame rather than deep inside\n`with_extensions`. The pair-shaped fields have the same mistake one level\nin — `udtfs\u003d(\"expand\", fn)` is a two-element tuple, so it normalized\nwithout complaint and surfaced later as `\u0027function\u0027 object is not\nsubscriptable`, naming neither the field nor the bundle.\n\nMark those fields in the field metadata and check each item is a\n`(str, value)` pair, normalizing it to a tuple like everything else here.\nA str item is rejected before unpacking: a two-letter name would\notherwise unpack into two characters and pass.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8227259dd6e3f15af62bb8c14487a7f5cc1d50e6",
      "new_mode": 33188,
      "new_path": "examples/datafusion-ffi-example/uv.lock"
    },
    {
      "type": "modify",
      "old_id": "452bc901b103557cc445141ed4f22ff8298ac5b3",
      "old_mode": 33188,
      "old_path": "python/datafusion/extensions.py",
      "new_id": "0181d0d1008e6706c95174250ea29bbb435f3b31",
      "new_mode": 33188,
      "new_path": "python/datafusion/extensions.py"
    },
    {
      "type": "modify",
      "old_id": "8eb2b25ed81ec1ac56a07c05978f827315d5fb13",
      "old_mode": 33188,
      "old_path": "python/tests/test_context.py",
      "new_id": "99e6902afe8e6662da15e4a2ebb7cf291a2c1c22",
      "new_mode": 33188,
      "new_path": "python/tests/test_context.py"
    }
  ]
}
