The hydrator round-trips _contacts by reflection. Entries are
structured objects (kind / ref-field / label / source / addedAt)
stored as plain JSON; this departs from the "scalars only"
default but mirrors the precedent set by AliasMixin.aliases
(a Record<string, string|null> stored directly). When richer
per-entry state appears, the upgrade path is a marshaller-backed
Set<ContactEntry> runtime.
The hydrator round-trips
_contactsby reflection. Entries are structured objects (kind / ref-field / label / source / addedAt) stored as plain JSON; this departs from the "scalars only" default but mirrors the precedent set byAliasMixin.aliases(aRecord<string, string|null>stored directly). When richer per-entry state appears, the upgrade path is a marshaller-backedSet<ContactEntry>runtime.