7ee923b0e6
Previous behavior gated liveCalibration.valid on calibrationd's own sm.all_checks(). Upstream freq glitches (e.g. carState polling-pattern artifacts) flapped liveCalibration.valid to False, which cascaded into locationd: its filterInitialized check requires sm.allAliveAndValid(), so flapped valid kept locationd uninitialized. While uninitialized, locationd still published liveLocationKalman but with empty/garbage angularVelocityCalibrated fields. paramsd's Kalman drank the garbage and converged to steerRatio ≈ 0, stiffnessFactor ≈ 0 — which controlsd clamped to 0.1 each and fed into VM.calc_curvature, producing nonsense curvature commands and visibly jerky steering. "valid" semantically asks whether the calibration data is trustworthy — that's a question about convergence (calStatus == calibrated), not about input freshness. Switching the gate removes the cascade: once calibration completes, liveCalibration.valid stays True stably, locationd initializes, paramsd gets clean observations, steerRatio converges to the real value. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>