Every app on top of AtClient was doing the same 5 things by hand:
AtKey strings (<id>.<namespace>@<owner>, plus cached: and <recipient>: prefixes);put per atSign in the share set, with a diff loop on every subsequent change;parents, payload);cached: prefix on reads.5 traps for the unwary, repeated in every app. Getting any one of them slightly wrong cost weeks.
A nicely characterised version of the same idea: every one of these is a place where the principle of least astonishment was getting bent on the way through the SDK boundary.