# Indoor Cell Rendering — Phase 2 Verification

**Date:** 2026-05-19
**Outcome:** ✅ Floor renders in Holtburg Inn. User visually confirmed.
**Predecessor:** [Phase 2 cause report](2026-05-19-indoor-cell-rendering-cause.md).

---

## Probe re-capture

After applying the one-line WB fix at [`ObjectMeshManager.cs:1230`](../../references/WorldBuilder/Chorizite.OpenGLSDLBackend/Lib/ObjectMeshManager.cs:1230):

| Metric | Pre-fix | Post-fix |
|---|---|---|
| `[wb-error]` lines | 385 | **0** |
| `[indoor-upload] NULL_RESULT` | 55 | **0** |
| `[indoor-upload] FAILED` | 0 | 0 |
| Total `[indoor-upload] requested` | — | 1157 |
| Total `[indoor-upload] completed` | — | **1157** |
| Holtburg (`0xA9B4`) requested | 123 | 123 |
| Holtburg (`0xA9B4`) completed | 97 | **123** |
| Holtburg (`0xA9B4`) missing | 26 | **0** |

100% success rate on EnvCell uploads. Zero swallowed exceptions. Zero null returns.

## Visual confirmation

User walked into Holtburg Inn (and other nearby buildings whose cells were previously failing) and confirmed:

> "Yes floors are rendering now inside houses."

The previously-failing cells (`0xA9B40100`, `0xA9B40111`, `0xA9B40112`, `0xA9B40117`, `0xA9B4011B`, etc.) now upload successfully, the dispatcher finds their render data, and the floor / wall / ceiling geometry renders.

## Regressions checked

- Outdoor terrain still renders correctly. ✓
- Outdoor scenery (trees, rocks, stabs) still render. ✓
- NPCs, mobs, world entities still render. ✓
- Build clean, no new warnings. ✓
- No new test failures. ✓

## Other observations during the walk

The user reported **other indoor-related bugs** that are now observable because the floor is rendering. These are all **pre-existing** (not caused by this Phase 2 fix) but were hidden by the missing-floor bug. They are filed as separate issues for follow-up phases:

1. See-through floor — other buildings visible "below" / "through" the rendered floor (depth/stab-culling).
2. Spot lights on walls indoors (point-light positioning).
3. Camera on 2nd floor goes very dark (per-cell ambient or trigger).
4. Static building stabs don't react to atmospheric lighting changes (shader path).
5. Some slope terrain lit incorrectly (terrain normal calculation).
6. Collision "blocked by air" indoors (cell BSP misalignment).
7. Walking up stairs broken (stair-step physics on EnvCell geometry).
8. Pass through walls from outside→in (one-sided wall collision).
9. Click selection penetrates walls (WorldPicker raycast not testing cell BSP).

These nine items are tracked in `docs/ISSUES.md` with proposed phase groupings. None block Phase 2 closure.

## Conclusion

**Phase 2 of the indoor cell rendering fix is complete.** The single-root-cause exception was identified via the diagnostic chain shipped in Phase 1 + Phase 2, and resolved with a one-line guard at the WB call site that prevented blind `TryGet<Setup>` deserialization of GfxObj-typed stab ids.

Total runtime for Phase 2: ~4 client launches.
