C2a: mark the header by content, refuse an element twice in a list, route CultMesh single-file through the id rule
A store is written v3 (v5 for a directory) only when a record in it holds a non-empty element id. CultElementIds.Plan reports that as IdPlan.HoldsIds; the admission stamps it on the stored record and every store reads it. The descriptor's CarriesElementIds is deleted. A file already marked on disk stays marked. CultPersistedStoreSnapshot.FormatFor is the one header decision. Plan refuses one element object sitting twice in a list at write, naming the record and list, instead of writing both ids and refusing the store at load. CultMesh single-file write mints, refuses and marks as a cache write does; the read applies the load-time plan, so a write and a load refuse the same things. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
e85b201bd2
commit
490f7b811f
7 changed files with 326 additions and 41 deletions
|
|
@ -288,7 +288,7 @@ public sealed class DirectoryMessagePackBackingStore : CacheBackingStore
|
|||
|
||||
// A manifest already marked stays marked: pages it names may hold ids this cache cannot read.
|
||||
var carriesIds = string.Equals(currentManifest.FormatVersion, IndexedFormatVersionWithIds, StringComparison.Ordinal) ||
|
||||
keysToWrite.Any(key => Entries.TryGetValue(key, out var written) && written.Descriptor.CarriesElementIds);
|
||||
keysToWrite.Any(key => Entries.TryGetValue(key, out var written) && written.HoldsIds);
|
||||
WriteManifest(targetCatalog, currentIndex.Values
|
||||
.OrderBy(record => record.Key, StringComparer.Ordinal)
|
||||
.ToArray(), carriesIds);
|
||||
|
|
|
|||
Loading…
Reference in a new issue