Skip to content

fix: preserve configured nullable updater overloads - #49

Merged
AGiorgetti merged 1 commit into
developfrom
fix/47-configured-nullable-updater
Oct 9, 2026
Merged

AGiorgetti merged 1 commit into
developfrom
fix/47-configured-nullable-updater

Conversation

@AGiorgetti

@AGiorgetti AGiorgetti commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Fixes #47.

  • Preserve the nullable value type of configured patch captures so the emitted C# call invokes the updater overload selected by the generator.
  • Extend the existing direct-member type restoration with a one-condition change. Updater resolution, null guards, receiver dispatch, update ordering and public APIs are unchanged.
  • Add 29 C# 9 regression/control cases and a shared normally compiled example used by source samples, clean-package samples, framework/language consumers, and normal/trim/AOT consumers.
  • Synchronize scoped implementation notes and consumer guidance. Issue [P2] Preserve null from a missing enum source-path intermediate #48 remains outside this PR.

Test-first evidence

On unchanged develop 9c48bfd59fe586097ca18c4289c85f03e93e30bc, the completed new test matrix produced 20 failures and 9 passing controls, with all 38 previous capture tests passing and no skips. Failing runtime cases selected the non-nullable overload and produced sentinel 99 instead of 7, or violated returning-replacement semantics. The Basic sample independently failed its overload assertion.

The first fixture iteration had one malformed external-container fixture; it was corrected before the final baseline. No production code or expected contract was changed to mask a failure.

Validation

  • Release solution build: zero warnings/errors.
  • Focused nested/update/path tests: 111 passed, zero failures/skips.
  • Complete generator suite: 946 passed, zero failures/skips.
  • Runtime suite: 5 passed, zero failures/skips.
  • Integration suite: 1 passed, zero failures/skips.
  • Basic, Collections and ASP.NET Core smoke samples passed.
  • Independent read-only review, consumer-skill validation and CRLF-aware diff checks passed.
  • Available packaging suite: 224 passed, two infrastructure failures, zero skips. All 12 framework/language consumers, clean-package samples, usage validation, package/API checks and benchmark smoke passed.
  • Local trimming and Native AOT fail before publish behavior is established at ILLink task-host creation (MSB4216 / Unix-domain SocketException 13). PowerShell/clang are absent; 49 PowerShell-dependent tests were not run locally. Nothing was suppressed or weakened.
  • Actual netstandard2.0/C#9 generated package-consumer code contains the nullable cast for both direct and dotted configured paths and uses each guard capture in its updater call.
  • Published tree b59af34a8d01760631e674768d52e2ae0e819291 exactly matches the locally tested tree.

Exact-head CI run #106 passed for 3a9c970aae8109c47a6051570935672c837e4895:

  • Windows and Linux each passed 1,227 tests: 946 generator, 275 packaging, 5 runtime and 1 integration; zero failures or skips.
  • All six Roslyn host jobs (4.8.0, 4.14.0 and 5.9.0 on both operating systems) passed 946 tests each, zero failures or skips.
  • Both Release builds had zero warnings/errors. Required Native AOT, trimming, PowerShell-dependent packaging checks, sample/benchmark smoke and solution-path checks passed.
  • CI's synthetic merge commit has the exact tested tree b59af34a8d01760631e674768d52e2ae0e819291.
  • All eight ordinary jobs succeeded. Release pack, artifact verification and NuGet publish jobs were skipped.

Scoped work is ready for human review. This validation does not authorize merging or release.

Scope and risk

No public API, specification semantics, dependency, target framework, reflection, runtime dispatch or release workflow change. Null leaf/intermediate skipping, non-nullable leaf overloads, Source-only default selection, void/returning updaters, get-only mutation/writable replacement, instance/external receivers, changing getters, deterministic output, and sequential failure behavior are covered.

For human review. No merge, release, tag, NuGet publication or workflow dispatch was performed.

Prepared with OpenAI Codex.

Restore the selected nullable value type after configured patch captures. Add test-first regression, sample, package-consumer and documentation coverage.

Fixes #47.

Co-authored-by: Codex <codex@openai.com>
@AGiorgetti
AGiorgetti marked this pull request as ready for review October 9, 2026 17:16
@AGiorgetti
AGiorgetti merged commit 6e70b78 into develop Oct 9, 2026
11 checks passed
@AGiorgetti
AGiorgetti deleted the fix/47-configured-nullable-updater branch October 9, 2026 17:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[P2] Preserve the selected nullable updater overload for configured patch source paths

1 participant