Record Aetheria Unity consumer boundary
This commit is contained in:
parent
9e60693dd6
commit
7e18a3e067
7 changed files with 94 additions and 7 deletions
|
|
@ -195,9 +195,10 @@ Work:
|
|||
- Move `tex.math` to EvePlugins when TeX source, macro, baseline, cached render,
|
||||
and fallback fixtures are stable.
|
||||
- Treat nested plugin placement as composition, not custody. A Sai surface may
|
||||
deploy with nested Norn or TeX surfaces when those plugin sidecars are
|
||||
available, but Norn and TeX remain independent plugin owners with their own
|
||||
ABI manifests, capability claims, and conformance packs.
|
||||
deploy with nested Norn or TeX surfaces when those independent plugin
|
||||
sidecars are available, but Sai does not depend on them for VN authority and
|
||||
does not own their graph or math semantics. Norn and TeX keep their own ABI
|
||||
manifests, capability claims, and conformance packs.
|
||||
|
||||
Exit criteria:
|
||||
|
||||
|
|
@ -207,6 +208,9 @@ Exit criteria:
|
|||
- Unsupported required plugin capabilities appear as visible gaps.
|
||||
- Optional nested plugin gaps degrade the nested surface; they do not transfer
|
||||
graph, math, or renderer semantics into the parent plugin.
|
||||
- A provider may mark a nested plugin slot as optional or required for a
|
||||
specific surface, but that availability policy is provider composition, not
|
||||
Sai ownership of Norn or TeX.
|
||||
|
||||
## Phase 4: Graduate Runtime Bodies
|
||||
|
||||
|
|
@ -840,6 +844,15 @@ Recently cut:
|
|||
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.
|
||||
- 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
|
||||
client, and Unity smoke as provider-owned pressure sources that prove a real
|
||||
game consumes EveUnity without making those Aetheria paths EveUnity source.
|
||||
`scripts/run-eveunity-split-handoff-smoke.ps1`,
|
||||
`scripts/run-split-target-conformance-consumer-smoke.ps1`, and
|
||||
`scripts/run-aetheria-conformance-consumer-smoke.ps1` assert that boundary
|
||||
from the manifest/export.
|
||||
- Unity UI Toolkit now has a first-party `norn.graph` projection-adapter proof
|
||||
for `embed.norn`. `NornGraphUiToolkitProjectionAdapter` owns the native
|
||||
embedded graph shell and graph command emission path, while the Norn sidecar
|
||||
|
|
@ -874,8 +887,10 @@ Recently cut:
|
|||
Eve's parity manifest or dirtying the Aetheria worktree.
|
||||
- The Aetheria consumer smoke now also asserts frontend extraction boundaries:
|
||||
web, Unity UI Toolkit, Unity scene, and Electron shell are covered generic
|
||||
lowerings, while the observed Aetheria Electron shell/client paths remain
|
||||
split-handoff evidence to replace with a provider-agnostic EveElectron body.
|
||||
lowerings. Observed Aetheria Unity and Electron product paths remain
|
||||
provider-owned split-handoff evidence to replace with provider-agnostic
|
||||
EveUnity/EveElectron bodies where runtime code still lives in the wrong
|
||||
place.
|
||||
- The parity harness now runs a conformance consumer smoke against a copied
|
||||
`artifacts/conformance/latest` layout, proving the export can be consumed
|
||||
through `index.json` and `packs/*.json` without reading Eve's parity manifest.
|
||||
|
|
|
|||
|
|
@ -328,6 +328,12 @@ a narrow provider-advertised surface-tree command surface and exposes a typed
|
|||
capture request contract plus a schema-backed JSON shell projection artifact.
|
||||
It preserves embedded document slot identity in the generic shell projection,
|
||||
while packaged rendering and actual window PNG capture remain blockers.
|
||||
EveUnity's UI Toolkit handoff does the same for Aetheria's Unity consumer
|
||||
boundary: Aetheria's Unity `Packages/manifest.json`, generated
|
||||
`GameCult.Eve.UnityUIToolkit.csproj`, assets root, daemon catalog client, and
|
||||
Unity smoke are exported as `observed-provider` paths. That proves a real game
|
||||
consumes the generic EveUnity package/contract while keeping product state,
|
||||
assets, generated projects, scenes, and receipts in Aetheria.
|
||||
EveTui is now an active incubating runtime: it claims a lossy
|
||||
provider-advertised terminal-grid command surface, preserves embedded document
|
||||
slot identity in the grid artifact, projects Sai/Norn/TeX fallback shells, and
|
||||
|
|
|
|||
|
|
@ -459,6 +459,11 @@ Sai surface deploys with nested Norn or TeX, Sai composes the slots and keeps VN
|
|||
stage authority; Norn and TeX still publish, validate, lower, and receive
|
||||
commands through their own plugin contracts.
|
||||
|
||||
Nested availability is a composition fact, not a Sai dependency story. A Sai
|
||||
surface can be deployed with a nested Norn or TeX surface only when that other
|
||||
plugin is available or when the provider deliberately accepts degraded nested
|
||||
fallback behavior.
|
||||
|
||||
Norn plugin responsibilities:
|
||||
|
||||
- define `embed.norn` semantics;
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
"packageName": "org.gamecult.eve.unity-uitoolkit",
|
||||
"sourcePackageRoot": "packages/org.gamecult.eve.unity-uitoolkit",
|
||||
"destinationPackageRoot": "packages/org.gamecult.eve.unity-uitoolkit",
|
||||
"authorityBoundary": "EveUnity owns native Unity projection, UPM package lifecycle, Unity test runners, Unity capture, and projection adapters for advertised plugin capabilities. Eve keeps the surface, command, provider advertisement, plugin advertisement, and conformance contracts.",
|
||||
"authorityBoundary": "EveUnity owns native Unity projection, UPM package lifecycle, Unity test runners, Unity capture, and projection adapters for advertised plugin capabilities. Eve keeps the surface, command, provider advertisement, plugin advertisement, and conformance contracts. Provider Unity projects such as Aetheria consume EveUnity through those contracts while keeping product state, assets, scenes, generated project files, and daemon clients in the provider repo.",
|
||||
"moveSets": [
|
||||
{
|
||||
"id": "upm-package",
|
||||
|
|
@ -47,6 +47,23 @@
|
|||
],
|
||||
"destinationOwner": "EveUnity",
|
||||
"replacementProof": "Unity batchmode or editor capture artifact attached to the runtime conformance report."
|
||||
},
|
||||
{
|
||||
"id": "aetheria-unity-consumer-boundary",
|
||||
"stage": "provider-consumer",
|
||||
"currentPaths": [
|
||||
"scripts/run-aetheria-unity-package-smoke.ps1",
|
||||
"scripts/run-aetheria-unity-editmode-tests.ps1"
|
||||
],
|
||||
"observedProviderPaths": [
|
||||
"E:\\Projects\\Aetheria\\Packages\\manifest.json",
|
||||
"E:\\Projects\\Aetheria\\GameCult.Eve.UnityUIToolkit.csproj",
|
||||
"E:\\Projects\\Aetheria\\Assets",
|
||||
"E:\\Projects\\Aetheria\\Aetheria.State.Unity\\AetheriaRuntimeCatalogClient.cs",
|
||||
"E:\\Projects\\Aetheria\\Aetheria.State.Unity.Smoke\\Program.cs"
|
||||
],
|
||||
"destinationOwner": "EveUnity",
|
||||
"replacementProof": "Aetheria consumes EveUnity through package and conformance contracts while keeping Unity product project files, generated projects, assets, scenes, daemon catalog clients, and provider receipts in Aetheria."
|
||||
}
|
||||
],
|
||||
"contractInputs": [
|
||||
|
|
@ -67,6 +84,7 @@
|
|||
"EveUnity publishes a tagged UPM release.",
|
||||
"EveUnity owns the Unity batchmode EditMode runner.",
|
||||
"EveUnity attaches Unity editor or batchmode capture artifacts to conformance output.",
|
||||
"Aetheria consumes EveUnity through the package contract without importing Eve source layout."
|
||||
"Aetheria consumes EveUnity through the package contract without importing Eve source layout.",
|
||||
"Aetheria Unity product paths remain provider-owned observed-provider evidence, not EveUnity source authority."
|
||||
]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,6 +89,9 @@ try {
|
|||
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-runtime-body:current:exists:EveUnitySceneSurfaceLowerer.cs `
|
||||
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-world-surface-lowering:current:exists:EveUnitySceneSurfaceLowerer.cs `
|
||||
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-command-transport:current:exists:EveUnitySceneSurfaceLowerer.cs `
|
||||
--expect-split-handoff-move EveUnity:unity-uitoolkit:aetheria-unity-consumer-boundary:observed-provider:exists:Packages/manifest.json `
|
||||
--expect-split-handoff-move EveUnity:unity-uitoolkit:aetheria-unity-consumer-boundary:observed-provider:exists:GameCult.Eve.UnityUIToolkit.csproj `
|
||||
--expect-split-handoff-move EveUnity:unity-uitoolkit:aetheria-unity-consumer-boundary:observed-provider:exists:Aetheria.State.Unity/AetheriaRuntimeCatalogClient.cs `
|
||||
--expect-split-handoff-move EveElectron:electron-shell:electron-shell-runtime:current:exists:eve-electron-shell.mjs `
|
||||
--expect-split-handoff-move EveElectron:electron-shell:electron-command-transport:current:exists:eve-electron-shell.mjs `
|
||||
--expect-split-handoff-move EveElectron:electron-shell:electron-world-surface-lowering:current:exists:eve-electron-shell.mjs `
|
||||
|
|
|
|||
|
|
@ -80,6 +80,43 @@ foreach ($stage in $expectedStages) {
|
|||
}
|
||||
}
|
||||
|
||||
$consumerBoundary = $moveSets | Where-Object { $_.id -eq "aetheria-unity-consumer-boundary" } | Select-Object -First 1
|
||||
if (-not $consumerBoundary) {
|
||||
throw "EveUnity split handoff missing Aetheria Unity consumer-boundary move set"
|
||||
}
|
||||
if ($consumerBoundary.stage -ne "provider-consumer") {
|
||||
throw "Aetheria Unity consumer-boundary move set has unexpected stage: $($consumerBoundary.stage)"
|
||||
}
|
||||
if ($consumerBoundary.destinationOwner -ne "EveUnity") {
|
||||
throw "Aetheria Unity consumer-boundary has unexpected destination owner: $($consumerBoundary.destinationOwner)"
|
||||
}
|
||||
if (-not $consumerBoundary.replacementProof) {
|
||||
throw "Aetheria Unity consumer-boundary missing replacement proof"
|
||||
}
|
||||
foreach ($relativePath in @($consumerBoundary.currentPaths)) {
|
||||
$absolutePath = Join-Path $projectRoot $relativePath
|
||||
if (-not (Test-Path -LiteralPath $absolutePath)) {
|
||||
throw "Aetheria Unity consumer-boundary references missing current path: $relativePath"
|
||||
}
|
||||
}
|
||||
foreach ($providerPath in @($consumerBoundary.observedProviderPaths)) {
|
||||
if (-not ([System.IO.Path]::IsPathRooted($providerPath))) {
|
||||
throw "Aetheria Unity observed provider path must be absolute: $providerPath"
|
||||
}
|
||||
if (-not (Test-Path -LiteralPath $providerPath)) {
|
||||
throw "Aetheria Unity observed provider path is missing: $providerPath"
|
||||
}
|
||||
}
|
||||
foreach ($requiredObservedPath in @(
|
||||
"E:\Projects\Aetheria\Packages\manifest.json",
|
||||
"E:\Projects\Aetheria\GameCult.Eve.UnityUIToolkit.csproj",
|
||||
"E:\Projects\Aetheria\Assets"
|
||||
)) {
|
||||
if (-not (@($consumerBoundary.observedProviderPaths) -contains $requiredObservedPath)) {
|
||||
throw "Aetheria Unity consumer-boundary missing required observed provider path: $requiredObservedPath"
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($contract in @(
|
||||
"gamecult.eve.surface.v1",
|
||||
"gamecult.eve.command.v1",
|
||||
|
|
|
|||
|
|
@ -53,6 +53,9 @@ try {
|
|||
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-tex-plugin-projection:current:exists:TeXMathUnitySceneProjectionAdapter.cs `
|
||||
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-command-transport:current:exists:EveUnitySceneSurfaceLowerer.cs `
|
||||
--expect-split-handoff-move EveUnity:unity-scene:unity-scene-capture-lifecycle:current:exists:eveunity-capture-contract.mjs `
|
||||
--expect-split-handoff-move EveUnity:unity-uitoolkit:aetheria-unity-consumer-boundary:observed-provider:exists:Packages/manifest.json `
|
||||
--expect-split-handoff-move EveUnity:unity-uitoolkit:aetheria-unity-consumer-boundary:observed-provider:exists:GameCult.Eve.UnityUIToolkit.csproj `
|
||||
--expect-split-handoff-move EveUnity:unity-uitoolkit:aetheria-unity-consumer-boundary:observed-provider:exists:Aetheria.State.Unity/AetheriaRuntimeCatalogClient.cs `
|
||||
--expect-split-target-blocker "EveUnity:Tagged UPM release" `
|
||||
--expect-split-target-blocker "EveUnity:Unity batchmode EditMode runner" `
|
||||
--expect-split-target-blocker "EveUnity:Unity batchmode or editor capture artifact" `
|
||||
|
|
|
|||
Loading…
Reference in a new issue