Soul s1: a written envelope is judged under the id it is stored under, so writable in memory equals writable after reload; only
marks that hold a record read-only are kept, by key (O(1) per written key); is_writable also answers False for foreign-carried
and unowned keys; tests pin batch order, thread scope, nested scope restore and the catalog-less arrival; README documents the surface.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The payload decode notes slots past the declared ones at any depth (record, nested record, list element, union arm, unit arm) into a
thread-local scope; the cache holds the mark per (type, key) and one check in _write and _delete refuses before any store is touched.
A depth-0 mark under a listed compatible id that the stored catalog reports is consented. Adds UnreadSlots, CultCache.is_writable and
SchemaConflictError.unread_slots.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>