92126df420
Drive, crow and aircraft follow-cameras write the pose directly each frame and never fire `change`. Fog lived on that event, throttled at 2% of altitude, so a descent under a follow camera fell back to the one-hertz clock and stepped the haze four times instead of easing it. A 300 ms fog dip got at most one sample. The recompute now runs on the city's tick, after `roadTraffic.tick` and the actor/aircraft `setPose` writes — the same pump `applyReliefRamp` already uses, for the same reason: a camera-dependent term cannot live on an event the descent does not fire. The 2% altitude throttle is unchanged, so a chapter flight is still a few dozen recomputations rather than sixty a second. Orbit `change` still drives handover and prefetch; those are overview-only. `aerialFogMoved` is the throttle as a function of two altitudes. `followCameraFog.test.ts` writes a Drive pose without `controls.update`, asserts `change` does not fire, and still pulls the fog in from the new pose.