From 9897527ca5b9412dde95a6ac5b1aaa5212b2442b Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 16 Jul 2026 14:46:49 +0100 Subject: [PATCH] Prove released mapped Aetheria asset lowering --- .../PlayMode/GenericWorldCaptureTests.cs | 1 + ReleaseConsumerProject/Packages/manifest.json | 4 +- .../Packages/packages-lock.json | 10 ++--- .../PlayMode/GenericWorldCaptureTests.cs | 8 ++++ docs/aetheria-released-package-witness.md | 37 ++++++++++--------- scripts/run-aetheria-daemon-world-witness.ps1 | 4 +- 6 files changed, 38 insertions(+), 26 deletions(-) diff --git a/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs b/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs index 9e00282..c780a20 100644 --- a/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs +++ b/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs @@ -9,6 +9,7 @@ using GameCult.Eve.Surface; using GameCult.Eve.UnityUIToolkit; using GameCult.Eve.UnityScene; using GameCult.Eve.UnityScene.Fields; +using GameCult.Mesh; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; diff --git a/ReleaseConsumerProject/Packages/manifest.json b/ReleaseConsumerProject/Packages/manifest.json index d75c982..9662b53 100644 --- a/ReleaseConsumerProject/Packages/manifest.json +++ b/ReleaseConsumerProject/Packages/manifest.json @@ -6,10 +6,10 @@ "com.unity.modules.physics": "1.0.0", "com.unity.modules.uielements": "1.0.0", "com.unity.render-pipelines.universal": "17.4.0", - "org.gamecult.cultlib": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.14", + "org.gamecult.cultlib": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.15", "org.gamecult.eve.plugin-fields": "https://github.com/GameCult/EvePlugins.git?path=/plugins/eve-plugin-fields/unity/org.gamecult.eve.plugin-fields#eve-plugin-fields-unity-v0.2.3", "org.gamecult.eve.surface": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.surface#eveunity-surface-v0.2.2", - "org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.52", + "org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.53", "org.gamecult.eve.unity-uitoolkit": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-uitoolkit#eveunity-uitoolkit-v0.1.1" }, "testables": [ diff --git a/ReleaseConsumerProject/Packages/packages-lock.json b/ReleaseConsumerProject/Packages/packages-lock.json index 2d5efca..1923150 100644 --- a/ReleaseConsumerProject/Packages/packages-lock.json +++ b/ReleaseConsumerProject/Packages/packages-lock.json @@ -119,11 +119,11 @@ } }, "org.gamecult.cultlib": { - "version": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.14", + "version": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.15", "depth": 0, "source": "git", "dependencies": {}, - "hash": "4b7162022a8976f7941b5a7a69acf50f1b6d532b" + "hash": "419053ebe2325848051c4f4d8ba352cd4286c424" }, "org.gamecult.eve.plugin-fields": { "version": "https://github.com/GameCult/EvePlugins.git?path=/plugins/eve-plugin-fields/unity/org.gamecult.eve.plugin-fields#eve-plugin-fields-unity-v0.2.3", @@ -144,18 +144,18 @@ "hash": "140e1bd963a0033e66777a3b2c5fe6e9c97dfe32" }, "org.gamecult.eve.unity-scene": { - "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.52", + "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.53", "depth": 0, "source": "git", "dependencies": { - "org.gamecult.cultlib": "1.0.14", + "org.gamecult.cultlib": "1.0.15", "org.gamecult.eve.plugin-fields": "0.2.3", "org.gamecult.eve.surface": "0.2.2", "com.unity.mathematics": "1.3.2", "com.unity.render-pipelines.universal": "17.4.0", "com.unity.modules.particlesystem": "1.0.0" }, - "hash": "5809a553d815dec6e317c36ea1e762fc6b6b8b29" + "hash": "bb7e7fc6bbbbd87e9794212de53f4b92b3c5e785" }, "org.gamecult.eve.unity-uitoolkit": { "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-uitoolkit#eveunity-uitoolkit-v0.1.1", diff --git a/TestProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs b/TestProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs index b236051..c780a20 100644 --- a/TestProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs +++ b/TestProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs @@ -9,6 +9,7 @@ using GameCult.Eve.Surface; using GameCult.Eve.UnityUIToolkit; using GameCult.Eve.UnityScene; using GameCult.Eve.UnityScene.Fields; +using GameCult.Mesh; using NUnit.Framework; using UnityEngine; using UnityEngine.TestTools; @@ -262,6 +263,9 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests Assert.That(provider.Selection.VerseId, Is.Not.Empty); Assert.That(provider.Selection.ProviderId, Is.Not.Empty); Assert.That(provider.Selection.SurfaceId, Is.Not.Empty); + Assert.That(provider.CurrentAssetBodyTransportKind, + Is.EqualTo(CultMeshBodyTransportKind.SharedFileMapping), + "The generic client did not negotiate its verified provider bundle as a mapped body."); host = root.AddComponent(); host.Configure( root.transform, @@ -815,6 +819,7 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests Assert.That(fieldSplats, Is.Not.Null); WriteWitnessFacts( witnessProfile, + provider.CurrentAssetBodyTransportKind?.ToString() ?? "", initialVersion, runtime.ActiveVersion, movementDistance, @@ -894,6 +899,7 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests private static void WriteWitnessFacts( string witnessProfile, + string assetBodyTransport, long initialVersion, long finalVersion, float movementDistance, @@ -960,6 +966,7 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests witnessProfile = witnessProfile, providerAdvertisement = true, providerAssets = true, + assetBodyTransport = assetBodyTransport, environmentPresentation = environmentPresentation, fieldVolumeFrameId = fieldVolumeFrameId, fieldVolumeLayerCount = fieldVolumeLayerCount, @@ -1042,6 +1049,7 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests public string witnessProfile; public bool providerAdvertisement; public bool providerAssets; + public string assetBodyTransport; public bool environmentPresentation; public long fieldVolumeFrameId; public int fieldVolumeLayerCount; diff --git a/docs/aetheria-released-package-witness.md b/docs/aetheria-released-package-witness.md index de9bc87..a2f0866 100644 --- a/docs/aetheria-released-package-witness.md +++ b/docs/aetheria-released-package-witness.md @@ -5,16 +5,16 @@ The released-package witness passes in separate cold-lowering and warm-gameplay profiles with: -- `org.gamecult.eve.unity-scene` `0.3.51`, commit - `21ac39e7bdfca9d81a0b7d89834f7e9da60aaad6`; +- `org.gamecult.eve.unity-scene` `0.3.53`, commit + `bb7e7fc6bbbbd87e9794212de53f4b92b3c5e785`; - `org.gamecult.eve.plugin-fields` `0.2.3`, commit `c5a4a75c1b727499b16c2dae1895f29e2a9f72f0`; - `org.gamecult.eve.surface` `0.2.2`, commit `140e1bd963a0033e66777a3b2c5fe6e9c97dfe32`; - `org.gamecult.eve.unity-uitoolkit` `0.1.1`, commit `4d0cbe0185bdc4fc65eb63503a7c5cb578539669`; -- `org.gamecult.cultlib` `1.0.14`, commit - `4b7162022a8976f7941b5a7a69acf50f1b6d532b`; +- `org.gamecult.cultlib` `1.0.15`, commit + `419053ebe2325848051c4f4d8ba352cd4286c424`; - the generic `ReleaseConsumerProject` client connected directly to the Aetheria daemon. @@ -95,7 +95,7 @@ witness records eleven sun/planet/gas-giant rows and eighteen asteroid rows. Every row resolved a provider asset with enabled native renderers, and seven celestial instances intersected the pilot frustum. These identities are presentation-only and cannot receive gameplay commands. EveUnity contains no -Aetheria or celestial branch; release `0.3.51` fixes the generic prefab wrapper +Aetheria or celestial branch; release `0.3.53` includes the generic prefab wrapper so semantic instance scale composes with, rather than overwrites, provider-local scale. @@ -113,7 +113,7 @@ present in the map-only frame. This is transport, authority, field-production, and lowering proof, not visual parity: the current pilot capture contains the blue fog field and provider geometry, but nearby ships remain too dark and the celestial composition lacks the fossil capture's readable close body. Release -`0.3.51` includes generic lowering for Eve Fields `0.2.3`'s +`0.3.53` includes generic lowering for Eve Fields `0.2.3`'s `AnimatedRadialCosine` source alongside `PowerPulse`, dither-scale, temporal-history, and finite-look-at semantics. Aetheria publishes the fossil global animated simplex/cellular/ambient producer stack, body-owned radial wave @@ -168,22 +168,25 @@ Primary artifacts: ## Cold delivery proof -The `cold-start-lowering` profile starts with zero bodies and zero partials. It -receives the `55,533,143` byte Unity bundle through the managed +The `cold-start-lowering` profile starts with zero bodies and zero partials. The +current released run in `artifacts/aetheria-daemon-mapped-body-cold` receives +the `55,539,565` byte Unity bundle through the managed `cultmesh.content.v1` session, verifies SHA-256 -`6d7352c47bde37ca4235ed8a96e2b4d4df9a1c5a2e84af504c7a0662f7b7d2ba`, +`7a6a6e5156f0645de00f38c9e96cd837ac0f42f6241fb4d06947b922fcdc808e`, atomically promotes one `.body`, and leaves zero partials under the unchanged -300-second deadline. Including a clean provider-bundle build, the full witness -took `147.615` seconds; the Unity test took `48.710` seconds. It then lowered -provider assets, movement, environment, four field layers across `135` -composites, and both camera channels. The pilot camera -excluded map objects and the map camera included them. +300-second deadline. The Unity test took `48.358` seconds. It then negotiates +`SharedFileMapping` over the exact transfer-owned verified path and loads the +bundle without first materializing another process-sized byte array. It lowers +provider assets, movement, environment, four field layers, and both camera +channels. The pilot camera excludes map objects and the map camera includes +them. Cold asset acquisition and transient gameplay are deliberately separate proof profiles. Starting Unity before the provider means download time is not a stable lifetime for a boot-seeded enemy or pickup. The cold profile proves delivery and lowering; `full-session-gameplay` starts a fresh warm authoritative session and proves combat, destruction-created loot, Ymir contact collection, -and exactly-once receipts. Neither profile claims negotiated mapped/zero-copy -CDN delivery: the released path is the managed network content session and -still copies/fragments bytes in process. +and exactly-once receipts. The cold profile proves verified local file mapping +after managed network delivery. It does not claim provider-to-client network +zero-copy, shared-memory delivery, or GPU zero-copy; the content session still +copies and fragments network bytes before atomic promotion. diff --git a/scripts/run-aetheria-daemon-world-witness.ps1 b/scripts/run-aetheria-daemon-world-witness.ps1 index 5c4d33b..3c29c7c 100644 --- a/scripts/run-aetheria-daemon-world-witness.ps1 +++ b/scripts/run-aetheria-daemon-world-witness.ps1 @@ -13,10 +13,10 @@ param( ) $ErrorActionPreference = "Stop" -$expectedEveUnityCommit = "5809a553d815dec6e317c36ea1e762fc6b6b8b29" +$expectedEveUnityCommit = "bb7e7fc6bbbbd87e9794212de53f4b92b3c5e785" $expectedEveFieldsCommit = "c5a4a75c1b727499b16c2dae1895f29e2a9f72f0" $expectedEveUnityUiToolkitCommit = "4d0cbe0185bdc4fc65eb63503a7c5cb578539669" -$expectedCultLibCommit = "4b7162022a8976f7941b5a7a69acf50f1b6d532b" +$expectedCultLibCommit = "419053ebe2325848051c4f4d8ba352cd4286c424" $repoRoot = Split-Path -Parent $PSScriptRoot $projectRoot = $ClientProject $outputRoot = if ([IO.Path]::IsPathRooted($OutputDirectory)) { $OutputDirectory } else { Join-Path $repoRoot $OutputDirectory }