acdream/tests/AcDream.Core.Tests/Streaming
Erik 280f3b3fe9 fix(test): stop the streaming priority-apply tests reading a warm JIT
Five tests in StreamingControllerPriorityApplyTests passed only when a
sibling ran first in the same process. Run alone, they failed on
assertions about world-state residency and completion backlog:
DungeonCollapseBeforePromotionBase (line 355),
InFlightNearLoad_DemotedBeforeFirstCompletion (536),
HardRecenter_RejectsOldOverlappingLoadAndUnloadGenerations (582),
HardRecenter_DropsStaleOutboxThroughBoundedAdmission (626), and
DeferredCompaction_ApplyFailureRetainsExactResult.

The state a sibling supplied was not data. It was compiled code.
StreamingController meters each Tick against a wall-clock ceiling and
StreamingWorkBudgetOptions.Default allows 2 ms per frame; these tests
took that default. A cold first Tick has to JIT the whole publication
path, and the meter's own diagnostics measured it at 10.55 ms with
LastLimit=Time and one yield at stage publication-spatial-commit. The
frame's first operation is admitted unconditionally through
ensureProgress, so applyTerrain ran and the terrain assertion passed;
the very next reservation, the GpuWorldState spatial commit, was
refused, so the landblock never became resident in that frame. Any
sibling that publishes a landblock first (DuplicateNearCompletions, for
instance) warms that path and the same Tick then fits inside 2 ms.
Pairing the failing test with that sibling passed; pairing it with
DestinationReservation_StaleGenerationCannotClearReplacement, which
drains no completions and therefore JITs nothing, still failed.

Yielding mid-publication and resuming next frame is correct production
behavior and other tests in this file assert exactly that. The defect
was the setup: these tests assert which results publish, in what order,
and under which generation, yet left the elapsed-time dimension at a
value that made every assertion a function of machine speed and test
order. Every controller in the class now takes a budget whose time
ceiling cannot bind, applied uniformly so the next test added here does
not reacquire the dependency. Count and byte ceilings keep their real
values, including the deliberately small MaxCompletionAdmissions of
ForceReloadWindow_DiscardsBufferedCompletionsFromOldWindow and the
MaxCompletionsPerFrame scaling of the two tests that use it, so the
bounded-admission behavior under test is untouched. No assertion was
relaxed and no production code changed.

All fourteen tests in the class now pass individually and together;
Core is 3295 passed / 2 skipped, and two consecutive full-solution
Release runs are 8826 passed / 5 skipped.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-28 18:09:08 +02:00
..
DungeonStreamingGateTests.cs fix(streaming): #145 — teleport re-use via server-authoritative placement 2026-06-20 21:38:00 +02:00
GpuWorldStateTests.cs refactor(world): separate live lifetime from spatial buckets 2026-07-14 07:47:03 +02:00
GpuWorldStateTwoTierTests.cs refactor(world): separate live lifetime from spatial buckets 2026-07-14 07:47:03 +02:00
LandblockStreamerTests.cs feat(streaming): enforce typed completion queues 2026-07-24 17:48:24 +02:00
StreamingControllerDungeonGateTests.cs fix(portal): synchronize destination presentation state 2026-07-16 21:17:13 +02:00
StreamingControllerPriorityApplyTests.cs fix(test): stop the streaming priority-apply tests reading a warm JIT 2026-07-28 18:09:08 +02:00
StreamingControllerTests.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
StreamingControllerTwoTierTests.cs perf(streaming): cursor publication across frame budgets 2026-07-24 19:10:18 +02:00
StreamingRegionTests.cs feat(A.5 T4): StreamingRegion ComputeFirstTickDiff 2026-05-09 22:34:55 +02:00
StreamingRegionTwoTierTests.cs fix(A.5 T4-T6): bootstrap guard + dead enum + test cleanups 2026-05-09 22:49:35 +02:00