capture run decoded: #126 spawn-through-roof + #127 bistable flood admissions + #128 session-sticky invisible staircase filed; [viewer] probe gains fwd=

The users tower capture (tower-viewer-capture.log, 551 [viewer] lines)
decodes into three distinct issues:

- #126 (HIGH, #107/#111 family): an OUTDOOR spawn claim on the tower
  roof (z=127.2) is grounded to TERRAIN z=112 - the player is warped
  through the roof into the tower interior, outdoor-classified ->
  the transparent-interior spawn. The snap outdoor branch must ground
  to the nearest WALKABLE surface (roofs/GfxObj floors), not terrain.
- #127 (HIGH, the flap mechanism): per-building flood admissions are
  BISTABLE per frame under the outdoor root - flood size oscillates
  +-1-3 cells at millimetre eye deltas (45<->52 standing on the roof,
  including a byte-static eye flip). Every oscillation = building
  interiors dropping in/out -> the roof/edge flap; running past a
  building = #123. Interior side shows the same family (flood 1<->3,
  outPolys 0<->1 during the climb).
- #128: the staircase was invisible the WHOLE climb under a HEALTHY
  interior root (0xAAB30107 FullScreen views - the cone cannot cull a
  root-cell static), while the SAME build rendered it perfectly in a
  different session (diag spawn + screenshot, meshMissing=0).
  Session-sticky nondeterminism; the barrel tracks this bug (a
  partial subset of staircase parts), NOT dat content (user axiom:
  no barrel in retail). Needs a diag-instrumented repro of the users
  session shape.

The [viewer] probe now logs the camera forward (fwd=) so the next
capture can be replayed headlessly - Build clip results depend on the
view-projection, not just the eye.

Suites: App 238+1skip, Core 1422+2skip, UI 420, Net 294.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-11 18:53:17 +02:00
parent a974504e6e
commit cd12d3dbbc
2 changed files with 79 additions and 1 deletions

View file

@ -4334,6 +4334,80 @@ meshMissing counters.
--- ---
## #126 — Outdoor spawn claim on a building roof is grounded THROUGH the roof to terrain (transparent-interior spawn)
**Status:** OPEN — HIGH (every login/logout on any walkable roof)
**Filed:** 2026-06-11 (tower capture run, `tower-viewer-capture.log` line 1)
**Component:** physics — login snap (the #107/#111 family)
**Evidence:** the user logged out standing ON TOP of the AAB3 tower
(z=127.2). The next login: `[snap] claim=0xAAB30023 pos=(297.160,
-129.182,127.200) … terrainZ=112.000 indoor=False -> targetZ=112.000
targetCell=0xAAB30023`. The snap's OUTDOOR branch always grounds to
TERRAIN Z — it warped the player from the roof down INTO the tower's
interior volume at ground level, still outdoor-classified → the
transparent-interior spawn the user reported ("spawned in the tower and
it was transparent"), self-healing only after walking out and back in.
**Fix shape:** an outdoor claim must ground to the nearest WALKABLE
surface at/below the claim Z (building roofs and GfxObj floors via the
physics walkable query — the #111 `WalkableFloorZNearest` machinery),
not raw terrain. Note the snap line even shows a candidate it rejected
(`bestCell=0xAAB30101 bestZ=124.3`).
---
## #127 — Per-building flood admissions are BISTABLE per frame under the outdoor root (the building-flap mechanism)
**Status:** OPEN — HIGH (the live mechanism behind the tower roof/edge
flap; almost certainly #123 and related flap reports)
**Filed:** 2026-06-11 (tower capture run)
**Component:** render — BuildFromExterior seed admission / per-building
flood stability
**Evidence (`tower-viewer-capture.log`, 551 [viewer] lines in one short
run):** under the outdoor root near the tower, the merged per-building
flood size oscillates ±13 cells nearly EVERY frame at millimetre eye
deltas — standing on the tower roof: flood 45↔46↔47↔48 per line with
the eye moving mm at a time (and one stretch flipping at a byte-static
eye). Every oscillation = some building's interior cells (including
this tower's roof-lip cells) dropping in/out of the visible set → the
roof/edges flap; a building whose cells flap while running past =
#123. The INTERIOR side shows the same family: inside the tower the
flood flickers 1↔23 with outPolys 0↔1 during the climb.
**Next:** the [viewer] probe now logs the camera forward (fwd=) — one
more capture run gives exact (eye, fwd) pairs to replay in a
deterministic harness; then pin WHICH admission gate is bistable
(seed side test / in-plane reject / clip-empty / the frustum pre-gate
on PortalBounds) and stabilize it retail-shaped.
---
## #128 — Tower staircase invisible with a HEALTHY interior root (session-sticky; renders fine in other sessions)
**Status:** OPEN — investigation; needs a diag-instrumented repro
**Filed:** 2026-06-11 (tower capture run + user report)
**Component:** render — entity draw path (suspect: session-order state)
**Evidence:** during the user's climb the root was the tower's main
cell 0xAAB30107 (FullScreen views — the cone CANNOT cull a 0107
static), yet the 43-part staircase was invisible the whole way up; in a
different session same build (the in-tower diag spawn,
`tower-wbdiag4.log` + screenshot) the same staircase rendered perfectly
with meshMissing=0. Session-sticky, nondeterministic across sessions:
suspect state accumulated by session order — Tier-1 classification
cache shapes (#53 family — though the known veto paths read correct),
LRU eviction + the no-re-prepare-on-re-registration gap, or the #125
sticky-drop cousin. The user's "barrel" sighting tracks this bug (a
partial subset of staircase parts rendering ≈ a barrel-shaped pile) —
NOT dat content (the barrel is NOT in retail — user axiom). **Next:**
reproduce under ACDREAM_WB_DIAG=1 with the user's session shape (spawn
mis-grounded inside via #126, walk out/in, climb) and read
meshMissing + [indoor-lookup]; if meshMissing>0 persists at standstill
the parts are unloaded (eviction/registration); if 0, instrument the
staircase entity's per-frame draw decision.
---
# Recently closed # Recently closed
## #113 — Phantom staircase: REOPENED 2026-06-11, folded into the HOLISTIC BUILDING-RENDER PORT ## #113 — Phantom staircase: REOPENED 2026-06-11, folded into the HOLISTIC BUILDING-RENDER PORT

View file

@ -9692,8 +9692,12 @@ public sealed class GameWindow : IDisposable
if (sig != _lastViewerProbeSig) if (sig != _lastViewerProbeSig)
{ {
_lastViewerProbeSig = sig; _lastViewerProbeSig = sig;
// fwd = camera forward (3rd view column negated) — required to
// REPLAY a captured frame headlessly: Build's clip results
// depend on the view-projection, not just the eye.
var v = _cameraController?.Active.View ?? System.Numerics.Matrix4x4.Identity;
Console.WriteLine(System.FormattableString.Invariant( Console.WriteLine(System.FormattableString.Invariant(
$"[viewer] {sig} eye=({camPos.X:F3},{camPos.Y:F3},{camPos.Z:F3}) viewerCell=0x{viewerCellId:X8}")); $"[viewer] {sig} eye=({camPos.X:F3},{camPos.Y:F3},{camPos.Z:F3}) fwd=({-v.M13:F4},{-v.M23:F4},{-v.M33:F4}) viewerCell=0x{viewerCellId:X8}"));
} }
} }
if (AcDream.Core.Rendering.RenderingDiagnostics.ProbeVisibilityEnabled) if (AcDream.Core.Rendering.RenderingDiagnostics.ProbeVisibilityEnabled)