84eff1f3b0
Extract _haversine_m from the inline block in _gps_speed_kmh, add _spatial_downsample (keep one sample per 10 m traveled, GPS haversine primary / speed×Δt fallback, indoor activities unchanged), and wire it into build_timeseries() after the 1 s dedup loop. Add --downsample-timeseries migration flag to bincio render that applies the same downsampling to existing stored timeseries files without re-extracting from original FIT/GPX files.