From 383af0ab5f204dbc355800191a018155e6385d1c Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 10 Jun 2026 13:54:37 +0200 Subject: [PATCH] docs: file #111 - ACE-mutated indoor restores start outdoor-classified (transparent until door-press); evidence + retail fix direction Co-Authored-By: Claude Fable 5 --- docs/ISSUES.md | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 16fee5f7..98ac7d8d 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -3709,6 +3709,50 @@ stable now; this is a draw-order/depth oscillation localized to the door surface --- +## #111 — Indoor login from an ACE-mutated restore starts outdoor-classified (transparent interior until door-press) + +**Status:** OPEN +**Severity:** MEDIUM (UX; no wedge — always controllable, heals on door-press) +**Filed:** 2026-06-10 (split out of #107's gate runs) +**Component:** physics / player snap (grounding) + membership lateral recovery + +**Symptom (user-gated ×3, wedge-107-gate3/4/5 logs):** logging in indoors, the +interior renders transparent (walls see-through, own char invisible) until the +player presses into the DOORWAY, which promotes membership into the proper room +and everything renders. Collision works throughout. "It feels like I'm logging +in a step up" — correct: ACE restores the player ~1 m above the floor (or 1.8 m +below, in the cellar volume). + +**Mechanism (fully evidenced):** ACE does not persist our reported (cell, pos) +pair — `GameActionAutonomousPosition.Handle` → `SetRequestedLocation` feeds +ACE's SERVER-SIDE physics player, and the logout save is ACE's physics state: +same XY as ours verbatim, but ACE's own Z + cell (observed: claim 0x172 z=95.0; +claim 0x147 z=92.226 cellar; claim 0x14F z=94.85 — stacked volumes under/over +the room 0x171 the user actually stood in at z=94.0). Our entry snap +(PhysicsEngine.Resolve + retail AdjustPosition, #107) validates the claim at +the RESTORED point — geometrically valid for the lofted/sunk point — but never +GROUNDS and re-validates: the first movement drops the player to the floor +where the stacked claim no longer contains them → the pick (correctly +portal-local, P1-validated) cannot laterally recover the 2-hop room → demote +to outdoor INSIDE the building → render (downstream of membership) draws the +outdoor flood → transparent interior until the doorway portal promotes. + +**Fix direction (retail-anchored):** retail `SetPositionInternal` does NOT +commit the raw restored position — after AdjustPosition it runs +`CheckPositionInternal → CTransition::find_valid_position` (:283426, :280070), +settling the sphere onto valid floor BEFORE committing, then stores the +SETTLED position. Port shape: at the snap, ground the position (floor under +the point within the claim's visible graph), re-run AdjustPosition at the +settled foot-center (for the gate-5 case: z 95.0→94.0, then 0x172's stab list +corrects to 0x171), commit the corrected pair. ⚠️ Open sub-question: the +gate-5 snap committed the lofted pair VERBATIM (z=95.0, cell unchanged) even +though Resolve's indoor floor-snap should have grounded to the closest floor — +instrument which early-out fired (suspects: `physics is null` landblock-lookup +miss at snap time; step-height reject; bestCell null). Logs: +wedge-107-gate3/4/5-indoor-login.log; scans in Issue107SpawnDiagnosticTests. + +--- + # Recently closed ## #107 — Indoor-login spawn wedge — [DONE 2026-06-10 · 1090189]