milestone: re-open M1.5 — dungeon support (full G.3) pulled into scope; M2 re-deferred

Correction to 1bf037a. The user reverted the M1.5 landing: the indoor
world isn't done while dungeons are completely broken. Attempting the
dungeon demo revealed it's not a single bug (#133) but a whole-feature
gap — terrain-less indoor-only dungeon landblocks aren't supported
anywhere in the streaming/load/render/physics pipeline:
- LandblockLoader.Load returns null when there's no LandBlock terrain
  record (dungeons have none) -> the dungeon never loads.
- LandblockStreamer fails when the terrain mesh build returns null
  (dungeons have no terrain mesh).
- The teleport-arrival snap Resolves before the dungeon hydrates ->
  places the player in the old Holtburg frame over ocean.

The user chose the FULL Phase G.3 scope (dungeon streaming + portal-space
loading screen + multi-landblock LOD + PlayerTeleport handling) and
pulled it into M1.5. M1.5 lands only when BOTH the building/cellar demo
(done) and the dungeon demo (enter via portal, navigate 3-5 rooms, walls
block, smooth transitions) pass. M2 (CombatMath) re-deferred.

Currently brainstorming the dungeon-support design (spec ->
docs/superpowers/specs/). Docs corrected: milestones (M1.5 ACTIVE +
extended, M2 DEFERRED, currently-working-toward -> M1.5), CLAUDE.md
current-state, ISSUES.md #133 (G.3 pulled into M1.5).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-13 14:45:53 +02:00
parent 1bf037a1c9
commit 9c2ceb2336
3 changed files with 63 additions and 39 deletions

View file

@ -108,17 +108,18 @@ movement queries.
## Current state
**Currently working toward: M2 — Kill a drudge** (M1.5 — Indoor world
feels right — LANDED 2026-06-13 on the building/cellar demo; the holistic
Option-A render port + A6.P4 physics shipped and user-gated). **First M2
target: `CombatMath.ComputeDamage`** (port-ready, ACE oracle; combat-math
research memo). Drudges spawn outdoors for the demo — dungeon access is
Phase G.3 (M4). **Dungeon teleport is BROKEN (#133):** teleport-into-
dungeon snaps before the dungeon streams in → lands in the old frame over
ocean; the M1.5 dungeon demo is deferred to G.3. Recent closes (2026-06-12/13):
#119/#128, #112, #113, #124, #129/#130/#131/#132, UN-2, #108-residual,
#127, #125; #116 partial (Ghidra threshold fix). Keep this paragraph ≤5
lines + pointers — detail lives in the docs below, NOT here.
**Currently working toward: M1.5 — Indoor world feels right.** The
building/cellar demo is DONE + user-gated, but M1.5 was EXTENDED 2026-06-13
to include **dungeon support (full Phase G.3)** — dungeons don't work at
all: terrain-less dungeon landblocks aren't supported by the streaming/
load/render/physics pipeline (`LandblockLoader.Load` null with no
`LandBlock`; streamer needs a terrain mesh; teleport snaps before hydration
→ ocean — issue **#133**). M1.5 does NOT land until dungeons work; M2
(CombatMath) deferred. Currently brainstorming the G.3 dungeon-support spec.
Recent closes (2026-06-12/13): #119/#128, #112, #113, #124,
#129/#130/#131/#132, UN-2, #108-residual, #127, #125; #116 partial (Ghidra
threshold fix). Keep this paragraph ≤5 lines + pointers — detail in the
docs below, NOT here.
For canonical state, read in this order:
- [`docs/plans/2026-05-12-milestones.md`](docs/plans/2026-05-12-milestones.md) — milestone targets + freeze list per milestone

View file

@ -48,11 +48,13 @@ Copy this block when adding a new issue:
## #133 — Teleport into a dungeon snaps the player BEFORE the dungeon landblock streams in → lands at the old landblock's frame (ocean), not the dungeon
**Status:** OPEN — promote to **Phase G.3** (Dungeon streaming + portal
space + `PlayerTeleport` handling; M4 per the milestones doc, line 360).
This is the M1.5 dungeon-demo blocker; the demo is deferred to G.3 (user
decision 2026-06-13). Does NOT block M2 combat (drudges can spawn
outdoors).
**Status:** OPEN — promoted to **Phase G.3** (Dungeon streaming + portal
space + `PlayerTeleport` handling), **PULLED INTO M1.5** (user decision
2026-06-13: the indoor world isn't done while dungeons are broken; full
G.3 scope chosen). Brainstorming the spec → `docs/superpowers/specs/`.
This is now an M1.5 exit-gate blocker, not deferred. The investigation
below found it's not a single bug but a whole-feature gap (terrain-less
dungeon landblocks unsupported across the pipeline).
**Severity:** HIGH (any far/dungeon teleport is unusable)
**Filed:** 2026-06-13 (M1.5 dungeon-demo gate attempt — meeting-hall portal)
**Component:** physics/streaming — teleport-arrival snap vs async landblock hydration

View file

@ -2,9 +2,13 @@
**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:** **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.)
**Currently working toward:** **M1.5 — Indoor world feels right.** The
building/cellar demo is DONE + user-gated, but M1.5 was EXTENDED 2026-06-13
to include **dungeon support (full Phase G.3)** — dungeons don't work yet
(terrain-less dungeon landblocks aren't supported by the streaming/load
pipeline; issue #133). M1.5 does NOT land until dungeons work. M2 stays
deferred. (Correction: M1.5 was briefly marked landed 2026-06-13; the user
reverted that — the indoor world isn't done while dungeons are broken.)
---
@ -187,9 +191,24 @@ close range and the player sees "You pick up the X." in chat.
---
### M1.5 — "Indoor world feels right" — ✅ LANDED 2026-06-13 (building/cellar demo; dungeon half → Phase G.3 / issue #133)
### M1.5 — "Indoor world feels right" — 🔵 ACTIVE (building/cellar demo DONE; EXTENDED 2026-06-13 to include dungeon support / Phase G.3)
**M1.5 LANDED 2026-06-13.** The indoor world reads as solid. Across the
**EXTENDED 2026-06-13 — dungeons pulled into M1.5 scope.** The
building/cellar demo (below) is DONE + user-gated, but attempting the
dungeon demo surfaced that dungeons don't work AT ALL: terrain-less
dungeon landblocks aren't supported anywhere in the streaming/load/
render/physics pipeline (`LandblockLoader.Load` returns null with no
`LandBlock` terrain record; the streamer fails with no terrain mesh; the
teleport snap Resolves before hydration — issue #133). The user decided
M1.5 is NOT done while the indoor world excludes dungeons, and chose the
FULL Phase G.3 scope (dungeon streaming + portal-space loading screen +
multi-landblock dungeon LOD + `PlayerTeleport` handling). Design in
progress (`docs/superpowers/specs/` — dungeon-support spec). M1.5 lands
when: building/cellar demo (DONE) + dungeon demo (enter via portal,
navigate 3-5 rooms, walls block, smooth transitions) both pass.
**Building/cellar demo — DONE + user-gated.** 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
@ -204,14 +223,18 @@ closed); cell transitions are smooth (the doorway "flap" family killed —
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.
lighting fidelity not yet done — folded forward).
**Still OPEN in M1.5 — dungeon support (Phase G.3, issue #133).** Dungeons
don't work: the streaming/load/render/physics pipeline was built entirely
around outdoor landblocks (terrain + scattered buildings) and has no path
for terrain-less indoor-only dungeon landblocks. Confirmed gaps:
`LandblockLoader.Load` returns null with no `LandBlock` record; the
streamer fails with no terrain mesh; the teleport-arrival snap Resolves
before the dungeon hydrates → places the player in the old frame over
ocean. Full G.3 scope chosen by the user 2026-06-13 (streaming + portal-
space loading screen + multi-landblock LOD + `PlayerTeleport` handling).
Spec under `docs/superpowers/specs/`.
---
@ -325,24 +348,22 @@ unblocks that).
---
### M2 — "Kill a drudge" — 🔵 ACTIVE (started 2026-06-13, after M1.5 landed)
### M2 — "Kill a drudge" — ⏸ DEFERRED until M1.5 lands (incl. dungeons)
**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`):**
**First port target when M2 starts (per the M2 combat-math research memo,
`docs/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.
`CombatModel.cs` identified — additive attributeBonus + subtractive armor).
Hit-roll is well-documented client-side; the server sigmoid/crit +
weapon-timing (the x87 `GetPowerBarLevel` artifact) come after. NOTE: M2
was briefly started 2026-06-13 then re-deferred when M1.5 was extended to
include dungeons.
**Phases to ship:**
- **F.2 (panels)** — Inventory panel reading `ItemRepository` (data already