)]}'
{
  "log": [
    {
      "commit": "791e91990eef374d9773ac96eeb3f064d1223f62",
      "tree": "e536b344551861a879bf02a982d1c93696b649f2",
      "parents": [
        "6c6ba3fb4172a71811c57664ae2a892f04208b5b"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Jun 25 18:12:01 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 18:12:01 2026 +0530"
      },
      "message": "chore(release): bump versions to 1.3.0 (#3792)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence or equivalent persisted links of the\nfinal clean AI review results from both fresh reviewers described in\n`AI_POLICY.md`, the Fory-guided reviewer and the independent general\nreviewer, on the current PR diff or current HEAD after the latest code\nchanges.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "6c6ba3fb4172a71811c57664ae2a892f04208b5b",
      "tree": "32c49221635a8c7d6ff3f8fd010d54445327fe4c",
      "parents": [
        "9cc5182505f750c8c793233071c9e1c7e85965e6"
      ],
      "author": {
        "name": "0sense",
        "email": "161242925+00sense@users.noreply.github.com",
        "time": "Thu Jun 25 03:53:36 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 07:23:36 2026 +0530"
      },
      "message": "fix(java): fix unbounded LinkedBlockingQueue deserialization (#3786)\n\n## Why?\n\n`LinkedBlockingQueueSerializer` fails to deserialize default unbounded\n`new LinkedBlockingQueue\u003c\u003e()`. Serialize works, deserialize throws\n`IndexOutOfBoundsException` because capacity on the wire is\n`Integer.MAX_VALUE` and `checkReadableBytes(capacity)` tries to read\n~2GB. Bounded queues like `new LinkedBlockingQueue\u003c\u003e(16)` work fine.\n\n## What does this PR do?\n\n- Drop `checkReadableBytes(capacity)` in\n`LinkedBlockingQueueSerializer.newCollection`\n- Add regression test for unbounded queue round-trip\n\n## Related issues\n\n- Fixes #3783\n\n## AI Contribution Checklist\n\n- [x] Substantial AI assistance was used in this PR: `no`\n\n---------\n\nCo-authored-by: Shawn Yang \u003cchaokunyang@apache.org\u003e\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "9cc5182505f750c8c793233071c9e1c7e85965e6",
      "tree": "fc5280040ab035d83139345cce8022b41a0ab8ba",
      "parents": [
        "db29712518a28d223288e2fb4d74c6a09b29ba9e"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Jun 24 22:02:46 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 00:32:46 2026 +0800"
      },
      "message": "feat(java): add fory json serialization (#3784)\n\n## Why?\n\nFory Java needs a first-class JSON serialization path that keeps Fory\u0027s\nfield-based data model and TypeRef-aware type resolution while providing\ncompetitive parse and write throughput for String and UTF-8 inputs.\n\n## What does this PR do?\n\n- Adds the standalone `fory-json` Java module and wires it into the Java\nbuild.\n- Adds public JSON APIs including `ForyJson`, `ForyJsonBuilder`,\n`JSONObject`, `JSONArray`, `ForyJsonException`, and `@JsonIgnore`.\n- Implements field-based codecs for objects, scalars, arrays,\ncollections, and maps, including generic `TypeRef` root reads.\n- Adds generated object codecs plus layout-specific readers and writers\nfor Latin1 strings, UTF16 strings, and UTF-8 bytes.\n- Adds JSON metadata, resolver, reader, writer, codegen, benchmark, and\ntest coverage for the new module.\n- Adds the small core codegen, memory, field-access, and string-layout\nhooks needed by the JSON module.\n\nThis is still in the early stage, more works will be submitted in\nfollow-up prs.\n\n## Related issues\n\nNone.\n\n## Does this PR introduce any user-facing change?\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\nThis adds the new Java `fory-json` module and public JSON APIs. It does\nnot change the Fory binary or xlang wire protocol.\n\n## Benchmark\n\nLatest JDK21 single-thread Eishay gate after optimization, compared\nagainst same-run registered Fory binary lanes:\n\n- JSON parse String: 95.2% of registered Fory binary parse\n- JSON parse UTF8: 93.7% of registered Fory binary parse\n- JSON write String: 92.2% of registered Fory binary write\n- JSON write UTF8: 90.7% of registered Fory binary write\n\nJMH Perf result:\n- EishayParseString.foryJson thrpt 3 5529899.541 ± 143312.726 ops/s\n- EishayWriteString.foryJson thrpt 3 9301251.602 ± 10139469.940 ops/s"
    },
    {
      "commit": "db29712518a28d223288e2fb4d74c6a09b29ba9e",
      "tree": "b6116b41ed093954007302b6643570b7f5b5c52e",
      "parents": [
        "d42cbef4771b58fe54b3cd947eab8642f09ba60a"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Jun 23 19:04:45 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 21:34:45 2026 +0800"
      },
      "message": "feat(python): add Python 3.14 CI and wheels (#3781)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\nCloses #3780 \n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence or equivalent persisted links of the\nfinal clean AI review results from both fresh reviewers described in\n`AI_POLICY.md`, the Fory-guided reviewer and the independent general\nreviewer, on the current PR diff or current HEAD after the latest code\nchanges.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "d42cbef4771b58fe54b3cd947eab8642f09ba60a",
      "tree": "30a5ae1966d0c0f3062209677331a08fba655340",
      "parents": [
        "adcfd61d530b7914a26b16a62d6dab395ded2faf"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Jun 23 14:16:32 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 16:46:32 2026 +0800"
      },
      "message": "chore: fold Fory review skill into agent guidance (#3779)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "adcfd61d530b7914a26b16a62d6dab395ded2faf",
      "tree": "27d52cefa2dd001361c51901e5248472b41ab1ed",
      "parents": [
        "7b5f94ba04dbc346f9d36d76b9f84b4c124b84fa"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Jun 23 14:16:11 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 16:46:11 2026 +0800"
      },
      "message": "feat(java): direct static varhandle field accessors (#3778)\n\n## Why?\n\n## What does this PR do?\n\nnon static VarHandle could not be compiled into direct field access,\nthis pr generate static final varhandle for jdk25 instead.\n\n## Related issues\n\nNone.\n\n## AI Contribution Checklist\n\n\n## Does this PR introduce any user-facing change?\n\nNo. This changes internal Java serializer accessor generation and\nruntime codegen behavior only.\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n```\nBenchmark                              (bufferType)   (objectType)  (references)   Mode  Cnt         Score         Error  Units\nUserTypeSerializeSuite.fory_serialize         array  MEDIA_CONTENT         false  thrpt    5  15921306.512 ± 1695382.132  ops/s\n```"
    },
    {
      "commit": "7b5f94ba04dbc346f9d36d76b9f84b4c124b84fa",
      "tree": "3c640ec6589414114db3a6130b4c66f0ddaadc3c",
      "parents": [
        "0ebf1bab48180686f61e5e667b671c23c8090890"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Jun 22 20:00:04 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 22:30:04 2026 +0800"
      },
      "message": "fix(java): log ForyBuilder advisories at info level (#3777)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "0ebf1bab48180686f61e5e667b671c23c8090890",
      "tree": "5c2b2ba3210c9080b0c194068f927d60b00a3829",
      "parents": [
        "d2fe5696f4d82575f6bdbfad905bb78a77c5118c"
      ],
      "author": {
        "name": "Yash Agarwal",
        "email": "144949452+yash-agarwa-l@users.noreply.github.com",
        "time": "Sun Jun 21 18:23:49 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 21 18:23:49 2026 +0530"
      },
      "message": "feat(compiler): add dart gRPC codegen (#3723)\n\n## Why?\n\nDart users need gRPC support from FDL/proto/fbs schemas\n\n## What does this PR do?\n\nAdds DartServiceGeneratorMixin so foryc --grpc --dart_out\u003d… emits a\n\u003cpackage\u003e/\u003cstem\u003e_grpc.dart next to the messages file. Includes:\n\n- \u003cService\u003eClient over package:grpc\u0027s Client with one method per RPC,\ncovering unary and all three streaming modes (server-stream,\nclient-stream, bidi).\n- abstract \u003cService\u003eServiceBase over Service with $addMethod\nregistrations and a _Pre shim per method.\n- Top-level _serialize / _deserialize helpers routing through the schema\nmodule\u0027s getFory(), with reference tracking on so payloads round-trip\nwith the Java/Python peers.\n- Works from FDL, Protobuf, and FlatBuffers IDL service definitions.\n- Class- and method-name collision detection.\n- Opt-in dart analyze + dart format smoke test on the emitted file.\n- A Java↔Dart gRPC interop test exercising all four modes in both\ndirections.\n\n## Related issues\nPart of #3266\nPart of #3279 \nCloses #3266\n\n## AI Contribution Checklist\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n## Does this PR introduce any user-facing change?\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n- New _grpc.dart companion when --grpc --dart_out is used on a schema\nwith services.\n\n## Benchmark\n\n---------\n\nCo-authored-by: chaokunyang \u003cshawn.ck.yang@gmail.com\u003e"
    },
    {
      "commit": "d2fe5696f4d82575f6bdbfad905bb78a77c5118c",
      "tree": "38705868a441257603864cddb6770e725d3ef2eb",
      "parents": [
        "6ddc4145d99c048900767aa87317a544155ef4d0"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sun Jun 21 14:59:56 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 21 14:59:56 2026 +0530"
      },
      "message": "chore(release): enforce OpenJDK 25 for JVM publishing (#3775)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\nCloses #3771\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "6ddc4145d99c048900767aa87317a544155ef4d0",
      "tree": "05958ec7579da3330e2e0c63a995adc0b8acf312",
      "parents": [
        "40d1e4c109940fc023a62203911bc0a878fb3ae7"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sun Jun 21 10:53:08 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 21 10:53:08 2026 +0530"
      },
      "message": "fix(java): cache accepted type checker classes (#3773)\n\n## Why?\n\n\n\n## What does this PR do?\n\nTypeChecker is invoked in multiple places for security concerns, this pr\ncache the result to only invoke once\n\n## Related issues\n\nCloses #3769\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "40d1e4c109940fc023a62203911bc0a878fb3ae7",
      "tree": "1f928b43d0701b6621ebde48d0c8f2e93122b366",
      "parents": [
        "b7aa2200b5a8ab025ac8e70d1bccd5bd8b788e5a"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sun Jun 21 08:40:02 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 21 11:10:02 2026 +0800"
      },
      "message": "fix(java): guard aligned varint unsafe read (#3772)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "b7aa2200b5a8ab025ac8e70d1bccd5bd8b788e5a",
      "tree": "33cabbe7353bf140d1997eab6e659df6acfe14e3",
      "parents": [
        "fca8af85efc653a6149617b5e6bf4426cc775063"
      ],
      "author": {
        "name": "Jarek Potiuk",
        "email": "jarek@potiuk.com",
        "time": "Sat Jun 20 21:34:42 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 21 09:34:42 2026 +0800"
      },
      "message": "docs: add threat model + SECURITY.md/AGENTS.md discoverability (#3734)\n\n## What this is\n\nA **draft threat model** for Apache Fory, proposed by the ASF Security\nteam for the Fory PMC to review, correct, or reject. It is a starting\npoint for discussion, not a finished document.\n\nThis PR:\n- adds `THREAT_MODEL.md` — the draft model, following the [ASF Security\nthreat-model\nrubric](https://gist.github.com/potiuk/da14a826283038ddfe38cc9fe6310573);\n- adds `SECURITY.md` — a short security policy that links the threat\nmodel;\n- appends a `## Security` section to `AGENTS.md`, so the chain\n`AGENTS.md → SECURITY.md → THREAT_MODEL.md` is mechanically discoverable\nby automated security scanners.\n\n## How to read it\n\nEvery claim is provenance-tagged: *(documented)* (from Fory\u0027s own\ndocs/repo), *(inferred)* (reasoned from the architecture, **not yet\nconfirmed**), *(maintainer)* (confirmed by the PMC). This v0 is ~20\ndocumented / ~26 inferred. The **§14 Open questions** section collects\nevery inferred claim into waves for the PMC to confirm or correct — that\nis where review time is best spent. The highest-impact ones:\n\n- whether \"under the default `requireClassRegistration(true)`, only\nregistered types are instantiated from untrusted bytes\" is a committed\nproperty, and whether findings that require\n`requireClassRegistration(false)` are out-of-model / non-default (wave\n1);\n- per-language memory safety on malformed input — in particular the C++\ndecoder (wave 2);\n- the cross-language (xlang) peer-trust assumption and the resource/DoS\nline beyond `maxDepth` (waves 2).\n\nNothing here is a requirement — the model is for the PMC to own. Comment\ninline, edit the branch, or reply on the email thread.\n\n## AI Usage Disclosure\n\n- **Substantial AI assistance: yes.**\n- **What:** `THREAT_MODEL.md` was drafted by the ASF Security team\u0027s\nthreat-model tooling (Claude) from Apache Fory\u0027s public documentation\nand repository, following the Scovetta rubric. `SECURITY.md` and the\n`AGENTS.md` Security section are templated scaffolding.\n- **Review model:** the document is deliberately presented as a *draft\nfor line-by-line maintainer review* — every claim carries a provenance\ntag, and all unverified *(inferred)* claims are surfaced as explicit\nopen questions (§14) for the PMC to ratify, correct, or strike. It is\nnot offered as finished or authoritative content.\n- **Provenance / licensing:** content is original to this engagement,\ncarries the ASF license header, and is intended to comply with the [ASF\nGenerative Tooling\nGuidance](https://www.apache.org/legal/generative-tooling.html).\n\n---------\n\nCo-authored-by: chaokunyang \u003cshawn.ck.yang@gmail.com\u003e"
    },
    {
      "commit": "fca8af85efc653a6149617b5e6bf4426cc775063",
      "tree": "0912250543ee254de64c6bc4f7c2ac3365f6bd78",
      "parents": [
        "669de50404c25299c588de2db079ba9362cca8f8"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat Jun 20 22:02:57 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 21 00:32:57 2026 +0800"
      },
      "message": "feat: limit remote schema metadata (#3770)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "669de50404c25299c588de2db079ba9362cca8f8",
      "tree": "736a3d24fd604e030a2bc379525ad7dd54b91cd3",
      "parents": [
        "680d50f3eaad8524b04795fdd81abfdaaeebde36"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Jun 17 11:33:46 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 11:33:46 2026 +0530"
      },
      "message": "feat(python): add async grpc mode for python (#3768)\n\n## Why?\n\nPython gRPC service generation needs first-class AsyncIO support while\nstill allowing existing synchronous `grpcio` applications to generate\nsync-compatible companions.\n\n## What does this PR do?\n\n- Defaults generated Python gRPC companions to `grpc.aio` servicers and\nasync request handling.\n- Adds `--grpc-python-mode\u003d{async,sync}` for choosing Python gRPC API\nmode, with CLI validation that the option is only used with Python\n`--grpc` output.\n- Keeps synchronous Python gRPC generation available through explicit\nsync mode.\n- Updates compiler tests, generated-code docs, compiler guide pages, and\nlanguage gRPC support docs for the new Python mode behavior.\n- Splits Java/Python gRPC interop coverage into async and sync Python\npeers, shares common test values, and updates CI/test class names.\n\n## Related issues\n\n#3273 \n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "680d50f3eaad8524b04795fdd81abfdaaeebde36",
      "tree": "426adb4a4c52aa2fcd33007cd178715f9c158bac",
      "parents": [
        "145e0138775370252f03ace84e29488fc61e43d1"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Jun 16 21:26:49 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 21:26:49 2026 +0530"
      },
      "message": "docs: refine gRPC support guides (#3767)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "145e0138775370252f03ace84e29488fc61e43d1",
      "tree": "48656302df8426a15ad61f778af4e5609079e1f8",
      "parents": [
        "f9c6fcc49d8824bf05397628a2f8f217dbce95a1"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Jun 16 19:13:12 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 19:13:12 2026 +0530"
      },
      "message": "chore: bump release version to 1.2.0 (#3766)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "f9c6fcc49d8824bf05397628a2f8f217dbce95a1",
      "tree": "edeabcd5d0b953a0ca4f376feaf9ed4060acafcc",
      "parents": [
        "42a91e1aae20b18ca3e3233c359f06b1ab8af512"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat Jun 13 19:55:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 17:25:32 2026 +0530"
      },
      "message": "fix(scala): preserve local maven resolver (#3765)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "42a91e1aae20b18ca3e3233c359f06b1ab8af512",
      "tree": "e5d4037819d29145bdbdf15a711956a05739cd33",
      "parents": [
        "e503ffbbb6a86a89139bfd9033cb30fa6fe36f98"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat Jun 13 18:57:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 16:27:59 2026 +0530"
      },
      "message": "fix(ci): fix pypa/gh-action-pypi-publish (#3764)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "e503ffbbb6a86a89139bfd9033cb30fa6fe36f98",
      "tree": "f0f405fb94851f2cae7e1dc317b73b514c226d0e",
      "parents": [
        "3fe40485cf2315e501e7c7aadbd2f7eab3e01cb7"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat Jun 13 17:47:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 15:17:51 2026 +0530"
      },
      "message": "feat(javascript): add javascript gRPC support for nodejs/browser (#3760)\n\n## Why?\n\nJavaScript users can generate Fory model types today, but service\nschemas do not yet emit JavaScript/TypeScript gRPC companions. This\ncloses the JavaScript gRPC stub generation gap from #3278 while keeping\ngRPC transport packages as application-owned dependencies.\n\n## What does this PR do?\n\n- Adds JavaScript service companion generation for Node.js\n`@grpc/grpc-js` clients and servers with Fory request/response\nserialization.\n- Adds `--grpc-web` for JavaScript browser clients, including callback\nand promise clients backed by `grpc-web`.\n- Adds generated JavaScript schema helpers (`install`, `createFory`, and\n`getFory`) plus a `Fory.getRootCodec` API for exact struct/union root\nserialization.\n- Validates JavaScript gRPC export, method, output-path, and gRPC-Web\nstreaming-shape collisions during compilation.\n- Updates compiler, IDL, generated-code, and JavaScript guide docs for\nJavaScript gRPC and gRPC-Web output.\n- Adds compiler codegen tests and JavaScript runtime tests covering\ngenerated service bindings and root codecs.\n\n## Related issues\n\nCloses #3278 \n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nYes. It adds JavaScript gRPC/gRPC-Web compiler outputs and a JavaScript\nroot-codec API used by generated service companions.\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nNot applicable; this PR adds code generation, runtime codec helpers,\ntests, and documentation rather than changing benchmarked serialization\npaths."
    },
    {
      "commit": "3fe40485cf2315e501e7c7aadbd2f7eab3e01cb7",
      "tree": "088516f9bb243e0f4c98d03c2a143b962c91f909",
      "parents": [
        "562241331c4dbb5ded53c57c17fa9d54ce65b4b8"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat Jun 13 15:35:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 13:05:49 2026 +0530"
      },
      "message": "feat(csharp): add generated grpc support for C# (#3761)\n\n## Why?\n\nC# users can generate Fory model types today, but schemas that define\nservices do not produce C# gRPC companions. This leaves C# out of the\nexisting `--grpc` workflow used by the other supported\nservice-generation targets.\n\n## What does this PR do?\n\n- Adds C# gRPC companion generation for Fory compiler services,\nincluding service descriptors, server base classes, clients, bind\nhelpers, and Fory-backed request/response marshallers.\n- Extends C# generation ownership so schema modules are named from the\nsource file stem and reused by service companions through the generated\n`ThreadSafeFory` module.\n- Adds C# preflight validation for generated output path and schema\nmodule owner collisions before writing files.\n- Updates compiler and service-codegen tests to cover C# gRPC output,\nstreaming shapes, imported service types, identifier escaping, collision\nhandling, and generated module naming.\n- Wires C# output into the cross-language gRPC generation helper.\n- Documents C# gRPC support, dependencies, generated API shape,\ntroubleshooting, and compiler guide updates.\n\n## Related issues\n\n#3266\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [x] Does this PR introduce any public API change?\n- Adds generated C# gRPC companion APIs when `foryc --csharp_out\u003d...\n--grpc` is used.\n- [ ] Does this PR introduce any binary protocol compatibility change?\n- The generated services use Fory-encoded gRPC message bodies, but this\nPR does not change the Fory binary protocol.\n\n## Benchmark\n\nNot applicable."
    },
    {
      "commit": "562241331c4dbb5ded53c57c17fa9d54ce65b4b8",
      "tree": "937006c484c33016619c53296f9fa803d819487c",
      "parents": [
        "0d8f412c2eb3b0496986c569708c55bf7fdd742c"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat Jun 13 15:31:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 13:01:10 2026 +0530"
      },
      "message": "chore(deps): bump Go gRPC test dependencies (#3763)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "0d8f412c2eb3b0496986c569708c55bf7fdd742c",
      "tree": "874ce230c38061041b4f90c83574db8ab5070378",
      "parents": [
        "626ddc56f87351a7668a80e3f583ae2b66a029c1"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat Jun 13 15:02:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 12:32:10 2026 +0530"
      },
      "message": "feat(scala): add generated grpc service support for scala (#3762)\n\n## Why?\n\nScala schema generation already emits Scala 3 model types and modules,\nbut schemas with service definitions could not generate Scala gRPC\ncompanions. This left Scala users without generated client/server\nbindings for Fory-encoded gRPC services even though Java, Python, Go,\nRust, and Kotlin already support `--grpc`.\n\n## What does this PR do?\n\n- Adds Scala gRPC service companion generation for `foryc\n--scala_out\u003d... --grpc`, including service descriptors, server base\nclasses, generated clients, Fory-backed grpc-java marshallers, unary\ncalls, and streaming method shapes.\n- Adds Scala compiler preflight validation for package/import\ncombinations and generated file path collisions, including service\ncompanion paths.\n- Adds transport-free Scala RPC handle traits, `RpcFuture` and\n`RpcIterator`, for generated unary and server-streaming client\nconvenience APIs.\n- Extends service codegen tests to cover Scala marshalling output,\nstreaming shapes, imported type references, collision handling, keyword\nescaping, protobuf/FlatBuffers service inputs, and end-to-end `--grpc`\noutput creation.\n- Documents Scala gRPC generation across the compiler docs and Scala\nguide, including dependencies, client/server examples, streaming\nbehavior, and cross-IDL support.\n\n## Related issues\n\n#3266\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\nUser-facing changes:\n\n- Adds Scala `--grpc` service companion generation and new Scala RPC\nhandle traits used by generated clients.\n- Does not change the Fory binary protocol.\n\n## Benchmark"
    },
    {
      "commit": "626ddc56f87351a7668a80e3f583ae2b66a029c1",
      "tree": "07049d3ae52fed9722cba10af34732c3c6bcf645",
      "parents": [
        "1646364751d431612abd808ab5f92a1b3b871d68"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat Jun 13 04:55:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 04:55:29 2026 +0800"
      },
      "message": "feat(rust): make fory-derive generated code use exported api in fory rust lib (#3759)\n\n## Why?\n\nRust users should be able to depend on the user-facing `fory` crate only\nand still use derive-generated serializers, row derives, trait-object\nregistration, and public runtime types. The derive output also needs to\nkeep working when the `fory` facade is renamed in `Cargo.toml`, while\nlower-level integrations can still use `fory-core` directly.\n\n## What does this PR do?\n\n- Re-exports the Rust derive macros and public runtime types from\n`fory`, and exposes a hidden `fory::__private` runtime root for\ngenerated code.\n- Adds `proc-macro-crate` based runtime-root resolution in\n`fory-derive`, preferring the `fory` facade and falling back to\n`fory-core` for direct lower-level use.\n- Updates generated object, enum, union, row, skip, and trait-object\ncode to emit paths through the resolved runtime root instead of\nhard-coded `::fory_core` paths.\n- Makes `fory-core` macro exports hygienic through `$crate`, including\ntrait-object registration helpers.\n- Adds Rust API test crates for facade-only and renamed-facade\ndependencies, covering object derives, row derives, trait objects,\nunions/enums, manual serializers, and rejected `#[fory(crate \u003d ...)]`\nusage.\n- Updates Rust docs and agent guidance to describe `fory` as the normal\napplication dependency and `fory-core`/`fory-derive` as lower-level\ncrates.\n\n## Related issues\n\nCloses #3755\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nYes. Rust applications can use derive macros and generated code through\nthe `fory` facade crate without declaring direct `fory-core` or\n`fory-derive` dependencies.\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nNot applicable; this is a Rust API/export and derive-path change."
    },
    {
      "commit": "1646364751d431612abd808ab5f92a1b3b871d68",
      "tree": "0481fd65f2fa7753fe91f1e306b768207c094198",
      "parents": [
        "a268134ced3d7a689e5d5c1cc5024cb3f9c6d458"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat Jun 13 02:35:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 00:05:40 2026 +0530"
      },
      "message": "feat(kotlin): add kotlin grpc support (#3757)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "a268134ced3d7a689e5d5c1cc5024cb3f9c6d458",
      "tree": "f8fca252ea18b6ab5e6a8c181a3fe7aaa16feb50",
      "parents": [
        "ddcf555fb553ed80d5002bc9f2f2647da279d529"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat Jun 13 00:47:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 22:17:14 2026 +0530"
      },
      "message": "feat(python): make scalar wire markers typing-friendly (#3756)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\nCloses #3725 \n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "ddcf555fb553ed80d5002bc9f2f2647da279d529",
      "tree": "44bfa05bf5683402152ff15bd50c8475f2bba778",
      "parents": [
        "0e4ac5917898e4fbd253a5d638a21ff15d500d67"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Jun 12 18:04:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 15:34:44 2026 +0530"
      },
      "message": "fix(cpp): align unsigned struct default encoding (#3754)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\nCloses #3746\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "0e4ac5917898e4fbd253a5d638a21ff15d500d67",
      "tree": "1a2d045c7fb10f182009ff22b9a678b33fcf3558",
      "parents": [
        "bfa42562b295261c0cc4d178f20ccc0f67fdb809"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Jun 12 16:36:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 14:06:21 2026 +0530"
      },
      "message": "feat(cpp): support struct property accessors (#3751)\n\n## Why?\n\nC++ struct serialization only accepted data-member field entries, which\nmade PIMPL-style or private-storage types awkward to serialize when\ntheir stable public surface is an accessor pair.\n\n## What does this PR do?\n\n- Adds `FORY_PROPERTY` field entries for accessor-backed C++ struct\nfields, including same-name getter/setter, custom getter/setter, and\noptional `fory::F(...)` metadata forms.\n- Introduces compile-time property descriptors plus shared field\ntype/get/set helpers so struct serialization, compatible struct reads,\nrow encoding, and type metadata can handle both member pointers and\naccessor properties.\n- Keeps direct-member primitive fast paths limited to direct fields\nwhile routing accessor-backed fields through their setter path.\n- Adds C++ coverage for property metadata, PIMPL property round trips,\nconfigured accessor metadata, and compatible nested named structs.\n- Documents accessor properties in the C++ serialization and schema\nmetadata guides.\n\n## Related issues\n\nCloses #3747 \n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nAdds the C++ `FORY_PROPERTY` macro for accessor-backed struct fields.\nThis does not change the binary protocol.\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nNot run; this PR changes C++ struct metadata/accessor support and does\nnot include benchmark changes."
    },
    {
      "commit": "bfa42562b295261c0cc4d178f20ccc0f67fdb809",
      "tree": "38f196fb6ab1277402493135671bf2d1fd300803",
      "parents": [
        "3ab5cbce4af85207c535815d146599476236a3fc"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Jun 12 15:46:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 13:16:24 2026 +0530"
      },
      "message": "fix(grpc): fix rust/go grpc support (#3753)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n#3698 \n#3738 \n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "3ab5cbce4af85207c535815d146599476236a3fc",
      "tree": "e8a7a74bb6331abe07c0502b2621407c73235e57",
      "parents": [
        "6d80562969c19efbec7762664e1f908268597569"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Fri Jun 12 14:15:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 11:45:35 2026 +0530"
      },
      "message": "feat(compiler): support Rust gRPC code generation (#3738)\n\n## Why?\n\nSupport Rust gRPC code generation.\n\n## What does this PR do?\n\n**overview**:\n\n- support Rust unary/streaming gRPC code generation\n- add Rust\u0026Java interop tests\nNote: in local environment such as Ubuntu, run the test using virtual\nenvironment:\n  ```shell\n  cd integration_tests/grpc_tests\n  python3 -m venv .venv\n  source .venv/bin/activate\n  ./run_tests.sh\n  ```\n\n**details**:\n\n1. Before generating code, first validate that there is no\n`thread_safe\u003dfalse` ref usage in gRPC payload types since tonic requires\nall payload types to be thread safe; and move naming collision logic for\nservice definition from `compiler/fory_compiler/generators/rust.py` to\n`compiler/fory_compiler/generators/services/rust.py`.\n\n2. For the given IDL, generate tonic-compatiable client and server stub\ncode, i.e. `\u003cmodule_name\u003e_service.rs`, `\u003cmodule_name\u003e_service_grpc.rs`.\n\n**Note**: considering that codec logic is relatively small, codec code\nis also generated as a separate `mod` inside\n`\u003cmodule_name\u003e_service_grpc.rs`, instead of defining a new crate under\n`rust/`.\n  \n  \u003cdetails\u003e\n  \u003csummary\u003eExample\u003c/summary\u003e\n\n  For this simple service definition:\n\n  ```\n  package hello;\n\n  message HelloRequest {\n    string name \u003d 1;\n  }\n\n  message HelloResponse {\n    string greeting \u003d 1;\n  }\n\n  service Greeter {\n    rpc SayHello (HelloRequest) returns (HelloResponse);\n  }\n  ```\n\n  The generated `service.rs` (ignore the copyright header):\n\n  ```rust\n  #[::tonic::async_trait]\npub trait Greeter: ::std::marker::Send + ::std::marker::Sync + \u0027static {\n      async fn say_hello(\n          \u0026self,\n          request: ::tonic::Request\u003ccrate::hello::HelloRequest\u003e,\n      ) -\u003e ::std::result::Result\u003c\n          ::tonic::Response\u003ccrate::hello::HelloResponse\u003e,\n          ::tonic::Status,\n      \u003e;\n  }\n\n  pub const GREETER_SERVICE_NAME: \u0026str \u003d \"hello.Greeter\";\n  pub const GREETER_SAY_HELLO_PATH: \u0026str \u003d \"/hello.Greeter/SayHello\";\n  ```\n\n  The generated `service_grpc.rs` (also ignore the copyright header):\n\n  ```rust\n  pub mod codec {\n      pub trait ForyGrpcPayload: Sized + ::std::marker::Send + \u0027static {\n          fn encode_fory_payload(\n              \u0026self,\n) -\u003e ::std::result::Result\u003c::std::vec::Vec\u003cu8\u003e, ::fory::Error\u003e;\n\n          fn decode_fory_payload(\n              payload: \u0026[u8],\n          ) -\u003e ::std::result::Result\u003cSelf, ::fory::Error\u003e;\n      }\n\n      #[derive(Debug, Clone)]\n      pub struct ForyCodec\u003cEncode, Decode\u003e {\n          marker: ::std::marker::PhantomData\u003c(Encode, Decode)\u003e,\n      }\n\n      impl\u003cEncode, Decode\u003e ForyCodec\u003cEncode, Decode\u003e {\n          pub fn new() -\u003e Self {\n              Self {\n                  marker: ::std::marker::PhantomData,\n              }\n          }\n      }\n\nimpl\u003cEncode, Decode\u003e ::std::default::Default for ForyCodec\u003cEncode,\nDecode\u003e {\n          fn default() -\u003e Self {\n              Self::new()\n          }\n      }\n\nimpl\u003cEncode, Decode\u003e ::tonic::codec::Codec for ForyCodec\u003cEncode, Decode\u003e\n      where\n          Encode: ForyGrpcPayload,\n          Decode: ForyGrpcPayload,\n      {\n          type Encode \u003d Encode;\n          type Decode \u003d Decode;\n          type Encoder \u003d ForyEncoder\u003cEncode\u003e;\n          type Decoder \u003d ForyDecoder\u003cDecode\u003e;\n\n          fn encoder(\u0026mut self) -\u003e Self::Encoder {\n              ForyEncoder::default()\n          }\n\n          fn decoder(\u0026mut self) -\u003e Self::Decoder {\n              ForyDecoder::default()\n          }\n      }\n\n      #[derive(Debug, Clone)]\n      pub struct ForyEncoder\u003cT\u003e {\n          marker: ::std::marker::PhantomData\u003cT\u003e,\n      }\n\n      impl\u003cT\u003e ::std::default::Default for ForyEncoder\u003cT\u003e {\n          fn default() -\u003e Self {\n              Self {\n                  marker: ::std::marker::PhantomData,\n              }\n          }\n      }\n\n      #[derive(Debug, Clone)]\n      pub struct ForyDecoder\u003cT\u003e {\n          marker: ::std::marker::PhantomData\u003cT\u003e,\n      }\n\n      impl\u003cT\u003e ::std::default::Default for ForyDecoder\u003cT\u003e {\n          fn default() -\u003e Self {\n              Self {\n                  marker: ::std::marker::PhantomData,\n              }\n          }\n      }\n\nfn fory_error_to_tonic_status(error: ::fory::Error) -\u003e ::tonic::Status {\n          ::tonic::Status::internal(error.to_string())\n      }\n\n      impl\u003cT\u003e ::tonic::codec::Encoder for ForyEncoder\u003cT\u003e\n      where\n          T: ForyGrpcPayload,\n      {\n          type Item \u003d T;\n          type Error \u003d ::tonic::Status;\n\n          fn encode(\n              \u0026mut self,\n              item: Self::Item,\n              dst: \u0026mut ::tonic::codec::EncodeBuf\u003c\u0027_\u003e,\n          ) -\u003e ::std::result::Result\u003c(), Self::Error\u003e {\nlet bytes \u003d\nitem.encode_fory_payload().map_err(fory_error_to_tonic_status)?;\n              ::tonic::codec::EncodeBuf::reserve(dst, bytes.len());\n              ::bytes::BufMut::put_slice(dst, \u0026bytes);\n              Ok(())\n          }\n      }\n\n      impl\u003cT\u003e ::tonic::codec::Decoder for ForyDecoder\u003cT\u003e\n      where\n          T: ForyGrpcPayload,\n      {\n          type Item \u003d T;\n          type Error \u003d ::tonic::Status;\n\n          fn decode(\n              \u0026mut self,\n              src: \u0026mut ::tonic::codec::DecodeBuf\u003c\u0027_\u003e,\n) -\u003e ::std::result::Result\u003c::std::option::Option\u003cSelf::Item\u003e,\nSelf::Error\u003e {\n              let len \u003d ::bytes::Buf::remaining(src);\n              if len \u003d\u003d 0 {\n                  return Ok(None);\n              }\n\n              let chunk \u003d ::bytes::Buf::chunk(src);\n              if chunk.len() \u003d\u003d len {\n                  let result \u003d\nT::decode_fory_payload(chunk).map_err(fory_error_to_tonic_status);\n                  ::bytes::Buf::advance(src, len);\n                  return result.map(Some);\n              }\n\n              let payload \u003d ::bytes::Buf::copy_to_bytes(src, len);\n              T::decode_fory_payload(\u0026payload)\n                  .map(Some)\n                  .map_err(fory_error_to_tonic_status)\n          }\n      }\n  }\n\n  impl codec::ForyGrpcPayload for crate::hello::HelloRequest {\nfn encode_fory_payload(\u0026self) -\u003e\n::std::result::Result\u003c::std::vec::Vec\u003cu8\u003e, ::fory::Error\u003e {\n          self.to_bytes()\n      }\n\nfn decode_fory_payload(payload: \u0026[u8]) -\u003e ::std::result::Result\u003cSelf,\n::fory::Error\u003e {\n          Self::from_bytes(payload)\n      }\n  }\n\n  impl codec::ForyGrpcPayload for crate::hello::HelloResponse {\nfn encode_fory_payload(\u0026self) -\u003e\n::std::result::Result\u003c::std::vec::Vec\u003cu8\u003e, ::fory::Error\u003e {\n          self.to_bytes()\n      }\n\nfn decode_fory_payload(payload: \u0026[u8]) -\u003e ::std::result::Result\u003cSelf,\n::fory::Error\u003e {\n          Self::from_bytes(payload)\n      }\n  }\n\n  pub mod greeter_client {\n      #[derive(Debug, Clone)]\n      pub struct GreeterClient\u003cT\u003e {\n          inner: ::tonic::client::Grpc\u003cT\u003e,\n      }\n\n      impl GreeterClient\u003c::tonic::transport::Channel\u003e {\n          pub async fn connect\u003cD\u003e(\n              dst: D,\n          ) -\u003e ::std::result::Result\u003cSelf, ::tonic::transport::Error\u003e\n          where\n              D: ::std::convert::TryInto\u003c::tonic::transport::Endpoint\u003e,\n              D::Error: Into\u003c::tonic::codegen::StdError\u003e,\n          {\nlet conn \u003d ::tonic::transport::Endpoint::new(dst)?.connect().await?;\n              Ok(Self::new(conn))\n          }\n      }\n\n      impl\u003cT\u003e GreeterClient\u003cT\u003e\n      where\n          T: ::tonic::client::GrpcService\u003c::tonic::body::Body\u003e,\n          T::Error: Into\u003c::tonic::codegen::StdError\u003e,\nT::ResponseBody: ::tonic::codegen::Body\u003cData \u003d ::tonic::codegen::Bytes\u003e\n              + ::std::marker::Send\n              + \u0027static,\n          \u003cT::ResponseBody as ::tonic::codegen::Body\u003e::Error:\n              Into\u003c::tonic::codegen::StdError\u003e + ::std::marker::Send,\n      {\n          pub fn new(inner: T) -\u003e Self {\n              let inner \u003d ::tonic::client::Grpc::new(inner);\n              Self { inner }\n          }\n\n          pub async fn say_hello(\n              \u0026mut self,\nrequest: impl ::tonic::IntoRequest\u003ccrate::hello::HelloRequest\u003e,\n          ) -\u003e ::std::result::Result\u003c\n              ::tonic::Response\u003ccrate::hello::HelloResponse\u003e,\n              ::tonic::Status,\n          \u003e {\n              self.inner.ready().await.map_err(|e| {\n::tonic::Status::unknown(format!(\"Service was not ready: {}\", e.into()))\n              })?;\n              let codec \u003d super::codec::ForyCodec::\u003c\n                  crate::hello::HelloRequest,\n                  crate::hello::HelloResponse,\n              \u003e::default();\nlet path \u003d ::tonic::codegen::http::uri::PathAndQuery::from_static(\n                  crate::service::GREETER_SAY_HELLO_PATH,\n              );\n              let mut req \u003d request.into_request();\nreq.extensions_mut().insert(::tonic::codegen::GrpcMethod::new(\n                  crate::service::GREETER_SERVICE_NAME,\n                  \"SayHello\",\n              ));\n              self.inner.unary(req, path, codec).await\n          }\n      }\n  }\n\n  pub mod greeter_server {\n      #[derive(Debug)]\n      pub struct GreeterServer\u003cT\u003e {\n          inner: ::std::sync::Arc\u003cT\u003e,\n      }\n\n      impl\u003cT\u003e GreeterServer\u003cT\u003e {\n          pub fn new(inner: T) -\u003e Self {\n              Self::from_arc(::std::sync::Arc::new(inner))\n          }\n\n          pub fn from_arc(inner: ::std::sync::Arc\u003cT\u003e) -\u003e Self {\n              Self { inner }\n          }\n      }\n\nimpl\u003cT, B\u003e ::tonic::codegen::Service\u003c::tonic::codegen::http::Request\u003cB\u003e\u003e\nfor GreeterServer\u003cT\u003e\n      where\n          T: crate::service::Greeter,\n          B: ::tonic::codegen::Body + ::std::marker::Send + \u0027static,\nB::Error: Into\u003c::tonic::codegen::StdError\u003e + ::std::marker::Send +\n\u0027static,\n      {\ntype Response \u003d ::tonic::codegen::http::Response\u003c::tonic::body::Body\u003e;\n          type Error \u003d ::std::convert::Infallible;\ntype Future \u003d ::tonic::codegen::BoxFuture\u003cSelf::Response, Self::Error\u003e;\n\n          fn poll_ready(\n              \u0026mut self,\n              _cx: \u0026mut ::std::task::Context\u003c\u0027_\u003e,\n) -\u003e ::std::task::Poll\u003c::std::result::Result\u003c(), Self::Error\u003e\u003e {\n              ::std::task::Poll::Ready(Ok(()))\n          }\n\nfn call(\u0026mut self, req: ::tonic::codegen::http::Request\u003cB\u003e) -\u003e\nSelf::Future {\n              match req.uri().path() {\n                  crate::service::GREETER_SAY_HELLO_PATH \u003d\u003e {\nstruct SayHelloSvc\u003cT: crate::service::Greeter\u003e(pub ::std::sync::Arc\u003cT\u003e);\n\nimpl\u003cT: crate::service::Greeter\u003e\n::tonic::server::UnaryService\u003ccrate::hello::HelloRequest\u003e\n                          for SayHelloSvc\u003cT\u003e\n                      {\n                          type Response \u003d crate::hello::HelloResponse;\n                          type Future \u003d ::tonic::codegen::BoxFuture\u003c\n                              ::tonic::Response\u003cSelf::Response\u003e,\n                              ::tonic::Status,\n                          \u003e;\n\n                          fn call(\n                              \u0026mut self,\nrequest: ::tonic::Request\u003ccrate::hello::HelloRequest\u003e,\n                          ) -\u003e Self::Future {\nlet inner \u003d ::std::sync::Arc::clone(\u0026self.0);\n                              let fut \u003d async move {\n\u003cT as crate::service::Greeter\u003e::say_hello(\u0026inner, request).await\n                              };\n                              ::std::boxed::Box::pin(fut)\n                          }\n                      }\n\n                      let inner \u003d self.inner.clone();\n                      let fut \u003d async move {\n                          let method \u003d SayHelloSvc(inner);\n                          let codec \u003d super::codec::ForyCodec::\u003c\n                              crate::hello::HelloResponse,\n                              crate::hello::HelloRequest,\n                          \u003e::default();\nlet mut grpc \u003d ::tonic::server::Grpc::new(codec);\n                          let res \u003d grpc.unary(method, req).await;\n                          Ok(res)\n                      };\n                      ::std::boxed::Box::pin(fut)\n                  }\n                  _ \u003d\u003e ::std::boxed::Box::pin(async move {\nlet mut response \u003d ::tonic::codegen::http::Response::new(\n                          ::tonic::body::Body::default(),\n                      );\n                      let headers \u003d response.headers_mut();\n                      headers.insert(\n                          ::tonic::Status::GRPC_STATUS,\n                          (::tonic::Code::Unimplemented as i32).into(),\n                      );\n                      headers.insert(\n                          ::tonic::codegen::http::header::CONTENT_TYPE,\n                          ::tonic::metadata::GRPC_CONTENT_TYPE,\n                      );\n                      Ok(response)\n                  }),\n              }\n          }\n      }\n\n      impl\u003cT\u003e ::std::clone::Clone for GreeterServer\u003cT\u003e {\n          fn clone(\u0026self) -\u003e Self {\n              Self {\n                  inner: self.inner.clone(),\n              }\n          }\n      }\n\npub const SERVICE_NAME: \u0026str \u003d crate::service::GREETER_SERVICE_NAME;\n\n      impl\u003cT\u003e ::tonic::server::NamedService for GreeterServer\u003cT\u003e {\n          const NAME: \u0026\u0027static str \u003d SERVICE_NAME;\n      }\n  }\n  ```\n  \u003c/details\u003e\n\n3. Add interop testing logic for Java and Rust, implement gRPC handlers\nand assertions so that Rust\u0026Java interop testing can work, and also\nreserve a placeholder crate `generated` to hold the generated gRPC code.\n\n**next:**\n\n- add documentation when above implementation is stable.\n- performance (mainly deserializaion) benchmarking and tuning.\n\n## Related issues\n\nhttps://github.com/apache/fory/issues/3275\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nN/A.\n\n## Benchmark\n\nN/A."
    },
    {
      "commit": "6d80562969c19efbec7762664e1f908268597569",
      "tree": "6d19b476b8c069d0bbfcc982a34ca11f0d9a5888",
      "parents": [
        "0f015a1501beef4959873aa1d980d3bd772268d6"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Jun 12 13:44:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 11:14:31 2026 +0530"
      },
      "message": "feat: add more read checks (#3748)\n\n## Why?\n\n\n\n## What does this PR do?\n\n- Add security model\n- Add more read checks\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "0f015a1501beef4959873aa1d980d3bd772268d6",
      "tree": "2ca7a52c40c9eddbfba3688fca9965f8fed90aec",
      "parents": [
        "2ec562556b8da88fa5eccad6671eab33649d2d50"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jun 12 11:07:17 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 11:07:17 2026 +0530"
      },
      "message": "chore: Bump MessagePack from 2.5.187 to 2.5.301 (#3750)\n\nUpdated\n[MessagePack](https://github.com/MessagePack-CSharp/MessagePack-CSharp)\nfrom 2.5.187 to 2.5.301.\n\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\n_Sourced from [MessagePack\u0027s\nreleases](https://github.com/MessagePack-CSharp/MessagePack-CSharp/releases)._\n\n## 2.5.301\n\n## Security release\n\nThis release fixes 2 high severity and 9 moderate severity security\nvulnerabilities as listed below.\n\nThis release is missing #​2269 from the v2.5.205 release. We recommend\nfolks adopt the v2.5.302 release which has all the security fixes\ncombined.\n\n### High severity advisory fixes\n\n- 696b4a76 GHSA-vh6j-jc39-fggf Use iteration for skipping msgpack\nstructures for CWE-674\n- 3538bc11 GHSA-hv8m-jj95-wg3x Bound LZ4 input reads for CWE-125\n\n### Moderage severity advisory fixes\n\n- 853429a0 GHSA-v72x-2h86-7f8m Guard LZ4 decompression length for\nCWE-409\n- 826f17c7 GHSA-qhmf-xw27-6rqr Reject nested typeless blocklist bypass\nfor CWE-502\n- c98d31f2 GHSA-2f33-pr97-265q Default MVC input formatter to\nUntrustedData for CWE-1188\n- ae90f2b1 GHSA-2x83-8g95-xh59 Limit untrusted ExpandoObject maps for\nCWE-407\n- 940b8508 GHSA-wfr3-xj75-pfwh Guard dynamic union depth for CWE-674\n- e01f07cf GHSA-w567-gjr2-hm5j Validate Unity blit lengths for CWE-789\n- dc6f6324 GHSA-cxmj-83gh-fp49 Fix CWE-789 multidimensional array\nallocation validation\n- e97f71e7 GHSA-q2h6-ghwm-5qm8 Use secure lookup comparer for CWE-407\n- 7b12e5b5 GHSA-cj9g-3mj2-g8vv Guard JSON conversion depth for CWE-674\n- a3c8a183 GHSA-cj9g-3mj2-g8vv Avoid JSON separator recursion for\nCWE-674\n- 96743523 GHSA-cj9g-3mj2-g8vv Guard typeless JSON depth for CWE-674\n\n### Fixes with no security advisory\n\n- 814bc4c1 Honor TypeFormatter options hooks for CWE-470\n- b0f8c5e2 Fix WriteRawX methods to advance by written length\n- 0124048c Fix CWE-190 map header length overflow\n\n\n## 2.5.205\n\n## What\u0027s Changed\n\n* Fix repo url by @​tomap in\nhttps://github.com/MessagePack-CSharp/MessagePack-CSharp/pull/2065\n* Update DynamicAssembly usage to honor different AssemblyLoadContext\u0027s\nby @​BertanAygun in\nhttps://github.com/MessagePack-CSharp/MessagePack-CSharp/pull/2183\n* Add more types to the default disallow list of named types to be\ndeserialized by @​AArnott in\nhttps://github.com/MessagePack-CSharp/MessagePack-CSharp/pull/2263\n* Add several known unsafe \u0027gadgets\u0027 to the disallow list by @​AArnott\nin https://github.com/MessagePack-CSharp/MessagePack-CSharp/pull/2269\n\n## New Contributors\n* @​tomap made their first contribution in\nhttps://github.com/MessagePack-CSharp/MessagePack-CSharp/pull/2065\n\n**Full Changelog**:\nhttps://github.com/MessagePack-CSharp/MessagePack-CSharp/compare/v2.5.192...v2.5.205\n\n## 2.5.198\n\n## What\u0027s Changed\n* Fix repo url by @​tomap in\nhttps://github.com/MessagePack-CSharp/MessagePack-CSharp/pull/2065\n* Update DynamicAssembly usage to honor different AssemblyLoadContext\u0027s\nby @​BertanAygun in\nhttps://github.com/MessagePack-CSharp/MessagePack-CSharp/pull/2183\n\n## New Contributors\n* @​tomap made their first contribution in\nhttps://github.com/MessagePack-CSharp/MessagePack-CSharp/pull/2065\n\n**Full Changelog**:\nhttps://github.com/MessagePack-CSharp/MessagePack-CSharp/compare/v2.5.192...v2.5.198\n\n## 2.5.192\n\n## What\u0027s Changed\n* Fix bugs in serializing long numbers by @​AArnott in\nhttps://github.com/MessagePack-CSharp/MessagePack-CSharp/pull/2055\n\n\n**Full Changelog**:\nhttps://github.com/MessagePack-CSharp/MessagePack-CSharp/compare/v2.5.187...v2.5.192\n\nCommits viewable in [compare\nview](https://github.com/MessagePack-CSharp/MessagePack-CSharp/compare/v2.5.187...v2.5.301).\n\u003c/details\u003e\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dMessagePack\u0026package-manager\u003dnuget\u0026previous-version\u003d2.5.187\u0026new-version\u003d2.5.301)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the\n[Security Alerts page](https://github.com/apache/fory/network/alerts).\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "2ec562556b8da88fa5eccad6671eab33649d2d50",
      "tree": "024a08377dcb9f060257a50c645822c7eb18d6b6",
      "parents": [
        "0ffc35ab0eb8c44208cb9d44b5f9df718c058876"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Tue Jun 09 16:52:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 14:22:50 2026 +0530"
      },
      "message": "feat(compiler): handle nested container ref pointer options in C++ compiler correctly (#3735)\n\n## Why?\n\nThe C++ compiler should correctly apply ref pointer options for nested\ncontainer element/value references.\n\n**Additional note**: \n\nWhen submitting [PR 3731](https://github.com/apache/fory/pull/3731), I\ndid not notice that Fory currently only supports nested collection types\nin C++:\n\n\nhttps://github.com/apache/fory/blob/33b0d6e8b73d1769d98824195b9155043266f3fe/docs/compiler/schema-idl.md?plain\u003d1#L1414-L1418\n\nHowever, since that PR merely added a piece of defensive programming\nlogic, it may not need to be reverted.\n\nSimilar issues also exist in the Python and JavaScript compilers.\nHowever, since they do not support nested container types, I have not\nfixed them for now.\n\n## What does this PR do?\n\n- Handle nested container ref pointer options correctly.\n- Add corresponding testcase.\n\n## Related issues\n\nN/A.\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nN/A.\n\n## Benchmark\n\nN/A."
    },
    {
      "commit": "0ffc35ab0eb8c44208cb9d44b5f9df718c058876",
      "tree": "ba430a1efe3cc4484c8f44c8efa60f3ae4780459",
      "parents": [
        "7ec4a175bce944de4e9ef2e85f2065f4250dee42"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Tue Jun 09 16:04:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 13:34:58 2026 +0530"
      },
      "message": "refactor(compiler): generate C++ unordered map for Fory map (#3745)\n\n## Why?\n\nC++ compiler should generate `unordered_map` for Fory `map` type, in\nalignment with other languages.\n\n## What does this PR do?\n\n- Fory `map` type will be generated as `unordered_map` instead of `map`\n- Change testcase and doc accordingly\n\n## Related issues\n\nN/A.\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nN/A.\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nN/A."
    },
    {
      "commit": "7ec4a175bce944de4e9ef2e85f2065f4250dee42",
      "tree": "3007cf526bfe0548856190c87714febd68c414c1",
      "parents": [
        "f6af6ec84cffebdc6f7b517c3edd7ddecb1cd40d"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Tue Jun 09 10:51:05 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 10:51:05 2026 +0530"
      },
      "message": "feat(go): implement grpc stub generation (#3698)\n\n## Why?\nGo implementation only provides type generation and misses the gRPC\nservice stub generations for now. this PR adds it.\n\n## Related issues\nCloses #3274 \n\n\n## What it does ?\n### Implemented till now -\n#### `ImportTracker` class in `base.py`\n1. which returns the foreign imports defined in a RpcMethod inside a\nschema file\u0027s service interface.\n\n#### `generate_services()`\n1. which returns a service generated file\n2. License header, package header using `get_package_name()`\n3. the imports block of go using `_build_import_block(tracker)`\n`_build_import_block(tracker)` function returns the import block with\nfixed grpc, context imports which are required by every single generated\nfile for each service. and a foreign type imports statement returned by\nthe `tracker.go_imports()`. at end after all the service code generation\nis done, this function inserts the import block to the saved placeholder\nindex.\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "f6af6ec84cffebdc6f7b517c3edd7ddecb1cd40d",
      "tree": "3fed971dbdbed56eb4cab837c1d0911ba54b1751",
      "parents": [
        "989e6acf18a20b5f3a88271f06b1e84118177fad"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Tue Jun 09 11:16:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 08:46:09 2026 +0530"
      },
      "message": "feat(compiler): handle Rust identifier escaping and name collisions (#3744)\n\n## Why?\n\n- Identifiers colliding with Rust keywords should be escaped.\n- After naming normalization, some identifiers may collide with each\nother.\n\nThe Fory compiler should handle above edge-cases carefully by sanitizing\nthe identifiers or throwing collision errors to the user, instead of\ngenerating Rust code that cannot be compiled by the Rust compiler.\n\n## What does this PR do?\n\n### Scope\n\nThis PR handles Rust identifier escaping and name collisions in both\nnormal `message` definition and gRPC service definition.\n\n**Note**: for now the handling logic for gRPC service definition is also\ndefined in `compiler/fory_compiler/generators/rust.py`, I plan to move\nthem into `compiler/fory_compiler/generators/services/rust.py` in the\nRust gRPC code generation PR.\n\n### Workflow\n\nThe current implementation broadly follows the approach used by\nprost-build.\nIt first normalizes identifiers from the IDL according to Rust naming\nconventions, e.g. converting struct names to UpperCamelCase and field\nnames to snake_case.\nIt then checks whether the normalized identifiers are Rust keywords and\nescapes them when necessary.\nFinally it checks the sanitized (i.e. normalized + escaped) identifier\nwith already allocated identifiers in the same scope for any collision.\nThe sanitized identifiers are cached to make sure the definition site\nand all use sites refer to the same name.\n\n## Related issues\n\nClose https://github.com/apache/fory/issues/3544.\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nN/A.\n\n## Benchmark\n\nN/A."
    },
    {
      "commit": "989e6acf18a20b5f3a88271f06b1e84118177fad",
      "tree": "a9303bbad52b20101a8cbf287e11d910d9a655db",
      "parents": [
        "793e9ab9f931a19a8cc31ef59c348b96d3e2619d"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Jun 08 01:33:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 01:33:44 2026 +0800"
      },
      "message": "perf: optimize compatible mode read performance (#3743)\n\n## Why?\n\nCompatible-mode xlang reads spend too much time in generic matched-field\nhandling: exact schema matches can still carry compatible metadata,\nscalar widening can redispatch through generic converters, and\nregenerated serializers can keep extra matched-id dispatch in their hot\npaths. The benchmark matrix also lacked a focused schema-mismatch mode\nfor measuring compatible-read behavior across runtimes.\n\n## What does this PR do?\n\n- Optimizes compatible-read layout/codegen across Java, C++, C#, Dart,\nGo, JavaScript, Kotlin, Python, Rust, Scala, and Swift by classifying\nmatched fields as exact direct reads, compatible scalar conversions, or\nremote-only skips before generated dispatch.\n- Adds typed/lossless compatible scalar conversion paths and\ndescriptor-aware converter callsites so hot reads use concrete remote\nwire reads plus the required conversion instead of generic remote/local\ntype redispatch.\n- Updates generated/static serializer paths, reader caches, collection\nhandling, and mismatch validation so compatible reads keep direct\nsame-schema paths while rejecting incompatible matched fields.\n- Extends tests for compatible scalar conversion, generated/static\nserializers, struct compatibility, mismatch handling, and xlang coverage\nacross affected runtimes.\n- Adds/updates benchmark workloads, run scripts, and README guidance for\nFory-only schema-mismatch benchmark mode via\n`FORY_BENCH_SCHEMA_MISMATCH\u003d1`, including v1-to-v2 int32-to-int64\ncompatible-read cases.\n- Documents the generated compatible-read ownership model in the xlang\nimplementation guide and local runtime guidance.\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nNo public API or binary protocol compatibility change is intended. The\nvisible change is benchmark-only documentation and runner support for\nschema-mismatch compatible-read measurements.\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nAdds schema-mismatch benchmark mode to the language benchmark runners.\nRun with `FORY_BENCH_SCHEMA_MISMATCH\u003d1` and `--serializer fory` to\nmeasure compatible-read deserialization where v1 benchmark payloads are\nread by v2 schemas using the same Fory type IDs and one widened\nint32-to-int64 field."
    },
    {
      "commit": "793e9ab9f931a19a8cc31ef59c348b96d3e2619d",
      "tree": "9f3bde23d4b62353ea5cfe9f698be3c1f4007cf3",
      "parents": [
        "14f540b7bae6817f5ebbc106115193ece3dc963f"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Jun 05 19:00:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 16:30:09 2026 +0530"
      },
      "message": "feat: default compatible mode for native serialization (#3742)\n\n## Why?\n\nNative-mode Fory instances previously defaulted to schema-consistent\nmode while xlang instances defaulted to compatible mode. That made the\ndefault less robust for schema evolution and left docs/tests dependent\non implicit mode behavior.\n\n## What does this PR do?\n\n- Makes compatible mode the default construction path, including\nnative-mode builders, while keeping explicit `compatible\u003dfalse`\navailable for same-schema workloads that need faster serialization and\nsmaller size.\n- Updates Java, Python, Rust, Go, C++, and related integration tests so\nFory creation sites set compatibility explicitly where the test depends\non a specific mode.\n- Updates benchmark Fory construction to make the measured compatibility\nmode explicit.\n- Cleans language guides, READMEs, compiler docs, benchmark docs, and\nxlang specs so compatible mode guidance is consistent across languages.\n- Clarifies when `compatible\u003dfalse` is appropriate: only when every\nreader and writer uses the same schema, or when xlang schemas are\nverified across languages or generated from Fory schema IDL.\n- Removes stale/confusing wording such as old native-mode defaults,\nmisleading `runtime` phrasing, and examples that configured unrelated\noptions in configuration sections.\n\n## Related issues\n\nNone.\n\n## AI Contribution Checklist\n\n- [x] Substantial AI assistance was used in this PR: `yes` / `no`\n- [x] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n### AI Usage Disclosure\n\nThis PR used AI assistance to audit cross-language docs, update\ncompatible-mode guidance, add explicit compatibility settings in tests\nand benchmarks, and iterate on CI failures. The author reviewed the\ngenerated changes, ran focused local verification, and monitored GitHub\nActions to green.\n\n### ai_review\n\n- Fresh review rounds were run during the docs cleanup and CI-fix loop.\n- The final gpt-5.5 high review of the CI-fix diff reported: `No\nactionable findings.`\n- GitHub Actions for the latest PR head completed successfully after the\nfinal commit.\n- Screenshot evidence is not attached in this PR body.\n\n## Does this PR introduce any user-facing change?\n\nYes. Compatible mode is now the default for Fory construction, including\nnative mode. Users who always serialize and deserialize with the same\nschema can set `compatible\u003dfalse` explicitly for faster serialization\nand smaller size.\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nNo benchmark result changes are included. Benchmark setup code was\nupdated so Fory compatibility mode is explicit after the default change."
    },
    {
      "commit": "14f540b7bae6817f5ebbc106115193ece3dc963f",
      "tree": "7f701b242df298d3cf3ca8457aa4f2839aafcc03",
      "parents": [
        "fad785a2f1454f434f966071ab3a8eadd9daf65c"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Jun 05 15:31:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 13:01:47 2026 +0530"
      },
      "message": "chore(deps): fix vulnerable dependencies (#3741)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "fad785a2f1454f434f966071ab3a8eadd9daf65c",
      "tree": "dc94aa4bdb9bf718bdbb92e54a52a8e9e76d6bd6",
      "parents": [
        "92e7a5cf0179ebc77351afe98074ded8e20481d4"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Jun 05 14:01:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 11:31:15 2026 +0530"
      },
      "message": "feat(xlang): support compatible scalar read conversions (#3740)\n\n## Why?\n\nCompatible schema evolution needs to preserve field values when a remote\nwriter and local reader use different but safely convertible scalar\ntypes. Previously, several runtimes skipped or defaulted fields once the\nrecorded type metadata differed, which made common migrations such as\nstring-to-number, bool-to-string, numeric widening/narrowing, and\ndecimal normalization lose data instead of performing checked\nconversions.\n\n## What does this PR do?\n\n- Defines compatible scalar read-conversion behavior in the xlang and\nJava serialization specs, including bool, string, signed and unsigned\nintegers, floating-point values, and decimal values.\n- Adds checked compatible scalar conversion implementations and\nserializer wiring across C++, C#, Dart, Go, Java, JavaScript/TypeScript,\nPython, Rust, and Swift.\n- Updates generated and compatible struct read paths so scalar field\ntype changes are converted when allowed, while unsupported conversions\nnow report field-specific invalid-data errors instead of silently\nskipping matched fields.\n- Extends type metadata handling where needed so runtimes can\ndistinguish exact wire scalar types during compatible reads.\n- Updates schema-evolution/type-serialization guides and adds focused\nruntime tests for scalar conversions, decimal/string parsing, option\ncomposition, same-schema preservation, and incompatible container\nmismatches.\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nYes. In compatible schema mode, scalar fields can now be read across\nsupported type changes using checked conversions instead of being\nskipped or defaulted. This does not introduce a new wire format; the\nconversion uses existing field type metadata and fails on unsupported,\nlossy, out-of-range, or invalid values.\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nN/A. This changes compatible schema-evolution behavior and is covered by\nruntime and xlang compatibility tests."
    },
    {
      "commit": "92e7a5cf0179ebc77351afe98074ded8e20481d4",
      "tree": "ffd5499ba5cf3bb70fd127051c968e656f13718b",
      "parents": [
        "7752c01dd47c1504f5434f6bdfd3cf5d4e9c18de"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Jun 04 19:30:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 17:00:29 2026 +0530"
      },
      "message": "feat(xlang): refine register by name api (#3739)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "7752c01dd47c1504f5434f6bdfd3cf5d4e9c18de",
      "tree": "d6df3bbe2943f665a06cd1b6bf577b7c8006cbcd",
      "parents": [
        "0ec7261e83833867f977b95da25c24d9c678be7e"
      ],
      "author": {
        "name": "MikuSoft",
        "email": "37649564+ruoruoniao@users.noreply.github.com",
        "time": "Thu Jun 04 17:24:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 14:54:21 2026 +0530"
      },
      "message": "fix(c++): std::unordered_map cannot be used in struct. (#3727) (#3728)\n\n## Why?\n\nCannot compile when there is a std::unordered_map in struct.\n\n## What does this PR do?\n\nFix that .\n\n## Related issues\n\n\n\nIssue #3727 .\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "0ec7261e83833867f977b95da25c24d9c678be7e",
      "tree": "757d4efb47edd26591c7494a0d7c3fd3563177ec",
      "parents": [
        "e637cf726c23e4f0c38f912bffb52317b2c72c9f"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Jun 04 15:49:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 13:19:08 2026 +0530"
      },
      "message": "refactor(rust): refactor sync send type (#3737)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n#3732 \n#3736\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "e637cf726c23e4f0c38f912bffb52317b2c72c9f",
      "tree": "f36617a5e0c3446d37eadef24c5f446afec0b0ee",
      "parents": [
        "a95a12691a58fead31dcf9017317e3026fe53718"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Jun 04 06:23:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 06:23:01 2026 +0800"
      },
      "message": "feat(rust): support thread safe `Arc\u003cdyn Any + Send + Sync\u003e` type (#3736)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\nCloses #3732\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "a95a12691a58fead31dcf9017317e3026fe53718",
      "tree": "3c12a19c417530d438b620a8fee37938814072c1",
      "parents": [
        "075421f6030b137655276e3f56c061462acf54f7"
      ],
      "author": {
        "name": "Sebastian Mandrean",
        "email": "sebastian.mandrean@gmail.com",
        "time": "Thu Jun 04 00:22:03 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 04 06:22:03 2026 +0800"
      },
      "message": "fix(java): ignore non-Scala/Lombok-style default helper methods (#3733)\n\n## Why?\n\nWhen Scala is present on the runtime classpath, Java compatible\nserializers enable Scala default-value support globally. Plain Java\nclasses generated with Lombok `@Builder.Default` can contain private\nhelper methods named like `$default$imageRelations()`, which previously\nmatched the broad Scala default-method scan and caused warning noise\nduring deserialization.\n\n## What does this PR do?\n\n- Restricts Scala default-value method detection to known Scala\nconstructor/apply helper prefixes with numeric parameter suffixes.\n- Ignores non-Scala/Lombok-style `$default$` helper names and\nout-of-range parameter indexes without invoking them.\n- Keeps Scala case-class and regular-class constructor defaults working,\nincluding nested/default-value regression coverage.\n- Adds Java fixtures and Scala serializer tests covering Lombok-like\nhelper methods.\n\n## Related issues\n\nCloses #3720\n\n## AI Contribution Checklist\n\n- [ ] Substantial AI assistance was used in this PR: `yes`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n## Does this PR introduce any user-facing change?\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nN/A. This is a targeted default-method filtering fix and does not change\nserialization format or hot-path serialization logic.\n\n## Validation\n\n- `mvn -T16 -pl fory-core -am install -DskipTests\n-Dmaven.javadoc.skip\u003dtrue -Dmaven.source.skip\u003dtrue`\n- `mvn -pl fory-core\n-Dtest\u003dorg.apache.fory.platform.AndroidSupportStaticCheckTest#testScalaDefaultValuesDoNotUseTrustedLookupOnAndroid\ntest`\n- `sbt \"+testOnly org.apache.fory.util.ScalaDefaultValueUtilsTest\norg.apache.fory.serializer.scala.ScalaDefaultValueTest\"`\n- `sbt +test`\n- `mvn -T16 spotless:check checkstyle:check`\n\nCo-authored-by: Shawn Yang \u003cshawn.ck.yang@gmail.com\u003e"
    },
    {
      "commit": "075421f6030b137655276e3f56c061462acf54f7",
      "tree": "518627856b8572b829ef3315cc7209f457616eed",
      "parents": [
        "33b0d6e8b73d1769d98824195b9155043266f3fe"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Jun 03 16:14:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 03 13:44:01 2026 +0530"
      },
      "message": "feat(java): remove sun.misc.Unsafe for jdk25+ (#3702)\n\n## Why?\n\nJDK25+ removes the remaining viable `sun.misc.Unsafe` paths Fory used\nfor Java object creation, field access, string internals, and memory\noperations. This PR makes the Java runtime continue to support modern\nJDKs while preserving the existing JDK8-24, Android, GraalVM,\nnative-mode, and xlang behavior where applicable.\n\n## What does this PR do?\n\n- Builds `fory-core` as a multi-release jar with JDK25-specific classes\nand module metadata, while keeping the root implementation for JDK8-24.\n- Replaces the JDK25+ runtime paths for field access, object\ninstantiation, string internals, memory access, and generated\nserializers with trusted lookup, VarHandle, ReflectionFactory, and other\nnon-Unsafe owners.\n- Updates Java serializers, codegen, copy paths, collection/map\nserializers, object stream handling, and default-value support to use\nthe new accessor and instantiator ownership model.\n- Extends CI and integration coverage for JDK25/JDK26, JPMS zero-Unsafe\nruns, multi-release jar verification, GraalVM packaging, and cross-JDK\ncompatibility expectations.\n- Updates Java, Kotlin, Scala, and top-level docs for JDK25+ setup,\nincluding the required `java.base/java.lang.invoke` open for classpath\nand module-path users.\n- Adds Java25 benchmark modules and MR-JAR benchmark verification for\ndirect memory and direct-to-heap copy paths.\n\n## Related issues\n\nCloses #3729\nCloses #2090\nCloses #2606\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nYes. Java users on JDK25+ must open `java.base/java.lang.invoke` to\nFory:\n\n- Classpath: `--add-opens\u003djava.base/java.lang.invoke\u003dALL-UNNAMED`\n- Module path:\n`--add-opens\u003djava.base/java.lang.invoke\u003dorg.apache.fory.core`\n\nNo binary protocol compatibility change is intended.\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nThis PR adds Java25 benchmark coverage under `benchmarks/java25` and a\nbenchmark MR-JAR check. No benchmark result table is included here."
    },
    {
      "commit": "33b0d6e8b73d1769d98824195b9155043266f3fe",
      "tree": "7da9ce98d3c4edf2ac3723e37ded146436bee4ce",
      "parents": [
        "810943c24db7866bf4e57960c2fd8a3c1e4329fe"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Tue Jun 02 18:27:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 15:57:39 2026 +0530"
      },
      "message": "fix(compiler): handle nested container ref pointer options in Rust compiler correctly (#3731)\n\n## Why?\n\nThe Rust compiler should correctly apply ref pointer options for\n**nested** container element/value references.\n\n## What does this PR do?\n\n- Handle nested container ref pointer options correctly.\n- Add corresponding testcase.\n\n## Related issues\n\nFixes https://github.com/apache/fory/issues/3730.\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: no\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nN/A.\n\n## Benchmark\n\nN/A."
    },
    {
      "commit": "810943c24db7866bf4e57960c2fd8a3c1e4329fe",
      "tree": "4dcb39b4aac4c5feb6a40571c9fe516f743905bd",
      "parents": [
        "d34c5aadd165014999cb0161eb384a9166bc459a"
      ],
      "author": {
        "name": "MNTMDEV",
        "email": "44183946+MNTMDEV@users.noreply.github.com",
        "time": "Mon Jun 01 23:55:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 21:25:58 2026 +0530"
      },
      "message": "fix(java): fix deflater memory leak (#3726)\n\n## Why?\n\nA large number of `Fory` instances on `COMPATIBLE` mode or large amount\nand size object meta result in native memory leak.\n\nNative memory allocated by `libzip.so` won\u0027t be cleaned unitl next GC,\nmaking many `64M` memory chunks staying in memory space.\n\n\n\n## What does this PR do?\n\nExplicitly close native memory allocated by libzip.so.\n\nDecompress method is fixed in #3472. Only compress method should be\nfixed.\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR:  `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "d34c5aadd165014999cb0161eb384a9166bc459a",
      "tree": "7781912d6b7c63ef1d556ecab721c6b3cf43076f",
      "parents": [
        "7e52de738bf8b6d66f31f74f94dfb3263f642806"
      ],
      "author": {
        "name": "Steven Schlansker",
        "email": "stevenschlansker@apache.org",
        "time": "Sun May 31 19:36:50 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 08:06:50 2026 +0530"
      },
      "message": "perf(format): cache compact row layout per nested slot (#3717)\n\n## Why?\n\nAvoid redundant re-computation of compact codec offsets layout, saving\ncpu and memory allocations\n\nand\n\nfix(format): honor input offset when copying inline-struct bytes\n\n## What does this PR do?\n\n    perf(format): cache compact row layout per nested slot\n    \n    Hoist offsets, widths, and nullability into CompactRowLayout, built\n    once per encoder. getStruct does no per-call lookup; inline-struct\n    reads go directly to the parent buffer; the writer reads schema-\n    derived state from the cache; compact rows skip the unused extData[]\n    allocation. For List\u003cStruct\u003e fields the parent layout also carries\n    the element layout so getArray(i) does not rebuild it.\n    \n    Fix a latent inline-width bug in CompactBinaryRowWriter that was\n    masked by the prior slicing getStruct: writeUnaligned and\n    writeAlignedBytes dropped the input offset, so re-emitting a child\n    row via BinaryWriter.write(int, BinaryRow) copied the wrong bytes.\n\n## Related issues\n\n## AI Contribution Checklist\n\n- [x] Substantial AI assistance was used in this PR: `yes` / `no`\n\nAI Usage Disclosure\n- substantial_ai_assistance: yes\n- scope: all\n- affected_files_or_subsystems: Java row format\n- ai_review: :heavy_check_mark: \n- ai_review_artifacts: \n\n\u003e One commit, perf(format): cache compact row layout per nested slot.\nCaches fixedOffsets, per-field fixedWidths, allFieldsNotNullable, and\nbitmapWidthInBytes in a new CompactRowLayout value, computed once per\narray (element type is fixed) or memoized per parent extData slot.\n\u003e The getStruct hot path previously rebuilt fixedOffsets and re-walked\nallNotNullable on every call.\n\u003e Recommendation: Approve. Numbers in the commit message match a real\nbottleneck (the int[] + allNotNullable walk per nested decode), the\nimplementation preserves the existing wire behavior and ownership model,\nno public API regression, all format tests pass, and the new caching\nfollows the existing extData-slot pattern rather than inventing a new\nmechanism.\n\u003e  — Reviewed by Claude (Opus 4.7), 2026-05-29\n\n\u003e Skill used: I ran this through the fory-code-review skill, which\ndelegated the diff inspection to a read-only review subagent loaded with\nthe Fory review checklist, the lesson-derived red flags, and the Java\nruntime rules.\n\u003e Verdict\n\u003e No blockers. Recommend submission. Both commits are coherent and\ntested:\n\u003e - d5cbdc2b is a real, narrow bugfix: the three put/copyFrom(..., 0,\nnumBytes) sites in CompactBinaryRowWriter were copying from the start of\nthe source buffer instead of from baseOffset. After schema sorting,\nnested inline structs land at non-zero offsets, so this corrupted writes\nfor any non-trivial schema.\nCompactCodecTest.testCopyInlineStructViaWriter exercises that exact\nfailure mode. Wire format unchanged — only the source byte range was\nwrong.\n\u003e - 2b1825d7 precomputes a CompactRowLayout once per writer instead of\nrecomputing field offsets and nested layouts on every write. Cache is\nper-CompactBinaryRowWriter instance, no map, no growth, no thread-safety\nsurface (writers are already not thread-safe). CompactRowLayoutTest pins\nidentity via assertSame at multiple nesting levels and covers the\nallFieldsNotNullable bitmap-skip path. CompactBinaryRow.getStruct also\ndrops a per-call buffer.slice() allocation by pointing to the parent\nbuffer at the right offset instead.\n\n\n- human_verification:  :heavy_check_mark: \n- performance_verification: :heavy_check_mark: \n- provenance_license_confirmation: :heavy_check_mark: \n\n## Does this PR introduce any user-facing change?\n\nCompact codec user enjoys more CPU and memory on business logic without\neven realizing it.\nNo public API or wire changes.\n\n## Benchmark\n```\n    RowFormatAllocationProbe bytes/op vs apache/main, compact mode,\n    median of five:\n      root    100208 -\u003e 74305 (-25.9%)\n      array     9032 -\u003e  6629 (-26.6%)\n      matrix   72005 -\u003e 52760 (-26.7%)\n      map       7744 -\u003e  6401 (-17.3%)\n      encode   55423 -\u003e 41762 (-24.6%)\n    Standard mode unchanged within noise.\n```\n\n---------\n\nCo-authored-by: Claude (on behalf of Steven Schlansker) \u003cstevenschlansker+claude@apache.org\u003e"
    },
    {
      "commit": "7e52de738bf8b6d66f31f74f94dfb3263f642806",
      "tree": "3bf63d13d1da4925e3e3fad01f355d1f713c6883",
      "parents": [
        "c6a228b5a77dab5ee15fc9b1ce62495bd5adf667"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sun May 31 22:57:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 31 20:27:31 2026 +0530"
      },
      "message": "chore: bump versions after 1.1.0 release (#3724)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "c6a228b5a77dab5ee15fc9b1ce62495bd5adf667",
      "tree": "b53517aa185f71f7bf4201f3d24b88104fbe199c",
      "parents": [
        "598e82f5fac0fdfb3871659a5646e0be82f660cc"
      ],
      "author": {
        "name": "Steven Schlansker",
        "email": "stevenschlansker@apache.org",
        "time": "Sun May 31 05:13:09 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 31 17:43:09 2026 +0530"
      },
      "message": "refactor(format): inline custom-codec dispatch in row codecs (#3716)\n\n## Why?\n\nSimplify codegen and runtime codepath, net -1 frame stack depth, set\nstage for future feature work\n\n## What does this PR do?\n\nReplace CustomTypeEncoderRegistry$Gen\u003cN\u003e, a per-registration\nJanino-generated class whose static encode/decode/newCollection methods\nthe row codec called into, with one static final CustomCodec /\nCustomCollectionFactory field per registered codec on the row codec\nclass itself. Fields are initialized at class load from\nCustomTypeEncoderRegistry; encode/decode invoke the cached instance.\nPer-call cost is one indirect call; the Janino compile-and-define cycle\non first registration is gone.\n\nCustomTypeEncoderRegistry collapses to two ConcurrentHashMap lookups\nplus a singleton handler view. findCodec / findCollectionFactory are\npublic so a row codec generated under a child classloader can reach\nthem.\n\nKey the collection-factory codegen cache on (container, element) rather\nthan container alone, so two SortedSet-typed sibling fields with\ndifferent element types dispatch to their own factories.\n\n## AI Contribution Checklist\n\n- [x] Substantial AI assistance was used in this PR: `yes` / `no`\n\nAI Usage Disclosure\n- substantial_ai_assistance: yes\n- scope: all\n- affected_files_or_subsystems: Java row format\n- ai_review: :+1: \n- ai_review_artifacts:\n\n\u003e Nothing blocking. Net is a clear win: deletes ~165 lines of\nJanino-generated dispatch infrastructure, removes a class-generation\nstep from cold-start registration, and folds in a real bug fix for\nsibling collection fields with a focused test.\n\u003e LGTM with no requested changes. Cleanly deletes the per-registration\nJanino dispatch class in favor of static-final field caches on the row\ncodec itself, and fixes the sibling-SortedSet cache-keying bug with a\ntargeted test. fory-format suite is green (108/108, 4 pre-existing\nskips).\n\u003e  — Claude\n\n\u003e Overall\n\u003e Sound refactor and a meaningful simplification — a Janino\ncompile/define cycle per registration is removed in favor of one\nmonomorphic, JIT-friendly call site per codec field. The (beanType,\nfieldType) key matches at both codegen-time discovery and runtime\nlookup, and concurrency moves from coarse synchronized to\nConcurrentHashMap cleanly. Residual risks are minor: small\ngenerated-class bloat if duplicate TypeRefs ever reach customEncode.\n\u003e I followed the Apache Fory AI review policy: review was performed by a\nread-only subagent (no edits, commits, or pushes), with findings ordered\nby severity, citing exact file/line locations, and including the\nvalidation commands the author should run before merging.\n\u003e  — Claude (Opus 4.7)\n\n- human_verification: :heavy_check_mark: \n- provenance_license_confirmation: :heavy_check_mark: \n\n## Does this PR introduce any user-facing change?\n\nInternal API change only\n\n## Benchmark\n\n\u003e - JMH numbers across both suites, n\u003d15 per benchmark on each side:\nevery measurement is within error bars of equal. No regression.\n\u003e - Inlining graphs confirm: both versions fully inline the user\u0027s\nencode/decode body into the generated row codec, both call sites fully\n\u003e monomorphic (5120/5120 type profile). Baseline has one extra frame\n(Gen1::encode trampoline); HEAD goes straight from toRow to\n\u003e WrappedCodec::encode. Both collapse to the same machine code in steady\nstate.\n\n\u003e Verdict: no performance regression, and the inlining shape is what the\nstatic-final + monomorphic-INVOKEINTERFACE model predicts. The \"static →\nvirtual\" concern doesn\u0027t materialize because the old static call was\nitself a thin static trampoline around an identical interface call.\n\nCo-authored-by: Claude (on behalf of Steven Schlansker) \u003cstevenschlansker+claude@apache.org\u003e"
    },
    {
      "commit": "598e82f5fac0fdfb3871659a5646e0be82f660cc",
      "tree": "1a159a56f84eb78fc2857075d61a3eb2d37b5fc0",
      "parents": [
        "a5d1c7701e1719cfcaf0a21ec00ff398cf1799d2"
      ],
      "author": {
        "name": "Steven Schlansker",
        "email": "stevenschlansker@apache.org",
        "time": "Sun May 31 04:21:18 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 31 19:21:18 2026 +0800"
      },
      "message": "fix(format): pass row body size, not full payload size, to BinaryRow.pointTo (#3715)\n\n## Why?\n\nMinor fixes\n- Latent bug in BinaryRowEncoder exposes 8 bytes beyond end of intended\nbuffer to BinaryRow\n- Add reminder documentation for byte[] encoder forms why embedded size\nis ignored. Tripped up both me and Claude\n- Clean up docstring. Identified during AI review of forthcoming feature\nbranches\n\n## AI Contribution Checklist\n\n- [x] Substantial AI assistance was used in this PR: `yes` / `no`\n\nAI Usage Disclosure\n- substantial_ai_assistance: yes\n- scope: all\n- affected_files_or_subsystems: Java row format\n- ai_review: :heavy_check_mark: \n- ai_review_artifacts: \n\n\u003e ● Done. Three commits amended on fory-docs-encoders-cleanup: tightened\ncomments, tightened test, tightened commit messages, no functional\nchanges since the previous fix was already correct. Force-push when\nyou\u0027re ready.\n\n- human_verification: :heavy_check_mark: \n- performance_verification: N/A\n- provenance_license_confirmation: :heavy_check_mark: \n\n## Does this PR introduce any user-facing change?\n\nNo\n\n---------\n\nCo-authored-by: Claude (on behalf of Steven Schlansker) \u003cstevenschlansker+claude@apache.org\u003e"
    },
    {
      "commit": "a5d1c7701e1719cfcaf0a21ec00ff398cf1799d2",
      "tree": "3cbad966a6bb493ec9550f92e1829a8d43c35bb0",
      "parents": [
        "297c34506ab7c6f57dee875f090002a38ce7478e"
      ],
      "author": {
        "name": "Steven Schlansker",
        "email": "stevenschlansker@apache.org",
        "time": "Sun May 31 01:11:16 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 31 16:11:16 2026 +0800"
      },
      "message": "fix(benchmarks): uses outdated google-java-format, upgrade spotless (#3722)\n\n## Why?\n\nStyle format blocked my other PR, tried to run `bash ci/format.sh\n--java` but it fails due to using JDK 26\n\n## What does this PR do?\n\nBring benchmarks project spotless google-java-format in line with parent\npom\n\n## AI Contribution Checklist\n\n\n- [ ] Substantial AI assistance was used in this PR: No\n\n## Does this PR introduce any user-facing change?\n\nNo"
    },
    {
      "commit": "297c34506ab7c6f57dee875f090002a38ce7478e",
      "tree": "909e2951e1994f74dff9c334c102b8da1c19f9ac",
      "parents": [
        "ddf06621410674532440a87b278e726ad3bdc492"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sun May 31 02:43:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 31 02:43:48 2026 +0800"
      },
      "message": "feat(java): add java9/16 module-info support (#3721)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "ddf06621410674532440a87b278e726ad3bdc492",
      "tree": "21d806ddb62e782c170ed6b19e1be81c2a9b58d4",
      "parents": [
        "e066b622edc267d2a709f109bc7798f13f25e8aa"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Sat May 30 17:50:46 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 30 20:20:46 2026 +0800"
      },
      "message": "fix(go): return nil serializer on getTypeInfo err (#3719)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\nCloses #3718 \n\n## AI Contribution Checklist\nIssue was flagged by claude\n```\nConfirmed bug\n\n1. type_resolver.go:1018 — serializer-creation error is silently swallowed\n\nConfidence: high (confirmed by go vet and by reading the code). Severity: medium–high.\n\nserializer, err :\u003d r.createSerializer(value.Type(), false)\nif err !\u003d nil {\n    fmt.Errorf(\"failed to create serializer: %w\", err)   // \u003c-- result discarded\n}\ninfo.Serializer \u003d serializer        // serializer is nil here on error\n// ...\nr.typePointerCache[typePtr] \u003d info  // nil serializer gets cached\nreturn info, nil                    // returns nil error despite failure\n\nThe error is built with fmt.Errorf but never returned or assigned. On the lazy-init path, when createSerializer fails, serializer is nil, that nil is stored into info.Serializer, cached, and the function returns (info, nil) — pretending success. A later serialize/deserialize then uses a nil serializer → wrong behavior or a nil-deref panic, far from the real cause.\n\nFix: return nil, fmt.Errorf(\"failed to create serializer: %w\", err)\n\ngo vet flags this directly:\ntype_resolver.go:1018:5: result of fmt.Errorf call not used\n```\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "e066b622edc267d2a709f109bc7798f13f25e8aa",
      "tree": "380ca2392142a55aac7ae00670508c2a21a786ed",
      "parents": [
        "2900e05a20a29f6ff2f0b27004da02c70a26635c"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu May 28 14:49:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 12:19:25 2026 +0530"
      },
      "message": "refactor(compiler): rename generated schema owners to modules (#3713)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "2900e05a20a29f6ff2f0b27004da02c70a26635c",
      "tree": "676a4daba60b385bd5e0375d581d5b6ed8b21dfe",
      "parents": [
        "a12e776951a263f3596a5cf6e4057ae33bc220b5"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu May 28 13:22:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 13:22:38 2026 +0800"
      },
      "message": "feat(xlang): support unknown union case in union type (#3711)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "a12e776951a263f3596a5cf6e4057ae33bc220b5",
      "tree": "6e6946c720b55af1ec9ca314efdfbeeb06834fc1",
      "parents": [
        "98e20c397770e7551be6d239c2343b440312db2d"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 27 16:53:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 14:23:59 2026 +0530"
      },
      "message": "feat(c#): use sealed record for c# union (#3710)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "98e20c397770e7551be6d239c2343b440312db2d",
      "tree": "a23bc60a3b36ae376eb1b8c16a5c562125bd0c9d",
      "parents": [
        "0048399d2b8658eb479488b7c2d1638785b03cab"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 27 15:22:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 12:52:40 2026 +0530"
      },
      "message": "refactor(csharp): split Fory object attributes (#3709)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "0048399d2b8658eb479488b7c2d1638785b03cab",
      "tree": "053afb2c7008175a44e310bbf6cfb1a5934e7ba8",
      "parents": [
        "648c5733e31ed50f4c358b710e95074225766d12"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 27 08:34:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 08:34:05 2026 +0800"
      },
      "message": "fix(python): make policy validators validation-only (#3708)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "648c5733e31ed50f4c358b710e95074225766d12",
      "tree": "b9c44a2a91b8f1271b3c02403d303f0a1fe6be57",
      "parents": [
        "c2b4316a49643392e76a30eebbccb409a06b15a3"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 27 08:33:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 27 08:33:19 2026 +0800"
      },
      "message": "chore: update java checks docs (#3707)\n\n\u003c!--\n**Thanks for contributing to Apache Fory™.**\n\n**If this is your first time opening a PR on fory, you can refer to\n[CONTRIBUTING.md](https://github.com/apache/fory/blob/main/CONTRIBUTING.md).**\n\nContribution Checklist\n\n- The **Apache Fory™** community has requirements on the naming of pr\ntitles. You can also find instructions in\n[CONTRIBUTING.md](https://github.com/apache/fory/blob/main/CONTRIBUTING.md).\n\n- Apache Fory™ has a strong focus on performance. If the PR you submit\nwill have an impact on performance, please benchmark it first and\nprovide the benchmark result here.\n--\u003e\n\n## Why?\n\n\u003c!-- Describe the purpose of this PR. --\u003e\n\n## What does this PR do?\n\n\u003c!-- Describe the details of this PR. --\u003e\n\n## Related issues\n\n\u003c!--\nIs there any related issue? If this PR closes them you say say\nfix/closes:\n\n- #xxxx0\n- #xxxx1\n- Fixes #xxxx2\n--\u003e\n\n## AI Contribution Checklist\n\n\u003c!-- Full requirements and disclosure template:\n\nhttps://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs\n--\u003e\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\u003c!-- If substantial AI assistance \u003d `yes`, paste the completed checklist\nand disclosure block here, including the final ai_review summary and\nscreenshot evidence from both fresh reviewers on the current PR diff or\ncurrent HEAD after the latest code changes. --\u003e\n\n## Does this PR introduce any user-facing change?\n\n\u003c!--\nIf any user-facing interface changes, please [open an\nissue](https://github.com/apache/fory/issues/new/choose) describing the\nneed to do so and update the document if necessary.\n\nDelete section if not applicable.\n--\u003e\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\n\u003c!--\nWhen the PR has an impact on performance (if you don\u0027t know whether the\nPR will have an impact on performance, you can submit the PR first, and\nif it will have impact on performance, the code reviewer will explain\nit), be sure to attach a benchmark data here.\n\nDelete section if not applicable.\n--\u003e"
    },
    {
      "commit": "c2b4316a49643392e76a30eebbccb409a06b15a3",
      "tree": "91e831efafffe2242ec9f4da8d26978c6867e1c4",
      "parents": [
        "97b9a72c8619fd97dbb8bb6cebcca15c762c461c"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue May 26 19:39:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 26 17:09:40 2026 +0530"
      },
      "message": "fix(java): guard replace-resolve class reads (#3706)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "97b9a72c8619fd97dbb8bb6cebcca15c762c461c",
      "tree": "6817a8b428a097b6fbee795dcdfca67e0f0d2841",
      "parents": [
        "af4073e698ed914f9cc43c3e7879c474f36fce84"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon May 25 21:00:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 18:30:14 2026 +0530"
      },
      "message": "docs: update readme to add android support (#3705)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "af4073e698ed914f9cc43c3e7879c474f36fce84",
      "tree": "b4927fcee450a6904b7498c07d4bf5aca2bd9fae",
      "parents": [
        "cf4e2acb4cb293650f5589cbb133d2a2aacd79ca"
      ],
      "author": {
        "name": "Arpit Jain",
        "email": "3242828+arpitjain099@users.noreply.github.com",
        "time": "Mon May 25 12:33:56 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 09:03:56 2026 +0530"
      },
      "message": "ci: declare workflow-level `contents: read` on ci and lint (#3704)\n\nBoth workflows run pure CI / lint checks; no GitHub API writes from the\nworkflows. Workflow-level `contents: read` is sufficient as the cap for\nthe default `GITHUB_TOKEN`.\n\nSame post-CVE-2025-30066 (`tj-actions/changed-files`) hardening pattern.\nYAML validated locally.\n\nSigned-off-by: Arpit Jain \u003carpitjain099@gmail.com\u003e"
    },
    {
      "commit": "cf4e2acb4cb293650f5589cbb133d2a2aacd79ca",
      "tree": "08873b1b3c80c0a2b22de5ebbb809b4fb85a60e9",
      "parents": [
        "1722034db3ad87bf34de1725e0a6e16e2d81916f"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon May 25 11:29:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 08:59:54 2026 +0530"
      },
      "message": "chore(js): upgrade test dependencies (#3703)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "1722034db3ad87bf34de1725e0a6e16e2d81916f",
      "tree": "50254b7e0c5af06ddfb093c77b54b782a87d12b8",
      "parents": [
        "f0dcba471ccad50502e15d533f110dc33f6bf0f0"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat May 23 21:02:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 23 21:02:16 2026 +0800"
      },
      "message": "docs: fix xlang type mapping MDX (#3701)\n\n## What\n\n- Wrap generic collection/type spellings in\n`docs/specification/xlang_type_mapping.md` as inline code.\n- Prevent Docusaurus MDX from parsing type mappings such as\n`Dictionary\u003cK,V\u003e` as JSX.\n\n## Verification\n\n- `python3 ci/validate_fory_site_sync.py\n/Users/shawnyang/Desktop/dev/fory \u003cfresh fory-site checkout\u003e`\n- `npx --yes prettier --check docs/specification/xlang_type_mapping.md`\n- `npx --yes markdownlint-cli@0.25.0\ndocs/specification/xlang_type_mapping.md`\n- `git diff --check`\n\nFixes the Fory site build failure from\nhttps://github.com/apache/fory/actions/runs/26328640694/job/77510766913."
    },
    {
      "commit": "f0dcba471ccad50502e15d533f110dc33f6bf0f0",
      "tree": "6db1cedf9d52b57ebe37f00f4b8ec7e0025d978e",
      "parents": [
        "f156374782aa4d662654811fa1fc0ce37bb16997"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat May 23 16:55:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 23 16:55:46 2026 +0800"
      },
      "message": "docs(xlang): update language support docs (#3700)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "f156374782aa4d662654811fa1fc0ce37bb16997",
      "tree": "af5f81c9c8ef352f61ed3a175b1ff30a48dd8774",
      "parents": [
        "b3fda60cd437c86e81ac90db4d231de2639d69dd"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat May 23 14:04:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 23 14:04:58 2026 +0800"
      },
      "message": "fix(cpp): repair CMake tests and examples (#3699)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "b3fda60cd437c86e81ac90db4d231de2639d69dd",
      "tree": "85877b446da0d3149accf3ad8f2ab21193256eb8",
      "parents": [
        "8b4439a215fa7524df9f0583fef9bd2738c84211"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu May 21 14:27:48 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 14:27:48 2026 +0530"
      },
      "message": "chore(deps): bump io.grpc:grpc-netty-shaded from 1.62.2 to 1.75.0 in /integration_tests/grpc_tests/java (#3697)\n\nBumps [io.grpc:grpc-netty-shaded](https://github.com/grpc/grpc-java)\nfrom 1.62.2 to 1.75.0.\n\u003cdetails\u003e\n\u003csummary\u003eRelease notes\u003c/summary\u003e\n\u003cp\u003e\u003cem\u003eSourced from \u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/releases\"\u003eio.grpc:grpc-netty-shaded\u0027s\nreleases\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cblockquote\u003e\n\u003ch2\u003ev1.75.0\u003c/h2\u003e\n\u003ch3\u003eBehavior Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ebinder: Introduce server pre-authorization (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12127\"\u003e#12127\u003c/a\u003e).\ngrpc-binder clients authorize servers by checking the UID of the sender\nof the SETUP_TRANSPORT Binder transaction against some SecurityPolicy.\nBut merely binding to an unauthorized server to learn its UID can enable\n\u0026quot;keep-alive\u0026quot; and \u0026quot;background activity launch\u0026quot; abuse,\neven if security policy ultimately causes the grpc connection to fail.\nPre-authorization mitigates this kind of abuse by resolving addresses\nand authorizing a candidate server Application\u0027s UID before binding to\nit. Pre-auth is especially important when the server\u0027s address is not\nfixed in advance but discovered by PackageManager lookup.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ecore: \u003ccode\u003egrpc-timeout\u003c/code\u003e should always be positive (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12201\"\u003e#12201\u003c/a\u003e)\n(6dfa03c51). There is a local race between when the deadline is checked\nbefore sending the RPC and when the timeout is calculated to put\non-the-wire. The code replaced negative timeouts with 0 nanoseconds.\ngRPC’s PROTOCOL-HTTP2 spec states that timeouts should be positive, so\nnow non-positive values are replaced with 1 nanosecond\u003c/li\u003e\n\u003cli\u003ecore: Improved DEADLINE_EXCEEDED message for delayed calls\n(6ff8ecac0). Delayed calls are the first calls on a Channel before name\nresolution has resolved addresses. Previously you could see confusing\nerrors saying the deadline “will be exceeded in” X time. The message\ntense was simply wrong, and now will be correct: deadline “was exceeded\nafter” X time.\u003c/li\u003e\n\u003cli\u003exds: PriorityLB now only uses the failOverTimer to start additional\npriorities, not fail RPCs (c4256add4). You should no longer see\n“Connection timeout for priority” errors.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eImprovements\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003enetty: Count sent RST_STREAMs against\n\u003ccode\u003eNettyServerBuilder.maxRstFramesPerWindow()\u003c/code\u003e limit (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12288\"\u003e#12288\u003c/a\u003e).\nThis extends the Rapid Reset tool to also cover MadeYouReset. the reset\nstream count will cause a 420 \u0026quot;Enhance your calm response\u0026quot; to\nbe sent. This depends on Netty 4.1.124 for a bug fix to actually call\nthe encoder by the frame writer.\u003c/li\u003e\n\u003cli\u003exds: Convert CdsLb to \u003ccode\u003eXdsDepManager\u003c/code\u003e (297ab05ef). This\nis part of gRFC A74 to have atomic xDS config updates. This is an\ninternal change, but does change the error description seen in certain\ncases, especially DEADLINE_EXCEEDED on a brand-new channel.\u003c/li\u003e\n\u003cli\u003ecensus: APIs for stats and tracing (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12050\"\u003e#12050\u003c/a\u003e)\n(919370172). Client channel and server builders with interceptors and\nfactories respectively for stats and tracing.\u003c/li\u003e\n\u003cli\u003estub: simplify \u003ccode\u003eBlockingClientCall\u003c/code\u003e infinite blocking (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12217\"\u003e#12217\u003c/a\u003e)\n(ba0a7329d). Move deadline computation into overloads with finite\ntimeouts. Blocking calls without timeouts now do not have to read the\nclock.\u003c/li\u003e\n\u003cli\u003exds: Do RLS fallback policy eagar start (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12211\"\u003e#12211\u003c/a\u003e)\n(42e1829b3). In gRPC-Java, the xDS clusters were lazily subscribed,\nwhich meant the fallback target which is returned in the RLS config\nwasn’t subscribed until a RPC actually falls back to it. The delayed\nresource subscription process in gRPC Java made it more susceptible to\nthe effects of the INITIAL_RESOURCE_FETCH_TIMEOUT compared to other\nprogramming languages. It also had impact beyond the RLS cache\nexpiration case, for example, when the first time the client initialized\nthe channel, we couldn\u0027t fallback when the intended target times out,\nbecause of the lazy subscription. This change starts the fallback LB\npolicy for the default target at the start of RLS policy instead of only\nwhen falling back to the default target, which fixes the above mentioned\nproblems.\u003c/li\u003e\n\u003cli\u003exds: Aggregate cluster fixes (A75) (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12186\"\u003e#12186\u003c/a\u003e)\n(7e982e48a). The earlier implementation of aggregate clusters\nconcatenated the priorities from the underlying clusters into a single\nlist, so that it could use a single LB policy defined at the aggregate\ncluster layer to choose a priority from that combined list. However, it\nturns out that aggregate clusters don\u0027t actually define the LB policy in\nthe aggregate cluster; instead, the aggregate cluster uses a special\ncluster-provided LB policy that first chooses the underlying cluster and\nthen delegates to the LB policy of the underlying cluster. This change\nimplements that.\u003c/li\u003e\n\u003cli\u003eapi: set size correctly for sets and maps in handling\n\u003ccode\u003eMetadata\u003c/code\u003e values to be exchanged during a call (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12229\"\u003e#12229\u003c/a\u003e)\n(80217275d)\u003c/li\u003e\n\u003cli\u003exds: xdsClient cache transient error for new watchers (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12291\"\u003e#12291\u003c/a\u003e).\nWhen a resource update is NACKed, cache the error and update new\nwatchers that get added with that error instead of making them\nhang.\u003c/li\u003e\n\u003cli\u003exds: Avoid PriorityLb re-enabling timer on duplicate CONNECTING (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12289\"\u003e#12289\u003c/a\u003e).\nIf a LB policy gives extraneous updates with state CONNECTING, then it\nwas possible to re-create \u003ccode\u003efailOverTimer\u003c/code\u003e which would then\nwait the 10 seconds for the child to finish CONNECTING. We only want to\ngive the child one opportunity after transitioning out of\nREADY/IDLE.\u003c/li\u003e\n\u003cli\u003exds: Use a different log name for \u003ccode\u003eXdsClientImpl\u003c/code\u003e and\n\u003ccode\u003eControlPlaneClient\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12287\"\u003e#12287\u003c/a\u003e).\n\u003ccode\u003eControlPlaneClient\u003c/code\u003e uses \u0026quot;xds-cp-client\u0026quot; now\ninstead of \u0026quot;xds-client\u0026quot; while logging.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDependencies Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eUpgrade to Netty 4.1.124.Final (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12286\"\u003e#12286\u003c/a\u003e).\nThis implicitly disables \u003ccode\u003eNettyAdaptiveCumulator\u003c/code\u003e (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/11284\"\u003e#11284\u003c/a\u003e),\nwhich can have a performance impact. We delayed upgrading Netty to give\ntime to rework the optimization, but we\u0027ve gone too long already without\nupgrading which causes problems for vulnerability tracking.\u003c/li\u003e\n\u003cli\u003ebazel: Use \u003ccode\u003ejar_jar\u003c/code\u003e to avoid xds deps (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12243\"\u003e#12243\u003c/a\u003e)\n(8f09b9689). The //xds and //xds:orca targets now use\n\u003ccode\u003ejar_jar\u003c/code\u003e to shade the protobuf generated code. This allows\nthem to use their own private copy of the protos and drop direct Bazel\ndependencies on cel-spec, grpc, rules_go, com_github_cncf_xds,\nenvoy_api, com_envoyproxy_protoc_gen_validate, and opencensus_proto.\nThis mirrors the shading of protobuf messages done for grpc-xds provided\non Maven Central and should simplify dependency management\u003c/li\u003e\n\u003cli\u003eProtobuf upgraded to 3.25.8\u003c/li\u003e\n\u003cli\u003eproto-google-common-protos upgraded to 2.59.2\u003c/li\u003e\n\u003cli\u003es2a-proto upgraded to 1.1.2\u003c/li\u003e\n\u003cli\u003egoogle-cloud-logging upgraded to 3.23.1 (used by\ngcp-observability)\u003c/li\u003e\n\u003cli\u003eOpenTelemetry upgraded to 1.52.0\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eDocumentation\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003eClarify requirements for creating a cross-user Channel. (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12181\"\u003e#12181\u003c/a\u003e).\nThe \u003ccode\u003e@SystemApi\u003c/code\u003e runtime visibility requirement isn\u0027t really\nnew. It has always been implicit in the required INTERACT_ACROSS_USERS\npermission, which can only be held by system apps in production. Now\ndeprecated \u003ccode\u003eBinderChannelBuilder#bindAsUser\u003c/code\u003e has always\nrequired SDK_INT \u0026gt;\u003d 30. This change just copies that requirement\nforward to its replacement APIs in \u003ccode\u003eAndroidComponentAddress\u003c/code\u003e\nand the TARGET_ANDROID_USER \u003ccode\u003eNameResolver.Args\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eapi: Add more Javadoc for \u003ccode\u003eNameResolver.Listener2\u003c/code\u003e\ninterface (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12220\"\u003e#12220\u003c/a\u003e)\n(d352540a0)\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eThanks to\u003c/h3\u003e\n\u003cp\u003e\u003ca href\u003d\"https://github.com/benjaminp\"\u003e\u003ccode\u003e@​benjaminp\u003c/code\u003e\u003c/a\u003e\n\u003ca href\u003d\"https://github.com/werkt\"\u003e\u003ccode\u003e@​werkt\u003c/code\u003e\u003c/a\u003e\n\u003ca href\u003d\"https://github.com/kilink\"\u003e\u003ccode\u003e@​kilink\u003c/code\u003e\u003c/a\u003e\n\u003ca href\u003d\"https://github.com/vimanikag\"\u003e\u003ccode\u003e@​vimanikag\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003ev1.74.0\u003c/h2\u003e\n\u003ch3\u003eBehavior Changes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003ecompiler: Default to \u003ccode\u003e@generated\u003domit\u003c/code\u003e (f8700a13a). This\nomits \u003ccode\u003ejavax.annotation.Generated\u003c/code\u003e from the generated code\nand makes the \u003ccode\u003eorg.apache.tomcat:annotations-api\u003c/code\u003e\ncompile-only dependency unnecessary (README and examples changes\nforthcoming; we delayed those changes until the release landed). You can\nuse the option \u003ccode\u003e@generated\u003djavax\u003c/code\u003e for the previous behavior,\nbut please also file an issue so we can develop alternatives\u003c/li\u003e\n\u003cli\u003ecompiler: generate blocking v2 unary calls that throw\nStatusException (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12126\"\u003e#12126\u003c/a\u003e)\n(a16d65591). Previously, the new blocking stub API was identical to the\nolder blocking stub for unary RPCs and used the unchecked\n\u003ccode\u003eStatusRuntimeException\u003c/code\u003e. However, feedback demonstrated it\nwas confusing to mix that with the checked \u003ccode\u003eStatusException\u003c/code\u003e\nin \u003ccode\u003eBlockingClientCall\u003c/code\u003e. Now the new blocking stub uses\nStatusException throughout. grpc-java continues to support the old\ngenerated code, but the version of protoc-gen-grpc-java will dictate\nwhich API you see. If you support multiple generated code versions, you\ncan use the older blocking v1 stub for unary RPCs\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003eBug Fixes\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003enetty: Fix a race that caused RPCs to hang on start when a GOAWAY\nwas received while the RPCs’ headers were being written to the OS\n(b04c673fd, 15c757398). This was a very old race, not a recent\nregression. All streams should now properly fail instead of hanging,\nalthough in some cases they may be transparently retried\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e... (truncated)\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003eCommits\u003c/summary\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/commit/3abc0e6e1f4981017b7117e47e1844a318a51f24\"\u003e\u003ccode\u003e3abc0e6\u003c/code\u003e\u003c/a\u003e\nBump version to 1.75.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/commit/cbfe6c1ccaf0d9480daa8faa3e37a117adb798ba\"\u003e\u003ccode\u003ecbfe6c1\u003c/code\u003e\u003c/a\u003e\nUpdate README etc to reference 1.75.0\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/commit/a0f3520ad0bf5186f84d48b7df6e2555e8b16da8\"\u003e\u003ccode\u003ea0f3520\u003c/code\u003e\u003c/a\u003e\nRevert \u0026quot;Release v1.75.0 (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12294\"\u003e#12294\u003c/a\u003e)\u0026quot;\n(\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12295\"\u003e#12295\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/commit/7ef13f40a6d9cdaccd0c064b5bd3745f9518781e\"\u003e\u003ccode\u003e7ef13f4\u003c/code\u003e\u003c/a\u003e\nRelease v1.75.0 (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12294\"\u003e#12294\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/commit/14fd8eff28d55fae4a791b256602d83a5fb9d848\"\u003e\u003ccode\u003e14fd8ef\u003c/code\u003e\u003c/a\u003e\nxds: xdsClient caches transient error for new watchers (v1.75.x\nbackport) (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/1\"\u003e#1\u003c/a\u003e...\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/commit/653d076c605a9066cf6ae484921058580df2437d\"\u003e\u003ccode\u003e653d076\u003c/code\u003e\u003c/a\u003e\nxds: Avoid PriorityLb re-enabling timer on duplicate CONNECTING (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12289\"\u003e#12289\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/commit/a5c2b1aa51608b1fff016a313d8ee65f92e8d23d\"\u003e\u003ccode\u003ea5c2b1a\u003c/code\u003e\u003c/a\u003e\nnetty: Count sent RST_STREAMs against limit (1.75.x backport) (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12288\"\u003e#12288\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/commit/0d3e8283a8105a7bbf1bf746d96cac1e363de2e3\"\u003e\u003ccode\u003e0d3e828\u003c/code\u003e\u003c/a\u003e\nxds: Use a different log name for XdsClientImpl and ControlPlaneClient\n(1.75....\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/commit/d750e9df576a63f8b0d55eefc730282dc60f99d1\"\u003e\u003ccode\u003ed750e9d\u003c/code\u003e\u003c/a\u003e\nUpgrade to Netty 4.1.124.Final (v1.75.x backport) (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12286\"\u003e#12286\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/commit/19c579e8a93cc0660df1523b5740eae9aa888a09\"\u003e\u003ccode\u003e19c579e\u003c/code\u003e\u003c/a\u003e\nBump versions of dependencies (\u003ca\nhref\u003d\"https://redirect.github.com/grpc/grpc-java/issues/12252\"\u003e#12252\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eAdditional commits viewable in \u003ca\nhref\u003d\"https://github.com/grpc/grpc-java/compare/v1.62.2...v1.75.0\"\u003ecompare\nview\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cbr /\u003e\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dio.grpc:grpc-netty-shaded\u0026package-manager\u003dmaven\u0026previous-version\u003d1.62.2\u0026new-version\u003d1.75.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don\u0027t\nalter it yourself. You can also trigger a rebase manually by commenting\n`@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n\u003cdetails\u003e\n\u003csummary\u003eDependabot commands and options\u003c/summary\u003e\n\u003cbr /\u003e\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits\nthat have been made to it\n- `@dependabot show \u003cdependency name\u003e ignore conditions` will show all\nof the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop\nDependabot creating any more for this major version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop\nDependabot creating any more for this minor version (unless you reopen\nthe PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop\nDependabot creating any more for this dependency (unless you reopen the\nPR or upgrade to it yourself)\nYou can disable automated security fix PRs for this repo from the\n[Security Alerts page](https://github.com/apache/fory/network/alerts).\n\n\u003c/details\u003e\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "8b4439a215fa7524df9f0583fef9bd2738c84211",
      "tree": "3bd24e0f505f9edd5d5e600dbe6cf090805d0c50",
      "parents": [
        "0f0295b328fa2919972f9127e2561ce621663d48"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu May 21 16:42:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 14:12:37 2026 +0530"
      },
      "message": "feat(compiler): add java/python gRPC support (#3692)\n\n## Why?\n\nAdd compiler-generated gRPC support for Fory IDL services so Java and\nPython users can build gRPC clients and servers directly from FDL,\nFlatBuffers IDL, and Protobuf service definitions.\n\nThis also covers the service-related gaps tracked by #3266, #3272, and\n#3273.\n\n## What does this PR do?\n\n- Generates Java grpc-java service classes, method descriptors,\nasync/blocking/future stubs, server bindings, and Fory-backed\nrequest/response marshalling.\n- Generates Python grpcio companion modules with servicer base classes,\nregistration helpers, and unary, server-streaming, client-streaming, and\nbidirectional-streaming handlers.\n- Preserves source package metadata during import resolution so service\nrequest and response types can be resolved across imported schemas.\n- Adds validation and codegen tests for service generation, naming\ncollisions, streaming RPCs, imports, Java package options, and Protobuf\nservice translation.\n- Adds Java/Python gRPC IDL interop fixtures and CI coverage through\n`integration_tests/idl_tests/run_grpc_tests.sh`.\n- Updates compiler documentation for service generation and the new\n`--grpc` integration test generation path.\n\n## Related issues\n\n#3266 \nCloses #3272 \nCloses #3273  \n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "0f0295b328fa2919972f9127e2561ce621663d48",
      "tree": "4838a4b64284ab4e666fb60d970cb02d9b5c2dca",
      "parents": [
        "0a96e1c29a94eb8a006fc89a8351f212bcb6380d"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu May 21 14:48:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 12:18:14 2026 +0530"
      },
      "message": "chore: bump release version to 1.0 (#3696)\n\n## Why?\n\n\n\n## What does this PR do?\n\nThis PR bump fory release version to 1.0\n\n## Related issues\n\nCloses #1017 \nCloses #2906 \nCloses #2982 \nCloses #3387 \nCloses #3349 \n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "0a96e1c29a94eb8a006fc89a8351f212bcb6380d",
      "tree": "56481fe0f21a9a2c5a2ff3aed6ca12ecd4fb4774",
      "parents": [
        "6f363458069d1b074325d8bf14588268979015ca"
      ],
      "author": {
        "name": "Truffle",
        "email": "truffleagent@gmail.com",
        "time": "Wed May 20 07:09:16 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 16:39:16 2026 +0530"
      },
      "message": "fix(c++): propagate /Zc:preprocessor on MSVC for FORY_STRUCT consumers (#3694)\n\n## Why?\n\n#3693 reports that `FORY_STRUCT` fails to compile under MSVC unless\n`/Zc:preprocessor` is set. The macro forwards `__VA_ARGS__` through\nnested macros, which the legacy MSVC preprocessor expands as a single\ntoken. `.bazelrc:59-60` already sets the flag for Bazel Windows builds;\nCMake consumers had to remember to add it manually. #3078 papered over\nthe gap in the docs sample, but every downstream CMake project that\ndepends on `fory::serialization` / `fory::row_format` / `fory::fory`\nstill has to opt in by hand.\n\n## What does this PR do?\n\n- Adds `target_compile_options(fory_meta PUBLIC\n$\u003c$\u003cCXX_COMPILER_ID:MSVC\u003e:/Zc:preprocessor\u003e)` in\n`cpp/fory/meta/CMakeLists.txt`.\n- Placed on `fory_meta` because that target owns `FORY_STRUCT` in\n`cpp/fory/meta/field_info.h`; PUBLIC propagates through the existing\nlink chain (`fory_meta` -\u003e `fory_serialization` / `fory_row_format` /\n`fory_encoder` -\u003e the user-facing INTERFACE wrappers) without\nduplicating on three targets.\n- Uses a generator expression on `CXX_COMPILER_ID:MSVC` (not the legacy\n`if(MSVC)` variable) so the flag is omitted for `clang-cl` (compiler id\n`Clang`), which warns on `/Zc:preprocessor` and is already conforming.\nThe genex also keeps the install-export hermetic: a non-MSVC consumer\nimporting `fory::meta` through `find_package(fory)` reads an empty entry\nrather than a stuck flag.\n- The flag mirrors `.bazelrc:59-60` for Bazel parity.\n\nThe docs sample at `docs/guide/cpp/index.md:55-57` becomes redundant for\nv0.18.0+ users but is left in place: the sample still pins `GIT_TAG\nv0.17.0`, so removing it would silently break readers following the docs\non the prior version.\n\n## Related issues\n\nCloses #3693\n\n## AI Contribution Checklist\n\n- [x] Substantial AI assistance was used in this PR: `yes`\n- [x] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [x] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n## Does this PR introduce any user-facing change?\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\nCMake users on MSVC will automatically receive `/Zc:preprocessor` when\nlinking any fory target on v0.18.0+. No source-level API or binary\nprotocol change.\n\n## Benchmark\n\nN/A. Build-config change.\n\n---\n\n### AI Usage Disclosure\n\n- **substantial_ai_assistance**: yes\n- **scope**: code drafting (single-file CMake change), tradeoff\nexploration, PR text drafting\n- **affected_files_or_subsystems**: `cpp/fory/meta/CMakeLists.txt` (C++\nbuild system)\n- **ai_review**: Two-reviewer loop completed per AI_POLICY.md \\xa75.\nReviewer A used `.claude/skills/fory-code-review/SKILL.md`; Reviewer B\ndid not. First pass surfaced five actionable items (clang-cl\nmisclassification, install-export hermeticity, scope justification, docs\nredundancy, MSVC-path verification). Revision moved from `if(MSVC) {\ntarget_compile_options(... PUBLIC /Zc:preprocessor) }` to the genex form\n`$\u003c$\u003cCXX_COMPILER_ID:MSVC\u003e:/Zc:preprocessor\u003e`; rerun on rev2 returned\n**no further actionable findings** from either reviewer. Reviewer A\nexplicitly: \\\"NO FURTHER FINDINGS. Diff is clean.\\\" Reviewer B: \\\"NO\nBLOCKING FINDINGS. The change is correct.\\\"\n- **ai_review_artifacts**: Both review sessions ran in dedicated\nsubagents on the rev2 diff. Reviewer A traced each prior finding through\nthe revision (RESOLVED 1-5) plus left a residual non-blocking note\nrecommending an MSVC CI smoke job. Reviewer B confirmed\n`$\u003cCXX_COMPILER_ID:MSVC\u003e` is the modern idiom over the legacy `MSVC`\nvariable, PUBLIC propagation through the link chain is correct,\ninstall-export carries the genex verbatim and re-evaluates per consumer.\nBoth transcripts available on request.\n- **human_verification**: Linux/GCC build of `fory_meta` succeeds;\n`examples/cpp/hello_world` (which uses `FORY_STRUCT` via\n`fory::serialization`) builds and runs end-to-end (`./hello_world`\nserializes/deserializes all 8 sample types). `grep -c \u0027/Zc:preprocessor\u0027\ncompile_commands.json` returns 0 on Linux, confirming the genex\nevaluates to empty for non-MSVC. MSVC path is not exercised locally on\nthe Linux VM; the change mirrors `.bazelrc:59-60` (already in production\nfor Bazel Windows) and PR #3078 (merged docs precedent). A Windows CMake\nsmoke job would be the ideal proof and is a reasonable follow-up.\n- **performance_verification**: N/A.\n- **provenance_license_confirmation**: Apache-2.0-compatible. No\nthird-party code introduced. The line in question is original and\nanalogous to existing in-tree `.bazelrc` settings.\n\nNIT from Reviewer B (not addressed; low priority): adding `MSVC_VERSION\nGREATER_EQUAL 1925` fast-fail to surface the floor explicitly rather\nthan silently warning on older MSVC. `FORY_STRUCT`\u0027s inline comment\nalready documents requiring VS 2022 17.11+ for in-class usage, so older\nMSVC users will hit unrelated errors regardless; leaving the floor\nimplicit matches the existing `.bazelrc` precedent."
    },
    {
      "commit": "6f363458069d1b074325d8bf14588268979015ca",
      "tree": "47d91c7468f2c08e918d301536c6ba99c60f0e60",
      "parents": [
        "1daa1d02423fcbf1d2d3a81de79d2d8a1b26e6e5"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 20 16:37:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 14:07:43 2026 +0530"
      },
      "message": "docs(cpp): clarify MSVC preprocessor requirement (#3695)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\nCloses #3693 \n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "1daa1d02423fcbf1d2d3a81de79d2d8a1b26e6e5",
      "tree": "1e51e58b8ea19b5769c95ac0e677f7dbdff23454",
      "parents": [
        "56b5b38c2e97e9c4cd95d691fdd2473590b31b4c"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon May 18 13:37:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 11:07:48 2026 +0530"
      },
      "message": "fix(dart): fix dart library warnings (#3691)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "56b5b38c2e97e9c4cd95d691fdd2473590b31b4c",
      "tree": "3da955a8bba073f6160eb0fe76419bcb33b49d5c",
      "parents": [
        "5a17ad78a906701bb6e9a90cae6c36b12e5c0a02"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon May 18 12:29:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 12:29:48 2026 +0800"
      },
      "message": "feat(compiler): set thread_safe_pointer to false by default and enhance ci (#3690)\n\nBREAKING CHANGE: Rust IDL ref fields now generate Rc/RcWeak unless\nthread_safe\u003dtrue is set, which generates Arc/ArcWeak.\n\n\n\n## Why?\n\nRust IDL ref fields do not need cross-thread ownership by default. Using\n`Rc`/`RcWeak` as the default keeps generated Rust types aligned with the\nnon-thread-safe default while still allowing users to opt into\n`Arc`/`ArcWeak` when cross-thread sharing is required.\n\n\n\n## What does this PR do?\n\n- Adds the `thread_safe_pointer` field option to the compiler protobuf\nextension so protobuf IDL can opt Rust ref fields into `Arc`/`ArcWeak`.\n- Updates Rust codegen so ref fields, weak refs, list element refs, map\nvalue refs, and union payload refs default to `Rc`/`RcWeak` unless\n`thread_safe\u003dtrue` is set.\n- Updates generated-code tests and Rust IDL roundtrip tests to validate\nthe new default pointer mapping and the thread-safe opt-in path.\n- Refreshes compiler IDL docs for Fory IDL, protobuf IDL, and\nFlatBuffers IDL with the new Rust pointer carrier behavior.\n- Adds a dedicated Scala IDL CI job, enables warnings-as-errors for the\nC++ example builds, and fixes AVX2 constant helpers used by UTF string\nutilities.\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "5a17ad78a906701bb6e9a90cae6c36b12e5c0a02",
      "tree": "9b88cb860e5bd9f44bde076ca7a00eab156ec93c",
      "parents": [
        "3735e36d143d8e08e9344e5b6f2ae7bd8a3d9a93"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon May 18 12:29:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 12:29:30 2026 +0800"
      },
      "message": "ci: pin manylinux wheel images for release builds (#3689)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "3735e36d143d8e08e9344e5b6f2ae7bd8a3d9a93",
      "tree": "c3490aca8015b2b94e1cdcd76b1be67ea833dee6",
      "parents": [
        "5afdba31afc1e38be8e7d5b05ae49ca62054b96b"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon May 18 10:17:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 07:47:38 2026 +0530"
      },
      "message": "fix(ci): fix python/dart release (#3688)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "5afdba31afc1e38be8e7d5b05ae49ca62054b96b",
      "tree": "c4e69c324c46d1771526230f8b974643af6fffd4",
      "parents": [
        "72c97e9dd8394d56d4b90459c1a7d966892713b9"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon May 18 09:20:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 09:20:47 2026 +0800"
      },
      "message": "fix: fix release script (#3687)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "72c97e9dd8394d56d4b90459c1a7d966892713b9",
      "tree": "c0f071e02f766069d6b977b2090aca4faa540590",
      "parents": [
        "06d60dbe563eb9d7b5001cc06f8cf65fded7cf48"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon May 18 07:15:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 07:15:21 2026 +0800"
      },
      "message": "docs: update xlang/native serialization doc (#3686)\n\n## Why?\n\nClarify the split between xlang serialization and same-language native\nserialization in the Fory guides, and keep website sync plus\nrelease-version tooling aligned with the updated docs structure.\n\n## What does this PR do?\n\n- Renames language guide pages from cross-language serialization to\nxlang serialization and updates related links, headings, sidebar\npositions, and terminology across the runtime guides.\n- Adds native serialization guides for Java, Python, C++, Go, and Rust,\ncovering when to use native mode, registration, schema evolution,\nsupported runtime-specific object surfaces, performance guidance, and\ntroubleshooting.\n- Adds security configuration guidance for multiple runtime guides,\nincluding registration, schema/version checking, depth and size limits,\nand safer model-shaping recommendations.\n- Updates the Java xlang guide to clarify xlang mode configuration and\ncross-runtime behavior.\n- Enables orphan deletion for synced docs directories in\n`.github/sync.yml` so renamed guide pages are removed from the site\ntarget.\n- Fixes Kotlin version bumping in `ci/release.py` to update the Kotlin\nparent POM and child module parent versions, with an explicit error when\nthe expected POM marker is missing.\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nDocumentation is updated for native and xlang serialization guidance.\nThis PR does not introduce a public API change or binary protocol\ncompatibility change.\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nNot applicable; this is documentation and release-script maintenance."
    },
    {
      "commit": "06d60dbe563eb9d7b5001cc06f8cf65fded7cf48",
      "tree": "bd8ce3f7e07ff2674ac2251de0c71608b56e89bd",
      "parents": [
        "1fa8735d04112a384b0da287cca306e768eaba16"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sun May 17 23:31:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 21:01:44 2026 +0530"
      },
      "message": "feat(xlang): use xlang as default mode for all languages (#3685)\n\n## Why?\n\nFory 1.0 should make xlang the default path so new users get the\ncross-language wire format and compatible schema evolution without extra\nconfiguration. Native modes remain available for same-language workloads\nthat need language-specific object features or native-only wire formats.\n\n## What does this PR do?\n\n- Defaults Java, Python, Go, and Rust runtime construction to xlang\nmode, with explicit native-mode opt-outs for same-language serialization\npaths.\n- Keeps Swift on the xlang-only path by removing the public `xlang`\nconfiguration switch and always writing/expecting the xlang header.\n- Updates tests across Java, Python, Go, Rust, Swift, C++, Scala, and\nintegration fixtures so native-mode expectations opt out explicitly.\n- Refreshes the xlang, Java native-mode, schema metadata, configuration,\nand type-registration docs across runtimes for the new default.\n- Adds or renames schema metadata guide pages and removes stale\nmigration/native-mode docs that no longer match the 1.0 model.\n\n## Related issues\n\n#1017\n\n## AI Contribution Checklist\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n## Does this PR introduce any user-facing change?\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nNot run; this PR changes defaults, tests, and documentation rather than\nbenchmark logic."
    },
    {
      "commit": "1fa8735d04112a384b0da287cca306e768eaba16",
      "tree": "0ad5c92d529bbcabb35469d4ea6bbd0f22ea1948",
      "parents": [
        "398ad2f80c55bbe1f8d75def24009d1291019257"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat May 16 23:31:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 16 21:01:30 2026 +0530"
      },
      "message": "feat(kotlin): add schema idl support to kotlin (#3684)\n\n## Why?\n\nKotlin did not have Schema IDL compiler output or matching generated\nxlang registration support, so Kotlin users could not generate Fory IDL\nmodels alongside the other supported languages.\n\n## What does this PR do?\n\n- Adds Kotlin as a Schema IDL compiler target, including `--kotlin_out`,\n`kotlin_package`, generator registration, and generated Kotlin\nmodel/registration output.\n- Implements Kotlin IDL generation for structs, enums, unions, nested\ntypes, package handling, type IDs, unsigned types, half/bfloat16 arrays,\nduration fields, references, and cycle-owned classes.\n- Extends Kotlin KSP/runtime support for generated xlang serializers,\nunion serializers, runtime type aliases, generated serializer lookup,\nand Kotlin `Duration` xlang encoding.\n- Adds Kotlin IDL unit and integration coverage, including a Kotlin peer\nmodule and Java round-trip hooks for the IDL test suite.\n- Updates compiler, Kotlin, generated-code, schema IDL, and xlang\ntype-mapping documentation for Kotlin support.\n\n## Related issues\n#1017 \n#3679 \n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nYes. It adds Kotlin Schema IDL compiler output and related Kotlin\ngenerated-serializer registration APIs. It does not change the existing\nbinary protocol format.\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nN/A. This PR adds Kotlin Schema IDL generation and coverage, not a\nbenchmarked runtime optimization."
    },
    {
      "commit": "398ad2f80c55bbe1f8d75def24009d1291019257",
      "tree": "9addb497ddedbf3f60fd58d23fcc3958ba6da9a7",
      "parents": [
        "2e3bef8a065d2eb3131732cdc6b8364b2492b129"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri May 15 22:57:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 20:27:57 2026 +0530"
      },
      "message": "feat(rust): make rust chrono optional (#3683)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "2e3bef8a065d2eb3131732cdc6b8364b2492b129",
      "tree": "3ef88803c9bfaf4abd3a575c422be380735e041a",
      "parents": [
        "3d49c6f6242ef6fd3a8c4986dfa7a169def6f17c"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri May 15 19:56:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 19:56:18 2026 +0800"
      },
      "message": "feat(scala): update generated annotation (#3682)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n#3681 \n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "3d49c6f6242ef6fd3a8c4986dfa7a169def6f17c",
      "tree": "b0350de65f5de19f17a7b7a6a041c6ab1bd04152",
      "parents": [
        "fee9190b8cfd59d88105e8ab2451fb0d7af67e60"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri May 15 19:18:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 15 16:48:02 2026 +0530"
      },
      "message": "feat(scala): add scala schema idl support (#3681)\n\n## Why?\n\nScala did not have schema IDL generation and xlang round-trip coverage\nalongside the other compiler targets. This PR adds the compiler,\nruntime, documentation, and CI coverage needed for Scala generated\nschemas to interoperate through Fory xlang.\n\n## What does this PR do?\n\n- Adds Scala as an FDL compiler target, including `--scala_out`,\ngenerator registration, Scala 3 code generation, nested type handling,\nunions, enums, field options, nullability, reference annotations, and\npackage-option tests.\n- Extends Java compiler/runtime support needed by generated xlang\nserializers, including nested type resolution, union case annotations,\nstatic generated serializer registration/factory paths, resolver\nupdates, and serializer/copy-context support.\n- Adds Scala runtime support for xlang serialization, including\n`ForySerializer` derivation macros, Scala enum handling, Scala\ncollection serializers, and dispatcher registration.\n- Expands IDL and xlang coverage with Scala peer tests, nested-name\nschemas, Java/Scala round trips, Scala serializer tests, and a dedicated\nScala xlang CI job.\n- Updates compiler and Scala/xlang documentation for Scala generation,\ngenerated code usage, nullability, reference tracking, and Scala type\nmappings.\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\nAdds Scala compiler output options, Scala serializer\nderivation/registration APIs, and Java annotations/runtime hooks used by\ngenerated serializers. It documents Scala xlang mappings without\nchanging existing binary protocol compatibility.\n\n## Benchmark\n\nNot applicable."
    },
    {
      "commit": "fee9190b8cfd59d88105e8ab2451fb0d7af67e60",
      "tree": "fa239bb54249d595066ca4c7a2e76fe60c473ce7",
      "parents": [
        "57b0c9edde14eeb3557c1a015c48930d847cbc04"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu May 14 23:48:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 14 21:18:22 2026 +0530"
      },
      "message": "refactor(java): replace static serializer spi lookup (#3680)\n\n## Why?\n\nFollow up to #3679: static generated serializer lookup no longer needs\naggregate SPI provider classes or service resources. The runtime can\nresolve generated serializers from the registered target class name,\nwhich simplifies Java/Kotlin generation and makes Android/R8 packaging\nrely on generated keep rules instead of broad user-written\nservice-loader rules.\n\n## What does this PR do?\n\n- Replaces `StaticGeneratedSerializerProvider` service-loader discovery\nwith registry lookup based on escaped generated serializer class names\nand required constructors.\n- Updates the Java annotation processor and Kotlin KSP output to use\n`\u003ctarget\u003e_ForySerializer` / `\u003ctarget\u003e_ForyNativeSerializer` names, emit\nper-target `META-INF/proguard/` rules, and stop generating aggregate\nprovider classes or service descriptors.\n- Allows supported internal Kotlin `@ForyStruct` classes to generate\ninternal serializers while keeping the constructor paths the Java\nruntime needs.\n- Updates `TypeResolver`, static generated serializer registry tests,\nKotlin KSP validation tests, and Kotlin xlang coverage for the new\ndiscovery path.\n- Adds Android instrumentation coverage for static generated serializers\nand updates the Android CI setup to install the annotation processor\nartifact.\n- Refreshes Java/Kotlin static generated serializer docs and removes the\nobsolete SPI discovery section from the xlang implementation guide.\n\n## Related issues\n\n#3679 \n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nNot run; this PR changes static generated serializer lookup, generated\nmetadata, docs, and tests rather than benchmarked serialization hot\npaths."
    },
    {
      "commit": "57b0c9edde14eeb3557c1a015c48930d847cbc04",
      "tree": "acf4a3aa091783d4177bc15a49b298e69bb2d58e",
      "parents": [
        "74898f497c553f20ab1b5da6c7474c6c873dde5c"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu May 14 13:21:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 14 10:51:28 2026 +0530"
      },
      "message": "feat(kotlin): add kotlin xlang and ksp support (#3679)\n\n## Why?\n\nKotlin needs first-class xlang support with build-time generated\nserializers, and Java field metadata needs a type-use nullability model\nthat can represent top-level and nested nullable positions consistently\nacross IDL, annotations, generated descriptors, and cross-language\ntests.\n\n## What does this PR do?\n\n- Adds Kotlin Maven modules for the runtime, KSP processor, and xlang\nintegration tests, including generated static serializer/provider\nsupport for Kotlin `@ForyStruct` models.\n- Adds Kotlin xlang coverage and a dedicated GitHub Actions job that\nruns `org.apache.fory.xlang.KotlinXlangTest`.\n- Introduces `@Nullable` as the Java type-use nullability annotation,\nremoves nullability from `@ForyField`, and updates Java\ncompiler/codegen, annotation processor, tests, docs, and cross-language\nfixtures to use the new model.\n- Adds static generated serializer provider discovery/registration APIs\nso generated Java and Kotlin serializers can be found through service\nproviders or registered explicitly.\n- Extends xlang type mapping and implementation docs for Kotlin unsigned\ntypes, dense arrays, collections, nullability, and static generated\nserializer metadata.\n- Updates Java descriptor/type-resolution handling and related tests for\nnullable type-use metadata, xlang integer encodings, compatible\ncollection/array reads, and static generated descriptor access.\n\n## Related issues\n\n#1017 \n#3675\nCloses #1827\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nNot run; this PR adds Kotlin xlang/codegen support and API/docs/tests\nrather than a performance-sensitive benchmark change."
    },
    {
      "commit": "74898f497c553f20ab1b5da6c7474c6c873dde5c",
      "tree": "0e4432cf67e182a520a41a193a64aaa664969c3a",
      "parents": [
        "7ce550bc1ab883e953e760709ead2778d9356249"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 13 19:09:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 19:09:19 2026 +0800"
      },
      "message": "feat(xlang): simplify xlang field ordering (#3675)\n\n## Why?\n\nThe xlang field-ordering spec and several runtimes still treated\nnon-primitive fields as separate type-specific groups. This PR\nsimplifies the rule so non-primitive fields use one language-neutral\nidentifier order, and makes invalid negative field ids fail early\ninstead of being interpreted as name-based fields.\n\n## What does this PR do?\n\n- Updates the xlang serialization spec so fields are ordered as non-null\nprimitives, nullable primitives, then all non-primitives sorted by field\nidentifier.\n- Applies the simplified ordering across C++, C#, Dart, Go, Java,\nJavaScript, Python, Rust, and Swift runtimes or generators.\n- Allows mixed explicit field ids and name-based identifiers, with\nexplicit ids sorted before name identifiers inside a field group.\n- Rejects negative configured field ids in supported generators,\nparsers, and macros; name-based fields now omit an explicit id instead\nof using `-1`.\n- Updates language guides and cross-language fixtures to match the new\nfield-id and ordering behavior.\n- Adds focused tests for non-primitive field ordering, mixed identifier\nordering, and negative field-id diagnostics.\n\n## Related issues\n\n#1017 \n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nYes. Xlang non-primitive struct field ordering now follows field\nidentifiers directly, and configured negative field ids are rejected.\nFields without explicit ids continue to use name-based identifiers.\n\n- [ ] Does this PR introduce any public API change?\n- [x] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nN/A"
    },
    {
      "commit": "7ce550bc1ab883e953e760709ead2778d9356249",
      "tree": "4a2ccb653800347f5477e991e058b5714c9d29a2",
      "parents": [
        "0855c18f13534fbf55936e7db043f78a6875af5a"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 13 14:30:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 12:00:43 2026 +0530"
      },
      "message": "fix(java): avoid instantiating abstract meta-share types (#3677)\n\n## Why?\n\nJava compatible meta-share can receive a `TypeDef` whose root class is\nan interface or abstract class. Instantiating compatible serializers\nallocate their root type during read, so those meta roots must not get a\nserializer that can call `Unsafe.allocateInstance` on an uninstantiable\ndeclared type.\n\n## What does this PR do?\n\n- Leaves abstract/interface meta-share roots without an instantiating\ncompatible serializer in `TypeResolver#getMetaSharedTypeInfo`.\n- Keeps concrete values on the existing runtime type metadata or\ntarget-class transformation path.\n- Adds a resolver-level regression for interface-root meta-share\n`TypeDef`s.\n- Adds an interface-field compatible meta-share round-trip regression\nafter generated serializers compile.\n\n## Related issues\n\n- Fixes #3674\n\n## AI Contribution Checklist\n\n- [x] Substantial AI assistance was used in this PR: `yes`\n- [x] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n## Does this PR introduce any user-facing change?\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nN/A. This change prevents instantiating serializers for\nabstract/interface meta-share roots and does not change hot-path\nserialization for concrete runtime values.\n\n## Tests\n\n- `ENABLE_FORY_DEBUG_OUTPUT\u003d1 mvn -T16 -pl fory-core\n-Dtest\u003dorg.apache.fory.resolver.MetaShareContextTest#testMetaSharedInterfaceDoesNotBuildInstantiatingSerializer,org.apache.fory.serializer.MetaShareCompatibleTest#testInterfaceFieldCompatibleMetaShare\ntest`\n- `ENABLE_FORY_DEBUG_OUTPUT\u003d1 mvn -T16 -pl fory-core\n-Dtest\u003dorg.apache.fory.resolver.MetaShareContextTest,org.apache.fory.serializer.MetaShareCompatibleTest\ntest`\n- `mvn -T16 -pl fory-core spotless:check`\n- `mvn -T16 -pl fory-core checkstyle:check`"
    },
    {
      "commit": "0855c18f13534fbf55936e7db043f78a6875af5a",
      "tree": "69e4ab6c7e860814eb55d803607c587264005d68",
      "parents": [
        "afb2f3f46259be6ab0d918a8f853d1a8dc067b87"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 13 13:41:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 11:11:22 2026 +0530"
      },
      "message": "fix(java): validate subclass serializer layer counts (#3676)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "afb2f3f46259be6ab0d918a8f853d1a8dc067b87",
      "tree": "a6b0dfc97dadeb8c155d4c7ddc81659c27aefc41",
      "parents": [
        "ac47fe90dbe50a6df72943b73cbca5c14e57a745"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 13 12:17:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 09:47:55 2026 +0530"
      },
      "message": "feat(java): annotation processor for android serialization (#3670)\n\n## Why?\n\nJava runtime code generation is disabled on Android and unavailable in\nGraalVM native images, so `@ForyStruct` users need a build-time\nserializer path that preserves schema metadata, compatible reads, and\nthe same wire protocol without falling back to reflective object\nserializers.\n\n## What does this PR do?\n\n- Adds the `fory-annotation-processor` Maven module and processor for\ngenerating same-package static serializers for Java `@ForyStruct`\nclasses and records.\n- Adds static serializer runtime support, including deterministic\nlookup, descriptor metadata exposure, copy/read/write paths, and\ncompatible-mode reads for generated serializers.\n- Extends Java descriptor, generic type, type annotation, and type\ndefinition handling so generated descriptors can carry nested `TypeRef`,\n`TypeExtMeta`, `@ForyField`, and `@ArrayType` metadata without runtime\nannotated-field reflection.\n- Documents static struct serializers and clarifies Android,\nconfiguration, and GraalVM behavior for build-time serializers versus\nruntime codegen/native-image generation.\n- Adds annotation processor tests, updates xlang test fixture\nconstruction, and adds an Android Go xlang CI job.\n\n## Related issues\n\n#1017 \n#3405 \n#1101 \n#2435\n#3667 \n\n## AI Contribution Checklist\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n## Does this PR introduce any user-facing change?\n\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "ac47fe90dbe50a6df72943b73cbca5c14e57a745",
      "tree": "c4710442ea49aff8a1e002859b461779bc7dac37",
      "parents": [
        "a603ff1bb1d9eb308b80daa79aaf3cddae88bc02"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Tue May 12 11:26:31 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 20:56:31 2026 +0530"
      },
      "message": "feat(compiler): add helpers to generate unified gRPC service/method names (#3672)\n\n## Why?\n\ngRPC dispatches calls by the fully-qualified service name and method\npath, for example `demo.greeter.Greeter` and\n`/demo.greeter.Greeter/SayHello`.\n\nFor generated gRPC code to interoperate across different languages,\nevery language generator must generate these names from the same rule.\n\nCentralizing the helpers in `compiler/fory_compiler/generators/base.py`\navoids redundancy logic in each language generator and make sure the\ngenerated names are the same.\n\n## What does this PR do?\n\nAdd helpers to generate unified gRPC service/method names in\n`compiler/fory_compiler/generators/base.py`.\n\n## Related issues\n\nhttps://github.com/apache/fory/issues/3266\n\n## AI Contribution Checklist\n\n- [X] Substantial AI assistance was used in this PR: `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes."
    },
    {
      "commit": "a603ff1bb1d9eb308b80daa79aaf3cddae88bc02",
      "tree": "88c3f5a3fc904c3c1d0bc3558cbe55527a434485",
      "parents": [
        "33e0dc06528783849d3f321eb9f12dd4de3864b8"
      ],
      "author": {
        "name": "Shin Xiahou",
        "email": "xhzq233@qq.com",
        "time": "Tue May 12 15:13:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 12:43:15 2026 +0530"
      },
      "message": "fix(javascript): preserve getTypeInfo in regenerated read serializer (#3669)\n\n## Why?\n\n`TypeResolver.regenerateReadSerializer()` returned a partial serializer\nobject that missed `getTypeInfo`.\n\nWhen runtime paths later call `original.getTypeInfo()` (for example in\n`ReadContext` type-meta regeneration flow), it can throw:\n\n```text\nTypeError: original.getTypeInfo is not a function\n```\n\n## What does this PR do?\n\n- Add `getTypeInfo: serializer.getTypeInfo` when registering the\nregenerated serializer in\n`javascript/packages/core/lib/typeResolver.ts`.\n- Keep regenerated serializer interface consistent with normal\nserializer instances.\n\nMinimal reproduction:\n\n```js\nconst core \u003d require(\"./javascript/packages/core/dist/index.js\");\nconst Fory \u003d core.default;\nconst { Type } \u003d core;\n\nconst fory \u003d new Fory({ compatible: true });\nconst serializer \u003d fory.typeResolver.regenerateReadSerializer(\n  Type.struct({ namespace: \"demo\", typeName: \"repro_struct\" }, {\n    id: Type.int32(),\n  }),\n);\n\nconsole.log(typeof serializer.getTypeInfo); // before: undefined, after: function\nserializer.getTypeInfo();\n```\n\n## Related issues\n\nFixes #3668\n\n## AI Contribution Checklist\n\n- [x] Substantial AI assistance was used in this PR: `no`\n- [x] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [x] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n## Does this PR introduce any user-facing change?\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nN/A (bug fix, no protocol/perf-path behavior change expected).\n\n---------\n\nCo-authored-by: xiahouzhen \u003cxiahouzhen.1@bytedance.com\u003e\nCo-authored-by: Claude Opus 4.7 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "33e0dc06528783849d3f321eb9f12dd4de3864b8",
      "tree": "2febde6cf60cc201f70cdf8e19c7383c80a1b363",
      "parents": [
        "f021947c44317426f3c1021a0891cd422b208f4f"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon May 11 15:02:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 11 12:32:09 2026 +0530"
      },
      "message": "feat: add android support (#3667)\n\n## Why?\n\nFory Java core needs to run on Android 8.0+ without relying on JVM-only\ninternals such as `sun.misc.Unsafe`, private-field `MethodHandle`\naccess, runtime bytecode loading, or `LambdaMetafactory`. The support\nsurface also needs to keep JVM, GraalVM, `fory-format`, and hot-path\nbehavior owned by their existing runtime-specific paths instead of\nweakening the core protocol or serializers.\n\n## What does this PR do?\n\n- Adds Android platform support for Java `fory-core`, including Android\ndetection, Android-safe object serialization paths,\nheap/`ByteBuffer`/stream/channel input handling, reflection-backed field\naccess, and reflection-based object construction.\n- Updates serializer behavior for Android-specific constraints,\nincluding dynamic proxies with deferred handlers, `Throwable`\nconstruction/restoration, JDK collection/map wrappers, sublists,\nlambdas, serialized lambdas, Java serializer fallbacks, and targeted\nunsupported-operation failures for JVM-only features.\n- Introduces type-safe `MemoryBuffer`/`MemoryOps` primitive-array and\nbyte-copy APIs, moves JVM-only unsafe operations behind platform owners\nsuch as `UnsafeOps`, and keeps `fory-format` direct-memory paths on\nJVM-only unsafe APIs.\n- Adjusts codegen and platform defaults so Android and GraalVM disable\nruntime code generation by default, while explicit unsupported codegen\nrequests are forced off with a warning.\n- Adds Android instrumented integration tests and CI coverage for Java\nchanges, updates Java Android documentation/spec guidance, and aligns\nrelated GraalVM, JDK compatibility, benchmark, Kotlin, Scala, and SIMD\nusages with the new platform ownership.\n\n## Related issues\n\n#1017 \nCloses #3405\nCloses #1101\nCloses #2435 \n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\nAdds documented Android support for Java `fory-core` and updates Java\nruntime/platform APIs around JVM-only unsafe memory access. No binary\nprotocol compatibility change is intended.\n\n- [x] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nNot provided in the PR description."
    },
    {
      "commit": "f021947c44317426f3c1021a0891cd422b208f4f",
      "tree": "e209e43eda35f5e131e82830e7ff9e02414fea35",
      "parents": [
        "917673d1d51c0f6b53fa82875464303ede3ec9f8"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Sat May 09 05:27:41 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 09 14:57:41 2026 +0530"
      },
      "message": "refactor(rust): use absolute path in generated Rust code (#3666)\n\n\u003c!--\n**Thanks for contributing to Apache Fory™.**\n\n**If this is your first time opening a PR on fory, you can refer to\n[CONTRIBUTING.md](https://github.com/apache/fory/blob/main/CONTRIBUTING.md).**\n\nContribution Checklist\n\n- The **Apache Fory™** community has requirements on the naming of pr\ntitles. You can also find instructions in\n[CONTRIBUTING.md](https://github.com/apache/fory/blob/main/CONTRIBUTING.md).\n\n- Apache Fory™ has a strong focus on performance. If the PR you submit\nwill have an impact on performance, please benchmark it first and\nprovide the benchmark result here.\n--\u003e\n\n## Why?\n\nFor generated Rust code, it would be better to use absolute paths like\n`::std::option::Option` instead of `Option`.\nOn the one hand, this follows common practice in [procedural\nmacros](https://doc.rust-lang.org/reference/procedural-macros.html#r-macro.proc.hygiene)\nand prost; on the other hand, this will keep Fory/runtime/std/core\nreferences out of the generated code\u0027s local namespace, so IDL-defined\nnames such as `String`, `Vec` won\u0027t collide with the generator-owned\ntypes.\n\n## What does this PR do?\n\n- Use absolute paths across the Rust code generator and derived macros.\n- Remove collecting uses logic in the Rust code generator like\n\nhttps://github.com/apache/fory/blob/b4441d0ac55ba0dc89eb4a311966daa58074b9fc/compiler/fory_compiler/generators/rust.py#L199-L215\n\n## Related issues\n\nN/A.\n\n## AI Contribution Checklist\n\n\u003c!-- Full requirements and disclosure template:\n\nhttps://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs\n--\u003e\n\n- [ ] Substantial AI assistance was used in this PR: no\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\u003c!-- If substantial AI assistance \u003d `yes`, paste the completed checklist\nand disclosure block here, including the final ai_review summary and\nscreenshot evidence from both fresh reviewers on the current PR diff or\ncurrent HEAD after the latest code changes. --\u003e\n\n## Does this PR introduce any user-facing change?\n\n\u003c!--\nIf any user-facing interface changes, please [open an\nissue](https://github.com/apache/fory/issues/new/choose) describing the\nneed to do so and update the document if necessary.\n\nDelete section if not applicable.\n--\u003e\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?"
    },
    {
      "commit": "917673d1d51c0f6b53fa82875464303ede3ec9f8",
      "tree": "7c15b00f825ae757df28b8b52f13a952071e11b9",
      "parents": [
        "b4441d0ac55ba0dc89eb4a311966daa58074b9fc"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat May 09 16:02:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 09 13:32:42 2026 +0530"
      },
      "message": "docs: add README schema IDL example (#3665)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "b4441d0ac55ba0dc89eb4a311966daa58074b9fc",
      "tree": "cd92a347024e6979010188d666cc4dd61bbcb293",
      "parents": [
        "0c04a845aac3d3f5123979716577a7dad63cc44f"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat May 09 15:15:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 09 12:45:08 2026 +0530"
      },
      "message": "docs: update readme (#3664)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "0c04a845aac3d3f5123979716577a7dad63cc44f",
      "tree": "dd8630ba3b95aef55b5306c189c2ed89ed65b91b",
      "parents": [
        "31b06a55ec7bbac578aa9082b421126f0564a840"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri May 08 22:30:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 20:00:51 2026 +0530"
      },
      "message": "fix(java): serialize suppressed exceptions (#3663)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "31b06a55ec7bbac578aa9082b421126f0564a840",
      "tree": "25ec2c674747c4a3bbc5dc388fc9f2c2551b4a8e",
      "parents": [
        "e33559141fa48d6f95c71ab05d8b5a8c5d70707d"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri May 08 18:03:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 15:33:31 2026 +0530"
      },
      "message": "docs: tighten benchmark throughput plots (#3662)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "e33559141fa48d6f95c71ab05d8b5a8c5d70707d",
      "tree": "e4efc891c667d217d409564a213bc5f0ded0cf0f",
      "parents": [
        "389b66c81d197bc7a03129e4dfefde34dd2fcf1d"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri May 08 17:44:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 15:14:52 2026 +0530"
      },
      "message": "perf: update benchmark plots (#3661)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "389b66c81d197bc7a03129e4dfefde34dd2fcf1d",
      "tree": "d659a717f746d9d50ec6b5aeef28c7d6cc1386de",
      "parents": [
        "8ae4ce522a537a12715f40c29bbe1136dab6f973"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri May 08 14:43:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 12:13:42 2026 +0530"
      },
      "message": "chore: clean up code and add compiler warning checks (#3660)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "8ae4ce522a537a12715f40c29bbe1136dab6f973",
      "tree": "15985384e9fe2252edb06c69b1e382327654d823",
      "parents": [
        "e66733aa81c2cf382bd75af13463306de5596e2e"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri May 08 14:22:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 11:52:11 2026 +0530"
      },
      "message": "fix: include TypeMeta header bits in hash (#3659)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n\n\n## AI Contribution Checklist\n\n\n\n- [ ] Substantial AI assistance was used in this PR: `yes` / `no`\n- [ ] If `yes`, I included a completed [AI Contribution\nChecklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)\nin this PR description and the required `AI Usage Disclosure`.\n- [ ] If `yes`, my PR description includes the required `ai_review`\nsummary and screenshot evidence of the final clean AI review results\nfrom both fresh reviewers on the current PR diff or current HEAD after\nthe latest code changes.\n\n\n\n## Does this PR introduce any user-facing change?\n\n\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    }
  ],
  "next": "e66733aa81c2cf382bd75af13463306de5596e2e"
}
