docs: #119-residual root cause (render lift in the visibility graph) recorded in ISSUES

This commit is contained in:
Erik 2026-06-11 19:27:14 +02:00
parent f35cb8b164
commit 2eca7f5033

View file

@ -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.9127.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 1020 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.
---