docs(milestones): promote indoor work to M1.5 — primary focus

Continued indoor testing through 2026-05-20 surfaced a deep family
of physics + lighting bugs that span buildings AND dungeons. Today's
session shipped 5 surgical fixes (A4 + #89 + #90 + #91 + #92) that
close the user-visible "walls walk through at Holtburg inn" symptom,
but #90 specifically is a CLAUDE.md-rules workaround (sphere-overlap
stickiness on top of point-only cell containment) added without prior
approval. The underlying issue (BSP push-back distance probably
diverges from retail) hasn't been measured. Plus the umbrella #83
(indoor multi-Z walking) has been open since 2026-05-19 with multiple
aborted fix attempts; plus indoor lighting (#80 + #81 + new #93 +
#94) has been deferred as "M7 polish" but is actually part of the
same indoor-experience problem.

Promoting to a milestone of its own forces the work to be central,
retail-anchored, and complete — not another whack-a-mole patch.

Milestone M1.5 — "Indoor world feels right":
  Demo: enter Holtburg Sewer through the in-town portal, navigate
  through 5-7 rooms with stairs + a multi-Z chamber, exit back to
  town. Walls block. Stairs work. Items block. Lighting reads
  correctly. Cell transitions smooth.

  Phases:
    A6 — Indoor physics fidelity (cdb-driven)
    A7 — Indoor lighting fidelity (RenderDoc + retail-decomp driven)

  Issues in scope: #80, #81, #83, #88, #90 (workaround removal),
  #93 (new lighting umbrella), #94 (held-item spotlight),
  + TryFindIndoorWalkablePlane synthesis removal.

M2 ("Kill a drudge") deferred until M1.5 lands.

This commit updates:
  - docs/plans/2026-05-12-milestones.md (M1.5 block inserted, M2 moved
    to deferred status)
  - docs/plans/2026-04-11-roadmap.md (A6 + A7 sub-pieces detailed)
  - CLAUDE.md (Currently working toward updated to M1.5, M2 paragraph
    marked deferred, M1.5 baseline shipped paragraph added)
  - docs/ISSUES.md (#80, #81, #83, #88, #90 tagged M1.5 scope;
    new #93 indoor lighting umbrella + #94 held-item spotlight filed)
  - docs/research/2026-05-21-open-items-pickup-prompt.md (landscape
    table reorganized around M1.5 phases)

A6 + A7 specs to be drafted in the next session(s).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-05-21 10:32:24 +02:00
parent 23ab17362a
commit 6d18d879a2
5 changed files with 272 additions and 26 deletions

View file

@ -85,6 +85,99 @@ Plus polish that doesn't get its own phase number:
## Phases ahead — agreed order
### Milestone M1.5 — "Indoor world feels right" (active, opened 2026-05-20)
The current top of the work order. Two phases (A6 + A7) inside one
milestone. M2 ("kill a drudge") is deferred until M1.5 lands —
drudges live in dungeons and the M2 demo target requires solid indoor
navigation. Full milestone block in
[`docs/plans/2026-05-12-milestones.md`](2026-05-12-milestones.md).
**Today's pre-M1.5 baseline** (2026-05-20 — committed in this
session): A4 multi-cell BSP iteration (`691493e`), #89 sphere-overlap
in CheckBuildingTransit (`7ac8f54`), #90 sphere-overlap stickiness in
ResolveCellId (`4ca3596`**WORKAROUND**, scheduled for removal in
A6.P4), #91 indoor cell shadows in FindObjCollisions (`c0d8405`),
#92 server cell id at player-mode entry (`23ab173`). 1147 + 8 baseline
maintained. Holtburg inn + cottage interiors visually verified
2026-05-20.
#### Phase A6 — Indoor physics fidelity (cdb-driven)
**Hypothesis:** Our `BSPQuery.FindCollisions` 6-path dispatcher (and
its callers) produce collision responses that systematically diverge
from retail's. Symptoms in different geometry (doorways, stairs,
multi-Z, cellars, dungeons) share one underlying mechanism — most
likely push-back distance / direction / CP synthesis.
**Investigation methodology:** cdb-attached comparison. Toolchain
documented in CLAUDE.md's "Retail debugger toolchain" section. Used
successfully 2026-04-30 for the steep-roof case. Matching binaries
(acclient.exe v11.4186) + PDB present.
**Sub-pieces (slices):**
- **A6.P1 — cdb probe spike** (~3 days). Build cdb scripts capturing
retail's per-tick state at 9 scenarios:
- 4 building sites: Holtburg inn doorway, inn stairs, inn 2nd floor,
cottage cellar.
- 5 dungeon sites: Holtburg Sewer entry portal, first stair descent,
inter-room portal transition, open central area, dark corridor.
Breakpoints on `set_collide`, `step_sphere_up`, `step_sphere_down`,
`transitional_insert`, `set_contact_plane`, `validate_walkable`.
Mirror with our equivalent probes (`[indoor-bsp]`, `[cp-write]`,
new `[push-back]`).
- **A6.P2 — Analysis report** (~1 day). Quantify the per-call-site
gap. Identify which BSP path(s) over- or under-correct. Output:
13 specific bug findings with retail decomp anchors.
- **A6.P3 — Fix the BSP correction paths** (~35 days). Surgical
fixes informed by A6.P2 data. Likely touches `BSPQuery.AdjustSphereToPlane`,
`AdjustOffsetToPlane`, Path 5 / Path 6 branches, sub-step state
mutation.
- **A6.P4 — Remove workarounds** (~1 day). Revert #90 sphere-overlap
stickiness in `PhysicsEngine.ResolveCellId`. Delete
`Transition.TryFindIndoorWalkablePlane` + its caller in
`FindEnvCollisions`. Verify behavior holds without the workarounds.
#### Phase A7 — Indoor lighting fidelity (RenderDoc + retail-decomp driven)
**Hypothesis layers (less mapped than physics):**
- Per-cell environment-light tag association — indoor cells should
inherit only their own env lights, not outdoor day-cycle.
- Light visibility culling — what lights actually contribute to each
cell's render.
- Per-entity light direction transform — held-item-spotlight bug
(#L-spotlight) is per-entity attribution gone wrong.
- Static-stab atmospheric inheritance (#81).
**Investigation methodology:** less existing infrastructure than
physics. Requires:
- New `[indoor-light]` probe (per-frame dump of active lights for the
player's cell + each visible entity: position, color, attenuation,
direction).
- RenderDoc frame capture at the same 9 scenarios as A6.
- Grep retail's `Render::lighting_*` family in
`acclient_2013_pseudo_c.txt` to map per-cell light selection logic.
**Sub-pieces (slices):**
- **A7.L1 — Lighting probe spike** (~35 days). Build `[indoor-light]`
probe. Capture baselines at all 9 scenarios. RenderDoc captures
paired with each. Decomp study of retail's lighting selection.
- **A7.L2 — Analysis report** (~12 days). Likely surfaces 24
distinct bugs across the lighting issues.
- **A7.L3 — Fix lighting paths** (~37 days). Wide variance because
the surface area is unknown. Could touch indoor env-light parsing,
`LightingHookSink`, WB rendering pipeline, shader uniforms.
**M1.5 acceptance criterion (shared by A6 + A7):** Walk Holtburg Sewer
end-to-end. Walls block (physics). Stairs work (physics). Items
block (physics). Lighting reads correctly throughout (lighting).
Cell transitions are smooth (physics). No regressions in M1 outdoor
behavior. Estimated 1726 days focused work, 35 weeks calendar.
**Specs:** to be written 2026-05-20 (after milestone commit lands).
---
### Phase A — Foundation (in progress)
**Goal:** walk across 10+ landblocks without crashes, without hitches at landblock boundaries, and without framerate cratering.