Persistent fields declared by this mixin. savedProps carries
the raw stored shape of each persistent prop (Quantity round-
trips as {value, unit}, etc.); savedPropMarshallers carries
the per-prop binding from prop name to marshaller templatePath
so loaded hosts know which marshaller to apply on read /
write. The marshaller binding is persisted explicitly so it
survives restarts without requiring the host class to re-
declare the binding for every prop name.
Mixin that adds controlled dynamic properties to objects.
The returned class is marked class-form
@Unshadowable: every method on a PropertiedMixin layer is unshadowable. Reason:queryPropis hot-path-called everywhere;setPropcarries field-shape invariants; shadowing them would underminemaskProp, which is the legitimate per-property override mechanism. If you find a real need (admin debug tracing, perhaps) downgrade specific methods to "shadowable but only by Admin."