Single-file readers refuse duplicate keys in all four runtimes; c0 bad-canonical row #110
Loading…
Reference in a new issue
No description provided.
Delete branch "reader-dup-keys"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes variants:follow_up:reader-refuses-duplicate-keys and variants:follow_up:c0-bad-canonical-in-manifest.
Every runtime's single-file reader now refuses a store with two records under one key (ordinal string equality, schema not part of identity) as its unreadable-store error, instead of opening it last-wins and failing later writes raw. Five readability vectors (3 refuse, 2 distinct-key read: case, NFC/NFD) and a c0 manifest row (
current-catalog-bad-canonical.msgpack, refuse x4; TS and Python no longer coerce a non-string catalog slot 4) are walked by all four runtimes plus the Mesh C# walk.Writers: TS, Python and Rust writers replaced an arrived record only on (type, key), so they could write a store the new reader refuses; they now replace by key alone. Residual, not in this PR: TS/Py/Rs in-memory caches are still keyed by type+key (see leaf-key-identity-parity), so one batch carrying two types under one key can still write a duplicate-key file in TS and Python (Rust keeps the last).
Cut reports: cut-reader-dup-keys-{vectors,csharp,rust,ts,python}.h1, cut-c0-bad-canonical-row.h1/.h2.
🤖 Generated with Claude Code