CultLib/tests
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens 5aad137e61 Share the cache gate with its stores and make unconditional commit last-writer-wins
An attached store takes its cache's gate as its own lock (CacheBackingStore.Gate),
so a pull's load callback into the cache can no longer take the gate after the
store lock. The directory store's private mutation gate is deleted; the
single-file pull now runs under the gate; PullAllBackingStoresAsync takes the
gate around each store's pull. Fixes the pull/upsert deadlock on directory
stores and the re-pull that erased a staged single-file write.

An unconditional single-file Commit writes the store's whole view plus the batch,
exactly as a flush would, instead of merging onto the file; it persists earlier
staged writes and leaves the store clean. Conditional commits still land onto
the file under the lock. Directory-store commit and flush already share one
generation writer (staged keys onto the current manifest) and are unchanged.

Contracts state both rules, the lock order, that OnUpdate fires for loads only,
that a missing single file keeps staged writes, and that a store failing to
hydrate on open throws and is left byte-identical.

Tests: PullAndUpsertOnDirectoryStoreDoNotDeadlock, RepullNeverErasesAStagedWrite,
UnconditionalCommitIsLastWriterWinsLikeFlush, UnconditionalCommitPersistsStagedWrites,
OpeningACorruptStoreThrowsAndLeavesItUntouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 18:45:27 +02:00
..
GameCult.Caching.InteropPeer Pin CultNet publish-after-commit, add write-routed interop, update contract status 2026-09-13 17:58:00 +02:00
GameCult.Caching.Tests Share the cache gate with its stores and make unconditional commit last-writer-wins 2026-09-13 18:45:27 +02:00
GameCult.Geometry.Tests Add CultGeometry isosurface extraction 2026-08-26 17:37:22 +02:00
GameCult.Mesh.Quic.Native.Tests Bind CultMesh authority identity to physical routes 2026-08-18 17:21:58 +02:00
GameCult.Mesh.Quic.Tests Recover authority-bound CultMesh and atomic generations 2026-08-26 19:01:24 +02:00
GameCult.Mesh.Tests Route each document type to one home store; attach hydrates; commit explicit batches 2026-09-13 17:57:58 +02:00
GameCult.Networking.InteropPeer Add C# interop RUDP serve dial path 2026-06-17 11:22:17 +01:00
GameCult.Networking.Tests Pin CultNet publish-after-commit, add write-routed interop, update contract status 2026-09-13 17:58:00 +02:00
GameCult.Networking.WebSockets.Tests Add real browser CultMesh transport proof 2026-08-18 00:05:57 +02:00