CultCache: a unique-index refusal names the least violation; shared refusals vector #99

Merged
libby merged 4 commits from hands/variants-pair-order-cs into main 2026-11-11 10:05:32 +00:00
Member

A unique-index refusal names the least violation of the state the admission would leave (ruling variants:ruling:unique-index-refusal-pair-least-pair): first by alias, then least key, then second-least key, then schema name, every comparison UTF-16 ordinal. One rule for commit, batch, load, re-pull and registration, replacing the first-throw loop in RefuseIndexSharing.

tests/vectors/unique-index/refusals.msgpack (22 rows) and its store files are the shared vector TS, Python and Rust will walk (C# and Rust 22, Python 21, TS 11); README lists rows, walk counts and schema ids.

Soul: s1 and s2 blocked (vector did not pin key order for TS, README errors), s3 closes the cut with one Low (case-only key holders unpinned), filed as a follow-up.

🤖 Generated with Claude Code

A unique-index refusal names the least violation of the state the admission would leave (ruling variants:ruling:unique-index-refusal-pair-least-pair): first by alias, then least key, then second-least key, then schema name, every comparison UTF-16 ordinal. One rule for commit, batch, load, re-pull and registration, replacing the first-throw loop in RefuseIndexSharing. tests/vectors/unique-index/refusals.msgpack (22 rows) and its store files are the shared vector TS, Python and Rust will walk (C# and Rust 22, Python 21, TS 11); README lists rows, walk counts and schema ids. Soul: s1 and s2 blocked (vector did not pin key order for TS, README errors), s3 closes the cut with one Low (case-only key holders unpinned), filed as a follow-up. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
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>
unique-index refusals vector: rows 20-22 load rows 14, 15, 17; README gives the real schema ids
All checks were successful
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) Successful in 29m21s
CultMesh QUIC native / Verify committed binaries match SHA256SUMS (pull_request) Successful in 37s
0c9c0442cc
Rows 20-22 open stores holding the records of rows 14, 15 and 17, so a
runtime with no batch commit (TS) still walks cross-group key order. Over
the TS-walkable rows (5, 8-13, 19-22), hand mutants of CompareRefusals'
first-key compare fail: code point row 22; OrdinalIgnoreCase 20, 22;
InvariantCulture 20, 21; InvariantCultureIgnoreCase 20, 21. Rows 1-19 are
byte-identical. The README now names the sha256 schema ids the store
catalogs carry, not the versions, and counts tests.uq_alias's unique Alt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
libby merged commit 23d254a501 into main 2026-11-11 10:05:32 +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!99
No description provided.