From 136adce9ff02145f248f2f4cb1ebd91f90db6787 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Tue, 29 Sep 2026 04:21:59 +0200 Subject: [PATCH] Prove TypeScript, Python and Rust refuse the C#-written variant store by name Co-Authored-By: Claude Sonnet 5 --- packages/cultcache-py/tests/test_cultcache.py | 6 ++++++ packages/cultcache-rs/src/lib.rs | 10 ++++++++++ packages/cultcache-ts/test/cult-cache.test.ts | 7 +++++++ 3 files changed, 23 insertions(+) diff --git a/packages/cultcache-py/tests/test_cultcache.py b/packages/cultcache-py/tests/test_cultcache.py index b4168690..6001c905 100644 --- a/packages/cultcache-py/tests/test_cultcache.py +++ b/packages/cultcache-py/tests/test_cultcache.py @@ -829,6 +829,12 @@ class CultCacheTests(unittest.TestCase): message = str(caught.exception) self.assertTrue("cultcache.store.v2" in message or "item:anvil-big" in message, message) + def test_single_file_refuses_the_csharp_written_variant_store_by_version_or_record(self) -> None: + with self.assertRaises(ValueError) as caught: + self._pull_vector("../document-variants-c1/variant-store.msgpack") + message = str(caught.exception) + self.assertTrue("cultcache.store.v2" in message or "laser-big" in message, message) + def test_v1_store_written_at_the_base_commit_still_reads_byte_for_byte(self) -> None: envelopes = self._pull_vector("v1-base.msgpack") self.assertEqual([(e.key, e.type) for e in envelopes], [("alpha", "vectors.item"), ("beta", "vectors.item")]) diff --git a/packages/cultcache-rs/src/lib.rs b/packages/cultcache-rs/src/lib.rs index e48ebad8..c9a7d282 100644 --- a/packages/cultcache-rs/src/lib.rs +++ b/packages/cultcache-rs/src/lib.rs @@ -4679,6 +4679,16 @@ mod tests { ); } + // The store the C# runtime wrote through its own variant API (tests/vectors/document-variants-c1). + #[test] + fn single_file_refuses_the_csharp_written_variant_store_by_version_or_record() { + let message = refusal("../document-variants-c1/variant-store.msgpack"); + assert!( + message.contains("cultcache.store.v2") || message.contains("laser-big"), + "{message}" + ); + } + #[test] fn v1_store_written_at_the_base_commit_still_reads_byte_for_byte() -> Result<()> { let envelopes = pull_vector("v1-base.msgpack")?; diff --git a/packages/cultcache-ts/test/cult-cache.test.ts b/packages/cultcache-ts/test/cult-cache.test.ts index a743ba00..8753af47 100644 --- a/packages/cultcache-ts/test/cult-cache.test.ts +++ b/packages/cultcache-ts/test/cult-cache.test.ts @@ -1443,6 +1443,13 @@ test("SingleFileMessagePackBackingStore refuses a variant store by version or re ); }); +test("SingleFileMessagePackBackingStore refuses the C#-written variant store by version or record", async () => { + await assert.rejects( + () => pullVector("../document-variants-c1/variant-store.msgpack"), + (error: Error) => error.message.includes("cultcache.store.v2") || error.message.includes("laser-big"), + ); +}); + test("CultCache inspector refuses the same vectors by name", async () => { const inspect = async (name: string) => inspectCultCacheBytes(name, await readFile(join(variantVectors, name))); await assert.rejects(() => inspect("unknown-header.msgpack"), /cultcache\.store\.v9/u);