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 ## Current state
**Currently working toward: M2 — Kill a drudge** (M1.5 — Indoor world **Currently working toward: M1.5 — Indoor world feels right.** The
feels right — LANDED 2026-06-13 on the building/cellar demo; the holistic building/cellar demo is DONE + user-gated, but M1.5 was EXTENDED 2026-06-13
Option-A render port + A6.P4 physics shipped and user-gated). **First M2 to include **dungeon support (full Phase G.3)** — dungeons don't work at
target: `CombatMath.ComputeDamage`** (port-ready, ACE oracle; combat-math all: terrain-less dungeon landblocks aren't supported by the streaming/
research memo). Drudges spawn outdoors for the demo — dungeon access is load/render/physics pipeline (`LandblockLoader.Load` null with no
Phase G.3 (M4). **Dungeon teleport is BROKEN (#133):** teleport-into- `LandBlock`; streamer needs a terrain mesh; teleport snaps before hydration
dungeon snaps before the dungeon streams in → lands in the old frame over → ocean — issue **#133**). M1.5 does NOT land until dungeons work; M2
ocean; the M1.5 dungeon demo is deferred to G.3. Recent closes (2026-06-12/13): (CombatMath) deferred. Currently brainstorming the G.3 dungeon-support spec.
#119/#128, #112, #113, #124, #129/#130/#131/#132, UN-2, #108-residual, Recent closes (2026-06-12/13): #119/#128, #112, #113, #124,
#127, #125; #116 partial (Ghidra threshold fix). Keep this paragraph ≤5 #129/#130/#131/#132, UN-2, #108-residual, #127, #125; #116 partial (Ghidra
lines + pointers — detail lives in the docs below, NOT here. threshold fix). Keep this paragraph ≤5 lines + pointers — detail in the
docs below, NOT here.
For canonical state, read in this order: 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 - [`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 ## #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 **Status:** OPEN — promoted to **Phase G.3** (Dungeon streaming + portal
space + `PlayerTeleport` handling; M4 per the milestones doc, line 360). space + `PlayerTeleport` handling), **PULLED INTO M1.5** (user decision
This is the M1.5 dungeon-demo blocker; the demo is deferred to G.3 (user 2026-06-13: the indoor world isn't done while dungeons are broken; full
decision 2026-06-13). Does NOT block M2 combat (drudges can spawn G.3 scope chosen). Brainstorming the spec → `docs/superpowers/specs/`.
outdoors). 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) **Severity:** HIGH (any far/dungeon teleport is unusable)
**Filed:** 2026-06-13 (M1.5 dungeon-demo gate attempt — meeting-hall portal) **Filed:** 2026-06-13 (M1.5 dungeon-demo gate attempt — meeting-hall portal)
**Component:** physics/streaming — teleport-arrival snap vs async landblock hydration **Component:** physics/streaming — teleport-arrival snap vs async landblock hydration

View file

@ -2,9 +2,13 @@
**Status:** Living document. Created 2026-05-12. **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). **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 **Currently working toward:** **M1.5 — Indoor world feels right.** The
feels right — LANDED 2026-06-13 on the building/cellar demo; the dungeon building/cellar demo is DONE + user-gated, but M1.5 was EXTENDED 2026-06-13
half deferred to Phase G.3 via issue #133. See the M1.5 section.) 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 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) `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 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` closed with user gates). The #90-stickiness + `TryFindIndoorWalkablePlane`
synthesis workarounds were removed by A6.P4. Remaining feel-level debt is synthesis workarounds were removed by A6.P4. Remaining feel-level debt is
tracked (#116 slide-response, partial Ghidra fix shipped; A7 indoor tracked (#116 slide-response, partial Ghidra fix shipped; A7 indoor
lighting fidelity not yet done — folded forward). **The dungeon demo is the lighting fidelity not yet done — folded forward).
one piece NOT landed here:** attempting it (2026-06-13, meeting-hall portal)
surfaced issue **#133** — teleport-into-a-dungeon snaps the player before **Still OPEN in M1.5 — dungeon support (Phase G.3, issue #133).** Dungeons
the dungeon landblock streams in, landing them in the old (Holtburg) frame don't work: the streaming/load/render/physics pipeline was built entirely
over ocean. That is the **Phase G.3** machinery (dungeon streaming + around outdoor landblocks (terrain + scattered buildings) and has no path
`PlayerTeleport` handling), an M4 concern; the dungeon demo is correctly for terrain-less indoor-only dungeon landblocks. Confirmed gaps:
promoted there rather than blocking M1.5. Drudges for M2 can spawn `LandblockLoader.Load` returns null with no `LandBlock` record; the
outdoors, so M2 is unblocked. 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 **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 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 play. Drudge dies, drops loot. Pick up the loot. Open the inventory panel
and see it. and see it.
**Dungeon note:** drudges live in dungeons in retail, but the M2 demo does **First port target when M2 starts (per the M2 combat-math research memo,
NOT require dungeon streaming (#133 / Phase G.3) — spawn a drudge outdoors `docs/research/2026-06-04-combat-math-deep-dive.md`):**
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 `CombatMath.ComputeDamage` — damage-calc + armor-resists are port-ready
(ACE is the high-confidence oracle; two known scaffold bugs in (ACE is the high-confidence oracle; two known scaffold bugs in
`CombatModel.cs` identified). Hit-roll is well-documented client-side; `CombatModel.cs` identified — additive attributeBonus + subtractive armor).
the server sigmoid/crit + weapon-timing (the x87 `GetPowerBarLevel` Hit-roll is well-documented client-side; the server sigmoid/crit +
artifact) come after. 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:** **Phases to ship:**
- **F.2 (panels)** — Inventory panel reading `ItemRepository` (data already - **F.2 (panels)** — Inventory panel reading `ItemRepository` (data already