docs: M1.5 "Indoor world feels right" LANDED 2026-07-10 — advance to M2

User-gated the full dungeon round-trip (enter via portal -> navigate rooms ->
exit to the outdoor world), completing the #138 acceptance. Both M1.5 demo
halves are now confirmed: building/cellar (prior sessions) + full dungeon
round-trip (2026-07-10). Milestone-crossing artifacts per the milestones-doc
discipline:

- Pinned M1.5 landing writeup + flipped header to  LANDED; caveats explicit
  (#145-residual far-town teleport-OUT + #116 slide-response carried as
  post-M1.5 follow-ups, NOT blockers).
- Freeze list applied: all M1.5 phases (indoor render Option A, A6/A6.P4
  physics, A7 lighting, full Phase G.3 dungeon support) now frozen per rule 2.
- M2 "Kill a drudge" flipped to ACTIVE; first ports = CombatMath.ComputeDamage
  (F.3) + inventory panel (F.2) + combat anim (L.1c).
- CLAUDE.md "currently working toward" advanced to M2.
- #138 closed (user gate).

No demo video (per the user's standing preference).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-07-10 09:58:48 +02:00
parent 113569b482
commit 9a772d2b2a
3 changed files with 56 additions and 32 deletions

View file

@ -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

View file

@ -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.
---

View file

@ -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:** 35 weeks calendar (1726 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