acdream/tests/AcDream.Core.Tests/Conformance
Erik 1090189d39 fix(phys): #107 indoor-login spawn wedge — validate the server (cell,pos) pair at the player snap (retail AdjustPosition) + unfreeze same-landblock teleport arrivals + self-consistent wire pairs
Root cause (capture resolve-107-login1.jsonl + dat conformance scan): ACE
restored the player with a POISONED (cell, position) pair — cell 0xA9B40162
(one building) with a position inside 0xA9B40171 (a different building 55 m
away). Our entry snap trusted the claim verbatim: the player stood
fake-grounded for minutes (isOnGround passthrough, no contact plane, no
walkable polygon — zero-move resolves short-circuit), the FIRST movement input
ran a real transition, the pick demoted the indoor claim to outdoor
mid-building, and the player fell 2.4 m through the cottage floor onto the
terrain underneath — wedged inside the building shell. The second wedge shape
(flood-fix-gate2.log) was the PortalSpace freeze: the teleport-arrival
detection gated on `differentLandblock || farAway>100m`, an invented
heuristic — ACE's same-landblock short-hop corrections matched neither, so
PortalSpace never exited and movement input stayed frozen all session.

Four legs, all retail-anchored:

1. PhysicsEngine.Resolve (the player snap path: login entry + teleport
   arrival) now runs AdjustPosition first — retail SetPositionInternal step 1
   (acclient :283892, AdjustPosition :280009): validate/correct the claimed
   cell from the foot-sphere center BEFORE any physics. Corrections log one
   [spawn-adjust] line.
2. AdjustPosition's previously-deferred indoor seen_outside →
   adjust_to_outside sub-fallback (:280037-280046) is completed; CellPhysics
   gains the SeenOutside flag (dat EnvCellFlags.SeenOutside) cached in
   CacheCellStruct. The camera path does not reach this sub-branch in the
   gated scenarios (CameraCornerSealReplayTests green).
3. PortalSpace arrival = ANY player position update (holtburger PlayerTeleport
   handler conformant; recenter still only on landblock change). Verified
   live: ACE sent a same-lb dist=69.8 correction that the old gate would have
   frozen on — it now completes.
4. Outbound wire (cell, position) pairs are now SELF-CONSISTENT: derive the
   landblock frame from the resolver's full cell id instead of welding a
   position-derived landblock onto its low word — the old composition could
   write exactly the poisoned pair shape into ACE's character save. Plus the
   #106-gate-2 hold extension: an indoor spawn claim waits for the claimed
   cell's hydration (IsSpawnCellReady) so the validation can act — the async
   equivalent of retail's synchronous cell load.

Live verification (wedge-107-verify1.log): entry clean; ACE's same-lb teleport
correction completed (old code: permanent freeze); the teleport destination
itself carried ANOTHER poisoned claim (0xA9B40150) which [spawn-adjust]
corrected to 0xA9B40019; player fully controllable, walking across landcells.
3 new dat-backed conformance tests pin the poisoned-pair facts
(Issue107SpawnDiagnosticTests). Baseline: 1380+4 pre-existing #99-era
failures+1 skip / 223 / 420 / 294.

Pending user gate: park indoors, log out gracefully, relaunch — expect a clean
indoor spawn standing on the interior floor.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 12:52:47 +02:00
..
Fixtures fix(p1): membership already matches retail — the 0/11 was a cdb capture artifact 2026-06-03 18:54:27 +02:00
ConformanceDats.cs test(p0): threshold-trace golden wiring + PVS scaffold + P1-entry checklist 2026-06-03 14:29:30 +02:00
CottageDoorwayCharacterizationTests.cs test(p0): dat-backed conformance loader + characterized cottage-doorway topology 2026-06-03 14:20:17 +02:00
DatConcurrencyStressTests.cs test(conformance): dat-reader concurrency hammer — concurrent READS exonerated 2026-06-09 21:28:32 +02:00
FindCellListConformanceTests.cs fix(p1): membership already matches retail — the 0/11 was a cdb capture artifact 2026-06-03 18:54:27 +02:00
Issue107SpawnDiagnosticTests.cs fix(phys): #107 indoor-login spawn wedge — validate the server (cell,pos) pair at the player snap (retail AdjustPosition) + unfreeze same-landblock teleport arrivals + self-consistent wire pairs 2026-06-10 12:52:47 +02:00
PvsConformanceTests.cs test(p0): threshold-trace golden wiring + PVS scaffold + P1-entry checklist 2026-06-03 14:29:30 +02:00
RetailTrace.cs test(p0): retail find_cell_list trace parser + cdb value-capture tooling 2026-06-03 14:26:24 +02:00
RetailTraceTests.cs test(p0): retail find_cell_list trace parser + cdb value-capture tooling 2026-06-03 14:26:24 +02:00
ThresholdDivergenceDiagnosticTests.cs test(p0): retail-trace golden captured — membership criterion divergence pinned (P0 GATE MET) 2026-06-03 15:04:51 +02:00
ThresholdPortalCrossingReplayTests.cs fix(p1): membership already matches retail — the 0/11 was a cdb capture artifact 2026-06-03 18:54:27 +02:00