CultLib/tests
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Meta Vens 4eacd876bf Publish observers after the gate, gate every store entry point, stamp under one hold
Observers and OnUpdate never run under the cache gate. Admit queues changes
while the gate is held; the outermost entry point (attach, pull, commit,
upsert, remove) publishes them after releasing it. A store's direct PullAll
hands over an empty load outside its lock so the cache publishes then.

A throwing observer can no longer split store from cache: publication starts
only after the store has adopted its loaded view. The directory store adopts
its durable catalog only after the cache admits the load; the write-only
_durableIndex is deleted.

Single-file Push, Delete, PushAll and CommitBatch take the gate like the
directory store; Dispose flushes under it. Write mints storedAt and admits
under one gate hold, and Land re-stamps staged upserts under the gate that
admits them, so a concurrent pull cannot land a later storedAt in between.

Tests: ObserverDoesNotRunUnderTheGate,
ThrowingOnUpdateHandlerDoesNotResurrectDeletedRecord,
RepullNeverErasesAStagedWriteOnDirectoryStore,
DirectCallsOnAnAttachedStoreShareTheCacheGate; the directory last-writer
result is pinned to {a,c,x}; the single-file re-pull test waits for the write
to reach the store or block instead of sleeping. Pausing tests always release
the pause so a failure cannot deadlock Dispose.

Docs: observer rule, direct store calls share the gate, directory TryCommit
contention and gate wait, per-key last-writer-wins, directory flush merge.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 19:23:44 +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 Publish observers after the gate, gate every store entry point, stamp under one hold 2026-09-13 19:23:44 +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