diff --git a/ReleaseConsumerProject/Packages/manifest.json b/ReleaseConsumerProject/Packages/manifest.json index 23298d3..181522f 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.32", "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.4", - "org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.90", + "org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.91", "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 f53cec2..0e92525 100644 --- a/ReleaseConsumerProject/Packages/packages-lock.json +++ b/ReleaseConsumerProject/Packages/packages-lock.json @@ -144,7 +144,7 @@ "hash": "e08fa08335f99e9edddeb706912eecfad07cb281" }, "org.gamecult.eve.unity-scene": { - "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.90", + "version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.91", "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": "f3d4ef7a015fcdfdcb70e163e124f61534f8c252" + "hash": "c93f09342f4c14e0607a47038df6b8e2e99cbf03" }, "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/docs/aetheria-released-package-witness.md b/docs/aetheria-released-package-witness.md index 1a081da..f2bb0a9 100644 --- a/docs/aetheria-released-package-witness.md +++ b/docs/aetheria-released-package-witness.md @@ -4,8 +4,8 @@ The generic `ReleaseConsumerProject` is pinned to released Git packages: -- `org.gamecult.eve.unity-scene` `0.3.90`, commit - `f3d4ef7a015fcdfdcb70e163e124f61534f8c252`, and +- `org.gamecult.eve.unity-scene` `0.3.91`, commit + `c93f09342f4c14e0607a47038df6b8e2e99cbf03`, and `org.gamecult.eve.surface` `0.2.4`, commit `e08fa08335f99e9edddeb706912eecfad07cb281`; - `org.gamecult.eve.plugin-fields` `0.2.3`, commit @@ -36,12 +36,20 @@ content-hashed body into the local warm cache. This is convenient local setup, not CDN-transfer evidence. On later runs, use `-SkipAssetBundleBuild` and omit the prime flag when neither provider assets nor their catalog changed. -Cold transfer is not a passing integration gate. The provider bundle is -`56,204,750` bytes on disk; the previously observed roughly 13 MB transfer still -exceeds the witness deadline while its bytes travel through batched snapshot -records. Do not increase the timeout or describe this as proven; the intended -repair is mapped or network-body transport. `-CacheState cold` remains a -diagnostic run. +Cold transfer is a passing released-package integration gate as of +`artifacts/cold-release-0391`. The run starts with zero bodies and zero partials, +transfers and verifies the `56,204,750`-byte provider bundle through the +dedicated `cultmesh.content.v1` session, atomically promotes one content-hashed +body with no partial left behind, and grants Unity a `SharedFileMapping` lease +over that verified file. The Unity test completes in 54.8 seconds and the full +clean import/build/test wrapper completes in 149.6 seconds under the unchanged +300-second deadline. Pilot/map channel separation and 65,536 Stardust particles +remain proven after the cold load. + +This proves that bulk asset bytes no longer depend on snapshot records. It does +not claim remote zero-copy: the current remote content session still copies and +fragments bounded chunks before the verified local file becomes mapped. Network +body streaming and copy-volume profiling remain transport work. The July 19 released-package run in `artifacts/dockyard-trade-warm-8` passes the full-session gate. The generic client lowers the provider-owned bundle through @@ -357,26 +365,22 @@ Primary artifacts: ## Cold delivery status -Cold CDN transfer is currently failing and is not part of the passing readiness -gate. The latest retained failing runs time out after 300 seconds before the -provider bundle is promoted. The current transport still carries large asset -payloads through batched snapshot records instead of the intended mapped or -network body path. +Cold CDN transfer is part of the passing readiness gate. The released `0.3.91` +run in `artifacts/cold-release-0391` began with zero cached bodies and partials, +received only the typed manifest through snapshot state, transferred bounded +content chunks through the managed CultMesh content session, and atomically +promoted one `56,204,750`-byte body named by SHA-256 +`f2c8acf938998703799e909cbf0c6e3ed9ad5d6f83b708a0b7b6e76ee33f7160`. +It left zero partials and selected `SharedFileMapping` over the verified file. -The following is historical evidence, not a current claim. A prior -`cold-start-lowering` run in `artifacts/aetheria-daemon-current-cold` began with -zero cached bodies, received one typed manifest snapshot, transferred bounded -payload chunks through the managed CultMesh content session, and atomically -promoted exactly one `56,168,017`-byte body named by SHA-256 -`f54177cc8aadd5cd39ba0757cfd2b90a403a1b9efcfcb32060b86e8c152dce10`. -It left zero partial files, selected `SharedFileMapping` over that verified path, -lowered the shield-free provider hull, and preserved pilot/map camera isolation -within the unchanged 300-second deadline; total witness time was `102,912.852` -milliseconds. +The cold-only failure exposed by `0.3.90` was a bootstrap ownership race, not a +bulk snapshot transfer: live SoA subscriptions began before the blocking cold +asset acquisition, so their retained capability expired before Unity pumped it. +`0.3.91` resolves the surface first, completes provider-asset acquisition, and +only then starts live subscriptions. A fresh current generation therefore owns +the first lowered frame. No retry timer or stale-body reinterpretation exists. -The separate historical `full-session-gameplay` witness started from the verified -warm body and proved movement, combat, destruction-created canonical loot, and -exactly-once cargo mutation. This proved cold acquisition -and local mapped reuse, not provider-to-client network zero-copy, shared-memory -delivery, or GPU zero-copy. Managed network bytes are still copied and fragmented -before the transfer owner commits the mapped file. +This proves cold acquisition and local mapped reuse, not provider-to-client +network zero-copy, shared-memory delivery, or GPU zero-copy. Managed remote +chunks are still copied and fragmented before the transfer owner commits the +mapped file; network-body streaming and copy-volume profiling remain open. diff --git a/scripts/run-aetheria-daemon-world-witness.ps1 b/scripts/run-aetheria-daemon-world-witness.ps1 index fa89a9e..892d508 100644 --- a/scripts/run-aetheria-daemon-world-witness.ps1 +++ b/scripts/run-aetheria-daemon-world-witness.ps1 @@ -17,7 +17,7 @@ param( ) $ErrorActionPreference = "Stop" -$expectedEveUnityCommit = "f3d4ef7a015fcdfdcb70e163e124f61534f8c252" +$expectedEveUnityCommit = "c93f09342f4c14e0607a47038df6b8e2e99cbf03" $expectedEveFieldsCommit = "c5a4a75c1b727499b16c2dae1895f29e2a9f72f0" $expectedEveUnityUiToolkitCommit = "4d0cbe0185bdc4fc65eb63503a7c5cb578539669" $expectedCultLibCommit = "d018bb1fb5a8ce73da6f5579e2f475750d901d8b" @@ -49,6 +49,13 @@ $importProject = Join-Path $AetheriaRoot "Aetheria.State.Import\Aetheria.State.I foreach ($required in @($UnityExe, (Join-Path $repoRoot $projectRoot), $daemonProject, $importProject, (Join-Path $YmirRoot "src\Ymir.Core\Ymir.Core.csproj"))) { if (-not (Test-Path -LiteralPath $required)) { throw "Required world witness path not found: $required" } } +$cultLibHead = (& git -C $CultLibRoot rev-parse HEAD 2> $null).Trim() +if ($LASTEXITCODE -ne 0 -or [string]::IsNullOrWhiteSpace($cultLibHead)) { + throw "Released-package witness CultLibRoot is not a readable Git checkout: $CultLibRoot" +} +if ($cultLibHead -ne $expectedCultLibCommit) { + throw "Released-package witness CultLibRoot must resolve to $expectedCultLibCommit, but $CultLibRoot is $cultLibHead." +} $canonicalWitnessTest = Join-Path $repoRoot "TestProject\Assets\Tests\PlayMode\GenericWorldCaptureTests.cs" $releaseWitnessTest = Join-Path $repoRoot "ReleaseConsumerProject\Assets\Tests\PlayMode\GenericWorldCaptureTests.cs" if ((Get-FileHash -LiteralPath $canonicalWitnessTest -Algorithm SHA256).Hash -ne