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:
parent
4945968e96
commit
21e7c43777
5 changed files with 7 additions and 90 deletions
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue