Review finding 8/19 · conventional-comment issue (archi, blocking) · area binder · gate: decide before the v1 API freeze
To add once they exist: labels binder, blocking, archi; milestone v1. (Already applied: bug.)
Problem
When a request DTO property is a nullable value type (int?), SimpleProperty(r => r.Prop) infers TArgument = Nullable<int>. A converter passed as a method group then fails to bind: AsOptionalValue(PositiveInt.Parse) — where PositiveInt.Parse is int -> Outcome<int> — does not match the expected Func<int?, Outcome<...>>, and the call fails to compile with CS0411 (the type arguments cannot be inferred).
Impact
The binder's fluent method-group ergonomics silently break for the common case of a nullable-value-type DTO field. A consumer hits a compile error with no obvious cause and must fall back to an explicit adapter lambda. This is an invalid public-API shape, not a runtime bug.
Direction
Add where T : struct selector/converter overloads so a nullable-value-type DTO property binds directly against an int-taking converter. Adding such overloads after the API freezes can shift overload resolution / inference at existing call sites, so this is source-breaking-if-deferred and should be decided before the v1 freeze.
Context
Surfaced by the RequestBinder review (design spec #126, shipped in #141). Finding 8 of 19.
Complements finding #4 (non-nullable value-type properties, already handled in #141): #4 covers int, this covers int?.
Problem
When a request DTO property is a nullable value type (
int?),SimpleProperty(r => r.Prop)infersTArgument = Nullable<int>. A converter passed as a method group then fails to bind:AsOptionalValue(PositiveInt.Parse)— wherePositiveInt.Parseisint -> Outcome<int>— does not match the expectedFunc<int?, Outcome<...>>, and the call fails to compile withCS0411(the type arguments cannot be inferred).Impact
The binder's fluent method-group ergonomics silently break for the common case of a nullable-value-type DTO field. A consumer hits a compile error with no obvious cause and must fall back to an explicit adapter lambda. This is an invalid public-API shape, not a runtime bug.
Direction
Add
where T : structselector/converter overloads so a nullable-value-type DTO property binds directly against anint-taking converter. Adding such overloads after the API freezes can shift overload resolution / inference at existing call sites, so this is source-breaking-if-deferred and should be decided before the v1 freeze.Context
Surfaced by the RequestBinder review (design spec #126, shipped in #141). Finding 8 of 19.
Complements finding #4 (non-nullable value-type properties, already handled in #141): #4 covers
int, this coversint?.