Keep reactive surfaces on daemon frame versions

This commit is contained in:
Meta Vens 2026-07-19 07:44:36 +01:00
commit 63d11c201f
2 changed files with 3 additions and 2 deletions

View file

@ -953,6 +953,8 @@ internal sealed class AetheriaDaemonYmirSmokeChecks
node.Kind is "feedback.event" or "shot.receipt"),
"the static pilot surface must not retain mutable gameplay facts");
var reactive = AetheriaRuntimeDaemonGameSurfaceBuilder.BuildReactiveGameplay(tick.Frame);
Require(reactive.Version == interruption.FrameId,
"reactive Eve surfaces and command receipts must share daemon frame-version semantics");
Require(Flatten(reactive.Surface.Root).Any(node => node.Kind == "feedback.event" &&
node.Props["eventKind"] == "simulation.interrupted" &&
node.Props["reason"] == "entity.damaged" &&

View file

@ -206,12 +206,11 @@ namespace GameCult.Aetheria.State.Verse
.Concat(receipts.Select(value => value.FrameId))
.DefaultIfEmpty(0)
.Max();
var version = checked(lastFrame * 100000L + events.Length * 100L + receipts.Length);
return new AetheriaRuntimeSurfaceDocument(
AetheriaRuntimeProviderIdentity.ProviderId,
"game.daemon",
"Aetheria Pilot Reactive State",
version,
lastFrame,
frame.PublishedAtUtc,
new AetheriaRuntimeSurfaceTree(
"aetheria.daemon.game.reactive",