diff --git a/CLAUDE.md b/CLAUDE.md index e9cfe49e..b20aef89 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -108,20 +108,17 @@ movement queries. ## Current state -**Currently working toward: M1.5 — Indoor world feels right** (building/cellar demo -DONE + gated; dungeons now navigable end-to-end — **#133/#137/#95/#79/#93/#80 all -CLOSED** (A7 lighting fixed, user-reverified). REMAINING = one recorded dungeon -round-trip user gate (**#138 ESSENTIALLY RESOLVED** in code — see -`docs/ISSUES.md`); sole live residual = far-town teleport-OUT arrival cascade -(**#145-residual, REOPENED** — capture-harness-first). One **user-report-driven -parity track** still interleaves at the issue level (NOT a milestone; see the M1.5 -note in the milestones doc): **D.2b retail UI** (next: container-switching — -`claude-memory/project_d2b_retail_ui.md`). The **R5 movement-manager arc is DONE** -(2026-07-05, V5 facade shipped; close-out banner in -`docs/research/2026-07-03-r5-managers/r5-wiring-handoff.md`; carried: #167, R6/TS-42). -**Track MP** (modern-pipeline perf side track, dedicated sessions only — roadmap -"Track MP") is at MP0. M2 (CombatMath) deferred. Keep this paragraph ≤6 lines + pointers — detail in the docs -below, NOT here. +**Currently working toward: M2 — Kill a drudge** (equip sword → hit a drudge → damage +in chat → loot → inventory). **M1.5 — Indoor world feels right LANDED 2026-07-10**: +buildings/cellars/multi-floor inns + full dungeon round-trip (enter→navigate→exit) all +user-gated; #138 closed by the round-trip gate; #133/#137/#95/#79/#93/#80 CLOSED. M2 +first ports = `CombatMath.ComputeDamage` (F.3) + inventory panel (F.2) + combat anim +(L.1c) — see the M2 section in the milestones doc + `docs/research/2026-06-04-combat-math-deep-dive.md`. +**Carried post-M1.5, NOT blockers:** #145-residual (far-town teleport-OUT cascade — +capture-harness-first), #116 slide-response. **D.2b retail UI** parity track still +interleaves at the issue level (next: container-switching — `claude-memory/project_d2b_retail_ui.md`); +**R5 movement-manager arc DONE** (2026-07-05; carried #167, R6/TS-42); **Track MP** perf +side track at MP0. Keep this paragraph ≤6 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 d42c58e0..c1b9d0e3 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -2061,7 +2061,9 @@ See divergence register **AP-59**. ## #138 — Teleport OUT of a dungeon loads the outdoor world incompletely + position desync -**Status:** ✅ ESSENTIALLY RESOLVED — position-desync FIXED via #145; server-object re-hydrate +**Status:** ✅ DONE / CLOSED 2026-07-10 — full dungeon round-trip (enter → navigate → exit) +user-gated; this closed #138 and landed M1.5. (Move to Recently closed on next tidy.) Prior +resolution below: position-desync FIXED via #145; server-object re-hydrate SHIPPED (`LandblockEntityRehydrator`, AP-48); avatar-vanish (symptom B) ACTUAL root found + FIXED + user-confirmed (`afd5f2a`, 2026-06-24 — skip the per-frame `RelocateEntity` while `PortalSpace`). Remaining collision residuals split out to **#152** (Holtburg/building portal-in @@ -2119,7 +2121,7 @@ Both are the **entity-lifecycle/render path across a teleport**, NOT the streami **Acceptance:** portal out of the 0x0007 dungeon → full outdoor world streams (trees/scenery present), **server objects (doors/NPCs/portals) render**, **own avatar renders across repeated round-trips**, collision works, position tracks (no avatar-vs-camera desync). -**2026-07-10 gate progress:** the ENTER + NAVIGATE half re-confirmed working by the user (retail-UI session — dungeon streams, renders, collides, navigable, doors work). The EXIT half of the round-trip gate — portal OUT to the outdoor world, and specifically a FAR-town exit (where the `#145-residual` far-town arrival cascade could surface) — was NOT exercised this session. #138 stays OPEN pending that exit gate; M1.5 does not land until it passes. +**2026-07-10 gate — PASSED, #138 CLOSED:** the user confirmed the full dungeon round-trip end-to-end — ENTER + NAVIGATE (dungeon streams, renders, collides, navigable, doors work) AND the EXIT (portal OUT to the outdoor world, world streams, collision holds, position tracks). This completes the #138 acceptance and lands M1.5. **Separate follow-up still open:** `#145-residual` (the far-town teleport-OUT arrival cascade) is a narrow far-teleport streaming edge case tracked on its own; it is NOT a #138 or M1.5 blocker and stays open for capture-harness-first work if it recurs. --- diff --git a/docs/plans/2026-05-12-milestones.md b/docs/plans/2026-05-12-milestones.md index 4f9e4c7b..1db2caa0 100644 --- a/docs/plans/2026-05-12-milestones.md +++ b/docs/plans/2026-05-12-milestones.md @@ -2,19 +2,16 @@ **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.** The -building/cellar demo is DONE + user-gated. M1.5 was EXTENDED 2026-06-13 to -include **dungeon support (full Phase G.3)** — dungeons initially didn't -work at all (issue #133), but that premise was refuted at design time -(commit `90786c19`: the dungeon LandBlock is flat-terrain and streams via -the existing pipeline), and G.3 has since **SHIPPED**: dungeons render, -stream, teleport-in, collide, light, and their doors work — each piece -individually user-gated (#133/#137/#95/#79/#93/#80 all CLOSED). M1.5's -dungeon-demo scenario is functionally met; M1.5 stays 🔵 ACTIVE / -not-yet-landed, awaiting ONE recorded end-to-end dungeon round-trip user -gate. The sole remaining live-code residual is the far-town teleport-OUT -arrival cascade (**#145-residual, REOPENED** — capture-harness-first). M2 -stays deferred. +**Currently working toward:** **M2 — "Kill a drudge."** **M1.5 — Indoor +world feels right LANDED 2026-07-10** (pinned writeup in the M1.5 section +below): the building/cellar demo (prior sessions) AND the full dungeon +round-trip (enter via portal → navigate → exit to the outdoor world) are +both user-gated. Dungeon support (full Phase G.3) shipped — render / stream +/ teleport-in / collide / light / doors, each individually gated +(#133/#137/#95/#79/#93/#80 CLOSED; #138 closed by the round-trip gate). +Carried forward as post-M1.5 follow-ups (NOT M1.5 blockers): the far-town +teleport-OUT arrival cascade (**#145-residual, REOPENED** — +capture-harness-first) and #116 slide-response feel-debt. --- @@ -197,7 +194,26 @@ close range and the player sees "You pick up the X." in chat. --- -### M1.5 — "Indoor world feels right" — 🔵 ACTIVE (building/cellar demo DONE; EXTENDED 2026-06-13 to include dungeon support / Phase G.3) +### M1.5 — "Indoor world feels right" — ✅ LANDED 2026-07-10 (building/cellar demo + full dungeon round-trip both user-gated; EXTENDED 2026-06-13 to include dungeon support / Phase G.3) + +**✅ M1.5 LANDED 2026-07-10.** The indoor world reads as solid end-to-end. +A player can walk into a building and climb a multi-floor inn without +sling-out or wall-clip; descend a cottage cellar and ascend without falling +through; and — the piece that extended this milestone — **enter a dungeon +via portal, navigate its rooms, and portal back out to the outdoor world**, +with walls blocking, lighting reading correctly, and no position desync. +Both demo halves are user-gated: the building/cellar demo across the 2026-06 +sessions, and the full dungeon round-trip (enter + navigate re-confirmed, +then the exit round-trip confirmed) on 2026-07-10. Dungeon support (full +Phase G.3) shipped with every sub-piece individually gated: teleport-in +(#133), collision (#137), portal-graph visibility (#95), doors (#187/#188), +lighting (#79/#93/#80). The indoor-physics workarounds (#90 stickiness + +`TryFindIndoorWalkablePlane` synthesis) were removed by A6.P4 — no duct-tape +left. **Explicit caveats carried forward (NOT M1.5 blockers — tracked as +their own follow-ups):** the far-town teleport-OUT arrival cascade +(#145-residual, REOPENED — a narrow far-teleport streaming edge case, +capture-harness-first) and #116 slide-response feel-debt. Next: **M2 — +"Kill a drudge."** **EXTENDED 2026-06-13 — dungeons pulled into M1.5 scope; G.3 SHIPPED.** The building/cellar demo (below) is DONE + user-gated. Attempting the dungeon @@ -381,10 +397,19 @@ patch. - **`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 +specifically the recently-shipped A4 + #89 + #91 + #92 — those land in main as the M1.5 baseline and shouldn't be revisited except as part of A6.P4 removal of the workarounds. +**Frozen as of M1.5 landing (2026-07-10):** all M1.5 phases are now frozen +per rule 2 — the indoor render port (Option A `DrawInside(viewer_cell)`), +the A6 physics/membership family + A6.P4 per-cell shadow architecture, A7 +indoor/dungeon lighting, and **full Phase G.3 dungeon support** (streaming +collapse/expand, teleport in/out, dungeon collision/lighting/doors). No +rework until M7 polish. Exempt from the freeze as still-open bugs (rule 2's +"actively broken" clause): #145-residual (far-town teleport-OUT cascade) and +#116 (slide-response) — these are tracked follow-ups, not frozen work. + **Estimated timeline:** 3–5 weeks calendar (17–26 days focused work). Bigger than a normal milestone because lighting is open-ended (less existing diagnostic infrastructure than physics). Could be shorter if the cdb @@ -401,7 +426,7 @@ unblocks that). --- -### M2 — "Kill a drudge" — ⏸ DEFERRED until M1.5 lands (incl. dungeons) +### M2 — "Kill a drudge" — 🔵 ACTIVE (M1.5 landed 2026-07-10) **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