)]}'
{
  "log": [
    {
      "commit": "aa1a1e03c800029a2b27b9d0e5aae99ef3853e27",
      "tree": "91199f59e6baad9ed944605dc553c8c04e6ee800",
      "parents": [
        "2c1a389f833d89bcbdac90b07dee8008b68e83fd"
      ],
      "author": {
        "name": "Praneet Nadella",
        "email": "praneetnadella@gmail.com",
        "time": "Fri Nov 13 15:37:48 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 18:37:48 2026 -0500"
      },
      "message": "Propagate inner ImportError in get_code_from_identifier. (#41314)\n\nNarrow the exception handler in get_code_from_identifier so that only ModuleNotFoundError where e.name matches the probed module_name (or a parent prefix when probing nested classes) continues the reverse prefix loop, while genuine ImportError and inner ModuleNotFoundError from broken transitive dependencies propagate to the caller."
    },
    {
      "commit": "2c1a389f833d89bcbdac90b07dee8008b68e83fd",
      "tree": "49d0275ad8aec15c60eed0d1e021da7ed9bfd448",
      "parents": [
        "e87570388b6922a3523b2ea6e0f6236f2337ad81"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Nov 13 17:59:31 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 17:59:31 2026 -0500"
      },
      "message": "Bump pillow (#41230)\n\nBumps [pillow](https://github.com/python-pillow/Pillow) from 12.3.0 to 13.0.0.\n- [Release notes](https://github.com/python-pillow/Pillow/releases)\n- [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst)\n- [Commits](https://github.com/python-pillow/Pillow/compare/12.3.0...13.0.0)\n\n---\nupdated-dependencies:\n- dependency-name: pillow\n  dependency-version: 13.0.0\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "e87570388b6922a3523b2ea6e0f6236f2337ad81",
      "tree": "8c5edcbab95752fd212092f0992fab1c3ea7765d",
      "parents": [
        "de8e16a702fb2d6515497940d5e0976ea8fbb5b7"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Fri Nov 13 15:04:43 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 15:04:43 2026 -0500"
      },
      "message": "Retry catalogCleanup on ForbiddenException in IcebergCatalogBaseIT (#41235)\n\n* Retry catalogCleanup on ForbiddenException in BigQueryMetastoreCatalogIT\n\n* Move catalogCleanup ForbiddenException retry into IcebergCatalogBaseIT"
    },
    {
      "commit": "de8e16a702fb2d6515497940d5e0976ea8fbb5b7",
      "tree": "d3d93b9c6d8d5dbd7aa36361b66190aaeb690091",
      "parents": [
        "f42ba759f391228a73a9cbd0ee9f3083fbe2fc3f"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Fri Nov 13 15:04:19 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 15:04:19 2026 -0500"
      },
      "message": "Retry Pub/Sub topic and subscription creation in TestPubsub and TestPubsubSignal (#41064)\n\n* Retry Pub/Sub topic and subscription creation in TestPubsub and TestPubsubSignal\n\n* Retry Pub/Sub topic and subscription creation in PubsubWriteIT"
    },
    {
      "commit": "f42ba759f391228a73a9cbd0ee9f3083fbe2fc3f",
      "tree": "f5e25246b2869256d44bf21ba2e70ae1639f08c1",
      "parents": [
        "6a0158c7e3ec80257f6f006b6598da48a47c4ba5"
      ],
      "author": {
        "name": "Chamikara Jayalath",
        "email": "chamikaramj@gmail.com",
        "time": "Fri Nov 13 11:07:13 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 11:07:13 2026 -0800"
      },
      "message": "DeltaIO CDC read ensures that CDF is enabled (#41253)"
    },
    {
      "commit": "6a0158c7e3ec80257f6f006b6598da48a47c4ba5",
      "tree": "9a53d4577b1d951d51c3d9c8beeb3c2f33aad73b",
      "parents": [
        "23012134b493eb559a630c4098a3a40cf8600a62"
      ],
      "author": {
        "name": "Rishavbhattarai",
        "email": "67967801+Rishavbhattarai@users.noreply.github.com",
        "time": "Sat Nov 14 00:44:07 2026 +0545"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 10:59:07 2026 -0800"
      },
      "message": "Port ReadSpannerSchemaTest off DoFnTester (#41138)\n\nBoth tests now run ReadSpannerSchema through the test\u0027s TestPipeline,\nseeded with a null element and with the dialect as a real side input,\nthe way SpannerIO wires it. The existing checks move into a shared\nPAssert.satisfies helper.\n\nFixes #18694"
    },
    {
      "commit": "23012134b493eb559a630c4098a3a40cf8600a62",
      "tree": "238d426107e85d8cab3e3a008c12d11b654f1ad9",
      "parents": [
        "3514ee83672945796daee1ab4a45039c0c90993c"
      ],
      "author": {
        "name": "Tobias Kaymak",
        "email": "tobias.kaymak@gmail.com",
        "time": "Fri Nov 13 19:22:42 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 13:22:42 2026 -0500"
      },
      "message": "[#40949] Spark 4 streaming: stateless ParDo with additional outputs (#41220)"
    },
    {
      "commit": "3514ee83672945796daee1ab4a45039c0c90993c",
      "tree": "57ef077bae1d09873fbd0d62e6b8971783893e61",
      "parents": [
        "4d97ba6a44e5d57b085ba2f7a89de53c520f39df"
      ],
      "author": {
        "name": "Tobias Kaymak",
        "email": "tobias.kaymak@gmail.com",
        "time": "Fri Nov 13 19:21:46 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 13:21:46 2026 -0500"
      },
      "message": "[#41297] Spark 4 streaming: disable exchange reuse for streaming queries (#41307)"
    },
    {
      "commit": "4d97ba6a44e5d57b085ba2f7a89de53c520f39df",
      "tree": "a26e3899dad5dc123aa07db6b1ca34fb1c772e5b",
      "parents": [
        "f3c0ca66dd88d47e256bd04a4e9147dd1fad1b51"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Nov 13 11:22:42 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 11:22:42 2026 -0500"
      },
      "message": "Bump github.com/aws/smithy-go from 1.28.8 to 1.28.9 in /sdks (#41263)\n\nBumps [github.com/aws/smithy-go](https://github.com/aws/smithy-go) from 1.28.8 to 1.28.9.\n- [Release notes](https://github.com/aws/smithy-go/releases)\n- [Changelog](https://github.com/aws/smithy-go/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/aws/smithy-go/compare/v1.28.8...v1.28.9)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/aws/smithy-go\n  dependency-version: 1.28.9\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "f3c0ca66dd88d47e256bd04a4e9147dd1fad1b51",
      "tree": "95a369bf70ee8e14b795bece92e5d7157fcd17ea",
      "parents": [
        "2ca118b6aa2eeb3ca136b89513b2b97a24ef0397"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Fri Nov 13 10:36:44 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 10:36:44 2026 -0500"
      },
      "message": "[Python] Optimize AvroRowWriter.tell and _split_table_spec (#41060)\n\n* Optimize _split_table_spec regexes, BigQueryWrapper.insert_rows, and AvroRowWriter.tell\n\n* Format with yapf, check str keys and int64 bounds in insert_rows, and test AvroRowWriter.tell\n\n* Revert RowAsDictJsonCoder.decode change to keep UTF-8 decode fast path\n\n* Remove BigQueryWrapper.insert_rows JSON-safe fast path per review"
    },
    {
      "commit": "2ca118b6aa2eeb3ca136b89513b2b97a24ef0397",
      "tree": "53ba99fed53a854939c2c535cd7e54ed13c0edcc",
      "parents": [
        "4aaf17b17ed927a08bccdb889be0a56a2482dcc8"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Nov 13 10:31:42 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 10:31:42 2026 -0500"
      },
      "message": "Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /sdks (#41264)\n\nBumps [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) from 1.23.22 to 1.23.23.\n- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)\n- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/pipes/v1.23.22...feature/s3/manager/v1.23.23)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager\n  dependency-version: 1.23.23\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "4aaf17b17ed927a08bccdb889be0a56a2482dcc8",
      "tree": "1bd5f81bd3bcdcb84b4ba1a517bb9be16eff5c26",
      "parents": [
        "d84ac4df4d85e2db9eeadeac2f60b7538a6d9e25"
      ],
      "author": {
        "name": "Jack McCluskey",
        "email": "34928439+jrmccluskey@users.noreply.github.com",
        "time": "Fri Nov 13 10:19:07 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 10:19:07 2026 -0500"
      },
      "message": "Update ML Orchestration TFX Example (#41181)"
    },
    {
      "commit": "d84ac4df4d85e2db9eeadeac2f60b7538a6d9e25",
      "tree": "d7b1625e65533c3a9b7dd1dcc36cad91f4667299",
      "parents": [
        "d2fee5a4b479ecfe5654caafcdb06faa32f07afb"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Nov 13 09:56:18 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 09:56:18 2026 -0500"
      },
      "message": "Bump golang.org/x/text from 0.43.0 to 0.44.0 in /sdks (#41266)\n\nBumps [golang.org/x/text](https://github.com/golang/text) from 0.43.0 to 0.44.0.\n- [Release notes](https://github.com/golang/text/releases)\n- [Commits](https://github.com/golang/text/compare/v0.43.0...v0.44.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/text\n  dependency-version: 0.44.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "d2fee5a4b479ecfe5654caafcdb06faa32f07afb",
      "tree": "e6540804556f4d8972685674cfc76bd2e5048586",
      "parents": [
        "37ae539b707576282b6a29c413795e8e6377c53e"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Fri Nov 13 09:55:47 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 09:55:47 2026 -0500"
      },
      "message": "Scope shared TestDataflowRunner staging directory by UTC date (#41258)\n\n* Re-stage Dataflow packages older than 1 day in PackageUtil\n\n* Scope shared TestDataflowRunner staging directory by UTC date instead of modifying PackageUtil"
    },
    {
      "commit": "37ae539b707576282b6a29c413795e8e6377c53e",
      "tree": "bb8613428e5b8469a2dd675982d8d64c227f8de6",
      "parents": [
        "2a7c56bacb124cadcb9e249a16d679f858962d1f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Nov 13 09:54:21 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 09:54:21 2026 -0500"
      },
      "message": "Bump github.com/aws/aws-sdk-go-v2/credentials in /sdks (#41262)\n\nBumps [github.com/aws/aws-sdk-go-v2/credentials](https://github.com/aws/aws-sdk-go-v2) from 1.20.16 to 1.20.17.\n- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)\n- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/credentials/v1.20.16...credentials/v1.20.17)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/aws/aws-sdk-go-v2/credentials\n  dependency-version: 1.20.17\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "2a7c56bacb124cadcb9e249a16d679f858962d1f",
      "tree": "32723ce155fcd8d0a290d1b71cddfd820f1531ef",
      "parents": [
        "29adb3b42c5058d6755f0757e0649e64ff4f02ec"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Fri Nov 13 09:37:07 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 09:37:07 2026 -0500"
      },
      "message": "Sleep between create_stream retry attempts when waiting for LocalStack in Kinesis ITs (#41204)\n\n* Sleep between create_stream retry attempts when waiting for LocalStack in Kinesis ITs\n\n* Keep retries\u003d10 and post-create sleep, add comment on except sleep"
    },
    {
      "commit": "29adb3b42c5058d6755f0757e0649e64ff4f02ec",
      "tree": "816ec127209c1181b3df776c42b6d52df68b3d03",
      "parents": [
        "1f7709ae403fd907fecaaedc85c059fac40fdee6"
      ],
      "author": {
        "name": "Vishal More",
        "email": "httpsvishal07@gmail.com",
        "time": "Fri Nov 13 20:02:38 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 09:32:38 2026 -0500"
      },
      "message": "Fix Flatten schema unification ordering and type degradation  (#41239)\n\n* [YAML] Fix Flatten schema unification ordering and type degradation (#41238)\n\n* Move unittest.main() to end of file in yaml_provider_unit_test.py\n\n* Update CHANGES.md\n\n---------\n\nCo-authored-by: Derrick Williams \u003cderrickaw@google.com\u003e"
    },
    {
      "commit": "1f7709ae403fd907fecaaedc85c059fac40fdee6",
      "tree": "0ab2ecdd672b15e405a14f31e1771703d7c8a21a",
      "parents": [
        "057c337c7371fc94f433372569cb9f118aa65078"
      ],
      "author": {
        "name": "Tarun Annapareddy",
        "email": "tannapareddy@google.com",
        "time": "Fri Nov 13 05:43:55 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 08:43:55 2026 -0500"
      },
      "message": "Make Default Bucket Check Strict (#41252)"
    },
    {
      "commit": "057c337c7371fc94f433372569cb9f118aa65078",
      "tree": "a09f64bc568f417e703622d1ac28f040fc9da239",
      "parents": [
        "ed6b89b9250d1e4cf6fdb72b12030898d2a014c7"
      ],
      "author": {
        "name": "Maksym Tymoshyk",
        "email": "maksym.tymoshyk@gmail.com",
        "time": "Fri Nov 13 15:33:56 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 08:33:56 2026 -0500"
      },
      "message": "Point drain doc links to the programming guide and update capability matrix drain row (#41237)"
    },
    {
      "commit": "ed6b89b9250d1e4cf6fdb72b12030898d2a014c7",
      "tree": "3682e6763599bcb91a96da217d3fc3509579c78b",
      "parents": [
        "46b2794908745c7539146c19833fe461423855bb"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Fri Nov 13 08:33:28 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 08:33:28 2026 -0500"
      },
      "message": "Clone TransformWithState stateful processors across sibling streaming queries (#41137)\n\n* Clone TransformWithState stateful processors across sibling streaming queries\n\n* Use BeamStatefulProcessor.copy() instead of SerializableUtils.clone across leaves\n\n* Add TODO(#41198) comment on expected counter value in testStatefulParDoSharedAcrossMultipleLeaves"
    },
    {
      "commit": "46b2794908745c7539146c19833fe461423855bb",
      "tree": "9323320932d0da41a38784244835735ce7d1ec1e",
      "parents": [
        "d7d31e96923dcb0cdc6097d30cd8a1a1017d1d67"
      ],
      "author": {
        "name": "Jay Choukikar",
        "email": "jaychoukiker@gmail.com",
        "time": "Fri Nov 13 16:46:19 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 13 06:16:19 2026 -0500"
      },
      "message": "Validate the SlidingWindows period in the Python SDK (#40925)"
    },
    {
      "commit": "d7d31e96923dcb0cdc6097d30cd8a1a1017d1d67",
      "tree": "b0f44c71b180e944c5ca64581a3e5f77f94c9149",
      "parents": [
        "9fdd73db7e99221602ca0065fa405d9847d0a1dc"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Thu Nov 12 23:26:59 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 23:26:59 2026 -0500"
      },
      "message": "Apply Spotless formatting to BeamSqlLine.java (#41261)"
    },
    {
      "commit": "9fdd73db7e99221602ca0065fa405d9847d0a1dc",
      "tree": "4088d9c20d5caadab5f7d916b28c0d4079a0e226",
      "parents": [
        "fa1d4673cf4bb83cae902f5a583d6529b7f1f52d"
      ],
      "author": {
        "name": "Divyansh Yadav",
        "email": "anshmcs@gmail.com",
        "time": "Fri Nov 13 09:53:29 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 23:23:29 2026 -0500"
      },
      "message": "[Spark] Default storage level to MEMORY_ONLY when no Java runner is set (#41080) (#41236)"
    },
    {
      "commit": "fa1d4673cf4bb83cae902f5a583d6529b7f1f52d",
      "tree": "653c94e9e7f76ff88c86455346c75f7202e89b33",
      "parents": [
        "382ff70315128f99c6804a1638fd328d0cc26bd5"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Thu Nov 12 22:23:11 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 22:23:11 2026 -0500"
      },
      "message": "Retry docker run on TimeoutException in DockerCommand (#41167)\n\n* Skip docker pull when image is local and retry docker run on timeout in DockerCommand\n\n* Propagate InterruptedException and pass -f {{.Id}} in isImagePresentLocally\n\n* Keep only docker run timeout retry and remove isImagePresentLocally check"
    },
    {
      "commit": "382ff70315128f99c6804a1638fd328d0cc26bd5",
      "tree": "3201e48f9909ce40340bd70464ac5c07d8de33aa",
      "parents": [
        "8b799101a8e1879c185e826bd9dbf58d1af1bbdc"
      ],
      "author": {
        "name": "Derrick Williams",
        "email": "derrickaw@google.com",
        "time": "Thu Nov 12 22:06:07 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 22:06:07 2026 -0500"
      },
      "message": "Add `summarize-failures` action to use on PRs (#41208)\n\n* pr summary failure\n\n* add failure summary action\n\n* update design to yml file\n\n* update based on dry runs\n\n* add zizmor comment\n\n* remove bespoke context gathering and pushed to gemini\n\n* update setup\n\n* update logic to not pin pass and to remove old failure log\n\n* address zizmor and gemini comments\n\n* remove special case for user commands\n\n* update guard to workflow"
    },
    {
      "commit": "8b799101a8e1879c185e826bd9dbf58d1af1bbdc",
      "tree": "4b523b718e4d9d54b295b69cdccdbcc50bea4c10",
      "parents": [
        "b73fea30d7d0761dbe6a060f97a2d40461bb0f18"
      ],
      "author": {
        "name": "Ahmed Abualsaud",
        "email": "65791736+ahmedabu98@users.noreply.github.com",
        "time": "Thu Nov 12 19:43:08 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 19:43:08 2026 -0600"
      },
      "message": "use ctrl+c to stop a shell query (#41257)"
    },
    {
      "commit": "b73fea30d7d0761dbe6a060f97a2d40461bb0f18",
      "tree": "bdfe49cd39743034f06759e6b128d07981f458f9",
      "parents": [
        "4fc7887cf869ab27ba59fb17904dfc467e85ca63"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Thu Nov 12 19:49:31 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 19:49:31 2026 -0500"
      },
      "message": "Pin pyarrow\u003c26 in run_perf_alert_tool.yml for NumPy 1 compatibility (#41229)\n\n* Pin pyarrow\u003c26 in run_perf_alert_tool.yml for NumPy 1 compatibility\n\n* Upgrade numpy to \u003e\u003d2.0.0,\u003c2.5.0 instead of pinning pyarrow\u003c26 in run_perf_alert_tool.yml\n\n* Pin pyarrow\u003c26 in a single pip install step with explanatory comment and TODO"
    },
    {
      "commit": "4fc7887cf869ab27ba59fb17904dfc467e85ca63",
      "tree": "2f1b63eb4469a13f3ae0ff1a3b8556adf98c2c3c",
      "parents": [
        "3b8d8860529bd718c16b6cc26368bc6c2aed3d06"
      ],
      "author": {
        "name": "Chamikara Jayalath",
        "email": "chamikaramj@gmail.com",
        "time": "Thu Nov 12 16:12:35 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 16:12:35 2026 -0800"
      },
      "message": "Adds Delta Lake CDC support to Beam SQL (#41249)"
    },
    {
      "commit": "3b8d8860529bd718c16b6cc26368bc6c2aed3d06",
      "tree": "1cd82e82f20346a43850789feb62d4bc46359786",
      "parents": [
        "268f76ab261d72888971467c671054cb4ef4f56f"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Thu Nov 12 17:46:49 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 17:46:49 2026 -0500"
      },
      "message": "Harden RabbitMQ deployment and readiness wait for SparkReceiverIOIT (#41063)\n\n* Harden RabbitMQ deployment and readiness wait for SparkReceiverIOIT\n\n* Add TCP readiness check and retry/recovery handling in SparkReceiverIOIT.writeToRabbitMq\n\n* Disable automatic recovery in writeToRabbitMq per review feedback"
    },
    {
      "commit": "268f76ab261d72888971467c671054cb4ef4f56f",
      "tree": "fbad342d4aaca9b0718bd26df1701536039fc773",
      "parents": [
        "45f89837c604bce23704f51ab95baf12e7d87fec"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Thu Nov 12 16:19:08 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 16:19:08 2026 -0500"
      },
      "message": "Increase Postgres LoadBalancer IP wait timeout in JDBC and HadoopFormat PerformanceTests (#41205)"
    },
    {
      "commit": "45f89837c604bce23704f51ab95baf12e7d87fec",
      "tree": "c27186cb44c78f5823cb73e0cba3a91faad0a3eb",
      "parents": [
        "f88ae160fbd1c9baa0cd0a27fbadd19ff808f177"
      ],
      "author": {
        "name": "Ahmed Abualsaud",
        "email": "65791736+ahmedabu98@users.noreply.github.com",
        "time": "Thu Nov 12 14:36:18 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 12:36:18 2026 -0800"
      },
      "message": "[IcebergIO] Sort CDC sink windows with the native sorter (#40980)\n\n* use native sorter\n\n* close stream on error"
    },
    {
      "commit": "f88ae160fbd1c9baa0cd0a27fbadd19ff808f177",
      "tree": "ce335c8a8de72c035347ceba6386d47450e4984c",
      "parents": [
        "164cc57534b491bada8fcce9da148fb8a180198d"
      ],
      "author": {
        "name": "Mohammad Sohail Shaikh",
        "email": "122166523+sohailshk@users.noreply.github.com",
        "time": "Fri Nov 13 02:02:37 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 15:32:37 2026 -0500"
      },
      "message": "[Python] Interpolate ValueError messages in ml anomaly detectors and Vertex AI handler (#41088)"
    },
    {
      "commit": "164cc57534b491bada8fcce9da148fb8a180198d",
      "tree": "cfe596c07379a9f4d5bba6a93bae4e2e6e365d1c",
      "parents": [
        "12c382316c016ca6c079d65d8be8179a1655dea3"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Thu Nov 12 15:21:44 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 15:21:44 2026 -0500"
      },
      "message": "Use current timestamp for streaming ReadFromIcebergCDC to_timestamp in YAML ITs (#41145)\n\n* Use current timestamp for streaming ReadFromIcebergCDC to_timestamp in YAML ITs\n\n* Add 1000ms to NOW_MS instead of sleeping before pipeline execution"
    },
    {
      "commit": "12c382316c016ca6c079d65d8be8179a1655dea3",
      "tree": "8f3d5f16914458007eebb3ddf2b6357660270e6e",
      "parents": [
        "8bac5851356b527202a124d933ae7460cbb51083"
      ],
      "author": {
        "name": "Ahmed Abualsaud",
        "email": "65791736+ahmedabu98@users.noreply.github.com",
        "time": "Thu Nov 12 13:46:03 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 11:46:03 2026 -0800"
      },
      "message": "remove hadoop dep from orc-core (#41001)"
    },
    {
      "commit": "8bac5851356b527202a124d933ae7460cbb51083",
      "tree": "8bd424d234b0595635c11188a63a0d2d2fe6ecfd",
      "parents": [
        "1cabbd79927cf29dffe637e640ca7e438433029d"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Thu Nov 12 12:10:08 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 12:10:08 2026 -0500"
      },
      "message": "Remove GPU container requirements generation infrastructure (#41242)"
    },
    {
      "commit": "1cabbd79927cf29dffe637e640ca7e438433029d",
      "tree": "20c1dbdbff2923f8180153961624152ece141be3",
      "parents": [
        "bc9e036cf46479bedeb24bd930092cdb4431dd93"
      ],
      "author": {
        "name": "Derrick Williams",
        "email": "derrickaw@google.com",
        "time": "Thu Nov 12 11:35:22 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 11:35:22 2026 -0500"
      },
      "message": "[yaml] add pubsub to splunk e2e and example tests (#40885)\n\n* add pubsub to splunk e2e and example tests\n\n* address gemini comments"
    },
    {
      "commit": "bc9e036cf46479bedeb24bd930092cdb4431dd93",
      "tree": "25b37e6dbbf5b63e248d1e168752c001888fee13",
      "parents": [
        "e8dc331a523b9b66398c821fb0561371918d4770"
      ],
      "author": {
        "name": "Ali Ebrahim",
        "email": "aebrahim@users.noreply.github.com",
        "time": "Thu Nov 12 07:57:30 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 10:57:30 2026 -0500"
      },
      "message": "Bump beartype upper bound (#41221)"
    },
    {
      "commit": "e8dc331a523b9b66398c821fb0561371918d4770",
      "tree": "7caa0f57ba267b60b154d13114481e565fd9f5c5",
      "parents": [
        "b8329d6d7936ed4e36d01f6e5d9200aae22257de"
      ],
      "author": {
        "name": "Jack McCluskey",
        "email": "34928439+jrmccluskey@users.noreply.github.com",
        "time": "Thu Nov 12 10:52:12 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 10:52:12 2026 -0500"
      },
      "message": "Fix forward references that do not resolve to types (#41184)\n\n* Fix forward references that do not resolve to types\n\n* yapf\n\n* Fix extra broken edge cases\n\n* Apply suggestion from @claudevdm\n\nCo-authored-by: claudevdm \u003c33973061+claudevdm@users.noreply.github.com\u003e\n\n---------\n\nCo-authored-by: claudevdm \u003c33973061+claudevdm@users.noreply.github.com\u003e"
    },
    {
      "commit": "b8329d6d7936ed4e36d01f6e5d9200aae22257de",
      "tree": "3784edb05d85a71766a678c7bbc95572fb034c76",
      "parents": [
        "2024db98a9b6bb71f11b8f9ca673515e297109d0"
      ],
      "author": {
        "name": "Vishal More",
        "email": "httpsvishal07@gmail.com",
        "time": "Thu Nov 12 20:47:22 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 10:17:22 2026 -0500"
      },
      "message": "[YAML] Fix SQL-backed Join generating invalid syntax when joining 3+ inputs (#41068)\n\n* [YAML] Fix SQL-backed Join generating invalid syntax when joining 3+ inputs (#41052)\n\n* [YAML] Fix yapf formatting and mock invocation in SqlJoinQueryTest (#41052)\n\n---------\n\nCo-authored-by: Derrick Williams \u003cderrickaw@google.com\u003e"
    },
    {
      "commit": "2024db98a9b6bb71f11b8f9ca673515e297109d0",
      "tree": "0460ea499dc1271e4e4e7c2a9a395876f3b1a8f5",
      "parents": [
        "bfb59af3646d1cbc03ff603668ecf4a3579e3332"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Thu Nov 12 09:54:58 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 09:54:58 2026 -0500"
      },
      "message": "Wait for Flink mini cluster REST server before submitting uber jar (#41046)\n\n* Wait for Flink mini cluster REST server before submitting uber jar\n\n* Clean up ENV_DIR if Flink mini cluster exits or times out during startup\n\n* Document kill -0 liveness check in test_flink_uber_jar.sh"
    },
    {
      "commit": "bfb59af3646d1cbc03ff603668ecf4a3579e3332",
      "tree": "511faf10c3bd401ddf798253b43187096efa5073",
      "parents": [
        "1878a5ba3aafe4b38c35eab08bdba0f20660d91d"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Thu Nov 12 09:53:22 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 12 09:53:22 2026 -0500"
      },
      "message": "Wait for datanode SSH readiness before starting HDFS in hdfs-multi-datanode-cluster.yml (#41119)\n\n* Wait for datanode SSH readiness before starting HDFS in hdfs-multi-datanode-cluster.yml\n\n* Exit non-zero if datanode SSH readiness loop times out"
    },
    {
      "commit": "1878a5ba3aafe4b38c35eab08bdba0f20660d91d",
      "tree": "4e26a68243f72a353fb2924192e34e458ee728b4",
      "parents": [
        "3a84bd59a42027598f4fe9649d51fe0a845176ea"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Wed Nov 11 22:00:00 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 22:00:00 2026 -0500"
      },
      "message": "Inline and remove _OutputHandler._handle_tagged_output (#41209)"
    },
    {
      "commit": "3a84bd59a42027598f4fe9649d51fe0a845176ea",
      "tree": "a99366435ad1cdd759a508abc11108cc786b385e",
      "parents": [
        "2e5d84ea8d17f38aaff662d6567601d63c9f155c"
      ],
      "author": {
        "name": "Kumar Abhinandan",
        "email": "kumarabhinandan2000@gmail.com",
        "time": "Thu Nov 12 07:54:49 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 21:24:49 2026 -0500"
      },
      "message": "[Python] Default WriteToJson double_precision to 15 to avoid silently rounding floats (#41154)"
    },
    {
      "commit": "2e5d84ea8d17f38aaff662d6567601d63c9f155c",
      "tree": "560b931a345dd2f9284e13bfc7ac780babf5e0f6",
      "parents": [
        "73b12026bf696e86612004606a4615378e23cb97"
      ],
      "author": {
        "name": "Arun Pandian",
        "email": "pandiana@google.com",
        "time": "Wed Nov 11 14:59:44 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 23:59:44 2026 +0100"
      },
      "message": "[Dataflow Streaming] [MultiKey] Handle work cancellation exceptions in WorkFailureProcessor. (#40955)\n\n* Handle work cancellation exceptions in WorkFailureProcessor.\n\nWhen processing a multi-key bundle, if one key fails due to a Windmill work cancellation (WorkCancellingException or WorkItemCancelledException), unaffected sibling keys in the batch must not be misclassified as uncaught user exceptions.\n\nThis change adds  WorkItemCancelledException.isWorkItemCancelledException(), updates WorkFailureProcessor.evaluateRetry() to return RetryEvaluation.RETRY_LOCALLY without reporting the failure or sleeping. ExceptionUtils.hasCause helper is added to safely traverse Throwable causes without loops."
    },
    {
      "commit": "73b12026bf696e86612004606a4615378e23cb97",
      "tree": "99a09e396ba03fad8f098d57c4b02fe5260cbb50",
      "parents": [
        "f22ba80acfdcf68b0f7f35860ff81aead69cc71f"
      ],
      "author": {
        "name": "Mohammad Sohail Shaikh",
        "email": "122166523+sohailshk@users.noreply.github.com",
        "time": "Thu Nov 12 03:49:11 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 14:19:11 2026 -0800"
      },
      "message": "[Python] Handle a missing initial watermark in MonotonicWatermarkEstimator (#41195)"
    },
    {
      "commit": "f22ba80acfdcf68b0f7f35860ff81aead69cc71f",
      "tree": "f3f1ac343411cf4d3f49b05d5832144c13d8f64c",
      "parents": [
        "2ac5664a1cd02670c4dde520197628b1b9c28bcd"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Wed Nov 11 16:05:53 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 16:05:53 2026 -0500"
      },
      "message": "Pass reshuffle\u003dFalse to beam.Create in TestBigQueryFileLoads waiting job tests (#41206)\n\n* Pass reshuffle\u003dFalse to beam.Create in TestBigQueryFileLoads waiting job tests\n\n* Format bigquery_file_loads_test.py with yapf"
    },
    {
      "commit": "2ac5664a1cd02670c4dde520197628b1b9c28bcd",
      "tree": "0eb516f4ff50a20a4b70754525d255fb076e9d56",
      "parents": [
        "a01bffee50f514be883f67ce8f835862164bcfd8"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Wed Nov 11 16:04:57 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 16:04:57 2026 -0500"
      },
      "message": "[Python] Optimize _OutputHandler.handle_process_outputs and handle_process_batch_outputs (#41162)\n\n* Optimize _OutputHandler.handle_process_batch_outputs\n\n* Include _OutputHandler.handle_process_outputs optimizations alongside handle_process_batch_outputs\n\n* Revert inlining of _handle_tagged_output to split into a separate PR"
    },
    {
      "commit": "a01bffee50f514be883f67ce8f835862164bcfd8",
      "tree": "3dd00193fd4e05a39ed71764c782e7b9f82960b1",
      "parents": [
        "3c5dc31b2e258e0c7e72bd4163561d3f252373d0"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Wed Nov 11 16:03:44 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 16:03:44 2026 -0500"
      },
      "message": "Check holdTimestamp on overwritten event-time timers in Prism (#41146)\n\n* Use current timestamp for streaming ReadFromIcebergCDC to_timestamp in YAML ITs\n\n* Check holdTimestamp on overwritten event-time timers and honor cleared processing-time timers in Prism\n\n* Revert \"Use current timestamp for streaming ReadFromIcebergCDC to_timestamp in YAML ITs\"\n\nThis reverts commit a974fe2488eaca63a33a0622e83afde490b1ccea.\n\n* Remove processing-time timer clearing changes covered by #41073\n\n* Run gofmt on elementmanager_test.go"
    },
    {
      "commit": "3c5dc31b2e258e0c7e72bd4163561d3f252373d0",
      "tree": "285163309530798815222df4f350b372c64d33db",
      "parents": [
        "e128f4f24553712eb440377794ac996a68a740f2"
      ],
      "author": {
        "name": "Yashvardhan Thanvi",
        "email": "yashvt9404@gmail.com",
        "time": "Thu Nov 12 02:25:22 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 15:55:22 2026 -0500"
      },
      "message": "[Python] Only give an unknown option a value that directly follows it (#40647)\n\n* [Python] Only give an unknown option a value that directly follows it\n\nWith retain_unknown_options, get_all_options registers each unknown flag\nwith argparse and parses the flags again. Whether an unknown flag takes a\nvalue was decided from the list of unknown args alone, but those are not\nnecessarily adjacent in the original flags. For\n\n  --unknown_flag --job_name\u003dfoo bar\n\nthe unknown args are [\u0027--unknown_flag\u0027, \u0027bar\u0027], so --unknown_flag was\nregistered as taking a value, and parsing the original flags again failed\nwith \"expected one argument\". This also made Pipeline.run() fail.\n\nLook up where each unknown arg came from in the original flags and only\ntreat an unknown flag as taking a value when that value directly follows\nit there. A flag written as --flag\u003dvalue always uses its inline value, so\nit is no longer registered under the name \"--flag\u003dvalue\" when a stray\nargument follows it.\n\nFixes #22434\n\n* Cover reading unknown options from sys.argv and _find_positions\n\nCodecov flagged three lines of the fix as untested: the sys.argv path taken when no flags are passed, and an arg that _find_positions does not find.\n\n* Annotate _find_positions and move the value check into a helper\n\nReview follow-up: add type annotations to _find_positions and replace the inline boolean expression in get_all_options with _has_separate_value, which has a docstring. No behavior change."
    },
    {
      "commit": "e128f4f24553712eb440377794ac996a68a740f2",
      "tree": "e3526979fe1d67feb0cdaf3237a215877997ba22",
      "parents": [
        "af806f550e3d5f672296ae89bee1ce215a3d0db3"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Wed Nov 11 15:18:42 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 15:18:42 2026 -0500"
      },
      "message": "Check BackgroundCachingJob.is_done_or_running atomically under _result_lock (#41144)\n\n* Check BackgroundCachingJob.is_done_or_running atomically under _result_lock\n\n* Keep PR focused strictly on atomic is_done_or_running check"
    },
    {
      "commit": "af806f550e3d5f672296ae89bee1ce215a3d0db3",
      "tree": "ac385323b7abf26a6b5de8857d38ebb8b4c61c7e",
      "parents": [
        "e62a1de1b110c071dd7bf5b9517391c54631f2c3"
      ],
      "author": {
        "name": "Yi Hu",
        "email": "yathu@google.com",
        "time": "Wed Nov 11 14:22:59 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 14:22:59 2026 -0500"
      },
      "message": "Republish released docker containers daily (#41218)"
    },
    {
      "commit": "e62a1de1b110c071dd7bf5b9517391c54631f2c3",
      "tree": "427fae81728a07617424e0a1015587e853e6e624",
      "parents": [
        "b9931c3d164521ca10a277192d3c382bec07ab7f"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Wed Nov 11 14:01:07 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 14:01:07 2026 -0500"
      },
      "message": "Assert at-least-once record count for STREAMING_INSERTS in BigQueryIOIT (#41166)"
    },
    {
      "commit": "b9931c3d164521ca10a277192d3c382bec07ab7f",
      "tree": "ffaa5a9e78ec4754379913eccdb0cf526d6380b3",
      "parents": [
        "519a74ee36f0d42eeea444949e6ef6ffb5191309"
      ],
      "author": {
        "name": "Rishavbhattarai",
        "email": "67967801+Rishavbhattarai@users.noreply.github.com",
        "time": "Thu Nov 12 00:31:29 2026 +0545"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 10:46:29 2026 -0800"
      },
      "message": "Port BigQueryIOWriteTest off DoFnTester (#40871)\n\n* Port BigQueryIOWriteTest off DoFnTester\n\ntestWritePartition now runs WritePartition through the test\u0027s\nTestPipeline, with the temp file prefix as a real side input and the\nsame output coders BatchLoads sets. The existing checks move into a\nPAssert.satisfies on the expected output tag.\n\nFixes #18689\n\n* Assert the unselected WritePartition output is empty"
    },
    {
      "commit": "519a74ee36f0d42eeea444949e6ef6ffb5191309",
      "tree": "60a9830722daadf87cc8c8a0f6e347b39d791fa5",
      "parents": [
        "6b54230bd6831e25cd0e792b6b6e94c7cb971c14"
      ],
      "author": {
        "name": "Divyansh Yadav",
        "email": "anshmcs@gmail.com",
        "time": "Wed Nov 11 22:11:51 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 11:41:51 2026 -0500"
      },
      "message": "Update go version to 1.26.10 (#41056) (#41187)"
    },
    {
      "commit": "6b54230bd6831e25cd0e792b6b6e94c7cb971c14",
      "tree": "1f4e8f15b1baf8bb526205d094a157f2504ad915",
      "parents": [
        "c3bcccfd227685aad0e58f4ab3ff49e841637d91"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Wed Nov 11 11:38:47 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 11:38:47 2026 -0500"
      },
      "message": "Optimize DataInputOperation.process_encoded and cache coders in FnApiUserStateContext (#41173)"
    },
    {
      "commit": "c3bcccfd227685aad0e58f4ab3ff49e841637d91",
      "tree": "c91927a750748fef4b97c214e906a3b8be61f321",
      "parents": [
        "36f84cd05fdc8a08770cd146b839d90850ae8b44"
      ],
      "author": {
        "name": "Harshil Valecha",
        "email": "harshilvalecha@gmail.com",
        "time": "Wed Nov 11 22:06:01 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 11:36:01 2026 -0500"
      },
      "message": "Port BatchViewOverridesTest off DoFnTester (#41202)\n\nThese DoFns number their output by position within a bundle, and the\ntests assert those positions, so they need one bundle with a known\ninput order. TestPipeline does not guarantee that, so the tests now run\neach fn in-process through DoFnRunners.simpleRunner via a small\nprocessBundle helper, the same approach as the DatastoreV1Test port.\n\nThe helper collects outputs per tag, for the map-like fn\u0027s side outputs,\nand unwraps UserCodeException so the two exception tests keep expecting\nthe fn\u0027s own IllegalStateException.\n\nFixes #18693"
    },
    {
      "commit": "36f84cd05fdc8a08770cd146b839d90850ae8b44",
      "tree": "b9e12e00a65d3c54bc291b56af36839ee07b95e4",
      "parents": [
        "4f876b4e56d59411c8756185bb33f65400798134"
      ],
      "author": {
        "name": "Jack McCluskey",
        "email": "34928439+jrmccluskey@users.noreply.github.com",
        "time": "Wed Nov 11 11:02:36 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 11:02:36 2026 -0500"
      },
      "message": "Upgrade Tour of Beam Backend Dependencies (#41211)\n\n* Upgrade Tour of Beam Backend Dependencies\n\n* Specify 1.26.10 toolchain\n\n* bump workflow go version"
    },
    {
      "commit": "4f876b4e56d59411c8756185bb33f65400798134",
      "tree": "eddbeb42b4ddfa4d94da628df5fa1247a2a21019",
      "parents": [
        "efc23d03b50e7ea06a4c4c8eece301bc70a2d8fa"
      ],
      "author": {
        "name": "github-actions[bot]",
        "email": "41898282+github-actions[bot]@users.noreply.github.com",
        "time": "Wed Nov 11 10:16:03 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 10:16:03 2026 -0500"
      },
      "message": "Upgrade GCP Libraries BOM to 26.93.0 (#41178)\n\nCo-authored-by: derrickaw \u003cactions@main-runner-2404-9kmqn-b4q8d.local\u003e"
    },
    {
      "commit": "efc23d03b50e7ea06a4c4c8eece301bc70a2d8fa",
      "tree": "449590292f62f9fc68494d87d023a978ee86d524",
      "parents": [
        "aae06972632706b7125129e9debb118430bbdc24"
      ],
      "author": {
        "name": "Mohammad Sohail Shaikh",
        "email": "122166523+sohailshk@users.noreply.github.com",
        "time": "Wed Nov 11 19:54:01 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 09:24:01 2026 -0500"
      },
      "message": "[RunInference] Pass the device to a custom inference_fn in HuggingFaceModelHandlerTensor (#41086)\n\n* [RunInference] Pass the device to a custom inference_fn in HuggingFaceModelHandlerTensor\n\n* Add CHANGES.md entry for #41085\n\n---------\n\nCo-authored-by: Jack McCluskey \u003c34928439+jrmccluskey@users.noreply.github.com\u003e"
    },
    {
      "commit": "aae06972632706b7125129e9debb118430bbdc24",
      "tree": "3b425d2d8a6c741fb7133729ef7f45c2ab9ed4e0",
      "parents": [
        "2b40b63f2ce04504d4fe0f51c99f841fc6facff4"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Wed Nov 11 08:49:42 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 08:49:42 2026 -0500"
      },
      "message": "Configure failed stream connects before unblocking handover in Windmill gRPC stream tests (#41128)"
    },
    {
      "commit": "2b40b63f2ce04504d4fe0f51c99f841fc6facff4",
      "tree": "98844140c0dda45af20b8f8ad8caea8099bce3ec",
      "parents": [
        "79a3598fc69e83befb90ae3cca42da09027b50e0"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Nov 11 07:54:58 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 07:54:58 2026 -0500"
      },
      "message": "Bump cloud.google.com/go/pubsub/v2 from 2.8.0 to 2.8.1 in /sdks (#41192)\n\nBumps [cloud.google.com/go/pubsub/v2](https://github.com/googleapis/google-cloud-go) from 2.8.0 to 2.8.1.\n- [Release notes](https://github.com/googleapis/google-cloud-go/releases)\n- [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md)\n- [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v2.8.0...pubsub/v2.8.1)\n\n---\nupdated-dependencies:\n- dependency-name: cloud.google.com/go/pubsub/v2\n  dependency-version: 2.8.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "79a3598fc69e83befb90ae3cca42da09027b50e0",
      "tree": "17a292028ff9f5168fa2ea9fad05ba5c21dad44e",
      "parents": [
        "9fbb85a540a24bee768ae10b930ff23423b47e7b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Nov 11 07:48:32 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 07:48:32 2026 -0500"
      },
      "message": "Bump github.com/aws/aws-sdk-go-v2/feature/s3/manager in /sdks (#41191)\n\nBumps [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) from 1.23.21 to 1.23.22.\n- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)\n- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/pipes/v1.23.21...service/pipes/v1.23.22)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager\n  dependency-version: 1.23.22\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "9fbb85a540a24bee768ae10b930ff23423b47e7b",
      "tree": "67627f5643c4d9d2595fc50d93ee270d4d5ad8c2",
      "parents": [
        "0a963fce823914440b00fe6990399bc1b06ee102"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Nov 11 07:38:26 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 11 07:38:26 2026 -0500"
      },
      "message": "Bump golang.org/x/sys from 0.49.0 to 0.50.0 in /sdks (#41188)\n\nBumps [golang.org/x/sys](https://github.com/golang/sys) from 0.49.0 to 0.50.0.\n- [Commits](https://github.com/golang/sys/compare/v0.49.0...v0.50.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/sys\n  dependency-version: 0.50.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "0a963fce823914440b00fe6990399bc1b06ee102",
      "tree": "386568b4b76a0d93536ec7e1b8e752bdd73c3f50",
      "parents": [
        "d9eccaa8d94cba0984cb8812f98eaf4ee07dbbc7"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 22:04:33 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 22:04:33 2026 -0500"
      },
      "message": "Cache opcode dispatch tables in trivial_inference and atomic types in SchemaTranslation (#41061)"
    },
    {
      "commit": "d9eccaa8d94cba0984cb8812f98eaf4ee07dbbc7",
      "tree": "a44e4a29717d3727c189031a576fa5e7ce359d1d",
      "parents": [
        "a496b2c11df659ab5d19db7a8c9b4d200c144b61"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 19:49:17 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 19:49:17 2026 -0500"
      },
      "message": "[Python] Cythonize PerWindowInvoker._invoke_process_per_window and avoid non-SDF allocations (#41159)\n\n* Cythonize PerWindowInvoker._invoke_process_per_window and avoid non-SDF allocations\n\n* Format common.py with yapf\n\n* cimport create as windowed_value_create in common.pxd"
    },
    {
      "commit": "a496b2c11df659ab5d19db7a8c9b4d200c144b61",
      "tree": "c312b6e8a69e5a1338f61374f2e510e32b561545",
      "parents": [
        "6545f9811fa764715f25f4f129759800374f5b4a"
      ],
      "author": {
        "name": "Anurag-S1ngh",
        "email": "anuragsingh2313@gmail.com",
        "time": "Wed Nov 11 04:44:06 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 15:14:06 2026 -0800"
      },
      "message": "Support PyArrow 26 in the Python SDK (#40927)\n\n* Support PyArrow 26 in the Python SDK\n\nRaise the pyarrow upper bound to \u003c27.0.0 and add the 26 tox environment and Gradle task so the dependency postcommit covers it. PyArrow 26 requires NumPy 2, so that environment installs NumPy 2 while the older environments stay on 1.26.4.\n\n* [Python] Trigger dependency postcommit suite for PyArrow 26\n\n* Pin PyArrow below 26 in NumPy 1 test environments\n\nPyArrow 26 requires NumPy 2 at runtime but does not declare that dependency in its wheel metadata. The Python 3.11 environments that pin NumPy 1 would otherwise resolve PyArrow 26 and fail at import time.\n\nCap PyArrow at 25 for the base Python environments, pandas-22, and tensorflow-216. The py311-pyarrow-26 environment continues to install PyArrow 26 with NumPy 2."
    },
    {
      "commit": "6545f9811fa764715f25f4f129759800374f5b4a",
      "tree": "1e31993482a8c0d6560f4c17b11d3872d8f5ae18",
      "parents": [
        "420c83851c2771e148e49ffaf0fd76ba2b195272"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 18:07:09 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 18:07:09 2026 -0500"
      },
      "message": "[Python] Optimize BigQueryWriteFn row size estimation and table ref parsing (#41059)\n\n* Optimize BigQueryWriteFn row size estimation and skip redundant table ref parsing\n\n* Re-check with get_deep_size when fast row size reaches max payload limit\n\n* Add explanatory comments and update _check_row_size docstring in BigQueryWriteFn"
    },
    {
      "commit": "420c83851c2771e148e49ffaf0fd76ba2b195272",
      "tree": "9ff63ff862a4502cb7104a30b502a89890f9e6b3",
      "parents": [
        "46cb65f246d616758305ac7f1555bb9b52b9e997"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Nov 10 17:28:19 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 17:28:19 2026 -0500"
      },
      "message": "Bump node-forge from 1.4.2 to 1.4.3 in /sdks/typescript (#41185)\n\nBumps [node-forge](https://github.com/digitalbazaar/forge) from 1.4.2 to 1.4.3.\n- [Changelog](https://github.com/digitalbazaar/forge/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/digitalbazaar/forge/compare/v1.4.2...v1.4.3)\n\n---\nupdated-dependencies:\n- dependency-name: node-forge\n  dependency-version: 1.4.3\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "46cb65f246d616758305ac7f1555bb9b52b9e997",
      "tree": "ef3bfd82b6ed6a1dadc1e08c77dd4a2fb54f53ad",
      "parents": [
        "52bdecb221a15fe1f9854d5c3c571fe3e0dcb0db"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 17:08:54 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 17:08:54 2026 -0500"
      },
      "message": "Support closures and clean hard-deletion in MultiProcessShared spawn_process (#40673) (#40822)\n\n* Support closures and clean hard-deletion in MultiProcessShared spawn_process (#40673)\n\n* Drop __del__ invocation from _SingletonEntry.unsafe_hard_delete\n\n* Pass create_if_missing\u003dFalse in unsafe_hard_delete\n\n* Avoid full-heap GC thread starvation in test_no_cyclic_gc_self_deadlock_issue_40673\n\n* Handle concurrent address file deletion in _get_manager and unsafe_hard_delete"
    },
    {
      "commit": "52bdecb221a15fe1f9854d5c3c571fe3e0dcb0db",
      "tree": "ec9468cf2be0790042b47b442b8819b8a8f7d009",
      "parents": [
        "d5b16f106c9f4643227b056549ece2e29c2fac14"
      ],
      "author": {
        "name": "Jack McCluskey",
        "email": "34928439+jrmccluskey@users.noreply.github.com",
        "time": "Tue Nov 10 16:15:26 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 16:15:26 2026 -0500"
      },
      "message": "Delete chicago_taxi benchmark (#41180)"
    },
    {
      "commit": "d5b16f106c9f4643227b056549ece2e29c2fac14",
      "tree": "bd20f9cee2cd5fd5ccb46e90c7959b7cfe044890",
      "parents": [
        "fa9c1eb2e3b730af56d9178cbac9caac150129db"
      ],
      "author": {
        "name": "raams95",
        "email": "janakiram.chittineni@gmail.com",
        "time": "Tue Nov 10 15:07:45 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 13:07:45 2026 -0800"
      },
      "message": "[Python] Accept int tags on Partition results applied to a list (#40681)\n\n* [Python] Accept int tags on Partition results applied to a list\n\nIndexing the result of a Partition applied to a list with an int, such\nas partitions[0], raised KeyError, because\n_MaterializedDoOutputsTuple.__getitem__ did not convert int tags to\nstrings the way DoOutputsTuple.__getitem__ does for pipelines.\n\nFixes #19154\n\n* Move CHANGES.md entry to 2.79\n\n---------\n\nCo-authored-by: JanakiRamChittineni \u003c341781521+raams95@users.noreply.github.com\u003e\nCo-authored-by: claudevdm \u003c33973061+claudevdm@users.noreply.github.com\u003e"
    },
    {
      "commit": "fa9c1eb2e3b730af56d9178cbac9caac150129db",
      "tree": "e220fcd6a27eb8c368d170300dc0766b484df926",
      "parents": [
        "e9705e2f1e5842706b6e3bddfbf2df76bdfb7358"
      ],
      "author": {
        "name": "pablo rodriguez defino",
        "email": "rpablo@google.com",
        "time": "Tue Nov 10 11:05:40 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 14:05:40 2026 -0500"
      },
      "message": "[Prism] Honor clear requests for processing-time timers (#41073)\n\n* [Prism] Honor clear requests for processing-time timers\n\nProblem:\nIn decodeTimerIter (sdks/go/pkg/beam/runners/prism/internal/engine/timers.go), a timer with\nclear\u003dtrue decodes to an element with sequence -1, timestamp 0, and holdTimestamp 0.\nstatefulStageKind.addPending handles sequence \u003c 0 for event-time timers by deleting the\npending timer. Processing-time timers go through ElementManager.triageTimers\n(elementmanager.go) and timerHandler.Persist (timers.go), and neither function checks\nsequence \u003c 0:\n\n    timers :\u003d th.timers(timer)\n    key :\u003d timerKey{family: timer.family, tag: timer.tag, window: timer.window}\n    newTimer :\u003d fireElement{firing: fire, timer: timer}\n    if oldTimer, ok :\u003d timers[key]; ok {\n        timers[key] \u003d newTimer\n        th.replace(key, oldTimer, newTimer)\n        ...\n        return 0\n    }\n    timers[key] \u003d newTimer\n    th.add(key, newTimer)\n    holdChanges[newTimer.timer.holdTimestamp] +\u003d 1\n    return 1\n\nWhen an SDK clears a processing-time timer (for example in process or inside another timer\u0027s\ncallback), triageTimers rebases timestamp 0 into the past and schedules an immediate refresh.\nIf a timer was pending, Persist replaces it with the clear element (returning 0 instead of\n-1), so Prism fires the cleared timer at once. If no timer was pending, Persist schedules a\nnew entry (returning 1) and fires a timer that was never set.\n\nFix:\nCheck elm.sequence \u003c 0 in triageTimers and timerHandler.Persist. Skip rebasing and\nstageRefreshTimes insertion for clear elements, unschedule any active timer from nextFiring,\ntoFire, and order, decrement its watermark hold, and return -1 when an active timer was\nremoved (or 0 when none existed). Add unit tests in timers_test.go and an ElementManager test\nin elementmanager_test.go.\n\nReproduction (Python SDK on PrismRunner):\n```python\nimport time\n\nimport apache_beam as beam\nfrom apache_beam.options.pipeline_options import PipelineOptions\nfrom apache_beam.testing.util import assert_that, equal_to\nfrom apache_beam.transforms.timeutil import TimeDomain\nfrom apache_beam.transforms.userstate import TimerSpec, on_timer\nfrom apache_beam.transforms.window import TimestampedValue\n\nclass ClearProcessingTimerDoFn(beam.DoFn):\n    EVENT_TIMER \u003d TimerSpec(\"et\", TimeDomain.WATERMARK)\n    PROC_TIMER \u003d TimerSpec(\"pt\", TimeDomain.REAL_TIME)\n\n    def process(\n        self,\n        element,\n        et\u003dbeam.DoFn.TimerParam(EVENT_TIMER),\n        pt\u003dbeam.DoFn.TimerParam(PROC_TIMER),\n    ):\n        et.set(10)\n        pt.set(int(time.time()) + 3600)\n\n    @on_timer(EVENT_TIMER)\n    def on_event(self, pt\u003dbeam.DoFn.TimerParam(PROC_TIMER)):\n        pt.clear()\n        yield \"event_fired\"\n\n    @on_timer(PROC_TIMER)\n    def on_proc(self):\n        yield \"proc_fired_after_clear\"\n\nif __name__ \u003d\u003d \"__main__\":\n    options \u003d PipelineOptions([\"--runner\u003dPrismRunner\", \"--environment_type\u003dLOOPBACK\"])\n    with beam.Pipeline(options\u003doptions) as p:\n        out \u003d (\n            p\n            | beam.Create([TimestampedValue((\"k\", 1), 1)])\n            | beam.ParDo(ClearProcessingTimerDoFn())\n        )\n        assert_that(out, equal_to([\"event_fired\"]))\n```\n\nBefore the fix: Prism outputs `[\u0027event_fired\u0027, \u0027proc_fired_after_clear\u0027]`, and `assert_that` fails.\nAfter the fix: Prism outputs `[\u0027event_fired\u0027]`.\n\n* [Prism] Cover hold-delta cancellation on timer clear and re-set\n\nAdd unit assertions verifying that clearing a prior timer hold and\ninserting or replacing onto the same hold timestamp in one holdChanges\nmap cancels the zero-sum entry."
    },
    {
      "commit": "e9705e2f1e5842706b6e3bddfbf2df76bdfb7358",
      "tree": "be57914cc2c10cd2a6829a2d53d48c29dce6eb4d",
      "parents": [
        "50479745b730cd79edb28fd7e36b5e964dbfbe09"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 12:49:27 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 12:49:27 2026 -0500"
      },
      "message": "[Python] Optimize FixedWindows, SlidingWindows, and Sessions assign with microsecond arithmetic (#41135)\n\n* Optimize FixedWindows, SlidingWindows, and Sessions assign with microsecond arithmetic\n\n* Handle int64_t OverflowError in IntervalWindow.from_micros"
    },
    {
      "commit": "50479745b730cd79edb28fd7e36b5e964dbfbe09",
      "tree": "201c0ceb81ea6677939b976c32fb99737c1d381e",
      "parents": [
        "2d1ac62f7a678b51af7cb8c9fe288c8d31df8416"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 12:11:35 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 12:11:35 2026 -0500"
      },
      "message": "Avoid shaded sql:jdbc fat jar on sql:iceberg testRuntimeClasspath (#41141)"
    },
    {
      "commit": "2d1ac62f7a678b51af7cb8c9fe288c8d31df8416",
      "tree": "2f89046adcf76bccbfb4a822d7b384cfc4f6a213",
      "parents": [
        "2598ba5db14c0b04cdf5a5bcf3c3e8e47c45764f"
      ],
      "author": {
        "name": "Yi Hu",
        "email": "yathu@google.com",
        "time": "Tue Nov 10 10:54:21 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 10:54:21 2026 -0500"
      },
      "message": "[Dataflow] Reduce ShuffleSinkWriter memory retention and eagerly free native ApplianceShuffleWriter (#41028)\n\n* [Dataflow] Reduce ShuffleSinkWriter memory retention and eagerly free native ApplianceShuffleWriter\n\nIn JDK 22+ and later JDK 21 updates, JDK-8319713 removed the proactive Full GC check after Young GCs in ParallelGC. As a result, ParallelGC no longer runs Full GCs until Old Gen (`ParOldGen`) is completely exhausted, delaying garbage collection and finalization of objects promoted to Old Gen. Because `ApplianceShuffleWriter` previously relied solely on `finalize()` to invoke native `destroy()`, native C++ shuffle writer buffers and `ShuffleSinkWriter` references from completed bundles remained uncollected in memory across bundles, leading to excessive heap + native RSS and container OOM kills under high shuffle fanout.\n\n- Explicitly destroy native ApplianceShuffleWriter and clear `chunk` and `writer` references in `ShuffleSinkWriter.close()`\n\n- Lazily allocate `ShuffleSinkWriter.chunk` (`RandomAccessData(MIN_OUTPUT_CHUNK_SIZE)`) on the first `add()` call instead of in the `ShuffleSinkWriter` constructor.\n\n* Make methods synchronized"
    },
    {
      "commit": "2598ba5db14c0b04cdf5a5bcf3c3e8e47c45764f",
      "tree": "af37989bdba287493b042ea5fce19b4d51a40e23",
      "parents": [
        "4d264c965298d7d82f20451540ad894164c5a432"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 10:40:54 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 10:40:54 2026 -0500"
      },
      "message": "Enable uniform retry strategy and batch fallback retries in GcsUtilV2 (#41120)\n\n* Enable uniform retry strategy and batch fallback retries in GcsUtilV2\n\n* Add batch fallback unit test for getBlobs in GcsUtilV2Test"
    },
    {
      "commit": "4d264c965298d7d82f20451540ad894164c5a432",
      "tree": "1896b698a5223b05e151956a8a3efafd500f28d4",
      "parents": [
        "f9cb9953a4817a435445aa403a4d92ec8d8b4783"
      ],
      "author": {
        "name": "Tobias Kaymak",
        "email": "tobias.kaymak@gmail.com",
        "time": "Tue Nov 10 16:03:46 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 10:03:46 2026 -0500"
      },
      "message": "[#36841] Announce Spark 4 Structured Streaming runner streaming support in CHANGES.md (#40990)\n\n* [#36841] Announce Spark 4 Structured Streaming runner streaming support in CHANGES.md\n\n* Shorten the Spark 4 streaming CHANGES.md entry\n\n* Apply suggestion from @Abacn\n\n---------\n\nCo-authored-by: Yi Hu \u003cyathu@google.com\u003e\nCo-authored-by: Yi Hu \u003chuuyyi@gmail.com\u003e"
    },
    {
      "commit": "f9cb9953a4817a435445aa403a4d92ec8d8b4783",
      "tree": "d689733178c2b41b53d1ea1666bb1e4a69d66813",
      "parents": [
        "431981bdc6890f28195de4659d02203bb09ff667"
      ],
      "author": {
        "name": "ilyas ahsan",
        "email": "meilyasahsan@gmail.com",
        "time": "Tue Nov 10 22:01:18 2026 +0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 10:01:18 2026 -0500"
      },
      "message": "[DebeziumIO] Support Transaction Metadata Events in DebeziumIO JSON Output (#40785)\n\n* [DebeziumIO] Support Transaction Metadata Events\n\n---------\n\nSigned-off-by: Ilyas Ahsan \u003cmeilyasahsan@gmail.com\u003e"
    },
    {
      "commit": "431981bdc6890f28195de4659d02203bb09ff667",
      "tree": "a08669a5b5db38aea05785630e71d4296e4a9aa8",
      "parents": [
        "f6b15456dfd4835bd58acb91c9f70bc3e3991285"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 09:27:17 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 09:27:17 2026 -0500"
      },
      "message": "Optimize Timestamp and Duration comparison and epoch helpers (#41110)"
    },
    {
      "commit": "f6b15456dfd4835bd58acb91c9f70bc3e3991285",
      "tree": "c7ed16d831a8db5915f895e216978f50fa03c031",
      "parents": [
        "e9d32f037304f0272ee930c32d428a8cb620fc91"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 09:25:33 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 09:25:33 2026 -0500"
      },
      "message": "[Python] Optimize IntervalWindow.__lt__, intersects, and union using microsecond fields (#41136)\n\n* Optimize IntervalWindow.__lt__, intersects, and union using microsecond fields\n\n* Add unit test for IntervalWindow.__lt__, intersects, and union\n\n* Import Timestamp in window_test.py"
    },
    {
      "commit": "e9d32f037304f0272ee930c32d428a8cb620fc91",
      "tree": "924414a21c87f7cb7e5431ea13559ec71f4c3a44",
      "parents": [
        "db147bbd1f73e6222ad9ab615bac6658cd799088"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 09:23:25 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 09:23:25 2026 -0500"
      },
      "message": "Run Python PostCommit vllmTests and tensorRTtests in us-west1 to avoid us-central1 T4 GPU quota exhaustion (#41147)"
    },
    {
      "commit": "db147bbd1f73e6222ad9ab615bac6658cd799088",
      "tree": "76055c4bed620f06ea94e78cb10cfaa68498e751",
      "parents": [
        "baef698d478d9e08349258248d0460917de7f1c1"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 09:23:01 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 09:23:01 2026 -0500"
      },
      "message": "Retry Pub/Sub topic and subscription creation in StreamingWordCountIT.setUp (#41122)"
    },
    {
      "commit": "baef698d478d9e08349258248d0460917de7f1c1",
      "tree": "4e812c704f722861a59aac73f161421843b29f29",
      "parents": [
        "0af19349874c179fa81cc6e00ca561f54e49ac1b"
      ],
      "author": {
        "name": "Tanmay Singh",
        "email": "tanmaysingh807@gmail.com",
        "time": "Tue Nov 10 19:51:31 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 09:21:31 2026 -0500"
      },
      "message": "[RunInference] Raise when a model handler returns fewer predictions than inputs (#40929)\n\n* [RunInference] Raise when a model handler returns fewer predictions than inputs\n\nutils._convert_to_result paired inputs and predictions with zip(), which\nstops at the shorter of the two, so inputs without a prediction were\ndropped without an error. It now raises a ValueError that gives the counts\nand names any dict output without one entry per input. Extra predictions\nare still ignored, so pipelines in which every input already gets a result\nare unaffected.\n\nAlso fixes three tests that only passed because of the truncation.\n\nFixes #40928\n\n* Inline the prediction count check in _convert_to_result\n\n---------\n\nCo-authored-by: Jack McCluskey \u003c34928439+jrmccluskey@users.noreply.github.com\u003e"
    },
    {
      "commit": "0af19349874c179fa81cc6e00ca561f54e49ac1b",
      "tree": "dd2938f6cbfad37b6826a7b032e0e719fe6ce896",
      "parents": [
        "0fa1aca27e7d234bef53bc2409b833629457fb7b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Nov 10 09:20:48 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 09:20:48 2026 -0500"
      },
      "message": "Bump golang.org/x/sync from 0.24.0 to 0.25.0 in /sdks (#41153)\n\nBumps [golang.org/x/sync](https://github.com/golang/sync) from 0.24.0 to 0.25.0.\n- [Commits](https://github.com/golang/sync/compare/v0.24.0...v0.25.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/sync\n  dependency-version: 0.25.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "0fa1aca27e7d234bef53bc2409b833629457fb7b",
      "tree": "db69060102443b41ffbce6b063d63be5dfcf7be2",
      "parents": [
        "bc942aa0ecd78deccf1732ae90be961c6a2d797d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Nov 10 07:58:07 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 07:58:07 2026 -0500"
      },
      "message": "Bump google.golang.org/api from 0.310.0 to 0.311.0 in /sdks (#41151)\n\nBumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.310.0 to 0.311.0.\n- [Release notes](https://github.com/googleapis/google-api-go-client/releases)\n- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)\n- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.310.0...v0.311.0)\n\n---\nupdated-dependencies:\n- dependency-name: google.golang.org/api\n  dependency-version: 0.311.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "bc942aa0ecd78deccf1732ae90be961c6a2d797d",
      "tree": "d6aacd8c274667891675c4ab1df7cc5631888f23",
      "parents": [
        "d70827febd9c6ec5011b96d84df0d01ec3dd54bf"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Nov 10 07:48:56 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 07:48:56 2026 -0500"
      },
      "message": "Bump cloud.google.com/go/bigquery from 1.86.1 to 1.86.2 in /sdks (#41152)\n\nBumps [cloud.google.com/go/bigquery](https://github.com/googleapis/google-cloud-go) from 1.86.1 to 1.86.2.\n- [Release notes](https://github.com/googleapis/google-cloud-go/releases)\n- [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md)\n- [Commits](https://github.com/googleapis/google-cloud-go/compare/spanner/v1.86.1...bigquery/v1.86.2)\n\n---\nupdated-dependencies:\n- dependency-name: cloud.google.com/go/bigquery\n  dependency-version: 1.86.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "d70827febd9c6ec5011b96d84df0d01ec3dd54bf",
      "tree": "07de402b8766876739352a7403f3576a69cda28b",
      "parents": [
        "a674b00b6b44c5ea397d9764f75b709ed0ff01a2"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Nov 10 07:45:46 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 07:45:46 2026 -0500"
      },
      "message": "Bump golang.org/x/oauth2 from 0.37.0 to 0.38.0 in /sdks (#41150)\n\nBumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.37.0 to 0.38.0.\n- [Commits](https://github.com/golang/oauth2/compare/v0.37.0...v0.38.0)\n\n---\nupdated-dependencies:\n- dependency-name: golang.org/x/oauth2\n  dependency-version: 0.38.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "a674b00b6b44c5ea397d9764f75b709ed0ff01a2",
      "tree": "2a27698ec458f88f414d8c3773c0aad6c3ec6523",
      "parents": [
        "544001a05e13951bc5ddd0d0defaf5df0cfd5305"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Nov 10 07:42:25 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 07:42:25 2026 -0500"
      },
      "message": "Bump github.com/aws/aws-sdk-go-v2 from 1.47.7 to 1.47.8 in /sdks (#41149)\n\nBumps [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) from 1.47.7 to 1.47.8.\n- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)\n- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.47.7...v1.47.8)\n\n---\nupdated-dependencies:\n- dependency-name: github.com/aws/aws-sdk-go-v2\n  dependency-version: 1.47.8\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "544001a05e13951bc5ddd0d0defaf5df0cfd5305",
      "tree": "c8917f9390f29d9d3ff7a6ad7fd6a95e45c92b2f",
      "parents": [
        "9820e84283163e5e6d115f55a94ee7e037fd461a"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 07:41:24 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 07:41:24 2026 -0500"
      },
      "message": "Batch amqsput messages and increase subscriber timeout in xlang_jmsio_it_test (#41121)"
    },
    {
      "commit": "9820e84283163e5e6d115f55a94ee7e037fd461a",
      "tree": "f0a0a5d526501d7add8654c1f03b88b5dcfd2504",
      "parents": [
        "94f70435bd4cce1fd35bd8400cff9a5151c8209f"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 07:41:13 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 07:41:13 2026 -0500"
      },
      "message": "Harden Python testcontainers startup retry cleanup with cleanup_testcontainer_on_retry (#41129)\n\n* Harden testcontainers startup retry handling in cloudsql_it_test and rag test_utils\n\n* Extract shared cleanup_testcontainer_on_retry helper in test_utils\n\n* Use cleanup_testcontainer_on_retry in RedisContainer test setup loops"
    },
    {
      "commit": "94f70435bd4cce1fd35bd8400cff9a5151c8209f",
      "tree": "9fe74269ee12d416a6068c8540c494f1f4dd35c3",
      "parents": [
        "b7496e445a9841114b74dcb1e584a5e526f9066a"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 07:41:00 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 07:41:00 2026 -0500"
      },
      "message": "Increase default readTimeout to 60s in JmsIOIT (#41116)"
    },
    {
      "commit": "b7496e445a9841114b74dcb1e584a5e526f9066a",
      "tree": "ea0e6ee4a846261dfc770a2cde2afc32632f3259",
      "parents": [
        "ffc8c67583fd89a00fecc142cda80a728c10ba0a"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 07:40:46 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 07:40:46 2026 -0500"
      },
      "message": "Optimize WindowedValue.__hash__ and HomogeneousWindowedBatch.from_windowed_values (#41111)"
    },
    {
      "commit": "ffc8c67583fd89a00fecc142cda80a728c10ba0a",
      "tree": "2ed9c4da28d64225a9335333f047213f953b75d4",
      "parents": [
        "1f52d36f2f464481a85eaf98ca0625c4d0c0fcf3"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Tue Nov 10 07:39:09 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Nov 10 07:39:09 2026 -0500"
      },
      "message": "[Python] Optimize Count, Top, Sample, ToList, and ConcatList CombineFns (#41062)\n\n* Optimize CountCombineFn, TopCombineFn, SampleCombineFn, ToListCombineFn, and ConcatListCombineFn\n\n* Undo unnecessary check\n\n* Update comment in SampleCombineFn.add_input"
    },
    {
      "commit": "1f52d36f2f464481a85eaf98ca0625c4d0c0fcf3",
      "tree": "cdb50e0bbfc80efd3532c5474fb54a3e6decc2b5",
      "parents": [
        "e729f613ce7c5b598883aa71508726aac4d35ba8"
      ],
      "author": {
        "name": "Tejas Iyer",
        "email": "tejasiyer@google.com",
        "time": "Mon Nov 09 18:19:27 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 09 20:19:27 2026 -0600"
      },
      "message": "Move BundleLifter from Iceberg to sdk/util (#40978)"
    },
    {
      "commit": "e729f613ce7c5b598883aa71508726aac4d35ba8",
      "tree": "85f6d3f755d90baea91cf6dbaf415a805e536bdd",
      "parents": [
        "fa409831154f965b03c37686b3c80c8e6423bb54"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Mon Nov 09 18:22:24 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 09 18:22:24 2026 -0500"
      },
      "message": "Retry transient 5xx GitHub API errors in pr-bot getGitHubClient (#41124)"
    },
    {
      "commit": "fa409831154f965b03c37686b3c80c8e6423bb54",
      "tree": "5a92a16830716be1116dc5d90a440e44c1b1fc46",
      "parents": [
        "663df87f54f1dcde1db505c5f695dca50c167b7a"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Mon Nov 09 16:48:10 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 09 16:48:10 2026 -0500"
      },
      "message": "Configure mavenCentralMirrorUrl in buildSrc/settings.gradle.kts pluginManagement (#41118)\n\n* Configure mavenCentralMirrorUrl in buildSrc/settings.gradle.kts pluginManagement\n\n* Use fully-qualified java.util.Properties inside pluginManagement block\n\n* Consolidate Maven Central mirror logging to a single log line in settings.gradle.kts"
    },
    {
      "commit": "663df87f54f1dcde1db505c5f695dca50c167b7a",
      "tree": "60e1f6461e9489c6c071f9236e75255fe225dbf8",
      "parents": [
        "977778895ed86333f4fb268ef5b9da837cc831a2"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Mon Nov 09 16:01:58 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 09 16:01:58 2026 -0500"
      },
      "message": "Use curl -fsSL --retry 5 when installing docker-compose in workflows (#41113)"
    },
    {
      "commit": "977778895ed86333f4fb268ef5b9da837cc831a2",
      "tree": "d212a52c6d4f5a80ecd55938804765a6d8a66181",
      "parents": [
        "74f141d193148576cdf2545090ba5dac21d3900a"
      ],
      "author": {
        "name": "Tobias Kaymak",
        "email": "tobias.kaymak@gmail.com",
        "time": "Mon Nov 09 21:18:21 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 09 15:18:21 2026 -0500"
      },
      "message": "[#40950] Spark Structured Streaming runner: translate Redistribute like Reshuffle (#41106)"
    },
    {
      "commit": "74f141d193148576cdf2545090ba5dac21d3900a",
      "tree": "2e2bbcc3aa1f75c0f7be0475c33b7a19b187a6a9",
      "parents": [
        "a537a4c512256d4f04b19895e0ec7dd0d6e7e86f"
      ],
      "author": {
        "name": "Ahmed Abualsaud",
        "email": "65791736+ahmedabu98@users.noreply.github.com",
        "time": "Mon Nov 09 13:48:00 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 09 11:48:00 2026 -0800"
      },
      "message": "Add CHANGES function to Beam SQL (#40982)\n\n* add changes function\n\n* address comments and make iceberg cdc source respect the new convention\n\n* spotless\n\n* trigger ITs"
    },
    {
      "commit": "a537a4c512256d4f04b19895e0ec7dd0d6e7e86f",
      "tree": "b8a87cb1d70387a2b6506be7db23c4b24f7e9979",
      "parents": [
        "f8f675e66d49922ce6b63b890ab1c8db5fe1138e"
      ],
      "author": {
        "name": "Danny McCormick",
        "email": "dannymccormick@google.com",
        "time": "Mon Nov 09 14:03:14 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Nov 09 14:03:14 2026 -0500"
      },
      "message": "Increase Gradle wrapper networkTimeout and retry wrapper bootstrap on cache miss (#41065)\n\n* Increase Gradle wrapper networkTimeout and retry wrapper bootstrap on cache miss\n\n* Add comment explaining Gradle wrapper cache-miss retry block"
    }
  ],
  "next": "f8f675e66d49922ce6b63b890ab1c8db5fe1138e"
}
