acdream/tests/AcDream.App.Tests/World
Erik 89cf1e66d0 fix(physics): guard the world-frame agreement proven unreachable by measurement
Closes #283 (plan S3) - as UNREACHABLE, not by restructuring ownership.

acdream has two owners that convert a landblock-local network origin into the
streamed world frame: LiveWorldOriginState for presentation/streaming, and
RuntimePhysicsState.TryGetWorldFrameOffset for placement. They rebase on
different edges - Runtime the instant an accepted Position carries
TeleportAdvanced, App only once StreamingOriginRecenterCoordinator observes
old-window retirement completion, many frames later. A one-landblock
disagreement places an entity 192 m from the geometry around it: the same
failure family as the zero-offset bug 670f307c fixed, with a wrong origin
instead of a missing one.

The plan's first step was to prove or disprove reachability BEFORE moving
ownership, because a restructure on a hypothesis is churn. The probe added in
898ff18b answered it: a connected Release session recorded ZERO disagreements
across 11 completed reveals and six destination landblocks (0x0904, 0x1134,
0x3032, 0x8763, 0xA9B4, 0xF682) spanning roughly 45 km. A gap of even one
frame would have printed an offset in the tens of thousands of metres.

Cause of the safety: BeginOriginRecenter detaches EVERY resident landblock
before the new origin is adopted, so the two rebases are serialized and no
conversion can observe the gap. Ownership is therefore left exactly as it is.

What lands instead is the invariant that keeps it true.
LiveWorldOriginState.EnsureAgreesWithRuntimeFrame is checked at the
landblock->world conversion and is terminal on disagreement, converting a
silent 192 m-multiple misplacement into a loud failure with the offset in
metres and the landblock being projected. Six focused tests pin it, including
the cross-world portal case (0x09 -> 0xF6 = 45,504 m). Disagreement can no
longer reach the probe, so ACDREAM_PROBE_WORLD_FRAME now emits a verbose
per-conversion agreement trace - useful when a placement looks displaced for
some reason OTHER than a frame disagreement.

Complete Release solution: 10,844 passed / 4 skipped / 0 failed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 14:33:46 +02:00
..
C3cR1F3DriftModelSourcePinTests.cs feat(runtime): C3c - production placement cutover: both hosts on the residence conductors (routes 1+8) 2026-08-02 18:10:33 +02:00
CompositeLiveEntityResourceLifecycleTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
DeferredLiveEntityRuntimeComponentLifecycleTests.cs feat(runtime): C3c - production placement cutover: both hosts on the residence conductors (routes 1+8) 2026-08-02 18:10:33 +02:00
DormantLiveEntityStoreTests.cs fix(streaming): preserve portal destination ownership 2026-07-25 08:35:12 +02:00
ExternalContainerLifecycleControllerTests.cs fix(items): finish corpse pickup and combat switching 2026-07-17 18:35:29 +02:00
GameWindowLiveEntityCompositionTests.cs fix(interaction): restore retail loot placement and world-drop projection 2026-07-27 00:03:15 +02:00
LiveEntityHydrationControllerTests.cs test(runtime): restore the world-frame precondition across first-entry fixtures 2026-08-03 13:32:28 +02:00
LiveEntityLifecycleStressTests.cs feat(runtime): C3c - production placement cutover: both hosts on the residence conductors (routes 1+8) 2026-08-02 18:10:33 +02:00
LiveEntityLivenessControllerTests.cs refactor(app): key live projections by runtime identity 2026-07-25 21:50:58 +02:00
LiveEntityPhysicsHostOwnershipTests.cs feat(runtime): C3c - production placement cutover: both hosts on the residence conductors (routes 1+8) 2026-08-02 18:10:33 +02:00
LiveEntityPresentationControllerTests.cs feat(runtime): C3c - production placement cutover: both hosts on the residence conductors (routes 1+8) 2026-08-02 18:10:33 +02:00
LiveEntityProjectionWithdrawalControllerTests.cs feat(runtime): C3c - production placement cutover: both hosts on the residence conductors (routes 1+8) 2026-08-02 18:10:33 +02:00
LiveEntityRuntimeTeardownControllerTests.cs refactor(app): key live projections by runtime identity 2026-07-25 21:50:58 +02:00
LiveEntityRuntimeTests.cs fix(vfx): resolve an entity's cell through one owner so effects follow it 2026-08-03 14:02:03 +02:00
LiveEntitySameGenerationUpdateRouterTests.cs refactor(runtime): move accepted entity wire state 2026-07-25 19:52:29 +02:00
LiveEntityTeardownPlanTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
LiveEntityTestFixture.cs refactor(app): key live projections by runtime identity 2026-07-25 21:50:58 +02:00
LiveEntityWorldOriginCoordinatorTests.cs refactor(runtime): own world reveal generation 2026-07-26 17:09:54 +02:00
LiveObjectFrameControllerTests.cs refactor(settings): own two-phase runtime settings 2026-07-22 13:30:22 +02:00
LiveWorldOriginStateTests.cs fix(physics): guard the world-frame agreement proven unreachable by measurement 2026-08-03 14:33:46 +02:00
PendingSplitToWorldProjectionTests.cs fix(interaction): restore retail loot placement and world-drop projection 2026-07-27 00:03:15 +02:00
RecallTeleportAnimationTests.cs refactor(runtime): own teleport destination correlation 2026-07-26 17:52:34 +02:00
RetailInboundEventDispatcherTests.cs test(app): put every strict-zero site on the probe (#250) 2026-07-29 03:49:13 +02:00
RuntimeEntityOwnershipTests.cs feat(render): Campaign V slice V11 commit 1 - delete ImGui, Studio, and the DevTools frontend 2026-07-28 23:56:04 +02:00
RuntimeFirstEntryHostIntegrationTests.cs test(runtime): restore the world-frame precondition across first-entry fixtures 2026-08-03 13:32:28 +02:00
RuntimePlacementPresentationSinkTests.cs feat(runtime): C3c - production placement cutover: both hosts on the residence conductors (routes 1+8) 2026-08-02 18:10:33 +02:00
UpdateFrameOrchestratorTests.cs feat(runtime): C3c - production placement cutover: both hosts on the residence conductors (routes 1+8) 2026-08-02 18:10:33 +02:00
WorldEnvironmentControllerTests.cs refactor(runtime): own world environment state 2026-07-26 16:45:04 +02:00