)]}'
{
  "commit": "69ca97b314797be2c03eeced2e033f563156bb03",
  "tree": "43cc3054e8867c0e81370d5f279d11ff44c53883",
  "parents": [
    "2558dcdb4c90de41631399f2a155d987f7ee3a8f"
  ],
  "author": {
    "name": "Sotaro Hikita",
    "email": "70102274+lawofcycles@users.noreply.github.com",
    "time": "Sat May 02 01:07:32 2026 +0900"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri May 01 09:07:32 2026 -0700"
  },
  "message": "Fix DELETED manifest entry snapshot_id in OverwriteFiles (#3237)\n\n# Rationale for this change\nWhen _OverwriteFiles._deleted_entries() creates DELETED manifest\nentries, it now sets snapshot_id to the current (deleting) snapshot\u0027s ID\ninstead of retaining the original INSERT snapshot\u0027s ID.\n\nCloses #3236 \n\nAccording to the [Iceberg spec (Manifest Entry\nFields)](https://iceberg.apache.org/spec/#manifest-entry-fields),\n`snapshot_id` for a DELETED entry (status\u003d2) should be the snapshot ID\nin which the file was deleted. However,\n`_OverwriteFiles._deleted_entries()` was copying the original entry\u0027s\n`snapshot_id` (from the INSERT snapshot) into the new DELETED entry.\n\nThis caused downstream consumers that filter manifest entries by\n`snapshot_id` (e.g. Iceberg Java\u0027s `IncrementalChangelogScan`) to\nsilently miss DELETED files, breaking CDC pipelines.\n\n## Are these changes tested?\nAdded `test_manifest_entry_snapshot_id_after_partial_deletes` in\n`tests/integration/test_deletes.py`.\n\n## Are there any user-facing changes?\nN/A\n\n---------\n\nSigned-off-by: Sotaro Hikita \u003cbering1814@gmail.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "37d120969a486d64adb2170fa3bf615359a9c40f",
      "old_mode": 33188,
      "old_path": "pyiceberg/table/update/snapshot.py",
      "new_id": "1df4e64c24810db7064760131c3b6de809a9e232",
      "new_mode": 33188,
      "new_path": "pyiceberg/table/update/snapshot.py"
    },
    {
      "type": "modify",
      "old_id": "e3b487e465d4f4ade7dda25c6b6be4a7fa6b2233",
      "old_mode": 33188,
      "old_path": "tests/integration/test_deletes.py",
      "new_id": "c49689b7168744af60a433bad2e6c039cf1c990d",
      "new_mode": 33188,
      "new_path": "tests/integration/test_deletes.py"
    }
  ]
}
