Concept2 RowErg FIT import ignores lap-defined work/rest intervals

Summary

When importing Concept2 RowErg .fit files into Intervals.icu, the workout’s work/rest intervals are already explicitly defined in the FIT “lap” messages, including lap.intensity = active (work) vs rest (recovery). Intervals.icu appears to ignore these lap boundaries / intensities and clumps recovery time into the adjacent work intervals, producing incorrect interval metrics and summaries.

Environment

  • Device: Concept2 RowErg (PM5)
  • File: FIT exported from Concept2 Logbook / ErgData
  • Platform: Intervals.icu import (web)

Steps to Reproduce

  1. Perform an interval workout on the RowErg (e.g., 6 x 1:00 work / 1:00 rest, or a ladder like 1–6 min with 1 min rest).
  2. Export the workout as a .fit file from Concept2 Logbook / ErgData.
  3. Import the .fit file into Intervals.icu.
  4. View the “Intervals / Laps / Splits” and the computed interval stats.

Expected Behavior

  • Intervals.icu should use the FIT lap messages as authoritative segmentation:

    • Each interval and rest is represented as its own lap.
    • Work laps: lap.intensity = "active"
    • Rest laps: lap.intensity = "rest"
  • Interval summaries should reflect only work laps for work interval metrics, and show rest laps separately.

  • Any workout structure based on laps should remain intact.

Actual Behavior

  • Intervals.icu ignores the lap-defined work/rest structure and frequently:

    • merges rest laps into adjacent work laps, or
    • shows fewer/longer intervals than actually performed, or
    • computes interval stats (pace/power/HR/etc.) over work+rest combined.
  • This produces systematically wrong interval metrics.

Impact

This materially breaks rowing analysis:

  • Work interval pace/power is diluted by rest, appearing slower/weaker than reality.
  • Interval comparisons and trend tracking become misleading for athletes/coaches.
  • Any derived metrics / training load that depend on interval structure become inaccurate.

Evidence

The .fit file includes lap messages that already encode the interval structure, including:

  • Lap start times and durations
  • Per-lap stats
  • lap.intensity distinguishing work (active) vs recovery (rest)

Intervals.icu import results do not match that structure.

Suggested Fix

For Concept2 indoor rowing FIT imports:

  1. If lap messages exist, treat them as the primary segmentation.

  2. If lap.intensity is present:

    • active → work lap
    • rest → recovery lap
  3. Only fall back to record-based heuristics when laps are absent.

It’s always more beneficial to show screenshots and tell in your own words what’s the problem.

Intervals don’t use lap metrics, because then fixes to data wouldn’t be represented. There is also an auto detection of intervals.

If you just want to use laps, use the “use laps” function.

Thanks for the reply. Here’s the evidence with screenshots:

The issue persists with every workout, but here is a concrete example. I did a 6/3/3/1/1/1 minute ladder with 2-minute rests. The FIT file has 11 laps with lap.intensity values (active vs rest). I have both “Use laps for intervals” and “Keep all laps” enabled in the settings, yet Intervals.icu shows completely wrong intervals.

What the FIT file contains:

Lap Intensity Duration Avg Pace
1 active 6:00 2:00
2 rest 2:00
3 active 3:00 1:57
4 rest 2:00
5 active 3:00 1:58
6 rest 2:00
7 active 1:00 1:46
8 rest 2:00
9 active 1:00 1:48
10 rest 2:00
11 active 1:00 1:47

What Intervals.icu shows:

  • Work intervals: 8m2s, 4m56s, 2m57s, 2m3s, 2m58s, 2m56s, 55s.
  • Recovery: 1s, 2s, 4s, 2m3s, 2s, 4s

The 2-minute rests have been collapsed to seconds, and the work intervals have absorbed almost all the rest time. My 6-minute interval became 8m2s.

The Concept2 PM5 record resolution is per-stroke. During rest, there are almost no records (2-4 messages per 2-minute rest, with many metrics like HR not being written at all). When Intervals.icu ignores the lap boundaries and infers intervals from record density, the sparse rest records get merged into adjacent work.

Here is what it should look like:

This pace chart from a tool I coded shows the gray rest bands at exactly the right positions and duration. The lap structure in the FIT file is correct, it’s just not being honored.

The ask:

When “Use laps” is enabled for Concept2 FIT files, I just want the actual lap boundaries imported and lap.intensity field respected. It already comes correct from PM5 computer. The data is already there, it just needs to be read instead of inferred.

Happy to share the FIT file if that helps debug.