)]}'
{
  "log": [
    {
      "commit": "261de1e6ec4f4325016c7d50bd19db8a0244a04e",
      "tree": "34813c1bb7b429161d1ea1105ee3141c941ec76c",
      "parents": [
        "de67a87de69a008338337493b7165b27bacc296f"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 06 16:26:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 13:56:41 2026 +0530"
      },
      "message": "fix(java): fix set view ref tracking (#3649)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\nCloses #3645\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": "de67a87de69a008338337493b7165b27bacc296f",
      "tree": "9ee22497ec357dde14ea64d580a21572e1b3a1c9",
      "parents": [
        "380fae71dc732dad3e7936995157fbcab062cedf"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 06 16:01:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 13:31:26 2026 +0530"
      },
      "message": "feat(xlang): use compatible for xlang by default (#3648)\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\nCross-language users should get schema-evolution behavior by default,\nbecause schemas can diverge independently across language\nimplementations and services. This PR makes `xlang` configuration select\ncompatible mode unless callers explicitly request schema-consistent\nmode.\n\n## What does this PR do?\n\n- Defaults `xlang` builders/configuration to compatible mode across\nruntimes while preserving explicit `compatible(false)` or equivalent\nschema-consistent choices.\n- Disables schema/class/struct version checks when compatible mode is\nactive, and keeps version checks enabled for explicit schema-consistent\nxlang paths where applicable.\n- Updates generated Java registration code and cross-language examples\nto use the compatible xlang configuration.\n- Adjusts existing tests that assert schema-consistent wire behavior to\nopt out of the new xlang default explicitly, and adds configuration\ncoverage for the new default behavior.\n- Refreshes cross-language and runtime documentation to describe\ncompatible mode as the xlang default and schema-consistent mode as an\nexplicit opt-out.\n\n## Related issues\n\n#1017 \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": "380fae71dc732dad3e7936995157fbcab062cedf",
      "tree": "91b44175b33142d5056f97ab6d339fc625171c20",
      "parents": [
        "adba101563b021574953c77a31b780366b7e033f"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed May 06 13:44:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 06 11:14:48 2026 +0530"
      },
      "message": "feat(xlang): add comprehensive read checks (#3647)\n\n## Why?\n\nDeserializers should reject malformed or attacker-controlled payloads\nbefore they can drive invalid protocol state or oversized allocations.\nThis PR hardens root header, metadata, size, and string reads across the\nxlang runtimes and updates the specs to match the validated wire format.\n\n## What does this PR do?\n\n- Standardizes the root header bitmap so xlang uses bit 0, out-of-band\nuses bit 1, and reserved bits are rejected.\n- Removes root-header null handling in favor of the normal root value\nencoding path.\n- Hardens TypeDef and TypeMeta parsing with 52-bit body hashes,\nreserved/compression flag validation, root kind validation, and stricter\nmetadata cache/skip behavior.\n- Adds read-side guardrails for binary payloads, primitive arrays,\ncollections/maps, strings, streams, varints, and trailing bytes across\nJava, C++, C#, Dart, Go, JavaScript, Python, Rust, and Swift.\n- Adds Java public configuration for max binary and collection\nallocation sizes, and enables Rust UTF-8 string read validation by\ndefault.\n- Expands focused malformed-payload tests and updates Java/xlang\nserialization specs to document the new header and metadata layouts.\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\n\n\n- [x] Does this PR introduce any public API change?\n- [x] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nNot applicable; this PR adds deserialization validation and protocol\ntests rather than benchmark changes."
    },
    {
      "commit": "adba101563b021574953c77a31b780366b7e033f",
      "tree": "73c014d84375bcfc6807e870f12c83919865c7fb",
      "parents": [
        "632e916b2a8c790026acc96abc0c8acce9a2b8b2"
      ],
      "author": {
        "name": "wakilurislam",
        "email": "wakilur.islam@therapservices.net",
        "time": "Tue May 05 14:49:01 2026 +0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 14:19:01 2026 +0530"
      },
      "message": "fix(java): use REPLACE_STUB_ID for unregistered writeReplace classes to prevent cross-JVM ClassNotFoundException (#3638)\n\n# PR Description\n\n## Why?\n\nWhen Fory serializes an unregistered class with `writeReplace()`\nreturning a different type (e.g., a Hibernate/ByteBuddy proxy), the\nouter type info writes the **proxy class name** to the byte stream. On a\ndifferent JVM where that proxy class doesn\u0027t exist, deserialization\nfails with `ClassNotFoundException`.\n\n## What does this PR do?\n\nAdds an `instanceof ReplaceResolveSerializer` check in\n`ClassResolver.buildUnregisteredTypeId()` to return `REPLACE_STUB_ID`\ninstead of `NAMED_EXT`. This writes a compact 1-byte internal type ID\nwithout the class name, matching the existing pattern for lambdas\n(`LAMBDA_STUB_ID`) and JDK proxies (`JDK_PROXY_STUB_ID`).\n\nThe original `NAMED_EXT` fallback for `serializer \u003d\u003d null` (before\nserializer creation) is preserved unchanged.\n\n### Changes\n\n**`ClassResolver.java`**:\n\n1. `buildUnregisteredTypeId()` — return `REPLACE_STUB_ID` when\nserializer is `ReplaceResolveSerializer`:\n\n```diff\n   protected int buildUnregisteredTypeId(Class\u003c?\u003e cls, Serializer\u003c?\u003e serializer) {\n-    if (serializer \u003d\u003d null \u0026\u0026 !cls.isEnum() \u0026\u0026 useReplaceResolveSerializer(cls)) {\n-      return Types.NAMED_EXT;\n+    if (!cls.isEnum()) {\n+      if (serializer instanceof ReplaceResolveSerializer) {\n+        return REPLACE_STUB_ID;\n+      }\n+      if (serializer \u003d\u003d null \u0026\u0026 useReplaceResolveSerializer(cls)) {\n+        return Types.NAMED_EXT;\n+      }\n     }\n```\n\n2. `addSerializer()` — guard against overwriting\n`typeIdToTypeInfo[REPLACE_STUB_ID]`:\n\n```diff\n+      if (typeId \u003d\u003d REPLACE_STUB_ID) {\n+        classInfoMap.put(type, typeInfo);\n+      } else {\n+        updateTypeInfo(type, typeInfo);\n+      }\n```\n\n**`WriteReplaceCrossJvmTest.java`** (new): 6 test methods × 4\nconfigurations \u003d 24 tests covering cross-JVM proxy, same-JVM regression,\nsame-type replace, round-trip, and nested proxy in DTO.\n\n## Related issues\n\n- Fixes #3635\n\n## AI Contribution Checklist\n\n- [x] Substantial AI assistance was used in this PR: `yes`\n\n```text\nAI Usage Disclosure\n- substantial_ai_assistance: yes\n- scope: code drafting, tests, design analysis\n- affected_files_or_subsystems: java/fory-core ClassResolver.java, WriteReplaceCrossJvmTest.java (new)\n- ai_review: two fresh AI reviewers on current HEAD — both found 0 actionable issues.\n- human_verification: full fory-core test suite (1820 tests, 0 failures). ObjectStreamSerializerTest (82), URLSerializerTest (9), ReplaceResolveSerializerTest (58) all pass. Cross-JVM test fails without fix (4 failures), passes with fix (24/24).\n- performance_verification: N/A — one-time cold-path change only\n- provenance_license_confirmation: Apache-2.0 compatible, all original work.\n```\n\n## Does this PR introduce any user-facing change?\n\nNo public API or binary protocol changes. Wire format changes only for\nunregistered `ReplaceResolveSerializer` classes (bug fix — previous\nformat was broken for cross-JVM).\n\n## Benchmark\n\nN/A — one-time `buildUnregisteredTypeId()` call, not per-element.\n\n\n[review_1_with_skill.md](https://github.com/user-attachments/files/27203956/review_1_with_skill.md)\n\n[review_2_without_skill.md](https://github.com/user-attachments/files/27203958/review_2_without_skill.md)"
    },
    {
      "commit": "632e916b2a8c790026acc96abc0c8acce9a2b8b2",
      "tree": "08f816a35a7d38baabb19085f02a628776f5b258",
      "parents": [
        "3f7a0a543ff765a5a3fab75f1a0fad41fdcf2d91"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon May 04 22:16:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 04 19:46:10 2026 +0530"
      },
      "message": "fix(xlang): fix xlang type system (#3646)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n#3644\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": "3f7a0a543ff765a5a3fab75f1a0fad41fdcf2d91",
      "tree": "e8a42e8ecafaaae5580bc7b6212cda8be38c49fa",
      "parents": [
        "768dee5a7e27eb688a6e380dc5fdd98165543ba0"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon May 04 21:02:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 04 18:32:15 2026 +0530"
      },
      "message": "feat(xlang): unified xlang type system (#3644)\n\n## Why?\n\nFory\u0027s xlang 1.0 type system needs one canonical schema model for scalar\ninteger encodings, half-precision floating-point types, and dense\nnumeric arrays so IDL/compiler output, runtime annotations, and\ncross-language peers agree on the same type IDs and wire behavior.\n\n## What does this PR do?\n\n- Reworks the xlang type mapping and serialization docs so `varint`,\n`fixed`, and `tagged` are scalar encoding modifiers, while `list\u003cT\u003e` and\ndense `array\u003cT\u003e` are distinct schema kinds.\n- Extends the FDL/FBS compiler IR, parser, validator, emitter, and\nlanguage generators to support `array\u003cT\u003e`, scalar encoding metadata, and\nfloat16/bfloat16 mappings across Java, Python, Go, Rust, C++, C#,\nJavaScript, Dart, and Swift.\n- Updates runtimes to handle canonical primitive-array type IDs and\narray/list semantics, including Java primitive array serializers and\nannotations, Python dense-array wrappers, Go primitive slice/list\nsupport, and related C++/C#/JavaScript/Rust/Swift resolver, skip, union,\nand field metadata paths.\n- Expands IDL roundtrip coverage across C++, C#, Dart, Go, Java,\nJavaScript, Python, Rust, and Swift, with additional compiler,\nprimitive-array, annotation, field metadata, typedef, and serializer\ntests.\n- Refreshes specs, guides, README content, integration fixtures, and\nbenchmark models for the new xlang 1.0 type names and array/encoding\nsyntax.\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. This updates public xlang/IDL type syntax and mappings, adds\narray-related annotations/carriers, and changes the documented xlang\nwire mapping for dense numeric arrays.\n\n- [x] Does this PR introduce any public API change?\n- [x] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nNot included. Benchmark fixtures were updated to use the new xlang type\nmapping."
    },
    {
      "commit": "768dee5a7e27eb688a6e380dc5fdd98165543ba0",
      "tree": "d4980866d920f3d4bf506819c61c9fed7787ee23",
      "parents": [
        "000bb1a779ddefb044fa2359e833cad56bfc03da"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat May 02 12:25:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 02 09:55:50 2026 +0530"
      },
      "message": "feat(python): support nested field schema encodings (#3643)\n\n## Why?\n\nPython currently loses declared integer encoding aliases inside nested\ncontainers, so schemas such as `Dict[pyfory.fixed_int32,\nList[pyfory.tagged_int64]]` can fall back to runtime inference or\nincompatible local assignment behavior. This breaks cross-language\nschema fidelity for nested map/list/set elements, especially in\ncompatible mode.\n\n## What does this PR do?\n\n- Preserves declared Python field schema metadata for nested container\nkeys, values, and elements in both pure Python and Cython serializers.\n- Extends primitive container fast paths to write/read fixed, varint,\ntagged, signed, unsigned, bool, and float schema-owned primitive\nencodings directly.\n- Adds compatible-read assignment planning and validation so remote\nnested integer encodings are consumed with remote metadata and assigned\nonly when they satisfy the local schema.\n- Updates Python code generation to keep nested integer schema aliases\nin generic containers instead of converting those lists to numpy array\nhints.\n- Adds Python unit coverage, compiler generation coverage, and\nJava/Python xlang tests for signed and unsigned nested annotated\ncontainers.\n- Documents nested Python collection aliases and compatible-read\nbehavior in README and Python guide pages.\n\n## Related issues\n\n#1017 \n#3630 \n#3625 \n#3630 \n#3636\n#3639 \n#3640\n#3642\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": "000bb1a779ddefb044fa2359e833cad56bfc03da",
      "tree": "5b44f723b65764c51f3f476f89caf167f32ed9ce",
      "parents": [
        "c0b083977116a91ad376891b5f7e3e8362c28180"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri May 01 23:40:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 21:10:26 2026 +0530"
      },
      "message": "chore(dart): remove stale dart note files (#3642)\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": "c0b083977116a91ad376891b5f7e3e8362c28180",
      "tree": "951f30cbafc6a613d187e3bd9109ef60aec56e2f",
      "parents": [
        "a88a8a63a1fd45922099b2d02f09cfb9334079a1"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri May 01 21:57:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 19:27:03 2026 +0530"
      },
      "message": "feat(dart): support nested container field codec for dart (#3641)\n\n## Why?\n\nDart needs a canonical field type annotation surface that can describe\nnested container element/key/value semantics, including fixed-width and\nencoded numeric types, without relying on separate numeric wrapper\nannotations. The schema fingerprint calculation also needs to include\nnested container type IDs consistently across runtimes so\ncompatible/schema-version checks agree for annotated nested containers.\n\n## What does this PR do?\n\n- Adds Dart nested container field type support through `ForyField(type:\n...)`, `MapField`, `ListType`, scalar type specs, and generated support\nfor nested element/key/value metadata.\n- Updates the Dart compiler generator and generated test models to emit\nDart `int` fields with explicit Fory type specs for fixed-width integer\nsemantics, while keeping exact-width wrapper classes where the Dart\nruntime still requires them.\n- Removes obsolete Dart numeric wrapper exports/tests for small\nfixed-width integer wrappers and adds runtime validation utilities for\ninteger bounds.\n- Extends Dart cross-language and unit coverage for nested annotated\ncontainers, integer round trips, type-spec annotations, signed/unsigned\nserializers, and xlang protocol behavior.\n- Aligns nested container schema fingerprint generation across Java,\nC++, C#, Go, JavaScript, Python, Rust, and Swift, and adds focused\nSwift/Java xlang coverage for Dart nested annotated containers.\n- Updates Dart guides, package README content, generated-code docs, and\nthe xlang serialization spec to document the new annotation/type mapping\nmodel.\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\nThis changes the Dart annotation/type-spec surface for fixed-width\nnumeric and nested container field declarations. It updates schema\nfingerprint calculation to include nested container metadata\nconsistently, but does not intentionally change the xlang binary\nprotocol format.\n\n## Benchmark"
    },
    {
      "commit": "a88a8a63a1fd45922099b2d02f09cfb9334079a1",
      "tree": "a81d952a847b2947c701a3cef29c9ded1e1871eb",
      "parents": [
        "03c4c57a4f45b0b31a5c4a37aa8417af5c45b6b6"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri May 01 11:16:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 08:46:25 2026 +0530"
      },
      "message": "feat(go): support nested field annotation type specs (#3640)\n\n## Why?\n\nGo nested field annotations were still limited to shallow cases, which\nleft generated `fory` tags and runtime field metadata unable to express\nnested container element/value overrides consistently. This PR closes\nthat gap so nested Go field specs can carry explicit container,\nencoding, nullability, and reference-tracking semantics through codegen\nand runtime resolution.\n\n## What does this PR do?\n\n- Extends the Go compiler generator to emit `type\u003d` hints for nested\nlist/map field specs instead of the older ad hoc array/ref tags.\n- Adds runtime support in Go to parse and apply nested type hints,\nresolve declared serializers from `TypeSpec`, and preserve declared\nencoding, nullability, and ref semantics for nested containers.\n- Updates Go type compatibility checks so nested slice/array/map element\nshapes compare structurally during compatible reads.\n- Refreshes Go generated-code and struct-tag documentation to describe\nthe new `type\u003dlist(...)`, `type\u003dmap(...)`, and `_` placeholder override\nsyntax.\n- Expands generator and xlang coverage for nested annotated containers\nand fixes the xlang ref-override expectation so list/map elements marked\n`ref\u003dfalse` round-trip without shared references.\n\n## Related issues\n\n#1017 \n#3630 \n#3625 \n#3630 \n#3636\n#3639 \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": "03c4c57a4f45b0b31a5c4a37aa8417af5c45b6b6",
      "tree": "ba3484e441ad0bbb9745988ff4e5a28cdee5dfc9",
      "parents": [
        "112a6e4a4f01ebcd8064e64175163814e78cdadb"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Apr 30 00:27:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 21:57:14 2026 +0530"
      },
      "message": "feat(csharp): support nested container field codec (#3639)\n\n## Why?\n\nC# generated serializers need field-level schema descriptors that can\ndescribe the exact Fory wire type for scalars and nested containers. The\nprevious `[Field(Encoding \u003d ...)]` model only handled a narrow\ninteger-encoding override, which was not expressive enough for nested\nannotated container metadata or compatible-mode skipping based on remote\nfield metadata.\n\n## What does this PR do?\n\n- Replaces the C# `[Field]` / `FieldEncoding` API with `[ForyField]`,\nsupporting optional stable field ids and `Type \u003d typeof(S...)` schema\ndescriptors.\n- Adds `Apache.Fory.Schema.Types` descriptor marker types for scalar,\npacked-array, list, set, and map field metadata.\n- Extends the C# source generator to emit descriptor-driven field codecs\nfor scalar, list, and map payloads, including nested generics and\nnullability-aware generated read/write helpers.\n- Updates compatible field skipping so C# consumes payloads according to\nremote nested field metadata, including scalar, packed array, list/set,\nand map descriptors.\n- Updates the Fory compiler C# generator to emit `[ForyField(Type \u003d\ntypeof(...))]` hints, including nested map/list descriptors and\nreduced-precision `Half` / `BFloat16` carriers.\n- Adds C# runtime, compiler-generator, and xlang peer coverage for\nunsigned schema descriptors and nested annotated containers, and moves\nthe nested annotated container xlang checks to `CSharpXlangTest`.\n- Refreshes the C# README and field-configuration guide for the new\n`[ForyField]` descriptor API.\n\n## Related issues\n\n\n#1017 \n#3630 \n#3625 \n#3630 \n#3636\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- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "112a6e4a4f01ebcd8064e64175163814e78cdadb",
      "tree": "5e8f7fe68ab16a8fcb20eead842ea2f9db4b4671",
      "parents": [
        "6cb53a51d231779ae1697961ef4e422d17792ad0"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Apr 29 21:32:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 19:02:55 2026 +0530"
      },
      "message": "feat(cpp): add nested field codec support (#3636)\n\n## Why?\n\nC++ needs field metadata that can describe nested container key, value,\nand element encodings so generated C++ xlang structs can match IDL and\nJava metadata for maps, lists, optional wrappers, and integer encodings.\n\n## What does this PR do?\n\n- Embeds field metadata directly in `FORY_STRUCT` entries with\n`fory::F(...)` and adds recursive `fory::T` value-node specs for scalar,\nlist, set, map, and inner carrier nodes.\n- Make C++ struct and union serialization/type metadata paths to honor\nnested specs when writing, reading, and building `FieldType` metadata,\nincluding configured integer encodings inside lists, maps, and\noptionals.\n- Updates the C++ IDL generator to emit inline `FORY_STRUCT` metadata\ninstead of separate `FORY_FIELD_CONFIG` output and allows nested\ncollections for the C++ target.\n- Updates C++ docs, README examples, benchmark structs, and\npolymorphism/xlang guides to use the inline field configuration style.\n- Adds compiler, C++ struct, C++ xlang, and Java CPP xlang coverage for\nnested annotated containers in schema-consistent and compatible modes.\n\n## Related issues\n\n#1017 \n#3630 \n#3625 \n#3630 \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. C++ users configure field metadata inline in `FORY_STRUCT`,\nincluding nested `fory::T` specs; `FORY_UNION` cases also require\nexplicit `fory::F(id)` metadata. This does not intentionally change the\nbinary protocol; it enables C++ to emit and read existing nested xlang\nfield metadata.\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": "6cb53a51d231779ae1697961ef4e422d17792ad0",
      "tree": "cbe61b3a94f76fdfcfa209cd62e95ebbca2437b0",
      "parents": [
        "621e449a4e84b3b65a0a30f28db25289edcfd628"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Apr 29 16:21:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 13:51:52 2026 +0530"
      },
      "message": "refactor(cpp): remove abseil dependency (#3634)\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": "621e449a4e84b3b65a0a30f28db25289edcfd628",
      "tree": "425081287acde98c96e02d838772727de614d770",
      "parents": [
        "97f582f9e7ad89483b77de9f3f88b7d66a832727"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Apr 29 14:24:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 11:54:33 2026 +0530"
      },
      "message": "feat(java): support nested type-use serialization metadata (#3633)\n\n## Why?\n\nJava could not consistently carry integer encoding and unsigned type\nmetadata through nested generic type-use positions, so maps, lists,\nsets, primitive-list carriers, and compatible-mode skip paths could lose\nthe remote field metadata needed for correct xlang serialization. The\nJava unsigned APIs also used inconsistent `Uint*` naming and carrier\ntypes that did not match the unsigned ranges exposed to other languages.\n\n## What does this PR do?\n\n- Adds Java `TYPE_USE` support for integer metadata annotations and\npreserves nested `TypeExtMeta` through `TypeRef`, `GenericType`, type\ndefinitions, field metadata, resolvers, serializers, compatible skip\nlogic, and generated object codecs.\n- Renames and normalizes Java unsigned APIs around `UInt*`\nannotations/list carriers, `UInt*Elements` array metadata,\n`Int32Encoding`/`Int64Encoding`, and `int`/`long` carriers that can\nrepresent the unsigned ranges.\n- Updates Java IDL/codegen to emit `@ForyStruct` and nested integer\nannotations for generated generic containers, including corrected\nunsigned scalar carrier mappings.\n- Extends Java, Rust, and Swift xlang/integration coverage for nested\nannotated containers, compatible/schema-consistent round trips,\ncompatible missing/different field metadata, unsigned carrier\nvalidation, primitive arrays/lists, and generated Java output.\n- Refreshes docs, README examples, and xlang specs for\n`withXlang`/`withCompatible`, `@ForyStruct`, renamed integer\nannotations, nested generic annotation usage, and unsigned carrier\nrules; adds C++ IDL CMake build caching in CI.\n\n## Related issues\n\n#1017 \n#3630 \n#3625 \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": "97f582f9e7ad89483b77de9f3f88b7d66a832727",
      "tree": "2b862b9055c6478821591c1ba09d1d56af20d0e8",
      "parents": [
        "79aa38a285606b32911aca48d628226925e24092"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Apr 29 01:23:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 22:53:11 2026 +0530"
      },
      "message": "fix(python): enforce more checks in read (#3632)\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": "79aa38a285606b32911aca48d628226925e24092",
      "tree": "986c683578a1c4cce2a1e3d23c5626ce66569ca3",
      "parents": [
        "9ca6eff701f7b247cc41437d4baa7e2815740194"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Apr 29 01:04:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 22:34:56 2026 +0530"
      },
      "message": "feat: add nested container codec for rust (#3630)\n\n## Why?\n\nRust generated serializers need field-local codec selection so nested\ncontainer element/key/value metadata, nullability, reference tracking,\nand integer encodings can be represented consistently in compatible and\nxlang serialization. The Rust derive API also now distinguishes structs,\npure enums, and union-style enums instead of routing every data shape\nthrough one `ForyObject` derive.\n\n## What does this PR do?\n\n- Adds Rust field codecs for serializer-backed fields, options,\nlists/sets, maps, nested container entries, integer encodings, `Any`,\nand trait object fields.\n- Reworks `fory-derive` field binding, read, write, and metadata\ngeneration to dispatch through codecs when field annotations or nested\nmetadata require it, while preserving declared generic metadata for\nunannotated container fields.\n- Splits the Rust derive macros into `ForyStruct`, `ForyEnum`, and\n`ForyUnion`, with validation for applying each macro to the matching\nRust data shape.\n- Updates Rust IDL/codegen output to emit nested `list(...)` and\n`map(...)` field attributes and the new derive macros.\n- Updates Rust docs, README examples, benchmark fixtures, and tests from\n`ForyObject` to the new derive names.\n- Adds Rust coverage for nested codec annotations, compatible-mode\ninteger encoding mismatches, collection generic metadata,\ntrait-object/`Any` containers, and serialized benchmark payload sizes.\n- Adds a dedicated C++ IDL CI job setup and keeps the C++ xlang job\nnaming consistent.\n\n## Related issues\n\n#1017\n#3625\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- [x] Does this PR introduce any binary protocol compatibility change?\n\nRust users should derive `ForyStruct`, `ForyEnum`, or `ForyUnion`\ninstead of the previous `ForyObject` macro. Rust generated serializers\ncan now emit nested list/map field metadata and field-level codec\nbehavior for annotated containers.\n\n## Benchmark\n\nNo benchmark results are included in the PR diff. The Rust benchmark\ntest fixture now asserts serialized size baselines for the covered\npayloads."
    },
    {
      "commit": "9ca6eff701f7b247cc41437d4baa7e2815740194",
      "tree": "1d61c3da529fea32de32c672a81b647e8b751fd1",
      "parents": [
        "fdd1143eb297858fba0668a1e97447bff412ce5b"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Apr 28 21:33:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 19:03:29 2026 +0530"
      },
      "message": "feat(java): add schema typed row fields accessor (#3631)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\nCloses #3616\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": "fdd1143eb297858fba0668a1e97447bff412ce5b",
      "tree": "cca88dcbfa3d9577a82c8dc7134081bdc5e33df9",
      "parents": [
        "b6b18aaa29051c60595e5b4e15ca7914f29f634b"
      ],
      "author": {
        "name": "Sebastian Mandrean",
        "email": "sebastian.mandrean@gmail.com",
        "time": "Tue Apr 28 15:23:19 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 18:53:19 2026 +0530"
      },
      "message": "fix(java): preserve externalizable containers in compatible mode (#3628)\n\n## Why?\n\nFory can lose entries for compatible-mode map and collection classes\nthat implement `Externalizable` if they are handled as ordinary\ncontainers instead of using their externalization logic.\n\nThis fixes the data loss reported in #3621.\n\n## What does this PR do?\n\n- Adds a regression test for an `Externalizable` `AbstractMap` stored\nthrough a `Map\u003cString, String\u003e` field.\n- Routes `Externalizable` map and collection implementations through the\nJDK-compatible serializer path.\n- Delegates those containers to `ExternalizableSerializer` so\n`writeExternal` / `readExternal` preserve their state.\n\n## Related issues\n\n- Fixes #3621\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\nAI Usage Disclosure\n- substantial_ai_assistance: yes\n- scope: issue investigation, regression test drafting, code change\ndrafting, validation command selection, PR description drafting\n- affected_files_or_subsystems: Java serializer resolution, compatible\ncollection/map serializers, Java map serializer tests\n- ai_review: line-by-line self-review completed locally; required\ntwo-fresh-reviewer loop is pending, so this PR remains draft until final\nclean review evidence can be attached\n- ai_review_artifacts: pending; screenshot evidence or persisted links\nfor both fresh final clean AI reviews will be added before marking ready\nfor maintainer review\n- human_verification:\n- Reproduced the regression by applying the new test on `apache/main`,\nwhere it fails with `Maps do not have the same size:0 !\u003d 1`.\n- Verified the fixed branch with `mvn -pl fory-core\n-Dtest\u003dorg.apache.fory.serializer.collection.MapSerializersTest#testExternalizableMapCompatibleMode\ntest`.\n- Ran Java/style/install checks: `mvn -T10 -B --no-transfer-progress\nspotless:check checkstyle:check`, `python ./ci/run_ci.py java --version\n11`, `python ./ci/run_ci.py java --version 17`, `python ./ci/run_ci.py\njava --version 21`, `python ./ci/run_ci.py java --version 25`, `python\n./ci/run_ci.py java --install-fory`, and `mvn -T10\n--no-transfer-progress clean install -DskipTests\n-Dmaven.javadoc.skip\u003dtrue -Dmaven.source.skip\u003dtrue`.\n- performance_verification: N/A; correctness fix for `Externalizable`\ncontainer serializer selection in compatible mode, no benchmark run\n- provenance_license_confirmation: Apache-2.0-compatible provenance\nconfirmed; no incompatible third-party code introduced\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\nNot run. This is a correctness fix for existing compatible-mode\n`Externalizable` map/collection handling and does not intentionally\nchange public APIs or binary protocol format."
    },
    {
      "commit": "b6b18aaa29051c60595e5b4e15ca7914f29f634b",
      "tree": "5607719350a5285d9fa821cb7c14ec0887847fca",
      "parents": [
        "7bada44e5906bf5312457773d56d3a41bf17f9d3"
      ],
      "author": {
        "name": "Sebastian Mandrean",
        "email": "sebastian.mandrean@gmail.com",
        "time": "Tue Apr 28 13:49:14 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 17:19:14 2026 +0530"
      },
      "message": "fix(java): honor record field encoding in generated decode (#3626)\n\n## Why?\n\nJava record deserialization in generated compatible-mode serializers\nused type-level primitive decoding for nullable record fields. For boxed\nprimitive record components this could make the generated writer and\nreader choose different encodings, corrupting values during round trip.\n\nThis fixes the shared root cause for #3622 and #3624.\n\n## What does this PR do?\n\n- Adds a `ThreadSafeFory` cross-pool reproducer for a boxed `Long`\nrecord with number/string compression.\n- Adds a compatible-mode codegen reproducer for a record with boxed\n`Long` and `Integer` components matching #3622.\n- Decodes nullable record fields through descriptor-aware generated\nfield paths so read encoding matches write encoding.\n- Makes generated float/double literals locale-stable with\n`Locale.ROOT`.\n\n## Related issues\n\n- Fixes #3622\n- Fixes #3624\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\nContributor checklist for substantial AI assistance:\n\n- [x] Substantial AI assistance was used in this PR: `yes`\n- [x] If `yes`, I included the standardized `AI Usage Disclosure` block\nbelow.\n- [x] If `yes`, I can explain and defend all important changes without\nAI help.\n- [x] If `yes`, I reviewed AI-assisted code changes line by line before\nsubmission.\n- [x] If `yes`, I completed line-by-line self-review first and fixed\nissues before requesting AI review.\n- [x] If `yes`, I ran two fresh AI review agents on the current PR diff\nor current HEAD after the latest code changes: one using\n`.claude/skills/fory-code-review/SKILL.md` and one without that skill.\n- [ ] If `yes`, I addressed all AI review comments and repeated the\nreview loop until both AI reviewers reported no further actionable\ncomments.\n- [ ] If `yes`, I attached screenshot evidence of the final clean AI\nreview results from both fresh reviewers on the current PR diff or\ncurrent HEAD after the latest code changes in this PR body.\n- [x] If `yes`, I ran adequate local verification and recorded evidence\n(checks run locally or in CI, pass/fail summary, and confirmation I\nreviewed results).\n- [x] If `yes`, I added/updated tests and specs where required.\n- [ ] If `yes`, I validated protocol/performance impacts with evidence\nwhen applicable.\n- [x] If `yes`, I verified licensing and provenance compliance.\n\nAI Usage Disclosure\n\n- substantial_ai_assistance: yes\n- scope: code drafting, test drafting, PR description drafting\n- affected_files_or_subsystems: Java generated object codec/read path,\nJava record latest-JDK tests, generated literal codegen\n- ai_review: Pending final contributor line-by-line review and required\ntwo-reviewer AI review loop before maintainer review.\n- ai_review_artifacts: Pending; final clean review screenshots or\npersistent links have not yet been attached.\n- human_verification: Pending contributor review. Local verification was\nrun in this workspace; each command and result is listed below.\n- PASS: `mvn -pl fory-latest-jdk-tests -am\n-Dtest\u003dorg.apache.fory.integration_tests.RecordSerializersTest#testCompatibleCodegenBoxedPrimitiveRecordRoundTrip\n-Dsurefire.failIfNoSpecifiedTests\u003dfalse test`\n- PASS: `mvn -pl fory-latest-jdk-tests -am\n-Dtest\u003dorg.apache.fory.integration_tests.RecordSerializersTest\n-Dsurefire.failIfNoSpecifiedTests\u003dfalse test`\n- PASS: `ENABLE_FORY_DEBUG_OUTPUT\u003d1 mvn -pl fory-latest-jdk-tests -am\n-Dtest\u003dorg.apache.fory.integration_tests.RecordSerializersTest,org.apache.fory.integration_tests.RecordXlangTest\n-Dsurefire.failIfNoSpecifiedTests\u003dfalse test`\n- PASS: `ENABLE_FORY_DEBUG_OUTPUT\u003d1 mvn -pl fory-core -am\n-Dtest\u003dorg.apache.fory.serializer.CodegenSerializerTest,org.apache.fory.builder.ObjectCodecBuilderTest\n-Dsurefire.failIfNoSpecifiedTests\u003dfalse test`\n- PASS: `mvn -pl fory-core,fory-latest-jdk-tests -DskipTests\nspotless:check checkstyle:check` (Maven reported cached metadata\nwarnings for `global-maven-virtual`, but the build completed\nsuccessfully.)\n- performance_verification: No benchmark run; this is a targeted Java\ngenerated-code bug fix. No public API or binary protocol compatibility\nchange is intended.\n- provenance_license_confirmation: Locally-authored changes only; no\nthird-party code introduced.\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 Java generated-code bug fix; no benchmark was\nrun."
    },
    {
      "commit": "7bada44e5906bf5312457773d56d3a41bf17f9d3",
      "tree": "60bdee310be68335d409add438280600c78bbb1b",
      "parents": [
        "3b68521e36544192ddfc3d64f23bb96c47ba2088"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Apr 28 18:48:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 18:48:20 2026 +0800"
      },
      "message": "feat(swift): nested container override support for swift (#3625)\n\n## Why?\n\nSwift needed first-class support for nested container overrides and\ngenerated type hints so schema-driven models can express collection and\nmap payload encodings without ad hoc wrappers. The same change also\ncleans up the Swift annotation surface by splitting the old catch-all\nmodel macro into explicit struct, enum, and union macros.\n\n## What does this PR do?\n\n- Replaces the Swift `@ForyObject` model macro usage with dedicated\n`@ForyStruct`, `@ForyEnum`, `@ForyUnion`, and `@ForyCase` annotations\nacross the runtime, generated code, benchmarks, docs, and tests.\n- Extends the compiler parser/translator/generator so map value\noptional/ref metadata and nested list/map type hints are preserved and\nemitted into generated Swift field annotations.\n- Adds Swift-side nested container override support, payload/type-hint\ndiagnostics, unsigned field encoding coverage, `BFloat16` defaults, and\n`Duration` type mapping.\n- Updates Swift compatibility, xlang, macro diagnostic, and\nIDL/integration coverage to exercise the new annotation surface and\nnested container behavior.\n- Tightens repo guidance around warning-free builds for several runtimes\nand ignores Swift build directories created by the new test and\ngeneration flow.\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\nYes for Swift users. The public annotation surface now uses\n`@ForyStruct`, `@ForyEnum`, `@ForyUnion`, `@ForyCase`, `@ListField`, and\n`@MapField` instead of relying on `@ForyObject` plus wrapper types for\nnested container overrides and some unsigned encodings.\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": "3b68521e36544192ddfc3d64f23bb96c47ba2088",
      "tree": "c89fae78b475e6388ac9a247faba91b14dd39f96",
      "parents": [
        "62b0d91fc1bea1a34c15e3416c0b1f0bc7540437"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Mon Apr 27 17:49:30 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 17:49:30 2026 +0530"
      },
      "message": "fix(go): add configurable fieldCount and fieldDepth guardrails (#3620)\n\n## Why?\nMalicious payloads could specify a massive `fieldCount`, causing the\nruntime to attempt an unbounded memory allocation.\nDeeply nested schema definitions (like a LIST of LIST...) could trigger\nunbounded recursion, exceeding the goroutine stack limit and crashing\nthe process.\n\n## What does this PR do?\nAdded a hard limit of 10,000 fields and a buffer-remaining check in\ndecodeTypeDef to prevent massive slice allocations.\nAdded a depth parameter to `readFieldType` and `readFieldTypeWithFlags`,\ncapping nested schema definitions at a maximum depth of 64.\n\n## Related issues\nCloses #3619 \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": "62b0d91fc1bea1a34c15e3416c0b1f0bc7540437",
      "tree": "345a3015a76e8b9d068fe602289ef3b0eb805f2b",
      "parents": [
        "b2d41923ee768f7a711c1c6b5cd78e862a1cb034"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Mon Apr 27 15:24:16 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 27 15:24:16 2026 +0530"
      },
      "message": "fix(go): added maxBinarySize limit to decimal deserialization (#3623)\n\n## Why?\nthe deserialization of arbitrary-precision DECIMAL numbers involves\nreading a magnitude payload byte array. The length of this payload is\nderived from the header\u0027s metadata and is completely\nattacker-controlled.\n\n## What does this PR do?\nuse `ctx.ReadBinaryLength()` which correctly enforces `maxBinarySize`\nguardrails.\n\n\n## Related issues\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": "b2d41923ee768f7a711c1c6b5cd78e862a1cb034",
      "tree": "12f3a1358044008da24a99e6a0e3885a75879976",
      "parents": [
        "a3845c374722c774e3e562278bde4cab44991bb9"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Sat Apr 25 17:29:12 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 25 17:29:12 2026 +0530"
      },
      "message": "fix(go): added pre-allocation bounds checks for slices and strings (#3618)\n\n## Why?\n\nThe code immediately allocated bytes based on the untrusted size. If any\nuser sent a size of 2 billion but only actually sent 5 bytes of data,\nthe server would instantly try to allocate 2GB of RAM. If many such\nrequests were sent, the server would run out of memory (OOM) and crash.\n\n## What does this PR do?\nAdd check which ensures we never allocate memory for data that hasn\u0027t\nactually arrived yet. It forces the allocation to be bounded by the\nphysical size of the data we have already received and verified.\n\n## Related issues\nCloses #3617 \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": "a3845c374722c774e3e562278bde4cab44991bb9",
      "tree": "6132e17ccd95a116b246c9dabf9cbd6ce3c48ed8",
      "parents": [
        "b20311fe15839e39b6b21ac28587424a62d3e3ab"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Fri Apr 24 17:44:40 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 24 17:44:40 2026 +0530"
      },
      "message": "fix(go): add bound checking for refResolver and metaStringResolver reads (#3615)\n\n## Why?\nThis PR addresses two critical security vulnerabilities in the Fory Go\nruntime.\nBoth issues stemmed from trusting integer values (references/indices)\nread directly from the wire. A maliciously crafted payload could provide\nan out-of-bounds index (either too large or negative), triggering a\nruntime panic. In a server environment, this would allow an attacker to\nperform a Denial of Service (DoS) attack by crashing the Go process with\na single malicious packet.\n\n## What does this PR do?\n\n- Bounds Checking in `RefResolver`: added an upper-bound check in\n`GetReadObject` to ensure `refId` does not exceed the size of the\n`readObjects` slice.\n- Bounds Checking in `MetaStringResolver`: added a lower-bound check in\n`ReadMetaStringBytes` to prevent negative index panics (e.g., when a\nheader value of 1 is provided).\n- Security \u0026 Regression Tests:\nAdded unit tests in `ref_resolver_test.go` and\n`meta_string_resolver_test.go` that specifically reproduce the OOB and\nnegative-index panics.\n- Added boundary regression tests to verify that valid edge cases\n(indices 0 and `len-1`) still function correctly.\n\n## Related issues\nCloses #3614 \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\nN/A"
    },
    {
      "commit": "b20311fe15839e39b6b21ac28587424a62d3e3ab",
      "tree": "bfa1fd57156ac9d83d3f8dbd59371061c834455b",
      "parents": [
        "1d1417cb1457b6c04207cc1c26402b8c591f2a79"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Fri Apr 24 17:43:59 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 24 17:43:59 2026 +0530"
      },
      "message": "fix(go): ensure physical buffer space for unsafe varint fast-paths (#3613)\n\n## Why?\n\nThe Go runtime\u0027s struct serialization fast-path in `struct.go` violates\nthe documented contract of `UnsafePutVarUint32` and\n`UnsafeReadVarUint32` in `buffer.go`.\n- `UnsafePutVarUint32` documents that the caller must call `Reserve(8)`\n(because it performs an 8-byte bulk write for 5-byte varints), but\n`struct.go` only calls `Reserve(MaxVarintSize)`, which is 5 for\nuint32/int32 varint fields.\n- `UnsafeReadVarUint32` physically reads 8 bytes, but the fast-path\nguard in `struct.go` only checks `remaining() \u003e\u003d MaxVarintSize` (which\ncan be 5).\n## What does this PR do?\n\n\n- Add +8 byte padding to struct varint reservation and remaining-check\nguardrails in struct.go. This ensures that the underlying unsafe bulk\nmemory operations (8-byte loads/stores) always stay within the allocated\nbacking array, even when the logical varint size is smaller (e.g., 5\nbytes).\n\n- Includes a regression test in buffer_test.go verifying the physical\nwrite width of `UnsafePutVarUint32`.\n## Related issues\n\nCloses #3612 \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": "1d1417cb1457b6c04207cc1c26402b8c591f2a79",
      "tree": "b392fad0ccb4485afbbab4cfa8c785ae573aeeef",
      "parents": [
        "d846e45f8a28253f4044a82038119fc406578a65"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Fri Apr 24 10:08:11 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 24 10:08:11 2026 +0530"
      },
      "message": "fix(dart): added \u003c\u003c\u003c for correct logical right shift semantics in uint (#3607)\n\n## Why?\n\nThe unsigned integer wrapper classes in Fory\u0027s Dart implementation\n(specifically `Uint64`) implement the right shift `\u003e\u003e` operator by\ndelegating directly to Dart\u0027s native `int.operator \u003e\u003e`. In Dart, `\u003e\u003e`\nperforms an arithmetic (sign-extending) right shift.\n## What does this PR do?\n\nImplement the operator \u003e\u003e\u003e (logical right shift) for all unsigned\ninteger wrappers to expose a proper logical shift API.\n\n## Related issues\n#3606 \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"
    },
    {
      "commit": "d846e45f8a28253f4044a82038119fc406578a65",
      "tree": "8c2d970eb2f4df423b9f80c880c1fd0ac5327981",
      "parents": [
        "b71db8a187e2b56c82e572daea72120c0b359b68"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Apr 23 20:57:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 18:27:28 2026 +0530"
      },
      "message": "docs: add more agent harness rules (#3610)\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": "b71db8a187e2b56c82e572daea72120c0b359b68",
      "tree": "30df669545a81b6d83d4b210ee2478e339a0749b",
      "parents": [
        "1d2bea83018977405a9f0ace8db5fa774a6709bf"
      ],
      "author": {
        "name": "Yash Agarwal",
        "email": "144949452+yash-agarwa-l@users.noreply.github.com",
        "time": "Thu Apr 23 18:04:08 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 18:04:08 2026 +0530"
      },
      "message": "perf(dart): typed-container write fast path with scan elimination (#3609)\n\n## Why?\nWriting `List\u003cT\u003e` / `Set\u003cT\u003e` struct fields paid an O(n) scan to detect\nheterogeneous types and nulls. Codegen already knows the element type is\nconcrete and non-nullable — the scan is pure overhead.\n## What does this PR do?\n- Adds `writeTypedListPayload\u003cT\u003e` / `writeTypedSetPayload\u003cT\u003e` that\nresolve `TypeInfo` once and write the header/type-meta without scanning.\n- Adds `writeGeneratedDirectListValue\u003cT\u003e` /\n`writeGeneratedDirectSetValue\u003cT\u003e` generated-code entry points.\n- Adds a codegen predicate (gated on real Dart `DartType` nullability)\nthat emits the fast path for non-nullable, non-ref, non-dynamic list/set\nfields; everything else keeps the existing slow path.\n## Related issues\n#3558\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## 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?\nNo user-facing or wire-format change. Serialized bytes are\nbyte-identical to main.\n   \n## Benchmark\n   \n| Datatype | Operation | Fory TPS | Protobuf TPS | Fastest |\n| ---------------- | ----------- | --------: | -----------: |\n------------ |\n| Struct | Serialize | 4,696,615 | 1,998,625 | fory (2.35x) |\n| Struct | Deserialize | 5,815,245 | 4,173,568 | fory (1.39x) |\n| Sample | Serialize | 1,744,871 | 481,801 | fory (3.62x) |\n| Sample | Deserialize | 2,007,877 | 780,317 | fory (2.57x) |\n| MediaContent | Serialize | 944,111 | 398,324 | fory (2.37x) |\n| MediaContent | Deserialize | 1,457,065 | 675,724 | fory (2.16x) |\n| StructList | Serialize | 1,981,716 | 351,853 | fory (5.63x) |\n| StructList | Deserialize | 2,261,436 | 596,027 | fory (3.79x) |\n| SampleList | Serialize | 426,153 | 46,590 | fory (9.15x) |\n| SampleList | Deserialize | 479,900 | 99,694 | fory (4.81x) |\n| MediaContentList | Serialize | 220,342 | 76,330 | fory (2.89x) |\n| MediaContentList | Deserialize | 341,839 | 131,730 | fory (2.60x) |"
    },
    {
      "commit": "1d2bea83018977405a9f0ace8db5fa774a6709bf",
      "tree": "7351597d56e56464c7b96802628b8d8a22dbc2b8",
      "parents": [
        "ad80be2e31b6120413edb2add97c2f6389284314"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Apr 23 19:03:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 19:03:48 2026 +0800"
      },
      "message": "feat(dart): support dart web platform (#3608)\n\n## Why?\n\nDart web builds use JavaScript number semantics, so raw Dart `int`\ncannot safely represent the full 64-bit value space used by Fory xlang\ninteger encodings. The Dart runtime needs browser-compatible buffer,\ngenerated serializer, and 64-bit wrapper implementations that preserve\nwire compatibility instead of silently corrupting JS-unsafe values.\n\n\n## What does this PR do?\n\n- Adds Dart web support through conditional native/web implementations\nfor `Buffer`, generated cursors, and `Int64` / `Uint64` value and list\nwrappers.\n- Updates code generation and serializers to handle full-range signed\nand unsigned 64-bit fields on web, while keeping Dart `int` fast paths\nfor JS-safe values.\n- Adds explicit range checks so web builds reject JS-unsafe Dart `int`\nconversions instead of writing or reading imprecise bytes.\n- Extends Dart serializer, buffer, generated-field, numeric-wrapper,\ntyped-array, and time tests for 64-bit edge cases and browser behavior.\n- Adds Chrome test coverage to CI with `dart test -p chrome` for the\nDart package.\n- Documents Dart web support, 64-bit integer rules, custom serializer\nguidance, and troubleshooting steps.\n\n\n## Related issues\n\nCloses #3600\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. Dart users can now use generated serializers and manual serializers\non web/browser targets. Full-range 64-bit values should use `Int64` or\n`Uint64`; Dart `int` fields remain limited to JS-safe values on web.\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\u003cimg width\u003d\"4200\" height\u003d\"900\" alt\u003d\"throughput\"\nsrc\u003d\"https://github.com/user-attachments/assets/ca422bc6-5345-4560-a35a-2678f4c54b9c\"\n/\u003e\n\n| Datatype | Operation | Fory TPS | Protobuf TPS | Fastest |\n| ---------------- | ----------- | --------: | -----------: |\n------------ |\n| Struct | Serialize | 5,041,693 | 2,073,839 | fory (2.43x) |\n| Struct | Deserialize | 6,395,290 | 4,991,881 | fory (1.28x) |\n| Sample | Serialize | 1,783,688 | 552,140 | fory (3.23x) |\n| Sample | Deserialize | 2,124,197 | 934,794 | fory (2.27x) |\n| MediaContent | Serialize | 952,498 | 438,419 | fory (2.17x) |\n| MediaContent | Deserialize | 1,649,039 | 737,340 | fory (2.24x) |\n| StructList | Serialize | 1,945,119 | 399,007 | fory (4.87x) |\n| StructList | Deserialize | 2,119,403 | 764,832 | fory (2.77x) |\n| SampleList | Serialize | 475,413 | 52,512 | fory (9.05x) |\n| SampleList | Deserialize | 508,939 | 116,236 | fory (4.38x) |\n| MediaContentList | Serialize | 224,925 | 84,860 | fory (2.65x) |\n| MediaContentList | Deserialize | 387,070 | 154,392 | fory (2.51x) |"
    },
    {
      "commit": "ad80be2e31b6120413edb2add97c2f6389284314",
      "tree": "46eeb9936293b450ea37cad6f50303f394815fe9",
      "parents": [
        "bda7d80b27059e0175598916da1939677c27d34a"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Apr 22 23:13:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 20:43:14 2026 +0530"
      },
      "message": "feat(xlang): add bfloat16 support (#3605)\n\n## Why?\n\nAdd cross-language `bfloat16` support alongside the existing\nreduced-precision `float16` support so reduced-precision scalars and\ndense arrays can round-trip across runtimes with spec-backed behavior\nand documentation.\n\n\n## What does this PR do?\n\n- adds `bfloat16` scalar and array/list carriers plus\nserializer/type-resolution wiring in Java, C++, C#, Python, Go, and\nRust, with the generated/object-codec paths updated where needed\n- extends xlang and schema-evolution handling for reduced-precision\nfields, including array skip logic and field-ordering/type-id fixes\nrequired for consistent cross-language behavior\n- adds cross-language coverage for reduced-precision structs and updates\nruntime tests across the touched implementations\n- refreshes the xlang specification, type-mapping docs, and language\nguides/READMEs to document `bfloat16` and reduced-precision array\nsupport\n\n## Related issues\n\n#1017 \nCloses #3286 \nCloses #3283\nCloses #3285 \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": "bda7d80b27059e0175598916da1939677c27d34a",
      "tree": "f7e4a0719c4e55b099d200bae54b9af1a05fdf61",
      "parents": [
        "ee7d6b80e9a0383793e4d4abb93fca4363465b7e"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Apr 22 17:33:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 15:03:07 2026 +0530"
      },
      "message": "fix(javascript): fix javascript schema idl tests (#3604)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n#3394\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": "ee7d6b80e9a0383793e4d4abb93fca4363465b7e",
      "tree": "42ec3b2521b7d3c8c72de7a9edcf30e4a2caea94",
      "parents": [
        "370addbfc59398f0b83a60f6e23213cfb710c24b"
      ],
      "author": {
        "name": "Emrul",
        "email": "emrul@emrul.com",
        "time": "Wed Apr 22 07:45:37 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 12:15:37 2026 +0530"
      },
      "message": "fix(javascript): align TypeMeta preamble constants with python/java/rust/go xlang bindings (#3603)\n\n## Why?\n\n`@apache-fory/core`\u0027s `NAMED_COMPATIBLE_STRUCT` TypeMeta preamble is not\nbyte-compatible with pyfory, fory-java, fory-rust, or fory-go. For the\nsame logical struct, the JavaScript binding emits an 8-byte int64 header\nthat no other binding can read. I noticed this as part of issue #3602.\n\nWith this patch my cross-language tests pass, but I don\u0027t know if this\nis entirely correct — I\u0027d appreciate a deeper review from someone who\nknows the TypeMeta spec better than I do (especially around the\nsigned-vs-unsigned hash interpretation in `prependHeader`).\n\n## What does this PR do?\n\nAligns four constants / behaviours in\n`javascript/packages/core/lib/meta/TypeMeta.ts` with what every other\nxlang binding does at 0.17:\n\n| Constant / behaviour | JS before | python / java / rust / go |\nReference |\n\n|----------------------|-----------|---------------------------|-----------|\n| `NUM_HASH_BITS` | `41` | `50` | `python/pyfory/meta/typedef.py:37`,\n`java/.../meta/TypeDef.java:77`,\n`rust/fory-core/src/meta/type_meta.rs:76`, `go/fory/type_def.go:35` |\n| `COMPRESS_META_FLAG` | `1n \u003c\u003c 63n` | `1 \u003c\u003c 9` | same files |\n| `HAS_FIELDS_META_FLAG` | `1n \u003c\u003c 62n` | `1 \u003c\u003c 8` | same files |\n| hash read in `prependHeader` | unsigned `BigInt` built from two\n`uint32` halves via `getUint32(0, false) \u003c\u003c 32n \\| getUint32(4, false)`\n| signed `int64` | pyfory unpacks `int64_t[0]`, fory-java\n`murmurhash3_x64_128(...)[0]` returns `long`, rust `.0 as i64` |\n\nOn the hash read specifically: reading the same 8 bytes as unsigned\n`BigInt` never produces a negative value, so the subsequent `abs()` is\neffectively a no-op. Whenever the hash\u0027s high bit is set, the resulting\nheader diverges from what the other bindings emit for the same struct.\nThe patch uses `hash.getBigInt64(0, false)` (signed read) followed by\nexplicit arbitrary-precision `abs()` + 63-bit mask, mirroring pyfory\u0027s\n`abs(hash) \u0026 0x7FFFFFFFFFFFFFFF`.\n\nEmpirical reproduction (fory-core 0.17.0 on every binding, matching\nconfig `xlang\u003dtrue, ref\u003dtrue, compatible\u003dtrue`, NAMED_COMPATIBLE_STRUCT\nvia `(namespace, typename)` registration):\n\n```python\n# python\nimport pyfory, dataclasses\n@dataclasses.dataclass\nclass Point:\n    x: pyfory.int32 \u003d 0\n    y: pyfory.int32 \u003d 0\nf \u003d pyfory.Fory(xlang\u003dTrue, ref\u003dTrue, compatible\u003dTrue)\nf.register_type(Point, namespace\u003d\u0027demo\u0027, typename\u003d\u0027Point\u0027)\nprint(f.serialize(Point(x\u003d10, y\u003d20)).hex(\u0027 \u0027))\n```\n\n```java\n// java\nFory fory \u003d Fory.builder()\n    .withLanguage(Language.XLANG)\n    .withRefTracking(true)\n    .withCompatibleMode(CompatibleMode.COMPATIBLE)\n    .build();\nfory.register(Point.class, \"demo\", \"Point\");\nbyte[] out \u003d fory.serialize(new Point(10, 20));\n```\n\n```typescript\n// javascript\nconst fory \u003d new Fory({ ref: true, compatible: true });\nconst ti \u003d Type.struct({ namespace: \u0027demo\u0027, typeName: \u0027Point\u0027 },\n  { x: Type.varInt32(), y: Type.varInt32() },\n  { withConstructor: true });\nti.initMeta(Point);\nconst reg \u003d fory.register(Point);\nconsole.log(Array.from(reg.serialize({ x: 10, y: 20 })));\n```\n\nBefore this PR:\n- python / java / rust / go all produce  \n`02 00 1e 00 10 01 d2 92 ce 5f 2b 73 22 0d 0c 8c 70 13 bd c8 6c c0 40 05\n5c 40 05 60 14 28` (30 bytes)\n- javascript produces  \n`02 ff 1e 00 10 00 00 ad 86 c0 98 d5 23 15 31 12 92 1c d0 2d f6 53 04 e9\n2e c4 92 7b 9b 22 00 58 07 …`\nThe field-descriptor and value bytes align once you get past the\npreamble, but the 8-byte int64 header and the byte-1 reference flag\ndiverge. `pyfory.deserialize(jsBytes)` silently returns `Point(x\u003d0,\ny\u003d0)` (every field unmatched, falls through to defaults);\n`fory.deserialize(jsBytes)` in Java throws `DeserializationException:\nread objects are: [null]`.\n\nAfter this PR: javascript produces byte-identical output to python /\njava / rust / go, and each binding can decode every other binding\u0027s\nbytes. Ran manual round-trip against both pyfory 0.17 and fory-java 0.17\nwith a Point struct and with a richer struct containing strings, a\n`list\u003cstring\u003e`, and int/float fields — both succeed.\n\n## Related issues\n\n- #3602\n\n## AI Contribution Checklist\n\n- [x] Substantial AI assistance was used in this PR: **no** (a couple of\nlines of constant alignment; no architectural or API decisions)\n- [ ] If `yes`, I included a completed AI Contribution Checklist in this\nPR 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? — **No.**\n- [x] Does this PR introduce any binary protocol compatibility change? —\n**Yes:** this fixes the JavaScript binding\u0027s TypeMeta preamble so it\nmatches the canonical wire format the other bindings have been\nproducing. Existing `@apache-fory/core` clients communicating only with\neach other will continue to work (same-binding output still\nround-trips). Any persisted JS-produced bytes, or in-flight messages\nrelying on JS-specific preamble, will no longer be readable. Given\ncross-binding interop was broken on 0.17 anyway, practical impact should\nbe small.\n\n## Benchmark\n\nNot applicable — constant alignment with no hot-path change."
    },
    {
      "commit": "370addbfc59398f0b83a60f6e23213cfb710c24b",
      "tree": "baf0c373c4b49f310453e99687cf72d9a2fa3ad1",
      "parents": [
        "62283f8d5da1a2c2b36c0f74aa16b5effd9a5c36"
      ],
      "author": {
        "name": "Geethapranay1",
        "email": "161115788+Geethapranay1@users.noreply.github.com",
        "time": "Wed Apr 22 08:32:04 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 08:32:04 2026 +0530"
      },
      "message": "refactor(dart): aligned dart internal implementation (#3601)\n\n## Why?\nThe dart implementation\u0027s internal collections and map serializers were\npreviously structured differently than the java and c# runtimes, using\nraw hex bitmasks and monolithic methods which made reading the code\ndifficult.\n\n\n\n\n## What does this PR do?\n- extracts chunk/header magic numbers into `MapFlags` and\n`CollectionFlags`.\n- breaks down `ListSerializer.writePayload` into\n`_writeSameTypeElements` and `_writeDifferentTypeElements`.\n- adds identical depth getters to writecontext and readcontext.\n- maintained dart proper `maxDepth` spec enforcement on both read/write\nbounds.\n\n\n\n\n## Related issues\nFixes #3595\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": "62283f8d5da1a2c2b36c0f74aa16b5effd9a5c36",
      "tree": "13bbba71328f7944891397820c2f9ef761f70452",
      "parents": [
        "1de178f21dba979ffb972e4b67f1858648828bb5"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Apr 22 01:49:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 01:49:26 2026 +0800"
      },
      "message": "feat(xlang): add decimal and align serializers for xlang (#3599)\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": "1de178f21dba979ffb972e4b67f1858648828bb5",
      "tree": "e8364f8509592453f543f60b8a0ff8e24b5c3187",
      "parents": [
        "7b6be90dc39119247589f8df53fe2e2d29590521"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Apr 21 16:18:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 13:48:36 2026 +0530"
      },
      "message": "chore(dart): refine dart xlang serialization (#3596)\n\n## Why?\n\n\n\n## What does this PR do?\n\n- comprehensive tests\n- align time serializers\n- refactor fixed int support\n- add bfloat16/float16 support\n\n\n## Related issues\n\n#1194 \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\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": "7b6be90dc39119247589f8df53fe2e2d29590521",
      "tree": "fa22e0152d80cc72de463b458a73ed788d5e92d5",
      "parents": [
        "f5646ab2446413333c674ad622ef8cca28c2127a"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Apr 21 16:18:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 13:48:24 2026 +0530"
      },
      "message": "fix(c++): fix c++ duration serialization (#3598)\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": "f5646ab2446413333c674ad622ef8cca28c2127a",
      "tree": "6faaa2f37b40c11d82a66abbb78aafc72ef0efbe",
      "parents": [
        "b4d7ad3b9c658ee36df093f1ac6f9db552ae601f"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Apr 21 14:03:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 11:33:30 2026 +0530"
      },
      "message": "chore(csharp): add more csharp and swift tests (#3597)\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": "b4d7ad3b9c658ee36df093f1ac6f9db552ae601f",
      "tree": "392f1ecb7fb4b7e303662b3122137efb1f98b477",
      "parents": [
        "87b0a2ec3173744aa28b22654785e6edfb13578a"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Mon Apr 20 19:25:57 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 19:25:57 2026 +0530"
      },
      "message": "fix(dart): use getUint32 for correctly encoding u64 value (#3592)\n\n## Why?\n`getInt32` treats the top bit as a sign bit. For large values where that\nbit is set (0xFFFFFFFE), the number comes back negative. Even though \u003e\u003e\u003e\nis unsigned shift, it is shifting the already-corrupted signed value,\ngarbage in, garbage out.\n## What does this PR do?\nUse `getUint32` instead.\n`getUint32` has no sign bit, so all 32 bits are treated as magnitude.\n## Related issues\nN/A\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": "87b0a2ec3173744aa28b22654785e6edfb13578a",
      "tree": "e7e69751f097fc320667d3835915a95d6ece8a23",
      "parents": [
        "3c9c999c07278a5aa630cc1514fc1b81595fe8fb"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 20 21:08:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 18:38:36 2026 +0530"
      },
      "message": "chore(dart): add missing license headers (#3594)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n#3592 \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": "3c9c999c07278a5aa630cc1514fc1b81595fe8fb",
      "tree": "255749a3c6894b990b9930e29d1d54f002398932",
      "parents": [
        "37b5ce17922b02e99d8e37410c07ff01d7e2dd49"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 20 20:52:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 18:22:12 2026 +0530"
      },
      "message": "refactor(rust): move Fory configuration to builder (#3593)\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": "37b5ce17922b02e99d8e37410c07ff01d7e2dd49",
      "tree": "9345130a1f6e29a86a28cf58445ddd2ef7c5c647",
      "parents": [
        "a6fdcfb9eb58545a5e9964901968ef5f8fa9c57b"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 20 20:08:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 17:38:42 2026 +0530"
      },
      "message": "docs: move development guide to docs root (#3591)\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": "a6fdcfb9eb58545a5e9964901968ef5f8fa9c57b",
      "tree": "c0ac7168c52dd62a4d3cdea20807efbca455f662",
      "parents": [
        "8acc76ecf0bfe94e27bbd50cdd59182dfbd00b79"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 20 18:45:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 18:45:05 2026 +0800"
      },
      "message": "chore(rust): refine varint read/write method name (#3590)\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": "8acc76ecf0bfe94e27bbd50cdd59182dfbd00b79",
      "tree": "c20d11870b8c2dba1e2e56a87aa566bb081fa4f6",
      "parents": [
        "621ee531820c3239e2a68a045daa11f2ff3705a0"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 20 15:41:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 13:11:19 2026 +0530"
      },
      "message": "docs: rename graalvm_support.md to graalvm-support.md (#3589)\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": "621ee531820c3239e2a68a045daa11f2ff3705a0",
      "tree": "77d4b8bf8b4a246d2dc5b9628427b94ff532b1c2",
      "parents": [
        "b40a2ec86570599b4c260c2c262709f9a6612b2a"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 20 13:39:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 11:09:31 2026 +0530"
      },
      "message": "docs(java): update graalvm guide location (#3588)\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": "b40a2ec86570599b4c260c2c262709f9a6612b2a",
      "tree": "54cb4ef6299b7c6acc7f9e2d90341c8432f36e91",
      "parents": [
        "b32f3a8a6eb3dd97193b09763b834231034ae9e3"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 20 01:03:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 22:33:06 2026 +0530"
      },
      "message": "docs: add NuGet badge (#3587)\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": "b32f3a8a6eb3dd97193b09763b834231034ae9e3",
      "tree": "3c693d90580d90b1fcc44774b19501434bf307fa",
      "parents": [
        "3e6ec433740edf05b49276a7888f91f620060d7c"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 20 00:52:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 00:52:58 2026 +0800"
      },
      "message": "fix(dart): fix dart ci (#3586)\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": "3e6ec433740edf05b49276a7888f91f620060d7c",
      "tree": "83f0faba7bea7baa7ef304004a1458241b261a45",
      "parents": [
        "53452563dc8315712475324da01a2a7042812bfc"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 20 00:25:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 21:55:33 2026 +0530"
      },
      "message": "fix(dart): resolve fory pub.dev score issues (#3585)\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": "53452563dc8315712475324da01a2a7042812bfc",
      "tree": "6a2bcd96098f677661454bc980e8b9f3f54abc50",
      "parents": [
        "535e6206fbf804428ad57ad07f218560875567b5"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 20 00:08:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 21:38:07 2026 +0530"
      },
      "message": "chore: skip auto release for tag starts with go (#3584)\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": "535e6206fbf804428ad57ad07f218560875567b5",
      "tree": "054bd2417347f16f2e17cc4ed15fe4e8f7fd50d0",
      "parents": [
        "3e94a45724dff40662b07455084ebdc968603bed"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sun Apr 19 23:43:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 21:13:06 2026 +0530"
      },
      "message": "chore: bump releasse version to 0.17.0 (#3583)\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": "3e94a45724dff40662b07455084ebdc968603bed",
      "tree": "defc0e248402b78793bafc73a0a4cccaed7a667a",
      "parents": [
        "cf3656af20e2c095f79fe1b5e322052803aca74c"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Sun Apr 19 20:26:34 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 20:26:34 2026 +0530"
      },
      "message": "feat(rust): add configurable size guardrails (#3579)\n\n## Why?\nTo prevent excessive allocation from malicious untrusted payloads in the\nRust runtime.\n\n## What does this PR do?\nThis brings the Rust implementation into parity with the C++ runtime by\nintroducing configurable guardrails for binary sizes and collection\ncounts.\n\n## Related issues\n#3409 \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- [x] Substantial AI assistance was used in this PR: `yes` / `no`\n- [x] If `yes`, I included the standardized `AI Usage Disclosure` block\nbelow.\n- [x] If `yes`, I can explain and defend all important changes without\nAI help.\n- [x] If `yes`, I reviewed AI-assisted code changes line by line before\nsubmission.\n- [x] If `yes`, I completed line-by-line self-review first and fixed\nissues before requesting AI review.\n- [x] If `yes`, I ran two fresh AI review agents on the current PR diff\nor current HEAD after the latest code changes: one using\n`.claude/skills/fory-code-review/SKILL.md` and one without that skill.\n- [x] If `yes`, I addressed all AI review comments and repeated the\nreview loop until both ai reviewers reported no further actionable\ncomments.\n- [ ] If `yes`, I attached screenshot evidence of the final clean AI\nreview results from both fresh reviewers on the current PR diff or\ncurrent HEAD after the latest code changes in this PR body.\n- [ ] If `yes`, I ran adequate human verification and recorded evidence\n(checks run locally or in CI, pass/fail summary, and confirmation I\nreviewed results).\n- [x] If `yes`, I added/updated tests and specs where required.\n- [x] If `yes`, I validated protocol/performance impacts with evidence\nwhen applicable.\n- [x] If `yes`, I verified licensing and provenance compliance.\n\nAI Usage Disclosure (only when substantial AI assistance \u003d `yes`):\n\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```\nThe implementation looks solid, matches the C++ reference implementation accurately, and is ready for the main branch. I\u0027ve reviewed your code changes across config.rs, context.rs, and the serializer module, verifying edge cases and consistency.\n\nHere are the key aspects that verify the correctness of the Rust implementation:\n\nGuardrail Logic Parity with C++:\n\nmax_collection_size correctly intercepts untrusted payload lengths before large iterations or memory allocations occur in Vec, HashMap, BTreeMap, and other collection variants. This perfectly encapsulates the C++ read_collection_data_slow patterns.\nmax_binary_size accurately targets raw-byte slice operations across primitive_list.rs without inappropriately restricting types like String, mirroring how C++ omits this check inside string_serializer.h.\nAccurate Error Propagation:\n\nThe addition of Error::SizeLimitExceeded works brilliantly with the new Fory configuration model. You\u0027re properly halting deserialization and passing clear payload dimensions to Error::size_limit_exceeded, ensuring graceful failure without panics or memory exhaustion.\nValidation and Pre-Allocation Consistency:\n\nChecking max_collection_size just prior to enforcing buffer limits inside check_collection_len and check_map_len is well-ordered. By prioritizing the runtime limit checks, you avoid false OOMs or deep iterations if Fory receives heavily corrupted payload headers.\n```\n\n\n## Does this PR introduce any user-facing change?\n- [x] Does this PR introduce any public API change? ((Yes, adds Fory\nconfiguration methods `max_binary_size()` and `max_collection_size()`,\nas well as `Error::SizeLimitExceeded`))\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "cf3656af20e2c095f79fe1b5e322052803aca74c",
      "tree": "890c651feb5383ca550190ed867b28205b629307",
      "parents": [
        "9c82aaa205d1eec2c9b564aa75abaf42f681ae1c"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sun Apr 19 21:55:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 19 19:25:41 2026 +0530"
      },
      "message": "feat(ci): fix release for csharp and dart (#3582)\n\n## Why?\n\n\n\n## What does this PR do?\n\n- auto release for c#\n- fix release for dart\n- auto release dart\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": "9c82aaa205d1eec2c9b564aa75abaf42f681ae1c",
      "tree": "de41b834beb827faebca8d125d41481846d18354",
      "parents": [
        "d9f300fca20b9ccbc44013561dcba67bf71d73bc"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Apr 16 15:00:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 12:30:56 2026 +0530"
      },
      "message": "fix(ci): pin more ci actions (#3578)\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": "d9f300fca20b9ccbc44013561dcba67bf71d73bc",
      "tree": "dd318dbadf3557fe620b1d656d8a5bfe1a70ace6",
      "parents": [
        "6735b37889ac904ec014298ee7ef4fd470c84823"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Apr 16 14:37:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 12:07:57 2026 +0530"
      },
      "message": "fix(javascript): fix hps release (#3577)\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": "6735b37889ac904ec014298ee7ef4fd470c84823",
      "tree": "08bb05667da5c02fe54bcc5282f2a7cddda68733",
      "parents": [
        "4a3c71c72dc82a84a13ef022126e7c8bce386018"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Apr 16 14:06:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 11:36:05 2026 +0530"
      },
      "message": "feat: make generate enum use id for wire format (#3576)\n\n## Why?\n\n\n\n## What does this PR do?\n\nmake generate enum use id for wire format\n- java\n- python\n- c++\n- swift\n- javascript\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": "4a3c71c72dc82a84a13ef022126e7c8bce386018",
      "tree": "bda3266fe0b6b13fd38578ab7168255e742befd4",
      "parents": [
        "6d0faffdcb6d3f82ace16ada1b0f9804087c5ab9"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Apr 16 13:14:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 10:44:02 2026 +0530"
      },
      "message": "docs: update readme (#3575)\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": "6d0faffdcb6d3f82ace16ada1b0f9804087c5ab9",
      "tree": "313f9fe7e27f226f76108d68f4cd903c5e7f83ba",
      "parents": [
        "c5eb38f7f55799362b46965d82e5f2c9a41acdaa"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Apr 16 12:08:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 09:38:51 2026 +0530"
      },
      "message": "feat(python): fix python struct xlang ref track error (#3574)\n\n## Why?\n\n\n\n## What does this PR do?\n\n-  fix python struct xlang ref track error\n- use type_extensions for py3.8\n\n## Related issues\n\nCloses #3506\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": "c5eb38f7f55799362b46965d82e5f2c9a41acdaa",
      "tree": "617a7f9779cfd25d76ee1fb945a1384127d62e4d",
      "parents": [
        "1358d2fa573b8849a769e70026759170fd3976f0"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Apr 15 23:20:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 20:50:20 2026 +0530"
      },
      "message": "feat(dart): add dart IDL support (#3571)\n\n## Why?\n\n\n\n## What does this PR do?\n\n-  Add dart IDL support\n- Add nested containter type info annotation support\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": "1358d2fa573b8849a769e70026759170fd3976f0",
      "tree": "04dc48ac34f75b63158db531923a110484e4a561",
      "parents": [
        "c548fa08ba15c0fce80ccff6aef78c049f040262"
      ],
      "author": {
        "name": "PiotrDuz",
        "email": "39244523+PiotrDuz@users.noreply.github.com",
        "time": "Wed Apr 15 16:30:13 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 15 20:00:13 2026 +0530"
      },
      "message": "fix(java): add test for previous uncaught regression.  (#3573)\n\nGenerated code should cast non-public class to the parent.\nNon-public classes should be serialised correctly when used in cyclic\ngraphs.\nOriginated from: #3572\nRelated to #3504\n\nCo-authored-by: piotr-duzniak_tisint \u003cpiotr.duzniak@tis.biz\u003e"
    },
    {
      "commit": "c548fa08ba15c0fce80ccff6aef78c049f040262",
      "tree": "d20d0fcbc793e2e048ec0dbb95996718f9c9b774",
      "parents": [
        "e8328b24530d00b94ecbad198beccd345e654e05"
      ],
      "author": {
        "name": "Yash Agarwal",
        "email": "144949452+yash-agarwa-l@users.noreply.github.com",
        "time": "Tue Apr 14 19:07:04 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 19:07:04 2026 +0530"
      },
      "message": "docs(dart): update dart benchmark docs (#3568)\n\n## Why?\nWe optimized the struct deserialize \n\n## What does this PR do?\nupdates the dart benchmark docs\n\n## Related issues\n\n## AI Contribution Checklist\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- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\n---------\n\nCo-authored-by: Shawn Yang \u003cchaokunyang@apache.org\u003e"
    },
    {
      "commit": "e8328b24530d00b94ecbad198beccd345e654e05",
      "tree": "f80659c6ed1d09f6c4fbad2d000176cf0f30c249",
      "parents": [
        "5ffb9896667a1987edec156f7548790522afdeb2"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Apr 14 21:22:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 18:52:49 2026 +0530"
      },
      "message": "docs: refine dart and javascript docs (#3567)\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": "5ffb9896667a1987edec156f7548790522afdeb2",
      "tree": "e115e7cc674dc8cbd13d00c5c84ff950dfdb2456",
      "parents": [
        "b7c16d0f04c743b910407f49895d5edddc6a060d"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Apr 14 20:26:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 17:56:17 2026 +0530"
      },
      "message": "fix(swift): fix swift generated code compile warnings (#3566)\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": "b7c16d0f04c743b910407f49895d5edddc6a060d",
      "tree": "8563ab07ec40bce0bdbd45d69c0481043e22f6fd",
      "parents": [
        "47586f27c793a8ce7bf0c5ef29d0d9236df123f1"
      ],
      "author": {
        "name": "Yash Agarwal",
        "email": "144949452+yash-agarwa-l@users.noreply.github.com",
        "time": "Tue Apr 14 17:36:41 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 17:36:41 2026 +0530"
      },
      "message": "perf(dart): optimize struct deserialize with direct dispatch codegen (#3563)\n\n## Why?\nFory struct deserialize in Dart was slower than it should be given\nFory\u0027s wire format.\n\n## What does this PR do?\n\n- Codegen emits direct read calls for statically safe struct/ext fields,\nskipping runtime\nflag and type switches (mirrors Java\u0027s ObjectCodecBuilder).\n- Runtime replaces a one-key HashMap on ReadContext/WriteContext with a\ndedicated field.\n- Fixes benchmark workload file broken by the #3560 constructor\nrefactor.\n\n## Related issues\n #3558 \n\n## AI Contribution Checklist\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- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\n\nCo-authored-by: Shawn Yang \u003cshawn.ck.yang@gmail.com\u003e"
    },
    {
      "commit": "47586f27c793a8ce7bf0c5ef29d0d9236df123f1",
      "tree": "d9439bd3678e76a6d67ac7d46f6fe9a219ab1862",
      "parents": [
        "81be086ab27322098cd92c4fe1185a3f62e20d05"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Apr 14 20:06:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 17:36:22 2026 +0530"
      },
      "message": "fix(javascript): fix flaky javascript idl tests (#3565)\n\n## Why?\n\n\n\n## What does this PR do?\n\n\n\n## Related issues\n\n#3394\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": "81be086ab27322098cd92c4fe1185a3f62e20d05",
      "tree": "2e65d616bcb04d4f462a0c7382a147738ccac8db",
      "parents": [
        "36e95bb996fb86cb6fbb2389b3b338c652cc9eea"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Tue Apr 14 19:16:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 16:46:01 2026 +0530"
      },
      "message": "perf(javascript): add javascript benchmark (#3562)\n\n## Why?\n\n\n\n## What does this PR do?\n\n- add javascript benchmarks\n- align benchmark data model config\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": "36e95bb996fb86cb6fbb2389b3b338c652cc9eea",
      "tree": "f4ba2ce4859a78372bbc0077e098102a03137efa",
      "parents": [
        "f129b2140e5e9d5894ee384dc03d96a8cadd0c5c"
      ],
      "author": {
        "name": "Talha Amjad",
        "email": "155809113+miantalha45@users.noreply.github.com",
        "time": "Tue Apr 14 08:55:04 2026 +0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 09:25:04 2026 +0530"
      },
      "message": "feat(compiler): Add JavaScript/TypeScript IDL code generation (#3394)\n\n## Summary\n\nImplements TypeScript code generation for Fory IDL within the\nfory-compiler, converting FDL (Fory Definition Language) schema files\ninto pure TypeScript type definitions. Zero runtime dependencies, with\ncomprehensive test coverage (12/12 tests passing), supporting messages,\nenums, unions, and all primitive types.\n\n## Changes\n\n### Core Implementation\n- **compiler/fory_compiler/generators/typescript.py** - TypeScript code\ngenerator extending BaseGenerator (365 lines)\n- Generates type-safe TypeScript interfaces, enums, and discriminated\nunions\n  - Supports nested types, collections, and optional fields\n  - Proper type mapping for all 25 FDL primitive kinds\n  - Field name conversion (snake_case → camelCase)\n- Registration helper function generation for Fory serialization\nintegration\n\n- **compiler/fory_compiler/generators/__init__.py** - Registration of\nTypeScriptGenerator in the compiler ecosystem\n\n- **compiler/fory_compiler/cli.py** - Added --typescript_out CLI\nargument for TypeScript code generation\n\n- **compiler/fory_compiler/tests/test_typescript_codegen.py** - 12\ngolden codegen tests covering:\n  - Enum and message generation\n  - Nested types (messages and enums)\n  - Discriminated unions\n  - All primitive type mappings\n  - Collection types (arrays, maps)\n  - Field naming conventions\n  - File structure and licensing\n  - Zero runtime dependencies validation\n\n### Features\n- **Message-to-Interface Generation**: Auto-converts FDL messages to\nTypeScript interfaces\n- **Enum Support**: Generates TypeScript enums with proper value\nstripping and type IDs\n- **Discriminated Unions**: Creates union types with discriminator enums\nfor type safety\n- **Type Mappings**: Full support for all FDL primitives (bool→boolean,\nint32→number, int64→bigint|number, float/double→number, etc.)\n- **Nested Types**: Supports nested messages and enums within parent\ntypes\n- **Collection Types**: Arrays (repeated fields) and maps with type-safe\ngenerics\n- **Zero Runtime Dependencies**: Pure TypeScript type definitions, no\ngRPC or external imports\n- **Field Naming**: Automatic conversion to camelCase per TypeScript\nconventions\n- **Package/Module Handling**: Uses last segment of package name for\nmodule name and registration functions\n- **License Headers**: All generated files include Apache 2.0 license\nheaders\n- **Registration Helpers**: Generates registration functions for Fory\nserialization framework integration\n\n### AI Assistance Checklist\n- [x] Substantial AI assistance was used in this PR (yes)\n- [x] I included the standardized AI Usage Disclosure block below\n- [x] I can explain and defend all important changes without AI help\n- [x] I reviewed AI-assisted code changes line by line before submission\n- [x] I ran adequate human verification and recorded evidence (local/CI\nchecks, pass/fail summary, and review confirmation)\n- [x] I added/updated tests and specs where required\n- [x] I validated protocol/performance impacts with evidence when\napplicable\n- [x] I verified licensing and provenance compliance\n\nAI Usage Disclosure\n- substantial_ai_assistance: yes\n- scope: \u003cdesign drafting | code drafting\u003e\n- affected_files_or_subsystems: \u003chigh-level paths/modules\u003e\n- human_verification: \u003cchecks run locally or in CI + pass/fail summary +\ncontributor reviewed results\u003e\n- performance_verification: \u003cN/A\u003e\n- provenance_license_confirmation: \u003cApache-2.0-compatible provenance\nconfirmed; no incompatible third-party code introduced\u003e\n\n### AI Review Evidence\n#### General AI Review\nInitial Review\n• Identified issues in decimal type mapping, array type precedence, tag\nid drop, and traversalContainer doesn\u0027t traverse union cases\nFixes Applied\n• Updated DECIMAL mapping to string to avoid precision loss\n• fix array type precedence issue.\u2028• tag id drop prevention for id \u003d\u003d\n0\u2028• Aligned map type documentation with generated output\nFinal Review (Fresh Session)\n• Re reviewed updated changes\u2028• All issues resolved\u2028• All tests pass. No\nactionable issues remain\n\n#### Fory-Specific AI Review\nScope\n• Reviewed serialization and deserialization logic\u2028• Verified typeInfo\nhandling, struct embedding, and reference tracking\n• Checked alignment with Java reference implementation\u2028• Validated cross\nlanguage compatibility and code generation\nResult\n• No actionable issues found\u2028\n• Implementation aligns with Fory wire format and runtime behavior\n\nFixes #3280\n\n---------\n\nCo-authored-by: Shawn Yang \u003cshawn.ck.yang@gmail.com\u003e"
    },
    {
      "commit": "f129b2140e5e9d5894ee384dc03d96a8cadd0c5c",
      "tree": "c5bf4a7d509ad0fad9d2d444b0a3406e5dc8301a",
      "parents": [
        "90a45dd7f967ca9dabc6e6a9252d7ef6dad6725b"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 13 17:10:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 14:40:26 2026 +0530"
      },
      "message": "docs(javascript): add javascript docs (#3561)\n\n## Why?\n\n\n\n## What does this PR do?\n\nadd javascript docs\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": "90a45dd7f967ca9dabc6e6a9252d7ef6dad6725b",
      "tree": "e6d3bce09a29aa865616f68ce0bc4ef688ed06da",
      "parents": [
        "39700abe2b03046e652d725487a21a2191949296"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 13 16:50:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 14:20:01 2026 +0530"
      },
      "message": "docs(dart): add dart docs (#3560)\n\n## Why?\n\n\n\n## What does this PR do?\n\nadd dart docs\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": "39700abe2b03046e652d725487a21a2191949296",
      "tree": "1075990f541559be21056ee8eddf422374a40aad",
      "parents": [
        "d3455afda80fc02e35004e4e509ec73f047a7f2d"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 13 15:56:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 13:26:43 2026 +0530"
      },
      "message": "chore(javascript): rename ref tracking to ref (#3559)\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": "d3455afda80fc02e35004e4e509ec73f047a7f2d",
      "tree": "4a758389111b9890d95d40903af7148accd7557d",
      "parents": [
        "f5a114b6a6a3fe35bec2c8dd6edcdca7cba93887"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 13 15:37:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 13:07:37 2026 +0530"
      },
      "message": "refactor(dart): new dart implementation (#3551)\n\n## Why?\n\nCurrent Dart implementation is messy and not aligned with other\nlanguages\n\n## What does this PR do?\n\n- Rewrite the whole dart implementation\n- Keep api aligned with other languages\n- Add dart benchmarks\n\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\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": "f5a114b6a6a3fe35bec2c8dd6edcdca7cba93887",
      "tree": "afebac7f5b7fe0f92181a54e15ae7dbe40826d07",
      "parents": [
        "7dbaabcea0c0aa89ec54274b3f36b4205b9b03c6"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sun Apr 12 20:31:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 18:01:43 2026 +0530"
      },
      "message": "feat(java): remove guava dependency from fory java (#3557)\n\n## Why?\n\nMake `fory-core` usable without requiring Guava on the runtime classpath\nwhile keeping Guava\ncollection support available when the dependency is present.\n\n## What does this PR do?\n\n- Marks the `guava` dependency in `java/fory-core` as optional.\n- Replaces the remaining Guava-based core utilities with local\n`org.apache.fory.collection`\nimplementations for the cache, map maker, bi-map, weak-reference\ncleanup, and related helpers.\n- Keeps Guava collection serializers available behind runtime detection\nand preserves reserved type IDs\n  when Guava registration is disabled or Guava is absent.\n- Moves Guava collection serializer coverage into `java/fory-testsuite`,\nadds explicit test-scope Guava\ndependencies there and in `java/fory-format`, and adds\n`GuavaOptionalDependencyTest` for the\n  no-Guava classpath case.\n- Removes a few incidental Guava usages from Java benchmarks/tests and\nupdates native-image\n  initialization metadata for the new collection classes.\n\n## Related issues\nCloses #1113 \n#1114 #1335\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] `fory-core` no longer requires Guava on the runtime classpath;\nGuava-specific serializers remain available when Guava is present.\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."
    },
    {
      "commit": "7dbaabcea0c0aa89ec54274b3f36b4205b9b03c6",
      "tree": "42f8613994fe262cf6f940c1d862fb42078b38b8",
      "parents": [
        "4527bc49c30fd12291105b2dd2ebb2fb2922f794"
      ],
      "author": {
        "name": "Uğur Tafralı",
        "email": "tafraliugur@gmail.com",
        "time": "Sun Apr 12 14:02:47 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 16:32:47 2026 +0530"
      },
      "message": "fix(rust): apply consistent pascalcase naming for nested types (#3548)\n\n## Why?\nRust generator was creating naming conflicts for nested types where\nmodule paths and struct names could collide and cause compilation\nerrors.\n\n## What does this PR do?\nApplies consistent PascalCase naming to type names when resolving nested\ntype references and building struct definitions. Added tests for nested\ntype scenarios.\n\n## Related issues\nFixes #3547\n\n## AI Contribution Checklist (if applicable)\nN/A\n\n## Does this PR introduce any user-facing change?\nYes, code that previously failed to compile due to naming conflicts will\nnow generate valid Rust code.\n\n## Benchmark (if perf-related)\nN/A"
    },
    {
      "commit": "4527bc49c30fd12291105b2dd2ebb2fb2922f794",
      "tree": "76fdaa31a41a91d2d1fa659214d2f91255db8ec4",
      "parents": [
        "1d8db737689f979bf9fda322f5f4e341c15ca7ff"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sun Apr 12 18:21:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 15:51:29 2026 +0530"
      },
      "message": "feat(xlang): refine xlang api and enum serialization (#3555)\n\n## Why?\n\n- Java enums needed a stable numeric tag option for cross-language and\nschema-evolution scenarios that should not depend on declaration order.\n- The xlang implementation guide and related docs/specs had drifted from\nthe current runtime architecture and API surface.\n\n## What does this PR do?\n\n- Remove `ForyBuilder.Xlang(bool)` from the C# public API, make `Config`\nbuilder-created only, and make C# always emit and require the xlang\nframe header.\n- Add Java `@ForyEnumId` support so enums can use a single annotated\nfield, a zero-argument getter, or per-constant annotations for stable\nnumeric tags, with dense-array lookup for small IDs and sparse-map\nlookup for larger IDs.\n- Add Java serializer and xlang tests covering default ordinal behavior,\nexplicit enum IDs, validation failures, and cross-language enum\nevolution with stable IDs.\n- Refresh the C# guides and Java/xlang specs, including a rewrite of the\nxlang implementation guide around the current `Fory` / `WriteContext` /\n`ReadContext` / `RefWriter` / `RefReader` architecture.\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\n\nN/A"
    },
    {
      "commit": "1d8db737689f979bf9fda322f5f4e341c15ca7ff",
      "tree": "77c44e6791e4c59006cefb6a987bd4d7ec3833a3",
      "parents": [
        "a8562e1b8e99a8d32200b5ba23db2974b69deff4"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sun Apr 12 13:37:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 11:07:29 2026 +0530"
      },
      "message": "fix(java): support skip optional sql serializers for java11+ (#3553)\n\n## Why?\n\n## What does this PR do?\n\n- move optional SQL serializer access behind reflective helpers so\nstartup does not touch `java.sql` unless those classes are actually used\n- add a JPMS regression test for building without `java.sql` and\npreserve time ref-tracking behavior for lazy serializer registrations\n\n## Related issues\n\nFixes #1695\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- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?"
    },
    {
      "commit": "a8562e1b8e99a8d32200b5ba23db2974b69deff4",
      "tree": "cbfc9f3d9545fa1ab0a4dcdcd698450566356157",
      "parents": [
        "f9faf8eae6feb15f4e4e858d725007e558faeebf"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sat Apr 11 09:16:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 11 09:16:52 2026 +0800"
      },
      "message": "chore: Bump org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4 in /java/fory-test-core (#3556)\n\nBumps org.apache.logging.log4j:log4j-core from 2.25.3 to 2.25.4.\n\n\n[![Dependabot compatibility\nscore](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name\u003dorg.apache.logging.log4j:log4j-core\u0026package-manager\u003dmaven\u0026previous-version\u003d2.25.3\u0026new-version\u003d2.25.4)](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": "f9faf8eae6feb15f4e4e858d725007e558faeebf",
      "tree": "e502ed4c988a1be0a8ab96deb30a3e6140ee0aa9",
      "parents": [
        "4777250f0c8ffe02eafb5812dbf674c93486ecba"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Sat Apr 11 00:42:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 22:12:03 2026 +0530"
      },
      "message": "refactor(swift): refine swift api (#3554)\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": "4777250f0c8ffe02eafb5812dbf674c93486ecba",
      "tree": "f4869e7646b987f9ec81e2521645cfb731cb2e3e",
      "parents": [
        "d2548182555a062bcbc76449903dce70ae4de5c0"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Apr 10 22:58:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 20:28:13 2026 +0530"
      },
      "message": "fix(java): auto-select child serializers for sorted containers (#3552)\n\n## Why?\nAuto serializer selection was falling back to JDK-compatible serializers\nfor eligible sorted/container subclasses such as `TreeSet`, `TreeMap`,\n`ConcurrentSkipListSet`, `ConcurrentSkipListMap`, and `PriorityQueue`.\nThat routed child containers through the inefficient\n`ObjectStreamSerializer` path even when the optimized child-container\nstrategy could preserve both container state and subclass fields.\n\n## What does this PR do?\n\n- extend `ChildContainerSerializers` with constructor-aware child\nserializers for sorted sets, sorted maps, and priority queues\n- teach auto-selection to use those serializers for eligible subclasses\ninstead of the JDK-compatible fallback\n- register the new serializers in the builtin serializer factory and\nGraalVM defaults\n- add regression coverage for auto-selected sorted/container subclasses\nwith preserved child state and comparator behavior\n\n## Related issues\n\nCloses #3521.\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- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?"
    },
    {
      "commit": "d2548182555a062bcbc76449903dce70ae4de5c0",
      "tree": "ea7bac09a3a1796c5dda3c5acf48e1af63c01f0c",
      "parents": [
        "5e4f275361e26d5f7485c64abdc700b409671e0f"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Apr 10 22:17:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 19:47:41 2026 +0530"
      },
      "message": "fix(java): configure type checker during build (#3550)\n\n## Why?\n\n## What does this PR do?\n\n- add `ForyBuilder.withTypeChecker` so type checkers can be installed\nbefore build\n- wire builder-configured checkers into `Fory` creation and centralize\n`AllowListChecker` listener setup\n- update the Java type-registration docs and tests to use the supported\nallow-list flow\n\n## Related issues\n\nCloses #3530.\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- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?"
    },
    {
      "commit": "5e4f275361e26d5f7485c64abdc700b409671e0f",
      "tree": "c3edb2500f177414dfdfd55ee5d6f46147fb0f87",
      "parents": [
        "a3095c43e4c70e040aa59d48c3c88ebca75ac801"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Apr 10 17:08:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 14:38:51 2026 +0530"
      },
      "message": "refactor(javascript): move serialization runtime state into contexts (#3549)\n\n## Why?\n\n- Align the JavaScript runtime ownership model with context-based\noperation state instead of ambient `Fory` state.\n- Remove internal `Fory` retention from serializers and codegen while\npreserving the existing wire format and early-bound closure performance\nmodel.\n\n## What does this PR do?\n\n- Introduces reusable `WriteContext` and `ReadContext` objects and moves\nbinary reader/writer, ref tracking, meta string handling, and type-meta\nstate under those contexts.\n- Keeps `Fory` as the top-level facade, renames\n`registerSerializer(...)` to `register(...)`, removes\n`serializeVolatile(...)`, and exports `WriteContext` / `ReadContext` for\ncustom serializers.\n- Refactors `TypeResolver`, `TypeInfo`, codegen, and generated\nserializers to stop retaining `Fory` and instead bind hot\nreader/writer/resolver locals from resolver-rooted reusable contexts.\n- Splits legacy `ReferenceResolver` / `MetaStringResolver` into\ndirectional helpers and folds `TypeMetaResolver` logic into the new\ncontexts.\n- Updates JavaScript docs, benchmark scripts, and tests to the new\ncontext-first custom serializer API without changing serialization\nbehavior or wire format.\n- Normalizes the new JavaScript context/codegen files to satisfy the\nrepository code style checks.\n\n## Related issues\n\n- None.\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\nJavaScript public API changes include `fory.register(...)`, removal of\n`serializeVolatile(...)`, and context-first custom serializer\nsignatures.\n\n## Benchmark\n\nPreserves the existing early-bound closure strategy for generated\nserializers; no wire-format change is intended."
    },
    {
      "commit": "a3095c43e4c70e040aa59d48c3c88ebca75ac801",
      "tree": "d31fe198e805bb1c371dc3873958a87e49b9de8a",
      "parents": [
        "e55c508260ba0b7c1cb75079c300b2ceb225bdc2"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Apr 09 22:06:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 19:36:29 2026 +0530"
      },
      "message": "feat(java): reduce java serializer memory usage by share across Fory instances (#3546)\n\n## Why?\n\nReduce Java serializer memory usage by reusing safe serializer instances\nacross equivalent Fory runtimes, and make the shareability contract\nexplicit in the serializer API.\n\n## What does this PR do?\n\n- Replaces `Serializer.shareable()` with a new `Shareable` marker\ninterface and updates the serializer API/docs to use that contract.\n- Migrates the eligible Java, Kotlin, and Scala serializers that are\nsafe to reuse to implement `Shareable`.\n- Caches explicitly registered shareable serializers and their\n`TypeInfo` in `SharedRegistry` so equivalent runtimes can reuse them\nthrough `registerSerializer` and `registerInternalSerializer` without\nchanging lazy serializer creation.\n- Keeps same-runtime serializer overrides local instead of publishing\nthem into `SharedRegistry`.\n- Aligns xlang named-type lookup and unsigned serializer registration\nwith the shared serializer path.\n- Adds focused Java and xlang tests for shared serializer reuse and\noverride behavior across equivalent runtimes.\n\n## Related issues\n\nN/A\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\n\nN/A"
    },
    {
      "commit": "e55c508260ba0b7c1cb75079c300b2ceb225bdc2",
      "tree": "414f2a14cf016f6df7c5ba0cbfed7858e91f4147",
      "parents": [
        "8e0d5f36b2d76bcb1a8a331af9651cecc1dcc8cd"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Thu Apr 09 17:09:26 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 17:09:26 2026 +0530"
      },
      "message": "feat(javascript): add configurable size guardrails (#3539)\n\n## Why?\nUntrusted binary/map/list lengths can trigger extremely large,\nuncontrolled memory allocations during deserialization. Relying on\nprocess-level memory limits is late-failing and risks heap exhaustion or\nOOM crashes from malicious payloads.\n\n## What does this PR do?\nAdds configurable size guardrails to the Fory JavaScript library,\nchecked immediately after the wire length is read to reject malformed\npayloads before any heavy allocation happens.\n\n### 1. type.ts\nAdded optional `maxBinarySize` and `maxCollectionSize` fields to the\nConfig interface\n### 2. fory.ts\nAdded default limits (1,000,000 for collection, 64 MiB for binary) and\nadded `checkCollectionSize` and `checkBinarySize` validation methods.\n### 3. typedArray.ts\nInjected guard checks into the codegen and runtime read paths before\narrays, maps, and buffers are allocated.\n### 4. sizeLimit.test.ts\nAdded a new test file validating limit boundaries, default thresholds,\nfallback typing, and polymorphism across all collection and binary read\npaths.\n\n## Related issues\nCloses #3414 \n\n\n## AI Contribution Checklist\n- [No] Substantial AI assistance was used in this PR: `yes` / `no`\n- [No] 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\n\n\n## Does this PR introduce any user-facing change?\n\n- [x] Does this PR introduce any public API change? (Yes, adds optional\n`maxBinarySize` and `maxCollectionSize` fields to the configuration.)\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\nN/A"
    },
    {
      "commit": "8e0d5f36b2d76bcb1a8a331af9651cecc1dcc8cd",
      "tree": "9b6af9514ece26b2f32798c3f7bc36a0033510c3",
      "parents": [
        "28694d1f7d8b5da8930f85d9c6f2a26a3465d4c2"
      ],
      "author": {
        "name": "Yash Agarwal",
        "email": "144949452+yash-agarwa-l@users.noreply.github.com",
        "time": "Thu Apr 09 15:01:38 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 15:01:38 2026 +0530"
      },
      "message": "feat(dart): Introduce id based enum serialization (#3482)\n\n## Why?\nThe Dart module, only supports ordinal enum serialization, where each\nenum\nvalue is serialized as its position index (0, 1, 2...), which breaks in\ndifferent\ncases like adding or reordering values. This adds optional id based\nserialization\nwith so that we can provide unique id to every while preserving ordinal\nserialization\nas the default fallback.\n\n## What does this PR do?\n\n- Adds @ForyEnumId(int id) for enum values\n- Registers ForyEnumId in analysis type detection\n- Updates enum analysis to collect IDs and emit build-time warnings for:\n         - partial @ForyEnumId usage\n         - duplicate IDs\n- Falls back to ordinal serialization when annotations are incomplete or\nduplicated\n- Extends EnumSpec with an optional idToValue map\n- Updates generated enum specs to include the ID map when valid\n- Updates EnumSerializer to use ID-based read/write when the map is\npresent, otherwise keep ordinal behavior\n- Adds codegen and serializer tests\n\n## Related issues\n\n## AI Contribution Checklist\n\nAI Usage Disclosure\nAI assistance was used to suggest tests and for better warnings in\nenum_analyzer.\n\ndart/packages/fory/lib/src/codegen/analyze/impl/struct/enum_analyzer_impl.dart\n    dart/packages/fory-test/test/\n\n- [x] 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] I can explain and defend all important changes without AI help.\n- [x] I reviewed AI-assisted code changes line by line before\nsubmission.\n- [x] I ran adequate human verification and recorded evidence (checks\nrun locally or in CI, pass/fail summary, and confirmation I reviewed\nresults).\n- [x] I added/updated tests and specs where required.\n- [x] I validated protocol/performance impacts with evidence when\napplicable.\n- [x] I verified licensing and provenance compliance.\n\n## Does this PR introduce any user-facing change?\n- [x] Does this PR introduce any public API change?\n`@ForyEnumId` is a new annotation users will write in their code\n          `ForyEnumId` class is publicly accessible\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark\nGeneral struct performance remained similar because those benchmarks do\nnot exercise enum serialization paths."
    },
    {
      "commit": "28694d1f7d8b5da8930f85d9c6f2a26a3465d4c2",
      "tree": "ec6264c157b63d45e611667c5c2c1d00597e9014",
      "parents": [
        "9b5e1544cebe2b244fb0a45a5547b69010fe18cc"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Thu Apr 09 11:42:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 09:12:26 2026 +0530"
      },
      "message": "docs: add ai-review policy (#3545)\n\n## Why?\n\nClarify the project policy for substantial AI-assisted contributions so\ncontributors complete their own review and verification work before\nrequesting maintainer review. This keeps accountability with the\ncontributor and makes the required AI disclosure and review evidence\nexplicit in the PR workflow.\n\n\n## What does this PR do?\n\n- Adds an AI review rationale section to `AI_POLICY.md` explaining why\nsubstantial AI-assisted PRs require contributor-led review rather than\nshifting that burden to maintainers.\n- Requires a documented AI review loop for substantial AI assistance:\ncontributor self-review first, then two fresh AI reviewers on the\ncurrent PR state, one using `.claude/skills/fory-code-review/SKILL.md`\nand one without that skill.\n- Extends the AI disclosure template and contributor checklist with\n`ai_review` and `ai_review_artifacts` requirements, including final\nclean review evidence and screenshots from both reviewers.\n- Clarifies review-loop terms such as fresh review sessions, final clean\nreview results, and the expectation that the evidence matches the\ncurrent PR diff or current `HEAD`.\n- Updates `CONTRIBUTING.md` and the PR template so contributors see the\nsame AI review requirements when opening a PR.\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\n\n\n## Does this PR introduce any user-facing change?\n\nThis PR changes contributor policy and PR workflow guidance for\nAI-assisted submissions. It does not change public APIs or binary\nprotocol behavior.\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?\n\n## Benchmark"
    },
    {
      "commit": "9b5e1544cebe2b244fb0a45a5547b69010fe18cc",
      "tree": "98fb37df1e3566a190bc8d5030f6eb592e0e9775",
      "parents": [
        "bec47698fbec5f1bd6702f5358d4b745708c0793"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Wed Apr 08 20:31:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 20:31:26 2026 +0800"
      },
      "message": "refactor(python): refactor python serialization api (#3543)\n\n## Why?\n\nRefactor the Python serialization runtime to make serializer ownership\nand per-operation state explicit. This moves read and write state out of\n`Fory`, aligns the Python and Cython code paths around the same context\nmodel, and simplifies how custom serializers interact with the runtime.\n\n\n## What does this PR do?\n\n- Introduces explicit `Config`, `WriteContext`, and `ReadContext`\nruntime objects and moves serialization state management out of `Fory`.\n- Refactors Python and Cython serializer APIs to take `type_resolver` in\nconstructors and to read or write through `read_context` and\n`write_context` instead of raw buffer methods.\n- Reorganizes the Python serialization implementation by moving\ncontext-owned logic into `context.py` and `context.pxi`, slimming\n`serialization.pyx`, and wiring collection, primitive, struct, union,\nand registry paths through the new boundaries.\n- Updates the Python custom serializer and type registration docs to the\nnew constructor and context-based serializer method signatures.\n- Refreshes the affected Python tests to use the new serializer and\nruntime context API shape.\n\n\n## Related issues\n\n#3537\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\n\n\n## Does this PR introduce any user-facing change?\n\nThis refactor changes the Python custom serializer constructor and read\nor write method signatures, and updates the Python docs accordingly.\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": "bec47698fbec5f1bd6702f5358d4b745708c0793",
      "tree": "07a20313a3c205b0161ee31f70f2df93e33b914f",
      "parents": [
        "fed97441e601e32a2f3c07f814d21026786fdea6"
      ],
      "author": {
        "name": "Ayush Kumar",
        "email": "ayush.2007.iit@gmail.com",
        "time": "Tue Apr 07 11:53:50 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 11:53:50 2026 +0530"
      },
      "message": "fix(js): corrected the float64 array size (#3541)\n\n## Why?\nThe size of `FLOAT64_ARRAY` in the codegen was registered to be 6 bytes\ninstead of 8 bytes, which was a bug introduced in [PR\n3266](https://github.com/apache/fory/pull/3326#discussion_r3042870701)\nThis introduced wrong element counts during deserializing of payloads.\n\n## What does this PR do?\nCorrects the size of `FLOAT64_ARRAY` from 6 bytes to 8.\n\n\n## Related issues\nN/A\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\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"
    },
    {
      "commit": "fed97441e601e32a2f3c07f814d21026786fdea6",
      "tree": "fda1bb1abddac67b2c90bf06d861344e5082b977",
      "parents": [
        "d89dd0c9941375ba4ba09e94698df7516e08db20"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Tue Apr 07 13:54:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 13:54:19 2026 +0800"
      },
      "message": "fix(python): fix wrong calling orders in visit_other (#3542)\n\n## Why?\n\nFix failed test case `test_type_id`.\n\n## What does this PR do?\n\n- Change the calling orders in the `visit_other` function so that the\ntype id of `datetime.date` can be correctly resolved.\n\n- Cover testcases under `python/pyfory/format/tests` in CI in case of\nany regression bugs.\n\n## Related issues\n\nFixes https://github.com/apache/fory/issues/3540.\n\n## AI Contribution Checklist\n\nNo.\n\n## Does this PR introduce any user-facing change?\n\nNo.\n\n## Benchmark\n\nNo."
    },
    {
      "commit": "d89dd0c9941375ba4ba09e94698df7516e08db20",
      "tree": "91ad56dff1a05096716f912ad21ac364ca84abcf",
      "parents": [
        "0a0fb53a4f092954a106a95db5436eb890bfba5e"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 06 13:44:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 11:14:34 2026 +0530"
      },
      "message": "docs: refactor agents.md to reduce token usage (#3538)\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\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": "0a0fb53a4f092954a106a95db5436eb890bfba5e",
      "tree": "4c06f969f1f49f469149891074edd9055bab4e16",
      "parents": [
        "7b15a546ead357497d03d8f137f810d223586b36"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Apr 06 11:17:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 11:17:55 2026 +0800"
      },
      "message": "refactor(java): refactor fory java serialization api (#3537)\n\n## Why?\n\n- Prepare the Java serialization API for 1.0 by replacing ambient\nruntime state and legacy resolver/context APIs with a smaller, explicit\noperation-context model.\n- This is an intentional breaking Java API change. The refactor is\nnecessary now so the pre-1.0 surface can be simplified, made more\nexplicit, and stabilized before 1.0.\n- Remove dead or overlapping runtime layers that were making serializer\nownership, codegen, GraalVM support, and downstream language\nintegrations harder to maintain.\n\n## What does this PR do?\n\n- Refactors the Java serialization runtime around explicit\n`WriteContext`, `ReadContext`, `CopyContext`, `RefReader`, `RefWriter`,\n`MetaStringReader`, `MetaStringWriter`, `MetaWriteContext`, and\n`MetaReadContext`.\n- Removes the old ambient and legacy runtime pieces such as\n`SerializationContext`, `RefResolver`, `MetaStringResolver`,\n`MetaStringRef`, `MapRefResolver`, `NoRefResolver`, and\n`ForwardSerializer`.\n- Shrinks and cleans `Fory`, moves per-operation state out of the root\nruntime object, and rewires resolver, serializer, and codegen paths to\nuse the explicit contexts.\n- Reworks serializer APIs and implementations across core, Kotlin,\nScala, GraalVM examples, extensions, benchmarks, and docs to follow the\nnew context-based surface and `shareable()` contract.\n- Simplifies meta-string and shared-runtime handling, including direct\n`EncodedMetaString` caching in `SharedRegistry` and context-owned\nread/write state.\n- Updates generated-code and builder paths plus downstream fixes so\nprimitive-list serializers, replace/resolve serializers, GraalVM\nexamples, Kotlin unsigned arrays, and Scala range serializers continue\nto work on the refactored API.\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\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\n\n- Updated the Java benchmark sources and benchmark state wiring to match\nthe refactored API surface."
    },
    {
      "commit": "7b15a546ead357497d03d8f137f810d223586b36",
      "tree": "89d6f34d567f3228a2db45d31dc7c33dfd5e1584",
      "parents": [
        "ee8532f1ac816b3d3b3f12db0ae7dcca98b5daec"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Apr 03 20:09:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 17:39:15 2026 +0530"
      },
      "message": "feat(java): add dedicated exception serializers (#3536)\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\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": "ee8532f1ac816b3d3b3f12db0ae7dcca98b5daec",
      "tree": "fdd7a2f242a567a42fe1c6149666de64a88cf8cc",
      "parents": [
        "e459a30e39f5a5e85cbd1aeb6bd470ebf24f3779"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Apr 03 15:51:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 13:21:06 2026 +0530"
      },
      "message": "ci: fix Bazel cache paths for C++ workflows (#3535)\n\n## Summary\n- cache the Bazel output base used by `setup-bazel` on GitHub-hosted\nrunners\n- keep the existing legacy cache paths alongside the actual `~/.bazel`\nlocations\n- replace the sanitizer `//cpp/...` sweep with a smaller smoke suite\nthat still exercises util/meta/row/encoder plus representative\nserialization entry tests\n\n## Verification\n- `python3 - \u003c\u003c\u0027PY\u0027 ... yaml.safe_load(\".github/workflows/ci.yml\") ...\nPY`\n- `git diff --check`\n\nThis PR is intended to drive the C++ ASan and UBSan jobs closer to the\nPR-time budget. If the new smoke suite is still too slow, the next step\nis reducing to a single sanitizer on PRs and moving the broader sweep to\nnightly."
    },
    {
      "commit": "e459a30e39f5a5e85cbd1aeb6bd470ebf24f3779",
      "tree": "7de96fee7210667c4b49646afd71e0bcca8b8e31",
      "parents": [
        "e85b857c506dfa84e6f148969bca3cd0ee531e54"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Apr 03 14:54:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 12:24:43 2026 +0530"
      },
      "message": "fix(java): fix objectstream serializer async jit and graalvm support (#3534)\n\n## Why?\n\nThis PR addresses the same bug as #3514 and is intended to replace it\nfrom a writable fork branch.\n\n`ObjectStreamSerializer` can hit the async/generated meta-shared layer\npath for customized JDK serialization cases such as `TreeSet`/`TreeMap`\nsubclasses. The original failure is tracked in #3515. The JVM-side async\nfix is necessary, but the final implementation also has to keep the\ngenerated layer serializer working for GraalVM native-image runtime.\n\n## What does this PR do?\n\n- fixes generated meta-shared layer serializer bootstrap for\n`ObjectStreamSerializer`\n- preloads generated layer serializer constructors during GraalVM build\ntime so native-image runtime does not fall back to broken constructor\ndiscovery\n- persists layer `TypeDef` metadata through the GraalVM registry so\nnewly created runtime `Fory` instances can rebuild generated layer\nserializers correctly\n- adds GraalVM coverage for a compatible `ObjectStreamSerializer` case\nusing `defaultWriteObject/defaultReadObject` with `TreeSet`/`TreeMap`\nsubclasses\n\nThis PR supersedes #3514.\nCloses #3515.\n\n## Related issues\n\n- Supersedes #3514\n- Closes #3515\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`, I can explain and defend all important changes without\nAI help.\n- [x] If `yes`, I reviewed AI-assisted code changes line by line before\nsubmission.\n- [x] If `yes`, I ran adequate human verification and recorded evidence\n(checks run locally or in CI, pass/fail summary, and confirmation I\nreviewed results).\n- [x] If `yes`, I added/updated tests and specs where required.\n- [x] If `yes`, I validated protocol/performance impacts with evidence\nwhen applicable.\n- [x] If `yes`, I verified licensing and provenance compliance.\n\nAI Usage Disclosure\n- substantial_ai_assistance: yes\n- scope: implementation, refactor, GraalVM validation, test coverage\nupdates\n- affected_files_or_subsystems: `java/fory-core` generated meta-shared\nlayer bootstrap, GraalVM runtime registry/bootstrap path,\n`integration_tests/graalvm_tests`\n- human_verification: reviewed changes line by line; ran targeted JVM\ntests, checkstyle, and GraalVM native-image build/runtime validation\nlocally; reviewed all passing results\n- performance_verification: no formal performance claim is made; the\nchange preserves generated layer serializers on the hot path instead of\nfalling back to interpreter behavior\n- provenance_license_confirmation: Apache-2.0-compatible provenance\nconfirmed; no incompatible third-party code introduced\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---------\n\nCo-authored-by: Sebastian Mandrean \u003csebastian.mandrean@gmail.com\u003e"
    },
    {
      "commit": "e85b857c506dfa84e6f148969bca3cd0ee531e54",
      "tree": "b2dfdc9a8b8daed74188ef6a5c0d050db37fab02",
      "parents": [
        "cf4439128cf6b0d33d53d2e22ef43d8d7c47f07b"
      ],
      "author": {
        "name": "rakow",
        "email": "rakow@users.noreply.github.com",
        "time": "Wed Apr 01 09:24:32 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 12:54:32 2026 +0530"
      },
      "message": "fix(java): Correct resolution of dependent/nested serializers in GraalVM (#3532)\n\n## Why?\n\nGraalVM native-image serializer codegen can leak\n`GraalvmSerializerHolder` into generated serializer constructor paths.\nWhen serializer resolution returns `serializer.getClass()` instead of\nthe underlying generated serializer class, dependent generated codecs\ncan later fail with\n\n`\njava.lang.ClassCastException: […]Codec_0 cannot be cast to\norg.apache.fory.util.GraalvmSupport$GraalvmSerializerHolder\n\tat org.apache.fory.Fory.processSerializationError(Fory.java:377)\n`\n\nor\n\n`java.lang.RuntimeException: Class […] is not registered`\n\nThis PR fixes that resolver behavior and adds regression tests.\n\n## What does this PR do?\n\n- Fixes `ClassResolver` to unwrap holder-backed serializers via\n`getGraalvmSerializerClass(...)` when resolving serializer classes.\n- Fixes `TypeResolver` to query the iterated resolver, not `this`, when\nchecking the GraalVM registry, and to unwrap holder-backed serializers\nthere as well.\n- Adds a new GraalVM integration example,\n`CompatibleDependentSerializerThreadSafeExample`, that features\ngenerated serializer to depend on another\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- [x] If `yes`, I included the standardized `AI Usage Disclosure` block\nbelow.\n- [x] If `yes`, I can explain and defend all important changes without\nAI help.\n- [x] If `yes`, I reviewed AI-assisted code changes line by line before\nsubmission.\n- [x] If `yes`, I ran adequate human verification and recorded evidence.\n- [x] If `yes`, I added/updated tests and specs where required.\n- [x] If `yes`, I validated protocol/performance impacts with evidence\nwhen applicable.\n- [x] If `yes`, I verified licensing and provenance compliance.\n\n```text\nAI Usage Disclosure\n- substantial_ai_assistance: yes\n- scope: code drafting, regression tests\n- affected_files_or_subsystems: java/fory-core resolver logic; integration_tests/graalvm_tests GraalVM regression example\n- human_verification: contributor reproduced the error using tests and than verified the fix works as expected, contributor reviewed changes line by line  \n- performance_verification: no intended user-facing performance change and no dedicated benchmark was run\n- provenance_license_confirmation: Apache-2.0-compatible provenance confirmed; no incompatible third-party code introduced\n```\n\n## Benchmark\n\nN/A. No dedicated benchmark was run for this change. The validation for\nthis PR is targeted regression coverage for GraalVM build-time\nserializer resolution and GraalVM integration behavior."
    },
    {
      "commit": "cf4439128cf6b0d33d53d2e22ef43d8d7c47f07b",
      "tree": "43e341bc86fbc0d4cf076c8a8156fff2a8362c29",
      "parents": [
        "30807eac712c68eae89bbae828496a979723e7f5"
      ],
      "author": {
        "name": "Geethapranay1",
        "email": "161115788+Geethapranay1@users.noreply.github.com",
        "time": "Tue Mar 31 07:50:17 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 10:20:17 2026 +0800"
      },
      "message": "test(cpp): optimize float16 sign symmetry test for ASAN (#3531)\n\n**Optimize float16 sign symmetry test to fix ASAN slow down**\n\n\n\n\n## Why?\n\n\n\n## What does this PR do?\nThe `SignSymmetryForNonNaNBitPatterns` test was doing a massive\nbrute-force scan across ~41k float32 patterns. Under ASAN, the heavy\nmemory instrumentation caused this single test to take ~246 seconds.\nInstead of scanning the whole range, this rewrites the test to just\ndensely sample the actual critical boundaries (subnormals,\nunderflow/overflow thresholds, and normal bins). We get the exact same\nedge-case coverage, but the test now finishes in just **~13ms**.\n\n\n## Related issues\nfix: #3524\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\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\nnormal build:\n\u003cimg width\u003d\"1125\" height\u003d\"650\" alt\u003d\"Screenshot From 2026-03-30 21-54-21\"\nsrc\u003d\"https://github.com/user-attachments/assets/da74ac5a-8739-45eb-b385-30bc494ecebc\"\n/\u003e\nasan build:\n\u003cimg width\u003d\"1106\" height\u003d\"883\" alt\u003d\"Screenshot From 2026-03-30 21-55-36\"\nsrc\u003d\"https://github.com/user-attachments/assets/43eed5c6-f5c3-4fc9-aed4-07d43a39b650\"\n/\u003e\n\n\nASAN runtime down from 246s to 13ms!"
    },
    {
      "commit": "30807eac712c68eae89bbae828496a979723e7f5",
      "tree": "2fdd0dfb486c9be14adbe0d0cc04f8b7981c3b32",
      "parents": [
        "18b821c7290843dfcdc0f6b84835c6102715a812"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Mon Mar 30 22:59:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 22:59:22 2026 +0800"
      },
      "message": "perf(java): optimize thread safe fory for java (#3529)\n\n## Why?\n\n\n\n## What does this PR do?\n\n- optimize thread safe fory to reduce extra cost\n- remove setClassLoader API, use `setContextClassLoader` instead\n- update virtual threads support docs\n\n\n## Related issues\n\n#3522 \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\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": "18b821c7290843dfcdc0f6b84835c6102715a812",
      "tree": "f56646d0d72bef97a0d3ec5ae52b2e04dcf5ba6a",
      "parents": [
        "14f9f4d6aef5ef75c248c19e0e9de671b95a8c0f"
      ],
      "author": {
        "name": "Darius",
        "email": "133853692+darius024@users.noreply.github.com",
        "time": "Mon Mar 30 15:13:18 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 17:43:18 2026 +0530"
      },
      "message": "test(compiler): add IR validation and codegen tests for gRPC service support (#3528)\n\n## Why?\n\nIssue #3277 requires unit tests for gRPC service support in the Fory\ncompiler: IR validation tests covering name, type, and streaming rules,\nand golden codegen tests for service schemas. The parser tests for\nFDL/proto/fbs service syntax already existed from closed sub-issues.\nThis PR fills the remaining gaps.\n\n## What does this PR do?\n\n**`compiler/fory_compiler/ir/validator.py`**\n- Added `_check_services()` implementing three validation rules:\n  1. Duplicate service names → error\n  2. Duplicate method names within the same service → error\n3. RPC request/response types must be `message` — `enum` and `union` are\nrejected\n- Wired `_check_services()` into `validate()` after\n`_check_type_references()`\n\n**`compiler/fory_compiler/tests/test_ir_service_validation.py`** (new)\n- Tests for all three validation rules above, across FDL, proto, and fbs\nfrontends\n- Tests that streaming RPCs (client, server, bidi) pass validation\nwithout error\n\n**`compiler/fory_compiler/tests/test_service_codegen.py`** (new)\n- Asserts service definitions do not alter message codegen output across\nall 7 language generators\n- Documents that `generate_services()` returns `[]` as a baseline for\nall generators\n- Verifies `compile_file(..., grpc\u003dTrue)` succeeds and produces output\nfor all languages using `examples/service.fdl`\n- Asserts key signatures (`class HelloRequest`, `String name`, etc.) are\npresent in Java and Python generated output\n\n## Related issues\n\n- Closes #3277\n- Related to #3266"
    },
    {
      "commit": "14f9f4d6aef5ef75c248c19e0e9de671b95a8c0f",
      "tree": "c177f98a8b0cbf32f84b6323a7df024918d32c64",
      "parents": [
        "f57f63950276a3bc52861c7016608629d3b03aca"
      ],
      "author": {
        "name": "Sebastian Mandrean",
        "email": "sebastian.mandrean@gmail.com",
        "time": "Fri Mar 27 13:22:40 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 20:22:40 2026 +0800"
      },
      "message": "fix(java): preserve ConcurrentSkipListSet comparator on copy (#3520)\n\n## Why?\n\nAs a follow-up to #3342 and #3344, I wanted to make sure there is test\ncoverage for all the public constructors of the different Map/Set\nclasses supported by the serializers.\n\nThat exposed a copy-path bug in `ConcurrentSkipListSetSerializer`\n(reported as #3519) which this PR addresses.\n\nThe deserialize path already preserves the comparator, but\n`fory.copy(...)` rebuilt `ConcurrentSkipListSet` with the default\nconstructor path, which dropped the comparator and silently changed\nordering semantics. This is easy to miss because `Set.equals(...)` still\npasses even when iteration order changes.\n\n## What does this PR do?\n\nIts kind-of two part: fix the bug, and add more test coverage.\nSpecifically:\n\n- Preserve the comparator when copying `ConcurrentSkipListSet` by\noverriding the collection copy construction path in\n`ConcurrentSkipListSetSerializer`.\n- Add constructor-matrix coverage for:\n  - `TreeSet`\n  - `TreeMap`\n  - `ConcurrentSkipListSet`\n  - `ConcurrentSkipListMap`\n  - `PriorityQueue`\n- Exercise both round-trip deserialize and `fory.copy(...)` behavior for\nthe relevant public constructors.\n- Assert concrete runtime type, comparator nullability, and observable\nordering semantics.\n- Use queue-specific assertions for `PriorityQueue` by comparing drained\npoll order instead of relying on `equals(...)`.\n\n## Related issues\n\n- Fixes #3519\n- Related to #3337\n- Related to #3343\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- [x] If `yes`, I can explain and defend all important changes without\nAI help.\n- [x] If `yes`, I reviewed AI-assisted code changes line by line before\nsubmission.\n- [x] If `yes`, I ran adequate human verification and recorded evidence\n(checks run locally or in CI, pass/fail summary, and confirmation I\nreviewed results).\n- [x] If `yes`, I added/updated tests and specs where required.\n- [x] If `yes`, I validated protocol/performance impacts with evidence\nwhen applicable.\n- [x] If `yes`, I verified licensing and provenance compliance.\n\nAI Usage Disclosure\n- substantial_ai_assistance: yes\n- scope: code drafting, test design\n- affected_files_or_subsystems: java/fory-core collection serializers\nand java/fory-core collection/map serializer tests\n- human_verification: local verification evidence available: `cd java \u0026\u0026\nENABLE_FORY_DEBUG_OUTPUT\u003d1 mvn -T16 -pl fory-core\n-Dtest\u003dorg.apache.fory.serializer.collection.CollectionSerializersTest,org.apache.fory.serializer.collection.MapSerializersTest\ntest` -\u003e pass (237 tests, 0 failures)\n- performance_verification: no dedicated benchmark run; runtime change\nis limited to the `fory.copy(...)` path for `ConcurrentSkipListSet`,\nwhile serialize/deserialize hot paths are unchanged; the added\ncomparator copy matches existing `PriorityQueue` and\n`ConcurrentSkipListMap` copy behavior\n- provenance_license_confirmation: repository-local\nApache-2.0-compatible changes only; no third-party code introduced\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\nNo dedicated benchmark was run.\n\nThis PR is a correctness fix plus test coverage expansion, not a\nperformance optimization:\n- The runtime code change only affects the `fory.copy(...)` path for\n`ConcurrentSkipListSet`.\n- Serialization and deserialization hot paths are unchanged.\n- The added work is one comparator copy per copied\n`ConcurrentSkipListSet`, which is expected to be negligible relative to\nelement copy and skip-list insertion work, and is consistent with\nexisting `PriorityQueue` and `ConcurrentSkipListMap` copy behavior.\n\nCo-authored-by: Shawn Yang \u003cshawn.ck.yang@gmail.com\u003e"
    },
    {
      "commit": "f57f63950276a3bc52861c7016608629d3b03aca",
      "tree": "1ebfb617b483f6f5bc3aff5a5a0a19b2875a8662",
      "parents": [
        "f5d72ab0e6392d11b36bb9da4a97301b15fad09a"
      ],
      "author": {
        "name": "Shawn Yang",
        "email": "shawn.ck.yang@gmail.com",
        "time": "Fri Mar 27 18:52:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 16:22:11 2026 +0530"
      },
      "message": "feat(java): support java virtual threads (#3522)\n\n## Why?\n\n`ThreadLocalFory` works well for a stable set of platform threads, but\nit scales poorly for JDK 21 virtual-thread workloads because each\nvirtual thread can end up creating and holding a full `Fory` instance.\nThis PR reduces that overhead by pooling `Fory` instances for\nvirtual-thread usage and by sharing the expensive, safe-to-reuse\nmetadata across equivalent `Fory` instances.\n\n## What does this PR do?\n\n- adds `buildVirtualThreadSafeFory(...)` backed by `FastForyPool` for\nJava virtual-thread workloads, and updates generated Java code to use\nthe thread-safe builder path\n- introduces `SharedRegistry` and refactors resolver/meta/type caches so\npooled or thread-safe `Fory` instances can reuse shared registration,\ntypedef, descriptor, metastring, codegen, and object-creator state\n- freezes registration after first top-level use and shares the frozen\nregistration view across equivalent `Fory` instances to cut repeated\ninitialization work\n- reduces per-instance memory in the virtual-thread path with\nresolver/metastring/string-serializer cleanups and supporting\ncollection/map serializer adjustments\n- adds Java docs and tests for virtual-thread usage, shared registration\nlifecycle, classloader behavior, concurrent identity maps,\ngraal/native-image integration, and latest-JDK virtual-thread pool\nbehavior\n\n## Related issues\n\nCloses #1570 \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\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": "f5d72ab0e6392d11b36bb9da4a97301b15fad09a",
      "tree": "9f37d0c74030f76109c4877f8c1745921c83bbdd",
      "parents": [
        "4052ca64178384ad09b7f70988fc08fb096da2ad"
      ],
      "author": {
        "name": "邓伟键",
        "email": "emmmvkdeng@gmail.com",
        "time": "Fri Mar 27 10:51:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 08:21:26 2026 +0530"
      },
      "message": "fix(compiler): allow qualified nested types in FDL rpc signatures (#3518)\n\n## Why?\n\nFDL already supports qualified nested names like `Outer.Inner` in the\nnormal type system, and schema validation can resolve those names.\n\nHowever, FDL service RPC parsing still only accepts a simple identifier\nin request/response type positions.\n\nThat makes the FDL service parser inconsistent with:\n\n- the rest of the FDL type system\n- the existing protobuf service parser\n- the existing FlatBuffers service parser\n\n## What does this PR do?\n\n- allows FDL RPC request/response types to parse a named type reference\nsuch as `Request` or `Outer.Inner`\n- adds a regression test for qualified request/response type names in\nservice parsing\n- keeps the existing validator test for simple known types and adds a\nseparate validator test for qualified known types\n\nThis change is intentionally small and limited to the FDL service parser\npath and its direct tests.\n\n## Related issues\n\n- [Open #\u003c3517\u003e](https://github.com/apache/fory/issues/3517)\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`, I can explain and defend all important changes without\nAI help.\n- [x] If `yes`, I reviewed AI-assisted code changes line by line before\nsubmission.\n- [x] If `yes`, I ran adequate human verification and recorded evidence.\n- [x] If `yes`, I added or updated tests and docs where required.\n- [x] If `yes`, I validated protocol or performance impacts with\nevidence when applicable.\n- [x] If `yes`, I verified licensing and provenance compliance.\n\nAI Usage Disclosure\n- substantial_ai_assistance: yes\n- scope: limited assistance for a small parser/test change and PR\nwording after manual reproduction and verification\n- affected_files_or_subsystems: FDL parser, compiler service tests\n- human_verification:\n  - reviewed all changes line by line\n  - from `/home/dwj/Project/apache-fory-prA/compiler` ran:\n- `PYTHONPATH\u003d/home/dwj/Project/apache-fory-prA/compiler\n/home/dwj/miniconda3/bin/python3 -m pytest\nfory_compiler/tests/test_fdl_service.py -q` -\u003e `14 passed`\n- `PYTHONPATH\u003d/home/dwj/Project/apache-fory-prA/compiler\n/home/dwj/miniconda3/bin/python3 -m pytest\nfory_compiler/tests/test_proto_service.py -q` -\u003e `5 passed`\n- `PYTHONPATH\u003d/home/dwj/Project/apache-fory-prA/compiler\n/home/dwj/miniconda3/bin/python3 -m pytest\nfory_compiler/tests/test_fbs_service.py -q` -\u003e `5 passed`\n- performance_verification: N/A\n- provenance_license_confirmation: Apache-2.0-compatible provenance\nconfirmed; no incompatible third-party code introduced\n\n## Does this PR introduce any user-facing change?\n\nThis introduces a small compiler-frontend behavior change: FDL service\nRPC request/response type positions now accept qualified nested names\nsuch as `Outer.Inner`.\n\n- [ ] Does this PR introduce any public API change?\n- [ ] Does this PR introduce any binary protocol compatibility change?"
    },
    {
      "commit": "4052ca64178384ad09b7f70988fc08fb096da2ad",
      "tree": "36149dda9b5cc29ba6e2458ae71a8937a97a4bd7",
      "parents": [
        "4728a0f51c921e3bb2e4fa064e541b5d27c4afde"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Thu Mar 26 13:12:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 13:12:08 2026 +0800"
      },
      "message": "fix(compiler): fix failed tests in compiler; add compiler CI (#3516)\n\n## Why?\n\nCurrently there are two failing test cases in the compiler module. See\nthe log for more info.\n\n[faliure.txt](https://github.com/user-attachments/files/26259775/faliure.txt)\n\nThere is no CI support for the compiler module, so the two regression\nbugs are not detected in time.\n\n## What does this PR do?\n\n- fix failing test cases\n- add compiler CI\n\n## Related issues\n\nNo.\n\n## AI Contribution Checklist\n\nNo.\n\n## Does this PR introduce any user-facing change?\n\nNo.\n\n## Benchmark\n\nNo."
    },
    {
      "commit": "4728a0f51c921e3bb2e4fa064e541b5d27c4afde",
      "tree": "0438900d20268e5bad58fed5e441b007f968cc16",
      "parents": [
        "eae25b6aff65c48f64d16d24faa51f2abc70bce4"
      ],
      "author": {
        "name": "codewithtarun2005",
        "email": "tp781396@gmail.com",
        "time": "Wed Mar 25 12:10:45 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 12:10:45 2026 +0530"
      },
      "message": "docs: improve comments in Java generator (#3507)\n\n## Why?\n\nTo improve code readability and help beginners understand the Java\ngenerator logic.\n\n## What does this PR do?\n\n- Added explanatory comments in Java generator file\n- Improved clarity of existing code\n- Helps new contributors understand code generation flow\n\n## Related issues\n\nNone\n\n## AI Contribution Checklist\n\n- [x] Substantial AI assistance was used in this PR: yes\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?"
    },
    {
      "commit": "eae25b6aff65c48f64d16d24faa51f2abc70bce4",
      "tree": "bacc21cbc671d98a173d2c8d7fba6fe5d2c60018",
      "parents": [
        "ede9b64750b2f03a238928bea3d081f2b7744b89"
      ],
      "author": {
        "name": "Peiyang He",
        "email": "peiyang_he@smail.nju.edu.cn",
        "time": "Wed Mar 25 02:39:11 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 12:09:11 2026 +0530"
      },
      "message": "fix(rust): deep clone TypeMeta to prevent UB in concurrent scenarios (#3511)\n\n## Why?\n\nAs mentioned in\nhttps://github.com/apache/fory/pull/3490#issuecomment-4079516008, one\ncargo bench case stably fails in the current code. After some digging, I\nthink it results from this line:\n\nhttps://github.com/apache/fory/blob/ede9b64750b2f03a238928bea3d081f2b7744b89/rust/fory-core/src/resolver/type_resolver.rs#L1389\nThe `clone()` method for `TypeResolver` should return a **deep** clone:\n\nhttps://github.com/apache/fory/blob/ede9b64750b2f03a238928bea3d081f2b7744b89/rust/fory-core/src/resolver/type_resolver.rs#L1316-L1319\n\nBut the `type_meta_by_index` field has type `Vec\u003cOption\u003cRc\u003cTypeMeta\u003e\u003e\u003e`,\ncalling `clone()` on this type directly would lead to a **shadow** clone\nindeed.\n\nThe `internal_type_info_by_id` field in `TypeResolver` also has a\nsimilar type `Vec\u003cOption\u003cRc\u003cTypeInfo\u003e\u003e\u003e` but it doesn\u0027t call `clone()`\ndirectly.\n\n## What does this PR do?\n\n- deep clone `type_meta_by_index`. Now the cargo bench case can run\nsuccessfully and stably.\n\n- introduce bazel-setup GitHub action in C++ sanitizer job\n\n- the existing test cases in `test_multi_thread.rs` are a little too\nweak to expose tricky concurrent issues. I wrote a new test case copying\nthe main logic of the failed cargo bench case. Without the fix, this new\ntest case would fail with a high chance.\n\n\n## Related issues\nNo.\n\n## AI Contribution Checklist\nNo.\n\n## Does this PR introduce any user-facing change?\nNo.\n\n## Benchmark\nNo."
    }
  ],
  "next": "ede9b64750b2f03a238928bea3d081f2b7744b89"
}
