Skip to content

fix: reject ambiguous IgnoreCase member matches - #42

Merged
AGiorgetti merged 1 commit into
developfrom
fix/codex-issue-28-ignorecase-ambiguity
Oct 9, 2026
Merged

AGiorgetti merged 1 commit into
developfrom
fix/codex-issue-28-ignorecase-ambiguity

Conversation

@AGiorgetti

@AGiorgetti AGiorgetti commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Fixes #28.

  • IgnoreCase checks all ordinal-ignore-case candidates, even when one name is an exact match.
  • Nested structural mapping preserves the specific LITEMAPPER1004 diagnostic at the target member and omits the invalid implementation.
  • Exact, ExactThenIgnoreCase, constructor matching, explicit source selection, hidden-member resolution, and unrelated valid mappings retain their existing behavior.
  • Synchronizes usage guidance, consumer reference, changelog, and implementation records. No public API or specification semantics change.

Test-first evidence

  • Final 40-case generator fixture on unchanged develop 14eaa974769554884d7f8ca71ff8821a6e19470f: 22 failures, 18 passing controls, zero skips.
  • Coverage includes new objects, updates, nested creation/update, properties/fields, inherited class/interface members, configuration precedence, explicit disambiguation, hiding, diagnostic location/severity, invalid-method omission, and deterministic ordering.
  • Four clean-package reproductions incorrectly compiled on netstandard2.0, net8.0, net9.0, and net10.0 before the fix. Final package tests isolate direct and nested mapper containers to prevent declared-mapping reuse from hiding the structural path.
  • Two unsupported nested-interface fixtures were excluded before the final generator baseline; no adjacent feature was added. A refined package red run was interrupted by approval cancellation and is not treated as a completed run.

Local validation

  • Release solution build: zero warnings/errors.
  • Focused new/constructor/inheritance/root-converter tests: 94 passed, zero failures/skips.
  • Full generator: 799 passed; runtime: 5 passed; integration: 1 passed. Zero failures/skips in these projects.
  • Available packaging: 224 passed, 2 infrastructure failures, zero skips. The four final package ambiguity cases and all 12 successful framework/language consumers pass, as do clean-package/source samples, usage, package/API checks, and benchmark smoke.
  • Independent read-only review found no scoped blocker. Consumer-skill validation and CRLF-aware diff checks pass.
  • Every uploaded blob and the remote tree match the tested local tree 9da595f403230fd09e0da36fbdfedd9c32f50e92.

Local environment limits

Trimming and Native AOT fail at ILLink's ComputeManagedAssemblies task-host creation with MSB4216 / Unix-domain SocketException (13), before publish behavior is established. PowerShell and clang are absent; 49 PowerShell-dependent tests were not run locally. No warnings, assertions, dependencies, prerequisites, or security settings were weakened.

CI and review

Exact-head CI run 37923295289 succeeded for 0889980ce5eae8c9745abb08e83ed2d4038242db.

  • Windows and Linux each passed 1,080 tests: 799 generator, 275 packaging, 5 runtime, and 1 integration; zero failures and zero skipped tests on each OS.
  • All six Roslyn jobs (4.8.0, 4.14.0, and 5.9.0 on both OSes) passed 799 tests each, with zero failures/skips.
  • Both full jobs cover the locally unavailable PowerShell, trimming, and Native AOT checks. Linux sample/benchmark smoke and solution-path validation also passed.
  • Release packing, artifact verification, and NuGet publication jobs were correctly skipped for this ordinary PR event.

This PR remains draft for human review and has no merge conflict. No merge, release, tag, package publication, or workflow dispatch was performed.

The previously documented nullable-intermediate/non-nullable-enum-leaf runtime defect remains outside this issue's scope.

Prepared with OpenAI Codex.

Restrict exact-match priority to the policies that request it and preserve LITEMAPPER1004 when nested structural planning rejects an ambiguous member.

Fixes #28.

Co-authored-by: Codex <codex@openai.com>
@AGiorgetti
AGiorgetti marked this pull request as ready for review October 9, 2026 11:46
@AGiorgetti
AGiorgetti merged commit af3fd9e into develop Oct 9, 2026
11 checks passed
@AGiorgetti
AGiorgetti deleted the fix/codex-issue-28-ignorecase-ambiguity branch October 9, 2026 11:46
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] Honor IgnoreCase ambiguity even when one source member is an exact match

1 participant