Gate daemon frame witness publication

This commit is contained in:
Meta Vens 2026-06-28 06:59:35 +01:00
commit b9a322b8dc
2 changed files with 24 additions and 2 deletions

View file

@ -199,10 +199,9 @@ static async Task<AetheriaRuntimeDaemonTickResult> TickAsync(
authorityLeases).ConfigureAwait(false);
}
AetheriaRuntimeDaemonFrameStore.PublishFrame(node.StatePath, result.Frame);
if (publishWitnesses)
{
AetheriaRuntimeDaemonFrameStore.PublishFrame(node.StatePath, result.Frame);
await PublishDaemonApiDocumentsAsync(node, result).ConfigureAwait(false);
await PublishStateSurfacesAsync(node, options, result.Frame.PublishedAtUtc).ConfigureAwait(false);
}

View file

@ -9190,6 +9190,29 @@ static void RequireDaemonVersePublication(string root)
"Daemon tick must pass the typed health document through surface builders instead of reopening its witness file.");
}
var daemonTickStart = daemonHostSource.IndexOf(
"static async Task<AetheriaRuntimeDaemonTickResult> TickAsync(",
StringComparison.Ordinal);
var daemonTickEnd = daemonTickStart >= 0
? daemonHostSource.IndexOf("static async Task PublishCommittedCommandFactsAsync", daemonTickStart, StringComparison.Ordinal)
: -1;
var daemonTickBlock = daemonTickStart >= 0 && daemonTickEnd > daemonTickStart
? daemonHostSource.Substring(daemonTickStart, daemonTickEnd - daemonTickStart)
: "";
var publishWitnessBlockStart = daemonTickBlock.IndexOf(
"if (publishWitnesses)",
StringComparison.Ordinal);
var frameWitnessPublishIndex = daemonTickBlock.IndexOf(
"AetheriaRuntimeDaemonFrameStore.PublishFrame(node.StatePath, result.Frame)",
StringComparison.Ordinal);
if (frameWitnessPublishIndex < 0 ||
publishWitnessBlockStart < 0 ||
frameWitnessPublishIndex < publishWitnessBlockStart)
{
throw new InvalidOperationException(
"Daemon ticks must keep legacy frame witness writes inside the API publication cadence; managed frames carry per-tick state.");
}
var snapshotHandlerStart = daemonHostSource.IndexOf(
"server.OnCultNet<CultNetSnapshotRequestMessage>",
StringComparison.Ordinal);