)]}'
{
  "log": [
    {
      "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "62ec929629bed63d968a25a16085080a227a8abf",
      "tree": "fe1e5f762936622a1d4f322c3fefcb238715f92b",
      "parents": [
        "dbdb429a8ca338d8b9bb082214a246cc61faca90"
      ],
      "author": {
        "name": "Gregg Donovan",
        "email": "gdonovan@etsy.com",
        "time": "Thu Jan 29 16:51:37 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jan 29 13:51:37 2026 -0800"
      },
      "message": "Fix Python 3.12 build issues in thrift Python (#3276)\n\n- Add pyproject.toml with setuptools build requirement for PEP 517 compliance\n- Replace distutils imports with setuptools equivalents\n- Use setuptools error names directly (CompileError, ExecError, PlatformError)\n- Fix macOS header collision with ntohll/htonll macros in endian.h\n- Add a matrix of MacOS versions (macos-15-intel, macos-14, macos-15,\n  macos-26)\n- Add a matrix of non-EOL Python versions for testing\n- Remove MSVC2015 from the test matrix (very old).\n- Support MSVC2022, the latest in AppVeyor.\n- Upgrade tornado, twisted, and zope.interface versions to the first\n  that support Python 3.12.\n- Try to make the test_socket, RunClientServer, and TestServer tests less flaky.\n\nThis fixes the ModuleNotFoundError: No module named \u0027distutils\u0027 error\nwhen building thrift with Python 3.12+."
    },
    {
      "commit": "75a287728a8f68fb76dacc81cfe8d97b81afc362",
      "tree": "c24734f688c1888cfec90a47509eed428f0c4d37",
      "parents": [
        "e9ac8e3f2603e0cd006c9395e03c03eddfff1aca"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Dec 17 17:07:27 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 28 01:52:06 2026 +0100"
      },
      "message": "Added a special no-extension build to test the code paths without native extensions\n"
    },
    {
      "commit": "e9ac8e3f2603e0cd006c9395e03c03eddfff1aca",
      "tree": "6ad1464b3baa316823e93f8b3c48c9fe85af8ac8",
      "parents": [
        "ab178fbf24e88bba05ae2b8f1f9876d783e934f6"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Nov 19 23:33:23 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 28 01:50:40 2026 +0100"
      },
      "message": "Added UUID support in Ruby library\n"
    },
    {
      "commit": "bec0234fd81d1bcbac7379ad893cfec757bae681",
      "tree": "0770aa5b628b8715059e9ceff58ec4245008d264",
      "parents": [
        "10d9272600e3577673c84d43bf0e6c4a64918177"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Jan 24 14:41:29 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 28 01:23:58 2026 +0100"
      },
      "message": "Bump lodash from 4.17.21 to 4.17.23 in /lib/ts\n\nBumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.\n- [Release notes](https://github.com/lodash/lodash/releases)\n- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)\n\n---\nupdated-dependencies:\n- dependency-name: lodash\n  dependency-version: 4.17.23\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "10d9272600e3577673c84d43bf0e6c4a64918177",
      "tree": "2559cd4c2daf21a5cd6f4686e49d9d5b00a72d89",
      "parents": [
        "6f76573602ab08c1b7ca9f6f6973cd4f1fbb3869"
      ],
      "author": {
        "name": "Hasnain Lakhani",
        "email": "m.hasnain.lakhani@gmail.com",
        "time": "Mon Jan 26 10:37:03 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 26 07:37:03 2026 -0800"
      },
      "message": "THRIFT-5916: Enforce recursion depth limit in Java for C++ parity (#3287)\n\nJava had TConfiguration.recursionLimit (default 64) and\nTProtocolException.DEPTH_LIMIT defined but the limit was not actually\nenforced during struct deserialization. This brings Java in line with\nC++ which already enforces recursion limits.\n\nChanges:\n- Add recursionDepth_ counter and increment/decrement methods to TProtocol\n- Modify Java code generator to emit try-finally depth tracking in\n  generate_standard_reader() and generate_java_struct_tuple_reader()\n\nStructures exceeding the configured recursion limit now throw\nTProtocolException(DEPTH_LIMIT) during deserialization."
    },
    {
      "commit": "4f76c3305e08aa482252aaeaf8906b6820dca9ce",
      "tree": "a3a3fb5c5aaf6603723b45af33d0788f9224c0ff",
      "parents": [
        "6e5e18180bfe110921d1b20da31b24200819265f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jan 21 23:02:37 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Jan 22 01:43:26 2026 +0100"
      },
      "message": "Bump lodash from 4.17.21 to 4.17.23 in /lib/js\n\nBumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.\n- [Release notes](https://github.com/lodash/lodash/releases)\n- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)\n\n---\nupdated-dependencies:\n- dependency-name: lodash\n  dependency-version: 4.17.23\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "6e5e18180bfe110921d1b20da31b24200819265f",
      "tree": "410f245db6d2146b1c63747279e9d0627e23e722",
      "parents": [
        "c3ced62289cff9c0c9cd537d902f00fae894b22e"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Nov 19 18:20:45 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Jan 22 01:41:32 2026 +0100"
      },
      "message": "Added Ruby library tests to the GitHub workflow\n"
    },
    {
      "commit": "4413220324d7694f8db128cd989822ff728df030",
      "tree": "503d60c005d3855a566772bff0fea215ada10618",
      "parents": [
        "7eeb1c1665806f08685a6233eddd2cce0eb7ae03"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Tue Dec 16 18:59:18 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Mon Jan 12 00:46:55 2026 +0100"
      },
      "message": "Fixed make check for Ruby library\n"
    },
    {
      "commit": "0d18fb2e97a00fc56997fa059d6819e54cdff64b",
      "tree": "5952e8dc1cdb7355f41cdb6cc4267c43a0b914f6",
      "parents": [
        "098c82722bd8bf021f21eb2fdd80a69a8c4b185b"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Sat Dec 20 12:13:46 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 07 22:40:45 2026 +0100"
      },
      "message": "Only export Init_thrift_native function from the Ruby binary extension\n"
    },
    {
      "commit": "098c82722bd8bf021f21eb2fdd80a69a8c4b185b",
      "tree": "cf15dc9c74395e56ef6f8c4c69ea0efddfb5dfdd",
      "parents": [
        "d9b4d95a1ff68b7ad3df2b3656e3e1a802dc8334"
      ],
      "author": {
        "name": "HTHou",
        "email": "haonan@apache.org",
        "time": "Mon Jan 05 16:12:52 2026 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 07 22:31:52 2026 +0100"
      },
      "message": "fix cross test error\n"
    },
    {
      "commit": "d9b4d95a1ff68b7ad3df2b3656e3e1a802dc8334",
      "tree": "0e1b8ed101666d12db8321540f7a23d4ef69afb2",
      "parents": [
        "b5919dd8f797829e1aed9276994394bb9de085d5"
      ],
      "author": {
        "name": "HTHou",
        "email": "haonan@apache.org",
        "time": "Mon Jan 05 14:37:48 2026 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 07 22:31:52 2026 +0100"
      },
      "message": "try to fix kotlin cross tests\n"
    },
    {
      "commit": "b5919dd8f797829e1aed9276994394bb9de085d5",
      "tree": "54a0d211010bcc05b49b46380bf77154ac86f742",
      "parents": [
        "dfa0979ebee93588e46d08cd2529e6857ad62f74"
      ],
      "author": {
        "name": "HTHou",
        "email": "haonan@apache.org",
        "time": "Mon Jan 05 12:17:56 2026 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 07 22:31:52 2026 +0100"
      },
      "message": "Add async nonblocking ssl support in java client\n"
    },
    {
      "commit": "dfa0979ebee93588e46d08cd2529e6857ad62f74",
      "tree": "f38405e67fafe05e4f2bd03a889f8613c00dffed",
      "parents": [
        "22ffdc79d004ab22f270870db0c9d407a446e914"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Jan 01 06:02:50 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 07 22:28:08 2026 +0100"
      },
      "message": "Bump jvm from 2.2.21 to 2.3.0 in /lib/kotlin\n\nBumps [jvm](https://github.com/JetBrains/kotlin) from 2.2.21 to 2.3.0.\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.2.21...v2.3.0)\n\n---\nupdated-dependencies:\n- dependency-name: jvm\n  dependency-version: 2.3.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": "09475949b9195c070f428c6c48a77690ff80c3f9",
      "tree": "943fc07b2afb0ba2b52163894e7357771ff6a956",
      "parents": [
        "bfeb7df761a7d93627b869a77acf811c29849f47"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Nov 19 16:23:42 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 07 22:14:38 2026 +0100"
      },
      "message": "Add TLS support to the benchmark script\n"
    },
    {
      "commit": "bfeb7df761a7d93627b869a77acf811c29849f47",
      "tree": "1515a4b9a5455e10116809529f7f4066923ac3e0",
      "parents": [
        "b8f7e5b3e79b033115ba536b726508f81a237eb8"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Mon Nov 24 20:05:10 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 07 22:10:56 2026 +0100"
      },
      "message": "Addressed discrepancy between accelerated and non-accelerated union implementation\n\nWhen binary extension is not available (for example, in JRuby), Thrift::Union\nthrows an unexpected NoMethodError instead of the intended error:\n\n  1) Union Thrift::Union should raise for wrong set field when hash initialized and type checking is off\n     Failure/Error: expect { Thrift::Serializer.new.serialize(union) }.to raise_error(RuntimeError, \"set_field is not valid for this union!\")\n\n       expected RuntimeError with \"set_field is not valid for this union!\", got #\u003cNoMethodError: undefined method \u0027[]\u0027 for nil\u003e with backtrace:\n         # ./lib/thrift/union.rb:78:in \u0027write\u0027\n         # ./lib/thrift/serializer/serializer.rb:29:in \u0027serialize\u0027\n         # ./spec/union_spec.rb:54:in \u0027block in \u003cmain\u003e\u0027\n         # ./spec/union_spec.rb:54:in \u0027block in \u003cmain\u003e\u0027\n     # ./spec/union_spec.rb:54:in \u0027block in \u003cmain\u003e\u0027\n"
    },
    {
      "commit": "b8f7e5b3e79b033115ba536b726508f81a237eb8",
      "tree": "bd4c63776ba9a19590e92f958451e53ee1bc967a",
      "parents": [
        "f06db1b067ab31e79b13ba7d0a3827c58d6767e1"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Nov 19 19:29:09 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Dec 16 23:40:45 2025 +0100"
      },
      "message": "Fixed \u0027#to_io gives NilClass\u0027 error\n\nIn a race condition in Thrift::NonblockingServer, the following sequence could occur:\n\n1. server transport checked for closure (@server_transport.closed?\n   returns false)\n2. another thread calls server.shutdown\n3. yet another thread, scheduled from #shutdown, calls #close on the\n   server transport, which also sets @handle to nil\n4. back in the first thread, #to_io is called on the server transport,\n   which now returns @handle as nil, causing an error:\n\n  1) NonblockingServer Thrift::NonblockingServer should shut down when asked\n     Failure/Error: rd, \u003d select([@server_transport], nil, nil, 0.1)\n\n     TypeError:\n       can\u0027t convert SpecServerSocket to IO (SpecServerSocket#to_io gives NilClass)\n     # ./lib/thrift/server/nonblocking_server.rb:48:in `select\u0027\n     # ./lib/thrift/server/nonblocking_server.rb:48:in `block in serve\u0027\n     # ./lib/thrift/server/nonblocking_server.rb:45:in `loop\u0027\n     # ./lib/thrift/server/nonblocking_server.rb:45:in `serve\u0027\n     # ./spec/nonblocking_server_spec.rb:116:in `block (4 levels) in \u003ctop (required)\u003e\u0027\n\nThis patch changes Thrift::ServerSocket#to_io to raise IOError if\n@handle is nil, which is the expected behavior for closed streams in Ruby:\n\n  require \u0027socket\u0027\n  server \u003d TCPServer.new(\u0027localhost\u0027, 55554)\n  server.close\n  select([server], nil, nil, 0.1)\n  # \u003d\u003e IOError: closed stream\n"
    },
    {
      "commit": "f06db1b067ab31e79b13ba7d0a3827c58d6767e1",
      "tree": "6bd61bef517a00defadc9f0291027cf429b5340f",
      "parents": [
        "c77cbd263aa998cb110c8cbb1bb0dca55e8cac07"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Thu Nov 20 18:09:21 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Dec 16 23:40:19 2025 +0100"
      },
      "message": "Remove Fixnum references to support modern Ruby versions\n\nFixnum type has been deprecated since Ruby 2.4 and removed in Ruby 3.0,\nwhich makes BaseProtocol incompatible with modern Ruby versions.\n\nThis change removes the Fixnum reference, as well as a monkey-patch that\nintroduces Fixnum#ord() to Ruby versions below 1.8.7.\n\n**This change essentially makes it officially required to use Ruby 2.4 or newer.**\n\nFixes the following test failures:\n\n  1) BaseProtocol Thrift::BaseProtocol should write out the different types (deprecated write_type signature)\n     Failure/Error: if field_info.is_a? Fixnum\n\n     NameError:\n       uninitialized constant Thrift::BaseProtocol::Fixnum\n     # ./lib/thrift/protocol/base_protocol.rb:256:in \u0027Thrift::BaseProtocol#write_type\u0027\n     # ./spec/base_protocol_spec.rb:65:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n\n  2) BaseProtocol Thrift::BaseProtocol should write out the different types\n     Failure/Error: if field_info.is_a? Fixnum\n\n     NameError:\n       uninitialized constant Thrift::BaseProtocol::Fixnum\n     # ./lib/thrift/protocol/base_protocol.rb:256:in \u0027Thrift::BaseProtocol#write_type\u0027\n     # ./spec/base_protocol_spec.rb:90:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n\n  3) BaseProtocol Thrift::BaseProtocol should read the different types (deprecated read_type signature)\n     Failure/Error: if field_info.is_a? Fixnum\n\n     NameError:\n       uninitialized constant Thrift::BaseProtocol::Fixnum\n     # ./lib/thrift/protocol/base_protocol.rb:296:in \u0027Thrift::BaseProtocol#read_type\u0027\n     # ./spec/base_protocol_spec.rb:113:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n\n  4) BaseProtocol Thrift::BaseProtocol should read the different types\n     Failure/Error: if field_info.is_a? Fixnum\n\n     NameError:\n       uninitialized constant Thrift::BaseProtocol::Fixnum\n     # ./lib/thrift/protocol/base_protocol.rb:296:in \u0027Thrift::BaseProtocol#read_type\u0027\n     # ./spec/base_protocol_spec.rb:136:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n"
    },
    {
      "commit": "c77cbd263aa998cb110c8cbb1bb0dca55e8cac07",
      "tree": "0616f13c9a24d72fc9195f29736aaa2634ff712d",
      "parents": [
        "312cef913cb10a91fcb41ff1fd73f8654b7cff9f"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Sat Nov 22 20:20:02 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Dec 16 23:39:48 2025 +0100"
      },
      "message": "Raise an error when nil is sent to binary protocol write operations\n\nCurrently, when accelerated binary protocol is used, and nil is passed to write operations like write_byte, write_i16, write_i32, write_i64, write_double, write_string, or write_binary, the code raises a StandardError with \u0027nil argument not allowed!\u0027 message. Ruby version (non-accelerated) instead raises random exceptions like NoMethodError or TypeError. This behavior is inconsistent with the expectation that a StandardError with the message \u0027nil argument not allowed!\u0027 should be raised.\n\n  1) BinaryProtocol it should behave like a binary protocol should error gracefully when trying to write a nil byte\n     Failure/Error: expect { @prot.write_byte(nil) }.to raise_error(StandardError, \u0027nil argument not allowed!\u0027)\n\n       expected StandardError with \"nil argument not allowed!\", got #\u003cNoMethodError: undefined method \u0027\u003c\u0027 for nil\u003e with backtrace:\n         # ./lib/thrift/protocol/binary_protocol.rb:85:in \u0027Thrift::BinaryProtocol#write_byte\u0027\n         # ./spec/binary_protocol_spec_shared.rb:125:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n         # ./spec/binary_protocol_spec_shared.rb:125:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n     Shared Example Group: \"a binary protocol\" called from ./spec/binary_protocol_spec.rb:25\n     # ./spec/binary_protocol_spec_shared.rb:125:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n\n  2) BinaryProtocol it should behave like a binary protocol should error gracefully when trying to write a nil i16\n     Failure/Error: expect { @prot.write_i16(nil) }.to raise_error(StandardError, \u0027nil argument not allowed!\u0027)\n\n       expected StandardError with \"nil argument not allowed!\", got #\u003cTypeError: no implicit conversion of nil into Integer\u003e with backtrace:\n         # ./lib/thrift/protocol/binary_protocol.rb:90:in \u0027Thrift::BinaryProtocol#write_i16\u0027\n         # ./spec/binary_protocol_spec_shared.rb:144:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n         # ./spec/binary_protocol_spec_shared.rb:144:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n     Shared Example Group: \"a binary protocol\" called from ./spec/binary_protocol_spec.rb:25\n     # ./spec/binary_protocol_spec_shared.rb:144:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n\n  3) BinaryProtocol it should behave like a binary protocol should error gracefully when trying to write a nil i32\n     Failure/Error: expect { @prot.write_i32(nil) }.to raise_error(StandardError, \u0027nil argument not allowed!\u0027)\n\n       expected StandardError with \"nil argument not allowed!\", got #\u003cNoMethodError: undefined method \u0027\u003c\u0027 for nil\u003e with backtrace:\n         # ./lib/thrift/protocol/binary_protocol.rb:94:in \u0027Thrift::BinaryProtocol#write_i32\u0027\n         # ./spec/binary_protocol_spec_shared.rb:161:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n         # ./spec/binary_protocol_spec_shared.rb:161:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n     Shared Example Group: \"a binary protocol\" called from ./spec/binary_protocol_spec.rb:25\n     # ./spec/binary_protocol_spec_shared.rb:161:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n\n  4) BinaryProtocol it should behave like a binary protocol should error gracefully when trying to write a nil i64\n     Failure/Error: expect { @prot.write_i64(nil) }.to raise_error(StandardError, \u0027nil argument not allowed!\u0027)\n\n       expected StandardError with \"nil argument not allowed!\", got #\u003cNoMethodError: undefined method \u0027\u003c\u0027 for nil\u003e with backtrace:\n         # ./lib/thrift/protocol/binary_protocol.rb:99:in \u0027Thrift::BinaryProtocol#write_i64\u0027\n         # ./spec/binary_protocol_spec_shared.rb:184:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n         # ./spec/binary_protocol_spec_shared.rb:184:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n     Shared Example Group: \"a binary protocol\" called from ./spec/binary_protocol_spec.rb:25\n     # ./spec/binary_protocol_spec_shared.rb:184:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n\n  5) BinaryProtocol it should behave like a binary protocol should error gracefully when trying to write a nil double\n     Failure/Error: expect { @prot.write_double(nil) }.to raise_error(StandardError, \u0027nil argument not allowed!\u0027)\n\n       expected StandardError with \"nil argument not allowed!\", got #\u003cTypeError: can\u0027t convert nil into Float\u003e with backtrace:\n         # ./lib/thrift/protocol/binary_protocol.rb:106:in \u0027Thrift::BinaryProtocol#write_double\u0027\n         # ./spec/binary_protocol_spec_shared.rb:197:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n         # ./spec/binary_protocol_spec_shared.rb:197:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n     Shared Example Group: \"a binary protocol\" called from ./spec/binary_protocol_spec.rb:25\n     # ./spec/binary_protocol_spec_shared.rb:197:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n\n  6) BinaryProtocol it should behave like a binary protocol should error gracefully when trying to write a nil string\n     Failure/Error: expect { @prot.write_string(nil) }.to raise_error(StandardError, \u0027nil argument not allowed!\u0027)\n\n       expected StandardError with \"nil argument not allowed!\", got #\u003cNoMethodError: undefined method \u0027encoding\u0027 for nil\u003e with backtrace:\n         # ./lib/thrift/bytes.rb:79:in \u0027Thrift::Bytes.convert_to_utf8_byte_buffer\u0027\n         # ./lib/thrift/protocol/binary_protocol.rb:110:in \u0027Thrift::BinaryProtocol#write_string\u0027\n         # ./spec/binary_protocol_spec_shared.rb:250:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n         # ./spec/binary_protocol_spec_shared.rb:250:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n     Shared Example Group: \"a binary protocol\" called from ./spec/binary_protocol_spec.rb:25\n     # ./spec/binary_protocol_spec_shared.rb:250:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n\n  7) BinaryProtocol it should behave like a binary protocol should error gracefully when trying to write a nil binary\n     Failure/Error: expect { @prot.write_binary(nil) }.to raise_error(StandardError, \u0027nil argument not allowed!\u0027)\n\n       expected StandardError with \"nil argument not allowed!\", got #\u003cNoMethodError: undefined method \u0027bytesize\u0027 for nil\u003e with backtrace:\n         # ./lib/thrift/protocol/binary_protocol.rb:115:in \u0027Thrift::BinaryProtocol#write_binary\u0027\n         # ./spec/binary_protocol_spec_shared.rb:254:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n         # ./spec/binary_protocol_spec_shared.rb:254:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n     Shared Example Group: \"a binary protocol\" called from ./spec/binary_protocol_spec.rb:25\n     # ./spec/binary_protocol_spec_shared.rb:254:in \u0027block (2 levels) in \u003ctop (required)\u003e\u0027\n"
    },
    {
      "commit": "312cef913cb10a91fcb41ff1fd73f8654b7cff9f",
      "tree": "5422e02a52d0f17fa3884cd7e12e73e336ecd4c0",
      "parents": [
        "6e105bf035a0581a977a0558679be802c58982d9"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Sun Nov 23 12:35:09 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Dec 16 23:11:24 2025 +0100"
      },
      "message": "Updated Java keys for cross-platform tests\n\nThe truststore and keystore were regenerated using keys in test/keys:\n\n    # keytool does not support \"replace\" operation:\n    keytool -delete \\\n        -alias localhost \\\n        -keystore lib/java/src/crossTest/resources/.truststore \\\n        -storepass thrift\n    keytool -import \\\n        -alias localhost \\\n        -file test/keys/CA.pem \\\n        -keystore lib/java/src/crossTest/resources/.truststore \\\n        -storepass thrift\n\n    # server keystore\n    keytool -importkeystore \\\n        -srckeystore test/keys/server.p12 \\\n        -srcstoretype PKCS12 \\\n        -srcstorepass thrift \\\n        -destkeystore lib/java/src/crossTest/resources/.serverkeystore \\\n        -deststoretype pkcs12 \\\n        -deststorepass thrift\n\n    # client keystore\n    keytool -importkeystore \\\n        -srckeystore test/keys/client.p12 \\\n        -srcstoretype PKCS12 \\\n        -srcstorepass thrift \\\n        -destkeystore lib/java/src/crossTest/resources/.clientkeystore \\\n        -deststoretype pkcs12 \\\n        -deststorepass thrift\n\nJava tests were updated to use separate keystores for client and server.\n"
    },
    {
      "commit": "6e105bf035a0581a977a0558679be802c58982d9",
      "tree": "4fc9f1d2935ccbd5ccce48de5d64d0de1369ccb6",
      "parents": [
        "a635e68257bb4ddd7b0a4210a0d01d41cae14452"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Thu Dec 04 17:14:59 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Dec 14 23:27:38 2025 +0100"
      },
      "message": "TransportException should be raised when Socket is not open instead of IOError\n"
    },
    {
      "commit": "a635e68257bb4ddd7b0a4210a0d01d41cae14452",
      "tree": "1d1bae8e04f88c563cebb412ea7c1660a303e25b",
      "parents": [
        "eb6eb85c45e823b33a5bb5368f29cebb9db1a8dc"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Nov 19 18:52:54 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Dec 14 23:20:25 2025 +0100"
      },
      "message": "Removed base64 and added logger as an explicit add_dependency\n\nStarting with Ruby 3.4, base64 is no longer a bundled gem, and now Thrift does not load in modern Ruby versions:\n\n    An error occurred while loading ./spec/types_spec.rb.\n\n    Failure/Error: require \u0027base64\u0027\n\n    LoadError:\n      cannot load such file -- base64\n    # ./lib/thrift/protocol/json_protocol.rb:21:in \u0027\u003ctop (required)\u003e\u0027\n    # ./lib/thrift.rb:45:in \u0027\u003ctop (required)\u003e\u0027\n    # ./spec/spec_helper.rb:30:in \u0027\u003ctop (required)\u003e\u0027\n    # ./spec/types_spec.rb:20:in \u0027\u003ctop (required)\u003e\u0027\n\nRuby already has ability to serialize and deserialize base64 without requiring the base64 gem,\nwhich is a thin wrapper for syntactic sugar.\n\nAdditionally, the code throws a warning at the moment, which will become an error in Ruby 3.5:\n\n    /code/lib/thrift/processor.rb:20: warning: logger was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.5.0.\n    You can add logger to your Gemfile or gemspec to silence this warning.\n\nAdded logger as an explicit dependency to avoid this warning.\n"
    },
    {
      "commit": "eb6eb85c45e823b33a5bb5368f29cebb9db1a8dc",
      "tree": "c6865ca3a7c61c6c16aa7f44984495803fd7881d",
      "parents": [
        "497c1dd82e8c597927f40e376738981d6582aef1"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Sat Nov 22 20:03:19 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Dec 14 23:17:57 2025 +0100"
      },
      "message": "Fixed Thrift::TypeError exception in specs\n\nAn error occurs while running specs, that changes the behavior of the system under test, leading to false positive:\n\n   NonblockingServer\n   Thrift::NonblockingServer\n   #\u003cThread:0x0000ffff67b9f138 /code/lib/rb/spec/nonblocking_server_spec.rb:147 run\u003e terminated with exception (report_on_exception is true):\n   /code/lib/rb/lib/thrift/types.rb:69:in \u0027Thrift.check_type\u0027: Expected Types::DOUBLE, received Integer for field seconds (Thrift::TypeError)\n          from /code/lib/rb/lib/thrift/struct.rb:157:in \u0027block in SpecNamespace::NonblockingService::Sleep_args#field_accessor\u0027\n          from /code/lib/rb/lib/thrift/client.rb:41:in \u0027block in Thrift::Client#send_message_args\u0027\n          from /code/lib/rb/lib/thrift/client.rb:40:in \u0027Hash#each\u0027\n          from /code/lib/rb/lib/thrift/client.rb:40:in \u0027Thrift::Client#send_message_args\u0027\n          from /code/lib/rb/lib/thrift/client.rb:30:in \u0027Thrift::Client#send_message\u0027\n          from /code/lib/rb/spec/gen-rb/nonblocking_service.rb:75:in \u0027SpecNamespace::NonblockingService::Client#send_sleep\u0027\n          from /code/lib/rb/spec/gen-rb/nonblocking_service.rb:70:in \u0027SpecNamespace::NonblockingService::Client#sleep\u0027\n          from /code/lib/rb/spec/nonblocking_server_spec.rb:160:in \u0027block in RSpec::ExampleGroups::NonblockingServer::ThriftNonblockingServer#setup_client_thread\u0027\n   should kill active messages when they don\u0027t expire while shutting down\n\nWhen an integer 10 is sent to \"sleep\", instead of actually sleeping an error happens, and the method never called, leading to no record of the method execution recorded in the result. Which is the same expectation is if the method call was aborted in the middle.\n"
    },
    {
      "commit": "497c1dd82e8c597927f40e376738981d6582aef1",
      "tree": "df728263c14b37e6c0576a3ba6555e96bc43fcbf",
      "parents": [
        "b940d1229b2bb2faf4307489bbf9e705e57633b9"
      ],
      "author": {
        "name": "Sutou Kouhei",
        "email": "kou@clear-code.com",
        "time": "Fri Aug 08 16:19:10 2025 +0900"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Dec 11 23:10:08 2025 +0100"
      },
      "message": "THRIFT-3268: Suppress gnu-zero-variadic-macro-arguments warnings\n\nClient: cpp\n\nWe can reproduce these warnings by:\n\n    CC\u003dclang CXX\u003dclang++ \\\n      cmake \\\n        -S . \\\n        -B ../thrift.build \\\n        -DWITH_{AS3,JAVA,JAVASCRIPT,NODEJS,PYTHON,C_GLIB}\u003dOFF \\\n        -DCMAKE_CXX_FLAGS\u003d\"-Wgnu-zero-variadic-macro-arguments\"\n    cmake --build ../thrift.build\n\nSample warning:\n\n    lib/cpp/src/thrift/TLogging.h:119:13: warning: token pasting of \u0027,\u0027 and __VA_ARGS__ is a GNU extension [-Wgnu-zero-variadic-macro-arguments]\n      119 |             ##__VA_ARGS__);                                                                        \\\n          |             ^\n"
    },
    {
      "commit": "b940d1229b2bb2faf4307489bbf9e705e57633b9",
      "tree": "991bc3580ad3bb64c1f0b13503c1919c68fc7770",
      "parents": [
        "230d0a96a2757b978545ebc4b2969a987476b846"
      ],
      "author": {
        "name": "dengzh",
        "email": "dengzhhu653@gmail.com",
        "time": "Mon May 26 09:01:02 2025 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Dec 11 23:08:48 2025 +0100"
      },
      "message": "THRIFT-5863: Make TServerTransport able to customize the max message size\n"
    },
    {
      "commit": "1eaa9a41f0aa1c3ef9d61a3269ac2a00eeae2f0a",
      "tree": "2f63f5bdd234136dd14cf0be70588eccd07995e1",
      "parents": [
        "dee782f410c5d20ceb745d2b840ce447f6d4b7b1"
      ],
      "author": {
        "name": "Martin Haimberger",
        "email": "martin.haimberger@gmail.com",
        "time": "Fri Nov 28 23:21:06 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Dec 10 22:57:59 2025 +0100"
      },
      "message": "- THRIFT-5712 - Added Dart 3 Compatibility\n"
    },
    {
      "commit": "c630d8fb043fc45554c18602e97023feda2d12fc",
      "tree": "7fcabef79f6e2a45021b781f0e57a0d751229499",
      "parents": [
        "5cb828f4b1a61357894f58f1dbbe429972c914a6"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Fri Nov 21 21:35:02 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Dec 10 22:04:46 2025 +0100"
      },
      "message": "Updated gemspec to include metadata (repository, changelog), and cleaned deprecated properties\n\nRemoved deprecated rubyforge_project property\n  WARNING:  rubyforge_project\u003d is deprecated and ignored. Please remove this from your gemspec to ensure that your gem continues to build in the future.\n  WARNING:  See https://guides.rubygems.org/specification-reference/ for help\n\nAdded metadata fields, displayed on the RubyGems page. See https://rubygems.org/gems/activeadmin for example:\n  - source_code_uri\n  - changelog_uri\n  - bug_tracker_uri\n  - documentation_uri\n  - mailing_list_uri\n  - homepage_uri\n\n[skip ci]\n"
    },
    {
      "commit": "5cb828f4b1a61357894f58f1dbbe429972c914a6",
      "tree": "f8bb64a8f3b4d8503d12f509eb41a3862dd72211",
      "parents": [
        "5c2183db399fdf72d4aab7eb5a4bdb4c82c2d2a0"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Nov 19 18:40:19 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Dec 02 23:13:18 2025 +0100"
      },
      "message": "Rack response needs to be finished when returned from the Rack application\n\nThis merge request addresses the following test failures:\n\n```\n  1) Thrift::ThinHTTPServer::RackApplication 404 response receives a non-POST\n     Failure/Error: expect(last_response.status).to be 404\n\n       expected #\u003cInteger:809\u003e \u003d\u003e 404\n            got #\u003cInteger:1001\u003e \u003d\u003e 500\n\n       Compared using equal?, which compares object identity,\n       but expected and actual are not the same object. Use\n       `expect(actual).to eq(expected)` if you don\u0027t care about\n       object identity in this example.\n     # ./spec/thin_http_server_spec.rb:102:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n\n  2) Thrift::ThinHTTPServer::RackApplication 404 response receives a header other than application/x-thrift\n     Failure/Error: expect(last_response.status).to be 404\n\n       expected #\u003cInteger:809\u003e \u003d\u003e 404\n            got #\u003cInteger:1001\u003e \u003d\u003e 500\n\n       Compared using equal?, which compares object identity,\n       but expected and actual are not the same object. Use\n       `expect(actual).to eq(expected)` if you don\u0027t care about\n       object identity in this example.\n     # ./spec/thin_http_server_spec.rb:108:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n\n  3) Thrift::ThinHTTPServer::RackApplication 200 response status code 200\n     Failure/Error: expect(last_response.ok?).to be_truthy\n\n       expected: truthy value\n            got: false\n     # ./spec/thin_http_server_spec.rb:135:in \u0027block (3 levels) in \u003ctop (required)\u003e\u0027\n```\n\nFrom the [Rack documentation](https://rack.github.io/rack/2.2/Rack/Response.html),\n\n\u003e Your application’s call should end returning [Response#finish](https://rack.github.io/rack/2.2/Rack/Response.html#method-i-finish).\n\nAdditionally:\n* using identity checks on integers produces weird expectation \"expected #\u003cInteger:809\u003e \u003d\u003e 404\", which is not necessary. Switched to using `eq` matcher\n* `be_truthy` matcher is overly generic and identity matching on `true`/`false` is preferred: \"expected true\" output will be displayed on failure\n"
    },
    {
      "commit": "5c2183db399fdf72d4aab7eb5a4bdb4c82c2d2a0",
      "tree": "3c6b137cbdfb1e28f12920c0965b2715e6b51c31",
      "parents": [
        "9aa75fb5d5e96e8fb0b3afb38bcb057626f9b40b"
      ],
      "author": {
        "name": "Shaoyu Zhang",
        "email": "zsy056@users.noreply.github.com",
        "time": "Thu Nov 13 13:21:07 2025 -0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Tue Dec 02 22:57:04 2025 +0100"
      },
      "message": "Make generated C++ code compilable with C++/CLI in MSVC\nClient: cpp\nPatch: Shaoyu Zhang\n\nThis closes #3234\n"
    },
    {
      "commit": "9aa75fb5d5e96e8fb0b3afb38bcb057626f9b40b",
      "tree": "4dfcb621a7a2f911e9cf10621018c2d93b48c9d1",
      "parents": [
        "d92b1ae5d53c65d5dc80caa9fe636fd82acb9c72"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Mon Dec 01 17:15:07 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Dec 02 22:41:20 2025 +0100"
      },
      "message": "Commit Gemfile.lock for reproducible tests\n\nAddressed a syntax error in the thrift.gemspec, and committed\nGemfile.lock files for both the gem and tests. Gems source switched\nto https://rubygems.org.\n\nThis is a strongly recommended approach according to the Bundler team:\n\n\u003e As a result, you SHOULD check your Gemfile.lock into version control,\n\u003e in both applications and gems. If you do not, every machine that\n\u003e checks out your repository (including your production server) will\n\u003e resolve all dependencies again, which will result in different\n\u003e versions of third-party code being used if any of the gems in the\n\u003e Gemfile(5) or any of their dependencies have been updated.\nhttps://bundler.io/man/bundle-install.1.html#THE-GEMFILE-LOCK\n\nAlso helps with Dependabot, which will be able to bump the lock file,\nwhile we can relax version requirements in the gemspec.\n"
    },
    {
      "commit": "d92b1ae5d53c65d5dc80caa9fe636fd82acb9c72",
      "tree": "fec1f7f46de4aa7f48833602b2e20eb9a3396360",
      "parents": [
        "4c5a7b047a124b52831c4942c03679c7e20a178f"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 23:16:46 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 23:16:46 2025 +0100"
      },
      "message": "Fix: Error: thrift/simple_server.go:27:2: \"net\" imported and not used\n"
    },
    {
      "commit": "4c5a7b047a124b52831c4942c03679c7e20a178f",
      "tree": "c8048f9c2e303fd816321cd2077e47c20ee4b2c8",
      "parents": [
        "3aab90213385d2911d9932effd84c7e8f35384cd"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 23:11:12 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 23:11:12 2025 +0100"
      },
      "message": "Fix Dependabot alert #132\n"
    },
    {
      "commit": "3aab90213385d2911d9932effd84c7e8f35384cd",
      "tree": "bec25d76f57f875cebc12cad1802161f1c62753e",
      "parents": [
        "cadf5117610517dcda71e4b86a6114e78a8d7e0b"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 23:09:07 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 23:09:07 2025 +0100"
      },
      "message": "Fix Dependabot alert #140\n"
    },
    {
      "commit": "cadf5117610517dcda71e4b86a6114e78a8d7e0b",
      "tree": "11501e148d7137a7189e5ea35fad1e1970baf08f",
      "parents": [
        "010027bbe77e2ad21e2ca58ebaa131b1279483f3"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 23:06:42 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 23:06:54 2025 +0100"
      },
      "message": "Fix Dependabot alert #132\n"
    },
    {
      "commit": "010027bbe77e2ad21e2ca58ebaa131b1279483f3",
      "tree": "df1c69d6d22d754093542116dc33e6c9a9e323b3",
      "parents": [
        "6d04f12df6d4a218410639a46b8d902b93f88244"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 22:57:08 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 22:57:33 2025 +0100"
      },
      "message": "Fix for Dependabot alerts #151 and #152\n"
    },
    {
      "commit": "4a21581f78c38ef5077cb8a0d8013727e4d56165",
      "tree": "acff354e4d5dbba406004910a96b36b16b530faf",
      "parents": [
        "d925d34911b49825727f035e47a9db627fd92e7d"
      ],
      "author": {
        "name": "Jun.S.Shen",
        "email": "jun.s.shen@oracle.com",
        "time": "Fri Nov 17 23:28:25 2023 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 22:40:03 2025 +0100"
      },
      "message": "enforce to close accepted connection after processing\nClient: go\nPatch: Jun.S.Shen \u003cjun.s.shen@oracle.com\n\nThis closes #2883\n"
    },
    {
      "commit": "d925d34911b49825727f035e47a9db627fd92e7d",
      "tree": "eefecbe740c47a5590a3282547c7be7248c4f307",
      "parents": [
        "be7a9e50eeea9315ea17b7fd21fa0a2e357fa402"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Sun Nov 30 17:29:12 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Mon Dec 01 22:33:35 2025 +0100"
      },
      "message": "Fix spurious wakeups in ThreadManager test sleep\n\nThe ThreadManager load test used Monitor::wait() to sleep, which can return early on spurious wakeups. That occasionally produced zero-duration tasks and tripped the `delta \u003e 0` assertion in CI. Switching the test helper to `std::this_thread::sleep_for` makes the sleep deterministic and stops the intermittent assertion failure.\n"
    },
    {
      "commit": "1646c0492bf09a6a4dc7b7b02fd5d11e64007a7a",
      "tree": "d9fa10d114ffc974819ca64e2ef4f010896a3645",
      "parents": [
        "0835277ec274c300bf8935649132d623a93ab172"
      ],
      "author": {
        "name": "Carel Combrink",
        "email": "carel.combrink@gmail.com",
        "time": "Mon Nov 03 12:59:21 2025 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Mon Dec 01 22:30:46 2025 +0100"
      },
      "message": "Moving the body of setManualOpenSSLInitialization() to the cpp file\n\nSee the comment made in here where it was suggested but never done: https://github.com/apache/thrift/pull/1714#issuecomment-2459192022\n"
    },
    {
      "commit": "0835277ec274c300bf8935649132d623a93ab172",
      "tree": "44c34d58946db49ba2b0d1f08b7a37375c9f3456",
      "parents": [
        "58d385eee256e5bd59ed1bc9e5e85aaf3e748cef"
      ],
      "author": {
        "name": "Carel Combrink",
        "email": "carel.combrink@gmail.com",
        "time": "Mon Nov 03 12:15:06 2025 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Mon Dec 01 22:30:46 2025 +0100"
      },
      "message": "THRIFT-5898: Replace global variable with a singleton getter\nClient: cpp\n"
    },
    {
      "commit": "58d385eee256e5bd59ed1bc9e5e85aaf3e748cef",
      "tree": "136adeb16aa3dc6dd0f3d3da738f793de9a3d829",
      "parents": [
        "5b53b554a3ac6faff70081d541680fbcec55fbb7"
      ],
      "author": {
        "name": "zeshuai007",
        "email": "51382517@qq.com",
        "time": "Sat Aug 29 11:13:41 2020 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Dec 01 22:17:49 2025 +0100"
      },
      "message": "Supplement Jsonprotocol module testcase\nClient: rb\nPatch: Zezeng Wang\n\nThis closes #2223\n"
    },
    {
      "commit": "3364b4ac563872b40c91d7843f6d0971d84979ec",
      "tree": "3f7957bdb5a6b01a501e8789853f4ae865621044",
      "parents": [
        "724b038b9fbd81a2f0e7c4b66c5c8546bbd99ce9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Dec 01 06:43:18 2025 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Mon Dec 01 22:04:33 2025 +0100"
      },
      "message": "Bump com.diffplug.spotless from 8.0.0 to 8.1.0 in /lib/kotlin\n\nBumps com.diffplug.spotless from 8.0.0 to 8.1.0.\n\n---\nupdated-dependencies:\n- dependency-name: com.diffplug.spotless\n  dependency-version: 8.1.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": "55bc35f5d581f61f8dac816eb17493911ff8e75a",
      "tree": "fea3daf5c7500bd7d99051e11f95609cbb739e86",
      "parents": [
        "a6ee3c0b1d0e7fcbaa439c573e370fa129e3c7b5"
      ],
      "author": {
        "name": "Shaoyu Zhang",
        "email": "zsy056@users.noreply.github.com",
        "time": "Tue Nov 25 13:59:16 2025 -0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Nov 28 22:59:13 2025 +0100"
      },
      "message": "fix py ext windows build\n"
    },
    {
      "commit": "a6ee3c0b1d0e7fcbaa439c573e370fa129e3c7b5",
      "tree": "af234013bdc9a2575d9b7dbfe156e1f62c0d105e",
      "parents": [
        "c5a371280cc89a927e7278486233b16b189c6e9e"
      ],
      "author": {
        "name": "David Heejong Park",
        "email": "hee.jong.park@dnv.com",
        "time": "Tue Nov 04 07:20:28 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Nov 23 14:56:06 2025 +0100"
      },
      "message": "Reset consumed message size after reading from buffer\n"
    },
    {
      "commit": "c5a371280cc89a927e7278486233b16b189c6e9e",
      "tree": "de3393932b6d7b57eae7283923c700aafe8b6588",
      "parents": [
        "ac3feed1b24389efbc0865b742be1854be0406dc"
      ],
      "author": {
        "name": "Lysandros Nikolaou",
        "email": "lisandrosnik@gmail.com",
        "time": "Fri Jul 25 15:11:44 2025 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Nov 23 14:52:12 2025 +0100"
      },
      "message": "THRIFT-5888 Do not dynamically enable the GIL under free-threaded Python\nClient: py\nPatch: Lysandros Nikolaou\n\nThis closes #3180\n"
    },
    {
      "commit": "10d5a65d1a6c0308145352f31157628b9643c942",
      "tree": "5f4a890b2ed09b7e82fa739d1bcd8ae2cf5819c3",
      "parents": [
        "120d496dbdb8aa6bd2cbc9586af81946b5b2e057"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Wed Nov 19 15:24:32 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Nov 21 17:42:52 2025 +0100"
      },
      "message": "ruby: Set TCP_NODELAY on accepted sockets\n"
    },
    {
      "commit": "120d496dbdb8aa6bd2cbc9586af81946b5b2e057",
      "tree": "2b7183f0054ca05c37808573d577155f59d4e245",
      "parents": [
        "5abe53feaf598e40ab84eb259399113a79461791"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Nov 20 22:13:24 2025 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Nov 20 23:17:42 2025 +0100"
      },
      "message": "Bump js-yaml from 3.14.1 to 3.14.2 in /lib/ts\n\nBumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.14.1 to 3.14.2.\n- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)\n- [Commits](https://github.com/nodeca/js-yaml/compare/3.14.1...3.14.2)\n\n---\nupdated-dependencies:\n- dependency-name: js-yaml\n  dependency-version: 3.14.2\n  dependency-type: indirect\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "f274d9891fc042bac06f28f51ab5901b9077a0da",
      "tree": "9452b3a480a762ea8a0dfabd88318f24dd3d74cd",
      "parents": [
        "32b80f6292b591fe2b77d3070dbade91b0fdfd58"
      ],
      "author": {
        "name": "Tdxdxoz",
        "email": "tdxdxoz@gmail.com",
        "time": "Tue Sep 26 12:52:05 2023 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Nov 20 22:56:34 2025 +0100"
      },
      "message": "enable TCP_NODELAY for rust client channel\n"
    },
    {
      "commit": "1e17c93555b680d4719ba61965c088590a2053dd",
      "tree": "1964a9a00a8c0fa87cf886dbd9aae8fcde92ed82",
      "parents": [
        "5b096a00027582983f1ae141a4bbf4eed806c310"
      ],
      "author": {
        "name": "George Koehler",
        "email": "kernigh@gmail.com",
        "time": "Mon Feb 06 18:08:05 2023 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Nov 20 22:52:36 2025 +0100"
      },
      "message": "rewrite the endian conversion to fix a big-endian host\nClient: py\n\nChange htolell(dub) to htolell(transfer.t) in compact.h, because the\nconversion takes a long long, not a double.  This matters on a\nbig-endian host, where the conversion must swap bytes.\n\nThe big-endian letohll(n) failed because ntohl(n) is just n, doesn\u0027t\nswap n.  Rewrite ntohll(n) and letohll(n) to use the same code with\nboth big-endian and little-endian hosts.  Expect the compiler to\noptimize away one of ntohll(n) or letohll(n) when it doesn\u0027t swap n.\n"
    },
    {
      "commit": "4f89bfdeeb900e2d64bf5c5f726b78d8591593cc",
      "tree": "0c5ac7dc955658cf7bad5536c73613ee392a84af",
      "parents": [
        "80279b551a8f86c5085afedd454e26611d5b3cba"
      ],
      "author": {
        "name": "pspeter",
        "email": "peter.schmidbauer@oebb.at",
        "time": "Wed Apr 13 14:44:30 2022 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Nov 20 22:34:53 2025 +0100"
      },
      "message": "Fix bug in Python\u0027s THttpClient proxy handling\nClient: py\nPatch: Peter Schmidbauer\n\nThis closes #2565\n\nFix conversion to str without including quotes\n\nEnsure return type is str in Py2 and 3\n\nIn Python2, str(cr) returns a cr unchanged, since it is already a str. In Python3, \u0027cr\u0027 is a binary array (like str in Python2), but we cannot concat a str with a bin in Py3. Therefore, we convert it to str using str(cr), before concatenating it with \u0027Basic \u0027.\nFix bug in THttpClient proxy handling\n"
    },
    {
      "commit": "2d8546837cb3f55df4c1724cdfe7b42badbb2dbe",
      "tree": "ee2252494f0415ffb6f66b60fbebbf46378ed444",
      "parents": [
        "0c7833caaa38b0baaf305c047d724dd5b878c93e"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Nov 20 22:20:57 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Nov 20 22:20:57 2025 +0100"
      },
      "message": "Reverted, breaks CI\n\nRevert \"use ok_or_else\"\nThis reverts commit 0c7833caaa38b0baaf305c047d724dd5b878c93e.\n\nRevert \"check overflow on reading field id\"\nThis reverts commit 49fe0e2a7c13417719409e90f65c92ac5ed88ebd.\n"
    },
    {
      "commit": "0c7833caaa38b0baaf305c047d724dd5b878c93e",
      "tree": "f67e93594d1d0a0172cfea89ffab5f28ead37c4e",
      "parents": [
        "49fe0e2a7c13417719409e90f65c92ac5ed88ebd"
      ],
      "author": {
        "name": "Jinpeng",
        "email": "zjpzlz@163.com",
        "time": "Wed Nov 19 23:59:22 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Nov 20 22:16:20 2025 +0100"
      },
      "message": "use ok_or_else"
    },
    {
      "commit": "49fe0e2a7c13417719409e90f65c92ac5ed88ebd",
      "tree": "448f5ae3845c5735ee1125f11b2f40d933481890",
      "parents": [
        "f8ce26cd422f743493423da58591dd5ef1142bdb"
      ],
      "author": {
        "name": "Jinpeng",
        "email": "zjpzlz@163.com",
        "time": "Thu Dec 12 17:31:29 2024 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Nov 20 22:16:20 2025 +0100"
      },
      "message": "check overflow on reading field id"
    },
    {
      "commit": "3adca0ecfee7dcb70f1bdf844050b5d02ed61d76",
      "tree": "7f020f754140e81a04089da95ff0d21a262ee914",
      "parents": [
        "eae1094d399e6d96a76b87ae98686a06dc11db5b"
      ],
      "author": {
        "name": "Carel Combrink",
        "email": "carel.combrink@gmail.com",
        "time": "Mon Nov 10 14:56:54 2025 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Nov 20 00:01:57 2025 +0100"
      },
      "message": "Missed actually using the new variables from the new calls to get Python\n"
    },
    {
      "commit": "d6fc79122b7dce9731033b86cc54b2de07e6fa43",
      "tree": "c1364e987692f2889319f4613e09ea25b53f1c02",
      "parents": [
        "ead302baf8c1cd231f10354b8f75a51499d2283a"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Nov 19 22:04:39 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Nov 19 23:56:40 2025 +0100"
      },
      "message": "bump nuget packages\n"
    },
    {
      "commit": "ead302baf8c1cd231f10354b8f75a51499d2283a",
      "tree": "cacada6068293014ee2c1aec616a7279c2cdff1c",
      "parents": [
        "d0531c412f12cc1dd71e24650f6f7a408dbdcab6"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Nov 19 23:50:18 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Nov 19 23:50:18 2025 +0100"
      },
      "message": "Revert \"lib: py: remove distutils in favor of setuptools\"\n\nThis reverts commit b4432b8f57aae67ef9ec23e539e973a5e486a48c.\n"
    }
  ],
  "next": "d0531c412f12cc1dd71e24650f6f7a408dbdcab6"
}
