Add defensive checks to FeaturePreprocessor::normalize(): - Return 0.0 with warning log for NaN/Inf input values - Clamp z-score output to [-10, 10] to prevent extreme values - Add 4 unit tests covering NaN, Inf, -Inf, and extreme value clamping Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>