mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-09 04:50:59 +00:00
The canonical picker keyed a session on sport, start, end and duration. Only the workout list selected the end timestamp; the Coach narration, the per-sport baseline and the deep-link cluster passed rows without it, so those rows carried no session identity at all and the duplicate survived. One record counted once in the list and two or three times everywhere else, including in the averages a person is compared against. Drop the end timestamp from the identity. On a workout with pauses it measures wall-clock time while the duration counts only moving time, so two re-sends of one session can differ in that field alone and the stricter key rejected a genuine match. It also bought nothing in exchange: nobody starts a second workout of the same sport in the same instant with the same duration. The deep-link cluster now selects the duration it needs. A structural guard freezes the call-site set and records which file owns each caller's select, so a new surface cannot join the set without fetching the identity, and the identity cannot grow a field only some callers fetch.