From 4a15c3907997535fbcf425fcec2c867999e6c27a Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 9 Jul 2026 20:21:57 +0100 Subject: [PATCH] Assert Aetheria EveUnity receipt bridge --- docs/world-state-lowering.md | 18 ++++++++++++------ scripts/run-aetheria-unity-package-smoke.ps1 | 8 +++++++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/docs/world-state-lowering.md b/docs/world-state-lowering.md index 1630b89..45e4cbb 100644 --- a/docs/world-state-lowering.md +++ b/docs/world-state-lowering.md @@ -180,7 +180,12 @@ source, so the next presentation still comes from daemon-authored state. `EveUnityPlayableWorldRuntime` is the generic runtime composition entry point: it wires provider surface documents, provider asset manifest documents, command sink, optional receipt source, asset manifest cache, presenter, and scene sink -into one Unity playable-world client without importing provider code. +into one Unity playable-world client without importing provider code. The +Aetheria provider bridge now implements the same receipt-source port: when the +daemon accepts a surface command envelope or routes a fallback Eve command, it +publishes an `EveUnitySceneCommandReceipt` through +`IEveUnitySceneCommandReceiptSource` so the Unity client observes provider +acceptance without mutating scene truth locally. `EveUnityPlayableWorldPresenter` maps the provider-authored entity rows and asset refs into scene operations through `IEveUnityPlayableWorldSceneSink` and `IEveUnityPlayableWorldAssetResolver`, including removal of entities that @@ -203,11 +208,12 @@ names appear only as provider-authored data and command ids; the Unity client code does not import Aetheria runtime types, prefab classes, or apply movement locally. -This is not yet the final playable client. The remaining cut is a live -CultMesh/CultNet provider subscription adapter implementing those document and -command ports, concrete CultMesh/CultCache readers for provider surface and -asset manifest documents, and proof that daemon receipts plus provider -documents drive the next rendered Unity frame rather than renderer-local state. +This is not yet the final playable client. The Aetheria consumer bridge now +feeds surface documents, asset manifest documents, command submission, and +provider receipts into the generic Unity ports. The remaining cut is live +CultMesh/CultNet subscription ownership for those same ports and proof that +daemon receipts plus refreshed provider documents drive the next rendered Unity +frame rather than renderer-local state. ## Non-Goals diff --git a/scripts/run-aetheria-unity-package-smoke.ps1 b/scripts/run-aetheria-unity-package-smoke.ps1 index 860de3d..8c3f161 100644 --- a/scripts/run-aetheria-unity-package-smoke.ps1 +++ b/scripts/run-aetheria-unity-package-smoke.ps1 @@ -118,9 +118,13 @@ foreach ($symbol in @( "IEveUnitySceneProviderSurfaceDocumentSource", "IEveUnityPlayableWorldAssetManifestDocumentSource", "IEveUnitySceneCommandSink", + "IEveUnitySceneCommandReceiptSource", "IEveUnityProviderRefreshSource", "ManifestRef", - "AetheriaEveRuntimeUnityHooks.RequireControl" + "ReceiptAvailable", + "AetheriaEveRuntimeUnityHooks.RequireControl", + "ToReceipt(request, daemonEnvelope)", + "ToReceipt(request, envelope)" )) { if (-not $sceneBridge.Contains($symbol)) { throw "Aetheria Eve Unity scene bridge missing symbol: $symbol" @@ -134,8 +138,10 @@ foreach ($symbol in @( "IEveUnitySceneProviderSurfaceDocumentSource", "IEveUnityPlayableWorldAssetManifestDocumentSource", "IEveUnitySceneCommandSink", + "IEveUnitySceneCommandReceiptSource", "IEveUnityProviderRefreshSource", "AetheriaEveUnitySceneProviderBridge", + "ReceiptAvailable", "stateFilePathOverride", "surfaceId", "runtimeId",