From 2eca7f50334283dc7b83b79229ec9bfdaca8a27c Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 11 Jun 2026 19:27:14 +0200 Subject: [PATCH] docs: #119-residual root cause (render lift in the visibility graph) recorded in ISSUES --- docs/ISSUES.md | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 3f0340ac..80581ba5 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -4100,27 +4100,30 @@ statics actually render as remains UNVERIFIED — do not assume barrel.) 2. On top of the tower, the roof and edges FLAP into existence and back. -**PINNED 2026-06-11 late (`TowerAscentReplayTests`, gaze locked ON the -staircase — no gaze excuse):** in the roof-lip band (eye z ≈ 126.9–127.3, -between the main cell's ceiling at 126.8 and the roof aperture plane at -~127.2) the eye resolves OUTDOOR and the per-building exterior flood -admits NOTHING (flood=1 = the outdoor node alone): the eye sits above -every side aperture's useful view and ON/INSIDE the roof aperture's -plane, so `BuildFromExterior`'s seed side-test / in-plane reject refuses -every exit portal. The tower interior never floods → the staircase -(a 0x0107 static) culls while walkable; the roof-lip cell geometry flaps -as the live eye bobs across the band's edges. The pin is committed as a -skipped red test (`TowerAscent_StaircaseStaysConeVisible_EveryStep`, -skip reason carries the defect) — un-skip with the fix. - -**Fix needs the retail oracle (next):** which side diverges — -(a) the VIEWER-CELL resolution (retail's curr_cell may keep the eye -INTERIOR through this band: keep-curr above open-top cells / the cell -BSP classifying the parapet bowl as inside 0x010A, where our resolution -demotes to outdoor), or (b) the exterior seed admission (retail -ConstructView(CBldPortal) Sidedness on an in-plane eye). Grep -`ConstructView` CBldPortal + `SmartBox::update_viewer` above open-top -cells before touching either layer. +**ROOT CAUSE FOUND + FIXED 2026-06-11 (`f35cb8b`) — the +0.02 m render +lift leaked into the portal-visibility graph.** +`BuildInteriorEntitiesForStreaming` lifts the render-side cell transform +2 cm (shell z-fighting vs terrain — a DRAW concern) and passed that +LIFTED transform to `BuildLoadedCell`, so every visibility-graph plane +sat 2 cm high. The side test's in-plane window is ±10 mm: an eye +standing ON a floor containing a HORIZONTAL portal (the tower deck lip +0x010A→0x0107, landings, cellar mouths) sits 10–20 mm BELOW the lifted +plane → outside the window → the cell behind the portal side-culled out +of the flood. Captured live at the stair top (the user's climb + +[viewer-diff]): root=0x010A, eye z=126.803 vs the plane at 126.80, +flood=1, 0x0107 dropped WHILE LOOKED AT — "stairs disappear and you can +walk on them"; the roof/edge flap = the same marginal admissions swinging +with the gaze. Vertical doorways immune (the lift slides their planes +along themselves) — why this hit exactly stairs/decks/floors. Headless +replay reproduces ONLY with the lift; fix = BuildLoadedCell gets the +PHYSICS (unlifted) transform; shells keep their draw lift. Pins: +`CapturedTopOfStairs_MainCellStaysInFlood` (unlifted asserts admission; +lifted arm = the mechanism canary). Likely also feeds the #108 residual +(cellar mouth = a horizontal portal) — re-check at the gate. +The earlier synthetic roof-lip-band pin +(`TowerAscent_StaircaseStaysConeVisible_EveryStep`) stays SKIPPED — its +band came from the harness's AABB root model, not the production sweep; +re-validate against the real resolver before un-skipping. ---