diff --git a/CLAUDE.md b/CLAUDE.md index e11dbb52..e328ce51 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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 diff --git a/docs/ISSUES.md b/docs/ISSUES.md index b2aaeb38..80581f8a 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -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 diff --git a/docs/plans/2026-05-12-milestones.md b/docs/plans/2026-05-12-milestones.md index 7e9f6419..fdbb5ef3 100644 --- a/docs/plans/2026-05-12-milestones.md +++ b/docs/plans/2026-05-12-milestones.md @@ -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