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,
|
- Ymir owns the pinned Box3D version, stable GameCult entity ids,
|
||||||
native ABI isolation, public in-process retained sessions, explicit mutation
|
native ABI isolation, public in-process retained sessions, explicit mutation
|
||||||
receipts, typed contact facts, snapshot lowering, deterministic result
|
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,
|
- An optional Ymir daemon may own named session routing, durable command receipts,
|
||||||
checkpoint reconstruction, CultMesh command/fact publication, and process
|
checkpoint reconstruction, CultMesh command/fact publication, and process
|
||||||
supervision for worlds it hosts. It is not part of Aetheria's gameplay path.
|
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
|
private records cannot advance gameplay truth, and restart fails closed once
|
||||||
the persistence capability has been activated. Complete replay history is not
|
the persistence capability has been activated. Complete replay history is not
|
||||||
product state and never rides in public client frames. The current CLI still
|
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
|
has no named session registry or CultMesh command lowerings; its CultCache
|
||||||
Eve output remains a regenerated diagnostic projection.
|
output remains a regenerated diagnostic projection.
|
||||||
|
|
||||||
## Target Inputs
|
## Target Inputs
|
||||||
|
|
||||||
|
|
@ -98,7 +98,6 @@ not alter their membership or invent missing contacts.
|
||||||
are not a second live solver.
|
are not a second live solver.
|
||||||
- SoA body documents are transport and inspection projections over the live
|
- SoA body documents are transport and inspection projections over the live
|
||||||
session.
|
session.
|
||||||
- Eve surfaces are presentation projections over Ymir state and receipts.
|
|
||||||
- Unity GameObjects and Electron objects are render state only.
|
- Unity GameObjects and Electron objects are render state only.
|
||||||
- Aetheria damage, loot, capacity, faction, and scoring consequences are
|
- Aetheria damage, loot, capacity, faction, and scoring consequences are
|
||||||
derived from Ymir facts plus Aetheria policy.
|
derived from Ymir facts plus Aetheria policy.
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,9 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<EveRoot Condition="'$(EveRoot)' == ''">$(MSBuildThisFileDirectory)..\..\..\Eve</EveRoot>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\Ymir.Box3D\Ymir.Box3D.csproj" />
|
<ProjectReference Include="..\Ymir.Box3D\Ymir.Box3D.csproj" />
|
||||||
<ProjectReference Include="$(CultLibRoot)\src\GameCult.Caching\GameCult.Caching.csproj" />
|
<ProjectReference Include="$(CultLibRoot)\src\GameCult.Caching\GameCult.Caching.csproj" />
|
||||||
<ProjectReference Include="$(CultLibRoot)\src\GameCult.Caching.MessagePack\GameCult.Caching.MessagePack.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" />
|
<ProjectReference Include="$(CultLibRoot)\packages\cultmath\src\CultMath\CultMath.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
using GameCult.Caching;
|
using GameCult.Caching;
|
||||||
using GameCult.Caching.MessagePack;
|
using GameCult.Caching.MessagePack;
|
||||||
using GameCult.Eve.Surface;
|
|
||||||
using MessagePack;
|
using MessagePack;
|
||||||
|
|
||||||
namespace Ymir.Core;
|
namespace Ymir.Core;
|
||||||
|
|
@ -91,8 +90,7 @@ public static class YmirServicePublication
|
||||||
"Box3D-backed circle overlap and cast queries over submitted bodies",
|
"Box3D-backed circle overlap and cast queries over submitted bodies",
|
||||||
"deterministic result ordering",
|
"deterministic result ordering",
|
||||||
"checksummed replay checkpoint reconstruction bound to the pinned native build",
|
"checksummed replay checkpoint reconstruction bound to the pinned native build",
|
||||||
"CultCache world snapshot v2 with explicit v1/v0 read migration",
|
"CultCache world snapshot v2 with explicit v1/v0 read migration"
|
||||||
"diagnostic Eve publication"
|
|
||||||
],
|
],
|
||||||
DoesNotOwn =
|
DoesNotOwn =
|
||||||
[
|
[
|
||||||
|
|
@ -121,31 +119,11 @@ public static class YmirServicePublication
|
||||||
UpdatedAtUtc = FormatUtc(now)
|
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");
|
private static string FormatUtc(DateTimeOffset value) => value.UtcDateTime.ToString("O");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class YmirServicePublicationStore
|
public static class YmirServicePublicationStore
|
||||||
{
|
{
|
||||||
public const string SurfaceRecordKey = "surface:ymir.physics.operator";
|
|
||||||
|
|
||||||
public static async Task RegenerateDerivedStoreAsync(string path, DateTimeOffset now)
|
public static async Task RegenerateDerivedStoreAsync(string path, DateTimeOffset now)
|
||||||
{
|
{
|
||||||
DeleteDerivedStore(path);
|
DeleteDerivedStore(path);
|
||||||
|
|
@ -174,10 +152,6 @@ public static class YmirServicePublicationStore
|
||||||
operatorState,
|
operatorState,
|
||||||
new CultRecordHandle<YmirOperatorStateDocument>(new CultRecordKey("ymir:operator:ymir.physics")))
|
new CultRecordHandle<YmirOperatorStateDocument>(new CultRecordKey("ymir:operator:ymir.physics")))
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
await cache.UpsertAsync(
|
|
||||||
YmirServicePublication.EveSurface(operatorState),
|
|
||||||
new CultRecordHandle<EveSurfaceDocument>(new CultRecordKey(SurfaceRecordKey)))
|
|
||||||
.ConfigureAwait(false);
|
|
||||||
await cache.FlushAsync().ConfigureAwait(false);
|
await cache.FlushAsync().ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
using GameCult.Caching;
|
using GameCult.Caching;
|
||||||
using GameCult.Caching.MessagePack;
|
using GameCult.Caching.MessagePack;
|
||||||
using GameCult.Eve.Surface;
|
|
||||||
using Ymir.Core;
|
using Ymir.Core;
|
||||||
|
|
||||||
namespace Ymir.Tests;
|
namespace Ymir.Tests;
|
||||||
|
|
@ -30,53 +29,6 @@ public sealed class YmirServicePublicationTests
|
||||||
Assert.Equal("box3d-retained-session", diagnostics.Status);
|
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]
|
[Fact]
|
||||||
public async Task PublicationPersistsAndReopensWithCombinedRegistry()
|
public async Task PublicationPersistsAndReopensWithCombinedRegistry()
|
||||||
{
|
{
|
||||||
|
|
@ -91,10 +43,8 @@ public sealed class YmirServicePublicationTests
|
||||||
UseDirectoryStore = true
|
UseDirectoryStore = true
|
||||||
});
|
});
|
||||||
|
|
||||||
var surface = cache.Get<EveSurfaceDocument>(new CultRecordKey(YmirServicePublicationStore.SurfaceRecordKey));
|
Assert.NotNull(cache.Get<YmirOperatorStateDocument>(new CultRecordKey("ymir:operator:ymir.physics")));
|
||||||
Assert.NotNull(surface);
|
Assert.Single(cache.GetAll<YmirOperatorStateDocument>());
|
||||||
Assert.Equal("ymir.physics.operator", surface.Surface.Id);
|
|
||||||
Assert.Single(cache.GetAll<EveSurfaceDocument>());
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
|
@ -121,7 +71,7 @@ public sealed class YmirServicePublicationTests
|
||||||
Registry = new CultDocumentRegistry(),
|
Registry = new CultDocumentRegistry(),
|
||||||
UseDirectoryStore = true
|
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")));
|
Assert.False(File.Exists(Path.Combine(recordsPath, "legacy.msgpack")));
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue