Finding 005 revised approach: keep the parent Structure tag in `_tagsByName` so the whole-UDT grouping planner can find it (required for Driver.AbCip-003 opt-in path + alarm projection). Instead, detect a direct read of a Structure-with-Members in `ReadSingleAsync` and return `BadNotSupported` rather than Good/null — explicitly documenting the contract that callers must address member paths. Duplicate-key checks (scalar and member fan-out) remain. Finding 014 test corrections: `Structure_parent_tag_read_returns_BadNotSupported` now asserts the new contract. `Read_UDInt_tag_returns_uint_value_not_negative_wrapped_int` assertion fixed to use `ShouldBeOfType<uint>()` instead of `ShouldNotBe(-1)` (Shouldly overflows comparing uint.MaxValue with int). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
14 KiB
14 KiB