# Pickup prompt — M1.5 dungeon track: #137 collision first (paste into a fresh session) Read `claude-memory/project_physics_collision_digest.md` FIRST (the collision SSOT + DO-NOT-RETRY table — binding), then the ISSUES entries for **#137**, **#153**, **#138** (in that order), plus the prior-art closed fixes **#150** (ethereal door step-down skip), **#151** (portal-less wall shells), **#152** (building-cache re-base). Then work the track below. **Context:** the R5 movement-manager arc is DONE and merged — `main` == `claude/vigorous-joliot-f0c3ad` @ `aa734f34` (facade close-out: `docs/research/2026-07-03-r5-managers/r5-wiring-handoff.md`). M1.5's remaining critical path is the dungeon track: **#137 dungeon collision → #153/#138 teleport-out residuals → A7 dungeon lighting** (A7 last — its 5-dungeon-site capture protocol needs dungeons walkable first). **Slice 1 — #137 (dungeon collision at doors + wall openings), oracle-first:** 1. AUTONOMOUS PREP: wire nothing yet. Re-read the EnvCell collision path (`CellTransit`, the door apparatus, `ShadowObjectRegistry` per-cell registration — A6.P4 architecture) and check whether the #150 ethereal step-down skip (`TransitionTypes.cs`, retail pc:276795-276806) already covers EnvCell dungeon doors or only building doors. Grep named-retail before any fresh decompilation. 2. REPRO (needs the user in-world): the 0x0007 dungeon, with `ACDREAM_PROBE_RESOLVE=1` (+ `ACDREAM_CAPTURE_RESOLVE=` if a replay diff is warranted). Characterize per site: which door / which opening, expected vs actual, open-vs-closed state. The issue text says symptoms are NOT yet characterized — do not fix ahead of the repro. 3. Fix per the digest workflow (retail decomp is the oracle; ACE second). Acceptance: doors block/pass per open/closed state, wall openings pass, solid walls block — matching retail in 0x0007. Register row per deviation, same commit. **Slice 2 — #153 (portals only work once / teleport-onto-unstreamed-edge runaway), apparatus-first:** the issue is REOPENED with a narrowed residual (arrival on a NOT-yet-streamed landblock NEAR AN EDGE → cell-march + Z free-fall + garbage outbound cell). The issue text itself says **DO NOT guess-patch** — the original #145 burned 5 attempts. Build the capture + anchor/guard diagnostic at the crossing first. ⚠️ The issue's "likely fix shape" is a streaming-gap HOLD — but the user REVERTED a previous teleport hold as "shaky and bandaid" (`feedback_no_holds_for_slow_foundation`). If the evidence really does point at a hold (as retail's synchronous-load equivalent), STOP and get explicit user approval with the retail anchor in hand; do not ship it on your own authority. **Then:** the #138 acceptance run (portal out → world + objects + avatar all present across REPEATED round-trips, collision working — its component fixes are shipped; #151/#152 closed the wall residuals; what's left is the gate), and A7 lighting (#154 dungeon-dim, #142 windowed interiors, #143 portal swirl, #140 Fix D) as the M1.5 closer. **Gotchas:** visual gates + repro sessions need the user (plan autonomous decomp/probe prep around their availability); PowerShell Tee logs are UTF-16 (`tr -d '\000'` before grep); the user manages client lifecycle (plain `dotnet run`, graceful close, ask if a rebuild is locked); probes: `ACDREAM_PROBE_RESOLVE` / `ACDREAM_PROBE_CELL` / `ACDREAM_CAPTURE_RESOLVE` / `ACDREAM_PROBE_ENT` are all wired and DebugPanel-toggleable.