diff --git a/README.md b/README.md index 5d56c7f..3418c79 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ installing a second solver. - Ymir owns the pinned Box3D version, stable GameCult entity ids, native ABI isolation, public in-process retained sessions, explicit mutation receipts, typed contact facts, snapshot lowering, deterministic result - ordering, versioned CultCache snapshots, and a diagnostic Eve publication. + ordering, versioned CultCache snapshots. - An optional Ymir daemon may own named session routing, durable command receipts, checkpoint reconstruction, CultMesh command/fact publication, and process supervision for worlds it hosts. It is not part of Aetheria's gameplay path. diff --git a/docs/architecture.md b/docs/architecture.md index d92f186..07bf2e1 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -64,8 +64,8 @@ public Aetheria frame last. The public frame is the only commit marker. Orphaned private records cannot advance gameplay truth, and restart fails closed once the persistence capability has been activated. Complete replay history is not product state and never rides in public client frames. The current CLI still -has no named session registry or CultMesh command lowerings; its CultCache and -Eve output remains a regenerated diagnostic projection. +has no named session registry or CultMesh command lowerings; its CultCache +output remains a regenerated diagnostic projection. ## Target Inputs @@ -98,7 +98,6 @@ not alter their membership or invent missing contacts. are not a second live solver. - SoA body documents are transport and inspection projections over the live session. -- Eve surfaces are presentation projections over Ymir state and receipts. - Unity GameObjects and Electron objects are render state only. - Aetheria damage, loot, capacity, faction, and scoring consequences are derived from Ymir facts plus Aetheria policy. diff --git a/src/Ymir.Core/Ymir.Core.csproj b/src/Ymir.Core/Ymir.Core.csproj index 29683f8..9c06e45 100644 --- a/src/Ymir.Core/Ymir.Core.csproj +++ b/src/Ymir.Core/Ymir.Core.csproj @@ -1,15 +1,9 @@  - - $(MSBuildThisFileDirectory)..\..\..\Eve - - - diff --git a/src/Ymir.Core/YmirServicePublicationDocument.cs b/src/Ymir.Core/YmirServicePublicationDocument.cs index 8bb4e13..ec8328d 100644 --- a/src/Ymir.Core/YmirServicePublicationDocument.cs +++ b/src/Ymir.Core/YmirServicePublicationDocument.cs @@ -1,6 +1,5 @@ using GameCult.Caching; using GameCult.Caching.MessagePack; -using GameCult.Eve.Surface; using MessagePack; namespace Ymir.Core; @@ -91,8 +90,7 @@ public static class YmirServicePublication "Box3D-backed circle overlap and cast queries over submitted bodies", "deterministic result ordering", "checksummed replay checkpoint reconstruction bound to the pinned native build", - "CultCache world snapshot v2 with explicit v1/v0 read migration", - "diagnostic Eve publication" + "CultCache world snapshot v2 with explicit v1/v0 read migration" ], DoesNotOwn = [ @@ -121,31 +119,11 @@ public static class YmirServicePublication UpdatedAtUtc = FormatUtc(now) }; - public static EveSurfaceDocument EveSurface(YmirOperatorStateDocument diagnostics) => - GameCult.Eve.Surface.EveSurface.Create("ymir.physics.operator") - .Provider(diagnostics.ProviderId, "physics.operator") - .Title("Ymir Physics") - .UpdatedAtUtc(diagnostics.UpdatedAtUtc) - .RootColumn("ymir.physics.operator.root", root => root - .Metric("ymir.physics.operator.status", "Status", diagnostics.Status) - .Metric("ymir.physics.operator.owner", "State owner", diagnostics.StateOwner) - .Metric("ymir.physics.operator.math", "Numeric substrate", diagnostics.NumericSubstrate) - .Metric("ymir.physics.operator.batch", "Batch kernel", diagnostics.BatchKernel) - .Metric("ymir.physics.operator.persistence", "Persistence", diagnostics.Persistence)) - .Build(); - - public static EveSurfaceDocument EveSurface(DateTimeOffset now) - { - return EveSurface(OperatorState(now)); - } - private static string FormatUtc(DateTimeOffset value) => value.UtcDateTime.ToString("O"); } public static class YmirServicePublicationStore { - public const string SurfaceRecordKey = "surface:ymir.physics.operator"; - public static async Task RegenerateDerivedStoreAsync(string path, DateTimeOffset now) { DeleteDerivedStore(path); @@ -174,10 +152,6 @@ public static class YmirServicePublicationStore operatorState, new CultRecordHandle(new CultRecordKey("ymir:operator:ymir.physics"))) .ConfigureAwait(false); - await cache.UpsertAsync( - YmirServicePublication.EveSurface(operatorState), - new CultRecordHandle(new CultRecordKey(SurfaceRecordKey))) - .ConfigureAwait(false); await cache.FlushAsync().ConfigureAwait(false); } } diff --git a/tests/Ymir.Tests/YmirServicePublicationTests.cs b/tests/Ymir.Tests/YmirServicePublicationTests.cs index 61beabb..cef0f9a 100644 --- a/tests/Ymir.Tests/YmirServicePublicationTests.cs +++ b/tests/Ymir.Tests/YmirServicePublicationTests.cs @@ -1,6 +1,5 @@ using GameCult.Caching; using GameCult.Caching.MessagePack; -using GameCult.Eve.Surface; using Ymir.Core; namespace Ymir.Tests; @@ -30,53 +29,6 @@ public sealed class YmirServicePublicationTests Assert.Equal("box3d-retained-session", diagnostics.Status); } - [Fact] - public void EveSurfaceUsesCanonicalDocumentAndOperatorMetrics() - { - var diagnostics = new YmirOperatorStateDocument - { - ProviderId = "ymir.physics", - Status = "ready", - StateOwner = "diagnostic-owner", - NumericSubstrate = "diagnostic-math", - BatchKernel = "diagnostic-batch", - Persistence = "diagnostic-persistence", - UpdatedAtUtc = "2026-07-13T12:00:00.0000000Z" - }; - - EveSurfaceDocument surface = YmirServicePublication.EveSurface(diagnostics); - - Assert.Equal(EveSurfaceDocument.SchemaId, surface.Schema); - Assert.Equal("ymir.physics.operator", surface.Surface.Id); - Assert.Equal("partition", surface.Surface.Root.Kind); - Assert.Equal(diagnostics.UpdatedAtUtc, surface.UpdatedAtUtc); - Assert.Equal( - new[] - { - ("Status", diagnostics.Status), - ("State owner", diagnostics.StateOwner), - ("Numeric substrate", diagnostics.NumericSubstrate), - ("Batch kernel", diagnostics.BatchKernel), - ("Persistence", diagnostics.Persistence) - }, - surface.Surface.Root.Children - .Select(child => (child.GetProp("label"), child.GetProp("value"))) - .ToArray()); - } - - [Fact] - public void CombinedRegistryContainsExactlyOneCanonicalSurfaceDescriptor() - { - var registry = new CultDocumentRegistry(); - - var descriptors = registry.AllDescriptors - .Where(descriptor => descriptor.SchemaVersion == EveSurfaceDocument.SchemaId) - .ToArray(); - - var descriptor = Assert.Single(descriptors); - Assert.Equal(typeof(EveSurfaceDocument), descriptor.DocumentType); - } - [Fact] public async Task PublicationPersistsAndReopensWithCombinedRegistry() { @@ -91,10 +43,8 @@ public sealed class YmirServicePublicationTests UseDirectoryStore = true }); - var surface = cache.Get(new CultRecordKey(YmirServicePublicationStore.SurfaceRecordKey)); - Assert.NotNull(surface); - Assert.Equal("ymir.physics.operator", surface.Surface.Id); - Assert.Single(cache.GetAll()); + Assert.NotNull(cache.Get(new CultRecordKey("ymir:operator:ymir.physics"))); + Assert.Single(cache.GetAll()); } finally { @@ -121,7 +71,7 @@ public sealed class YmirServicePublicationTests Registry = new CultDocumentRegistry(), UseDirectoryStore = true }); - Assert.NotNull(cache.Get(new CultRecordKey(YmirServicePublicationStore.SurfaceRecordKey))); + Assert.NotNull(cache.Get(new CultRecordKey("ymir:operator:ymir.physics"))); Assert.False(File.Exists(Path.Combine(recordsPath, "legacy.msgpack"))); } finally