From 2fa129c976a3e07dcae2b408bb8ff2525995e0b1 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 14 Jun 2026 10:46:27 +0100 Subject: [PATCH] Use typed category tokens in verifier --- .voidbot/state/aetheria.cc | Bin 84509 -> 83961 bytes .../Aetheria.State.Verify.csproj | 1 + Aetheria.State.Verify/Program.cs | 9 +++++---- docs/aetheria-perfect-machine-map.md | 4 +++- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.voidbot/state/aetheria.cc b/.voidbot/state/aetheria.cc index e231886f5f3b9eda0d248417022b56b48add5dbc..6463f9164082c0e0bd2cd11180e4b0eaf2de0202 100644 GIT binary patch delta 708 zcmZWn&ubGw80E{4HUULMtF$71N)ck4WVcNk8YHbEq8EiI3OPupv(wF*WG2i^D#3%T ziXNq`G8a8~vPbD99z2N0_M-oQ;K4t@qc>;MjiQ~)z~g%}@4fH6d71w8BK`hdV!Tu> zR|>8Z{!E@U%QYAa_Y%*tF}T>+f{9QhAI5+?Hv}@NGl|N_C%M!hmxAZ#C+hVc*FlFN z;U2Ct8LS0NnhzJ?YU1Kb__cMyY!qM|R?N8>*e21C?su7oN)yfg5ReMXB|byiWVEG_ z3v3JSGl@OLP*I{ala|(IKB0ZQa{DIIHc=|iiTzt?8E{`AQG*+^a0KAHxtE9QX%rH5 zc=X5djG7%j^jDGD%L9W~#x20>u(^1t*0>Xkw_3RBb;xRa-;^h4%f6mpCH(_3_eU9a z&D#Q;GT(}j37_7*HNaw|;<9lZn4ZKnD?=WLi4wDkFgcZz{>YZK$$TOEv7vBtcjnQ? zH6lGKyvTg8ZUg#v2AhFaC|QRD90hOp(cZdgB@x=Pf#$^nZmC+d7#}**gj+(ii2t)h zkJ(Hm(SZ%1NJXc^xCUhom7sRmU8uTF)o}`rJ%*fxW9EJd%GvGF&cm&p(}Ud-EMzlr zgWT{-aw=}moEx<#D%qzIQjQBYW~P^*J3=eNxt%3=93%5igbeD-@Hsnz<{Q5Oqe16b delta 809 zcmZXS&ubGw6vvq~vB{;{gCZK~pjC|dwMj!wVv|FYY6BvoltNFLY$oZ_-I;Y})--si zSV2%}DO;V3o&@btyaYUm7K(x(>dk}Tzu?iElONk3dYku|H*db*_uilN!1K+(>sP*z zmd|L3+{Mho1~}^O_#O{HR_g&ebjJe|JrMMd`EtKjBmPdr4<4Kg&fIW_Ff1&0E`ZBE zz3P5jIwtQXz;K`n32n(}6l|>!3QbCym_dhQ4yy!Nm^RLrDB+HUY9_7-Y?YBfk!o!B zcGfY?f7v`nHYNMBDT7=`LSTmLkf9b-0d7*(hFma%G&w{(08QgI?qp)%FaRHAISwkr zv91)jCs%%s0}M80DgmCk_vdeRwv*lLv+}zJ#@+nMk<(9BUohPG5oJx-*T3&8Y+_wd z_rs^y%K9~BR(-eYdMy%^GSwgHyr%}5Xl&QX?qU$kf)!>hE( zle#)B$60^0aYIcfKIp4~xjXuMtX8iOof6%2xbm8Z{VI4_rPg5$Hz>o + diff --git a/Aetheria.State.Verify/Program.cs b/Aetheria.State.Verify/Program.cs index 4d18d0288..db6e844ce 100644 --- a/Aetheria.State.Verify/Program.cs +++ b/Aetheria.State.Verify/Program.cs @@ -1,5 +1,6 @@ using Aetheria.State; using Aetheria.State.Documents; +using GameCult.Aetheria.State.Unity; var root = args.Length > 0 ? Path.GetFullPath(args[0]) : Directory.GetCurrentDirectory(); var statePath = args.Length > 1 @@ -86,13 +87,13 @@ var importedThermalCurveItems = items.Count(item => item.ThermalPerformanceCurve var thermalResilienceItems = items.Count(item => item.ThermalResilience > 0); var audioStatItems = items.Count(item => item.AudioStats.Length > 0); var audioStatCount = items.Sum(item => item.AudioStats.Length); -var consumableItems = items.Count(item => item.Category == "ConsumableItemData"); -var consumableDurationItems = items.Count(item => item.Category == "ConsumableItemData" && item.Duration > 0); +var consumableItems = items.Count(item => item.Category == AetheriaRuntimeItemCategories.Consumable); +var consumableDurationItems = items.Count(item => item.Category == AetheriaRuntimeItemCategories.Consumable && item.Duration > 0); var consumableEffectivenessItems = items.Count(item => item.EffectivenessCurveKeys.Length > 0); var actionBarIconItems = items.Count(item => !string.IsNullOrWhiteSpace(item.ActionBarIcon)); -var dockingBayItems = items.Count(item => item.Category == "DockingBayData"); +var dockingBayItems = items.Count(item => item.Category == AetheriaRuntimeItemCategories.DockingBay); var dockingBayMaxSizeItems = items.Count(item => - item.Category == "DockingBayData" && + item.Category == AetheriaRuntimeItemCategories.DockingBay && item.DockingMaxSizeX > 0 && item.DockingMaxSizeY > 0); var describedCorporations = corporations.Count(corporation => !string.IsNullOrWhiteSpace(corporation.Description)); diff --git a/docs/aetheria-perfect-machine-map.md b/docs/aetheria-perfect-machine-map.md index 585e82efb..81adc08bb 100644 --- a/docs/aetheria-perfect-machine-map.md +++ b/docs/aetheria-perfect-machine-map.md @@ -549,7 +549,9 @@ legacy catalog cache, and legacy UI paths should be migration-only or deleted. map is keyed by typed behavior payload kind rather than legacy union key. Runtime item category classification uses package-owned `AetheriaRuntimeItemCategories` tokens; gameplay code should not ask C# - legacy DTO class names to classify typed catalog rows. + legacy DTO class names to classify typed catalog rows. The typed state + verifier also consumes those package-owned category tokens for consumable and + docking-bay coverage checks instead of hardcoding migrated class-name strings. Item/behavior DTO field layout for the temporary projection bridge is now marked with project-owned `LegacyPayloadKeyAttribute`, not MessagePack metadata. Item properties