- GameViewAdapter: build from tileState/terrainData buffers and game
updates (players, defense posts, embargo/alliance) instead of Game +
TerrainMapData; add DefensePostUnit/PlayerLiteView and drop config().
- Worker: keep local renderTileState; tileUpdateSink receives packed
bigint and updates buffer + dirty queue; no terrain map load in worker.
- Proxies: send view size/transform only when changed, inline in
render_frame (optional viewSize/viewTransform); remove separate
set_view_size/set_view_transform messages.
- Simulation: remove main-thread RAF heartbeat loop; worker uses
scheduleSimPump() on heartbeat/addTurn to coalesce ticks.
- GroundTruthData: take defensePostRange at construction; Territory
renderer passes it through; remove runtime defensePostRange change check.
- GameRunner: tileUpdateSink(packedTileUpdate: bigint); add
hasPendingTurns().