From 7846c4d80284157fc3716c752ccad008241b67d4 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Sat, 27 Jun 2026 14:01:41 +0100 Subject: [PATCH] Use Aetheria state handles for docking UI reads --- .../scripts/verify-stage7d-unity-parity.ps1 | 31 +++++++++++++------ .../AetheriaUnityObservedDockingIndex.cs | 8 ++++- Assets/Scripts/UI/Menu/InventoryMenu.cs | 13 ++++++-- Assets/Scripts/UI/Menu/InventoryPanel.cs | 9 ++++-- Assets/Scripts/UI/Menu/LocalMenu.cs | 5 ++- Assets/Scripts/UI/Menu/MenuPanel.cs | 5 ++- Assets/Scripts/UI/Menu/TradeMenu.cs | 9 ++++-- 7 files changed, 60 insertions(+), 20 deletions(-) diff --git a/Aetheria.State/scripts/verify-stage7d-unity-parity.ps1 b/Aetheria.State/scripts/verify-stage7d-unity-parity.ps1 index b50da6cfe..24dbc3ad1 100644 --- a/Aetheria.State/scripts/verify-stage7d-unity-parity.ps1 +++ b/Aetheria.State/scripts/verify-stage7d-unity-parity.ps1 @@ -71,8 +71,10 @@ Assert-Contains $inventoryPanel ".Current" "InventoryPanel current-subject UI mu Assert-Contains $inventoryPanel ".Entity" "InventoryPanel current-subject UI must read the typed current-entity document handle." Assert-Contains $inventoryPanel ".LatestAsync()" "InventoryPanel current-subject UI must read a typed current-entity snapshot." Assert-NotContains $inventoryPanel ".CurrentEntityAsync()" "InventoryPanel current-subject UI must not use the transitional current-entity helper." -Assert-Contains $inventoryPanel "CurrentDockingAsync" "InventoryPanel dropdown docking access must read the typed current-docking facade." -Assert-Contains $inventoryPanel "StationRefitAsync" "InventoryPanel dropdown entity options must read the typed station-refit facade." +Assert-Contains $inventoryPanel ".Docking" "InventoryPanel dropdown docking access must read the typed current-docking document handle." +Assert-Contains $inventoryPanel ".StationRefit" "InventoryPanel dropdown entity options must read the typed station-refit document handle." +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 "AetheriaRuntimeStationLoadoutRestoreOption" "InventoryPanel loadout restore submission must use typed station-refit option rows." @@ -81,7 +83,7 @@ Assert-Contains $inventoryPanel "selection.EntityKey" "InventoryPanel dropdown s Assert-Contains $inventoryPanel "_displayedEntityKey" "InventoryPanel displayed entity state must cache typed entity identity." Assert-Contains $inventoryPanel "_displayedCargoEntityKey" "InventoryPanel displayed cargo state must cache typed cargo identity." Assert-Contains $inventoryPanel "TryResolveStationRefitEntity(string entityKey" "InventoryPanel station-refit selection must resolve from typed entity keys." -Assert-NotContains $inventoryPanel "LoadoutTemplatesAsync()" "InventoryPanel must not enumerate loadout templates separately from StationRefitAsync." +Assert-NotContains $inventoryPanel "LoadoutTemplatesAsync()" "InventoryPanel must not enumerate loadout templates separately from station-refit state." Assert-NotContains $inventoryPanel "TryResolveLoadoutTemplatePrice" "InventoryPanel must not price loadout restore options locally." Assert-NotContains $inventoryPanel "TryResolveCurrentDockingTargetEntityKey" "InventoryPanel must submit the daemon target key from the typed restore option row." Assert-NotContains $inventoryPanel "TryGetObservedCurrentEntity" "InventoryPanel must not ask ActionGameManager for current-entity identity." @@ -112,7 +114,10 @@ Assert-Contains $inventoryMenu "latestCurrentEntity.ShutdownPerformance" "Invent Assert-Contains $inventoryMenu "TryGetTypedCurrentEntityFacade" "InventoryMenu current facade access must be typed-key validated." 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-Contains $inventoryMenu "CurrentDockingAsync" "InventoryMenu docking facade access must read the typed current-docking facade." +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." +Assert-NotContains $inventoryMenu ".StationRefitAsync()" "InventoryMenu docking options must not use the transitional station-refit helper." Assert-Contains $inventoryMenu "TryGetTypedCurrentDockingBayFacade" "InventoryMenu docking facade access must be typed-key validated." Assert-Contains $inventoryMenu "ResolveDefaultShutdownPerformance()" "InventoryMenu ship-settings reset must use typed runtime policy for the default threshold." Assert-Contains $inventoryMenu "ResolvePlayerSettings()?.DefaultShutdownPerformance" "InventoryMenu must read default shutdown performance from typed player settings." @@ -151,8 +156,10 @@ Assert-NotContains $inventoryMenu "TryResolveObservedCargoBayCommandTarget" "Inv Assert-NotContains $inventoryMenu "TryResolveObservedEquippedItemCommandTarget" "InventoryMenu must not resolve equipment operations through manager command-target adapters." $tradeMenu = Read-Text "Assets\Scripts\UI\Menu\TradeMenu.cs" -Assert-Contains $tradeMenu "CurrentDockingAsync" "TradeMenu docking and docked-ship purchase access must read the typed current-docking facade." -Assert-Contains $tradeMenu "StationRefitAsync" "TradeMenu cargo selector ship options must read the typed station-refit facade." +Assert-Contains $tradeMenu ".Docking" "TradeMenu docking and docked-ship purchase access must read the typed current-docking document handle." +Assert-Contains $tradeMenu ".StationRefit" "TradeMenu cargo selector ship options must read the typed station-refit document handle." +Assert-NotContains $tradeMenu ".CurrentDockingAsync()" "TradeMenu docking and docked-ship purchase access must not use the transitional current-docking helper." +Assert-NotContains $tradeMenu ".StationRefitAsync()" "TradeMenu cargo selector ship options must not use the transitional station-refit helper." Assert-Contains $tradeMenu "ResolveStationRefit()?.Credits" "TradeMenu credits must read from the typed station-refit projection." Assert-Contains $tradeMenu "BuildStationStockRows" "TradeMenu row list must be built from typed station stock." Assert-Contains $tradeMenu "ResolveStationRefit()?.StationStock" "TradeMenu station stock rows must read from the typed station-refit projection." @@ -189,7 +196,7 @@ Assert-NotMatches $tradeMenu "private int CountAvailablePlayerShips\([^)]*\)\s*\ Assert-NotContains $tradeMenu "HullItemKey" "TradeMenu owned ship counts must come from station stock facts, not UI-side hull comparisons." $inventoryPanel = Read-Text "Assets\Scripts\UI\Menu\InventoryPanel.cs" -Assert-Contains $inventoryPanel "StationRefitAsync()" "InventoryPanel must resolve station/refit selections from typed station-refit projection." +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." @@ -197,13 +204,15 @@ Assert-NotContains $inventoryPanel "ObservedAvailableEntities()" "InventoryPanel 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 "CurrentDockingAsync()" "InventoryMenu must resolve docking display state from typed current-docking projection." +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-NotContains $inventoryMenu "TryGetObservedDockingBay(" "InventoryMenu must not read broad manager-global docking bay state." $localMenu = Read-Text "Assets\Scripts\UI\Menu\LocalMenu.cs" Assert-Contains $localMenu "TryResolveDockedLocalStory(out _currentLocation)" "LocalMenu must resolve local story visibility through its typed docking path." -Assert-Contains $localMenu "CurrentDockingAsync()" "LocalMenu must read typed current-docking state before showing local story." +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." @@ -316,7 +325,9 @@ Assert-NotContains $observedTargetQuery "AetheriaRuntimeDaemonRenderQueries.TryQ Assert-Contains $targetPresentation "ResolveVisibleContacts" "Unity target presentation must receive typed contact rows." Assert-NotContains $targetPresentation "QueryEntityContacts(" "Unity target presentation must not query contacts from raw zone snapshots." Assert-NotContains $targetPresentation "ResolveZone" "Unity target presentation must not hold raw zone snapshot access." -Assert-Contains $observedDockingIndex "CurrentDockingAsync()" "Unity docking state must read the typed current-docking facade." +Assert-Contains $observedDockingIndex ".Aetheria()" "Unity docking state must enter state through the semantic Aetheria facade." +Assert-Contains $observedDockingIndex ".Docking" "Unity docking state must read the typed current-docking document handle." +Assert-NotContains $observedDockingIndex ".CurrentDockingAsync()" "Unity docking state must not use the transitional current-docking helper." Assert-Contains $observedDockingIndex "TryResolveEntityByRecordKey(docking.DockParentEntityKey" "Unity docking facade adaptation must be keyed by typed dock parent identity." Assert-NotContains $observedDockingIndex "AetheriaRuntimeZoneSnapshotCommit" "Unity docking state must not receive raw zone snapshots." Assert-NotContains $observedDockingIndex "TryGetParentSnapshot" "Unity docking state must not scan raw snapshot parent relationships." diff --git a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs b/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs index a20f07425..e29651758 100644 --- a/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs +++ b/Assets/Scripts/Gameplay/AetheriaUnityObservedDockingIndex.cs @@ -95,7 +95,13 @@ public sealed class AetheriaUnityObservedDockingIndex { try { - return _resolveClient()?.CurrentDockingAsync().GetAwaiter().GetResult(); + return _resolveClient() + ?.Aetheria() + .Current + .Docking + .LatestAsync() + .GetAwaiter() + .GetResult(); } catch { diff --git a/Assets/Scripts/UI/Menu/InventoryMenu.cs b/Assets/Scripts/UI/Menu/InventoryMenu.cs index 0c7b29535..989ff3508 100644 --- a/Assets/Scripts/UI/Menu/InventoryMenu.cs +++ b/Assets/Scripts/UI/Menu/InventoryMenu.cs @@ -805,7 +805,9 @@ public class InventoryMenu : MonoBehaviour try { return ResolveClient() - .StationRefitAsync() + .Aetheria() + .StationRefit + .LatestAsync() .GetAwaiter() .GetResult(); } @@ -823,7 +825,10 @@ public class InventoryMenu : MonoBehaviour try { docking = ResolveClient() - .CurrentDockingAsync() + .Aetheria() + .Current + .Docking + .LatestAsync() .GetAwaiter() .GetResult(); } @@ -883,7 +888,9 @@ public class InventoryMenu : MonoBehaviour } var refit = ResolveClient() - .StationRefitAsync() + .Aetheria() + .StationRefit + .LatestAsync() .GetAwaiter() .GetResult(); var entityIndex = -1; diff --git a/Assets/Scripts/UI/Menu/InventoryPanel.cs b/Assets/Scripts/UI/Menu/InventoryPanel.cs index 2b676d613..b772f5731 100644 --- a/Assets/Scripts/UI/Menu/InventoryPanel.cs +++ b/Assets/Scripts/UI/Menu/InventoryPanel.cs @@ -1191,7 +1191,10 @@ private void Update() try { docking = ResolveClient() - .CurrentDockingAsync() + .Aetheria() + .Current + .Docking + .LatestAsync() .GetAwaiter() .GetResult(); } @@ -1209,7 +1212,9 @@ private void Update() try { return ResolveClient() - .StationRefitAsync() + .Aetheria() + .StationRefit + .LatestAsync() .GetAwaiter() .GetResult(); } diff --git a/Assets/Scripts/UI/Menu/LocalMenu.cs b/Assets/Scripts/UI/Menu/LocalMenu.cs index ab2e485dd..0084cc9b2 100644 --- a/Assets/Scripts/UI/Menu/LocalMenu.cs +++ b/Assets/Scripts/UI/Menu/LocalMenu.cs @@ -212,7 +212,10 @@ public class LocalMenu : MonoBehaviour try { docking = ResolveClient() - .CurrentDockingAsync() + .Aetheria() + .Current + .Docking + .LatestAsync() .GetAwaiter() .GetResult(); } diff --git a/Assets/Scripts/UI/Menu/MenuPanel.cs b/Assets/Scripts/UI/Menu/MenuPanel.cs index d3d031754..5ceb390cd 100644 --- a/Assets/Scripts/UI/Menu/MenuPanel.cs +++ b/Assets/Scripts/UI/Menu/MenuPanel.cs @@ -174,7 +174,10 @@ public class MenuPanel : MonoBehaviour try { return ResolveClient() - .CurrentDockingAsync() + .Aetheria() + .Current + .Docking + .LatestAsync() .GetAwaiter() .GetResult(); } diff --git a/Assets/Scripts/UI/Menu/TradeMenu.cs b/Assets/Scripts/UI/Menu/TradeMenu.cs index 901b9a351..4a8d425d8 100644 --- a/Assets/Scripts/UI/Menu/TradeMenu.cs +++ b/Assets/Scripts/UI/Menu/TradeMenu.cs @@ -532,7 +532,10 @@ public class TradeMenu : MonoBehaviour try { docking = ResolveClient() - .CurrentDockingAsync() + .Aetheria() + .Current + .Docking + .LatestAsync() .GetAwaiter() .GetResult(); } @@ -553,7 +556,9 @@ public class TradeMenu : MonoBehaviour try { _stationRefit = ResolveClient() - .StationRefitAsync() + .Aetheria() + .StationRefit + .LatestAsync() .GetAwaiter() .GetResult(); }