Prove cold released-package asset delivery

This commit is contained in:
Meta Vens 2026-07-19 16:21:41 +01:00
commit 7f9f290161
4 changed files with 46 additions and 35 deletions

View file

@ -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": [

View file

@ -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",

View file

@ -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.

View file

@ -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