feat(rendering): compare the incremental shadow scene

Construct Slice F's non-drawing scene only for lifecycle automation, drain accepted static and live deltas at the final update boundary, and compare exact current-path fingerprints at cadence and checkpoints. Publish bounded mismatch, journal, index, digest, and memory evidence without changing normal launches or draw submission.

Release: 8,211 passed, 5 skipped.
This commit is contained in:
Erik 2026-07-24 22:24:30 +02:00
parent ff5d86175f
commit 0eb6648589
21 changed files with 937 additions and 20 deletions

View file

@ -144,6 +144,15 @@ public sealed class WorldLifecycleAutomationControllerTests
AbortedSelectionFrames: 0,
SelectionPartCount: 7,
SelectionDigest: new RenderSceneHash128(15, 16)),
RenderSceneShadow =
RenderSceneShadowComparisonSnapshot.Disabled with
{
Enabled = true,
ComparisonCount = 19,
SuccessfulComparisonCount = 19,
ComparedOracleFrameSequence = 19,
MatchedProjectionCount = 73,
},
TrackedGpuBytes = 1234,
Residency = new ResidencySnapshot(
[
@ -214,6 +223,20 @@ public sealed class WorldLifecycleAutomationControllerTests
0xFEDCBA9876543210uL,
renderSceneOracle.GetProperty("digest").GetProperty("high")
.GetUInt64());
JsonElement renderSceneShadow = json.RootElement
.GetProperty("resources")
.GetProperty("renderSceneShadow");
Assert.True(renderSceneShadow.GetProperty("enabled").GetBoolean());
Assert.Equal(
19,
renderSceneShadow.GetProperty("comparisonCount").GetInt64());
Assert.Equal(
73,
renderSceneShadow.GetProperty("matchedProjectionCount")
.GetInt32());
Assert.Equal(
0,
renderSceneShadow.GetProperty("mismatchCount").GetInt64());
JsonElement residency = json.RootElement
.GetProperty("resources")
.GetProperty("residency");
@ -353,6 +376,7 @@ public sealed class WorldLifecycleAutomationControllerTests
private static WorldLifecycleResourceSnapshot EmptyResources() => new(
0, 0, 0, 0, 0, 0, 0, CurrentRenderSceneOracleSnapshot.Disabled,
RenderSceneShadowComparisonSnapshot.Disabled,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0L, 0, 0L, 0L, 0L, 0L, 0, 0, 0, 0, 0, 0, 0, 0L, 0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,