Prove released TCP Aetheria witness

This commit is contained in:
Meta Vens 2026-07-19 19:52:20 +01:00
commit cb161f620b
4 changed files with 51 additions and 53 deletions

View file

@ -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.32",
"org.gamecult.cultlib": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.34",
"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.91",
"org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.94",
"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

@ -119,11 +119,11 @@
}
},
"org.gamecult.cultlib": {
"version": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.32",
"version": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.34",
"depth": 0,
"source": "git",
"dependencies": {},
"hash": "d018bb1fb5a8ce73da6f5579e2f475750d901d8b"
"hash": "c148d891c1d8713285ae15b2f17b59c106fb9426"
},
"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": "e08fa08335f99e9edddeb706912eecfad07cb281"
},
"org.gamecult.eve.unity-scene": {
"version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.91",
"version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.94",
"depth": 0,
"source": "git",
"dependencies": {
"org.gamecult.cultlib": "1.0.32",
"org.gamecult.cultlib": "1.0.34",
"org.gamecult.eve.plugin-fields": "0.2.3",
"org.gamecult.eve.surface": "0.2.4",
"com.unity.mathematics": "1.3.2",
"com.unity.render-pipelines.universal": "17.4.0",
"com.unity.modules.particlesystem": "1.0.0"
},
"hash": "c93f09342f4c14e0607a47038df6b8e2e99cbf03"
"hash": "0463ddff4e39c9cca14e632b7e46b6b0081c67cc"
},
"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,16 +4,16 @@
The generic `ReleaseConsumerProject` is pinned to released Git packages:
- `org.gamecult.eve.unity-scene` `0.3.91`, commit
`c93f09342f4c14e0607a47038df6b8e2e99cbf03`, and
- `org.gamecult.eve.unity-scene` `0.3.94`, commit
`0463ddff4e39c9cca14e632b7e46b6b0081c67cc`, and
`org.gamecult.eve.surface` `0.2.4`, commit
`e08fa08335f99e9edddeb706912eecfad07cb281`;
- `org.gamecult.eve.plugin-fields` `0.2.3`, commit
`c5a4a75c1b727499b16c2dae1895f29e2a9f72f0`;
- `org.gamecult.eve.unity-uitoolkit` `0.1.1`, commit
`4d0cbe0185bdc4fc65eb63503a7c5cb578539669`;
- `org.gamecult.cultlib` `1.0.32`, commit
`d018bb1fb5a8ce73da6f5579e2f475750d901d8b`.
- `org.gamecult.cultlib` `1.0.34`, commit
`c148d891c1d8713285ae15b2f17b59c106fb9426`.
The hand-run integration gate is the warm released-package witness:
@ -36,32 +36,31 @@ 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 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.
The current split transport proof is warm. Control/discovery, subscriptions,
commands, and receipts use `cultnet+tcp`; the same-machine entity body resolves
to `SharedFileMapping`; CDN bytes are advertised on a separate
`cultmesh-content+tcp` endpoint. The passing run in
`artifacts/aetheria-daemon-tcp-warm` used an explicitly primed 56,204,750-byte
provider body and therefore makes no cold-transfer claim. The prior cold path
that carried bundle chunks through batched snapshot records timed out and is
not accepted as evidence. A fresh empty-cache run over the dedicated TCP
content plane remains required before cold CDN delivery is promoted again.
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
The July 19 released-package run in `artifacts/aetheria-daemon-tcp-warm` passes the
full-session gate. The generic client lowers the provider-owned bundle through
`SharedFileMapping`, docks at the daemon-authored 12-berth Zenith Dockyard,
buys and sells one typed item, undocks, moves, targets, aims, runs a held tractor
beam, destroys the sole proof hostile, and collects the resulting loot exactly
once through daemon-owned proximity. All eight retained witness receipts are
provider-owned and reconciled. The run records 65,536 Stardust particles, 147
provider-owned and reconciled. The run records 65,536 Stardust particles, 396
field composites/dispatches/draws, and both camera-channel invariants. The pilot
capture contains the 3D fog/Stardust/ship frame and no map icons; the map capture
contains the map icons against its map background. The pilot image remains
visually overexposed and is integration evidence, not final art approval.
The wrapper starts the client before the daemon so package import time does not
advance the live proof world. EveUnity 0.3.94 reports a refused TCP rendezvous as
a retryable provider-preparation failure; once the daemon binds, the same generic
preparation path connects without an Aetheria-specific reconnect shim.
The July 19 transport-boundary run in `artifacts/demanded-fields-warm-6`
passed its released-consumer PlayMode test and produced both camera captures.

View file

@ -17,10 +17,10 @@ param(
)
$ErrorActionPreference = "Stop"
$expectedEveUnityCommit = "c93f09342f4c14e0607a47038df6b8e2e99cbf03"
$expectedEveUnityCommit = "0463ddff4e39c9cca14e632b7e46b6b0081c67cc"
$expectedEveFieldsCommit = "c5a4a75c1b727499b16c2dae1895f29e2a9f72f0"
$expectedEveUnityUiToolkitCommit = "4d0cbe0185bdc4fc65eb63503a7c5cb578539669"
$expectedCultLibCommit = "d018bb1fb5a8ce73da6f5579e2f475750d901d8b"
$expectedCultLibCommit = "c148d891c1d8713285ae15b2f17b59c106fb9426"
$repoRoot = Split-Path -Parent $PSScriptRoot
$projectRoot = $ClientProject
$outputRoot = if ([IO.Path]::IsPathRooted($OutputDirectory)) { $OutputDirectory } else { Join-Path $repoRoot $OutputDirectory }
@ -207,8 +207,8 @@ $daemonArguments = @(
"--no-odin-announcements"
)
$env:AETHERIA_TRACE_EVE_SNAPSHOTS = "1"
$env:AETHERIA_TRACE_CLIENT_RUDP = "1"
$env:EVEUNITY_RENDEZVOUS_ENDPOINT = "rudp://127.0.0.1:$Port"
$env:AETHERIA_TRACE_CLIENT_TRANSPORT = "1"
$env:EVEUNITY_RENDEZVOUS_ENDPOINT = "cultnet+tcp://127.0.0.1:$Port"
$env:EVEUNITY_PROVIDER_ID = "aetheria"
Remove-Item Env:EVEUNITY_SURFACE_ID -ErrorAction SilentlyContinue
$env:EVEUNITY_REPLICA_PATH = $replicaPath
@ -227,32 +227,31 @@ $arguments = @(
"-testFilter", "GenericCultMeshClientLowersAndMovesAdvertisedWorld",
"-testResults", $resultsPath, "-logFile", $unityLogPath
)
$unity = Start-Process -FilePath $UnityExe -ArgumentList $arguments -WorkingDirectory $repoRoot -PassThru -WindowStyle Hidden
Write-Host "Unity witness PID: $($unity.Id)"
Write-Host "Unity log: $unityLogPath"
$clientReady = $false
for ($attempt = 0; $attempt -lt 240; $attempt++) {
if ($unity.HasExited) { throw "Unity exited before reaching provider connection. See $unityLogPath" }
if (Test-Path -LiteralPath $providerReadyPath) { $clientReady = $true; break }
Start-Sleep -Milliseconds 500
}
if (-not $clientReady) {
Stop-Process -Id $unity.Id -Force -ErrorAction SilentlyContinue
throw "Unity did not reach provider connection within 120 seconds. See $unityLogPath"
}
$daemon = Start-Process -FilePath "dotnet" -ArgumentList $daemonArguments -PassThru -WindowStyle Hidden `
-RedirectStandardOutput $daemonLogPath -RedirectStandardError (Join-Path $outputRoot "aetheria-daemon.error.log")
Write-Host "Aetheria daemon PID: $($daemon.Id)"
Write-Host "Daemon log: $daemonLogPath"
Write-Host "Poll: Select-String -Path '$daemonLogPath' -Pattern 'Aetheria client CultMesh endpoint'"
$daemon = $null
$unity = $null
try {
$unity = Start-Process -FilePath $UnityExe -ArgumentList $arguments -WorkingDirectory $repoRoot -PassThru -WindowStyle Hidden
Write-Host "Unity witness PID: $($unity.Id)"
Write-Host "Unity log: $unityLogPath"
$clientReady = $false
for ($attempt = 0; $attempt -lt 240; $attempt++) {
if ($unity.HasExited) { throw "Unity exited before reaching provider preparation. See $unityLogPath" }
if (Test-Path -LiteralPath $providerReadyPath) { $clientReady = $true; break }
Start-Sleep -Milliseconds 500
}
if (-not $clientReady) { throw "Unity did not reach provider preparation within 120 seconds. See $unityLogPath" }
$daemon = Start-Process -FilePath "dotnet" -ArgumentList $daemonArguments -PassThru -WindowStyle Hidden `
-RedirectStandardOutput $daemonLogPath -RedirectStandardError (Join-Path $outputRoot "aetheria-daemon.error.log")
Write-Host "Aetheria daemon PID: $($daemon.Id)"
Write-Host "Daemon log: $daemonLogPath"
Write-Host "Poll: Select-String -Path '$daemonLogPath' -Pattern 'Aetheria client CultMesh endpoint'"
$ready = $false
for ($attempt = 0; $attempt -lt 240; $attempt++) {
if ($daemon.HasExited) { throw "Aetheria daemon exited before publishing CultMesh. See $daemonLogPath" }
if ((Test-Path $daemonLogPath) -and
(Select-String -Path $daemonLogPath -Pattern "Aetheria client CultMesh endpoint: rudp://127.0.0.1:$Port" -Quiet)) { $ready = $true; break }
(Select-String -Path $daemonLogPath -Pattern "Aetheria client CultMesh endpoint: cultnet\+tcp://127.0.0.1:$Port" -Quiet)) { $ready = $true; break }
Start-Sleep -Milliseconds 500
}
if (-not $ready) { throw "Aetheria daemon did not open CultMesh port $Port within 120 seconds. See $daemonLogPath" }
@ -451,5 +450,5 @@ finally {
if ($null -ne $unity -and -not $unity.HasExited) { Stop-Process -Id $unity.Id -Force -ErrorAction SilentlyContinue }
if ($null -ne $daemon -and -not $daemon.HasExited) { Stop-Process -Id $daemon.Id -Force }
Remove-Item Env:EVEUNITY_RENDEZVOUS_ENDPOINT, Env:EVEUNITY_PROVIDER_ENDPOINT, Env:EVEUNITY_PROVIDER_ID, Env:EVEUNITY_SURFACE_ID, Env:EVEUNITY_REPLICA_PATH, Env:EVEUNITY_AETHERIA_CAPTURE_PATH, Env:EVEUNITY_AETHERIA_MAP_CAPTURE_PATH, Env:EVEUNITY_DISABLE_AUTO_LAUNCHER, Env:EVEUNITY_ASSET_CACHE_PATH, Env:EVEUNITY_WITNESS_FACTS_PATH, Env:EVEUNITY_PROVIDER_READY_PATH, Env:EVEUNITY_WITNESS_PROFILE, Env:EVEUNITY_WITNESS_GAMEPLAY_SCENARIO -ErrorAction SilentlyContinue
Remove-Item Env:AETHERIA_TRACE_EVE_SNAPSHOTS -ErrorAction SilentlyContinue
Remove-Item Env:AETHERIA_TRACE_EVE_SNAPSHOTS, Env:AETHERIA_TRACE_CLIENT_TRANSPORT -ErrorAction SilentlyContinue
}