diff --git a/docs/ISSUES.md b/docs/ISSUES.md index e22f39cb..de85f291 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -3946,13 +3946,36 @@ AFTER the punch. Compare against the T1 (`579c8b0`) punch pass wiring. Like when we are just outside for a moment." Transition frames where the viewer is still indoors and the player is just outside the door. -**Suspects (in order):** (1) the LOCAL player entity's partition in -`InteriorEntityPartition` — T1's rule routes `ServerGuid != 0` to -Dynamics (never dropped); the local player may carry ServerGuid==0 and -fall into a per-cell static class that drops when its cell isn't in the -flood; (2) the landscape-through-aperture pass's plane clips slicing the -player if it draws in that pass ("clipped" wording). Check the partition -first. +**Narrowed (2026-06-11 post-T5 session — two suspects EXONERATED by +read):** (1) the partition is correct — the local player entity carries +its ServerGuid and routes to Dynamics; (2) the entity's `ParentCellId` is +NOT stale — it syncs per tick from the controller +(`pe.ParentCellId = result.CellId`, GameWindow ~6855). + +**Live candidates (the doorway-crossing decision stack):** +- **Eye/cell incoherence under camera damping (#115 family / BR-8a):** + the render root comes from the sweep (`RetailChaseCamera.ViewerCellId`) + while the projection eye (`camPos`) is the DAMPED position — during a + crossing they can disagree by the damping lag. Retail damps FROM the + published collided viewer (verified divergence, plan BR-8a), so its + (eye, cell) pair stays coherent. +- **Exit-portal side test at the threshold:** with the eye ε-outside the + door plane while the root is still the interior cell, + `CameraOnInteriorSide` culls the exit portal → OutsideView EMPTY → + `SphereVisibleOutside` culls ALL outdoor dynamics (the player) for + those frames. Retail's AdjustPosition demotes the viewer cell to + outdoor the moment the point exits (seen_outside → adjust_to_outside), + making the inconsistent state structurally brief. +- The doorway-aperture cone test for an outdoor-classified player while + the viewer is legitimately still inside (cone tightness). + +**Next step (apparatus, not guessing):** a deterministic exit-walk +harness over the corner-building cells — drive the production decision +stack headlessly per step of an eye+player path crossing the doorway +(viewer-cell resolution → `PortalVisibilityBuilder.Build` → +`ViewconeCuller` → the `DrawDynamicsLast` visibility predicate) and +assert the player sphere stays visible on every step. All CPU; the +failing step pins which candidate fires. ---