v0.6.2
Fixed
FieldValue's recursive mapping arm usesMapping[str, FieldValue](covariant in its value type) instead of the invariantdict[str, FieldValue].dictis invariant inV, so any concretedict[str, X](whereXis a structural subset ofFieldValue) was rejected by type checkers at everyModel.with_(field=value)call site, forcing callers to insertcast("dict[str, FieldValue]", ...)boilerplate. The runtime contract is unchanged: everydictis also aMapping, and the encoder pipeline'sisinstance(v, dict)checks keep matching realdictpayloads. (#36)
Full changelog: https://github.com/panproto/didactic/blob/main/CHANGELOG.md