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:
parent
46a86d282e
commit
0442eadcec
2 changed files with 164 additions and 0 deletions
|
|
@ -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.)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue