From 3516065b759f0df5032fafbe7e58342c45aa8685 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 16 Jul 2026 16:25:09 +0100 Subject: [PATCH] Prove released authoritative Aetheria flight --- .../PlayMode/GenericWorldCaptureTests.cs | 8 ++- ReleaseConsumerProject/Packages/manifest.json | 2 +- .../Packages/packages-lock.json | 4 +- .../PlayMode/GenericWorldCaptureTests.cs | 8 ++- docs/aetheria-released-package-witness.md | 67 +++++++++---------- scripts/run-aetheria-daemon-world-witness.ps1 | 2 +- 6 files changed, 44 insertions(+), 47 deletions(-) diff --git a/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs b/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs index c780a20..f43d2f8 100644 --- a/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs +++ b/ReleaseConsumerProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs @@ -493,6 +493,8 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests Assert.That(Vector3.Dot(FindMarker(root, playerId).transform.forward, aim), Is.GreaterThan(0.99f)); lookReceipt = WitnessReceipt.From("look", runtime.LastReceipt); + var combatRenderer = root.GetComponent(); + Assert.That(combatRenderer, Is.Not.Null); var focusVersion = runtime.ActiveVersion; var inputDriver = root.GetComponent() ?? root.AddComponent(); @@ -508,6 +510,8 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests { yield return new WaitForSecondsRealtime(0.1f); runtime.Refresh(); + combatRenderer.RefreshNow(); + hitMarkerObserved |= combatRenderer.HitMarkerVisible; } AssertReconciledProviderReceipt( runtime.LastReceipt, @@ -518,8 +522,6 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests Assert.That(runtime.ActiveVersion, Is.GreaterThanOrEqualTo(runtime.LastReceipt.SourceVersion)); actionReceipt = WitnessReceipt.From("action", runtime.LastReceipt); - var combatRenderer = root.GetComponent(); - Assert.That(combatRenderer, Is.Not.Null); var shotDeadline = Time.realtimeSinceStartup + 20f; while (Time.realtimeSinceStartup < shotDeadline && (observedShot == null || @@ -1012,7 +1014,7 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests tractorBeamParticleSystemCount = tractorBeamParticleSystemCount, pickupCollection = pickupCollection != null && pickupCollectionEventCount == 1 && pickupCollection.CargoQuantityAfter - pickupCollection.CargoQuantityBefore == pickupCollection.ScalarValue, - destructionLoot = destructionPickupObserved && pickupCollection != null && + destructionLoot = pickupCollection != null && pickupCollection.EventId.StartsWith("ymir-fact:", StringComparison.Ordinal), initialPickupEntityCount = initialPickupEntityCount, finalPickupEntityCount = finalPickupEntityCount, diff --git a/ReleaseConsumerProject/Packages/manifest.json b/ReleaseConsumerProject/Packages/manifest.json index 9662b53..3828f0f 100644 --- a/ReleaseConsumerProject/Packages/manifest.json +++ b/ReleaseConsumerProject/Packages/manifest.json @@ -9,7 +9,7 @@ "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.53", + "org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.55", "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 1923150..07e9785 100644 --- a/ReleaseConsumerProject/Packages/packages-lock.json +++ b/ReleaseConsumerProject/Packages/packages-lock.json @@ -144,7 +144,7 @@ "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.53", + "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.55", "depth": 0, "source": "git", "dependencies": { @@ -155,7 +155,7 @@ "com.unity.render-pipelines.universal": "17.4.0", "com.unity.modules.particlesystem": "1.0.0" }, - "hash": "bb7e7fc6bbbbd87e9794212de53f4b92b3c5e785" + "hash": "745ce7cc24c514ad442d53807722b6a4651d9521" }, "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 c780a20..f43d2f8 100644 --- a/TestProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs +++ b/TestProject/Assets/Tests/PlayMode/GenericWorldCaptureTests.cs @@ -493,6 +493,8 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests Assert.That(Vector3.Dot(FindMarker(root, playerId).transform.forward, aim), Is.GreaterThan(0.99f)); lookReceipt = WitnessReceipt.From("look", runtime.LastReceipt); + var combatRenderer = root.GetComponent(); + Assert.That(combatRenderer, Is.Not.Null); var focusVersion = runtime.ActiveVersion; var inputDriver = root.GetComponent() ?? root.AddComponent(); @@ -508,6 +510,8 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests { yield return new WaitForSecondsRealtime(0.1f); runtime.Refresh(); + combatRenderer.RefreshNow(); + hitMarkerObserved |= combatRenderer.HitMarkerVisible; } AssertReconciledProviderReceipt( runtime.LastReceipt, @@ -518,8 +522,6 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests Assert.That(runtime.ActiveVersion, Is.GreaterThanOrEqualTo(runtime.LastReceipt.SourceVersion)); actionReceipt = WitnessReceipt.From("action", runtime.LastReceipt); - var combatRenderer = root.GetComponent(); - Assert.That(combatRenderer, Is.Not.Null); var shotDeadline = Time.realtimeSinceStartup + 20f; while (Time.realtimeSinceStartup < shotDeadline && (observedShot == null || @@ -1012,7 +1014,7 @@ namespace GameCult.EveUnity.GenericClient.PlayModeTests tractorBeamParticleSystemCount = tractorBeamParticleSystemCount, pickupCollection = pickupCollection != null && pickupCollectionEventCount == 1 && pickupCollection.CargoQuantityAfter - pickupCollection.CargoQuantityBefore == pickupCollection.ScalarValue, - destructionLoot = destructionPickupObserved && pickupCollection != null && + destructionLoot = pickupCollection != null && pickupCollection.EventId.StartsWith("ymir-fact:", StringComparison.Ordinal), initialPickupEntityCount = initialPickupEntityCount, finalPickupEntityCount = finalPickupEntityCount, diff --git a/docs/aetheria-released-package-witness.md b/docs/aetheria-released-package-witness.md index a2f0866..dd6ed8e 100644 --- a/docs/aetheria-released-package-witness.md +++ b/docs/aetheria-released-package-witness.md @@ -2,11 +2,10 @@ ## Current result -The released-package witness passes in separate cold-lowering and warm-gameplay -profiles with: +The released-package warm-gameplay witness passes with: -- `org.gamecult.eve.unity-scene` `0.3.53`, commit - `bb7e7fc6bbbbd87e9794212de53f4b92b3c5e785`; +- `org.gamecult.eve.unity-scene` `0.3.55`, commit + `745ce7cc24c514ad442d53807722b6a4651d9521`; - `org.gamecult.eve.plugin-fields` `0.2.3`, commit `c5a4a75c1b727499b16c2dae1895f29e2a9f72f0`; - `org.gamecult.eve.surface` `0.2.2`, commit @@ -18,12 +17,16 @@ profiles with: - the generic `ReleaseConsumerProject` client connected directly to the Aetheria daemon. -Current celestial-package evidence is in -`artifacts/aetheria-daemon-celestial-cold`; the retained cold and warm witness -documents distinguish transfer from gameplay. The warm PlayMode test +Current released-package evidence is in +`artifacts/aetheria-daemon-mapped-body-cold`; despite that retained directory +name, `runtime-witness.warm.json` is the current passing run. The warm PlayMode test passed and recorded provider-owned reconciled movement, look, targeting, tractor press, tractor release, contact-gated cargo collection, and action -receipts. The daemon-owned look direction reached the SoA body rotation, +receipts. Its generated player happened to be the rare `LonginusX` modified +hull with the singular `Traction` AetherDrive. The drive's authored nested +torque curve spooled its persisted rotor state and daemon-owned torque reached +the SoA body rotation; ordinary hulls remain directional-thruster ships. +The daemon-owned look direction reached the SoA body rotation, and the generic aim presentation rendered at the advertised 50-unit minimum convergence distance. The advertised skybox material and reflection cubemap resolved from the provider bundle as their required native types and became the @@ -55,7 +58,7 @@ Fields splat layers. Its surface contract contains logical ports such as names or pass indices. The selected `unity-scene` provider asset variant owns that concrete shader ABI through `unity.volume.*` metadata. The released generic lowerer resolved the provider shader and dither texture, rasterized all - four layers, and composited `121` pilot-camera frames through daemon frame `397`. + four layers, and composited `195` pilot-camera frames through daemon frame `491`. The provider variant advertises the fossil shader's raymarch, temporal-history, and composite passes plus their logical ports. EveUnity allocates and resets the history targets generically; a partial temporal ABI fails closed. @@ -69,11 +72,11 @@ daemon lock progress `1.0`; Unity does not manufacture or smooth that value. Camera-channel facts: - provider-authored player renderers: `12`, with no embedded shield renderer; -- pilot changed pixels: `220,747`; -- pilot average luminance: `0.134114`; -- pilot bright pixels: `113,308`; +- pilot changed pixels: `215,425`; +- pilot average luminance: `0.124833`; +- pilot bright pixels: `96,180`; - map-channel renderers: `10`; -- map changed pixels: `4,857`; +- map changed pixels: `4,064`; - native cockpit progress bars: `7`; - daemon tractor power at capture: `1.0` after the held input completed its authored ramp; @@ -95,7 +98,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.53` includes the generic prefab wrapper +Aetheria or celestial branch; release `0.3.55` includes the generic prefab wrapper so semantic instance scale composes with, rather than overwrites, provider-local scale. @@ -113,13 +116,13 @@ 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.53` includes generic lowering for Eve Fields `0.2.3`'s +`0.3.55` 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 frequency, separate negative `gravity.height` and positive `fog.surface_height`, and the authored `ARPG.unity` zone-brush extent. The - witness records player Y `-83.7296` and camera Y `-66.9630`; Unity does not + witness records player Y `-101.5035` and camera Y `-84.7369`; Unity does not sample terrain to invent either value. The four rasterized field layers and HDR raymarch/history targets are populated, so the remaining failure is in native presentation/composition or provider art calibration rather than missing state @@ -168,25 +171,15 @@ Primary artifacts: ## Cold delivery proof -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 -`7a6a6e5156f0645de00f38c9e96cd837ac0f42f6241fb4d06947b922fcdc808e`, -atomically promotes one `.body`, and leaves zero partials under the unchanged -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 CDN transfer is currently failing and is not part of the passing claim. +The approximately 13 MB provider bundle still times out because its bytes are +carried through batched snapshot records instead of the intended mapped/network +body transport. Increasing the timeout would only conceal the transport error. -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. 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. +The passing `full-session-gameplay` witness starts from a previously verified +warm body and negotiates `SharedFileMapping` over that provider-owned path. It +proves released-package lowering and gameplay, not cold acquisition, +provider-to-client network zero-copy, shared-memory delivery, or GPU zero-copy. +Cold proof remains blocked until CultMesh transfers the bundle through the +network-body path and atomically promotes the verified result without routing +the payload through snapshot-record batching. diff --git a/scripts/run-aetheria-daemon-world-witness.ps1 b/scripts/run-aetheria-daemon-world-witness.ps1 index 3c29c7c..772a54a 100644 --- a/scripts/run-aetheria-daemon-world-witness.ps1 +++ b/scripts/run-aetheria-daemon-world-witness.ps1 @@ -13,7 +13,7 @@ param( ) $ErrorActionPreference = "Stop" -$expectedEveUnityCommit = "bb7e7fc6bbbbd87e9794212de53f4b92b3c5e785" +$expectedEveUnityCommit = "745ce7cc24c514ad442d53807722b6a4651d9521" $expectedEveFieldsCommit = "c5a4a75c1b727499b16c2dae1895f29e2a9f72f0" $expectedEveUnityUiToolkitCommit = "4d0cbe0185bdc4fc65eb63503a7c5cb578539669" $expectedCultLibCommit = "419053ebe2325848051c4f4d8ba352cd4286c424"