CoercionPlanner
object CoercionPlanner
Decides, at build time, how each @QFunction parameter is filled at call time.
This mirrors what the deleted runtime DynamicValueConverter used to do reflectively on every call, with two deliberate differences: enum entries are baked into the emitted source instead of being looked up through values(), and an unmappable type fails the build instead of the render.