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

6.5 KiB
Raw Blame History

#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).