From cd07f03a9f9420461ea10a1f8335ddcd209862aa Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Wed, 30 Sep 2026 04:15:02 +0200 Subject: [PATCH] Mesh: the older-catalog reader takes only a store the current catalog layout cannot decode A store refused for its framing, slot count or a record keeps that refusal instead of being re-read with the older layout, so the record it names is the record the message names. Co-Authored-By: Claude Sonnet 5.5 --- src/GameCult.Mesh/CultMeshSingleFileDocuments.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/GameCult.Mesh/CultMeshSingleFileDocuments.cs b/src/GameCult.Mesh/CultMeshSingleFileDocuments.cs index 8b6b8a58..0221af78 100644 --- a/src/GameCult.Mesh/CultMeshSingleFileDocuments.cs +++ b/src/GameCult.Mesh/CultMeshSingleFileDocuments.cs @@ -271,7 +271,9 @@ namespace GameCult.Mesh } // Every refusal is a CultStoreUnreadableException. A store whose catalog entries are in the older layout is read by the - // same store reader with the older entry reader, so it is judged by the same framing, slot count and records. + // same store reader with the older entry reader, so it is judged by the same framing, slot count and records. Only a + // catalog entry the current layout cannot decode (a MessagePack or shape failure) sends it there; a store refused for its + // framing, its slot count or a record keeps that refusal. private static CultPersistedStoreSnapshot ReadSingleFileSnapshot(string path) { var bytes = File.ReadAllBytes(path); @@ -282,7 +284,7 @@ namespace GameCult.Mesh { snapshot = CultDocumentMessagePackSerialization.DeserializeSnapshot(bytes); } - catch (CultStoreUnreadableException) + catch (CultStoreUnreadableException ex) when (ex.InnerException is MessagePackSerializationException or InvalidOperationException) { snapshot = CultDocumentMessagePackSerialization.ReadStore(bytes, ReadLegacySchemaCatalogEntry); }