Hey everyone,
It’s not clear that this is even a bug. But there is no better category ![]()
I’ve been digging into some FIT files generated by OpenRowingMonitor (ORM) because I noticed the active laps and rest intervals weren’t aligning quite right when creating intervals from laps. ORM’s files seem to be very standards compliant and using the “from laps” feature gets it damn near perfect, off-by-one, or rarely two. Which made me think it’s a programming/timing thing ![]()
While poking around in FitFileViewer and doing some research, I noticed that all the lap messages in the ORM files have the exact same timestamp (the start of the workout), while start_time marks the actual start of the lap.
This was ununtitive to me at first, but according to the Garmin FIT SDK documentation and forums:
"For files using the Summary First method, the timestamp approximates the file creation time. In either case, the timestamp should not be used to determine the start or end time of the summary message. To properly decode FIT Activity Files… the End Time for the summary messages should be calculated as:
end_time = start_time + total_elapsed_time"
Garmin notes that historically their devices used “Summary Last”, leading many platforms to assume that timestamp represents the end of the lap, and therefore failing to properly handle “Summary First” files.
My direct question is: How does Intervals.icu handle lap message parsing under the hood? Does the parser rely on the timestamp to derive the lap span/anchor records, or does it calculate start_time + total_elapsed_time as Garmin recommends for Summary First files?
It is totally plausible that ICU is doing this correctly, and this is actually intended behaviour (top level “intervals” vs “laps” being parsed, etc). It would align with how Strava is doing things too (though I do not have faith they would actually answer the question if I asked lol).
Just thought I’d ask!
Thanks!

