Immutable classes

dataclasses were specifically decided to get special casing here, and some of the things (via dataclass_transform) end up with actual immutability rather than bypassable immutability. It’s worth pointing out here that the mutability here is not with respect to the value but of the class field. (which is why frozen works).

that also means that this proposal should likely work for your use here: Expanding `ReadOnly` to normal classes & protocols