)]}'
{
  "log": [
    {
      "commit": "7ee3e5f50686c52e3aa7c7117e16592c4af72dcc",
      "tree": "5cc8eb3301983b00990ec347951bc3f22d9370ed",
      "parents": [
        "82754d2eff844dc84a16533d9fc50ecbbd64bf45"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Apr 08 18:12:37 2026 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 22:38:24 2026 +0200"
      },
      "message": "THRIFT-5946: Use trusted publishing for Ruby gem releases\n"
    },
    {
      "commit": "82754d2eff844dc84a16533d9fc50ecbbd64bf45",
      "tree": "c03ab42681d30c8418bbd03a8d7508a62b8e9c36",
      "parents": [
        "269396aeed7cc437019c958cc5c4e43383ccb632"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Fri Mar 27 12:39:51 2026 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 22:25:07 2026 +0200"
      },
      "message": "THRIFT-5944: Corrected and expanded Ruby protocol benchmarks\n"
    },
    {
      "commit": "269396aeed7cc437019c958cc5c4e43383ccb632",
      "tree": "d8a36f83dbf7911a86b49bf9cbbc0e19c47f6c77",
      "parents": [
        "98a71371efbe4902b6e6f5aeb52c3733d7e1321d"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Fri Mar 27 11:25:04 2026 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 22:23:46 2026 +0200"
      },
      "message": "THRIFT-5945: Incomplete cleanup in NonblockingServer leaks sockets\n"
    },
    {
      "commit": "98a71371efbe4902b6e6f5aeb52c3733d7e1321d",
      "tree": "a02ecfd4cad545436240289dbad5250a4c9f257b",
      "parents": [
        "3babdd61f9f4012381682ef0671b228db2edacf8"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Apr 09 01:50:39 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 09:37:24 2026 +0200"
      },
      "message": "Fix prettier formatting in generated-exceptions test\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "3babdd61f9f4012381682ef0671b228db2edacf8",
      "tree": "bdc8a0b93140ce2d7016593fc233ddefe79ee785",
      "parents": [
        "ca8c2c8fa6663f95e598200de99de8794e46454d"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Apr 09 01:35:12 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 09:37:24 2026 +0200"
      },
      "message": "Add test for ES6 generated exception constructor\nClient: js\n\nAdd unit tests verifying that ES6-generated exception classes pass the\nexception name string to super() instead of the args object. This is a\nregression test for the bug fixed in PR #3372, where super(args) caused\nTBinaryProtocol.writeStringOrBinary to throw.\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "ca8c2c8fa6663f95e598200de99de8794e46454d",
      "tree": "2af7abb0472fd1b507f2d4eeab610bbacc0563ea",
      "parents": [
        "aa894723d3a124984846c0740ccaf5d7e1644289"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Apr 08 23:06:45 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 09:31:26 2026 +0200"
      },
      "message": "added int range checks\n"
    },
    {
      "commit": "aa894723d3a124984846c0740ccaf5d7e1644289",
      "tree": "5bcf065feb944fd68af7f01f27e5340b0cd55045",
      "parents": [
        "a3b9b949c5e29f42862cbc8fd26eb8062253b301"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Apr 09 02:20:43 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 09:29:08 2026 +0200"
      },
      "message": "Bump lodash from 4.17.23 to 4.18.1\n\nBumps [lodash](https://github.com/lodash/lodash) from 4.17.23 to 4.18.1.\n- [Release notes](https://github.com/lodash/lodash/releases)\n- [Commits](https://github.com/lodash/lodash/compare/4.17.23...4.18.1)\n\n---\nupdated-dependencies:\n- dependency-name: lodash\n  dependency-version: 4.18.1\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "a3b9b949c5e29f42862cbc8fd26eb8062253b301",
      "tree": "f45ad49246119f769c39317557f7d13f8268f180",
      "parents": [
        "40505d88804e13754ae2cc97ba460ad98cd72e71"
      ],
      "author": {
        "name": "Mark Molinaro",
        "email": "mmolinaro@pinterest.com",
        "time": "Thu Apr 02 07:11:42 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 01:45:44 2026 +0200"
      },
      "message": "Optimize Python C extension readStruct for nested structs\n\nIn this area of code, there already exists an optimization where we skip calling `klass(**kwargs)` on the top-level struct and instead init an empty object then PyObject_SetAttr the properties onto it.\u2028\u2028This was done because Python\u0027s keyword\nargument matching is O(n) string comparisons per argument, making this expensive for structs with many fields.\n\nHowever, nested structs which are decoded within the C extension did not get this same optimization, causing them to go through the slow class initialization path.\n\nIn this change, for mutable nested structs, we create the instance up front with a no-arg constructor (klass()) and set decoded fields directly via PyObject_SetAttr (the same way we fast-path the top-level struct).\n\nImmutable structs (TFrozenBase subclasses) continue to use the kwargs\npath since their generated __setattr__ blocks attribute mutation.\n\nImmutability is detected via PyObject_IsSubclass against TFrozenBase,\nwith the class reference cached in a function-local static.\n\nBenchmarks show up to 3.6x speedup for deeply nested struct hierarchies, with no impact on flat structs. I had Claude generate me some benchmarks to showcase performance in different nested scenarios.\u2028\u2028Note the test change. I asked about potentially changing this to look more like what the codegen produces here https://github.com/apache/thrift/pull/3349/changes#r3026288637. Currently, this fails because its not marked as frozen but has a erroring setattr\n"
    },
    {
      "commit": "40505d88804e13754ae2cc97ba460ad98cd72e71",
      "tree": "09a9f07806b0edd7d5b0d0c4f55b6694c1a63341",
      "parents": [
        "381db97501d77e72c0f5067523988b5712e9a1f1"
      ],
      "author": {
        "name": "Pengpeng Hou",
        "email": "pengpeng@iscas.ac.cn",
        "time": "Wed Mar 25 09:11:56 2026 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 01:44:22 2026 +0200"
      },
      "message": "THRIFT-5930: c_glib: reject oversized Unix socket paths in thrift_server_socket_listen()\n\nthrift_server_socket_listen() still copies the configured Unix socket path directly into a stack sockaddr_un and then binds it. The path comes from a GObject property and is not checked against sizeof(pin.sun_path) before the copy.\\n\\nReject Unix socket paths that do not fit in the local sockaddr_un.sun_path buffer before building the sockaddr and binding the socket.\n"
    },
    {
      "commit": "381db97501d77e72c0f5067523988b5712e9a1f1",
      "tree": "9945a64410981b1e14857f86fdfceb94de8da678",
      "parents": [
        "15fd2da4222280a8a26042182318a89f8e2839d3"
      ],
      "author": {
        "name": "Volodymyr Panivko",
        "email": "sveneld300@gmail.com",
        "time": "Thu Apr 02 10:22:48 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 01:42:49 2026 +0200"
      },
      "message": "Fix PHP cross-test server IPv4 binding\n"
    },
    {
      "commit": "15fd2da4222280a8a26042182318a89f8e2839d3",
      "tree": "40b9316ed5ff6ccae50459821ee8f7db0927c437",
      "parents": [
        "c94feabf52d9a1b8227709c9363b6b9e4e60565a"
      ],
      "author": {
        "name": "Volodymyr Panivko",
        "email": "sveneld300@gmail.com",
        "time": "Wed Apr 01 10:20:42 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 01:42:49 2026 +0200"
      },
      "message": "THRIFT-5757: keep PHP JSON fixtures literal\n"
    },
    {
      "commit": "c94feabf52d9a1b8227709c9363b6b9e4e60565a",
      "tree": "3a5bf3c164f4f434e5a2fdb4b8074bed1570b026",
      "parents": [
        "96f1e3f92b1137db3e9af477f502145102956bec"
      ],
      "author": {
        "name": "Volodymyr Panivko",
        "email": "sveneld300@gmail.com",
        "time": "Wed Apr 01 09:40:00 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 01:42:49 2026 +0200"
      },
      "message": "THRIFT-5757: fix PHP JSON test expectations\n"
    },
    {
      "commit": "96f1e3f92b1137db3e9af477f502145102956bec",
      "tree": "0b8abcd627158638526407534e06e8d69eaa476d",
      "parents": [
        "76113eb5ab84c2bd597f6e7179a2d4cc2b7bf903"
      ],
      "author": {
        "name": "Volodymyr Panivko",
        "email": "sveneld300@gmail.com",
        "time": "Thu Mar 26 23:25:37 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 01:42:49 2026 +0200"
      },
      "message": "THRIFT-5757: align Python cross-test launchers\n"
    },
    {
      "commit": "76113eb5ab84c2bd597f6e7179a2d4cc2b7bf903",
      "tree": "ac32573821896acbdff39cdb6f04037b82caaebb",
      "parents": [
        "f8894593e6c997daf492737b0b921aea700e849f"
      ],
      "author": {
        "name": "Volodymyr Panivko",
        "email": "sveneld300@gmail.com",
        "time": "Thu Mar 26 21:57:29 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 01:42:49 2026 +0200"
      },
      "message": "THRIFT-5757: finish PHP cross-test integration\n"
    },
    {
      "commit": "f8894593e6c997daf492737b0b921aea700e849f",
      "tree": "c69d3b65fdea1fb10552977b2d690d2b924b36a8",
      "parents": [
        "431d077bd62f3a5dc14799e45fabf62da01ea89b"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Apr 09 00:29:28 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 01:42:04 2026 +0200"
      },
      "message": "Fix ubuntu-noble Docker build: modernize NodeSource GPG setup\n\nReplace deprecated apt-key NodeSource setup with modern gpg keyring\nmethod using signed-by, consistent with ubuntu-focal and ubuntu-jammy.\n\nClient: build\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\nGenerated-by: Claude Sonnet 4.6\n"
    },
    {
      "commit": "431d077bd62f3a5dc14799e45fabf62da01ea89b",
      "tree": "7463347bef98b8d5e175438f947251104e8e15b6",
      "parents": [
        "1ee80d2b24fc284bb0de07a0d2e3e1543dba3480"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Apr 09 00:03:33 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 01:42:04 2026 +0200"
      },
      "message": "Fix ubuntu-focal Docker build: update NodeSource setup and ENV format\n\n- Replace deprecated apt-key NodeSource setup (node_16.x) with\n  modern gpg keyring method using node_20.x/nodistro, fixing GPG\n  signature verification failure\n- Convert all legacy ENV key value syntax to ENV key\u003dvalue format\n  to eliminate 15 Dockerfile linting warnings\n\nClient: build\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\nGenerated-by: Claude Sonnet 4.6\n"
    },
    {
      "commit": "1ee80d2b24fc284bb0de07a0d2e3e1543dba3480",
      "tree": "4cb5a4ad89dea69da7fcc9f495fe3a59df8a8f59",
      "parents": [
        "235452790d320e3c0ee6e868f157c6df13c5d501"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Apr 08 23:49:32 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 01:42:04 2026 +0200"
      },
      "message": "Fix ubuntu-jammy Docker build: update NodeSource and ENV format\n\n- Replace deprecated apt-key NodeSource setup (node_16.x/focal) with\n  modern gpg keyring method using node_20.x/nodistro, fixing GPG\n  signature verification failure\n- Convert all legacy ENV key value syntax to ENV key\u003dvalue format\n  to eliminate 15 Dockerfile linting warnings\n\nClient: build\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\nGenerated-by: Claude Sonnet 4.6\n"
    },
    {
      "commit": "235452790d320e3c0ee6e868f157c6df13c5d501",
      "tree": "b11072730745132abc2e799cea826ea04a1fb54e",
      "parents": [
        "38ca0e37253e88ebde81088f63fcb7d9daef2b6a"
      ],
      "author": {
        "name": "Antoine Lafarge",
        "email": "alafarge@ankama.com",
        "time": "Tue Mar 31 15:16:22 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 01:38:09 2026 +0200"
      },
      "message": "Fix JavaScript exception construction implementation (ES6)\n"
    },
    {
      "commit": "38ca0e37253e88ebde81088f63fcb7d9daef2b6a",
      "tree": "09422f7486b3efeaf0290d32c2ad633ead344e2c",
      "parents": [
        "a0c18e0012a0e77bb31f874c982b93653b5a998f"
      ],
      "author": {
        "name": "Carel Combrink",
        "email": "carel.combrink@vastech.co.za",
        "time": "Wed Apr 08 07:50:22 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 00:41:43 2026 +0200"
      },
      "message": "Fix docker warnings on ENV format\n"
    },
    {
      "commit": "a0c18e0012a0e77bb31f874c982b93653b5a998f",
      "tree": "17708bc82ea0d562eee59417e1eee9c8cbba49dc",
      "parents": [
        "65742550417ae0d41f8eff87ec7cffe5027e2c10"
      ],
      "author": {
        "name": "Carel Combrink",
        "email": "carel.combrink@vastech.co.za",
        "time": "Wed Apr 08 07:41:18 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 09 00:41:43 2026 +0200"
      },
      "message": "Override enforcement of PEP 668\n\n- Add \u0027break-system-packages\u0027 for pip installs\n- See section 5 of PEP-668\n"
    },
    {
      "commit": "65742550417ae0d41f8eff87ec7cffe5027e2c10",
      "tree": "21dec70780dff49bd068cb31d0ed3ade197aa9c3",
      "parents": [
        "2e3afbe577360ec09f90f24351c860908f0d7a4f"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Apr 08 17:33:09 2026 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Apr 08 23:43:43 2026 +0200"
      },
      "message": "Updated Gemfile.lock to fix build issues\n"
    },
    {
      "commit": "2e3afbe577360ec09f90f24351c860908f0d7a4f",
      "tree": "cca67cb5573188566e294b86283e05627bab8b0b",
      "parents": [
        "be155ae30c44979430858a36ab6e44e7b103d76a"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Apr 08 00:05:45 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Apr 08 00:05:45 2026 +0200"
      },
      "message": "branch for release\n"
    },
    {
      "commit": "be155ae30c44979430858a36ab6e44e7b103d76a",
      "tree": "cfb31af1bcc51e99e197fc26169174a5c518d61a",
      "parents": [
        "197da843af4c51a90ca494becbcb0c24c5dd5e4b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Apr 01 20:24:10 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Apr 02 23:11:52 2026 +0200"
      },
      "message": "Bump jvm from 2.3.10 to 2.3.20 in /lib/kotlin\n\nBumps [jvm](https://github.com/JetBrains/kotlin) from 2.3.10 to 2.3.20.\n- [Release notes](https://github.com/JetBrains/kotlin/releases)\n- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)\n- [Commits](https://github.com/JetBrains/kotlin/compare/v2.3.10...v2.3.20)\n\n---\nupdated-dependencies:\n- dependency-name: jvm\n  dependency-version: 2.3.20\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "197da843af4c51a90ca494becbcb0c24c5dd5e4b",
      "tree": "0a80449dfb45f1b1ecfb8272d9a96d7a46e30756",
      "parents": [
        "c5b73f3b13c46054523c60fc65405d1dc311147d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Apr 01 06:14:17 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Apr 01 22:14:03 2026 +0200"
      },
      "message": "Bump com.diffplug.spotless from 8.2.1 to 8.4.0 in /lib/kotlin\n\nBumps com.diffplug.spotless from 8.2.1 to 8.4.0.\n\n---\nupdated-dependencies:\n- dependency-name: com.diffplug.spotless\n  dependency-version: 8.4.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "c5b73f3b13c46054523c60fc65405d1dc311147d",
      "tree": "01a07297f94031ea8e1887a6ffbcff00aacdebe4",
      "parents": [
        "3f81e22d4a0f61db24d6baadb21ff1c1f2283950"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Apr 01 06:14:20 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Apr 01 22:13:53 2026 +0200"
      },
      "message": "Bump com.ncorti.ktfmt.gradle from 0.25.0 to 0.26.0 in /lib/kotlin\n\nBumps com.ncorti.ktfmt.gradle from 0.25.0 to 0.26.0.\n\n---\nupdated-dependencies:\n- dependency-name: com.ncorti.ktfmt.gradle\n  dependency-version: 0.26.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "3f81e22d4a0f61db24d6baadb21ff1c1f2283950",
      "tree": "ee3414326807584099c6f9cdb9a1a5b6a92c3165",
      "parents": [
        "40d3e78144f446341e328d734d86768e97d31480"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Dec 17 10:17:37 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Apr 01 01:38:03 2026 +0200"
      },
      "message": "Updated README.md for Ruby [skip ci]\n"
    },
    {
      "commit": "40d3e78144f446341e328d734d86768e97d31480",
      "tree": "b67246672b45e59fc2b15f893a79e975f18ccf24",
      "parents": [
        "43d749517cc903a4f95e367725f74a7a401c4bff"
      ],
      "author": {
        "name": "CJCombrink",
        "email": "carel.combrink@gmail.com",
        "time": "Mon Mar 23 06:09:04 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Apr 01 01:32:13 2026 +0200"
      },
      "message": "Fix generation of episodic nodejs for services\n\n- Extending services from the episode must also take the episodes into account\n- Remove the reference in the generated ts for imported types since it can\u0027t be relative\n- Extend the tests\n"
    },
    {
      "commit": "43d749517cc903a4f95e367725f74a7a401c4bff",
      "tree": "a4b6e6f50b3ae83b98d251558be363dd1a6fab0b",
      "parents": [
        "0be731cc32bced86dc8b97ef4fd1dac9d531875f"
      ],
      "author": {
        "name": "Shaoyu Zhang",
        "email": "zsy056@users.noreply.github.com",
        "time": "Wed Mar 25 21:01:51 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Apr 01 01:26:25 2026 +0200"
      },
      "message": "Remove dependency on docker/login-action\n"
    },
    {
      "commit": "0be731cc32bced86dc8b97ef4fd1dac9d531875f",
      "tree": "2a814d37e820b0be638ca9e4bddeabf1ded18ad8",
      "parents": [
        "27b72088d4585d7e25c2694e567d517e0b6cf5c7"
      ],
      "author": {
        "name": "Pengpeng Hou",
        "email": "pengpeng@iscas.ac.cn",
        "time": "Sun Mar 22 00:26:01 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Apr 01 01:24:48 2026 +0200"
      },
      "message": "THRIFT-5932: bound saferealpath() output on Windows\nClient: cpp\nAuthor: Pengpeng Hou \u003cpengpeng@iscas.ac.cn\u003e\n\nThis closes #3357\n"
    },
    {
      "commit": "27b72088d4585d7e25c2694e567d517e0b6cf5c7",
      "tree": "d39f400bf28b8006d88cabb81254b0c66b73cb9d",
      "parents": [
        "528e093904d1b8a8e415aa2d7037e79f065a77e5"
      ],
      "author": {
        "name": "Pengpeng Hou",
        "email": "pengpeng@iscas.ac.cn",
        "time": "Sun Mar 22 07:48:17 2026 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Apr 01 00:21:37 2026 +0200"
      },
      "message": "THRIFT-5933: c_glib: reject oversized Unix socket paths in thrift_socket_open()\n\nthrift_socket_open() still copies the configured Unix socket path directly into a stack sockaddr_un and then connects it. The path is stored via a GObject property and is not checked against sizeof(pin.sun_path) before the copy.\n\nReject Unix socket paths that do not fit in the local sockaddr_un.sun_path buffer before building the sockaddr and connecting the socket.\n\nSigned-off-by: Pengpeng Hou \u003cpengpeng@iscas.ac.cn\u003e\n"
    },
    {
      "commit": "528e093904d1b8a8e415aa2d7037e79f065a77e5",
      "tree": "2913ad3f886066c6fb189a3f1a877c6389e2a56f",
      "parents": [
        "1e5fa4b9b35ad6bfeb238d19897ace7826eda057"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Mar 27 22:47:33 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Mar 28 14:30:55 2026 +0100"
      },
      "message": "Bump org.codehaus.plexus:plexus-utils in /contrib/thrift-maven-plugin\n\nBumps [org.codehaus.plexus:plexus-utils](https://github.com/codehaus-plexus/plexus-utils) from 3.0.24 to 4.0.3.\n- [Release notes](https://github.com/codehaus-plexus/plexus-utils/releases)\n- [Commits](https://github.com/codehaus-plexus/plexus-utils/compare/plexus-utils-3.0.24...plexus-utils-4.0.3)\n\n---\nupdated-dependencies:\n- dependency-name: org.codehaus.plexus:plexus-utils\n  dependency-version: 4.0.3\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "1e5fa4b9b35ad6bfeb238d19897ace7826eda057",
      "tree": "49f9633dd88fcfce78d7e05eb1da9a661c1cd416",
      "parents": [
        "59fc4113e6b6527cd95c3346d49a1197af673e77"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jnsg@apache.org",
        "time": "Fri Mar 27 00:01:45 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Mar 28 00:05:42 2026 +0100"
      },
      "message": "THRIFT-5939: Replace GUID generation with stable UUID algorithm\n\nReplace the Windows-only random CoCreateGuid() GUID generation with\ndeterministic UUIDv8 (RFC 9562) derived from SHA-256 over a namespace\nhierarchy (DNS → thrift.apache.org → program → interface metadata).\n\nUses SHA-256 implementation by Brad Conte (brad AT bradconte.com),\nwhich is explicitly public domain (no copyright claimed).\nSource: https://github.com/B-Con/crypto-algorithms\n\n- sha256.h: Brad Conte\u0027s algorithm verbatim, inlined to a header-only file,\n  macros prefixed THRIFT_SHA256_ to avoid collisions\n- Add generate_guid_v8() for services and structs using a canonical\n  string covering: program namespace UUID, entity name, parent service\n  hash (for inheritance), and function/field signatures with Thrift\n  IDL type names\n- Add type_name_for_guid(), canonical_service_string(),\n  canonical_struct_string(), program_namespace_uuid() helpers\n- Add guid_v4 generator option to fall back to legacy random GUIDs\n  (Windows only, for migration compatibility)\n- GUIDs are now emitted on all platforms, not just Windows\n- Add UuidV8Test.thrift fixture and CI step that validates\n  determinism, UUIDv8 format, field-order sensitivity, and\n  parent-service hash inclusion\n- LICENSE: add attribution section for the third-party public-domain code,\n  following the existing pattern in the file\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "59fc4113e6b6527cd95c3346d49a1197af673e77",
      "tree": "458da27ee1fdbd17a86574a7eac7772b18a091aa",
      "parents": [
        "9e799ff5f5a0f431d6a7536a47845d29ca07fc25"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Fri Mar 27 08:52:36 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Mar 28 00:03:11 2026 +0100"
      },
      "message": "Add AGENTS.md with AI contribution guidelines for the project [skip ci]\n\nCovers ASF legal/licensing compliance, JIRA+GitHub issue tracking,\nPR conventions (THRIFT-NNNN prefix, squash, affected Client languages),\nAI-generated content labelling (Co-Authored-By/Generated-by), and\nlanguage-specific rule hierarchy across /lib, /test, /tutorial.\nCLAUDE.md is a thin wrapper that imports AGENTS.md via @-syntax so\nClaude Code users and other AI tools (e.g. OpenAI Codex) both work.\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "9e799ff5f5a0f431d6a7536a47845d29ca07fc25",
      "tree": "a5a03518e18d3ab5be8ce6b28c6090fb01776533",
      "parents": [
        "d999ed2c3969bca777f4b6cf3aa1de6d9a12ef53"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Mar 26 14:04:47 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Mar 27 01:29:02 2026 +0100"
      },
      "message": "Bump picomatch from 2.3.0 to 2.3.2 in /lib/js\n\nBumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.0 to 2.3.2.\n- [Release notes](https://github.com/micromatch/picomatch/releases)\n- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/micromatch/picomatch/compare/2.3.0...2.3.2)\n\n---\nupdated-dependencies:\n- dependency-name: picomatch\n  dependency-version: 2.3.2\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "d999ed2c3969bca777f4b6cf3aa1de6d9a12ef53",
      "tree": "0102b15e003d6752981faf472552b1d6929527ec",
      "parents": [
        "373c0ea071e82f6b4fa3aa9f460697942cdf6168"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Mar 26 16:26:48 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Mar 27 01:28:54 2026 +0100"
      },
      "message": "Bump picomatch from 2.3.0 to 2.3.2 in /lib/ts\n\nBumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.0 to 2.3.2.\n- [Release notes](https://github.com/micromatch/picomatch/releases)\n- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/micromatch/picomatch/compare/2.3.0...2.3.2)\n\n---\nupdated-dependencies:\n- dependency-name: picomatch\n  dependency-version: 2.3.2\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "373c0ea071e82f6b4fa3aa9f460697942cdf6168",
      "tree": "3c570fe6a6176fbda080b26592d15762e91b157c",
      "parents": [
        "13cdb4441846cec85809991116fddba2344c8a83"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Fri Mar 27 01:27:59 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Fri Mar 27 01:28:22 2026 +0100"
      },
      "message": "Added `Co-Authored-By:` as alternative (see text for rationale)\n"
    },
    {
      "commit": "13cdb4441846cec85809991116fddba2344c8a83",
      "tree": "d8ded5503f5d6e3eea58adccf472a7e20360b8b4",
      "parents": [
        "9f1fb7a6610a89ef3cd927f61173d99b03dbf540"
      ],
      "author": {
        "name": "Copilot",
        "email": "198982749+Copilot@users.noreply.github.com",
        "time": "Tue Mar 17 15:08:29 2026 -0700"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Mar 25 22:13:26 2026 +0100"
      },
      "message": "Add test coverage for private_optional + template_streamop combined; fix generator bugs (#14)\n\n\n* Add test coverage for private_optional + template_streamop combined, fix generator bugs\n\n\nCo-authored-by: copilot-swe-agent[bot] \u003c198982749+Copilot@users.noreply.github.com\u003e\nCo-authored-by: zsy056 \u003c1074382+zsy056@users.noreply.github.com\u003e"
    },
    {
      "commit": "9f1fb7a6610a89ef3cd927f61173d99b03dbf540",
      "tree": "ed978ba08b24b9e2e914b8801ec46bea55d9a6ce",
      "parents": [
        "8f1bfda8177014d158327aadbc9de0dd55ea8f76"
      ],
      "author": {
        "name": "Pavel Kvach",
        "email": "pavel.kvach@gmail.com",
        "time": "Sat Mar 21 20:45:04 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Mar 24 22:04:43 2026 +0100"
      },
      "message": "THRIFT-5934: Fix deprecated usage of ReflectionProperty::setAccessible() in PHP tests\n"
    },
    {
      "commit": "8f1bfda8177014d158327aadbc9de0dd55ea8f76",
      "tree": "c9d7a3782e68dc13188883ccd67d578139a27e9d",
      "parents": [
        "caa4e7866df11091609ee184a5825365ab747a8c"
      ],
      "author": {
        "name": "sarangat_LinkedIn",
        "email": "sarangath@linkedin.com",
        "time": "Mon Mar 16 14:17:16 2026 -0700"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Mar 24 22:01:48 2026 +0100"
      },
      "message": "THRIFT-5926: Fix TSaslClientTransport.open() for DIGEST-MD5\n\n- Handle None initial response from sasl.process() with explicit\n  is-not-None check instead of or-coercion\n- Process server\u0027s final challenge on COMPLETE status (rspauth\n  verification for DIGEST-MD5)\n- Add None guard in send_sasl_msg to match Java TSaslTransport\n- Fix recv_sasl_msg to return b\"\" instead of \"\" for zero-length payloads\n- Add unit tests for SASL negotiation including error paths\n"
    },
    {
      "commit": "caa4e7866df11091609ee184a5825365ab747a8c",
      "tree": "2f605964c0c3acc8e8ce87b0680dcc92b6471045",
      "parents": [
        "86b1519a5da05248ee42c702e02e48321030e024"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Mar 22 22:49:43 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Mar 22 22:49:43 2026 +0100"
      },
      "message": "disabled broken workflow \u003d\u003e see THRIFT-5936\n"
    },
    {
      "commit": "86b1519a5da05248ee42c702e02e48321030e024",
      "tree": "c4c23cbd18313d5ab0cfb9734fd96240e2ec24f4",
      "parents": [
        "68b9e87639ee6f2bf683aaea1d04cbb5d2b379de"
      ],
      "author": {
        "name": "CJCombrink",
        "email": "carel.combrink@gmail.com",
        "time": "Thu Mar 12 15:10:25 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Mar 22 22:45:17 2026 +0100"
      },
      "message": "THRIFT-4987: Fix TBinaryProtocol support in XHRConnection\nClient: js\nPatch: CJCombrink\n\nGenerated-By: Co-authored by Claude AI (see file comments)\n\nThis closes #3341\n"
    },
    {
      "commit": "68b9e87639ee6f2bf683aaea1d04cbb5d2b379de",
      "tree": "a0b3044af40a1340dfc929e653009a9399a173f5",
      "parents": [
        "0de53c48a7d101382d17490d265ac2d023938d3a"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Mar 22 12:43:53 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Mar 22 22:21:39 2026 +0100"
      },
      "message": "cmake workflow improvements\n- Pin action versions to full SHA\n- Add concurrency group\n- Add timeouts to all steps\n- Limit ctest parallelism to prevent resource exhaustion\n\nGenerated-by: OpenCode big-pickle\n"
    },
    {
      "commit": "0de53c48a7d101382d17490d265ac2d023938d3a",
      "tree": "67f299b3c2fd1d533f921b1009676d0fb2753125",
      "parents": [
        "ee261954f0c4cc2b40165e5f088e0d344842bb52"
      ],
      "author": {
        "name": "Pengpeng Hou",
        "email": "pengpeng@iscas.ac.cn",
        "time": "Sun Mar 22 07:25:58 2026 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Mar 22 14:29:07 2026 +0100"
      },
      "message": "THRIFT-5931: c_glib: avoid fixed-size buffers in thrift_ssl_socket_get_ssl_error()\n\nthrift_ssl_socket_get_ssl_error() still builds SSL error messages in a fixed stack buffer while tracking remaining space with a signed counter that is updated by subtracting snprintf() return values.\n\nIf the formatted error text is long enough, that counter can underflow and the later writes can walk past the intended buffer boundaries.\n\nBuild the error message with GString instead so the helper no longer depends on hand-rolled remaining-space arithmetic.\n\nSigned-off-by: Pengpeng Hou \u003cpengpeng@iscas.ac.cn\u003e\n"
    },
    {
      "commit": "ee261954f0c4cc2b40165e5f088e0d344842bb52",
      "tree": "7c6210e0ec8c223122a347436e30750c39377981",
      "parents": [
        "5ff02040fb3c6d7546b560afa169d5a7cd7cc2ac"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Mar 18 16:28:43 2026 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Mar 22 14:28:14 2026 +0100"
      },
      "message": "Fix and expand mergeable label mappings\n"
    },
    {
      "commit": "5ff02040fb3c6d7546b560afa169d5a7cd7cc2ac",
      "tree": "4bb5e6b5f45fff33bd6cf30c30967787fffc2875",
      "parents": [
        "26e23942c7b7ec60252d08d011057dc8fabda2f4"
      ],
      "author": {
        "name": "Pavel Kvach",
        "email": "pavel.kvach@gmail.com",
        "time": "Sun Mar 22 09:52:22 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Mar 22 14:21:33 2026 +0100"
      },
      "message": "THRIFT-5935: Fix deprecated non-canonical casts for PHP 8.5 compatibility\n"
    },
    {
      "commit": "26e23942c7b7ec60252d08d011057dc8fabda2f4",
      "tree": "823a7e62cf9a9e66edead4cf05d699d5699f942f",
      "parents": [
        "f8622a7b35f1df860df35b06d0fe4d2805ac309c"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Mar 22 13:13:28 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Mar 22 14:15:36 2026 +0100"
      },
      "message": "fix: remove invalid step-level permissions syntax\n"
    },
    {
      "commit": "f8622a7b35f1df860df35b06d0fe4d2805ac309c",
      "tree": "8ec305654f07806dcbc98de44a3ef56fa2f417a7",
      "parents": [
        "821140cfba71b5d159e888a3c006e739dc5b31f3"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Mar 22 12:35:23 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Mar 22 14:11:23 2026 +0100"
      },
      "message": "msvc build improvements\n- add concurrency group to cancel redundant runs\n- pin GitHub action versions to full SHA\n- add error handling and timeouts to Docker operations\n- Classify pull failures: 404\u003drebuild, auth/registry errors\u003dfail loud\n- Add timeouts: pull(10m), build(60m), push(20m), test(120m)\n- restrict packages:write permission to non-PR runs\n- Remove packages:write from workflow-level permissions\n- Add step-level permissions to GHCR login step\n- Add condition to skip login for pull requests (including forks)\n- Fork PRs now have minimal permissions (contents:read only)\n\nGenerated-by: OpenCode big-pickle\n"
    },
    {
      "commit": "821140cfba71b5d159e888a3c006e739dc5b31f3",
      "tree": "8e1ab7c9488a746953ea1a659416925730c90fd6",
      "parents": [
        "9ffc337cadc3cd4b77bb1b54bf9fa97b94831e54"
      ],
      "author": {
        "name": "Arthur Lazzaretti",
        "email": "alazzaretti@x.ai",
        "time": "Mon Mar 16 17:18:45 2026 -0700"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Mar 21 19:56:06 2026 +0100"
      },
      "message": "THRIFT-5928: fix skip() for binary fields with non-UTF-8 bytes\nClient: rs\n\nskip_till_depth() calls read_string() for TType::String fields, which\nperforms String::from_utf8() and fails on binary fields containing raw\nbytes. Since string and binary share the same wire type and skip()\ndiscards the value anyway, use read_bytes() instead.\n\nThis is safe because:\n- The result is discarded immediately via .map(|_| ())\n- read_string() is literally read_bytes() + String::from_utf8()\n- Both consume identical wire bytes (4-byte length + N bytes)\n- No behavioral change for valid UTF-8 string data\n\nThe bug triggers any time a newer schema adds a binary field to a\nstruct that an older binary is still deserializing — the older binary\nhits the skip() path for the unknown field and fails on the raw bytes.\n"
    },
    {
      "commit": "9ffc337cadc3cd4b77bb1b54bf9fa97b94831e54",
      "tree": "fec1c00b0e2e935dc8d60ba237d8a507eb958a5c",
      "parents": [
        "67b4ec7363680a4831735ab8dc00b0b2059b5961"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Mar 11 21:02:28 2026 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Mar 21 19:52:46 2026 +0100"
      },
      "message": "Fix Ruby client seqid handling\n"
    },
    {
      "commit": "67b4ec7363680a4831735ab8dc00b0b2059b5961",
      "tree": "ca1bc456508f9ec0ca573ebe2d8743efa9b4a812",
      "parents": [
        "98034d1f5f9d7a3daea90010689dc73dc6a01cd0"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Mar 21 00:00:19 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Mar 21 19:44:04 2026 +0100"
      },
      "message": "Bump flatted from 3.3.2 to 3.4.2\n\nBumps [flatted](https://github.com/WebReflection/flatted) from 3.3.2 to 3.4.2.\n- [Commits](https://github.com/WebReflection/flatted/compare/v3.3.2...v3.4.2)\n\n---\nupdated-dependencies:\n- dependency-name: flatted\n  dependency-version: 3.4.2\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "98034d1f5f9d7a3daea90010689dc73dc6a01cd0",
      "tree": "59599d63139c96db349c7302690578ff15271ddd",
      "parents": [
        "3b0ab4dfa16ac0dad477db836c60186955f15418"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Mar 19 20:24:46 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Mar 21 00:58:35 2026 +0100"
      },
      "message": "Regression test for THRIFT-4002: Immutable exception deserialization\nClient: py\nPatch: Jens Geyer\nGenerated-by: Opencode big-pickle\n\nThis test verifies that immutable structs (including exceptions, which are immutable by default since Thrift 0.14.0) can be properly deserialized without triggering the __setattr__ TypeError.\n\nThe bug manifests when:\n1. A struct class is marked immutable (has __setattr__ that raises TypeError)\n2. Thrift\u0027s deserialization tries to set attributes via setattr instead of using the kwargs constructor\n\nTest coverage:\n- Immutable exception creation and hashability\n- Immutable exception blocks modification/deletion\n- Round-trip serialization/deserialization with TBinaryProtocol\n- Round-trip serialization/deserialization with TCompactProtocol\n- Accelerated protocol tests (C extension) when available\n\nRelated: THRIFT-4002, THRIFT-5715\n"
    },
    {
      "commit": "3b0ab4dfa16ac0dad477db836c60186955f15418",
      "tree": "230b742e3a52b56d09c4e6beaf3ca68621a01a3a",
      "parents": [
        "dfeab8d57f41c8ca52269181a7be0092383d94ab"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Mar 11 17:46:48 2026 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Mar 17 22:06:26 2026 +0100"
      },
      "message": "Enforce consistent whitespaces around blocks, equal signs, and in parameters in Ruby code\n"
    },
    {
      "commit": "dfeab8d57f41c8ca52269181a7be0092383d94ab",
      "tree": "3aaf18c89167160fed5d5e5c35cbb6ccc35c22d4",
      "parents": [
        "4fc4c46e8ea1e9173789b91ac6e5322b93f3e0bd"
      ],
      "author": {
        "name": "CJCombrink",
        "email": "carel.combrink@gmail.com",
        "time": "Fri Mar 06 07:03:56 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Tue Mar 17 21:53:01 2026 +0100"
      },
      "message": "THRIFT-5924: UUID support for NodeTS\nClient: ts,js\nPatch: CJCombrink\nThis closes #3331\n"
    },
    {
      "commit": "4fc4c46e8ea1e9173789b91ac6e5322b93f3e0bd",
      "tree": "bcd651dbbc331dca189ec9a5e4d79bbe5b771dec",
      "parents": [
        "5bd98f4936f407d8cf5524ca91ec6bb9538d282d"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Mar 17 21:39:02 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 17 21:39:02 2026 +0100"
      },
      "message": "Added section about AI generated content to CONTRIBUTING.md"
    },
    {
      "commit": "5bd98f4936f407d8cf5524ca91ec6bb9538d282d",
      "tree": "55d676d6bb7034a6bc68e1b61c41827d7a4ad2ac",
      "parents": [
        "1091fe6fa88097248f89529f7278290fa4838d05"
      ],
      "author": {
        "name": "JensG via OpenCode",
        "email": "opencode@local.box",
        "time": "Mon Mar 16 23:29:56 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Mar 17 21:26:28 2026 +0100"
      },
      "message": "fix: flake8 errors\n"
    },
    {
      "commit": "1091fe6fa88097248f89529f7278290fa4838d05",
      "tree": "eadba7bfebc4532c6fd207835e4057cb0cf1518e",
      "parents": [
        "5b5fd3cd62a47338ea46c43655f0c2270fce41ad"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Mar 16 22:43:36 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Mar 17 21:26:28 2026 +0100"
      },
      "message": "THRIFT-5927 Cannot use reserved language keyword \"None\" with target language Python\nClient: py\nPatch: Jens Geyer\nGenerated-by: Opencode big-pickle\n"
    },
    {
      "commit": "5b5fd3cd62a47338ea46c43655f0c2270fce41ad",
      "tree": "d9f4e3e14417ad694b096b142db62b5c838ce7a5",
      "parents": [
        "0564434e0b85a2d7487f1c6f0b129d9697e1134a"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Mar 11 19:50:50 2026 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Mar 17 00:18:42 2026 +0100"
      },
      "message": "Fix crashes caused by unchecked memory allocation in Ruby library\n"
    },
    {
      "commit": "0564434e0b85a2d7487f1c6f0b129d9697e1134a",
      "tree": "918fd74c254a436295bf7472569cb39410df5477",
      "parents": [
        "604179840b49853201cb8b65997b29d165c4f8b5"
      ],
      "author": {
        "name": "Volodymyr Panivko",
        "email": "sveneld300@gmail.com",
        "time": "Sat Mar 07 14:16:50 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Mar 15 22:39:44 2026 +0100"
      },
      "message": "THRIFT-5587: Add UUID support for PHP\nClient: py\nPatch: Volodymyr Panivko\n\nThis closes #3332\n"
    },
    {
      "commit": "604179840b49853201cb8b65997b29d165c4f8b5",
      "tree": "79f3a5331439155b3c6671a75146f116f18d4043",
      "parents": [
        "a715bdffaa805baae5b0b994231556b566ca326c"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Sat Mar 14 02:12:29 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 13 23:12:29 2026 -0700"
      },
      "message": "Implemented Ruby fuzzing (#3339)\n\nThis PR implements fuzzing for Ruby library using https://github.com/trailofbits/ruzzy, a coverage-guided fuzzer for pure Ruby code and Ruby C extensions based on libFuzzer. Implemented binary, compact, and JSON protocol fuzzers.\n\nA separate PR will follow to address OOM and a crash caused by unchecked memory allocation in structs (Edit: #3340)."
    },
    {
      "commit": "a715bdffaa805baae5b0b994231556b566ca326c",
      "tree": "cec57938935b441816402e474c37d1ba1ea25e92",
      "parents": [
        "6f182854d7a5f3cfc110c875d6decd3bafd1689f"
      ],
      "author": {
        "name": "Carel Combrink",
        "email": "carel.combrink@gmail.com",
        "time": "Thu Oct 30 07:44:21 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Mar 11 22:39:49 2026 +0100"
      },
      "message": "THRIFT-5923: UUID python\nClient: py\nPatch: CJCombrink\n\nThis closes #3330\n"
    },
    {
      "commit": "6f182854d7a5f3cfc110c875d6decd3bafd1689f",
      "tree": "a7b0ed184959ca73f3a4853e1f0a1c1431a46d9f",
      "parents": [
        "c701dd4aaf342da5614c1445589acbb6ac415edd"
      ],
      "author": {
        "name": "Santiago Medina Rolong",
        "email": "smedinarolong@twitter.com",
        "time": "Tue Mar 10 18:39:33 2026 -0700"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Mar 11 22:28:12 2026 +0100"
      },
      "message": "THRIFT-5927: fix i16 overflow in compact protocol read_field_begin\n\nReplace unchecked +\u003d with checked_add to prevent overflow.\nIn overflow-checked builds this caused a panic; in release builds\nthe accumulator wrapped silently, discarding all subsequent fields.\n"
    },
    {
      "commit": "c701dd4aaf342da5614c1445589acbb6ac415edd",
      "tree": "d28ae7fcead8849b7b6521a11fb7196f6dcd15e2",
      "parents": [
        "f5c80a41d57f46283ee858f445f2e0a84b62f1dd"
      ],
      "author": {
        "name": "Santiago Medina Rolong",
        "email": "smedinarolong@twitter.com",
        "time": "Tue Mar 10 18:40:40 2026 -0700"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Mar 11 22:24:34 2026 +0100"
      },
      "message": "THRIFT-5926: fix Rust union deserializer panic on unknown field ID\n\nThe wildcard arm in generated union read_from_in_protocol incremented\nreceived_field_count without setting ret. When exactly one unknown\nfield was received, the count reached 1 with ret still None, causing\nthe else branch to panic via .expect().\n\nRemove the counter increment from the wildcard arm. Unknown fields\nare already discarded by i_prot.skip(); they must not affect the\ncount that drives union validation logic.\n"
    },
    {
      "commit": "f5c80a41d57f46283ee858f445f2e0a84b62f1dd",
      "tree": "f9efe38b47ee8cd9ec430ca6c00d4e457193e585",
      "parents": [
        "df22bb1b1b193c2d9e1ebc2e614b22830dbb7abc"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Sun Mar 08 19:09:43 2026 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Mar 11 22:21:53 2026 +0100"
      },
      "message": "Enforce consistent emtpy lines and trailing whitespaces in Ruby code\n"
    },
    {
      "commit": "df22bb1b1b193c2d9e1ebc2e614b22830dbb7abc",
      "tree": "f6e11adbd6d1bfdf05f36e12e4b7035463b29652",
      "parents": [
        "45b6935a80859016862080f97678ac415e758bed"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Sat Dec 20 13:41:21 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Mar 11 08:47:12 2026 +0100"
      },
      "message": "Added Rubocop harness to enforce Ruby code style\n"
    },
    {
      "commit": "45b6935a80859016862080f97678ac415e758bed",
      "tree": "773e1dde0251edda6eeadd7fccc76ddce1647bb0",
      "parents": [
        "96b7f21b54889610ebbff864cdb2653d507ebdad"
      ],
      "author": {
        "name": "CJCombrink",
        "email": "carel.combrink@gmail.com",
        "time": "Tue Mar 10 07:32:03 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Mar 11 00:08:25 2026 +0100"
      },
      "message": "THRIFT-5925: Java UUID fix\nClient: Java\nPatch: CJCombrink\n\nThis closes #3334\n\n- Using gradle spotlessApply\n\nAdding a decorator to assist with code that used the uuid field already in Java\n- For those who can\u0027t migrate to new UUID format\n- Also captures the code that was used before\n\nFix UUID implementation in Java to be according to the Thrift UUID specification\n- Don\u0027t do byte swapping when writing to and reading from the wire.\n- This is a breaking change for anyone using UUID between Java servers\n- For users that depends on this behaviour a TProtocolDecorator can be used to get back the old behaviour\n"
    },
    {
      "commit": "96b7f21b54889610ebbff864cdb2653d507ebdad",
      "tree": "8fa13c46fdd7bc59e6011a767a8da3e9bc178a5f",
      "parents": [
        "3346c01d0126b6ed5220fd4b6aaa946cca9e9fe9"
      ],
      "author": {
        "name": "nighmared",
        "email": "jonas.konrath@icloud.com",
        "time": "Tue Mar 03 16:27:06 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Mar 05 22:38:07 2026 +0100"
      },
      "message": "THRIFT-5922: made http header lookup case insensitive\n\nClient: lua\n"
    },
    {
      "commit": "3346c01d0126b6ed5220fd4b6aaa946cca9e9fe9",
      "tree": "66715fe49ddc367f3b21d92dd321224d50411289",
      "parents": [
        "7e06eb8263c8987841d18ff0283a4a0b4b91b742"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Fri Feb 13 17:40:41 2026 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Mar 05 22:37:52 2026 +0100"
      },
      "message": "Run static code analysis on GitHub\n"
    },
    {
      "commit": "7e06eb8263c8987841d18ff0283a4a0b4b91b742",
      "tree": "2be818696171548bdb82a4faf869e2c6c974fe80",
      "parents": [
        "85bf85382ac7d9d78810f812e3f127992bf95c91"
      ],
      "author": {
        "name": "haosenwang1018",
        "email": "167664334+haosenwang1018@users.noreply.github.com",
        "time": "Thu Feb 26 01:54:05 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Mar 05 21:53:19 2026 +0100"
      },
      "message": "fix: replace 4 bare except clauses with except Exception\n"
    },
    {
      "commit": "85bf85382ac7d9d78810f812e3f127992bf95c91",
      "tree": "a7dc0853e3612e90406ea0a149d4351754e04a31",
      "parents": [
        "2ee7d1160a07b8e9e1ce56910529798bdeae7903"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Mar 01 06:04:08 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Mar 05 21:50:38 2026 +0100"
      },
      "message": "Bump jvm from 2.3.0 to 2.3.10 in /lib/kotlin\n\nBumps [jvm](https://github.com/JetBrains/kotlin) from 2.3.0 to 2.3.10.\n- [Release notes](https://github.com/JetBrains/kotlin/releases)\n- [Changelog](https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md)\n- [Commits](https://github.com/JetBrains/kotlin/compare/v2.3.0...v2.3.10)\n\n---\nupdated-dependencies:\n- dependency-name: jvm\n  dependency-version: 2.3.10\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "2ee7d1160a07b8e9e1ce56910529798bdeae7903",
      "tree": "ee503c70cd55cbc4b9f81716652a591647e0027c",
      "parents": [
        "99e0f6fc37b5e59f07ddbb3ef1739804d49703a9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Mar 01 06:03:04 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Mar 05 21:50:30 2026 +0100"
      },
      "message": "Bump actions/download-artifact from 6 to 8\n\nBumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 8.\n- [Release notes](https://github.com/actions/download-artifact/releases)\n- [Commits](https://github.com/actions/download-artifact/compare/v6...v8)\n\n---\nupdated-dependencies:\n- dependency-name: actions/download-artifact\n  dependency-version: \u00278\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "99e0f6fc37b5e59f07ddbb3ef1739804d49703a9",
      "tree": "7fb392ff7d8a079eec0a66ff699d564ea09c8a87",
      "parents": [
        "e51271f5388e082864f78fc358d3d35d44abe67c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Mar 01 06:02:57 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Mar 05 21:49:59 2026 +0100"
      },
      "message": "Bump actions/upload-artifact from 5 to 7\n\nBumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 7.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v5...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifact\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "e51271f5388e082864f78fc358d3d35d44abe67c",
      "tree": "43c63d2a4cb5a604f15eae490cffae28b5883bb9",
      "parents": [
        "b1ed0795e1f28adcce5e016cdc6c2cc24ddf6b9a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 03 11:46:25 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Mar 05 21:43:50 2026 +0100"
      },
      "message": "Bump minimatch from 3.1.2 to 3.1.5\n\nBumps [minimatch](https://github.com/isaacs/minimatch) from 3.1.2 to 3.1.5.\n- [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md)\n- [Commits](https://github.com/isaacs/minimatch/compare/v3.1.2...v3.1.5)\n\n---\nupdated-dependencies:\n- dependency-name: minimatch\n  dependency-version: 3.1.5\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "b1ed0795e1f28adcce5e016cdc6c2cc24ddf6b9a",
      "tree": "6c2cd762eb586b2c90751e7ad9b0fb606f7b6eff",
      "parents": [
        "8a358b8c94bb960fe66c3ad39e6d70fef1ef6439"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Mar 03 18:12:30 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Mar 05 21:37:23 2026 +0100"
      },
      "message": "Bump underscore from 1.13.6 to 1.13.8 in /lib/ts\n\nBumps [underscore](https://github.com/jashkenas/underscore) from 1.13.6 to 1.13.8.\n- [Commits](https://github.com/jashkenas/underscore/compare/1.13.6...1.13.8)\n\n---\nupdated-dependencies:\n- dependency-name: underscore\n  dependency-version: 1.13.8\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "8a358b8c94bb960fe66c3ad39e6d70fef1ef6439",
      "tree": "9bcef692a80479c6a7ff0c162a00c81ee4f98e51",
      "parents": [
        "5cc10222d0e1268a5a70be8d8627bc03ec2e42ad"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Sun Feb 22 12:11:12 2026 +0530"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Feb 25 22:49:02 2026 +0100"
      },
      "message": "Use read_nonblock instead of readpartial to account for SSL socket buffer\n"
    },
    {
      "commit": "5cc10222d0e1268a5a70be8d8627bc03ec2e42ad",
      "tree": "2fdc001a8eeabc5df0d220a20941492b474fac3d",
      "parents": [
        "d7c06f68aff53a01f28bdf2fb62ac5af32b9b4e3"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Mon Nov 24 18:01:10 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Feb 25 22:48:23 2026 +0100"
      },
      "message": "Constants demo\n"
    },
    {
      "commit": "d7c06f68aff53a01f28bdf2fb62ac5af32b9b4e3",
      "tree": "9e46d181317d44daf53486cee86528ce9cc08275",
      "parents": [
        "3adaf0d592456250b2627ba8614438fc12f02cb6"
      ],
      "author": {
        "name": "Volodymyr Panivko",
        "email": "sveneld300@gmail.com",
        "time": "Sun Feb 22 20:20:13 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Feb 25 22:47:41 2026 +0100"
      },
      "message": "THRIFT-5921 Ubuntu focal fail to run composer install\n\nSigned-off-by: Volodymyr Panivko \u003csveneld300@gmail.com\u003e\n"
    },
    {
      "commit": "3adaf0d592456250b2627ba8614438fc12f02cb6",
      "tree": "056bb0f3199970d16d43d89c5d6ede5caf984243",
      "parents": [
        "b48ba36cd27493233934f92f029efac92740c2dd"
      ],
      "author": {
        "name": "Shaoyu Zhang",
        "email": "zsy056@users.noreply.github.com",
        "time": "Fri Feb 20 13:28:16 2026 -0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Feb 25 22:47:17 2026 +0100"
      },
      "message": "Refresh msvc docker build\n"
    },
    {
      "commit": "b48ba36cd27493233934f92f029efac92740c2dd",
      "tree": "5117ef38be51eda99c763355ce14ee952fe675a8",
      "parents": [
        "32776c0f46f5fd79b296391d66236c23b20af072"
      ],
      "author": {
        "name": "Mark Molinaro",
        "email": "mmolinaro@pinterest.com",
        "time": "Wed Feb 25 17:51:37 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Feb 25 22:46:55 2026 +0100"
      },
      "message": "python: add more precise typehints for immutable structs\n"
    },
    {
      "commit": "32776c0f46f5fd79b296391d66236c23b20af072",
      "tree": "07867002f4461ef152060deb8a4e07dd2134102f",
      "parents": [
        "ca0740a0b9cd0a0ddeecdcdaf655f8b336c5ca75"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Tue Feb 10 12:25:07 2026 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Feb 21 10:15:18 2026 +0100"
      },
      "message": "Make sure we always throw ProtocolException(INVALID_DATA) in Ruby\n"
    },
    {
      "commit": "ca0740a0b9cd0a0ddeecdcdaf655f8b336c5ca75",
      "tree": "d819a696471315c624655b6889e011a1aa62ee0d",
      "parents": [
        "1c989cdf6b2a37082667ff13cbe1862e73e43720"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "wang@yuxuan.org",
        "time": "Fri Feb 20 20:05:20 2026 -0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Feb 21 10:11:39 2026 +0100"
      },
      "message": "go: Modernize codebase with go fix\n"
    },
    {
      "commit": "1c989cdf6b2a37082667ff13cbe1862e73e43720",
      "tree": "d8b31cc26a741c011372e8d5b1c2321e0a53af6c",
      "parents": [
        "e4666f293478e3457898867095105ff2d23b155e"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Fri Feb 13 19:34:40 2026 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Feb 21 10:11:18 2026 +0100"
      },
      "message": "Fixed PHP phpcs offenses\n"
    },
    {
      "commit": "e4666f293478e3457898867095105ff2d23b155e",
      "tree": "0bd71db97427241d2bf732db13de58a9c379386c",
      "parents": [
        "d135ac58514e728159c3baea7f8957765a970aa6"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Fri Feb 20 00:12:57 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Feb 20 01:08:25 2026 +0100"
      },
      "message": "THRIFT-5917: Rust currently broken and no maintainers around\n"
    },
    {
      "commit": "d135ac58514e728159c3baea7f8957765a970aa6",
      "tree": "51e77e585e75a164c87b97fd726d402d4a151807",
      "parents": [
        "93b1b449d93b747e7b79cfc270ce492f7f4a34e4"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Feb 19 22:55:25 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Feb 20 00:38:17 2026 +0100"
      },
      "message": "Bump rack from 2.2.21 to 2.2.22 in /test/rb\n\nBumps [rack](https://github.com/rack/rack) from 2.2.21 to 2.2.22.\n- [Release notes](https://github.com/rack/rack/releases)\n- [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/rack/rack/compare/v2.2.21...v2.2.22)\n\n---\nupdated-dependencies:\n- dependency-name: rack\n  dependency-version: 2.2.22\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "93b1b449d93b747e7b79cfc270ce492f7f4a34e4",
      "tree": "fbc33e7000e7047f5f1e072584abe11b72869e5c",
      "parents": [
        "acbcf10d91cdea4b5d8c855b8f27acd890ffecc8"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Feb 19 22:55:01 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Feb 20 00:38:10 2026 +0100"
      },
      "message": "Bump rack from 2.2.21 to 2.2.22 in /lib/rb\n\nBumps [rack](https://github.com/rack/rack) from 2.2.21 to 2.2.22.\n- [Release notes](https://github.com/rack/rack/releases)\n- [Changelog](https://github.com/rack/rack/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/rack/rack/compare/v2.2.21...v2.2.22)\n\n---\nupdated-dependencies:\n- dependency-name: rack\n  dependency-version: 2.2.22\n  dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "acbcf10d91cdea4b5d8c855b8f27acd890ffecc8",
      "tree": "64b625cf9730bff5b92659ed4fe32c213d33d2ca",
      "parents": [
        "96d62dd1700e84293b99546bcf0d4ed17c25728a"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Fri Feb 13 18:25:55 2026 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Feb 20 00:17:08 2026 +0100"
      },
      "message": "Fixed Python flake8 offenses\n"
    },
    {
      "commit": "96d62dd1700e84293b99546bcf0d4ed17c25728a",
      "tree": "f7d86692cf0d2c98c2b06eded25e94a15a16b999",
      "parents": [
        "fe43dec2bf11bd0747ac1405acc442b7c097a995"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Fri Feb 13 15:16:16 2026 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Feb 20 00:16:48 2026 +0100"
      },
      "message": "Added --server-type argument to Ruby cross-tests integration server\n"
    },
    {
      "commit": "fe43dec2bf11bd0747ac1405acc442b7c097a995",
      "tree": "6fed113c48092c1d57ee58d0d30447d3f71cbcd0",
      "parents": [
        "672124127246bd65c4dd41e5b215cdbe77bf1beb"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Fri Feb 13 20:23:07 2026 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Feb 20 00:16:36 2026 +0100"
      },
      "message": "Fixed C++ cppcheck offenses\n"
    },
    {
      "commit": "672124127246bd65c4dd41e5b215cdbe77bf1beb",
      "tree": "22c88eaf9920007f2e540a7c23946378c3e9b565",
      "parents": [
        "c3cdacf1beae8a309a904f27d65850f0b4c3e3d6"
      ],
      "author": {
        "name": "shang",
        "email": "shang@uber.com",
        "time": "Thu Feb 12 10:28:12 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Feb 20 00:15:59 2026 +0100"
      },
      "message": "Update the `ProcessFunction::getResult` method to return the _result type instead of a general TBase\n"
    },
    {
      "commit": "c3cdacf1beae8a309a904f27d65850f0b4c3e3d6",
      "tree": "e8f14b0a24cbf3710e61be36071f6e756435b13d",
      "parents": [
        "0b6822804eb4fdeefc6143fbe72478c7309be7b7"
      ],
      "author": {
        "name": "copilot-swe-agent[bot]",
        "email": "198982749+Copilot@users.noreply.github.com",
        "time": "Mon Feb 09 21:30:16 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Feb 20 00:15:44 2026 +0100"
      },
      "message": "cpp: add template_streamop generation with runtime/compiler test coverage\n\nAdd template_streamop support in the C++ generator so generated operator\u003c\u003c and printTo can target generic stream-like output types.\nKeep default behavior unchanged when the option is not set (std::ostream signatures remain).\nAdd compiler/runtime coverage for template generation, friend declaration correctness, enums, and collection printing.\n\ndefault:\n```cpp\nstd::ostream\u0026 operator\u003c\u003c(std::ostream\u0026 out, const SimpleStruct\u0026 obj);\n\nclass SimpleStruct {\npublic:\n  void printTo(std::ostream\u0026 out) const;\n};\n```\n\nwith `template_streamop`:\n```cpp\ntemplate \u003ctypename OStream_\u003e\nOStream_\u0026 operator\u003c\u003c(OStream_\u0026 out, const SimpleStruct\u0026 obj);\n\nclass SimpleStruct {\npublic:\n  template \u003ctypename OStream_\u003e\n  void printTo(OStream_\u0026 out) const;\n};\n```\n"
    },
    {
      "commit": "0b6822804eb4fdeefc6143fbe72478c7309be7b7",
      "tree": "345c63f99bc7bb35505c0767d529253831f0ee6a",
      "parents": [
        "697910f23fc5b21d21fad20499e2a43dd0496092"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Feb 04 16:26:46 2026 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Feb 20 00:15:37 2026 +0100"
      },
      "message": "Wire TLS keys in Python for cross-tests\n\nConfigure Python test client/server to use shared test keys and CA for SSL.\nRemove Python SSL entries from known failures to re-enable SSL coverage.\n"
    },
    {
      "commit": "697910f23fc5b21d21fad20499e2a43dd0496092",
      "tree": "a35e28fe3df6296c57edc01fa2f4fdfcf7d202f5",
      "parents": [
        "d24b8a0240d49ccbbb318ea7562d0894a410dda7"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Fri Feb 13 14:12:43 2026 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Feb 20 00:15:18 2026 +0100"
      },
      "message": "Fixed en error preventing Thrift::NonblockingServer from working with SSL\n"
    },
    {
      "commit": "d24b8a0240d49ccbbb318ea7562d0894a410dda7",
      "tree": "6414282010beaaa4b01c7438f403fb2e5c7c7a5d",
      "parents": [
        "ded241d73207eed94417bb2a457ea03506646480"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Mon Dec 01 18:41:20 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Feb 20 00:14:50 2026 +0100"
      },
      "message": "Cleaned up code supporting Ruby \u003c 2.0\n"
    },
    {
      "commit": "ded241d73207eed94417bb2a457ea03506646480",
      "tree": "75a97ca8483f4e4cfe1bfde0e4a2fdf623b9677e",
      "parents": [
        "fd9756c19d1ea5763ffd8be88fff1db1ccd0d6ba"
      ],
      "author": {
        "name": "HTHou",
        "email": "hhaonan@outlook.com",
        "time": "Fri Feb 13 22:23:51 2026 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Feb 19 23:50:57 2026 +0100"
      },
      "message": "Remove threadsafe warnings in thrift-maven-plugin\n"
    },
    {
      "commit": "fd9756c19d1ea5763ffd8be88fff1db1ccd0d6ba",
      "tree": "cc6e1494ba1f7e48c56caf4d237eae737653815d",
      "parents": [
        "1e09a046e080765567b7125b01fd966c2596ee3f"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "wang@yuxuan.org",
        "time": "Tue Feb 10 17:34:09 2026 -0800"
      },
      "committer": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "fishywang@gmail.com",
        "time": "Wed Feb 11 07:18:42 2026 -0800"
      },
      "message": "Update supported go versions to 1.25+1.26\n\nFollow the release of go 1.26.0 today, go 1.24 is no longer supported by\nupstream.\n"
    },
    {
      "commit": "1e09a046e080765567b7125b01fd966c2596ee3f",
      "tree": "0caeb9c86a5416470a35a5a84ffc3d756d5bb38c",
      "parents": [
        "67bfb29af0837eefd32447c186d22aa45b2f1869"
      ],
      "author": {
        "name": "Copilot",
        "email": "198982749+Copilot@users.noreply.github.com",
        "time": "Thu Jan 29 10:36:28 2026 -0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Feb 08 22:09:37 2026 +0100"
      },
      "message": "Add moveable_types\u003dforward_setter option for perfect forwarding setters\n\nAdds `forward_setter` value to `moveable_types` option, generating perfect forwarding setters for complex types while preserving traditional setters for primitives. Also fixes missing `operator\u003c` implementation that caused link errors when structs are used as map keys.\n\n**Forward Setter Generation** (`compiler/cpp/src/thrift/generate/t_cpp_generator.cc`):\n- Parse `moveable_types\u003dforward_setter` option\n- Complex types (strings, containers, structs) → template setters with `std::forward\u003cT_\u003e`\n- Primitive types → traditional const-ref setters\n- Template implementations in `.tcc` file (auto-included in header)\n- Legacy `moveable_types` behavior unchanged\n\n**Compiler Unit Tests** (`compiler/cpp/tests/cpp/`):\n- New `test_forward_setter.thrift` fixture\n- Dedicated `t_cpp_generator_forward_setter_tests.cc` (91 assertions, 9 test cases)\n- Verify `.tcc` generation and template implementations\n\n**Integration Tests** (`test/cpp/src/`):\n- `ForwardSetterTest.cpp` - validates lvalue/rvalue/temporary/literal setters with move semantics\n- `PrivateOptionalTest.cpp` - SFINAE + static_assert verify optional fields are private\n- `EnumClassTest.cpp` - type_traits + static_assert verify true enum class semantics\n\n**CMakeLists.txt** (`test/cpp/`):\n- Separate gen-cpp-{forward,private,enumclass} directories\n\n**Makefile.am** (`test/cpp/`):\n- Library targets for each option variant\n- Proper `BUILT_SOURCES` dependencies\n- Include path ordering: option-specific directory before standard `gen-cpp`\n\n```cpp\n// Generated with --gen cpp:moveable_types\u003dforward_setter\n\nstruct TestStruct {\n  int32_t primitive_field;\n  std::string complex_field;\n\n  void __set_primitive_field(const int32_t val);  // Traditional\n\n  template \u003ctypename T_\u003e\n  void __set_complex_field(T_\u0026\u0026 val);  // Perfect forwarding\n};\n\n// In .tcc file:\ntemplate \u003ctypename T_\u003e\nvoid TestStruct::__set_complex_field(T_\u0026\u0026 val) {\n  this-\u003ecomplex_field \u003d ::std::forward\u003cT_\u003e(val);\n  __isset.complex_field \u003d true;\n}\n```\n\n- [ ] Did you create an [Apache Jira](https://issues.apache.org/jira/projects/THRIFT/issues/) ticket?  ([Request account here](https://selfserve.apache.org/jira-account.html), not required for trivial changes)\n- [ ] If a ticket exists: Does your pull request title follow the pattern \"THRIFT-NNNN: describe my issue\"?\n- [x] Did you squash your changes to a single commit?  (not required, but preferred)\n- [x] Did you do your best to avoid breaking changes?  If one was needed, did you label the Jira ticket with \"Breaking-Change\"?\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] \u003c198982749+Copilot@users.noreply.github.com\u003e\nCo-authored-by: zsy056 \u003c1074382+zsy056@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "67bfb29af0837eefd32447c186d22aa45b2f1869",
      "tree": "535f17d57dab9d7d73f8db45231374eaa076adda",
      "parents": [
        "84554fa31af2b04a5096546ef43d4f70c6f01506"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Jan 28 11:23:50 2026 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Feb 08 22:09:26 2026 +0100"
      },
      "message": "Implemented header protocol for Ruby client library\n"
    },
    {
      "commit": "84554fa31af2b04a5096546ef43d4f70c6f01506",
      "tree": "34c9fecc0d86e7162a723af98f122b71c9471985",
      "parents": [
        "d66874c0be0f050f969ccf081e4ad8b40287d57c"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Nov 19 19:41:05 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Feb 07 01:09:56 2026 +0100"
      },
      "message": "Enable cross tests for Ruby library\n"
    },
    {
      "commit": "d66874c0be0f050f969ccf081e4ad8b40287d57c",
      "tree": "25d9e849cbab96f45b072491eb0293d434f72980",
      "parents": [
        "4966d0748b843dcdafad353aed6b634cce06fb66"
      ],
      "author": {
        "name": "Federico Giovanardi",
        "email": "federico.giovanardi@cnhind.com",
        "time": "Tue Jan 27 14:12:39 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Feb 07 01:09:47 2026 +0100"
      },
      "message": "Do not shutdown() an external server socket\n\nFor the socket-activation use case the external socket should not\nbe shutdown() when the TServerSocket is closed.\n"
    },
    {
      "commit": "4966d0748b843dcdafad353aed6b634cce06fb66",
      "tree": "191b25495a7ee61d16822b421610be411554b268",
      "parents": [
        "4b69d1f47258bfd3db07dd60aa3df51ea233b110"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Feb 01 06:03:00 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Feb 07 00:09:05 2026 +0100"
      },
      "message": "Bump com.diffplug.spotless from 8.1.0 to 8.2.1 in /lib/kotlin\n\nBumps com.diffplug.spotless from 8.1.0 to 8.2.1.\n\n---\nupdated-dependencies:\n- dependency-name: com.diffplug.spotless\n  dependency-version: 8.2.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "4b69d1f47258bfd3db07dd60aa3df51ea233b110",
      "tree": "3200ab62db378241f04960893766f55d5a4917b8",
      "parents": [
        "e01b1b0e5be8fb941b010c9c3868c22c98f52d8c"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Feb 04 16:09:54 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Feb 07 00:08:58 2026 +0100"
      },
      "message": "Bump actions/download-artifact from 6 to 7\n\nBumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 7.\n- [Release notes](https://github.com/actions/download-artifact/releases)\n- [Commits](https://github.com/actions/download-artifact/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/download-artifact\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    }
  ],
  "next": "e01b1b0e5be8fb941b010c9c3868c22c98f52d8c"
}
