docs #180/#181: bank the session state - both camera fixes verified, the flicker split to #181 (portal-flood vis flap on micron eye noise)

ISSUES: #180 marked both-fixes-shipped+log-verified; #181 filed with the full live evidence (vis 31<->32 every ~100-200 frames across a 517k-frame parked session, the dashed scissor-rect captures, the isolation-confound note - every pre-#180 isolation ran while the camera strobe was live); #176 status updated (site-A static stacking hole closed 87cddce2, residual = #181). Digests updated in claude-memory.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-07-06 20:54:01 +02:00
parent 87cddce24a
commit d9a4ca2355

View file

@ -46,15 +46,58 @@ Copy this block when adding a new issue:
---
## #181 — Portal-flood output flaps on micron eye noise → cell (+ its scoped lights + scissor AABB) strobes in/out (~10 Hz)
**Status:** OPEN — mechanism PINNED from live evidence; the knife-edge test not yet identified
**Severity:** HIGH (THE user-visible #176 flicker that survived the #180 camera fixes: washed
regions with hard screen-space rectangle boundaries pulsing at a parked camera)
**Filed:** 2026-07-06 (split from #176 after the #180 fixes exonerated the camera)
**Component:** render — portal flood / clip-slot scissor degrade / light-visibility scoping
**Evidence (launch-176-leakfix.log, root 0x8A020142, camera parked all session):**
`[flap]` vis count flips 31↔32 every ~100200 frames (≈10×/s at ~1500 fps) for the
ENTIRE 517k-frame session; the root's own portal products are stable except 2-dp
print-rounding wobble (eye 49.15↔49.14, p3 D 0.81↔0.82) — the swept eye carries
micron-scale float-roundtrip noise (`[flap-sweep]` in/out differ ~7 µm; retail's parked
viewer is bit-exact via the UpdateCamera dead-band `return viewer`). One cell deeper in
the flood rides a knife-edge include/exclude test on that noise. Visible impact is
double: the cell's lights are visibility-scoped (GameWindow light registration
`cellId:` scoping), so a washed region's LIGHTING strobes, and the flapping cell's
portal extends the union-AABB clip/scissor rect (AD-17 degrade path) — captured as a
dashed axis-aligned rectangle boundary resizing frame-to-frame (scratchpad
flip-1/flip-4 crops, t0b stills). Frame-pair pixel diffs: 2.75% of the game area
changes per 150 ms at a fully parked, fresh session.
**Confound note:** every pre-#180 isolation (LIGHT_DEBUG=3, CLIP_DEBUG=1, etc.) ran
WHILE the #180 camera strobe was live, so none of them cleanly cleared the render side
— and CLIP_DEBUG=1 forced gl_ClipDistance slots only; the AABB-scissor degrade sibling
may never have been disabled.
**Next step:** replay the flood headlessly (PortalVisibilityBuilder + LoadEnvCell
fixtures) at eye=(49.15,38.62,3.98) ± a micron/mm grid; identify the flapping cell
and the exact threshold (#129/#130 NDC floor-ceil class, or AP-19's PortalSideEpsilon);
fix the root — either the threshold's correctness or the eye-noise divergence
(retail-faithful candidates only, no hysteresis band-aids).
**Acceptance:** parked camera in the washed spot → vis count constant across 10k+
frames; frame-pair pixel diffs show no region-shaped changes; the user sees no flicker.
---
## #180 — Camera-collision sweep bistable at a compressed boom → per-frame eye strobe (the #176 "stripes")
**Status:** 🟡 FIX SHIPPED 2026-07-06 (stateful sought-position ported per
`CameraManager::UpdateCamera` 0x00456660 — the interpolation base is the
CURRENT swept viewer and the sweep targets the converging sought, never the
full-length boom; pseudocode
`docs/research/2026-07-06-camera-sought-position-pseudocode.md`; register
AD-37/AD-38 filed for the two pre-existing adaptations found in the reading).
Awaiting autonomous visual verify + the user gate (with the #176 re-gate).
**Status:** 🟡 BOTH FIXES SHIPPED 2026-07-06 + LOG-VERIFIED; user gate pends on #181
(the residual visible flicker turned out to be render-side — see #181). Fix 1
`48aaab81`: stateful sought-position per `CameraManager::UpdateCamera` 0x00456660
(pseudocode `docs/research/2026-07-06-camera-sought-position-pseudocode.md`; register
AD-37/AD-38). Fix 2 `f10fe4e9`: `BSPQuery.AdjustToPlane`/`AdjustSphereToPoly` rewritten
per retail 0x00539bf0/0x00538170 — the ACE-inherited port was structurally dead
(always-false), so every PathClipped camera stop reverted to a whole transition-step
boundary; the original strobe's pulledIn 0.27↔0.53 was 1-step-vs-2-step quantization
(pseudocode `docs/research/2026-07-06-adjust-to-plane-pseudocode.md`, replay pin
`Issue180CorridorSweepHysteresisReplayTests`). Post-fix logs: zero eye jumps >2 cm
across 76k turn-only sweeps pressed into walls (was 0.270.29 m every ~590 frames);
wall stops resolve to the constant surface-contact point.
**Severity:** HIGH (the visible flicker/stripe artifact the #176 gate keeps failing on; corridor camera constantly rides walls)
**Filed:** 2026-07-06
**Component:** camera / physics (NOT render — every render suspect eliminated by isolation)
@ -250,7 +293,14 @@ over one session as CreateObject re-sends re-registered it under fresh
entity ids — `[seam-ent]` L= showed `01D4:I100` four times) — fold into the
A7 arc or fix with #180's gate.**
**Status:** 🟡 lighting fix SHIPPED + verified; residual flicker = #180 (camera strobe)
**Status:** 🟡 lighting fix SHIPPED + verified; #180 (camera strobe) BOTH halves
FIXED + log-verified 2026-07-06 (`48aaab81` + `f10fe4e9`); the site-A static
light-stacking re-apply hole CLOSED (`87cddce2` — idempotent re-registration;
whether it fully accounts for the observed `[seam-ent]` ×2→×4 growth needs a
probe re-run, the live weenie path's guid-dedup reads sealed). **The residual
user-visible flicker survives all of these at a parked camera and is now
#181** — the portal-flood vis 31↔32 flap on micron eye noise driving
visibility-scoped lights + the AABB scissor rect. Re-gate #176 after #181.
**Severity:** MEDIUM (visible artifact along every corridor seam in the M1.5 dungeon)
**Filed:** 2026-07-06
**Component:** render — floor-portal polygons / portal surface state