test(p1): production-path membership conformance — divergence CONFIRMED (0/11), not a probe artifact

Replays the golden indoor 0170<->0171 segments through the real
PhysicsEngine.ResolveWithTransition (engine builds the global sphere + sweeps;
cells loaded from dats with real BSP). Result: 0/11 match retail. Every segment
restPos==target (the sweep completes the move) but CellId stays on the SOURCE
cell — acdream moves the body across the doorway yet NEVER advances curr_cell.
So the 'probe artifact' hypothesis is FALSIFIED: production membership genuinely
lags retail.

Refined mechanism: both retail and acdream PICK with center-only point_in_cell
(architect's radius-aware-pick hypothesis falsified, confirmed by reading
CEnvCell::point_in_cell -> BSPTREE::point_inside_cell_bsp). The gap is retail's
curr_cell ADVANCES across the portal mid-sweep (swept crossing / leading sphere
point) while acdream's swept advance keeps the source cell. P1 ports that advance.

ProductionPath_IndoorCrossings_DivergeFromRetail_PendingP1 is the RED gate the P1
fix must turn GREEN. Conformance 60 pass / 1 skip / 0 fail.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-03 15:56:52 +02:00
parent 46a86d282e
commit 0442eadcec
2 changed files with 164 additions and 0 deletions

View file

@ -167,6 +167,29 @@ evidence. **Do NOT design or code a P1 membership "fix" before the production-pa
RED/GREEN is read.** The P0 `..._DivergesFromRetail_PendingP1` test is a UNIT-level pin only, NOT
evidence of a production divergence.
## ✅ RESOLVED — the production path DIVERGES (the "probe artifact" hypothesis is FALSIFIED)
Built `ThresholdPortalCrossingReplayTests.ProductionPath_IndoorCrossings_DivergeFromRetail_PendingP1`
(replays the golden indoor `0170↔0171` segments through the REAL `ResolveWithTransition` — engine
builds the global sphere + sweeps; cells loaded from dats with real BSP). Result: **0/11 match
retail.** Every segment: `restPos == target` (the sweep COMPLETES the move cleanly) but `CellId`
stays on the SOURCE cell — acdream moves the body across the doorway yet **never advances
`curr_cell`**. So production membership genuinely lags; the P0 finding is REAL, not a probe artifact.
**Refined mechanism (supersedes the "portal-crossing vs point-in-cell criterion" framing).** Both
retail and acdream PICK with center-only `point_in_cell`. The divergence is that retail's `curr_cell`
ADVANCES to the neighbour during the sweep (the swept sphere crossing the doorway polygon, and/or a
sphere point that leads the foot into the room), so by the time the foot rests at the captured
position the membership has already advanced. acdream's swept advance does NOT promote the neighbour —
at the end-position its tested sphere center is still inside the source cell's BSP, so the pick keeps
the source cell. **P1's job: port how retail advances `curr_cell` across the portal mid-sweep.** The
open decomp questions for P1: (1) how `global_sphere[0]` local origin relates to `m_position` (does
retail's sphere point lead the foot?); (2) whether `curr_cell` advances via `find_transit_cells`'
swept crossing in `transitional_insert`/`validate_transition` BEFORE the `find_cell_list` pick, vs the
pick alone. Anchors: `CTransition::transitional_insert @ 0x50aa70 pc:272547`,
`CTransition::validate_transition`, `CPhysicsObj::SetPositionInternal @ 0x515330 pc:283399`. The RED
production-path test is the gate the P1 fix must turn GREEN.
## P0 status / P1-entry checklist — COMPLETE
**Apparatus: COMPLETE + GREEN.** (Conformance suite 59 pass / 1 skip / 0 fail.)