Three further consolidations that the earlier stages left on the table:
-
Generic CachedSlice[M] replaces seven typed UserCache accessors (Beans/Roasters/Grinders/Brewers/Recipes/Brews). UserCache is now entity-agnostic; atproto no longer imports entities/arabica from cache.go.
-
EntityCodec[M] gains PostGet and PostList hooks for foreign-ref hydration. ToRecord now takes the store so encoders can build AT-URIs. Bean and Recipe CRUD migrate to the generic helpers via their codecs — full Bean Get/List/Update/Create + Recipe equivalents are now thin wrappers.
-
arabicaCRUDCreate/Update mirror the oolong factories for arabica's inline-form-decode style. Roaster, Grinder, Brewer Create + Update collapse to ~12 LOC each.
Brew (4-ref witness-batch resolution) and Bean Create's auto-roaster flow stay bespoke. Templ record views (bean/brew/recipe) intentionally untouched per design direction.
Net 289 LOC removed.
Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com