From 90fbdc02df5038efa4aa9764414dfa9f13c4b551 Mon Sep 17 00:00:00 2001 From: Erik Date: Thu, 21 May 2026 21:17:21 +0200 Subject: [PATCH] docs(roadmap+milestones): mark A6.P1/A6.P2 shipped; update M1.5 demo MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A6.P1 (cdb probe spike) + A6.P2 (analysis report) both SHIPPED this session. Updated: docs/plans/2026-04-11-roadmap.md — M1.5 phase block now shows A6.P1 + A6.P2 SHIPPED with commit refs; A6.P3 entry expanded with the Finding-2-first sequencing recommendation from A6.P2; A6.P4 entry notes the original "Holtburg Sewer end-to-end" acceptance walk is unreachable (sewer doesn't exist). docs/plans/2026-05-12-milestones.md — M1.5 demo scenario split into building/cellar half (achievable post-A6.P3) + dungeon half (blocked on issue #95 visibility blowup; promote to post-M1.5 if #95 isn't fixed in scope). Issue list updated: added #95 + indoor sling-out (new from scen4); marked stairs/2nd-floor/cellar as characterized by A6.P2 Finding 2 family. CLAUDE.md — Currently-working-toward block now points at A6.P3 as the active phase. A6.P1 + A6.P2 ship noted with the findings doc pointer. Demo-scenario note updated to reflect the sewer + #95 reality. Issues-in-scope updated. Also includes a 1-line trailing-prompt addition to scen3 + scen4 retail.log files (cdb wrote one more `0:000>` after the kill that landed after the original capture commits). Co-Authored-By: Claude Opus 4.7 (1M context) --- CLAUDE.md | 29 +++++--- docs/plans/2026-04-11-roadmap.md | 70 +++++++++++++------ docs/plans/2026-05-12-milestones.md | 40 +++++++---- .../scen3_inn_2nd_floor/retail.log | 1 + .../scen4_cottage_cellar/retail.log | 1 + 5 files changed, 97 insertions(+), 44 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index b939705..75945c9 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -726,16 +726,25 @@ render identically to pre-O. Spec: [`docs/superpowers/specs/2026-05-21-phase-o-dat-path-unification-design.md`](docs/superpowers/specs/2026-05-21-phase-o-dat-path-unification-design.md). **Currently working toward: M1.5 — Indoor world feels right** (resumed -from 2026-05-20 baseline after Phase O ship). Demo scenario: enter the -Holtburg Sewer through the in-town portal, navigate through (walls -block, stairs work, items block, lighting reads correctly), exit back -to town. Phases: A6 (Indoor physics fidelity, cdb-driven) + A7 -(Indoor lighting fidelity, RenderDoc + retail-decomp driven). Issues -in scope: #80, #81, #83, #88, #90 (workaround removal), L-indoor, -L-spotlight, stairs, 2nd-floor, cellar, and the -`TryFindIndoorWalkablePlane` synthesis removal. **M2 ("Kill a drudge") -is deferred until M1.5 lands.** Full M1.5 writeup at the corresponding -block in `docs/plans/2026-05-12-milestones.md`. +from 2026-05-20 baseline after Phase O ship). **A6.P1 + A6.P2 SHIPPED +2026-05-21** (this session). Current A6 phase: **A6.P3 — Fix BSP +correction paths.** Per A6.P2 sequencing: Finding 2 first (ContactPlane +resynthesis blowup — primary M1.5 root cause; suspect site +`Transition.FindEnvCollisions` indoor branch). Re-run scen1-5 captures +after PR. Then Finding 3 (cell-resolver sling-out from scen4; remove #90 +workaround in same PR). Findings doc: +[`docs/research/2026-05-21-a6-cdb-capture-findings.md`](docs/research/2026-05-21-a6-cdb-capture-findings.md). +Original demo scenario (Holtburg Sewer end-to-end) is unreachable: sewer +doesn't exist on this server, and **issue #95** (portal-graph visibility +blowup, discovered in A6.P1 scen5) blocks any substitute dungeon. Revised +M1.5 demo split into building/cellar half (achievable after A6.P3) + +dungeon half (blocked on #95). Issues in scope: #80, #81, #83, #88, #90 +(workaround removal), **#95** (visibility blowup; not A6 scope but +blocks dungeon demo), L-indoor, L-spotlight, stairs, 2nd-floor, cellar, +indoor sling-out (new from scen4), and the `TryFindIndoorWalkablePlane` +synthesis removal. **M2 ("Kill a drudge") is deferred until M1.5 +lands.** Full M1.5 writeup at the corresponding block in +`docs/plans/2026-05-12-milestones.md`. **Today's pre-M1.5 baseline (2026-05-20).** Five surgical fixes shipped to close the user-reported "logged in inside the inn, ran diff --git a/docs/plans/2026-04-11-roadmap.md b/docs/plans/2026-04-11-roadmap.md index a88c858..07179b9 100644 --- a/docs/plans/2026-04-11-roadmap.md +++ b/docs/plans/2026-04-11-roadmap.md @@ -142,27 +142,55 @@ successfully 2026-04-30 for the steep-roof case. Matching binaries (acclient.exe v11.4186) + PDB present. **Sub-pieces (slices):** -- **A6.P1 — cdb probe spike** (~3 days). Build cdb scripts capturing - retail's per-tick state at 9 scenarios: - - 4 building sites: Holtburg inn doorway, inn stairs, inn 2nd floor, - cottage cellar. - - 5 dungeon sites: Holtburg Sewer entry portal, first stair descent, - inter-room portal transition, open central area, dark corridor. - Breakpoints on `set_collide`, `step_sphere_up`, `step_sphere_down`, - `transitional_insert`, `set_contact_plane`, `validate_walkable`. - Mirror with our equivalent probes (`[indoor-bsp]`, `[cp-write]`, - new `[push-back]`). -- **A6.P2 — Analysis report** (~1 day). Quantify the per-call-site - gap. Identify which BSP path(s) over- or under-correct. Output: - 1–3 specific bug findings with retail decomp anchors. -- **A6.P3 — Fix the BSP correction paths** (~3–5 days). Surgical - fixes informed by A6.P2 data. Likely touches `BSPQuery.AdjustSphereToPlane`, - `AdjustOffsetToPlane`, Path 5 / Path 6 branches, sub-step state - mutation. -- **A6.P4 — Remove workarounds** (~1 day). Revert #90 sphere-overlap - stickiness in `PhysicsEngine.ResolveCellId`. Delete - `Transition.TryFindIndoorWalkablePlane` + its caller in - `FindEnvCollisions`. Verify behavior holds without the workarounds. +- **✓ SHIPPED — A6.P1 — cdb probe spike** (2026-05-21). Built cdb + scripts (`tools/cdb/a6-probe.cdb` v4 with PDB-verified offsets + + hex-bits float output + Python decoder), PowerShell runner with + ASCII encoding, PDB-match verification, and the new + `[push-back]`/`[push-back-disp]`/`[push-back-cell]` acdream probe + family (env `ACDREAM_PROBE_PUSH_BACK=1`). Captured 5 of 9 scenarios + with paired retail+acdream traces (scen1 inn doorway, scen2 inn + stairs, scen3 inn 2nd floor, scen4 cottage cellar, scen5 town + network portal as substitute for Holtburg Sewer entry). Scen6-9 + cancelled — Holtburg Sewer doesn't exist on this server, and any + substitute dungeon hits issue #95 (portal-graph visibility blowup) + on portal entry, making physics-only analysis impossible. Five + captures are sufficient evidence for A6.P2. Commits: infra Tasks + 1-14 + cdb iterations + scen1 capture (prior session); scen2-5 + captures (`a9a427f`, `297d1c5`, `4b5aebc`, `46c6e08`, `35d5c58`) + + issue #95 filing (`5be784e`) (this session). +- **✓ SHIPPED — A6.P2 — Analysis report** (2026-05-21, `184933d`). + Output: [`docs/research/2026-05-21-a6-cdb-capture-findings.md`](../research/2026-05-21-a6-cdb-capture-findings.md). + Four findings ready for A6.P3: Finding 2 (ContactPlane resynthesis + blowup — 250× to ∞× more CP writes in acdream; primary M1.5 root + cause) is HIGH severity and the highest-confidence single-cause + fix candidate. Finding 1 (dispatcher entry frequency mismatch — + 4× to 281× fewer dispatcher entries in acdream) is likely a + secondary effect of Finding 2's missing retention paths. Finding 3 + (indoor cell-resolver sling-out captured in scen4) — HIGH severity, + separate fix surface in ResolveCellId/CheckBuildingTransit. + Finding 4 (portal-graph visibility blowup discovered incidentally + in scen5) — filed as issue #95, scope-adjacent, handled outside A6. + Tables 1+2 (per-site push-back delta + path-frequency diff) + deferred to optional A6.P1.5 (entry+exit BPs in cdb script); + not blocking A6.P3. M1.5 symptom coverage matrix shows every + in-scope physics symptom mapped to at least one finding. +- **A6.P3 — Fix the BSP correction paths** (~3–5 days). Sequencing + per A6.P2 recommendation: Finding 2 first (highest-confidence + single-cause; suspect site is `Transition.FindEnvCollisions` indoor + branch + the retention mechanisms that should keep ContactPlane + across frames). Re-run scen1-5 captures after the PR. If CP-write + ratios drop from ~1,000× to ~1×, Finding 2 is closed and Finding 1 + may close as side-effect. Then Finding 3 (cell-resolver stickiness + in ResolveCellId + CheckBuildingTransit; same PR also removes #90 + workaround). Issue #95 is NOT in A6.P3 scope. +- **A6.P4 — Remove workarounds + visual verification** (~1 day after + P3). Revert #90 sphere-overlap stickiness in + `PhysicsEngine.ResolveCellId`. Delete `Transition.TryFindIndoorWalkablePlane` + + its caller in `FindEnvCollisions`. Visual verification at Holtburg + inn + cellar + (if #95 is also fixed by then) a dungeon. The + original A6.P4 plan named "Holtburg Sewer end-to-end" as the + acceptance walk; since the sewer doesn't exist, the M1.5 demo + scenario needs an alternative (see milestones doc). #### Phase A7 — Indoor lighting fidelity (RenderDoc + retail-decomp driven) diff --git a/docs/plans/2026-05-12-milestones.md b/docs/plans/2026-05-12-milestones.md index 0ac230a..569db86 100644 --- a/docs/plans/2026-05-12-milestones.md +++ b/docs/plans/2026-05-12-milestones.md @@ -198,18 +198,30 @@ baseline with no code changes lost — Phase O did not touch dat-loading infrastructure for physics or collision, only the rendering pipeline. M1.5's planned phases (A6 + A7) are unaffected. -**Demo scenario:** Enter the Holtburg Sewer dungeon through the in-town entry -portal. Navigate to the end (5–7 rooms with stairs + a multi-Z chamber). -Exit back to town. Throughout the walk: +**Demo scenario (updated 2026-05-21):** The original demo target was +"enter the Holtburg Sewer dungeon" but that location doesn't exist on +this ACE server (discovered during A6.P1 capture session). Additionally, +A6.P1 surfaced **issue #95** (portal-graph visibility blowup) which makes +ANY dungeon visually unusable on entry. Demo scenario revised in two +parts: +**Building/cellar demo (achievable after A6.P3 lands):** +Walk into the Holtburg inn, climb to the 2nd floor, walk around without +sling-out or wall-clip. Enter a cottage cellar, descend without falling +through. Throughout: - Walls block — no walk-through anywhere, indoor or stab-shell. - Stairs work — ascend + descend without falling through or stuck-in-falling. -- Items block — sarcophagi, urns, decorations, tables, chests, fireplaces. -- Lighting reads correctly — torchlit rooms are bright, dark corridors are - dark, no spotlights projecting onto walls from held items, no upper-floor - dimming bug, static decorations participate in the day-cycle (outside) and - in per-cell environment lighting (inside). +- Items block — furniture, decorations. - Cell transitions are smooth — no CellId ping-pong, no flicker. +- Lighting reads correctly — torchlit rooms are bright, no spotlight + artifacts, static decorations participate in env lighting. + +**Dungeon demo (blocked on issue #95 fix; promote to post-M1.5 if +the visibility bug isn't addressed in M1.5 scope):** +Enter any dungeon via portal (substitute for "Holtburg Sewer"). Navigate +~3-5 rooms without rendering corruption (no see-through-walls, no +other-dungeons-rendered-inside). Walls block, stairs work, items block, +lighting correct, cell transitions smooth. **Why this is its own milestone:** M1 landed walkable + clickable as a specification (the doorways open, NPCs select, items pick up — all visible @@ -238,14 +250,16 @@ patch. - **#80** — Camera on 2nd floor goes very dark - **#81** — Static building stabs don't react to atmospheric lighting - **#83** — Indoor multi-Z walking broken (cellars, 2nd floors, intermittent falling-stuck) -- **#88** — Indoor static objects vibrate (suspected sub-step state corruption) +- **#88** — Indoor static objects vibrate (suspected sub-step state corruption — A6.P2 maps to Finding 2 family) - **#90** — CellId ping-pong (workaround in place; remove during A6.P4) +- **#95** — Portal-graph visibility blowup (filed 2026-05-21; **blocks the dungeon half of the M1.5 demo** but is NOT in A6 scope; either add a dedicated phase inside M1.5 to fix it OR promote the dungeon demo to post-M1.5) - **L-indoor** — Lighting indoors broken (file as new # during M1.5 kickoff) - **L-spotlight** — Items projecting spotlight on walls (file as new # during M1.5 kickoff) -- **Stairs walk-through** — file as new # during M1.5 kickoff -- **2nd-floor walking** — file as new # during M1.5 kickoff -- **Cellar descent** — file as new # during M1.5 kickoff -- **`TryFindIndoorWalkablePlane`** — synthesis workaround removal (Bug A's original goal, finally unblocked) +- **Stairs walk-through** — captured + characterized by A6.P2 (Finding 2 family); fix in A6.P3 +- **2nd-floor walking** — captured + characterized by A6.P2 (Finding 2 — scen3 shows infinite CP-write ratio on flat 2nd-floor walk); fix in A6.P3 +- **Cellar descent** — same physics family as stairs; fix in A6.P3 +- **Indoor sling-out** (new symptom from A6.P1 scen4) — captured + mapped to A6.P2 Finding 3 (cell-resolver in ResolveCellId / CheckBuildingTransit); fix in A6.P3 +- **`TryFindIndoorWalkablePlane`** — synthesis workaround removal (Bug A's original goal, finally unblocked; A6.P4) **Frozen phases during M1.5:** all M0 + M1 phases stay frozen. Plus specifically the recently-shipped A4 + #89 + #91 + #92 (today's work) — those diff --git a/docs/research/2026-05-21-a6-captures/scen3_inn_2nd_floor/retail.log b/docs/research/2026-05-21-a6-captures/scen3_inn_2nd_floor/retail.log index 56f5904..eb8d1e4 100644 --- a/docs/research/2026-05-21-a6-captures/scen3_inn_2nd_floor/retail.log +++ b/docs/research/2026-05-21-a6-captures/scen3_inn_2nd_floor/retail.log @@ -21335,3 +21335,4 @@ ntdll!NtTerminateProcess+0xc: 7748949c c20800 ret 8 0:000> [BP4] find_collisions hit#10636 collide=Memory access error at '), dwo(poi(@esp+4)+0x174), dwo(@esp+8); .if (@$t0 >= 50000) { qd } .else { gc }' +0:000> diff --git a/docs/research/2026-05-21-a6-captures/scen4_cottage_cellar/retail.log b/docs/research/2026-05-21-a6-captures/scen4_cottage_cellar/retail.log index 72a8cc5..a1607ac 100644 --- a/docs/research/2026-05-21-a6-captures/scen4_cottage_cellar/retail.log +++ b/docs/research/2026-05-21-a6-captures/scen4_cottage_cellar/retail.log @@ -22534,3 +22534,4 @@ ntdll!NtTerminateProcess+0xc: 7748949c c20800 ret 8 0:000> [BP4] find_collisions hit#12596 collide=Memory access error at '), dwo(poi(@esp+4)+0x174), dwo(@esp+8); .if (@$t0 >= 50000) { qd } .else { gc }' +0:000>