Python: a record with unread slots is held read-only (slot-readonly-py) #126

Merged
libby merged 6 commits from hands/slot-readonly-py into main 2026-11-12 04:24:08 +00:00
Member

cultlib-gaps:follow_up:bytes-after-land-and-slot-leaves, spec cultlib-gaps:cut_spec:cut-slot-readonly-py.r1, rulings slot-mark-consent, slot-unmeasurable-type: cultcache-py holds a record whose payload carries slots past its reader's declared slots, at any depth, read-only (every write or removal refused, store unchanged), consent per the union-parity README. Vectors walked: extra-slot-store.cc (minus the variant row, which cultcache-py cannot read: follow-up py-store-reads-variant-row), extra-slot-consent.cc, slot-outcomes.msgpack (not grown; outcomes.msgpack still 9 rows).

Semver: Unreleased/Breaking in the cultcache-py CHANGELOG; implies a minor bump while 0.x (0.3.0 to 0.4.0).

Soul: verdicts cut-slot-readonly-py.s1 to .s5 (s1 to s4 blocked on envelope consent split, is_writable disagreeing with writes, a linear mark scan, owner delete as a silent no-op and then a two-call delete; s5 holds, one Low: failed owner removal unpinned). Reports h1 to h5. cultcache-py 257, cultnet-py 170, cultmesh-py 149 passed.

🤖 Generated with Claude Code

`cultlib-gaps:follow_up:bytes-after-land-and-slot-leaves`, spec `cultlib-gaps:cut_spec:cut-slot-readonly-py.r1`, rulings `slot-mark-consent`, `slot-unmeasurable-type`: cultcache-py holds a record whose payload carries slots past its reader's declared slots, at any depth, read-only (every write or removal refused, store unchanged), consent per the union-parity README. Vectors walked: `extra-slot-store.cc` (minus the variant row, which cultcache-py cannot read: follow-up `py-store-reads-variant-row`), `extra-slot-consent.cc`, `slot-outcomes.msgpack` (not grown; `outcomes.msgpack` still 9 rows). Semver: Unreleased/Breaking in the cultcache-py CHANGELOG; implies a minor bump while 0.x (0.3.0 to 0.4.0). Soul: verdicts `cut-slot-readonly-py.s1` to `.s5` (s1 to s4 blocked on envelope consent split, `is_writable` disagreeing with writes, a linear mark scan, owner delete as a silent no-op and then a two-call delete; s5 holds, one Low: failed owner removal unpinned). Reports h1 to h5. cultcache-py 257, cultnet-py 170, cultmesh-py 149 passed. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
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>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
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>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
cultcache-py: an owner's removal is one store call for the one record that exists
All checks were successful
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Successful in 21m32s
8aa76df5a3
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
libby merged commit 892765ba97 into main 2026-11-12 04:24:08 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/CultLib!126
No description provided.