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. movement, targeting, and fire command receipts.
- EveUnity's clean `TestProject` owns generic scene and UI Toolkit package - EveUnity's clean `TestProject` owns generic scene and UI Toolkit package
verification; ordinary runtime tests no longer open or mutate Aetheria. verification; ordinary runtime tests no longer open or mutate Aetheria.
- EveUnity publishes immutable `0.1.0` Git package tags for surface and UI - Eve owns the renderer-neutral surface package. EveUnity publishes the Unity
Toolkit plus scene `0.1.4`, whose generic CultMesh composition root discovers UI Toolkit and scene lowerers from one immutable repository commit; its
playable worlds without product identifiers. Its release-only consumer isolated consumer resolves those packages plus CultLib without borrowing a
resolves those tags plus CultLib's assembled Unity package and passes 30 provider's source tree. Aetheria pins the same owner commits.
Unity EditMode tests without sibling package paths. Aetheria pins the same - The same isolated-package consumer cold-starts from Aetheria's CultMesh
released sources.
- The same released-package consumer cold-starts from Aetheria's CultMesh
rendezvous endpoint with no configured provider or surface ID, discovers the rendezvous endpoint with no configured provider or surface ID, discovers the
daemon's `interactive-world`, loads provider-owned assets, and reconciles daemon's `interactive-world`, loads provider-owned assets, and reconciles
movement, targeting, and action receipts without importing Aetheria code. 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. constructs the generic CultMesh client transport used by that witness.
- EveUnity can start from one CultMesh rendezvous endpoint, discover a Verse, - EveUnity can start from one CultMesh rendezvous endpoint, discover a Verse,
select an advertised `interactive-world` surface, and connect without 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 resources, asset overlays, and capability-gap reporting. The general CultUI
lowerer dispatches plugin component kinds without field-specific branches. lowerer dispatches plugin component kinds without field-specific branches.
- EvePlugins publishes runtime-neutral C# fields contracts as UPM and .NET - 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 splat buffers, RenderTexture rasterization, layer texture allocation, and the
generic fields shader. generic fields shader.
Aetheria implements the plugin interfaces and retains only a MonoScript-GUID 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. - `EveElectron2D` or Aetheria-owned Electron client for RTS/editor/operator 2D.
- `EveUnityUIToolkit` for Unity UI Toolkit 2D lowering. - `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. - `EveGodot` for Godot lowering.
- `Fensalir` for Direct2D/native runtime lowering if Fensalir remains the body. - `Fensalir` for Direct2D/native runtime lowering if Fensalir remains the body.
- `EveWebReference` can stay in Eve core as the canonical reference renderer - `EveWebReference` can stay in Eve core as the canonical reference renderer

View file

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

View file

@ -1,12 +1,12 @@
param( param(
[string] $EveUnityRoot = "E:\Projects\EveUnity", [string] $EveUnityRoot = "E:\Projects\EveUnity",
[string] $AetheriaRoot = "E:\Projects\Aetheria" [string] $AetheriaRoot = "E:\Projects\AetheriaEve"
) )
$ErrorActionPreference = "Stop" $ErrorActionPreference = "Stop"
$projectRoot = Split-Path -Parent $PSScriptRoot
$requiredOwnerPaths = @( $requiredOwnerPaths = @(
"packages\org.gamecult.eve.surface\package.json",
"packages\org.gamecult.eve.unity-uitoolkit\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-uitoolkit\eve-runtime-capability.json",
"packages\org.gamecult.eve.unity-scene\package.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 $deletedSurfacePackage = Join-Path $EveUnityRoot "packages\org.gamecult.eve.surface"
$expectedDependencies = @{ if (Test-Path -LiteralPath $deletedSurfacePackage) {
"org.gamecult.eve.surface" = "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.surface#eveunity-surface-v0.1.0" throw "EveUnity must consume Eve's renderer-neutral surface package instead of vendoring it: $deletedSurfacePackage"
"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"
} }
foreach ($entry in $expectedDependencies.GetEnumerator()) { $eveSurface = Get-Content (Join-Path $projectRoot "packages\org.gamecult.eve.surface\package.json") -Raw | ConvertFrom-Json
$actual = $aetheriaManifest.dependencies.($entry.Key) $unityScene = Get-Content (Join-Path $EveUnityRoot "packages\org.gamecult.eve.unity-scene\package.json") -Raw | ConvertFrom-Json
if ($actual -ne $entry.Value) { $unityToolkit = Get-Content (Join-Path $EveUnityRoot "packages\org.gamecult.eve.unity-uitoolkit\package.json") -Raw | ConvertFrom-Json
throw "Aetheria dependency $($entry.Key) resolves to '$actual', expected '$($entry.Value)'." 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." 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."