From 085c69fe2eb98f6cf00a3fd64bd812402ce537d9 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sun, 28 Jun 2026 05:51:22 +0100 Subject: [PATCH] Refresh Unity parity state checks --- .../scripts/verify-stage7d-unity-parity.ps1 | 102 ++++++++++++------ 1 file changed, 70 insertions(+), 32 deletions(-) diff --git a/Aetheria.State/scripts/verify-stage7d-unity-parity.ps1 b/Aetheria.State/scripts/verify-stage7d-unity-parity.ps1 index 1b20bf6ca..34187ed17 100644 --- a/Aetheria.State/scripts/verify-stage7d-unity-parity.ps1 +++ b/Aetheria.State/scripts/verify-stage7d-unity-parity.ps1 @@ -40,11 +40,18 @@ Assert-NotContains $mainMenu "ActionGameManager.Instance.ShowInputScreenFromMenu Assert-NotContains $mainMenu "ActionGameManager.Instance.CanShowInputScreenFromMenu" "MainMenu must not query runtime input screen through ActionGameManager.Instance." $mapRenderer = Read-Text "Assets\Scripts\UI\Menu\MapRenderer.cs" -Assert-Contains $mapRenderer "ObjectsViewportAsync" "MapRenderer must exercise the split objects viewport facade." -Assert-Contains $mapRenderer "GravityViewportAsync" "MapRenderer must exercise the split gravity viewport facade." -Assert-Contains $mapRenderer "PlayerSettingsAsync" "MapRenderer must read player settings through AetheriaClient." +Assert-Contains $mapRenderer ".Aetheria()" "MapRenderer must enter map viewport state through the semantic Aetheria facade." +Assert-Contains $mapRenderer ".Viewports" "MapRenderer must exercise the managed viewport document facade." +Assert-Contains $mapRenderer ".Objects(viewport)" "MapRenderer must read the split objects viewport document handle." +Assert-Contains $mapRenderer ".RenderSplats(viewport)" "MapRenderer must read the split render-splats viewport document handle." +Assert-Contains $mapRenderer ".Settings" "MapRenderer must read player settings through managed typed state." +Assert-Contains $mapRenderer ".Player" "MapRenderer must read player settings through the player settings document handle." +Assert-Contains $mapRenderer ".Latest()" "MapRenderer must read a typed player settings snapshot." Assert-NotContains $mapRenderer "public ActionGameManager" "MapRenderer must not regain an ActionGameManager serialized dependency." Assert-NotContains $mapRenderer "LatestAuthoritativeRunFrameAsync" "MapRenderer must not regress to whole-frame reads for map viewport data." +Assert-NotContains $mapRenderer "ObjectsViewportAsync" "MapRenderer must not use the transitional objects viewport helper." +Assert-NotContains $mapRenderer "GravityViewportAsync" "MapRenderer must not use the transitional gravity viewport helper." +Assert-NotContains $mapRenderer "PlayerSettingsAsync" "MapRenderer must not use the transitional player settings helper." Assert-NotContains $mapRenderer "ActionGameManager.RuntimePlayerSettings" "MapRenderer must not read manager-global player settings." $sectorRenderer = Read-Text "Assets\Scripts\UI\Menu\SectorRenderer.cs" @@ -56,9 +63,14 @@ Assert-Contains $sectorRenderer ".SectorMap" "SectorRenderer zone details must r Assert-Contains $sectorRenderer ".LatestAsync()" "SectorRenderer must read typed state snapshots." Assert-NotContains $sectorRenderer ".CurrentZoneAsync()" "SectorRenderer must not use the transitional current-zone helper." Assert-NotContains $sectorRenderer ".SectorMapAsync()" "SectorRenderer must not use the transitional sector-map helper." -Assert-Contains $sectorRenderer "ZoneDetailsAsync" "SectorRenderer zone details must read daemon zone facts through AetheriaClient." -Assert-Contains $sectorRenderer "OpenRuntimeCatalog" "SectorRenderer zone details must read catalog data through AetheriaClient." -Assert-Contains $sectorRenderer "PlayerSettingsAsync" "SectorRenderer zone details must read formatting settings through AetheriaClient." +Assert-Contains $sectorRenderer ".Details" "SectorRenderer zone details must read daemon zone facts through managed detail documents." +Assert-Contains $sectorRenderer ".Zone(zoneIndex)" "SectorRenderer zone details must read the typed zone-details document handle." +Assert-Contains $sectorRenderer ".Catalog" "SectorRenderer zone details must read catalog data through managed typed state." +Assert-Contains $sectorRenderer ".Settings" "SectorRenderer zone details must read formatting settings through managed typed state." +Assert-Contains $sectorRenderer ".Player" "SectorRenderer zone details must read the player settings document handle." +Assert-NotContains $sectorRenderer "ZoneDetailsAsync" "SectorRenderer zone details must not use the transitional zone-details helper." +Assert-NotContains $sectorRenderer "OpenRuntimeCatalog" "SectorRenderer zone details must not use the transitional catalog helper." +Assert-NotContains $sectorRenderer "PlayerSettingsAsync" "SectorRenderer zone details must not use the transitional player settings helper." Assert-NotContains $sectorRenderer "public ActionGameManager" "SectorRenderer must not regain an ActionGameManager serialized dependency." Assert-NotContains $sectorRenderer "TryGetObservedRunZone" "SectorRenderer must not ask ActionGameManager for the current zone." Assert-NotContains $sectorRenderer "ActionGameManager.RuntimeCatalog" "SectorRenderer must not read manager-global runtime catalog." @@ -87,7 +99,10 @@ Assert-Contains $inventoryPanel ".StationRefit" "InventoryPanel dropdown entity Assert-NotContains $inventoryPanel ".CurrentDockingAsync()" "InventoryPanel dropdown docking access must not use the transitional current-docking helper." Assert-NotContains $inventoryPanel ".StationRefitAsync()" "InventoryPanel dropdown entity options must not use the transitional station-refit helper." Assert-Contains $inventoryPanel "LoadoutRestoreOptions" "InventoryPanel loadout dropdown must read typed station-refit restore options." -Assert-Contains $inventoryPanel "LoadoutTemplateAsync(targetEntityKey)" "InventoryPanel loadout saves must project the target entity through the typed client." +Assert-Contains $inventoryPanel "AetheriaRuntimeLoadoutSnapshotProjector" "InventoryPanel loadout saves must project the target entity through the managed state projector." +Assert-Contains $inventoryPanel "ProjectLoadoutTemplateAsync(client.State, targetEntityKey)" "InventoryPanel loadout saves must compose from managed typed state." +Assert-Contains $inventoryPanel ".Ui.SaveLoadoutTemplateAsync" "InventoryPanel loadout saves must submit through the Aetheria UI command shell." +Assert-NotContains $inventoryPanel "LoadoutTemplateAsync(targetEntityKey)" "InventoryPanel loadout saves must not use the transitional loadout helper." Assert-Contains $inventoryPanel "AetheriaRuntimeStationLoadoutRestoreOption" "InventoryPanel loadout restore submission must use typed station-refit option rows." Assert-Contains $inventoryPanel "TryResolveObservedDockingIndex(out var dockingIndex)" "InventoryPanel dropdown docking access must enter through the typed docking adapter." Assert-NotContains $inventoryPanel "TryGetTypedCurrentDockingBayFacade" "InventoryPanel dropdown docking access must not keep transitional typed facade helpers." @@ -125,8 +140,8 @@ Assert-Contains $inventoryMenu "_shipSettingsCurrentEntity" "InventoryMenu ship- Assert-Contains $inventoryMenu "latestCurrentEntity.ShutdownPerformance" "InventoryMenu ship-settings surface must use typed shutdown-performance projection." Assert-Contains $inventoryMenu "TryResolveObservedDockingIndex(out var dockingIndex)" "InventoryMenu current facade access must enter through the typed docking adapter." Assert-NotContains $inventoryMenu "TryGetTypedCurrentEntityFacade" "InventoryMenu current facade access must not keep transitional typed facade helpers." -Assert-Contains $inventoryMenu "SetObservedFacadeIndex(AetheriaUnityObservedFacadeIndex observedFacadeIndex)" "InventoryMenu must receive facade adaptation explicitly." -Assert-Contains $inventoryMenu "_observedFacadeIndex.TryResolveEntityByRecordKey" "InventoryMenu must adapt current entity facades by typed daemon record key." +Assert-NotContains $inventoryMenu "SetObservedFacadeIndex(AetheriaUnityObservedFacadeIndex observedFacadeIndex)" "InventoryMenu must not keep transitional observed facade adaptation." +Assert-NotContains $inventoryMenu "_observedFacadeIndex.TryResolveEntityByRecordKey" "InventoryMenu must not adapt current entity facades by typed daemon record key." Assert-Contains $inventoryMenu ".Docking" "InventoryMenu docking facade access must read the typed current-docking document handle." Assert-Contains $inventoryMenu ".StationRefit" "InventoryMenu docking options must read the typed station-refit document handle." Assert-NotContains $inventoryMenu ".CurrentDockingAsync()" "InventoryMenu docking facade access must not use the transitional current-docking helper." @@ -144,7 +159,9 @@ Assert-NotMatches $inventoryMenu "HandleCurrentShipSettingsSurfaceCommand[\s\S]* Assert-Contains $inventoryPanel "TryResolveTypedInventoryRows" "InventoryPanel cargo/equipment submissions must validate against typed inventory projection rows." Assert-Contains $inventoryPanel "TryValidateTypedCargoSlot" "InventoryPanel cargo submissions must validate typed cargo slot identity." Assert-Contains $inventoryPanel "TryValidateTypedEquipmentSlot" "InventoryPanel equipment submissions must validate typed equipment slot identity." -Assert-Contains $inventoryPanel "InventoryAsync(entityIndex)" "InventoryPanel must read non-current inventory through the typed client facade." +Assert-Contains $inventoryPanel ".Details" "InventoryPanel must read non-current inventory through managed detail documents." +Assert-Contains $inventoryPanel ".Inventory(entityIndex)" "InventoryPanel must read non-current inventory through the typed inventory document handle." +Assert-NotContains $inventoryPanel "InventoryAsync(entityIndex)" "InventoryPanel must not use the transitional inventory helper." Assert-Contains $inventoryPanel "origin.Cargo.TryGetValue(item, out var originPosition)" "InventoryPanel cargo submissions must carry the typed origin grid cell." Assert-NotContains $inventoryPanel "int.MinValue" "InventoryPanel cargo/equipment submissions must not send unknown origin coordinates." Assert-NotContains $inventoryPanel "TryResolveObservedCargoBayCommandTarget" "InventoryPanel must not resolve cargo operations through manager command-target adapters." @@ -152,7 +169,9 @@ Assert-NotContains $inventoryPanel "TryResolveObservedEquippedItemCommandTarget" Assert-Contains $inventoryMenu "TryResolveTypedInventoryRows" "InventoryMenu cargo/equipment submissions must validate against typed inventory projection rows." Assert-Contains $inventoryMenu "TryValidateTypedCargoSlot" "InventoryMenu cargo submissions must validate typed cargo slot identity." Assert-Contains $inventoryMenu "TryValidateTypedEquipmentSlot" "InventoryMenu equipment submissions must validate typed equipment slot identity." -Assert-Contains $inventoryMenu "InventoryAsync(entityIndex)" "InventoryMenu must read non-current inventory through the typed client facade." +Assert-Contains $inventoryMenu ".Details" "InventoryMenu must read non-current inventory through managed detail documents." +Assert-Contains $inventoryMenu ".Inventory(entityIndex)" "InventoryMenu must read non-current inventory through the typed inventory document handle." +Assert-NotContains $inventoryMenu "InventoryAsync(entityIndex)" "InventoryMenu must not use the transitional inventory helper." Assert-Contains $inventoryMenu "origin.Cargo.TryGetValue(item, out var originPosition)" "InventoryMenu cargo submissions must carry the typed origin grid cell." Assert-Contains $inventoryMenu "SetActionBarPresentation(AetheriaUnityActionBarPresentation actionBarPresentation)" "InventoryMenu must receive action-bar presentation explicitly." Assert-NotContains $inventoryMenu "ProjectEquippedItemActionBarSlots(" "InventoryMenu must not project Unity-local action-bar binding controls into the shared equipped-item surface." @@ -210,15 +229,18 @@ Assert-NotContains $tradeMenu "HullItemKey" "TradeMenu owned ship counts must co $inventoryPanel = Read-Text "Assets\Scripts\UI\Menu\InventoryPanel.cs" Assert-Contains $inventoryPanel ".StationRefit" "InventoryPanel must resolve station/refit selections from typed station-refit projection." -Assert-Contains $inventoryPanel "SetObservedFacadeIndex(AetheriaUnityObservedFacadeIndex observedFacadeIndex)" "InventoryPanel must receive facade adaptation explicitly." -Assert-Contains $inventoryPanel "_observedFacadeIndex.TryResolveEntityByRecordKey" "InventoryPanel may adapt Unity facade objects only by typed daemon record key." -Assert-Contains $inventoryPanel "_observedFacadeIndex.TryResolveDockingBayByRecordKey" "InventoryPanel must adapt docking bays by typed daemon parent key and docking bay index." +Assert-Contains $inventoryPanel "SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex)" "InventoryPanel must receive entity adaptation explicitly." +Assert-Contains $inventoryPanel "_observedEntityIndex.TryResolveEntityByRecordKey" "InventoryPanel may adapt Unity facade objects only by typed daemon record key." +Assert-Contains $inventoryPanel "new AetheriaUnityObservedDockingIndex(ResolveClient, _observedEntityIndex)" "InventoryPanel must adapt docking through the typed docking index." +Assert-NotContains $inventoryPanel "SetObservedFacadeIndex(AetheriaUnityObservedFacadeIndex observedFacadeIndex)" "InventoryPanel must not keep transitional generic facade adaptation." +Assert-NotContains $inventoryPanel "_observedFacadeIndex" "InventoryPanel must not keep the generic observed facade index." Assert-NotContains $inventoryPanel "ObservedAvailableEntities()" "InventoryPanel must not read broad manager-global available entity collections." Assert-NotContains $inventoryPanel "TryGetObservedDockingBay(" "InventoryPanel must read typed current docking before adapting a Unity docking bay facade." $inventoryMenu = Read-Text "Assets\Scripts\UI\Menu\InventoryMenu.cs" Assert-Contains $inventoryMenu ".Docking" "InventoryMenu must resolve docking display state from typed current-docking projection." -Assert-Contains $inventoryMenu "_observedFacadeIndex.TryResolveDockingBayByRecordKey" "InventoryMenu must adapt docking bays by typed daemon parent key and docking bay index." +Assert-Contains $inventoryMenu "new AetheriaUnityObservedDockingIndex(ResolveClient, _observedEntityIndex)" "InventoryMenu must adapt docking bays through the typed docking index." +Assert-NotContains $inventoryMenu "_observedFacadeIndex" "InventoryMenu must not keep the generic observed facade index." Assert-NotContains $inventoryMenu "TryGetObservedDockingBay(" "InventoryMenu must not read broad manager-global docking bay state." $localMenu = Read-Text "Assets\Scripts\UI\Menu\LocalMenu.cs" @@ -226,10 +248,12 @@ Assert-Contains $localMenu "TryResolveDockedLocalStory(out _currentLocation)" "L Assert-Contains $localMenu ".Aetheria()" "LocalMenu local story visibility must enter state through the semantic Aetheria facade." Assert-Contains $localMenu ".Docking" "LocalMenu must read typed current-docking state before showing local story." Assert-NotContains $localMenu ".CurrentDockingAsync()" "LocalMenu must not use the transitional current-docking helper." -Assert-Contains $localMenu "SetObservedFacadeIndex(AetheriaUnityObservedFacadeIndex observedFacadeIndex)" "LocalMenu must receive facade adaptation explicitly." -Assert-Contains $localMenu "_observedFacadeIndex.TryResolveDockingBayByRecordKey" "LocalMenu may adapt story-bearing docking parents only by typed parent key and docking bay index." -Assert-Contains $localMenu "docking.DockParentEntityKey" "LocalMenu must use typed dock parent identity for local story adaptation." -Assert-Contains $localMenu "docking.DockingBayIndex" "LocalMenu must use typed docking bay index for local story adaptation." +Assert-Contains $localMenu "SetObservedEntityIndex(AetheriaUnityObservedEntityIndex observedEntityIndex)" "LocalMenu must receive entity adaptation explicitly." +Assert-Contains $localMenu "_observedEntityIndex.TryResolveDockingBayByRecordKey" "LocalMenu may adapt story-bearing docking parents only by typed parent key and docking bay index." +Assert-NotContains $localMenu "SetObservedFacadeIndex(AetheriaUnityObservedFacadeIndex observedFacadeIndex)" "LocalMenu must not keep transitional generic facade adaptation." +Assert-NotContains $localMenu "_observedFacadeIndex" "LocalMenu must not keep the generic observed facade index." +Assert-Contains $localMenu "dockingState.DockParentEntityKey" "LocalMenu must use typed dock parent identity for local story adaptation." +Assert-Contains $localMenu "dockingState.DockingBayIndex" "LocalMenu must use typed docking bay index for local story adaptation." Assert-NotContains $localMenu "TryGetObservedDockedLocalStory" "LocalMenu must not ask ActionGameManager for docked local story state." Assert-NotContains $localMenu "DockedEntity" "LocalMenu must not read ActionGameManager.DockedEntity." @@ -272,11 +296,14 @@ $renderSettingsBridge = Read-Text "Assets\Scripts\Gameplay\AetheriaUnityRenderSe $cockpitHudShell = Read-Text "Assets\Scripts\Gameplay\AetheriaUnityCockpitHudShell.cs" $gameplayBootShell = Read-Text "Assets\Scripts\Gameplay\AetheriaUnityGameplayBootShell.cs" $sceneWiring = Read-Text "Assets\Scripts\Gameplay\AetheriaUnityGameplaySceneWiring.cs" -Assert-Contains $actionGameManager "private readonly AetheriaUnityObservedFacadeIndex _observedFacadeIndex" "ActionGameManager must keep observed facade adaptation behind an explicit helper." +Assert-Contains $actionGameManager "private readonly AetheriaUnityObservedEntityIndex _observedEntityIndex" "ActionGameManager must keep observed entity adaptation behind an explicit helper." +Assert-Contains $actionGameManager "private AetheriaUnityObservedDockingIndex _observedDocking" "ActionGameManager must keep observed docking adaptation behind an explicit helper." Assert-Contains $actionGameManager "private AetheriaUnityGameplaySceneWiring SceneWiring =>" "ActionGameManager should delegate Unity scene dependency wiring to a focused helper." -Assert-Contains $actionGameManager "SceneWiring.ConfigureObservedFacadeIndex(_observedFacadeIndex)" "ActionGameManager should delegate facade injection to scene wiring." +Assert-Contains $actionGameManager "SceneWiring.ConfigureObservedEntityIndex(_observedEntityIndex)" "ActionGameManager should delegate entity-index injection to scene wiring." Assert-Contains $sceneWiring "public sealed class AetheriaUnityGameplaySceneWiring" "Unity scene wiring should live outside ActionGameManager." -Assert-Contains $sceneWiring "Inventory?.SetObservedFacadeIndex(observedFacadeIndex)" "Scene wiring should inject facade adaptation into InventoryMenu." +Assert-Contains $sceneWiring "Inventory?.SetObservedEntityIndex(observedEntityIndex)" "Scene wiring should inject entity adaptation into InventoryMenu." +Assert-NotContains $actionGameManager "AetheriaUnityObservedFacadeIndex" "ActionGameManager must not keep the generic observed facade index." +Assert-NotContains $sceneWiring "SetObservedFacadeIndex" "Scene wiring must not inject the generic observed facade index." Assert-NotContains $actionGameManager "public bool TryResolveObservedEntityRecordKey" "ActionGameManager must not expose facade record-key lookup as public manager API." Assert-NotContains $actionGameManager "public bool TryResolveObservedEntityFacadeByRecordKey" "ActionGameManager must not expose entity facade lookup as public manager API." Assert-NotContains $actionGameManager "public bool TryResolveObservedDockingBayFacadeByRecordKey" "ActionGameManager must not expose docking facade lookup as public manager API." @@ -284,13 +311,13 @@ Assert-Contains $actionGameManager "var boot = GameplayBootShell.Boot();" "Actio Assert-Contains $actionGameManager "SceneWiring.ConfigureCurrentEntityPresentation(_currentEntityPresentation, boot.RuntimeCatalog);" "ActionGameManager should delegate boot catalog injection into current-entity presentation." Assert-Contains $actionGameManager "SceneWiring.ConfigureTargetPresentation(" "ActionGameManager should delegate boot catalog injection into target presentation." Assert-Contains $actionGameManager "() => ResolveDaemonObserver()?.Client" "ActionGameManager should give target queries the typed local client, not a raw zone snapshot delegate." -Assert-Contains $sceneWiring "observedFacadeIndex.TryResolveEntityByDaemonIndex" "Scene wiring should adapt target presentation entities through the facade index." +Assert-Contains $sceneWiring "observedEntityIndex.TryResolveEntityByDaemonIndex" "Scene wiring should adapt target presentation entities through the observed entity index." Assert-Contains $actionGameManager "SceneWiring.ConfigureActionBarPresentation(" "ActionGameManager should delegate boot catalog injection into local action-bar presentation." Assert-NotContains $actionGameManager "private void ConfigureCurrentEntityPresentation(" "ActionGameManager must not own current-entity presentation scene wiring." Assert-NotContains $actionGameManager "private void ConfigureTargetPresentation(" "ActionGameManager must not own target presentation scene wiring." Assert-NotContains $actionGameManager "TryGetObservedEntityFacade" "ActionGameManager must not own daemon-index facade lookup shims." Assert-NotContains $actionGameManager "private void ConfigureActionBarPresentation(" "ActionGameManager must not own action-bar presentation scene wiring." -Assert-NotContains $actionGameManager "private void ConfigureObservedFacadeIndex(" "ActionGameManager must not own facade scene wiring." +Assert-NotContains $actionGameManager "private void ConfigureObservedFacadeIndex(" "ActionGameManager must not own generic facade scene wiring." Assert-NotContains $actionGameManager "private static AetheriaRuntimeCatalogSnapshot _runtimeCatalog" "ActionGameManager must not cache runtime catalog as manager-global state." Assert-NotContains $actionGameManager "FindTypedRuntimeItem(" "ActionGameManager must not own runtime catalog item lookup policy." Assert-NotContains $actionGameManager "ArticulatedWeaponBehaviorKinds" "ActionGameManager must not own weapon presentation policy." @@ -300,7 +327,10 @@ Assert-Contains $gameplayBootShell "public sealed class AetheriaUnityGameplayBoo Assert-Contains $gameplayBootShell "AetheriaRuntimeStateBoot.Inspect(AetheriaUnityRuntimePaths.GameDataDirectory)" "Gameplay boot shell should inspect the runtime target." Assert-Contains $gameplayBootShell "AetheriaUnityRuntimeClientProvider.ResolveClient(stateBoot.StateFilePath, stateBoot.RuntimeId)" "Gameplay boot shell should resolve the typed runtime client with the inspected Verse runtime id." Assert-Contains $gameplayBootShell "Aetheria runtime id: {stateBoot.RuntimeId}" "Gameplay boot shell should log the inspected Verse runtime id." -Assert-Contains $gameplayBootShell ".OpenRuntimeCatalog()" "Gameplay boot shell should open the typed runtime catalog." +Assert-Contains $gameplayBootShell ".Aetheria()" "Gameplay boot shell should enter managed typed state for runtime catalog." +Assert-Contains $gameplayBootShell ".Catalog" "Gameplay boot shell should read the managed runtime catalog document handle." +Assert-Contains $gameplayBootShell ".Latest()" "Gameplay boot shell should read the latest typed runtime catalog snapshot." +Assert-NotContains $gameplayBootShell ".OpenRuntimeCatalog()" "Gameplay boot shell should not use the transitional runtime catalog helper." Assert-Contains $gameplayBootShell "new ItemManager(" "Gameplay boot shell should construct the Unity item adapter." Assert-Contains $gameplayBootShell "new AetheriaUnityLoadoutItemProjector(itemManager, runtimeCatalog)" "Gameplay boot shell should construct the loadout item projector." Assert-Contains $gameplayBootShell "ZoneRenderer.SetDroppedPickupItemProjector(loadoutItemProjector.CreateLoadoutItem)" "Gameplay boot shell should configure dropped pickup projection." @@ -417,7 +447,11 @@ Assert-Contains $gameplayBootShell "AetheriaUnityRuntimeClientProvider.ResolveCl Assert-Contains $runtimeClientProvider "public static class AetheriaUnityRuntimeClientProvider" "Unity runtime client cache should live outside ActionGameManager." Assert-Contains $runtimeClientProvider "public static RuntimePlayerSettings PlayerSettings =>" "Unity runtime client provider should own player settings loading." Assert-Contains $runtimeClientProvider "public static AetheriaClient ResolveClient(string stateFilePath, string runtimeId = """")" "Unity runtime client provider should own runtime-id-aware typed client caching." -Assert-Contains $runtimeClientProvider "PlayerSettingsAsync()" "Unity runtime client provider should read player settings through AetheriaClient." +Assert-Contains $runtimeClientProvider ".Aetheria()" "Unity runtime client provider should read player settings through managed typed state." +Assert-Contains $runtimeClientProvider ".Settings" "Unity runtime client provider should read player settings through the settings facade." +Assert-Contains $runtimeClientProvider ".Player" "Unity runtime client provider should read the player settings document handle." +Assert-Contains $runtimeClientProvider ".Latest()" "Unity runtime client provider should read a typed player settings snapshot." +Assert-NotContains $runtimeClientProvider "PlayerSettingsAsync()" "Unity runtime client provider must not use the transitional player settings helper." Assert-NotContains $actionGameManager "ResolveRuntimeClient(" "ActionGameManager should not own typed client caching." Assert-NotContains $actionGameManager "PlayerSettingsAsync()" "ActionGameManager should not load player settings directly." Assert-NotContains $actionGameManager "ApplyRuntimePlayerSettings(" "ActionGameManager should not map player settings snapshots." @@ -516,7 +550,9 @@ $client = Read-Text "Packages\org.gamecult.aetheria.state\Runtime\AetheriaClient $loadoutProjector = Read-Text "Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeLoadoutSnapshotProjector.cs" Assert-Contains $loadoutProjector "ProjectLoadoutTemplate(" "Typed loadout projection must live in the shared runtime package." Assert-Contains $loadoutProjector "AetheriaRuntimeEntitySnapshotCommit entity" "Shared loadout projection must support daemon entity snapshots." -Assert-Contains $client "LoadoutTemplateAsync" "AetheriaClient must expose daemon-backed loadout template projection." +Assert-Contains $loadoutProjector "ProjectLoadoutTemplateAsync(" "Shared loadout projection must compose loadout templates from managed typed state." +Assert-Contains $loadoutProjector "AetheriaClientState state" "Shared loadout projection must accept the managed client state surface." +Assert-NotContains $client "LoadoutTemplateAsync" "AetheriaClient must not expose transitional loadout template projection helpers." $inventoryPanel = Read-Text "Assets\Scripts\UI\Menu\InventoryPanel.cs" Assert-NotContains $inventoryPanel "AetheriaRuntimeLoadoutProjector.ProjectLoadoutTemplate(entity)" "InventoryPanel must not save loadouts by serializing Unity entity facades." @@ -646,7 +682,7 @@ Assert-Contains $zoneRenderDocs "BodyPoses" "Zone-render feed must carry body po Assert-Contains $zoneRenderDocs "AsteroidBeltPoses" "Zone-render feed must carry asteroid belt poses as explicit render facts." Assert-Contains $zoneRenderDocs "AetheriaRuntimeZoneRenderAsteroidInstancePose" "Zone-render feed must carry typed asteroid instance poses." Assert-Contains $zoneRenderDocs "DroppedPickups" "Zone-render feed must carry dropped pickups as explicit render facts." -Assert-Contains $zoneRenderDocs "EntityFacades" "Zone-render feed must carry typed entity facade payloads for Unity shell restoration." +Assert-Contains $zoneRenderDocs "EntitySnapshots" "Zone-render feed must carry typed entity snapshots for Unity shell restoration." Assert-Contains $zoneRenderDocs "public IReadOnlyList Orbits" "Zone-render feed must carry typed orbit rows for Unity zone context lowering." Assert-Contains $zoneRenderDocs "public IReadOnlyList Bodies" "Zone-render feed must carry typed body rows for Unity zone context lowering." Assert-NotContains $zoneRenderDocs "public AetheriaRuntimeRunCheckpointCommit Run" "Zone-render feed must not expose the whole daemon run snapshot." @@ -666,14 +702,16 @@ Assert-Contains $zoneRenderer ".LatestAsync()" "ZoneRenderer target distance cac Assert-NotContains $zoneRenderer ".ZoneContactsAsync()" "ZoneRenderer target distance cache must not use the transitional zone-contacts helper." Assert-Contains $zoneRenderer "_daemonTargetRowsByEntityIndex" "ZoneRenderer target distance cache must store typed target rows." Assert-Contains $zoneRenderer "_daemonContactRows" "ZoneRenderer compass and visibility state must cache typed contact rows." -Assert-Contains $zoneRenderer "ObjectsViewportAsync(ToViewportBounds(viewport))" "ZoneRenderer presentation loading must use the typed objects viewport facade." -Assert-Contains $zoneRenderer "GravityViewportAsync(viewport)" "ZoneRenderer body view loading must use the typed gravity viewport facade." +Assert-Contains $zoneRenderer ".Viewports" "ZoneRenderer presentation loading must use managed viewport document handles." +Assert-Contains $zoneRenderer ".Objects(ToViewportBounds(viewport))" "ZoneRenderer presentation loading must use the typed objects viewport document handle." +Assert-NotContains $zoneRenderer "ObjectsViewportAsync(ToViewportBounds(viewport))" "ZoneRenderer presentation loading must not use the transitional objects viewport helper." +Assert-NotContains $zoneRenderer "GravityViewportAsync(viewport)" "ZoneRenderer body view loading must not use the transitional gravity viewport helper." Assert-Contains $zoneRenderDocs "public AetheriaRuntimeBodySnapshotCommit Body" "Gravity/body viewport rows must carry the typed body payload needed for Unity presentation lowering." Assert-Contains $zoneRenderDocs "public double TerrainRadius" "Gravity viewport rows must carry terrain radius for local renderer height sampling." Assert-Contains $zoneRenderDocs "public double TerrainDepth" "Gravity viewport rows must carry terrain depth for local renderer height sampling." Assert-Contains $zoneRenderDocs "public double TerrainDepthExponent" "Gravity viewport rows must carry terrain exponent for local renderer height sampling." Assert-Contains $zoneRenderDocs "public double TerrainWaveFrequency" "Gravity viewport rows must carry wave frequency for local renderer height sampling." -Assert-Contains $zoneRenderer "_daemonGravityViewport" "ZoneRenderer terrain sampling must use the cached typed gravity viewport." +Assert-Contains $zoneRenderer "_zoneRenderBodyPoses" "ZoneRenderer terrain/body presentation must consume typed body poses from zone-render." Assert-Contains $zoneRenderer "ZoneRenderRadius" "ZoneRenderer must consume render radius from the zone-render feed." Assert-NotContains $zoneRenderer "_daemonRunSnapshot" "ZoneRenderer must not retain the whole daemon run snapshot." Assert-NotContains $zoneRenderer "_daemonZoneSnapshot" "ZoneRenderer must not retain the whole daemon zone snapshot." @@ -712,7 +750,7 @@ Assert-NotContains $actionGameManager "_time" "ActionGameManager must not keep u Assert-Contains $observedFrameApplier "TryRestoreEntityGraphFromZoneRender" "Observed frame applier must restore Unity shell state from the typed zone-render feed." Assert-Contains $observedFrameApplier "ApplyLatestZoneRender" "Observed frame applier must name the handoff as zone-render application." Assert-Contains $observedFrameApplier ".ZoneRender" "Observed frame applier must use the shared zone-render document handle at the frame handoff." -Assert-Contains $observedFrameApplier "render.EntityFacades" "Observed frame applier entity restoration must consume the typed zone-render entity facade payload." +Assert-Contains $observedFrameApplier "render.EntitySnapshots" "Observed frame applier entity restoration must consume the typed zone-render entity snapshot payload." Assert-NotContains $observedFrameApplier "Func" "Observed frame applier must not depend on the whole observed galaxy facade." Assert-Contains $observedFrameApplier "_resolveObservedZone" "Observed frame applier should name the narrow target-zone resolver explicitly." Assert-NotContains $observedFrameApplier "resolveObservedGalaxy" "Observed frame applier must resolve only the target zone needed for Unity shell adaptation."