Tatenda-k opened a new pull request, #3861:
URL: https://github.com/apache/fory/pull/3861

   Adds ForyExtraFields sink, an opt-in mechanism for preserving unmatched 
remote fields during compatible-mode deserialization and replaying them on 
re-serialization.
   Covers both the  interpreter and generated codepaths,
   
   <!--
   **Thanks for contributing to Apache Fory™.**
   
   **If this is your first time opening a PR on fory, you can refer to 
[CONTRIBUTING.md](https://github.com/apache/fory/blob/main/CONTRIBUTING.md).**
   
   Contribution Checklist
   
       - The **Apache Fory™** community has requirements on the naming of pr 
titles. You can also find instructions in 
[CONTRIBUTING.md](https://github.com/apache/fory/blob/main/CONTRIBUTING.md).
   
       - Apache Fory™ has a strong focus on performance. If the PR you submit 
will have an impact on performance, please benchmark it first and provide the 
benchmark result here.
   -->
   
   ## Why?
   When the upstream and downstream attributes are inconsistent, for example, 
the upstream is 10 fields, the downstream is not synchronized to update the 
field attributes, and there are only 9 attributes, then the downstream 
non-existent attributes will be ignored during deserialization.
   
   <!-- Describe the purpose of this PR. -->
   
   ## What does this PR do?
   
   <!-- Describe the details of this PR. -->
   This PR adds support for preserving unknown fields during compatible 
serialization using `ForyExtraFields`.
   
   A class opts in by declaring a `ForyExtraFields` sink. Fields present in the 
remote schema but not in the local schema are captured in the sink.
   
   Captured fields are replayed using the original remote `TypeDef`, allowing 
them to be preserved across compatible serialization round trips involving 
different schemas.
   
   Replay serializers are cached by `(class, TypeDef)`, allowing a local class 
to replay `ForyExtraFields` captured from multiple remote schemas.
   
   Tests cover both enabled and disabled reference tracking, as well as both 
`codegen=true` and `codegen=false`.
   ## Related issues
   
   <!--
   Is there any related issue? If this PR closes them you say say fix/closes:
   
   - #xxxx0
   - #xxxx1
   - Fixes #xxxx2
   -->
   fixes #1799 
   ## AI Contribution Checklist
   
   <!-- Full requirements and disclosure template:
   
https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs
 -->
   
   - [x] Substantial AI assistance was used in this PR: yes
   - [x] If `yes`, I included a completed [AI Contribution 
Checklist](https://github.com/apache/fory/blob/main/AI_POLICY.md#9-contributor-checklist-for-ai-assisted-prs)
 in this PR description and the required `AI Usage Disclosure`.
   - [x] If `yes`, my PR description includes the required `ai_review` summary 
and screenshot evidence of the final clean AI review results from both fresh 
reviewers on the current PR diff or current HEAD after the latest code changes.
   
   <!-- If substantial AI assistance = `yes`, paste the completed checklist and 
disclosure block here, including the final ai_review summary and screenshot 
evidence from both fresh reviewers on the current PR diff or current HEAD after 
the latest code changes. -->
   ## AI Contribution Checklist
   
   - [x] Substantial AI assistance was used in this PR: yes
   - [x] If yes, I included the standardized AI Usage Disclosure block below.
   - [x] If yes, I can explain and defend all important changes without AI help.
   - [x] If yes, I reviewed AI-assisted code changes line by line before 
submission.
   - [x] If yes, I completed line-by-line self-review first and fixed issues 
before requesting AI review.
   - [x] If yes, I ran two fresh AI review agents on the current PR diff or 
current HEAD after the latest code changes: one Fory-guided reviewer using 
AGENTS.md and .agents/ci-and-pr.md, and one independent general reviewer in a 
separate clean-context review session that was not pointed to 
.agents/ci-and-pr.md or any copied Fory-specific review checklist. If the 
independent reviewer's tooling auto-loaded AGENTS.md, it followed the 
independent-review carve-out there.
   - [x] If yes, I addressed all AI review comments and repeated the review 
loop until both ai reviewers reported no further actionable comments.
   - [x] If yes, I attached screenshot evidence or equivalent persisted links 
of the final clean AI review results from both fresh reviewers on the current 
PR diff or current HEAD after the latest code changes in this PR body.
   - [x] If yes, I ran adequate human verification and recorded evidence 
(checks run locally or in CI, pass/fail summary, and confirmation I reviewed 
results).
   - [x] If yes, I added/updated tests and specs where required.
   - [x] If yes, I validated protocol/performance impacts with evidence when 
applicable.
   - [x] If yes, I verified licensing and provenance compliance.
   
   ## Does this PR introduce any user-facing change?
   
   <!--
   If any user-facing interface changes, please [open an 
issue](https://github.com/apache/fory/issues/new/choose) describing the need to 
do so and update the document if necessary.
   
   Delete section if not applicable.
   -->
   
   - [x] Does this PR introduce any public API change?
   - [ ] Does this PR introduce any binary protocol compatibility change?
   
   ## Benchmark
   
   <!--
   When the PR has an impact on performance (if you don't know whether the PR 
will have an impact on performance, you can submit the PR first, and if it will 
have impact on performance, the code reviewer will explain it), be sure to 
attach a benchmark data here.
   
   Delete section if not applicable.
   -->
   
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to