docs(render): FLAP settled by live-retail measurement — full retail port DECIDED (Option A) + exhaustive handoff

Attached cdb to the live 2013 retail client at the Holtburg doorway + read the decomp.
The indoor flap is a STRUCTURAL divergence, settled by measurement (not inference):

- Retail has ONE render path: DrawInside(viewer_cell) every frame. NO inside/outside
  branch (RenderNormalMode's outside branch is dead code; is_player_outside only gates
  sky/lighting). "Entering a building" is not a render event — only the camera sweep
  resolving a different viewer_cell. Same path before/after threshold -> no seam.
- Retail's eye JITTERS ~36um at rest yet membership is stable -> robustness is
  STRUCTURAL: many small per-building floods (~7/frame, ~2 cells each, via terrain BSP
  -> DrawPortal -> ConstructView(CBldPortal)), not one giant knife-edge flood.
- Our 3 divergences: (D1) invented inside/outside branch (GameWindow.cs:7498,
  clipRoot = viewerRoot ?? _outdoorNode :7396); (D2) synthetic _outdoorNode; (D3) one
  unified flood.

DECISION (user-approved): Option A — rip out branch + outdoor node, root always at the
real viewer_cell, one DrawInside, per-building rendering. Phased, conformance-tested,
visual-gated.

REFUTED by measurement (do not retry): bounded-propagation/churn (maxPop=1, 0/63k
reciprocals empty); byte-stable eye (retail's jitters ~36um — rest-snap cd974b2 failed +
regressed, reverted 9b1857a).

Lands the canonical exhaustive handoff for a FRESH session
(docs/research/2026-06-08-full-retail-render-port-OPTION-A-handoff.md), the CLAUDE.md
READ-THIS-FIRST banner, and reusable cdb apparatus. No project code changed; working tree
at the known-good baseline.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-08 16:19:34 +02:00
parent 9b1857ac52
commit fe87e9794a
6 changed files with 629 additions and 0 deletions

View file

@ -763,6 +763,28 @@ H1 (PVS grounding) or H2 (`PortalSide` side-test) — both evidence-disproven.
**Currently working toward: M1.5 — Indoor world feels right** (resumed
from 2026-05-20 baseline after Phase O ship).
**2026-06-08 (evening) — FLAP ROOT CAUSE SETTLED BY LIVE-RETAIL MEASUREMENT; full retail render
port DECIDED (Option A). READ THIS FIRST — it supersedes EVERY flap banner below, including the
bounded-propagation/churn direction (REFUTED by measurement: `maxPop=1`, 0 churn).** We attached cdb
to the **live 2013 retail client** at the Holtburg doorway + read the decomp. Findings (measured, not
inferred): **retail has ONE render path — `DrawInside(viewer_cell)` every frame, NO inside/outside
branch** (`RenderNormalMode`'s outside branch is dead code; `is_player_outside` only gates
sky/lighting). "Entering a building" is NOT a render event — only the camera sweep resolving a
different `viewer_cell` (outdoor `CLandCell` → indoor `CEnvCell`); same path before/after the
threshold → no seam → no flap. **Retail's eye JITTERS ~36 µm at rest** (so a byte-stable eye is the
WRONG target — my render-position rest-snap fix `cd974b2` failed + regressed, reverted `9b1857a`);
retail's membership is stable anyway because it does **many small per-building floods** (~7/frame,
~2 cells each, via the terrain BSP → `DrawPortal``ConstructView(CBldPortal)`), not one giant
unified flood. **Our 3 divergences:** (D1) we invented an inside/outside branch
(`GameWindow.cs:7498`, `clipRoot = viewerRoot ?? _outdoorNode` :7396); (D2) a synthetic `_outdoorNode`;
(D3) one unified flood. **Decision (user-approved): Option A — rip out the branch + outdoor node, root
always at the real `viewer_cell`, one `DrawInside`, per-building rendering.** DO NOT retry: byte-stable
eye, bounded-propagation/churn, physics rest-jitter, viewer-cell dead-zone, two-pipe split (all
evidence-disproven). **CANONICAL PICKUP (exhaustive — read top-to-bottom before any code):**
[`docs/research/2026-06-08-full-retail-render-port-OPTION-A-handoff.md`](docs/research/2026-06-08-full-retail-render-port-OPTION-A-handoff.md).
Close its §8 open traces (viewer_sought_position write site; ClipPortals/AddViewToPortals; how
`DrawInside` handles an outdoor `CLandCell` root) BEFORE writing the implementation plan.
**2026-06-05 (PM) — Indoor FLICKER + bluish VOID ROOT CAUSE CONFIRMED (decomp + live cdb); 3-part retail-faithful fix PLANNED (READ THIS FIRST).**
The "core inside render / cellar floor drops" framing below is **SUPERSEDED** by this session's diagnosis.
R1's per-cell `DrawInside` is already built and the cottage/cellar **seals** (user visual-verified). The