Round 2 orders 1-6:
- topology.ts: belt neighbour analysis -> straight/cornerA/cornerB/merge,
one InstancedMesh per (def x shape), flow field baked per shape. Corners
sweep a quarter-arc; merges get inlet arrows.
- cargo follows the corner arc: `t` is progress along the tile, so walking
items straight through the centre made them cut corners and pop in at the
wrong edge. They now enter at the feeding edge (verified 0.089-0.248 off
the centreline where straight pins to 0.000).
- heat.ts + entities.ts: dull-red body ramp, rising shimmer column, throttle
(idle AND GLB clips slow together), scram (dead-dark + amber, frozen) and
a restart path that restores what scram zeroed.
- buffer tanks show fill from their share of bandwidth.stored / bufferCap.
- AnimationMixer plays clip 0 looped; rigged GLBs clone via SkeletonUtils so
instances don't share a skeleton.
- exact cargo interpolation via BeltItem.id, order-matching kept as fallback.
- multi-mesh belt GLBs merge with groups (2 materials, 1 draw call) instead
of rendering only the first mesh.
MachineDef.color is wired to the BODY, not the accent, against the letter of
the orders: all 21 values DATA authored are industrial chassis neutrals per
codex/§8, and wiring them to the emissive makes every machine glow muddy and
kills the two-material rule. Flagged in NOTES for the orchestrator to settle.
500 entities + 2,000 items still at 3.6ms/frame (4.6x headroom), 5 draw calls.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>