Remove the Eve surface from Ymir.Core (parked at parked/ymir-eve-surface)

Eve is deprecated; per thing2:ruling:eve-dashboards-quarantined the surface builders, EveSurfaceDocument publication, GameCult.Eve.Surface reference and EveRoot are gone. YmirOperatorStateDocument and its publication stay.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Meta Vens 2026-10-22 20:02:38 +02:00
commit 21e7c43777
5 changed files with 7 additions and 90 deletions

View file

@ -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.

View file

@ -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.

View file

@ -1,15 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<EveRoot Condition="'$(EveRoot)' == ''">$(MSBuildThisFileDirectory)..\..\..\Eve</EveRoot>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Ymir.Box3D\Ymir.Box3D.csproj" />
<ProjectReference Include="$(CultLibRoot)\src\GameCult.Caching\GameCult.Caching.csproj" />
<ProjectReference Include="$(CultLibRoot)\src\GameCult.Caching.MessagePack\GameCult.Caching.MessagePack.csproj" />
<ProjectReference Include="$(EveRoot)\packages\org.gamecult.eve.surface\GameCult.Eve.Surface.csproj"
AdditionalProperties="CultLibRoot=$(CultLibRoot)" />
<ProjectReference Include="$(CultLibRoot)\packages\cultmath\src\CultMath\CultMath.csproj" />
</ItemGroup>

View file

@ -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<YmirOperatorStateDocument>(new CultRecordKey("ymir:operator:ymir.physics")))
.ConfigureAwait(false);
await cache.UpsertAsync(
YmirServicePublication.EveSurface(operatorState),
new CultRecordHandle<EveSurfaceDocument>(new CultRecordKey(SurfaceRecordKey)))
.ConfigureAwait(false);
await cache.FlushAsync().ConfigureAwait(false);
}
}

View file

@ -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<EveSurfaceDocument>(new CultRecordKey(YmirServicePublicationStore.SurfaceRecordKey));
Assert.NotNull(surface);
Assert.Equal("ymir.physics.operator", surface.Surface.Id);
Assert.Single(cache.GetAll<EveSurfaceDocument>());
Assert.NotNull(cache.Get<YmirOperatorStateDocument>(new CultRecordKey("ymir:operator:ymir.physics")));
Assert.Single(cache.GetAll<YmirOperatorStateDocument>());
}
finally
{
@ -121,7 +71,7 @@ public sealed class YmirServicePublicationTests
Registry = new CultDocumentRegistry(),
UseDirectoryStore = true
});
Assert.NotNull(cache.Get<EveSurfaceDocument>(new CultRecordKey(YmirServicePublicationStore.SurfaceRecordKey)));
Assert.NotNull(cache.Get<YmirOperatorStateDocument>(new CultRecordKey("ymir:operator:ymir.physics")));
Assert.False(File.Exists(Path.Combine(recordsPath, "legacy.msgpack")));
}
finally