diff --git a/docs/research/2026-07-05-m15-dungeon-pickup-prompt.md b/docs/research/2026-07-05-m15-dungeon-pickup-prompt.md new file mode 100644 index 00000000..e01bcf6f --- /dev/null +++ b/docs/research/2026-07-05-m15-dungeon-pickup-prompt.md @@ -0,0 +1,56 @@ +# 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.