Changelog (iOS) — 0.8.8

Time in zones
Milo now shows time spent in heart rate zones across all your running. You can see aggregated time in zones for 7 days, 1 month, year to date, or 1 year in the data list view, and for each activity in the activity detail view. Zones are calculated using extrapolated HealthKit samples, giving far more realistic results when HealthKit data is sparse. This upgrade includes sophisticated HealthKit de-duplication, prioritizing Milo data and reconciling heart rate gaps for consistent zone distributions.
HealthKit improvements
This update includes a deep HealthKit refactor. Heart rate samples are cleaned, corrected, extrapolated where needed, and workouts are fully de-duplicated across sources like Strava or Garmin. Elevation, weather, and additional metadata are now written to HealthKit workouts. Routes are now saved to HealthKit as well, allowing Milo workouts to display their actual route directly in the Health and Fitness apps. These improvements also increase accuracy of training load, weekly volume, and running style components.
Bug fixes and improvements
HealthKit refactor and full data cleanup
Extrapolated heart rate samples for more accurate time in zones
Advanced de-duplication prioritizing Milo and ranking others by HR sample quality
Added time in zones to activity detail views
Merged Z6 into Z5 to use five heart rate zones which is common practice
Added setting for week start day (Monday or Sunday) which is respected for weekly volume stats now
Fixed issue that moved some watch activities to trash and restored affected items
Added one-time housekeeping on watch app launch
Fixed biometrics race condition before activity start
Improved best race detection for running style
Improved de-duplication for running stats and weekly volume
Fixed running style component not showing race tab when no race found
Added weather and elevation to HealthKit workouts
Added route writing to HealthKit workouts (now visible in Health and Fitness apps)
Fixed offsets not applying to adaptive workout library items
Fixed workouts losing Milo Pace and using hard coded values
Saved average heart rate to laps in API and added max bpm
Removed match percentage label in running style
Fixed empty status in summary view
Cleaned up padding and sizing in data tab descriptions
ActivityFormatter fixes for distance and time
Switched training load component to default to HealthKit as the source
Improved weight fetching for activities
Improved running style race selection
Added live locations and route write access for workout routes
Ensured distance, elevation, and metadata are fully written to HK workouts
Time in zones formatting improvements, zone labels, fallback logic, and chart updates