Pin released mapped asset lowering proof
This commit is contained in:
parent
d33ede0889
commit
f8460a3a05
7 changed files with 52 additions and 30 deletions
|
|
@ -696,6 +696,8 @@ static void RequireSharedEvePackagesImportedFromEveRepo(string root)
|
|||
{
|
||||
var manifestPath = Path.Combine(root, "Aetheria.Unity", "Packages", "manifest.json");
|
||||
var lockPath = Path.Combine(root, "Aetheria.Unity", "Packages", "packages-lock.json");
|
||||
var authoringManifestPath = Path.Combine(root, "Packages", "manifest.json");
|
||||
var authoringLockPath = Path.Combine(root, "Packages", "packages-lock.json");
|
||||
var unityAsmdefPath = Path.Combine(
|
||||
root,
|
||||
"Packages",
|
||||
|
|
@ -765,6 +767,12 @@ static void RequireSharedEvePackagesImportedFromEveRepo(string root)
|
|||
var packageLock = File.Exists(lockPath)
|
||||
? File.ReadAllText(lockPath)
|
||||
: throw new InvalidOperationException("Cannot verify shared Eve package ownership; packages-lock.json is missing.");
|
||||
var authoringManifest = File.Exists(authoringManifestPath)
|
||||
? File.ReadAllText(authoringManifestPath)
|
||||
: throw new InvalidOperationException("Cannot verify asset-authoring package ownership; manifest.json is missing.");
|
||||
var authoringPackageLock = File.Exists(authoringLockPath)
|
||||
? File.ReadAllText(authoringLockPath)
|
||||
: throw new InvalidOperationException("Cannot verify asset-authoring package ownership; packages-lock.json is missing.");
|
||||
var unityAsmdef = File.Exists(unityAsmdefPath)
|
||||
? File.ReadAllText(unityAsmdefPath)
|
||||
: throw new InvalidOperationException("Cannot verify shared Eve package ownership; GameCult.Aetheria.State.Unity.asmdef is missing.");
|
||||
|
|
@ -798,10 +806,10 @@ static void RequireSharedEvePackagesImportedFromEveRepo(string root)
|
|||
|
||||
var requiredManifestSymbols = new[]
|
||||
{
|
||||
"\"org.gamecult.cultlib\": \"https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.14\"",
|
||||
"\"org.gamecult.cultlib\": \"https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.15\"",
|
||||
"\"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.2\"",
|
||||
"\"org.gamecult.eve.unity-scene\": \"https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.52\""
|
||||
"\"org.gamecult.eve.unity-scene\": \"https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.53\""
|
||||
};
|
||||
|
||||
var missingManifestSymbols = requiredManifestSymbols
|
||||
|
|
@ -817,10 +825,10 @@ static void RequireSharedEvePackagesImportedFromEveRepo(string root)
|
|||
|
||||
var requiredLockSymbols = new[]
|
||||
{
|
||||
"cultlib-unity-v1.0.14",
|
||||
"cultlib-unity-v1.0.15",
|
||||
"eve-plugin-fields-unity-v0.2.3",
|
||||
"eveunity-surface-v0.2.2",
|
||||
"eveunity-scene-v0.3.52",
|
||||
"eveunity-scene-v0.3.53",
|
||||
"\"source\": \"git\""
|
||||
};
|
||||
|
||||
|
|
@ -835,6 +843,16 @@ static void RequireSharedEvePackagesImportedFromEveRepo(string root)
|
|||
string.Join(", ", missingLockSymbols));
|
||||
}
|
||||
|
||||
const string requiredAuthoringCultLib =
|
||||
"https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.15";
|
||||
if (!authoringManifest.Contains(requiredAuthoringCultLib, StringComparison.Ordinal) ||
|
||||
!authoringPackageLock.Contains(requiredAuthoringCultLib, StringComparison.Ordinal) ||
|
||||
!authoringPackageLock.Contains("419053ebe2325848051c4f4d8ba352cd4286c424", StringComparison.Ordinal))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
"The fossil asset-authoring Unity project is not pinned to the released CultLib body required by the generic scene package.");
|
||||
}
|
||||
|
||||
if (Directory.Exists(localSurfacePath) || Directory.Exists(localUnityUiToolkitPath))
|
||||
{
|
||||
throw new InvalidOperationException(
|
||||
|
|
|
|||
|
|
@ -6,9 +6,9 @@
|
|||
"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.14",
|
||||
"org.gamecult.cultlib": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.15",
|
||||
"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.2",
|
||||
"org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.52"
|
||||
"org.gamecult.eve.unity-scene": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.53"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -119,11 +119,11 @@
|
|||
}
|
||||
},
|
||||
"org.gamecult.cultlib": {
|
||||
"version": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.14",
|
||||
"version": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.15",
|
||||
"depth": 0,
|
||||
"source": "git",
|
||||
"dependencies": {},
|
||||
"hash": "4b7162022a8976f7941b5a7a69acf50f1b6d532b"
|
||||
"hash": "419053ebe2325848051c4f4d8ba352cd4286c424"
|
||||
},
|
||||
"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": "140e1bd963a0033e66777a3b2c5fe6e9c97dfe32"
|
||||
},
|
||||
"org.gamecult.eve.unity-scene": {
|
||||
"version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.52",
|
||||
"version": "https://github.com/GameCult/EveUnity.git?path=/packages/org.gamecult.eve.unity-scene#eveunity-scene-v0.3.53",
|
||||
"depth": 0,
|
||||
"source": "git",
|
||||
"dependencies": {
|
||||
"org.gamecult.cultlib": "1.0.14",
|
||||
"org.gamecult.cultlib": "1.0.15",
|
||||
"org.gamecult.eve.plugin-fields": "0.2.3",
|
||||
"org.gamecult.eve.surface": "0.2.2",
|
||||
"com.unity.mathematics": "1.3.2",
|
||||
"com.unity.render-pipelines.universal": "17.4.0",
|
||||
"com.unity.modules.particlesystem": "1.0.0"
|
||||
},
|
||||
"hash": "5809a553d815dec6e317c36ea1e762fc6b6b8b29"
|
||||
"hash": "bb7e7fc6bbbbd87e9794212de53f4b92b3c5e785"
|
||||
},
|
||||
"com.unity.modules.assetbundle": {
|
||||
"version": "1.0.0",
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@
|
|||
"org.gamecult.aetheria.eve-runtime": "file:org.gamecult.aetheria.eve-runtime",
|
||||
"org.gamecult.aetheria.state": "file:org.gamecult.aetheria.state",
|
||||
"org.gamecult.cultmath": "file:../../CultMath",
|
||||
"org.gamecult.cultlib": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.14",
|
||||
"org.gamecult.cultlib": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.15",
|
||||
"org.gamecult.eve.surface": "file:../../EveUnity/packages/org.gamecult.eve.surface",
|
||||
"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.unity-scene": "file:../../EveUnity/packages/org.gamecult.eve.unity-scene",
|
||||
|
|
|
|||
|
|
@ -311,11 +311,11 @@
|
|||
}
|
||||
},
|
||||
"org.gamecult.cultlib": {
|
||||
"version": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.14",
|
||||
"version": "https://github.com/GameCult/CultLib.git?path=/unity/org.gamecult.cultlib#cultlib-unity-v1.0.15",
|
||||
"depth": 0,
|
||||
"source": "git",
|
||||
"dependencies": {},
|
||||
"hash": "4b7162022a8976f7941b5a7a69acf50f1b6d532b"
|
||||
"hash": "419053ebe2325848051c4f4d8ba352cd4286c424"
|
||||
},
|
||||
"org.gamecult.cultmath": {
|
||||
"version": "file:../../CultMath",
|
||||
|
|
@ -345,7 +345,7 @@
|
|||
"depth": 0,
|
||||
"source": "local",
|
||||
"dependencies": {
|
||||
"org.gamecult.cultlib": "1.0.14",
|
||||
"org.gamecult.cultlib": "1.0.15",
|
||||
"org.gamecult.eve.plugin-fields": "0.2.3",
|
||||
"org.gamecult.eve.surface": "0.2.2",
|
||||
"com.unity.mathematics": "1.3.2",
|
||||
|
|
|
|||
|
|
@ -1161,7 +1161,8 @@ legacy catalog cache, and legacy UI paths should be migration-only or deleted.
|
|||
length, negotiated chunk requests, and resumable client checkpoint.
|
||||
- Outputs: snapshot delivery publishes the typed artifact manifest only;
|
||||
content-session requests return bounded byte ranges which the generic runtime
|
||||
verifies and atomically promotes to a hash-named `.body`.
|
||||
verifies and atomically promotes to a hash-named `.body`, then binds to a
|
||||
read-only mapped-body lease for Unity loading.
|
||||
- Derived state: Unity `AssetBundle` instances, native prefab lookup, cache
|
||||
files, progress UI, and screenshots cannot publish or mutate provider bytes.
|
||||
- Forbidden writers: batched snapshot chunks and the former
|
||||
|
|
@ -1169,9 +1170,9 @@ legacy catalog cache, and legacy UI paths should be migration-only or deleted.
|
|||
renderer code cannot smuggle bundle bytes through state records.
|
||||
- Shared paths: cold transfer, resume, and warm cache reuse all resolve the same
|
||||
advertised manifest and content hash through the generic runtime transport.
|
||||
- Cut line: CultMesh snapshots index manifests; managed content sessions are the
|
||||
sole bundle-body transport until a negotiated mapped/network body transport
|
||||
replaces their byte-copy implementation.
|
||||
- Cut line: CultMesh snapshots index manifests; managed content sessions own
|
||||
remote bytes, verification, and promotion. Mapped-body negotiation begins only
|
||||
at the returned final path and cannot map partials or reconstruct cache names.
|
||||
|
||||
- Owner: `Aetheria.State` owns the new typed state spine for durable state.
|
||||
The embedded `GameCult.Aetheria.State.Unity` package owns Unity's runtime
|
||||
|
|
@ -2590,16 +2591,18 @@ expose.
|
|||
|
||||
The released-package proof keeps two lifecycle claims separate. The
|
||||
`cold-start-lowering` profile begins with an empty cache, receives and verifies
|
||||
the 46,412,384-byte provider body through `cultmesh.content.v1`, promotes the
|
||||
exact hash with no partial, and proves generic world, field-volume, movement,
|
||||
the 55,539,565-byte provider body through `cultmesh.content.v1`, promotes the
|
||||
exact hash with no partial, negotiates `SharedFileMapping` over the exact
|
||||
transfer-owned file, and proves generic world, field-volume, movement,
|
||||
environment, and pilot/map camera lowering. The `full-session-gameplay` profile
|
||||
starts a fresh warm daemon session, begins with no pickup, destroys the
|
||||
deterministic salvage target, observes its canonical cargo drop, and collects
|
||||
it exactly once from a persisted Ymir Begin fact. Witness runners use the
|
||||
daemon's native 20 ms wall interval for its 20 ms simulation delta; download
|
||||
latency is not allowed to redefine transient world lifetime. The managed
|
||||
network content path is proven, while negotiated mapped/zero-copy body delivery
|
||||
remains CultMesh work. The fog contract and provider shader execute. Terminus
|
||||
latency is not allowed to redefine transient world lifetime. Managed network
|
||||
delivery and verified local file mapping are proven. Provider-to-client network
|
||||
zero-copy, shared-memory delivery, and GPU zero-copy remain CultMesh/runtime
|
||||
work. The fog contract and provider shader execute. Terminus
|
||||
now publishes its blue fog tint from the daemon-owned sun visual rather than an
|
||||
unrelated brown calibration; the generic runtime applies the same field ABI.
|
||||
The warm witness records `225,293` changed pilot pixels, average luminance
|
||||
|
|
|
|||
|
|
@ -35,10 +35,10 @@ validation proves contract shape, not wiring, exclusivity, lowering, or parity.
|
|||
| Render channels | Unity layers/culling masks | provider surface policy + runtime asset variant | semantic channel exclusions | EveUnity native layer mapping | wired, exclusive, and lowered: the pilot surface excludes the semantic `map` channel; the Unity asset variant maps `map` to its authored native layer; EveUnity subtracts that layer from the configured camera mask; portable state contains no Unity layer or mask; provider conversion preserves the source icon shader's unlit lighting model; the released witness proves the pilot camera excludes map glyphs while the map camera retains readable white glyphs without a scene light | preserve the channel proof while world presentation and transport continue to evolve |
|
||||
| Minimap/tactical map | `ZoneRenderer`, map cameras | daemon world facts | explicit map projections | Unity and Electron | facts fragmented; generic lowerers absent | same state in both runtimes |
|
||||
| Celestial world | `ZoneRenderer`, body/asteroid prefab scripts | daemon render projection plus provider assets | ordinary generic Eve entity SoA rows | EveUnity generic entity/prefab lowerer | wired, exclusive, projected, and lowered: daemon orbit and terrain queries emit stable presentation-only identities for suns, planets, gas giants, and live asteroid instances; provider packaging extracts only each advertised visual child and strips fossil scripts/physics; released EveUnity `0.3.51` applies semantic scale around provider-authored local scale and contains no celestial or Aetheria branch. The released warm witness records eleven bodies and eighteen asteroids with provider refs and enabled renderers, including seven celestial instances intersecting the pilot frustum | body material/light readability, close-range composition matching the fossil, asteroid variation, and Electron lowering |
|
||||
| Fields/fog/gravity | zone renderer and shaders | daemon/plugin semantics | Fields plugin documents | EveUnity fields lowerer | daemon publishes canonical gravity/fog splat layers through `field.volume3d`; Eve Fields `0.2.3` owns portable `PowerPulse` and `AnimatedRadialCosine` semantics; Aetheria emits the fossil global animated simplex/cellular/ambient stack, body-owned radial waves, and separate negative gameplay `gravity.height` and positive visual `fog.surface_height`; the shared camera-relative lattice spans 1536 world units as 256 six-unit Stardust cells, rasterizes gravity at eight texels per cell into 2048 texels, and snaps the viewport by one six-unit cell; daemon entities follow fossil terrain height plus hull grid offset after Ymir XZ motion; released EveUnity `0.3.52` lowers the authored 2048/256/512 layer topology, provider shader ABI, pre-postprocess URP pass, authoritative flow time, explicit camera matrix, and float32 packed-output diagnostics without provider code. The provider bundle runs the actual Stardust compute shader across X, Y, and diagonal one-cell remaps and proves 705 overlapping world cells remain bit-identical after buffer reassignment. The released witness proves the same snapped grid drives 65,536 rendered particles while the map camera remains isolated. The flight post-process bundle gate now loads and verifies serialized ACES, exposure/contrast, bloom, vignette, and film-grain components rather than accepting an empty profile | restore readable patch structure, gravity waves, surrounding world geometry, and final luminance/composition parity; visual parity remains explicitly open |
|
||||
| Fields/fog/gravity | zone renderer and shaders | daemon/plugin semantics | Fields plugin documents | EveUnity fields lowerer | daemon publishes canonical gravity/fog splat layers through `field.volume3d`; Eve Fields `0.2.3` owns portable `PowerPulse` and `AnimatedRadialCosine` semantics; Aetheria emits the fossil global animated simplex/cellular/ambient stack, body-owned radial waves, and separate negative gameplay `gravity.height` and positive visual `fog.surface_height`; the shared camera-relative lattice spans 1536 world units as 256 six-unit Stardust cells, rasterizes gravity at eight texels per cell into 2048 texels, and snaps the viewport by one six-unit cell; daemon entities follow fossil terrain height plus hull grid offset after Ymir XZ motion; released EveUnity `0.3.53` lowers the authored 2048/256/512 layer topology, provider shader ABI, pre-postprocess URP pass, authoritative flow time, explicit camera matrix, and float32 packed-output diagnostics without provider code. The provider bundle runs the actual Stardust compute shader across X, Y, and diagonal one-cell remaps and proves 705 overlapping world cells remain bit-identical after buffer reassignment. The released witness proves the same snapped grid drives 65,536 rendered particles while the map camera remains isolated. The flight post-process bundle gate now loads and verifies serialized ACES, exposure/contrast, bloom, vignette, and film-grain components rather than accepting an empty profile | restore readable patch structure, gravity waves, surrounding world geometry, and final luminance/composition parity; visual parity remains explicitly open |
|
||||
| HUD/schematic | ARPG HUD and `SchematicDisplay` | Eve composition from daemon facts | semantic status/components | EveUnity UI | provider-authored transparent cockpit is wired, projected, and lowered through generic UI Toolkit panes, metrics, and progress components for hull, shield, capacitor, temperature, cargo, weapon cooldown/groups, selected target, target lock, target shield, and target hull; the original armor/equipment schematic and transient warning choreography remain reference-only | schematic topology, warning timelines, dynamic action state, and composited live capture |
|
||||
| Hit/lock/warnings | `ActionGameManager` feedback | daemon event facts | transient feedback stream | VFX/UI/audio | bounded deduplicated game-event ledger and Eve `feedback.stream` wired for pickup outcomes, projectile launch/impact, entity damage, alive-to-dead destruction, authoritative weapon reload chronology, lock start/acquired/lost chronology, and episode-deduplicated `weapon.fire.refused` facts for insufficient energy or missing ammunition; every lock transition carries authored weapon identity, target, reason, and prior/current progress, while reconnect priming prevents retained events from replaying as new feedback | add thermal and docking event families, negative transaction fixtures, provider lock audio/effect roles, and broader runtime effect consumption |
|
||||
| Assets | `Assets/Resources` | Aetheria provider | asset catalog + CultMesh CDN | runtime cache/load | provider manifests name deterministic bundle-internal paths; the authoring build derives presentation-only prefabs, strips missing and non-Eve `MonoBehaviour` components, externalizes embedded tractor and shield event visuals, preserves particle/unlit/lit source semantics during URP conversion, verifies saved prefabs and the loaded bundle including native program/profile ABI, and publishes the immutable roughly 55 MB bundle through CultMesh; the released cold profile starts empty, receives and verifies the body through `cultmesh.content.v1`, atomically promotes the exact hash with no partial, and lowers rendered provider identity; the warm profile reuses the committed body. Negotiated mapped/zero-copy delivery remains unproven | negotiated mapped/network body selection and same-machine zero-copy proof |
|
||||
| Assets | `Assets/Resources` | Aetheria provider | asset catalog + CultMesh CDN | runtime cache/load | provider manifests name deterministic bundle-internal paths; the authoring build derives presentation-only prefabs, strips missing and non-Eve `MonoBehaviour` components, externalizes embedded tractor and shield event visuals, preserves particle/unlit/lit source semantics during URP conversion, verifies saved prefabs and the loaded bundle including native program/profile ABI, and publishes the immutable roughly 55 MB bundle through CultMesh; the released cold profile starts empty, receives and verifies the 55,539,565-byte body through `cultmesh.content.v1`, atomically promotes the exact hash with no partial, negotiates `SharedFileMapping` over that transfer-owned path, and lowers rendered provider identity without another process-sized bundle allocation; the warm profile reuses the committed body | provider-to-client network zero-copy, shared-memory delivery, and GPU zero-copy remain open; local verified-file mapping is proven |
|
||||
| Save/resume | original persistence paths | daemon/CultCache | published current state | clients rehydrate | owner-exists; not parity-proven | mid-loop restart |
|
||||
| Terminus loop | original game composition | daemon/Ymir/Eve | pilot surface | Aetheria.Unity | live minimum-loop proof: generic Unity discovers the provider, lowers the pilot world/assets, single-steps dock and undock while paused, buys daemon-priced station stock, single-steps Ymir salvage collection, resumes, moves, targets, fires, and presents authoritative receipts/shot outcome; the released full-session profile starts with no pickup, destroys a deterministic target, observes its canonical cargo drop, tractors it into a Ymir Begin contact, and proves exactly one `ymir-fact:` collection receipt plus cargo `0` to `1` | richer trade content, docking transitions, and sustained combat encounters |
|
||||
| Starbridge | original/shared architecture intent | one daemon session | pilot + commander surfaces | Unity + Electron | commander task board and autonomous explore execution wired; Electron Eve lowering and split-target proof missing | commander orders plus four pilots and autonomous workers |
|
||||
|
|
@ -157,12 +157,13 @@ These are source-confirmed ownership failures, not feature backlog:
|
|||
variants, strips missing and non-Eve scripts, verifies the saved prefabs and
|
||||
loaded AssetBundle, and the daemon advertises those bundle-internal paths.
|
||||
A clean released EveUnity client downloads, verifies, atomically promotes,
|
||||
reuses, and renders the provider body without access to the authoring
|
||||
project. This does not prove the negotiated mapped/zero-copy representation.
|
||||
maps, reuses, and renders the provider body without access to the authoring
|
||||
project. The cold witness selects `SharedFileMapping` over the exact
|
||||
transfer-owned final path; network and GPU zero-copy are not claimed.
|
||||
12. **The negotiated local SoA fast path remains unproven.** The daemon publishes
|
||||
exact immutable generations; the external Unity client rejects stale or
|
||||
mismatched bodies and now resolves the same generation through the
|
||||
Verse-owned network binding, manifest, and content-addressed chunks. The live
|
||||
witness proves remote/fallback correctness. Shared-memory handle exchange and
|
||||
proof that a same-machine client selected the zero-copy representation remain
|
||||
CultMesh work rather than EveUnity policy.
|
||||
proof that a same-machine client selected the shared-memory SoA
|
||||
representation remain CultMesh work rather than EveUnity policy.
|
||||
|
|
|
|||
Loading…
Reference in a new issue