milestone: M1.5 LANDED (building/cellar demo); dungeon demo -> #133/G.3; start M2

M1.5 "Indoor world feels right" lands on its primary building/cellar
demo, user-gated across the 2026-06 sessions: multi-floor inn navigation
without sling-out/wall-clip, cottage cellar descend+ascend without
falling through, walls block everywhere, smooth cell transitions. The
holistic Option-A render port (one DrawInside(viewer_cell), BR-2..BR-7 /
T1..T6) and the A6.P4 per-cell shadow physics shipped and were gated; the
doorway-flap family is closed (#119/#128, #112, #113, #124,
#129/#130/#131/#132, #108-residual, #127) and the #90/synthesis
workarounds removed.

The dungeon half is the one piece NOT landed: attempting the dungeon demo
(meeting-hall portal) surfaced issue #133 - teleport-into-a-dungeon snaps
the player BEFORE the dungeon landblock streams in (GameWindow.cs:4928
Resolve falls back to the resident Holtburg landblocks -> snaps to an
outdoor cell over ocean). That is Phase G.3 (dungeon streaming +
PlayerTeleport handling, M4), not a render bug (#95 died with the Option
A rewrite). Per the milestones doc's pre-flagged choice, the dungeon demo
is promoted to G.3 and M1.5 lands on the building/cellar demo (user
decision 2026-06-13).

Start M2 "Kill a drudge" - first port target CombatMath.ComputeDamage
(port-ready per the combat-math research memo; ACE oracle). Drudges spawn
outdoors for the demo, so M2 does not depend on #133/G.3.

Files: milestones doc (M1.5 -> LANDED, M2 -> ACTIVE, currently-working-
toward flipped), CLAUDE.md current-state -> M2, ISSUES.md #133 filed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-13 10:45:00 +02:00
parent 8682a8db70
commit 1bf037a1c9
3 changed files with 116 additions and 13 deletions

View file

@ -2,7 +2,9 @@
**Status:** Living document. Created 2026-05-12.
**Sits above:** [`docs/plans/2026-04-11-roadmap.md`](2026-04-11-roadmap.md) (the strategic phase index).
**Currently working toward:** **M1.5 — Indoor world feels right.**
**Currently working toward:** **M2 — Kill a drudge.** (M1.5 — Indoor world
feels right — LANDED 2026-06-13 on the building/cellar demo; the dungeon
half deferred to Phase G.3 via issue #133. See the M1.5 section.)
---
@ -185,7 +187,37 @@ close range and the player sees "You pick up the X." in chat.
---
### M1.5 — "Indoor world feels right" — 🔵 ACTIVE (resumed 2026-05-21 after Phase O ship)
### M1.5 — "Indoor world feels right" — ✅ LANDED 2026-06-13 (building/cellar demo; dungeon half → Phase G.3 / issue #133)
**M1.5 LANDED 2026-06-13.** The indoor world reads as solid. Across the
2026-06 sessions the holistic retail-faithful render port (Option A: ONE
`DrawInside(viewer_cell)`, no inside/outside branch — BR-2..BR-7 / T1..T6)
shipped and was user-gated, and the indoor physics/membership family was
brought to retail fidelity (the A6.P4 per-cell shadow architecture; the
#107/#111/#112 spawn + membership fixes; the cellar-lip wedge). End-to-end,
user-gated this milestone: walk into a building and climb a multi-floor inn
without sling-out or wall-clip; descend a cottage cellar and ascend it
without falling through (the #98 + cellar-lip + #108 grass-window closes);
walls block everywhere (indoor + stab-shell, the #99 door run-through
closed); cell transitions are smooth (the doorway "flap" family killed —
#119/#128, #112, #113, #124, #129/#130/#131/#132, #108-residual, #127 all
closed with user gates). The #90-stickiness + `TryFindIndoorWalkablePlane`
synthesis workarounds were removed by A6.P4. Remaining feel-level debt is
tracked (#116 slide-response, partial Ghidra fix shipped; A7 indoor
lighting fidelity not yet done — folded forward). **The dungeon demo is the
one piece NOT landed here:** attempting it (2026-06-13, meeting-hall portal)
surfaced issue **#133** — teleport-into-a-dungeon snaps the player before
the dungeon landblock streams in, landing them in the old (Holtburg) frame
over ocean. That is the **Phase G.3** machinery (dungeon streaming +
`PlayerTeleport` handling), an M4 concern; the dungeon demo is correctly
promoted there rather than blocking M1.5. Drudges for M2 can spawn
outdoors, so M2 is unblocked.
---
#### (historical M1.5 working notes below)
🔵 ACTIVE (resumed 2026-05-21 after Phase O ship)
**2026-05-30 — render-pipeline pivot.** The indoor *rendering* seam (seamless
in/out: the flap, missing/transparent walls, terrain bleed) will be solved by a
@ -293,13 +325,25 @@ unblocks that).
---
### M2 — "Kill a drudge" — ⏸ DEFERRED until M1.5 lands (was: NEXT)
### M2 — "Kill a drudge" — 🔵 ACTIVE (started 2026-06-13, after M1.5 landed)
**Demo scenario:** Equip a sword. Walk to a drudge. Swing. See "You hit
Drudge for 12 slashing damage (87%)" in chat. Watch the swing animation
play. Drudge dies, drops loot. Pick up the loot. Open the inventory panel
and see it.
**Dungeon note:** drudges live in dungeons in retail, but the M2 demo does
NOT require dungeon streaming (#133 / Phase G.3) — spawn a drudge outdoors
near Holtburg for the combat loop. Dungeon access lands later with G.3 (M4).
**First port target (per the M2 combat-math research memo,
`memory/research/2026-06-04-combat-math-deep-dive.md`):**
`CombatMath.ComputeDamage` — damage-calc + armor-resists are port-ready
(ACE is the high-confidence oracle; two known scaffold bugs in
`CombatModel.cs` identified). Hit-roll is well-documented client-side;
the server sigmoid/crit + weapon-timing (the x87 `GetPowerBarLevel`
artifact) come after.
**Phases to ship:**
- **F.2 (panels)** — Inventory panel reading `ItemRepository` (data already
shipped in F.2 base; M2 ships the visual surface).