Duplicate-key residuals: changelogs, retype by schema id, Rust CAS retype #112

Merged
libby merged 8 commits from dup-keys-residuals into main 2026-11-11 15:58:40 +00:00
Member

Closes variants:follow_up:reader-dup-keys-residuals (items 1-3 and 5; 4, 6, 7 stay open as noted).

  • CHANGELOG entries for the #110 refusals: cultcache-ts, cultcache-py, cultcache-rs, and unity/org.gamecult.cultlib (Unreleased, above the released 3.0.0 text).
  • Retype refusal asks what C# asks: the written type owns the stored schema id (its own or a listed compatible one) rather than comparing type names, in TS, Python and Rust. The reads-whole half of C#'s rule (shape comparison) is not ported; a same-named type still passes as before.
  • Rust compare_and_swap_entry no longer retypes in place (same SchemaConflictError as compare_exchange; ruling cache-refuses-retype); push_all last-wins pinned; a dead guard branch deleted.

Not run in this sandbox: scripts/check-changelog-semver.test.mjs (read-only path, dotnet).

🤖 Generated with Claude Code

Closes variants:follow_up:reader-dup-keys-residuals (items 1-3 and 5; 4, 6, 7 stay open as noted). - CHANGELOG entries for the #110 refusals: cultcache-ts, cultcache-py, cultcache-rs, and `unity/org.gamecult.cultlib` (Unreleased, above the released 3.0.0 text). - Retype refusal asks what C# asks: the written type owns the stored schema id (its own or a listed compatible one) rather than comparing type names, in TS, Python and Rust. The reads-whole half of C#'s rule (shape comparison) is not ported; a same-named type still passes as before. - Rust `compare_and_swap_entry` no longer retypes in place (same `SchemaConflictError` as `compare_exchange`; ruling cache-refuses-retype); `push_all` last-wins pinned; a dead guard branch deleted. Not run in this sandbox: scripts/check-changelog-semver.test.mjs (read-only path, dotnet). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The commit guard becomes settle_one_record_per_key: a written entry that owns the held record's schema id replaces it, another id is a SchemaConflictError. The unreachable same-type branch is gone.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The Python single-file writer refuses a retype when the written type's entry does
not declare the stored schema id (own or compatible) and the schema names differ,
as C# WrittenOwns' declared half asks, instead of comparing names alone. A renamed
type listing the old id compatible may now replace the record. cultcache-py and
org.gamecult.cultlib CHANGELOGs gain the #110 reader/writer refusals under Unreleased.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Merge remote-tracking branch 'origin/hands/dup-keys-residuals-rs' into dup-keys-residuals
Some checks failed
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Failing after 21m33s
da14891830
Changelogs: directory manifest refuses duplicates too; Rust and TS same-name edges stated
Some checks failed
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Has been cancelled
08fa727f0d
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
cultcache-rs: pin the renamed-type tie-break; push_all resolves a shared schema id by given order
Some checks failed
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Has been cancelled
88cc51b9dc
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Rust changelog: name the CAS and in-batch same-type-other-id cases
All checks were successful
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Successful in 26m40s
71424f2d73
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
libby merged commit 5fa7057ed1 into main 2026-11-11 15:58:40 +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!112
No description provided.