Align EveUnity ownership verifier

This commit is contained in:
Meta Vens 2026-08-26 20:58:26 +02:00
commit 96839ad34c
4 changed files with 31 additions and 24 deletions

View file

@ -51,17 +51,15 @@ advertisements and typed command/receipt documents are the boundary.
movement, targeting, and fire command receipts.
- EveUnity's clean `TestProject` owns generic scene and UI Toolkit package
verification; ordinary runtime tests no longer open or mutate Aetheria.
- EveUnity publishes immutable `0.1.0` Git package tags for surface and UI
Toolkit plus scene `0.1.4`, whose generic CultMesh composition root discovers
playable worlds without product identifiers. Its release-only consumer
resolves those tags plus CultLib's assembled Unity package and passes 30
Unity EditMode tests without sibling package paths. Aetheria pins the same
released sources.
- The same released-package consumer cold-starts from Aetheria's CultMesh
- Eve owns the renderer-neutral surface package. EveUnity publishes the Unity
UI Toolkit and scene lowerers from one immutable repository commit; its
isolated consumer resolves those packages plus CultLib without borrowing a
provider's source tree. Aetheria pins the same owner commits.
- The same isolated-package consumer cold-starts from Aetheria's CultMesh
rendezvous endpoint with no configured provider or surface ID, discovers the
daemon's `interactive-world`, loads provider-owned assets, and reconciles
movement, targeting, and action receipts without importing Aetheria code.
- Aetheria pins the same scene `0.1.4` release; no Aetheria Unity component
- Aetheria pins the same EveUnity commit; no Aetheria Unity component
constructs the generic CultMesh client transport used by that witness.
- EveUnity can start from one CultMesh rendezvous endpoint, discover a Verse,
select an advertised `interactive-world` surface, and connect without
@ -124,7 +122,7 @@ advertisements and typed command/receipt documents are the boundary.
resources, asset overlays, and capability-gap reporting. The general CultUI
lowerer dispatches plugin component kinds without field-specific branches.
- EvePlugins publishes runtime-neutral C# fields contracts as UPM and .NET
packages. EveUnity scene `0.1.4` owns the second native adapter: structured
packages. EveUnity scene owns the second native adapter: structured
splat buffers, RenderTexture rasterization, layer texture allocation, and the
generic fields shader.
Aetheria implements the plugin interfaces and retains only a MonoScript-GUID

View file

@ -646,7 +646,7 @@ Long-term renderer/client bodies should split out when they become real apps:
- `EveElectron2D` or Aetheria-owned Electron client for RTS/editor/operator 2D.
- `EveUnityUIToolkit` for Unity UI Toolkit 2D lowering.
- `EveUnityScene` or Aetheria-owned Unity scene frontend for full game 2D/3D.
- `EveUnityScene` for provider-agnostic full-game 2D/3D lowering.
- `EveGodot` for Godot lowering.
- `Fensalir` for Direct2D/native runtime lowering if Fensalir remains the body.
- `EveWebReference` can stay in Eve core as the canonical reference renderer

View file

@ -5,7 +5,7 @@
"unity": "2021.3",
"description": "Renderer-neutral C# contracts and builders for gamecult.eve.surface.v1 documents.",
"dependencies": {
"org.gamecult.cultlib": "1.0.45"
"org.gamecult.cultlib": "1.0.56"
},
"files": [
"Runtime",

View file

@ -1,12 +1,12 @@
param(
[string] $EveUnityRoot = "E:\Projects\EveUnity",
[string] $AetheriaRoot = "E:\Projects\Aetheria"
[string] $AetheriaRoot = "E:\Projects\AetheriaEve"
)
$ErrorActionPreference = "Stop"
$projectRoot = Split-Path -Parent $PSScriptRoot
$requiredOwnerPaths = @(
"packages\org.gamecult.eve.surface\package.json",
"packages\org.gamecult.eve.unity-uitoolkit\package.json",
"packages\org.gamecult.eve.unity-uitoolkit\eve-runtime-capability.json",
"packages\org.gamecult.eve.unity-scene\package.json",
@ -25,18 +25,27 @@ foreach ($relativePath in $requiredOwnerPaths) {
}
}
$aetheriaManifest = Get-Content (Join-Path $AetheriaRoot "Packages\manifest.json") -Raw | ConvertFrom-Json
$expectedDependencies = @{
"org.gamecult.eve.surface" = "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.surface#eveunity-surface-v0.1.0"
"org.gamecult.eve.unity-uitoolkit" = "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-uitoolkit#eveunity-uitoolkit-v0.1.0"
"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.1.1"
"org.gamecult.eve.unity-scene" = "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.1.4"
$deletedSurfacePackage = Join-Path $EveUnityRoot "packages\org.gamecult.eve.surface"
if (Test-Path -LiteralPath $deletedSurfacePackage) {
throw "EveUnity must consume Eve's renderer-neutral surface package instead of vendoring it: $deletedSurfacePackage"
}
foreach ($entry in $expectedDependencies.GetEnumerator()) {
$actual = $aetheriaManifest.dependencies.($entry.Key)
if ($actual -ne $entry.Value) {
throw "Aetheria dependency $($entry.Key) resolves to '$actual', expected '$($entry.Value)'."
$eveSurface = Get-Content (Join-Path $projectRoot "packages\org.gamecult.eve.surface\package.json") -Raw | ConvertFrom-Json
$unityScene = Get-Content (Join-Path $EveUnityRoot "packages\org.gamecult.eve.unity-scene\package.json") -Raw | ConvertFrom-Json
$unityToolkit = Get-Content (Join-Path $EveUnityRoot "packages\org.gamecult.eve.unity-uitoolkit\package.json") -Raw | ConvertFrom-Json
if ($eveSurface.dependencies.'org.gamecult.cultlib' -ne '1.0.56') {
throw "Eve surface must declare the admitted CultLib 1.0.56 contract."
}
if ($unityScene.dependencies.'org.gamecult.eve.surface' -ne $eveSurface.version -or
$unityToolkit.dependencies.'org.gamecult.eve.surface' -ne $eveSurface.version) {
throw "Every EveUnity package must declare Eve surface $($eveSurface.version)."
}
$aetheriaManifest = Get-Content (Join-Path $AetheriaRoot "Aetheria.Unity\Packages\manifest.json") -Raw | ConvertFrom-Json
foreach ($packageName in @('org.gamecult.eve.surface', 'org.gamecult.eve.unity-scene', 'org.gamecult.eve.unity-uitoolkit')) {
$actual = $aetheriaManifest.dependencies.$packageName
if ($actual -notmatch '^https://github\.com/GameCult/(Eve|EveUnity)\.git\?path=/.+#[0-9a-f]{40}$') {
throw "Aetheria dependency $packageName must resolve from its owner repository at an immutable commit, found '$actual'."
}
}
@ -45,4 +54,4 @@ if ($LASTEXITCODE -ne 0) {
throw "EveUnity UI Toolkit package smoke failed."
}
Write-Host "EveUnity owns tagged Unity packages and Aetheria consumes their immutable releases."
Write-Host "Eve owns the surface contract; EveUnity owns Unity lowering; Aetheria consumes both at immutable commits."