acdream/docs/research/2026-06-09-105-capture-analysis-membership-landblock-pin.md
Erik 41fa3cbbc4 docs: #106 CLOSED — gate-4 verification + running-artifact attribution correction
Move #106 to Recently closed (user-verified collision + solid walls;
probe-verified 49 clean transitions incl. south A9B4->A9B3 at y=-0.19,
east A9B3->AAB3 at x=192.2, and room-by-room tracking through the
originally-failing A9B3 cottage). Records the three adjacent
pre-existing bugs the gate runs surfaced and fixed (legacy Resolve bare
ids, bogus-indoor-claim recovery, entry-hold streaming deadlock).

Correct the capture doc's attribution: the outdoor running distortion
was NOT fully the stale anchor — gate 4 shows residual background-color
screen artifacts persist with a correctly-following anchor. The
residual is the render §4 flap family (render digest), not membership.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 06:59:24 +02:00

95 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# #105 capture analysis — outdoor membership FREEZES at landblock boundaries (#106 PINNED)
**Date:** 2026-06-09 (evening). **Branch:** `claude/thirsty-goldberg-51bb9b`.
**Evidence:** `flap-105-capture.log` (53 MB UTF-16LE, `ACDREAM_PROBE_FLAP=1`, 136,736 lines,
30,698 `[flap-cam]` frames, 16,587 `[render-sig]`, 750 `[pv-trace]`), analyzed by 3 parallel
workers (throwaway scripts `q105_*.py` in the worktree root). User live-reproduced during
capture: entered a cottage and "EVERYTHING disappears, like I'm standing outside."
---
## 0. TL;DR
1. **#106 PINNED: the player's OUTDOOR cell membership never crosses a landblock boundary.**
`playerCell` froze at `0xA9B40031` (line 93363) and stayed frozen for **10,449 frames**:
~130 m of outdoor walking south across the `A9B4→A9B3` boundary (player y reaching 109.65
in A9B4-local coords = ~82 m inside A9B3) plus an 8,929-frame stand INSIDE an A9B3 cottage.
Zero indoor candidates ever flickered. Within-landblock outdoor transitions are clean
(96/96, e.g. `0x0031↔0x0029` flipping exactly at the x=144 cell line).
2. **The discriminator landed hard:** all **10 successful** outdoor→indoor entries this
session (7 distinct buildings: 0170, 0150, 0164, 016E, 016C, 010B, 0118) were buildings in
the SAME landblock as the player's outdoor cell — each a single clean flip with the viewer
cell trailing ~48 frames (camera boom still outside), no flicker. The ONE failing entry was
the only CROSS-landblock building entered.
3. **Rendering is downstream and healthy:** while membership said "outdoor," `[render-sig]`
shows the flood drawing the A9B3 interior cells (`0xA9B30100/0103/.../0110`) — the renderer
could see the rooms membership refused to enter. 89 distinct indoor cells flood under
outdoor roots across the session; ids==draw (no misses); **no never-flooding building
exists**; **no indoor flood ever collapsed empty** (all 17 indoor roots always vis≥2).
`feedback_render_downstream_of_membership` proven again.
4. **The outdoor "running distortion" is the same freeze:** the render root stays anchored at
the stale outdoor cell while the player runs away from it (10,415-frame root run at
`0x0031`), so the whole view is built from a wrong anchor. The capture REFUTES flood-level
causes outdoors: in all 26,960 outdoor-root frames, `outPolys=1` and `vis=1` with zero
exceptions.
> ⚠️ **Attribution PARTIALLY corrected post-fix (2026-06-09, #106 gate 4):** with #106
> fixed and the anchor following correctly (49 clean transitions incl. cross-block),
> the user still reports transient parts-of-screen-turn-background-color artifacts while
> running and at cottage/room enterexit. The stale anchor amplified the artifact but was
> not its only cause — the residual is the §4 flap family (render digest), not membership.
5. **The §4 indoor flap is unchanged and separate:** vis oscillation exists only under indoor
roots (520 changes, longest 9 consecutive flips, cells 0x013F/0x0143/0x0150/0x0171) plus
~11 one-to-three-frame OUT↔IN root blips at doorways (e.g. lines 31704..31713) — the known
doorway flap, untouched today.
## 1. What #106 explains vs what stays in #105
- **#106 explains:** "enter house → everything disappears, looks like outside" (cross-landblock
buildings), most of the day's per-session "some houses broken" reports (which houses break
depends on where you've walked = which boundaries you crossed), and the outdoor running
distortion (stale render anchor).
- **Still #105 (residual, twice-observed earlier):** a single wall section missing
(sky/clear color) while membership/viewer were demonstrably INDOOR-correct
(`viewerCell=0171`, props drawn, collision present). All data/upload/registration layers are
exonerated by 4 silent tripwire rounds; if it reproduces, the draw-level clip path (§4
family) is the remaining suspect space.
## 2. Fix pointers for #106 (next session)
- **Membership chokepoint:** the outdoor candidate-cell proposal. The capture shows the
resolver flips outdoor cells fine WITHIN a landblock but never proposes another landblock's
outdoor cell. Look at `PhysicsEngine.ResolveCellId` + `CellTransit.AddAllOutsideCells`
(its coord-convention bug was fixed 2026-05-25 — `feedback_latent_bug_masked_by_fallback`;
cross-landblock proposals may be missing or clamped to the current landblock's 8×8 grid).
- **Check the `b3ce505` #98 stopgap first:** it GATED the outdoor sweep (a flagged WORKAROUND
that already caused #99). If the gate suppresses the sweep that would propose
neighboring-landblock cells, #106 is its fallout — fixing the root (per-cell shadow
architecture A6.P4) or narrowing the gate may be the real fix. Read
`claude-memory/project_physics_collision_digest.md` DO-NOT-RETRY before touching anything.
- **Retail oracle:** `CObjCell::find_cell_list` Position-variant
(`acclient_2013_pseudo_c.txt:308742-308783`) + `LandDefs` outside-coordinate handling
(`get_outside_lcoord` family) — retail resolves outdoor cells from GLOBAL coordinates, so
landblock crossings are inherent. Cross-check ACE `Physics/Common/LandDefs.cs`.
- **Cheap probe for the fix loop:** `ACDREAM_PROBE_CELL=1` (`[cell-transit]`, low volume)
while walking across each Holtburg boundary; acceptance in #106's entry.
## 3. Apparatus notes (carried forward)
- `[pv-trace]` is hard-gated to roots `0x016F..0x0175` (`PortalVisibilityBuilder.cs:606-647`)
and `BuildFromExterior` has **NO trace hook** — outside-looking-in cull reasons are
unobservable until one is added (needed if #105's residual reproduces).
- `[flap]`'s `vis`/`outPolys` are PRE-merge (emitted in `Build`, before
`MergeNearbyBuildingFloods` in `RetailPViewRenderer.cs:48-61`); post-merge truth is
`[render-sig] ids=/draw=`.
- Tripwires still live (keep until #105/#106 close): rounds 13 + `[up-null]` (known-benign
ids `0x010002B4`, `0x010008A8` — deterministic empty meshes, ignore).
- Capture + scripts: `flap-105-capture.log`, `q105_*.py` (untracked throwaways).
## 4. The day's full arc (for the next session's orientation)
dat-reader direction chosen → read path EXONERATED (audit + 1.1M-read hammer, `b3920d8`) →
teardown dispose-during-read AV FIXED (`8fadf77`) → white-walls trapped through 4 tripwire
rounds (all silent) → live capture → **#106 pinned (membership, cross-landblock)**. The day's
"render bug" was a physics bug all along, exactly per
`feedback_render_downstream_of_membership`. Next session: fix #106 (membership/A6 territory,
read the physics digest first).