#119 decisive probe: ACDREAM_DUMP_ENTITY one-shot entity dump (H-A/H-B/H-C discriminator)
The broken-state log (user-session-capture2.log) shows meshMissing=0 / entSeen==entDrawn WHILE broken stairs are on screen - the staircase is DRAWN WRONG, not missing. This probe discriminates the three live hypotheses in ONE launch (handoff 2026-06-11 s4): - HYDRATE dump (GameWindow.BuildInteriorEntitiesForStreaming): per-part placement-frame translations + dropped-part accounting at the MOMENT MeshRefs are constructed. H-A (SetupMesh.Flatten identity fallback / silent gfx-null part drops under degraded dat reads) shows here as zero translations or built<43. - DRAW dump (WbDrawDispatcher, first tuple per entity): live MeshRefs translation summary + per-part loaded flags + Tier-1 classification cache state (batch count + RestPose translation summary), re-emitted compactly on signature change. H-B (partial/stale cached batch set) shows as correct translations + odd batch count. - WALK-REJECT lines (rate-limited): attributes 'entity never reaches the draw loop' to the specific gate (visibleCellIds/frustum). - Correct everything -> H-C (draw-side compose), instrument next. Targets: ACDREAM_DUMP_ENTITY=0x020003F2,0x020005D8 (the 43-part spiral staircase Setup + the wall barrels; H-A predicts the user's 'barrel' IS the collapsed staircase). Probe is inert when the env var is unset. Parser in RenderingDiagnostics (diagnostic-owner pattern) + 5 unit tests. Suites: App 242+1skip / Core 1427+2skip / UI 420 / Net 294. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
d82f070b88
commit
3cf6bcc219
4 changed files with 246 additions and 2 deletions
|
|
@ -139,4 +139,48 @@ public sealed class RenderingDiagnosticsTests
|
|||
// Env var is absent in the test host, so the flag must default false (inert probe).
|
||||
Assert.False(AcDream.Core.Rendering.RenderingDiagnostics.ProbePortalChurnEnabled);
|
||||
}
|
||||
|
||||
// ── ACDREAM_DUMP_ENTITY parser (#119 decisive probe) ──────────────────
|
||||
|
||||
[Fact]
|
||||
public void ParseDumpEntityIds_NullOrEmpty_ReturnsEmptySet()
|
||||
{
|
||||
Assert.Empty(RenderingDiagnostics.ParseDumpEntityIds(null));
|
||||
Assert.Empty(RenderingDiagnostics.ParseDumpEntityIds(""));
|
||||
Assert.Empty(RenderingDiagnostics.ParseDumpEntityIds(" "));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseDumpEntityIds_CommaSeparatedWithPrefixes_ParsesAll()
|
||||
{
|
||||
var set = RenderingDiagnostics.ParseDumpEntityIds("0x020003F2,0x020005D8");
|
||||
Assert.Equal(2, set.Count);
|
||||
Assert.Contains(0x020003F2u, set);
|
||||
Assert.Contains(0x020005D8u, set);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseDumpEntityIds_NoPrefixMixedCaseAndWhitespace_Parses()
|
||||
{
|
||||
var set = RenderingDiagnostics.ParseDumpEntityIds(" 020003f2 , 0X020005D8 ");
|
||||
Assert.Equal(2, set.Count);
|
||||
Assert.Contains(0x020003F2u, set);
|
||||
Assert.Contains(0x020005D8u, set);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ParseDumpEntityIds_MalformedSegment_IgnoredNotFatal()
|
||||
{
|
||||
// A typo'd segment must not take the launch down — parse what's valid.
|
||||
var set = RenderingDiagnostics.ParseDumpEntityIds("0x020003F2,zzz,,0x");
|
||||
Assert.Single(set);
|
||||
Assert.Contains(0x020003F2u, set);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DumpEntitySourceIds_DefaultsEmpty_WhenEnvUnset()
|
||||
{
|
||||
// Env var is absent in the test host → probe inert.
|
||||
Assert.Empty(RenderingDiagnostics.DumpEntitySourceIds);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue