)]}'
{
  "log": [
    {
      "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": "0be731cc32bced86dc8b97ef4fd1dac9d531875f",
      "tree": "2a814d37e820b0be638ca9e4bddeabf1ded18ad8",
      "parents": [
        "27b72088d4585d7e25c2694e567d517e0b6cf5c7"
      ],
      "author": {
        "name": "Pengpeng Hou",
        "email": "pengpeng@iscas.ac.cn",
        "time": "Sun Mar 22 00:26:01 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Apr 01 01:24:48 2026 +0200"
      },
      "message": "THRIFT-5932: bound saferealpath() output on Windows\nClient: cpp\nAuthor: Pengpeng Hou \u003cpengpeng@iscas.ac.cn\u003e\n\nThis closes #3357\n"
    },
    {
      "commit": "1e5fa4b9b35ad6bfeb238d19897ace7826eda057",
      "tree": "49f9633dd88fcfce78d7e05eb1da9a661c1cd416",
      "parents": [
        "59fc4113e6b6527cd95c3346d49a1197af673e77"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jnsg@apache.org",
        "time": "Fri Mar 27 00:01:45 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Mar 28 00:05:42 2026 +0100"
      },
      "message": "THRIFT-5939: Replace GUID generation with stable UUID algorithm\n\nReplace the Windows-only random CoCreateGuid() GUID generation with\ndeterministic UUIDv8 (RFC 9562) derived from SHA-256 over a namespace\nhierarchy (DNS → thrift.apache.org → program → interface metadata).\n\nUses SHA-256 implementation by Brad Conte (brad AT bradconte.com),\nwhich is explicitly public domain (no copyright claimed).\nSource: https://github.com/B-Con/crypto-algorithms\n\n- sha256.h: Brad Conte\u0027s algorithm verbatim, inlined to a header-only file,\n  macros prefixed THRIFT_SHA256_ to avoid collisions\n- Add generate_guid_v8() for services and structs using a canonical\n  string covering: program namespace UUID, entity name, parent service\n  hash (for inheritance), and function/field signatures with Thrift\n  IDL type names\n- Add type_name_for_guid(), canonical_service_string(),\n  canonical_struct_string(), program_namespace_uuid() helpers\n- Add guid_v4 generator option to fall back to legacy random GUIDs\n  (Windows only, for migration compatibility)\n- GUIDs are now emitted on all platforms, not just Windows\n- Add UuidV8Test.thrift fixture and CI step that validates\n  determinism, UUIDv8 format, field-order sensitivity, and\n  parent-service hash inclusion\n- LICENSE: add attribution section for the third-party public-domain code,\n  following the existing pattern in the file\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "13cdb4441846cec85809991116fddba2344c8a83",
      "tree": "d8ded5503f5d6e3eea58adccf472a7e20360b8b4",
      "parents": [
        "9f1fb7a6610a89ef3cd927f61173d99b03dbf540"
      ],
      "author": {
        "name": "Copilot",
        "email": "198982749+Copilot@users.noreply.github.com",
        "time": "Tue Mar 17 15:08:29 2026 -0700"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Mar 25 22:13:26 2026 +0100"
      },
      "message": "Add test coverage for private_optional + template_streamop combined; fix generator bugs (#14)\n\n\n* Add test coverage for private_optional + template_streamop combined, fix generator bugs\n\n\nCo-authored-by: copilot-swe-agent[bot] \u003c198982749+Copilot@users.noreply.github.com\u003e\nCo-authored-by: zsy056 \u003c1074382+zsy056@users.noreply.github.com\u003e"
    },
    {
      "commit": "5ff02040fb3c6d7546b560afa169d5a7cd7cc2ac",
      "tree": "4bb5e6b5f45fff33bd6cf30c30967787fffc2875",
      "parents": [
        "26e23942c7b7ec60252d08d011057dc8fabda2f4"
      ],
      "author": {
        "name": "Pavel Kvach",
        "email": "pavel.kvach@gmail.com",
        "time": "Sun Mar 22 09:52:22 2026 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Mar 22 14:21:33 2026 +0100"
      },
      "message": "THRIFT-5935: Fix deprecated non-canonical casts for PHP 8.5 compatibility\n"
    },
    {
      "commit": "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": "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": "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": "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": "c701dd4aaf342da5614c1445589acbb6ac415edd",
      "tree": "d28ae7fcead8849b7b6521a11fb7196f6dcd15e2",
      "parents": [
        "f5c80a41d57f46283ee858f445f2e0a84b62f1dd"
      ],
      "author": {
        "name": "Santiago Medina Rolong",
        "email": "smedinarolong@twitter.com",
        "time": "Tue Mar 10 18:40:40 2026 -0700"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Mar 11 22:24:34 2026 +0100"
      },
      "message": "THRIFT-5926: fix Rust union deserializer panic on unknown field ID\n\nThe wildcard arm in generated union read_from_in_protocol incremented\nreceived_field_count without setting ret. When exactly one unknown\nfield was received, the count reached 1 with ret still None, causing\nthe else branch to panic via .expect().\n\nRemove the counter increment from the wildcard arm. Unknown fields\nare already discarded by i_prot.skip(); they must not affect the\ncount that drives union validation logic.\n"
    },
    {
      "commit": "b48ba36cd27493233934f92f029efac92740c2dd",
      "tree": "5117ef38be51eda99c763355ce14ee952fe675a8",
      "parents": [
        "32776c0f46f5fd79b296391d66236c23b20af072"
      ],
      "author": {
        "name": "Mark Molinaro",
        "email": "mmolinaro@pinterest.com",
        "time": "Wed Feb 25 17:51:37 2026 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Feb 25 22:46:55 2026 +0100"
      },
      "message": "python: add more precise typehints for immutable structs\n"
    },
    {
      "commit": "32776c0f46f5fd79b296391d66236c23b20af072",
      "tree": "07867002f4461ef152060deb8a4e07dd2134102f",
      "parents": [
        "ca0740a0b9cd0a0ddeecdcdaf655f8b336c5ca75"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Tue Feb 10 12:25:07 2026 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Feb 21 10:15:18 2026 +0100"
      },
      "message": "Make sure we always throw ProtocolException(INVALID_DATA) in Ruby\n"
    },
    {
      "commit": "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": "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": "1e09a046e080765567b7125b01fd966c2596ee3f",
      "tree": "0caeb9c86a5416470a35a5a84ffc3d756d5bb38c",
      "parents": [
        "67bfb29af0837eefd32447c186d22aa45b2f1869"
      ],
      "author": {
        "name": "Copilot",
        "email": "198982749+Copilot@users.noreply.github.com",
        "time": "Thu Jan 29 10:36:28 2026 -0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Feb 08 22:09:37 2026 +0100"
      },
      "message": "Add moveable_types\u003dforward_setter option for perfect forwarding setters\n\nAdds `forward_setter` value to `moveable_types` option, generating perfect forwarding setters for complex types while preserving traditional setters for primitives. Also fixes missing `operator\u003c` implementation that caused link errors when structs are used as map keys.\n\n**Forward Setter Generation** (`compiler/cpp/src/thrift/generate/t_cpp_generator.cc`):\n- Parse `moveable_types\u003dforward_setter` option\n- Complex types (strings, containers, structs) → template setters with `std::forward\u003cT_\u003e`\n- Primitive types → traditional const-ref setters\n- Template implementations in `.tcc` file (auto-included in header)\n- Legacy `moveable_types` behavior unchanged\n\n**Compiler Unit Tests** (`compiler/cpp/tests/cpp/`):\n- New `test_forward_setter.thrift` fixture\n- Dedicated `t_cpp_generator_forward_setter_tests.cc` (91 assertions, 9 test cases)\n- Verify `.tcc` generation and template implementations\n\n**Integration Tests** (`test/cpp/src/`):\n- `ForwardSetterTest.cpp` - validates lvalue/rvalue/temporary/literal setters with move semantics\n- `PrivateOptionalTest.cpp` - SFINAE + static_assert verify optional fields are private\n- `EnumClassTest.cpp` - type_traits + static_assert verify true enum class semantics\n\n**CMakeLists.txt** (`test/cpp/`):\n- Separate gen-cpp-{forward,private,enumclass} directories\n\n**Makefile.am** (`test/cpp/`):\n- Library targets for each option variant\n- Proper `BUILT_SOURCES` dependencies\n- Include path ordering: option-specific directory before standard `gen-cpp`\n\n```cpp\n// Generated with --gen cpp:moveable_types\u003dforward_setter\n\nstruct TestStruct {\n  int32_t primitive_field;\n  std::string complex_field;\n\n  void __set_primitive_field(const int32_t val);  // Traditional\n\n  template \u003ctypename T_\u003e\n  void __set_complex_field(T_\u0026\u0026 val);  // Perfect forwarding\n};\n\n// In .tcc file:\ntemplate \u003ctypename T_\u003e\nvoid TestStruct::__set_complex_field(T_\u0026\u0026 val) {\n  this-\u003ecomplex_field \u003d ::std::forward\u003cT_\u003e(val);\n  __isset.complex_field \u003d true;\n}\n```\n\n- [ ] Did you create an [Apache Jira](https://issues.apache.org/jira/projects/THRIFT/issues/) ticket?  ([Request account here](https://selfserve.apache.org/jira-account.html), not required for trivial changes)\n- [ ] If a ticket exists: Does your pull request title follow the pattern \"THRIFT-NNNN: describe my issue\"?\n- [x] Did you squash your changes to a single commit?  (not required, but preferred)\n- [x] Did you do your best to avoid breaking changes?  If one was needed, did you label the Jira ticket with \"Breaking-Change\"?\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] \u003c198982749+Copilot@users.noreply.github.com\u003e\nCo-authored-by: zsy056 \u003c1074382+zsy056@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "dbdb429a8ca338d8b9bb082214a246cc61faca90",
      "tree": "4295c4597eee2b1195b80149259624d7b03f75bd",
      "parents": [
        "75a287728a8f68fb76dacc81cfe8d97b81afc362"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Jan 28 01:18:18 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 28 02:08:49 2026 +0100"
      },
      "message": "deprecation message\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": "ab178fbf24e88bba05ae2b8f1f9876d783e934f6",
      "tree": "cbf971b39aece232fc9bde5468873bdc109e87af",
      "parents": [
        "55e86e396e63969e3ee735b202b1c1de59c22c88"
      ],
      "author": {
        "name": "Copilot",
        "email": "198982749+Copilot@users.noreply.github.com",
        "time": "Tue Jan 27 09:46:59 2026 -0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 28 01:29:06 2026 +0100"
      },
      "message": "Support C++ 11 enum class generation via pure_enums\u003denum_class\n\nAdds C++ 11 `enum class` generation to the C++ code generator. When `pure_enums\u003denum_class` is specified, generates strongly-typed enums with proper scoping and type safety.\n\n## Code Generator Changes\n\n**Modified `t_cpp_generator.cc`:**\n- Added `gen_enum_class_` flag parsed from `pure_enums\u003denum_class` option\n- Modified `generate_enum()` to emit `enum class` when both `gen_pure_enums_` and `gen_enum_class_` are set\n- Fixed enum value scoping: use `static_cast\u003cint\u003e(Color::RED)` for array initialization\n- Fixed map operations: cast enum class to int in `find()` calls (no implicit conversion)\n\n**Test infrastructure:**\n- Created `t_cpp_generator_enum_class_tests.cc` with three test cases validating default, `pure_enums`, and `pure_enums\u003denum_class` behavior\n- Extracted common utilities to `t_cpp_generator_test_utils.h` (shared with `private_optional` tests)\n- Added expected output files: `expected_Color_{default,pure_enums,enum_class}.txt`\n\n**Build system:**\n- Added CMake compile-checks for generated code (both `private_optional` and `enum_class`)\n- Unified compile-check blocks with shared Boost detection\n- Ensures generated code compiles as part of standard test build\n\n## Usage\n\n```thrift\nenum Color {\n  RED \u003d 1,\n  GREEN \u003d 2,\n  BLUE \u003d 3\n}\n```\n\n```bash\nthrift --gen cpp:pure_enums\u003denum_class example.thrift\n```\n\nGenerates:\n```cpp\nenum class Color {\n  RED \u003d 1,\n  GREEN \u003d 2,\n  BLUE \u003d 3\n};\n```\n\nBackward compatible - existing behavior unchanged when option absent.\n\n---\n\n- [ ] Did you create an [Apache Jira](https://issues.apache.org/jira/projects/THRIFT/issues/) ticket?  ([Request account here](https://selfserve.apache.org/jira-account.html), not required for trivial changes)\n- [ ] If a ticket exists: Does your pull request title follow the pattern \"THRIFT-NNNN: describe my issue\"?\n- [x] Did you squash your changes to a single commit?  (not required, but preferred)\n- [x] Did you do your best to avoid breaking changes?  If one was needed, did you label the Jira ticket with \"Breaking-Change\"?\n- [ ] If your change does not involve any code, include `[skip ci]` anywhere in the commit message to free up build resources.\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] \u003c198982749+Copilot@users.noreply.github.com\u003e\nCo-authored-by: zsy056 \u003c1074382+zsy056@users.noreply.github.com\u003e"
    },
    {
      "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": "6f76573602ab08c1b7ca9f6f6973cd4f1fbb3869",
      "tree": "01262c552813b140ee72b668c8bc13abe63d8212",
      "parents": [
        "4f76c3305e08aa482252aaeaf8906b6820dca9ce"
      ],
      "author": {
        "name": "Hasnain Lakhani",
        "email": "m.hasnain.lakhani@gmail.com",
        "time": "Sun Jan 25 01:06:15 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jan 24 22:06:15 2026 -0800"
      },
      "message": "[c_glib] Fix code generation for sets with typedef element types (#3285)\n\nResolve typedef to underlying type before checking is_base_type() in\ngenerate_deserialize_set_element(), consistent with how\ngenerate_deserialize_map_element() handles this case."
    },
    {
      "commit": "c3ced62289cff9c0c9cd537d902f00fae894b22e",
      "tree": "62fa324a7517ef1c2fdaa2dfdb1362bac9020bdc",
      "parents": [
        "4413220324d7694f8db128cd989822ff728df030"
      ],
      "author": {
        "name": "copilot-swe-agent[bot]",
        "email": "198982749+Copilot@users.noreply.github.com",
        "time": "Tue Nov 18 18:09:06 2025 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Jan 22 01:40:07 2026 +0100"
      },
      "message": " ## cpp: add `private_optional` support (and wire up tests/CI)\n\nAdd a new `cpp:private_optional` generator option for C++ that emits optional fields as private members and provides const getters, enabling stricter encapsulation while preserving access for generated helpers.\n\nTo keep the feature stable and exercised in automation, add fixture-based compiler tests and the minimal build/CI wiring required for those tests to build and run in the workflow (including MSVC).\n\n ### Example generated code (behavior change only, from `TestStruct`)\n\n #### Default (no `cpp:private_optional`): optional fields stay public\n```cpp\npublic:\n  int32_t required_field;\n  int32_t optional_field;\n  std::string optional_string;\n```\n\nWith cpp:private_optional: optional fields become private + const getters\n\n```cpp\npublic:\n  int32_t required_field;\n\n  const int32_t\u0026 __get_optional_field() const { return optional_field; }\n  const std::string\u0026 __get_optional_string() const { return optional_string; }\n\nprivate:\n  int32_t optional_field;\n  std::string optional_string;\n\n  friend void swap(TestStruct \u0026a, TestStruct \u0026b) noexcept;\n  friend std::ostream\u0026 operator\u003c\u003c(std::ostream\u0026 out, const TestStruct\u0026 obj);\n\n```\n"
    },
    {
      "commit": "7eeb1c1665806f08685a6233eddd2cce0eb7ae03",
      "tree": "fc1e868a112d27bf47b2ccbba4f431a80f2cca56",
      "parents": [
        "0d18fb2e97a00fc56997fa059d6819e54cdff64b"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Jan 12 00:36:08 2026 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Jan 12 00:45:05 2026 +0100"
      },
      "message": "deprecate swift bindings for THRIFT-5864\n"
    },
    {
      "commit": "56f9772a2663c4113de006122a1d096afe107ebd",
      "tree": "1fdb97b68c0da235300b459adfce3c284b715c49",
      "parents": [
        "1eaa9a41f0aa1c3ef9d61a3269ac2a00eeae2f0a"
      ],
      "author": {
        "name": "Dmytro Shteflyuk",
        "email": "kpumuk@kpumuk.info",
        "time": "Tue Nov 25 14:49:23 2025 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Dec 10 23:45:49 2025 +0100"
      },
      "message": "Inconsistent UUID constants compilation for aliased types\nFor aliased types, UUID constants retain their curly braces, while\ndirect UUID constants do not:\n\n    typedef uuid myUUID\n    const uuid GEN_UUID \u003d  \u002700000000-4444-CCCC-ffff-0123456789ab\u0027\n    const uuid GEN_GUID \u003d \u0027{00112233-4455-6677-8899-aaBBccDDeeFF}\u0027\n    const myUUID MY_UUID \u003d  \u002700000000-4444-CCCC-ffff-0123456789ab\u0027\n    const myUUID MY_GUID \u003d \u0027{00112233-4455-6677-8899-aaBBccDDeeFF}\u0027\n\nWhen uuid is compiled, it produces a string without curly braces, but\nfor alias myUUID the curly braces stay:\n\n    GEN_UUID \u003d %q\"00000000-4444-CCCC-ffff-0123456789ab\"\n    GEN_GUID \u003d %q\"00112233-4455-6677-8899-aaBBccDDeeFF\"\n    MY_UUID \u003d %q\"00000000-4444-CCCC-ffff-0123456789ab\"\n    MY_GUID \u003d %q\"{00112233-4455-6677-8899-aaBBccDDeeFF}\"\n\nThis change ensures that the type is properly resolved to its true type\nbefore validation, resulting in consistent handling of UUID constants\nregardless of whether they are defined using the base type or an alias.\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": "dee782f410c5d20ceb745d2b840ce447f6d4b7b1",
      "tree": "5d387d19481f4154d2ae0f0304d86d1d844deea3",
      "parents": [
        "c630d8fb043fc45554c18602e97023feda2d12fc"
      ],
      "author": {
        "name": "Carel Combrink",
        "email": "carel.combrink@gmail.com",
        "time": "Mon Nov 10 13:18:53 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Dec 10 22:53:01 2025 +0100"
      },
      "message": "THRIFT-5885 Fix enum generation\nClient: py\nPatch: Carel Combrink\n\nThis closes #3232\n"
    },
    {
      "commit": "5b53b554a3ac6faff70081d541680fbcec55fbb7",
      "tree": "5fbbb7a3494f6775c51034ddfda1661c9c90bef1",
      "parents": [
        "3364b4ac563872b40c91d7843f6d0971d84979ec"
      ],
      "author": {
        "name": "Hongxu Jia",
        "email": "hongxu.jia@windriver.com",
        "time": "Thu Nov 20 11:43:45 2025 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Mon Dec 01 22:13:30 2025 +0100"
      },
      "message": "support reproducible builds\n\nIn order to support reproducible builds [1], while using bison to generate\nsource code, add COMPILE_FLAGS --file-prefix-map [2] to remove build path\nprefix and source path prefix in the generated header file.\n\n[1] https://reproducible-builds.org/\n[2] https://cgit.git.savannah.gnu.org/cgit/bison.git/commit/?id\u003ddd878d18519689c7bbcd72de4c9f9e53085a3cbf\n\nSigned-off-by: Hongxu Jia \u003chongxu.jia@windriver.com\u003e\n"
    },
    {
      "commit": "ac3feed1b24389efbc0865b742be1854be0406dc",
      "tree": "f9d87c81d249645f42086cf62d261413fd04f995",
      "parents": [
        "10d5a65d1a6c0308145352f31157628b9643c942"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "yuxuan.wang@reddit.com",
        "time": "Tue Sep 17 09:53:02 2024 -0700"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Nov 23 14:43:12 2025 +0100"
      },
      "message": "Fix python compiler generated all_structs with type_hints\n\nCurrently with type_hints enabled, we do not explicitly declare the type\nof generated all_structs. It\u0027s meant to be a list of different types,\nbut that will cause problems, as the generated code is usually like\nthis:\n\n    all_structs \u003d []\n    ...\n    all_structs.append(Type1)\n    ...\n    all_structs.append(Type2)\n    ...\n\nThe first append infers the type of all_struct to be list[Type1], so\nmypyc would start complaining from the 2nd append as the type is\nunexpected.\n\nExplicitly declare all_struct to be list[typing.Any] instead, which\nfixes the issue.\n"
    },
    {
      "commit": "32b80f6292b591fe2b77d3070dbade91b0fdfd58",
      "tree": "89d72c060457ec36781f7d25b8533fd401f40af1",
      "parents": [
        "1e17c93555b680d4719ba61965c088590a2053dd"
      ],
      "author": {
        "name": "Amos Bird",
        "email": "amosbird@gmail.com",
        "time": "Fri Jun 30 15:30:28 2023 +0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Nov 20 22:55:25 2025 +0100"
      },
      "message": "THRIFT-5720: Encode binary args in Python remote\n"
    },
    {
      "commit": "5b096a00027582983f1ae141a4bbf4eed806c310",
      "tree": "fd6cb88d32d3f11e099074e1dafe78153a68bd7f",
      "parents": [
        "4f89bfdeeb900e2d64bf5c5f726b78d8591593cc"
      ],
      "author": {
        "name": "Maarten Pronk",
        "email": "git@evetion.nl",
        "time": "Sun Sep 11 17:36:39 2022 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Nov 20 22:44:28 2025 +0100"
      },
      "message": "Lowercased all MinGW headers.\nPatch: Maarten Pronk\n\nThis closes #2649\n"
    },
    {
      "commit": "80279b551a8f86c5085afedd454e26611d5b3cba",
      "tree": "3914dd15a94455e188e2e60e878143ce39cb1209",
      "parents": [
        "2d8546837cb3f55df4c1724cdfe7b42badbb2dbe"
      ],
      "author": {
        "name": "Francisco Ayala Le Brun",
        "email": "frankxlebrun@gmail.com",
        "time": "Sat Apr 23 15:03:30 2022 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Nov 20 22:32:26 2025 +0100"
      },
      "message": "THRIFT-5559: Make handler public in Rust codegen\nClient: rs\nPatch: Francisco Ayala Le Brun\n\nThis closes #2586\n"
    },
    {
      "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": "23e29d67f443e8bc1a04120d8b004e9e7b210066",
      "tree": "d7c4e4431870e5c3b27154a1ab7cf8101b038238",
      "parents": [
        "d6fc79122b7dce9731033b86cc54b2de07e6fa43"
      ],
      "author": {
        "name": "Carel Combrink",
        "email": "carel.combrink@gmail.com",
        "time": "Mon Nov 10 14:00:18 2025 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Nov 20 00:01:57 2025 +0100"
      },
      "message": "FIx cmake warning on CMP0148\n\n- find_package(PythonInterp) and find_package(PythonLibs) were deprecated in 3.12 and removed in 3.27\n- The project minimum is at 3.16 already\n"
    },
    {
      "commit": "2f214c28d89a0199a088a3acd0c16b3c6d99fb72",
      "tree": "9af049cb5d8c29ba299c9de312346f518897e928",
      "parents": [
        "ed55a18c30cf1ffdf793fcde5afae61f0f4c02cf"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Nov 13 23:24:45 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Nov 14 21:17:28 2025 +0100"
      },
      "message": "THRIFT-5902 Add net10 support\nClient: netstd\nPatch: Jens Geyer\n"
    },
    {
      "commit": "3f6d8a57ceaf055062334b422b5a32cdee1598fc",
      "tree": "54e4bbe7f164a1a236e4ba5c0edc803e3fecf460",
      "parents": [
        "28553fab40f6485edbb86fcfb8285a66e823e1db"
      ],
      "author": {
        "name": "Hasnain Lakhani",
        "email": "m.hasnain.lakhani@gmail.com",
        "time": "Mon Aug 25 09:24:10 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 25 09:24:10 2025 -0700"
      },
      "message": "[nit] Avoid dispatching to parent when not needed in c_glib implementation (#3149)\n\nAs titled. This avoids dispatching calls up to the parent implementation if there isn\u0027t one, saving a hop.\n\n\u003c!-- We recommend you review the checklist/tips before submitting a pull request. --\u003e\n\n- [x] Did you create an [Apache Jira](https://issues.apache.org/jira/projects/THRIFT/issues/) ticket?  ([Request account here](https://selfserve.apache.org/jira-account.html), not required for trivial changes)\n- [ ] If a ticket exists: Does your pull request title follow the pattern \"THRIFT-NNNN: describe my issue\"?\n- [ ] Did you squash your changes to a single commit?  (not required, but preferred)\n- [ ] Did you do your best to avoid breaking changes?  If one was needed, did you label the Jira ticket with \"Breaking-Change\"?\n- [ ] If your change does not involve any code, include `[skip ci]` anywhere in the commit message to free up build resources.\n\nI tested this by:\n\n* Building the compiler\n* Building the c_glib tutorial server and client\n* Verifying that the client/server interaction works as previously expected\n* Inspecting the generated code and noticing shared_service.c does not have the code to dispatch to its parent anymore, while the calculator.c implementation does. "
    },
    {
      "commit": "52fea29d496838da1ef11d83f110ac100720e37b",
      "tree": "e2b5eebe511b5ab2c9b155e7a1e3d3aea9fdeefa",
      "parents": [
        "458eb327a7a652e554551d66e3db12e483c4fc91"
      ],
      "author": {
        "name": "Hasnain Lakhani",
        "email": "m.hasnain.lakhani@gmail.com",
        "time": "Fri Aug 01 20:19:16 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 01 20:19:16 2025 -0700"
      },
      "message": "[rust] Gracefully handle error upon receiving incompatible enum (#3181)\n\n Improve the code generator so that Rust code, when receiving an union with an invalid field ID, can gracefully return an error."
    },
    {
      "commit": "d128eb64b5c675892482ce57c51db97c3313d9e1",
      "tree": "434b3e4c830e8bd77492ea83e5fe0a515af60f9d",
      "parents": [
        "28113f4d9cf98b93164ad60d49b761237b222e45"
      ],
      "author": {
        "name": "NN",
        "email": "580536+NN---@users.noreply.github.com",
        "time": "Wed May 28 16:23:01 2025 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Jun 12 23:33:24 2025 +0200"
      },
      "message": "Generate swap noexcept"
    },
    {
      "commit": "f0f72d8e7e99341b37916ed3c7762602394d54a4",
      "tree": "376869bb9bf5af0beb74daa1c63f0b9a76bae234",
      "parents": [
        "ae342c2a36d815b34a545f4dc0de870c6d13ea4a"
      ],
      "author": {
        "name": "jrhee17",
        "email": "guins_j@guins.org",
        "time": "Mon Mar 24 07:38:05 2025 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Tue Jun 10 22:12:25 2025 +0200"
      },
      "message": "Add the ability to access type annotations for Java\nClient: java\nPatch: jrhee17 \u003cguins_j@guins.org\u003e\n\nThis closes #3114\n"
    },
    {
      "commit": "80cd45a49636c3d34de1ef8a7391a9d886c259fa",
      "tree": "586b09847cc8f3556e98319d547962e41b5c5bfa",
      "parents": [
        "12fe8e42cd77b499b0cb91fa1be431268e12745c"
      ],
      "author": {
        "name": "Sergey Yelin",
        "email": "elinsn@gmail.com",
        "time": "Wed Apr 23 22:50:07 2025 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Jun 06 21:46:46 2025 +0200"
      },
      "message": "Introduce nominal types\n"
    },
    {
      "commit": "12fe8e42cd77b499b0cb91fa1be431268e12745c",
      "tree": "8cd34685a84e7cfd8a252dda5e24bcf5e9621519",
      "parents": [
        "132a501444d4c4aa0c2631b16c78b3f42390f63c"
      ],
      "author": {
        "name": "Sergey Yelin",
        "email": "elinsn@gmail.com",
        "time": "Wed Apr 16 13:52:18 2025 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Jun 06 21:46:46 2025 +0200"
      },
      "message": "Unify constant name generation\n"
    },
    {
      "commit": "132a501444d4c4aa0c2631b16c78b3f42390f63c",
      "tree": "360da9646d91a46f6666ed5e5c08a25f514ce63e",
      "parents": [
        "f248ad2cde5f7f70d14fa4add85cc23d8a3f91da"
      ],
      "author": {
        "name": "Sergey Yelin",
        "email": "elinsn@gmail.com",
        "time": "Wed Apr 16 09:48:08 2025 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Jun 06 21:46:46 2025 +0200"
      },
      "message": "Use enum\u0027s const name instead of value (avoid magic number)\n"
    },
    {
      "commit": "f248ad2cde5f7f70d14fa4add85cc23d8a3f91da",
      "tree": "e52a763426716b4a830cc1a47aa6579233654709",
      "parents": [
        "100d200ed7989db974c97c0e258b93669bc3fff6"
      ],
      "author": {
        "name": "Sergey Yelin",
        "email": "elinsn@gmail.com",
        "time": "Tue Apr 15 21:20:07 2025 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Jun 06 21:46:46 2025 +0200"
      },
      "message": "Deduplicate render type\n"
    },
    {
      "commit": "100d200ed7989db974c97c0e258b93669bc3fff6",
      "tree": "2fc4381d06d3490aafa5e4348cbd8d18b69f802f",
      "parents": [
        "42f3587d9d4cd1c747a68b7de2fd75dabca31ac0"
      ],
      "author": {
        "name": "Sergey Yelin",
        "email": "elinsn@gmail.com",
        "time": "Tue Apr 15 21:03:06 2025 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Jun 06 21:46:46 2025 +0200"
      },
      "message": "Generate base type\n"
    },
    {
      "commit": "42f3587d9d4cd1c747a68b7de2fd75dabca31ac0",
      "tree": "a080ab8e5969ff809e12b3a5fe03b66746ec65e1",
      "parents": [
        "e4ccfcb973f85f4ada6bf5ccda092c0efd139848"
      ],
      "author": {
        "name": "Sergey Yelin",
        "email": "elinsn@gmail.com",
        "time": "Tue Apr 15 15:43:47 2025 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Jun 06 21:46:46 2025 +0200"
      },
      "message": "Generate type declaration from typdef\n\nRemove type erasure from type definition and strictly follow type definitions.\n"
    },
    {
      "commit": "e4ccfcb973f85f4ada6bf5ccda092c0efd139848",
      "tree": "222586972b3ca848c6d0eea95283a9da46fd7c83",
      "parents": [
        "1a835684c44d37079c211def7b123acd72c08b5b"
      ],
      "author": {
        "name": "Sergey Yelin",
        "email": "elinsn@gmail.com",
        "time": "Tue Apr 15 14:16:57 2025 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Jun 06 21:46:46 2025 +0200"
      },
      "message": "Improve enum generation for Erlang\n\nNotable changes:\n  * Added comment for every enum\n  * Introduce type for enum\n  * Restrict enum type values to defined by user instead of just by type\n"
    },
    {
      "commit": "1a835684c44d37079c211def7b123acd72c08b5b",
      "tree": "02ace3f5e3874d6cb481d2a74599b0f17f890bbf",
      "parents": [
        "039c89a84265d76415db3901377b08af8e69ce9a"
      ],
      "author": {
        "name": "Sergey Yelin",
        "email": "elinsn@gmail.com",
        "time": "Tue Apr 15 13:02:02 2025 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Jun 06 21:46:46 2025 +0200"
      },
      "message": "Comment exception as exception (not struct), use original name\n"
    },
    {
      "commit": "039c89a84265d76415db3901377b08af8e69ce9a",
      "tree": "29cedbe1b8e36bed7b18e70d17519096ea6a3507",
      "parents": [
        "a420a24cbac98cc78fdffd8efc43cc64146d49e0"
      ],
      "author": {
        "name": "Sergey Yelin",
        "email": "elinsn@gmail.com",
        "time": "Mon Apr 14 19:58:02 2025 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Jun 06 21:46:46 2025 +0200"
      },
      "message": "Fix map type\n"
    },
    {
      "commit": "1b8a998b938e5d21665d445f2e52ba9186c8ec4d",
      "tree": "b8110ebd2ef1dcf902bdef56581328a229519d90",
      "parents": [
        "ef6a6c282a659a3e80add7e2d23ddb6855df34e2"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "yuxuan.wang@reddit.com",
        "time": "Wed May 21 10:47:40 2025 -0700"
      },
      "committer": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "fishywang@gmail.com",
        "time": "Wed May 21 11:52:56 2025 -0700"
      },
      "message": "Put field name in error message for set duplication check on write\n\nClient: go\n\nBefore:\n\n    thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf(\"%T error writing set field: slice is not unique\", p.Foo))\n\nAfter:\n\n    thrift.NewTProtocolExceptionWithType(thrift.INVALID_DATA, fmt.Errorf(\"%T error writing set field %q: slice is not unique\", p.Foo, \"p.Foo\"))\n\nCurrently when there are more than one field inside a struct being sets\nand this error happens, it\u0027s impossible to tell which field contains\nduplications to cause this error.\n"
    },
    {
      "commit": "e73b238faa0baa7ab7f6600bc1529a550586c6b9",
      "tree": "4bcc819cffe8449b0369314f3e8e64313ada9f24",
      "parents": [
        "94e1a308973d617b19c07acbda3d8844132a04f7"
      ],
      "author": {
        "name": "Hasnain Lakhani",
        "email": "m.hasnain.lakhani@gmail.com",
        "time": "Sat May 17 21:18:33 2025 -0700"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Mon May 19 22:18:49 2025 +0200"
      },
      "message": "[nit] Use more consistent free method in c_glib generated code for binary types\n"
    },
    {
      "commit": "c79d1cc179e5cc0792d012961e32d5acebc6eb5b",
      "tree": "a683fe7bcb26147871cb85bed16ef74c29865a45",
      "parents": [
        "e402bb05e45145db0e78f459e07bde446662b04c"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed May 14 22:08:35 2025 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed May 14 22:08:35 2025 +0200"
      },
      "message": "Branch 0.22.0 created\n"
    },
    {
      "commit": "b3fc4b224258e4bf154bf774746f0d2554edb90c",
      "tree": "14049300eb6fd8a4d56d63a9f91ddf993799afda",
      "parents": [
        "5e6d1b747a4de9ba0ff7b2b8746bce5fb2b0dfc5"
      ],
      "author": {
        "name": "Vyas Ramasubramani",
        "email": "vyas.ramasubramani@gmail.com",
        "time": "Sun Apr 20 13:57:06 2025 -0700"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sun Apr 27 22:18:35 2025 +0200"
      },
      "message": "Update minimum required CMake version for CMake 4.0 compatibility\n"
    },
    {
      "commit": "c5c0e6effed33b076b558f42c52ec5fcb26a208e",
      "tree": "4133aa248c4261ae1999b1a93ccbc82b249d3f59",
      "parents": [
        "32ce699a5ccfdb7125e9ac69959859233cfa629e"
      ],
      "author": {
        "name": "Sergey Yelin",
        "email": "elinsn@gmail.com",
        "time": "Fri Apr 04 10:38:57 2025 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Apr 09 22:19:44 2025 +0200"
      },
      "message": "Minor Erlang generator improvements\n\nChanges:\n* Comment unions with \u0027union\u0027 in Erlang\n* Add string type definition strategy\n* Add support for new sets implementation\n* Respect new string and set strategy in constant and default values\n"
    },
    {
      "commit": "b28a4c48cd03d3e637a409f7f980d372a3251907",
      "tree": "cceffdddaaf79ac20373909a0ce371c0cdb46ceb",
      "parents": [
        "cd0dabbed7ed0517d97e0a4e1b373306f61b71a8"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "yuxuan.wang@reddit.com",
        "time": "Wed Mar 26 12:02:12 2025 -0700"
      },
      "committer": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "fishywang@gmail.com",
        "time": "Wed Mar 26 14:22:49 2025 -0700"
      },
      "message": "THRIFT-5859: Generate a values iterator for enum types for go\n\nClient: go\n\nThe generated code looks like this:\n\n    type Foo int64\n\n    const (\n    \tFoo_One Foo \u003d 1\n    \tFoo_Two Foo \u003d 2\n    )\n\n    var knownFooValues \u003d []Foo{\n    \tFoo_One,\n    \tFoo_Two,\n    }\n\n    func FooValues() iter.Seq[Foo] {\n    \treturn func(yield func(Foo) bool) {\n    \t\tfor _, v :\u003d range knownFooValues {\n    \t\t\tif !yield(v) {\n    \t\t\t\treturn\n    \t\t\t}\n    \t\t}\n    \t}\n    }\n"
    },
    {
      "commit": "09ced04f42a227aeef16675235e0fa3a5adabc40",
      "tree": "0002adeacd061662544b66a3ab20ba80239cdc58",
      "parents": [
        "6cb35b284578db4187023b8037291a1f5364025d"
      ],
      "author": {
        "name": "Asjad Syed",
        "email": "asjadsyed@users.noreply.github.com",
        "time": "Mon Mar 10 18:24:53 2025 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Mar 12 23:14:44 2025 +0100"
      },
      "message": "THRIFT-5024: Replace removed @gen.engine with @gen.coroutine\nClient: py\nPatch: Asjad Syed\n\nThis closes #3111\n"
    },
    {
      "commit": "21ed4a2f690fb8547593c64df376b97a877b1675",
      "tree": "b3e982418c841da81144f02da583d797e5e9cc5d",
      "parents": [
        "aee3f637bef38f69b6b52140bca6448d1f617633"
      ],
      "author": {
        "name": "Cameron Martin",
        "email": "cameronm@graphcore.ai",
        "time": "Mon Apr 22 11:08:19 2024 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Mar 05 22:17:54 2025 +0100"
      },
      "message": "THRIFT-5811: Add ESM support to nodejs codegen\nClient: nodejs\nPatch: Cameron Martin \u003ccameronm@graphcore.ai\u003e\n\nThis closes #3083\n\nThis adds a flag to the JS generator to output ES modules instead of CommonJS. This is only valid when targeting node. A lot of the changes here are to test this.\n\nThe `testAll.sh` script now generates an ES module version of the services and types, and tests the client and the server with these. This has a few knock-on effects. Firstly, any module that imports a generated ES module must itself be an ES module, since CommonJS modules cannot import ES modules. ES modules also do not support `NODE_PATH`, so instead the tests directory is converted into a node package with a `file:` dependency on the root thrift package.\n"
    },
    {
      "commit": "aee3f637bef38f69b6b52140bca6448d1f617633",
      "tree": "4f33eb0be53e01550b5f6813bd7b2cfefad420c0",
      "parents": [
        "fdaca5ec85540eb81c574c178ac777f069b641eb"
      ],
      "author": {
        "name": "Carel Combrink",
        "email": "carel.combrink@gmail.com",
        "time": "Thu Sep 05 18:26:42 2024 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Mar 05 22:12:50 2025 +0100"
      },
      "message": "THRIFT-5817: [C++] Avoid copy of TUuid\nClient: cpp\nPatch: Carel Combrink\n\nThis closes #3038\n"
    },
    {
      "commit": "5903c721bfc97b60aed02e9521a881bc6d5b81db",
      "tree": "f7bde77da95fcb00b5cfb95d578f286486983fb7",
      "parents": [
        "eec0b584e657e4250e22f3fd492858d632e2aa7b"
      ],
      "author": {
        "name": "Alkis Evlogimenos",
        "email": "alkis.evlogimenos@databricks.com",
        "time": "Wed Sep 04 12:55:32 2024 +0000"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Feb 19 21:18:26 2025 +0100"
      },
      "message": "Add `no_constructors` option to C++ compiler\n"
    },
    {
      "commit": "93c15c202247892fd7378ef19a346ff13e201263",
      "tree": "19f0c7c1303b28fb9191959fad5b157b2617f7cd",
      "parents": [
        "a45618e05bbb2d29737514541b6d61f6850d9b16"
      ],
      "author": {
        "name": "Hasnain Lakhani",
        "email": "m.hasnain.lakhani@gmail.com",
        "time": "Sun Feb 02 16:58:28 2025 -0800"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Mon Feb 03 22:22:04 2025 +0100"
      },
      "message": "Various build fixes for clang and rust\n"
    },
    {
      "commit": "d078721e44fea7713832ae5d0f5d9ca67317f19e",
      "tree": "2aa232e808ef697980b1cbc6f1c9c198c62d12b6",
      "parents": [
        "da54fc814cb872bf5ae782364760dfbc4fe414d8"
      ],
      "author": {
        "name": "Alexandre Detiste",
        "email": "alexandre.detiste@gmail.com",
        "time": "Thu Dec 26 02:44:13 2024 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Jan 15 22:27:26 2025 +0100"
      },
      "message": "remove more Python2 compatibility\n"
    },
    {
      "commit": "da54fc814cb872bf5ae782364760dfbc4fe414d8",
      "tree": "0fd9278650e195848a2304da4be8585f9ece2dd0",
      "parents": [
        "ab706525762816953a07982ffa432bb913337c46"
      ],
      "author": {
        "name": "Cameron Martin",
        "email": "cameronmartin123@gmail.com",
        "time": "Sun Jan 12 08:55:45 2025 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jan 12 16:55:45 2025 +0800"
      },
      "message": "THRIFT-5819: use latest rustc version for rustlib (#3085)\n\nClient: rust\n\nThis upgrades the version of rust in the rust-toolchain file, docs and dockerfiles. Doing so requires a few changes to the source, mainly to fix or silence new warnings.\n\nSubmitted on behalf of a third-party: Jiayu Liu\nDerived from the following PR: https://github.com/apache/thrift/pull/3045\n\nCo-authored-by: Jiayu Liu \u003cjiayu@hey.com\u003e"
    },
    {
      "commit": "e10109c65c25c10e1641a539fe0e0ac6b3a72a75",
      "tree": "dbedf3ccee0cfd4eee9c3a40f4acc787f9014371",
      "parents": [
        "947ad66940cfbadd9b24ba31d892dfc1142dd330"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "yuxuan.wang@reddit.com",
        "time": "Thu Jan 09 09:39:37 2025 -0800"
      },
      "committer": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "fishywang@gmail.com",
        "time": "Fri Jan 10 09:18:23 2025 -0800"
      },
      "message": "THRIFT-5845: Return TException for union check in Write\n\nClient: go\n\nIn compiler generated Write method for union types, return a TException\n(TProtocolException) when the number of fields set is not exactly 1, to\nhelp customer logic to decide whether to reuse a connection after an\nerror.\n\nWhile I\u0027m here, also do the same thing for the uniqueness check failure\nfor set fields in Write as well.\n"
    },
    {
      "commit": "bb8cac570441e543265fd2402a162a5a889a216f",
      "tree": "741661852777499d0d07bad54329ed909ce397a8",
      "parents": [
        "0825ca31e664817168c83e46e494718640227066"
      ],
      "author": {
        "name": "Kurt Alfred Kluever",
        "email": "kak@google.com",
        "time": "Sat Dec 28 21:56:46 2024 -0500"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Mon Jan 06 22:37:25 2025 +0100"
      },
      "message": "Update generated array style\n\nC-style array declarations (e.g. `Foo foos[]`) is discouraged by the JLS. Java style (e.g., `Foo[] foos`) should be preferred."
    },
    {
      "commit": "d8cd883a9ac315d982afbeaa2aefcef296165915",
      "tree": "b63a9746562270bbf0afe4a77cbd36f28f4269de",
      "parents": [
        "eb684d34853c9a8ab7a2759c1c88ae3dfa1b0ef6"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Tue Dec 10 01:02:46 2024 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Dec 10 01:28:09 2024 +0100"
      },
      "message": "THRIFT-5837 FIX: error: unused parameter etc\nPatch: Jens Geyer\n"
    },
    {
      "commit": "eb684d34853c9a8ab7a2759c1c88ae3dfa1b0ef6",
      "tree": "7d7b6ce963797d45401fa0ad394162c696dc49c2",
      "parents": [
        "f54bdbd9a865df1058ef8056f43f37fbd691b9a2"
      ],
      "author": {
        "name": "Thomas",
        "email": "thomasbruggink@hotmail.com",
        "time": "Sun Jul 28 15:32:23 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Tue Dec 10 00:37:16 2024 +0100"
      },
      "message": "THRIFT-4386 Add Lua 5.3/5.4 support\nClint: lua\nPatch: Thomas Bruggink\n\nThis closes #3012\n"
    },
    {
      "commit": "e9f63e0bbdc9316f57dd2458c27ff18ed1df60fe",
      "tree": "74a294ab3c5d917997c5aa874640b699788441a9",
      "parents": [
        "39ce210f66e3a642590030559b4afc306db896fb"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sat Nov 23 01:01:13 2024 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Nov 25 22:05:05 2024 +0100"
      },
      "message": "THRIFT-5837 Delphi implementation for THRIFT-5835\nClient: Delphi\nPatch: Jens Geyer\n\nThis closes #3068\n"
    },
    {
      "commit": "39ce210f66e3a642590030559b4afc306db896fb",
      "tree": "b56ba13d43107af0853054444ef474f214da4cf5",
      "parents": [
        "58d9ff5afbed3602bd7edfc0d1c038be67d06ab7"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sat Nov 16 10:40:55 2024 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Nov 23 16:14:20 2024 +0100"
      },
      "message": "THRIFT-5835 Allow exceptions to be used as regular struct datatype\nInitial feature testcase added, compiler checks disabled.\nPatch: Jens Geyer\n"
    },
    {
      "commit": "e26b4a83847175db15b08cd51fc796f5e39e37fe",
      "tree": "33a497f611059fcbc5a489e12e4c31a7fffa4e15",
      "parents": [
        "23e0e5ce75300451f49727ee438edbc76fcbb372"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Tue Nov 12 23:53:04 2024 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Nov 22 23:25:49 2024 +0100"
      },
      "message": "THRIFT-5832 Drop net6 support and add net9 instead\nClient: netstd\nPatch: Jens Geyer\n"
    },
    {
      "commit": "c8cf304919f31c2132e1aa64fea4dfa08fe1bed9",
      "tree": "9511cef51f233249905f226a2ce0db7d93ca99b0",
      "parents": [
        "a085b0ecee74cf2102496264fe51a0dfe026f6f5"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "yuxuan.wang@reddit.com",
        "time": "Thu Nov 14 15:25:18 2024 -0800"
      },
      "committer": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "fishywang@gmail.com",
        "time": "Fri Nov 15 10:08:56 2024 -0800"
      },
      "message": "THRIFT-5833: Add ProcessorError\n\nClient: go\n\nProvide ProcessorError as the combined error of write i/o error and\noriginal error returned by the endpoint implementation, and update\ncompiler to use that in Process functions.\n"
    },
    {
      "commit": "56c4b159f885bd931a27f1a8b78b12696638b17f",
      "tree": "4b04674a7e9065b6cff889bb1abff291248c23ab",
      "parents": [
        "bddaaffb456d4797235d1e90c2cff0386349143a"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Fri Oct 25 00:33:11 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Oct 25 23:15:24 2024 +0200"
      },
      "message": "THRIFT-5827 enums in typedefs are not resolved in all cases\nClient: Delphi\nPatch: Jens Geyer\n"
    },
    {
      "commit": "bddaaffb456d4797235d1e90c2cff0386349143a",
      "tree": "b353c2f00d77d6c90e4f8469083f2ca534dd6d49",
      "parents": [
        "61080c673f90429566b5c47d8324b80aba3c4da2"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Fri Oct 25 00:33:36 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Oct 25 23:15:24 2024 +0200"
      },
      "message": "Removed superfluous method decls\n"
    },
    {
      "commit": "0f0243e1f0d4a97ad1abf05fa516acf2952811ac",
      "tree": "e6f73bf5984b5756bb6627e1483c3fd636e59ed1",
      "parents": [
        "665e931278d83bd8c6ff4ce6b01203d7bb452fe4"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Oct 20 17:52:28 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Mon Oct 21 22:24:20 2024 +0200"
      },
      "message": "THRIFT-5826 binary constants create uncompilable Delphi code\nClient: Delphi\nPatch: Jens Geyer\n"
    },
    {
      "commit": "665e931278d83bd8c6ff4ce6b01203d7bb452fe4",
      "tree": "8a81e6509e1cdc24d7ea5568148b83e2e6a4d11b",
      "parents": [
        "a5d84e59297bb7c72e6ebe1a5b5df23762f1357f"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Oct 20 18:32:47 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Mon Oct 21 22:24:20 2024 +0200"
      },
      "message": "FIX: TException name conflict\n"
    },
    {
      "commit": "a5d84e59297bb7c72e6ebe1a5b5df23762f1357f",
      "tree": "c6782741fe6562c8c36799d739d176293a25950b",
      "parents": [
        "8b6d29d3ee7fb1bece7be1eb728e2e88e867cc2b"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Oct 17 22:56:48 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Oct 18 18:36:33 2024 +0200"
      },
      "message": "THRIFT-5825 UUID constants lead to uncompileable Delphi code\nClient: Delphi\nPatch: Jens Geyer\n"
    },
    {
      "commit": "8b6d29d3ee7fb1bece7be1eb728e2e88e867cc2b",
      "tree": "2d37674ca8d44d5038651fea4c1336083f47e360",
      "parents": [
        "a4d458fdf3668acb6823d42d97dcba62b48bd6af"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Fri Oct 11 01:47:42 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Oct 14 23:03:57 2024 +0200"
      },
      "message": "THRIFT-5823 Fix illegal uses of exceptions as normal struct type\nPatch: Jens Geyer\n\nThis closes #1928\n"
    },
    {
      "commit": "eae0536c83a166bfdac0016a8b964777b16796da",
      "tree": "669f305573eb30e72bd56b54b1b57b39f2d2db90",
      "parents": [
        "c368c3afccef1e4a6bc408d564e2d996a808e47a"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Oct 13 01:46:47 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Oct 13 01:48:28 2024 +0200"
      },
      "message": "fix a whole bunch of TAB indents\n"
    },
    {
      "commit": "ef199ccbc2a56831bbacc436fff1de49fa7aac16",
      "tree": "ec1b9ec9588c6e1e5f6a4655deacd111f2556448",
      "parents": [
        "467c6bdcb14f1fcdfb416df92b76ca9e5abbdc90"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Tue Sep 03 01:28:31 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Tue Sep 03 01:33:19 2024 +0200"
      },
      "message": "bump version number\n"
    },
    {
      "commit": "5fc920dac710f6eee0417f58e65f91886ae704eb",
      "tree": "aa0f6654928534b4905d7f4a522b175adc537aed",
      "parents": [
        "d80bb575cb664529e506318c751c411282bb9526"
      ],
      "author": {
        "name": "adrianhelvikspond",
        "email": "adrian.helvik@spond.com",
        "time": "Wed Jul 31 09:02:14 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Aug 28 09:06:19 2024 +0200"
      },
      "message": "Fix JS property/method collisions for fields enamed read/write\n"
    },
    {
      "commit": "5d3b5a039bf94a2c1744b70e3f0d9dd249ce393e",
      "tree": "5c6164d162f75a0e061006a4ce207132fde1d24a",
      "parents": [
        "7de26c45443bc1642f90d5365bf8eef15e239ce5"
      ],
      "author": {
        "name": "arkuhn",
        "email": "contact@adamrkuhn.com",
        "time": "Sat Jun 22 08:42:44 2024 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Aug 21 22:52:29 2024 +0200"
      },
      "message": "Generate thrift_spec class attribute (with type hints)\n"
    },
    {
      "commit": "4c39000f88ae397eb52f4db191ddb0b38153a947",
      "tree": "82675b637425b6233bb3cf76a612648f092661bc",
      "parents": [
        "d850f8680845c8d837a58aeffb1f73df169af397"
      ],
      "author": {
        "name": "Adam Kuhn",
        "email": "contact@adamrkuhn.com",
        "time": "Tue Jun 18 19:40:08 2024 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Aug 21 22:52:29 2024 +0200"
      },
      "message": "Update compiler/cpp/src/thrift/generate/t_py_generator.cc\r\n\r\nReview: document explicit int enum generation requirement instead of implicit\n\nCo-authored-by: r/Salomon Smeke \u003c134332337+salomon-smekecohen@users.noreply.github.com\u003e"
    },
    {
      "commit": "d850f8680845c8d837a58aeffb1f73df169af397",
      "tree": "d0adbf33cbe242b5886555ecace795e900c3cb89",
      "parents": [
        "12b0116a17b674da9d23a729d4d0a5ab3bc74c35"
      ],
      "author": {
        "name": "arkuhn",
        "email": "contact@adamrkuhn.com",
        "time": "Sun May 26 01:21:15 2024 -0400"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Aug 21 22:52:29 2024 +0200"
      },
      "message": "Review comments\n- Update flag description to be more precise\n- No implict enum generation (gen enum flag required)\n- Use latest thrift test IDL for uuid coverage\n- rebase on latest main\n"
    },
    {
      "commit": "55ea8f3c7e62916e46995ea49302270a3d0c611c",
      "tree": "708d3a26a5392b24aa54d373b991d325a8c8bf85",
      "parents": [
        "cf0b803512850904da49f5d133f5559d6679e37b"
      ],
      "author": {
        "name": "Konstantin Pozdniakov",
        "email": "kpozdniakov",
        "time": "Wed Feb 16 16:40:21 2022 +0300"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Wed Aug 21 22:52:29 2024 +0200"
      },
      "message": "Python3 type hints\n\nargs not optional type hint\n\nUUID generator support\n\nRemove runtime type check\n"
    },
    {
      "commit": "438fc822ffc10f85dc7d7a7d05a0f038231f458d",
      "tree": "33b1c32fc9d8f7e5aae01179ea59dd3d60a3065f",
      "parents": [
        "3d02c0f94e858828e9251a57979172ae48d71b9d"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "yuxuan.wang@reddit.com",
        "time": "Thu Jul 25 09:56:55 2024 -0700"
      },
      "committer": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "fishywang@gmail.com",
        "time": "Wed Jul 31 09:11:27 2024 -0700"
      },
      "message": "THRIFT-5800: Make non-exist include a failure when -strict is on\n"
    },
    {
      "commit": "0f0e11fbcee4f9230fdba6c7020c9f10fd09684a",
      "tree": "f118c3828c91cdc1d4356a368178fff967b412c9",
      "parents": [
        "4ea20aafb5dac0e52cecf2aa376357d2a552be45"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Fri Jul 19 00:44:43 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sat Jul 20 22:36:10 2024 +0200"
      },
      "message": "THRIFT-5798 Expand netstd compile tests to fully cover all current target environments\nClient: netstd\nPatch: Jens Geyer\n\nThis closes #3008\n"
    },
    {
      "commit": "4ea20aafb5dac0e52cecf2aa376357d2a552be45",
      "tree": "7f81f81203a311863784b12c87f0f7d84baacd20",
      "parents": [
        "4ea44ac546c9545e134e65502e2467b08caf2bfa"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Fri Jul 19 00:49:03 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Jul 20 22:32:16 2024 +0200"
      },
      "message": "THRIFT-5796 Indicate target environment via #if check\nClient: netstd\nPatch: Jens Geyer\n"
    },
    {
      "commit": "4ea44ac546c9545e134e65502e2467b08caf2bfa",
      "tree": "91abcd0a1ed2c5f425b4cbde5bdcd6344e36fbb5",
      "parents": [
        "1e54480f5ff859434c5521004883a4098a7f2ea0"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Fri Jul 19 00:49:03 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Jul 19 23:03:21 2024 +0200"
      },
      "message": "THRIFT-5797 HashSet() CTOR takes no argument for net \u003c 5\nClient: netstd\nPatch: Jens Geyer\n"
    },
    {
      "commit": "5b9ae5ee35481c8cb0d54318bf06d0672f1b6498",
      "tree": "0050e5dd62aaaf8a36d0164d662265c87ede4406",
      "parents": [
        "db37125c5fc1febd6ba6ab6454f375ec546a8664"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Jul 18 03:20:40 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Thu Jul 18 22:00:32 2024 +0200"
      },
      "message": "THRIFT-5795 namespace not properly escaped\nClient: netstd\nPatch: Jens Geyer\n"
    },
    {
      "commit": "259107e0460300a5a546e6f4563034d5e3ecd156",
      "tree": "55cd568451351f1a638652405f65786b3ee5f41f",
      "parents": [
        "1405831722ac0e1e1ba100801bf21073a0d17940"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "yuxuan.wang@reddit.com",
        "time": "Wed Jul 03 14:25:34 2024 -0700"
      },
      "committer": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "fishywang@gmail.com",
        "time": "Wed Jul 03 22:17:09 2024 -0700"
      },
      "message": "Remove trailing space from compiler generated go code\n\nClient: go\n"
    },
    {
      "commit": "f13d85afbeba44552cb5e574ba34610a243e4e62",
      "tree": "0f25719285d5ff92e16da2de0d813bc38c922895",
      "parents": [
        "1252cf3a2f3b1d942c8c4713ed7b2cf35c64e547"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sat Jun 29 00:35:54 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sat Jun 29 00:47:45 2024 +0200"
      },
      "message": "THRIFT-5654 LNK4042 and LNK2019 in go_validator_generator.cc with VS2022\nPatch: Eyüp Volkan \u0026 Jens Geyer\n"
    },
    {
      "commit": "4b90909ddd51e6ff59c493a0f9a92de7fa9f5af2",
      "tree": "845fd6242eba4c2e73e1a75fc9aef367396b406e",
      "parents": [
        "6944912b578e5ab2721af3ea2d0fdbab2951343d"
      ],
      "author": {
        "name": "CJCombrink",
        "email": "carel.combrink@gmail.com",
        "time": "Sat Apr 27 19:51:39 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Jun 17 22:26:56 2024 +0200"
      },
      "message": "THRIFT-5773 Strong UUID wrapper for C++\nClient: cpp/CMakeLists.txt\nPatch: Carel Combrink\n\nThis closes #2958\n"
    },
    {
      "commit": "b709b0bc09e424ac71b5389bca606c1161a8d8fd",
      "tree": "699fa84049b66a7998a576f21f7f1a7f9c6c8027",
      "parents": [
        "173714b0a9a310c41e2e1e6b79f14b74de38c5fc"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "yuxuan.wang@reddit.com",
        "time": "Thu Jun 13 10:13:25 2024 -0700"
      },
      "committer": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "fishywang@gmail.com",
        "time": "Fri Jun 14 08:22:51 2024 -0700"
      },
      "message": "go: Fix indentation in compiler\n\nThis fixes a small case I missed in 4930caca.\n\nBefore:\n\n    func NewFoo() *Foo {\n        return \u0026Foo{\n        DefDef: 10,\n\n        DefOpt: 11,\n    }\n    }\n\nAfter:\n\n    func NewFoo() *Foo {\n        return \u0026Foo{\n            DefDef: 10,\n            DefOpt: 11,\n        }\n    }\n"
    },
    {
      "commit": "9673a68f93715d0efb7a91d32005cc78a477398e",
      "tree": "a1fce9bcb90c7393ee4a3eb437afb4b3caa9f1e8",
      "parents": [
        "9c0bdcb5197f1ebc5b404313f2ee7edd865a5a47"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "yuxuan.wang@reddit.com",
        "time": "Thu May 16 17:16:22 2024 -0700"
      },
      "committer": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "fishywang@gmail.com",
        "time": "Wed May 29 09:27:13 2024 -0700"
      },
      "message": "THRIFT-5786: Full deprecation support in go\n\nClient: go\n\nThis should got most of them. Also fixed an indentation bug from 4930ca.\n"
    },
    {
      "commit": "4930caca8beb340b6543dd27856d3699dce40e54",
      "tree": "2b90e616d2612198187a5e8fcc9250e6c97e2430",
      "parents": [
        "c53a1b78bac23cdda13feb13b6d3348c11083007"
      ],
      "author": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "yuxuan.wang@reddit.com",
        "time": "Tue May 14 14:08:00 2024 -0700"
      },
      "committer": {
        "name": "Yuxuan \u0027fishy\u0027 Wang",
        "email": "fishywang@gmail.com",
        "time": "Wed May 15 09:24:25 2024 -0700"
      },
      "message": "go: Proper indent in compiler\n\nThis is a \"trivial\" change for go compiler to always use the combination\nof indent_up, indent_down, and indent, over manual indentation (by\nadding 2 spaces at the beginning of the string). Also change go\ncompiler\u0027s indent_str to tab over 2 spaces.\n\nWhile I\u0027m here, also made a few minor tweaks on generated go code.\n"
    },
    {
      "commit": "c53a1b78bac23cdda13feb13b6d3348c11083007",
      "tree": "5783337081462a1a62c8d481fff0308de41cef20",
      "parents": [
        "b20f675af7ef0103a880889447a166e0e4261926"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon May 13 17:03:17 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon May 13 17:04:57 2024 +0200"
      },
      "message": "THRIFT-5781 implement full deprecation support -\u003e fix uncompileable issue at deprecated enums\nClient: netstd\nPatch: Jens Geyer\n"
    },
    {
      "commit": "42dbefb023369747bf6135588599bbeeae9e8ef2",
      "tree": "41a14e3cadcc8c11019b6b434c41580a0c0054f5",
      "parents": [
        "0341323059119c7cb4d27839e92b2108875a7b03"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu May 02 10:28:38 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu May 02 21:51:46 2024 +0200"
      },
      "message": "THRIFT-5782 implement full deprecation support\nClient: Delphi\nPatch: Jens Geyer\n\nFIX: end-of-line comments may cause uncompileable code\n"
    },
    {
      "commit": "c3d8a4ef61b439464cd2d5c417a6ceb03e6cafb1",
      "tree": "a1cf4cf3bd68367e57a43f103fba403dc2efc683",
      "parents": [
        "4f1839575f3af168f960110414114255bd344203"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sat Apr 27 00:08:15 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Sat Apr 27 01:10:59 2024 +0200"
      },
      "message": "THRIFT-5782 implement full deprecation support\nClient: Delphi\nPatch: Jens Geyer\n\nplus a minor netstd fix\n"
    },
    {
      "commit": "4f1839575f3af168f960110414114255bd344203",
      "tree": "9c93963343718af6e2718da951354b83f5dfb337",
      "parents": [
        "3dfe0af4203ed261359acddc18062ff90a492d63"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Fri Apr 26 00:23:35 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Fri Apr 26 02:25:46 2024 +0200"
      },
      "message": "THRIFT-5781 implement full deprecation support\nClient: netstd\nPatch: Jens Geyer\n"
    },
    {
      "commit": "3dfe0af4203ed261359acddc18062ff90a492d63",
      "tree": "fa04bcde9433dc3ca00e05072b4b525297bd9f44",
      "parents": [
        "4a280d56cca90296228ca29c7c582fa423d74e1f"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Wed Apr 24 23:54:45 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Thu Apr 25 00:24:42 2024 +0200"
      },
      "message": "THRIFT-5780 Prevent certain warnings related to net8\nClient: netstd\nPatch: Jens Geyer\n\nThis closes #2965\n"
    },
    {
      "commit": "4a280d56cca90296228ca29c7c582fa423d74e1f",
      "tree": "24d3efa12d96f2948ecbbf1b372c0faf7a369eb7",
      "parents": [
        "68139d117fdf4d287a78819a5bb4b0f9cab8160c"
      ],
      "author": {
        "name": "CJCombrink",
        "email": "carel.combrink@gmail.com",
        "time": "Thu Mar 14 19:57:41 2024 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Apr 15 22:37:44 2024 +0200"
      },
      "message": "THRIFT-5766 Replace std::endl with \"\\n\"\nPatch: Carel Combrink\n\nThis closes #2943\n"
    },
    {
      "commit": "1d886ca4afc1a52b03f09a526f0a354722a5621c",
      "tree": "8ec1af5dfb851c8e6bc9b277e9ae1868032b1e41",
      "parents": [
        "381d86e71e9f2352bca48af918ca790e5b50889a"
      ],
      "author": {
        "name": "CJCombrink",
        "email": "carel.combrink@gmail.com",
        "time": "Sat Mar 23 21:32:28 2024 +0100"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Sun Apr 07 22:41:58 2024 +0200"
      },
      "message": "THRIFT-5772: UUID support for c++ #2952\nClient: cpp\nPatch: CJCombrink\n\nThis closes #2952\n"
    },
    {
      "commit": "63f04583e389e7afee330f0341e045a73cdb1979",
      "tree": "58bc0d1ce220eb8e0c12844543a745d23a68eb7f",
      "parents": [
        "f6972f1a29cb3c94929f5eecef816e65bed755ef"
      ],
      "author": {
        "name": "Thomas",
        "email": "thomasbruggink@hotmail.com",
        "time": "Thu Mar 21 22:51:07 2024 +0900"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Apr 02 14:09:27 2024 +0200"
      },
      "message": "Manually remove $(BUILT_SOURCES) since no-dist-built-sources doesnt work\n"
    },
    {
      "commit": "2adfd14c02383c006f4e1cf64ab3e22b61fb5bf7",
      "tree": "c4e4454e334c9594ff534879c76cd5e9719588ba",
      "parents": [
        "fcddf0803d9c7a7cb9ddb2915ae1c480db8c76b9"
      ],
      "author": {
        "name": "Jens Geyer",
        "email": "jensg@apache.org",
        "time": "Mon Apr 01 22:44:14 2024 +0200"
      },
      "committer": {
        "name": "Jens Geyer",
        "email": "Jens-G@users.noreply.github.com",
        "time": "Tue Apr 02 14:04:17 2024 +0200"
      },
      "message": "THRIFT-5750 Remove \"ansistr_binary_\" option\nClient: delphi\nPatch: Jens Geyer\n"
    }
  ],
  "next": "28260982599cf3de90bb34af6589d8ddbf7bedce"
}
