Track Aetheria Unity asset manifest record
This commit is contained in:
parent
af2c53e85f
commit
826e0791aa
2 changed files with 70 additions and 23 deletions
|
|
@ -249,8 +249,8 @@ Work:
|
|||
|
||||
- Repixelizer owns job/session/artifact/operator fixtures once they carry real
|
||||
product state or receipts.
|
||||
- Aetheria owns RTS/ARPG world surfaces, assets, generated level state, command
|
||||
receipts, and scenario conformance.
|
||||
- Aetheria owns RTS/ARPG world surfaces, daemon-published asset manifest
|
||||
records, generated level state, command receipts, and scenario conformance.
|
||||
- Huginn owns `.cc` and Persona-state inspection fixture packs when they depend
|
||||
on runtime stewardship details.
|
||||
- Mimir owns sensor/media/control surfaces that depend on live stream timing or
|
||||
|
|
@ -679,11 +679,16 @@ Recently cut:
|
|||
document needs: surface kind, projection kind, command boundary, receipt
|
||||
schema, ownership, lowering targets, state schemas, and record pointer. The
|
||||
Aetheria Unity bridge now selects that provider-owned advertisement instead of
|
||||
fabricating the Unity scene metadata locally. The next blocker is concrete
|
||||
CultMesh/CultCache live reading: provider surface and asset manifest documents
|
||||
must be consumed through real live record readers, then provider receipts plus
|
||||
daemon snapshots must drive rendered Unity frames rather than renderer-local
|
||||
simulation.
|
||||
fabricating the Unity scene metadata locally. The asset manifest leg is now a
|
||||
first-class live transport proof rather than a local catalog projection:
|
||||
Aetheria client state exposes `AssetManifest`, the provider bridge reads
|
||||
`runtimeState.AssetManifest.Latest()`, and the Unity manifest document points
|
||||
at `AetheriaRuntimeVerseRecordKeys.DaemonAssetManifest`. EveUnity still
|
||||
consumes only the generic provider/plugin contracts and sidecar transport
|
||||
ports; Aetheria keeps the gameplay and asset authority. The remaining blocker
|
||||
is rendered-frame proof from the future EveUnity owner repo, with provider
|
||||
receipts plus daemon snapshots driving Unity frames rather than
|
||||
renderer-local simulation.
|
||||
- EveElectron capture lifecycle now carries the same kind of structured pending
|
||||
capture contract. `captureContract` names the Electron shell runtime, capture
|
||||
kind, PNG artifact pattern, conformance attachment point, required Aetheria
|
||||
|
|
@ -1007,10 +1012,11 @@ Recently cut:
|
|||
- Aetheria now also carries the real provider-side proof for the target shape:
|
||||
a generic `EveUnityPlayableWorldRuntime` lowers the daemon-published 3D ARPG
|
||||
world surface through the Aetheria Eve provider bridge, resolves
|
||||
provider-owned playable-world asset refs, submits movement through the
|
||||
advertised `gamecult.eve.command.v1` boundary, observes provider-owned
|
||||
receipts, and refreshes from daemon snapshots without importing Aetheria
|
||||
product authority into EveUnity. Eve records this as the
|
||||
provider-owned playable-world asset refs through the daemon-published
|
||||
`AetheriaRuntimeVerseRecordKeys.DaemonAssetManifest` record, submits movement
|
||||
through the advertised `gamecult.eve.command.v1` boundary, observes
|
||||
provider-owned receipts, and refreshes from daemon snapshots without
|
||||
importing Aetheria product authority into EveUnity. Eve records this as the
|
||||
`aetheria-playable-world-consumer-proof` observed-provider move set in
|
||||
`runtimes/incubating/eve-unity-scene/eveunity-scene-split-handoff.json`, and
|
||||
the split-target plus Aetheria consumer smokes assert it from the conformance
|
||||
|
|
@ -1018,10 +1024,13 @@ Recently cut:
|
|||
the future EveUnity owner repo, not whether the Unity client is generic.
|
||||
- Aetheria now has repeatable Unity package consumer-build evidence for the
|
||||
Eve UI Toolkit runtime. `scripts/run-aetheria-unity-package-smoke.ps1`
|
||||
verifies Aetheria's Unity `Packages/manifest.json` consumes Eve's surface and
|
||||
UI Toolkit packages by file reference, checks the generated
|
||||
`GameCult.Eve.UnityUIToolkit.csproj` includes all current runtime files, and
|
||||
builds the package through Aetheria's Unity-generated project.
|
||||
verifies Aetheria's Unity `Packages/manifest.json` consumes Eve's surface,
|
||||
Unity scene, and UI Toolkit packages by file reference, checks the generated
|
||||
Unity projects include all current runtime files, asserts the Aetheria Unity
|
||||
bridge reads `runtimeState.AssetManifest.Latest()` from client state
|
||||
`AssetManifest` and publishes the
|
||||
`AetheriaRuntimeVerseRecordKeys.DaemonAssetManifest` pointer, then builds the
|
||||
packages through Aetheria's Unity-generated projects.
|
||||
- The EveUnity UI Toolkit split handoff now records Aetheria's Unity consumer
|
||||
boundary as `observed-provider` evidence. The handoff names Aetheria's
|
||||
package manifest, generated Unity project, assets root, daemon catalog
|
||||
|
|
|
|||
|
|
@ -17,9 +17,12 @@ $aetheriaEveRuntimePackage = Join-Path $AetheriaRoot "Packages\org.gamecult.aeth
|
|||
$aetheriaEveRuntimeAsmdef = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.eve-runtime\Runtime\GameCult.Aetheria.EveRuntime.asmdef"
|
||||
$aetheriaSceneBridge = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.eve-runtime\Runtime\AetheriaEveUnitySceneProviderBridge.cs"
|
||||
$aetheriaSceneProviderComponent = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.eve-runtime\Runtime\AetheriaEveUnitySceneProviderComponent.cs"
|
||||
$aetheriaClientState = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.state\Runtime\AetheriaClientState.cs"
|
||||
$aetheriaSurfaceCatalog = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeEveSurfaceCatalog.cs"
|
||||
$aetheriaGameSurfaceBuilder = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeDaemonGameSurfaceBuilder.cs"
|
||||
$aetheriaDaemonOperationsClient = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeDaemonOperationsClient.cs"
|
||||
$aetheriaDaemonDocuments = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeDaemonDocuments.cs"
|
||||
$aetheriaRuntimeVerseClient = Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeVerseClient.cs"
|
||||
if (-not (Test-Path $manifestPath)) {
|
||||
throw "Aetheria Unity package manifest not found: $manifestPath"
|
||||
}
|
||||
|
|
@ -44,6 +47,9 @@ if (-not (Test-Path $aetheriaSceneBridge)) {
|
|||
if (-not (Test-Path $aetheriaSceneProviderComponent)) {
|
||||
throw "Aetheria Eve Unity scene provider component not found: $aetheriaSceneProviderComponent"
|
||||
}
|
||||
if (-not (Test-Path $aetheriaClientState)) {
|
||||
throw "Aetheria client state not found: $aetheriaClientState"
|
||||
}
|
||||
if (-not (Test-Path $aetheriaSurfaceCatalog)) {
|
||||
throw "Aetheria Eve surface catalog not found: $aetheriaSurfaceCatalog"
|
||||
}
|
||||
|
|
@ -53,6 +59,12 @@ if (-not (Test-Path $aetheriaGameSurfaceBuilder)) {
|
|||
if (-not (Test-Path $aetheriaDaemonOperationsClient)) {
|
||||
throw "Aetheria daemon operations client not found: $aetheriaDaemonOperationsClient"
|
||||
}
|
||||
if (-not (Test-Path $aetheriaDaemonDocuments)) {
|
||||
throw "Aetheria daemon documents not found: $aetheriaDaemonDocuments"
|
||||
}
|
||||
if (-not (Test-Path $aetheriaRuntimeVerseClient)) {
|
||||
throw "Aetheria runtime Verse client not found: $aetheriaRuntimeVerseClient"
|
||||
}
|
||||
|
||||
$manifest = Get-Content -Raw -LiteralPath $manifestPath | ConvertFrom-Json
|
||||
$requiredDependencies = @{
|
||||
|
|
@ -136,7 +148,11 @@ foreach ($symbol in @(
|
|||
"Disconnect",
|
||||
"SubmitCommand",
|
||||
"ReadAdvertisedSurface",
|
||||
"ReadAssetManifest",
|
||||
"runtimeState.ProviderAdvertisement.Latest",
|
||||
"runtimeState.AssetManifest.Latest",
|
||||
"AetheriaRuntimeVerseRecordKeys.DaemonAssetManifest",
|
||||
"ToUnityPlayableWorldAssetManifest",
|
||||
"WorldInteraction",
|
||||
"AetheriaEveRuntimeUnityHooks.RequireControl",
|
||||
"ToReceipt(request, daemonEnvelope)",
|
||||
|
|
@ -198,6 +214,7 @@ foreach ($symbol in @(
|
|||
'"world.entity3d"',
|
||||
'"movementCommand"',
|
||||
'"assetManifest"',
|
||||
'["assetManifest"] = AetheriaRuntimeVerseRecordKeys.DaemonAssetManifest.ToString()',
|
||||
'"arpg.pointer-keyboard.v1"',
|
||||
'"arpg.orbital-follow.v1"',
|
||||
'SetMoveVector',
|
||||
|
|
@ -227,16 +244,37 @@ foreach ($symbol in @(
|
|||
}
|
||||
}
|
||||
|
||||
$aetheriaAssets = Get-Content -Raw -LiteralPath (Join-Path $AetheriaRoot "Packages\org.gamecult.aetheria.state\Runtime\AetheriaRuntimeAssets.cs")
|
||||
$clientState = Get-Content -Raw -LiteralPath $aetheriaClientState
|
||||
foreach ($symbol in @(
|
||||
'"prefab.entity.player"',
|
||||
'"Prefabs/Ships/Djinni"',
|
||||
'"prefab.entity.station"',
|
||||
'"Prefabs/Stations/AsteroidOutpost"',
|
||||
'"resourcesPath"'
|
||||
"CultMeshDocumentHandle<AetheriaRuntimeAssetManifestDocument> assetManifest",
|
||||
"AssetManifest = assetManifest",
|
||||
"public CultMeshDocumentHandle<AetheriaRuntimeAssetManifestDocument> AssetManifest"
|
||||
)) {
|
||||
if (-not $aetheriaAssets.Contains($symbol)) {
|
||||
throw "Aetheria asset manifest is not publishing Unity playable world asset symbol: $symbol"
|
||||
if (-not $clientState.Contains($symbol)) {
|
||||
throw "Aetheria client state is not exposing provider-published asset manifest state: $symbol"
|
||||
}
|
||||
}
|
||||
|
||||
$daemonDocuments = Get-Content -Raw -LiteralPath $aetheriaDaemonDocuments
|
||||
foreach ($symbol in @(
|
||||
"AssetManifestRecordRef",
|
||||
"AetheriaRuntimeVerseRecordKeys.DaemonAssetManifest.ToString()",
|
||||
"AetheriaRuntimeDaemonSchemas.AssetManifest"
|
||||
)) {
|
||||
if (-not $daemonDocuments.Contains($symbol)) {
|
||||
throw "Aetheria daemon documents are not advertising the asset manifest record: $symbol"
|
||||
}
|
||||
}
|
||||
|
||||
$runtimeVerseClient = Get-Content -Raw -LiteralPath $aetheriaRuntimeVerseClient
|
||||
foreach ($symbol in @(
|
||||
"DaemonAssetManifest",
|
||||
'new CultRecordKey("daemon:aetheria.asset_manifest.latest.v1")',
|
||||
"Document<AetheriaRuntimeAssetManifestDocument>",
|
||||
"AetheriaRuntimeVerseRecordKeys.DaemonAssetManifest"
|
||||
)) {
|
||||
if (-not $runtimeVerseClient.Contains($symbol)) {
|
||||
throw "Aetheria runtime Verse client is not publishing the daemon asset manifest record: $symbol"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue