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>
95 lines
6.5 KiB
Markdown
95 lines
6.5 KiB
Markdown
# #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 enter–exit. 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 1–3 + `[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).
|