CultCache: [CultIndex] is unique at commit and load; [CultRole] names a selection role; replicas apply a commit's changes as one batch #90

Merged
libby merged 8 commits from hands/variants-unique-index into main 2026-11-11 03:48:09 +00:00
Member

[CultIndex] means unique: refused at commit (batches, single and concurrent upserts, two caches on one file) and at load/attach/Pull; blank strings never conflict; index values are culture-invariant canonical; cacheless WriteRecord refuses unclassifiable index aliases. Grouping and selection declarations move to the new [CultRole] (CultMesh, Geometry, fixtures, docs). Catalog bytes, hashes and schema ids do not move.

Replica path (ruling variants:ruling:replica-commit-grouped-changes): subscription servers tag a commit's changes with optional commitId/commitCount on database_change_raw (older peers ignore them); the C# client applies a commit as one CultCache commit, a snapshot as one commit; refusals fault loudly (sticky, SubscribeAsync refused while faulted); incomplete commits bounded (64 commits, 1M changes total).

Soul: s1 blocked, s4 holds at 14477511 (Caching 1279, Networking 815, Mesh 346). Known follow-ups: directory-store concurrent duplicates, pull-refusal-keeps-stale-store, Rust/TS/Python adoption of the wire fields and [CultRole], public Reconcile() untagged, real DatabaseServer-to-client test, two Low s4 findings (straggler guard outside lock; budget/unknown-id pins). CI not consulted (one-slot runner queue).

🤖 Generated with Claude Code

[CultIndex] means unique: refused at commit (batches, single and concurrent upserts, two caches on one file) and at load/attach/Pull; blank strings never conflict; index values are culture-invariant canonical; cacheless WriteRecord refuses unclassifiable index aliases. Grouping and selection declarations move to the new [CultRole] (CultMesh, Geometry, fixtures, docs). Catalog bytes, hashes and schema ids do not move. Replica path (ruling variants:ruling:replica-commit-grouped-changes): subscription servers tag a commit's changes with optional `commitId`/`commitCount` on `database_change_raw` (older peers ignore them); the C# client applies a commit as one CultCache commit, a snapshot as one commit; refusals fault loudly (sticky, `SubscribeAsync` refused while faulted); incomplete commits bounded (64 commits, 1M changes total). Soul: s1 blocked, s4 holds at 14477511 (Caching 1279, Networking 815, Mesh 346). Known follow-ups: directory-store concurrent duplicates, pull-refusal-keeps-stale-store, Rust/TS/Python adoption of the wire fields and [CultRole], public Reconcile() untagged, real DatabaseServer-to-client test, two Low s4 findings (straggler guard outside lock; budget/unknown-id pins). CI not consulted (one-slot runner queue). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
RefuseIndexSharing in Resolve judges every admission; _indexes holds one key per value; cacheless writes and moved-file writes of unique-indexed types are refused.

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>
The database publishes commits (WatchCommits); the subscription server and the database server tag the changes a subscription receives from one commit with commitId and commitCount (optional wire fields older peers ignore). The C# subscription client buffers a tagged commit and applies it through one CultCache.Commit, judged on its result, so a swap of [CultIndex] values replicates. A refusal sets Fault, raises Faulted, and stops further applying. Snapshots apply as one commit too.

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>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
CultNet client: the pending-commit buffer is bounded by the changes the incomplete commits announce, not by a per-commit cap; stragglers are not buffered
Some checks failed
CultMesh QUIC native / Build win32-x64 (pull_request) Has been skipped
CultMesh QUIC native / Build linux-x64 (pull_request) Has been skipped
CultMesh QUIC native / Release native binaries (pull_request) Has been skipped
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Failing after 18m4s
CultMesh QUIC native / Verify committed binaries match SHA256SUMS (pull_request) Successful in 57s
144775117a
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
libby merged commit 7760219b7c into main 2026-11-11 03:48:09 +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!90
No description provided.