docs: #113 closed (attribution + fix) + #112 residual resolved in ISSUES.md

#113 moved to Recently closed: the phantom staircase was the Holtburg
meeting hall (AAB3, not A9B3) interior stair cells drawn unclipped from
outside - the PView shell clip was routed but never GL-enabled (927fd8f).
Misplaced-cell hypothesis refuted with dat evidence. #112 residual
paragraph updated: retail straddle gate live-binary verified + ported
(414c3de); at-doorway demote is retail-faithful, deep gaps now keep-curr.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-10 16:56:27 +02:00
parent 414c3deaf4
commit 8259598970

View file

@ -3749,61 +3749,75 @@ adjacent-claim shape self-heals, dat-tested) then retail keep-curr. Poisoned
saves stay covered at the snap (#107/#111 AdjustPosition). P1 retail-golden
gates explicitly green (11/11).
**RESIDUAL (documented by
`Issue112MembershipTests.A9B3CottageGap_..._DocumentsResidual`):** at the
doorway-region gap itself, the NORMAL outdoor-candidate path still demotes
(the BFS reaches the exterior portal → outdoor cells enter the array). Open
oracle read: retail's `add_all_outside_cells` gate in
`CEnvCell::find_transit_cells` (pc:317499 region) — sphere-proximity to the
exterior portal polygon vs mere graph reachability. If proximity-gated, the
at-door demote disappears and the DocumentsResidual assert flips to keep-curr.
Re-promotion at doorway cells works (retail-identical), so the demote now
self-heals walking in — no stranding. Live gate pending: user re-walks the
A9B3 cottage; expect interior to stay rendered (brief doorway flicker at most).
The missing OBJECT collision in that cottage = #99 data point (A6.P4 debt).
Scan data: standing-now → [0x103]; flip-a → []; flip-b → [0x100].
**RESIDUAL RESOLVED 2026-06-10 (`414c3de`, live-binary oracle):** retail's
gate read straight from the running 2013 client (cdb attach,
`CEnvCell::find_transit_cells` @ 0052c820 — BN pseudo-C had invented
portal_side tests in this branch): outdoor cells are admitted IFF a path
sphere STRADDLES an exterior portal's polygon plane,
`|dist| < radius + F_EPSILON(0.0002)`. Ported as the straddle gate on the
membership PICK's outdoor branch; the collision cell SET keeps the A6.P5
topology widening until #99/A6.P4 (outdoor-registered doors must stay
findable from indoors). Consequences: (a) the at-doorway gap demote is
RETAIL-FAITHFUL (gap point 0.23 m from 0x104's door plane < 0.48 m foot
radius → retail straddles + demotes + self-heals inward) — test renamed
`...DemotesRetailFaithfully`, expectation unchanged; (b) deep-interior
containment gaps in ANY house now keep-curr like retail instead of demoting
(new pins: `A9B3Cottage_GapBeyondStraddleDistance_KeepsCurrCell` +
`FindTransitCellsSphere_ExitPortalStraddleGate_MatchesRetail`). Live gate
pending: user re-walks the A9B3 cottage; expect interior to stay rendered
(brief doorway flicker at most). The missing OBJECT collision in that
cottage = #99 data point (A6.P4 debt). Scan data: standing-now → [0x103];
flip-a → []; flip-b → [0x100].
---
## #113 — Phantom exterior staircase on an A9B3 building (not in retail); suspect misplaced interior cell
**Status:** OPEN
**Severity:** MEDIUM (visual fidelity; suspect shares a root with the same
building's containment gap #112 and collision gaps #99)
**Filed:** 2026-06-10 (late — user side-by-side vs retail)
**Component:** render / building cells (or dat interpretation)
**Symptom:** an A9B3 building (near the #112 hill cottage; NPCs Aun Kielerea +
The Sentry nearby, spot ~(183, 111, 116) world) shows a stone-and-wood
STAIRCASE attached to its exterior wall in acdream; the retail client shows a
plain wall with a window there (user screenshots, 2026-06-10). The stairs are
NOT pickable (clicks select only NPCs behind them) ⇒ not a stab/WorldEntity —
building-shell or interior-cell geometry.
**Hypothesis (would unify three symptoms at this building):** a misplaced
interior EnvCell — an indoor staircase cell whose world transform puts its
geometry outside the shell. That would simultaneously explain (a) the phantom
exterior stairs, (b) the interior containment gap (#112's dead zone = a cell
volume sitting in the wrong place), and (c) missing collision on objects in
the house.
**Next steps:** (1) ACViewer oracle — open the same landblock; stairs present
there ⇒ shared dat-interpretation, absent ⇒ our transform/draw
(feedback_acviewer_as_oracle). (2) Offline: dump A9B3's LandBlockInfo
buildings + per-cell Position.Origin/rotation; look for a cell whose
transformed AABB escapes the building footprint. (3) Identify the building id
(the landblock's building list near the spot).
**Meta (user, 2026-06-10):** "we should not have to verify all houses like
this" — agreed; the open systemic debts are A6.P4 per-cell shadows (#99,
fixes collision everywhere), the #112 residual oracle read, and this transform
check. If (2) finds a systematic per-building transform error, ONE fix covers
every affected house.
---
# Recently closed
## #113 — Phantom exterior staircase (Holtburg meeting hall): PView shell clip was never GL-enabled — [FIXED 2026-06-10 · 927fd8f, user visual gate pending]
**Status:** FIXED (self-gated by screenshot comparison at the original spot —
phantom gone; formal user visual gate pending)
**Closed:** 2026-06-10
**Component:** render (PView shell pass GL state)
**Attribution (dat-evidenced — the filed "A9B3 misplaced interior cell"
hypothesis is REFUTED):** the building is the Holtburg MEETING HALL — AAB3
building[0], model `0x010014C3` at AAB3-local (36,84,116), not an A9B3
building (A9B3 has exactly ONE building, the #112 hill cottage; the user
stood at the A9B3/AAB3 boundary — `issue112-gate1.log` cell-transit trail —
and clicked through the hall to the NPC behind it). The hall's interior
stair cells (0x100..0x106, a ring climbing z 116→124.5 to the deck hatch)
have geometry COINCIDENT with the shell's west wall (both at local x=29.0).
**Root cause:** retail clips drawn CELL geometry to the accumulated portal
view (`Render::set_view` :343750 + `planeMask=0xffffffff` per cell polygon
:427922 → `polyClipFinish`). Our equivalent — `UseShellClipRouting`
`mesh_modern.vert` `gl_ClipDistance` — was routed with CORRECT tight clip
regions (`Issue113MeetingHallFloodTests` proves 46 planes, door-aperture
NDC boxes) but was INERT: `gl_ClipDistance` writes are ignored unless
`GL_CLIP_DISTANCEi` is enabled, and no caller ever enabled it for the shell
pass (born inert in `1405dd8`). Flooded interior cells drew WHOLE → the
interior staircase painted across the exterior wall; unpickable because
it's cell geometry. 5th instance of
`feedback_render_self_contained_gl_state`.
**Fix (`927fd8f`):** enable `GL_CLIP_DISTANCE0..7` around exactly the shell
pass in `RetailPViewRenderer.DrawEnvCellShells` (no early-outs between set
and restore). Entities/characters stay unclipped (retail's mesh path is
viewcone-check, not poly-clip — comment scoped). Known remaining
approximation: slot-0 fallback slices (>8-plane apertures) still draw
pass-all — the assembler's scissor fallback remains unimplemented (rare;
pinned 0 such slices at the hall).
**Refuted along the way (evidence in `Issue113PhantomStairsDumpTests`):**
the unifying misplaced-cell hypothesis — all 17 A9B3 cottage cells share
one identical dat Position (nothing to misplace); the #112 gap is a real
20 cm doorway micro-gap, not a displaced volume; missing object collision
remains #99/A6.P4. A9B3's dat has NO stair geometry anywhere near the spot
(shell = balcony slabs z119 + turret roof; cells flat 116/118.8).
## #111 — ACE-mutated indoor restores: transparent interior / wrong placement at login — [DONE 2026-06-10 · 5f1eb7c + 5706e0e + 2735695]
**Status:** DONE (user-gated: clean indoor logins at two different buildings —