From 384ee30ff6cc8883eb1e4e2d82cbffafeb3d2d18 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Tue, 29 Sep 2026 19:37:03 +0200 Subject: [PATCH] Say that a conditional variant commit reads the getters a second time Judging the merge against the file re-runs Project for the records the commit lands and for re-resolved variants, so "once per landing record" holds only for the admission. Handing the plan's projections to Judging would not cover the re-resolved dependents, so the contract now states the second read. Co-Authored-By: Claude Opus 5.5 --- .../Contracts/cultcache-store-composition.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/GameCult.Caching/Contracts/cultcache-store-composition.md b/src/GameCult.Caching/Contracts/cultcache-store-composition.md index 6cf6cdfa..f42c00f7 100644 --- a/src/GameCult.Caching/Contracts/cultcache-store-composition.md +++ b/src/GameCult.Caching/Contracts/cultcache-store-composition.md @@ -83,10 +83,13 @@ which route wrote it. exception. The subscriber stays subscribed and the commit stands. A throwing handler cannot undo the store's adoption of a load; the store and cache already agree when publication starts. -- A record's `[CultName]` and `[CultIndex]` getters run once per landing record, - before the store is written and before any `Sequence` is minted. A getter that - throws refuses the whole change set, loads included: nothing is written, - minted or left in memory. +- An admission runs a record's `[CultName]` and `[CultIndex]` getters once per + landing record, before the store is written and before any `Sequence` is + minted. A conditional commit on a store that holds variants is judged a second + time against the file it merges onto, which runs the getters again for the + records it lands and for any variant it re-resolves; that judgement is also + before the store is written. A getter that throws refuses the whole change + set, loads included: nothing is written, minted or left in memory. - Pulling all stores pulls every attached store even if a handler throws during one store's load, then rethrows. - Hydration failure on open is loud: a corrupt store file, or a record whose