Implement the D-230 on-demand derive phase (data-production half). New
atlas/shell.rs derives a sparse building shell for one 64 m chunk from the
plan-phase BuildingPropertyTags: rectangle-containment (footprint ∩ chunk) ×
z-range (per-floor voxel bands from FloorExtent), in a quarter-ground z frame
(D-110). Walls on the footprint perimeter, FloorSlab on interior floor bases,
Roof above the top floor; interior air is Void and never stored.
- gen_queue.rs: GenWorkItem::FillChunk carries pre-resolved block_tags +
block_pos + sub_chunk (run_work_item stays cache-free, mirroring
GenerateSkeleton); GenCompletion::ChunkFilled carries Box<FilledChunk>; the
arm calls shell::fill_chunk; pure build_fill_chunk_item(&QuarterWorldState,..)
added.
- plugin.rs: ChunkFilled handler accepts the shell (trace-only — the Phase-5
rendering consumer and the on-demand streaming dispatch trigger are deferred;
do not build on legacy chunk_streaming.rs before Phase 5, gated by T-962).
Tests: determinism, sparsity-vs-dense-volume, wall/floor/roof correctness,
basement z-origin, sub-chunk clipping, full submit→drain→ChunkFilled round-trip.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>