The Phase 5 / 6 migration moved 7 kinds (fence, column, spawn, item,
elevator, stair, roof) to the registry's `def.floorplan` path, but the
legacy SVG layers in `floorplan-panel.tsx` were left mounted with empty
entry arrays — dead code carrying ~3k lines of useless cost in the diff.
Removed:
- `FloorplanGeometryLayer` (~1.7k lines): inline component rendering
walls / slabs / ceilings / openings from `wallPolygons` /
`slabPolygons` / `ceilingPolygons` / `openingsPolygons` — all
permanently empty stubs after the migration. Wall / slab / ceiling
/ door / window now render via `FloorplanRegistryLayer`.
- `FloorplanFenceLayer` (~265 lines): fence entries always empty
post-migration; fence renders via the registry.
- `FloorplanElevatorLayer` (~420 lines): elevator entries always
empty post-migration.
- `FloorplanNodeLayer` (~415 lines): rendered items / spawns / stairs.
Items + spawns are registry-driven; stair only needed the in-flight
preview, which is now mounted directly via `FloorplanStairLayer`
(preserved as a sibling of the registry layer).
- `FloorplanItemImage` (~40 lines): internal helper used only by
`FloorplanNodeLayer`.
- `floorplan-roof-layer.tsx` (113 lines): roof / roof-segment now
registry-driven.
Net: -2,989 lines from `floorplan-panel.tsx`, plus the deleted roof
layer file. The remaining 14k-line monolith still owns the orchestration
state (selection lookups, marquee, helper lifecycles, hit-test plumbing)
— that's a separate teardown.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>