From 6cbae48b4a578b6dd4be2b1f51136ba34d1dbc7e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 23 Mar 2026 06:35:24 +0000 Subject: [PATCH 1/3] Initial plan From a8c56b0de7457ce53729457559fe6f84caf09f82 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 23 Mar 2026 06:39:24 +0000 Subject: [PATCH 2/3] fix: store allTrainingIntervals in state instead of parsedIntervals Co-authored-by: MaximumTrainer <1376575+MaximumTrainer@users.noreply.github.com> Agent-Logs-Url: https://github.com/MaximumTrainer/SilverSprint/sessions/7bdcfd5d-a321-4c7d-92d6-c1d5488c5370 --- src/hooks/useIntervalsData.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/hooks/useIntervalsData.ts b/src/hooks/useIntervalsData.ts index 018daea..acbd8fb 100644 --- a/src/hooks/useIntervalsData.ts +++ b/src/hooks/useIntervalsData.ts @@ -156,9 +156,6 @@ export const useIntervalsData = (athleteId: string, accessToken: string, authTyp // 3. Parse Latest Session for Sprint Metrics const latestSession = activities[0]; - const parsedIntervals = latestSession - ? SprintParser.parseTrackSession(latestSession) - : []; // 4. Calculate Neural Fatigue Index (NFI) const todayVmax = latestSession?.max_speed || 0; @@ -370,7 +367,7 @@ export const useIntervalsData = (athleteId: string, accessToken: string, authTyp setData({ activities, - intervals: parsedIntervals, + intervals: allTrainingIntervals, wellness: latestWellness, nfi: currentNFI, nfiStatus, From f68ffecbca69f2a7ae5c83e250f05436f93aa570 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 23 Mar 2026 07:11:13 +0000 Subject: [PATCH 3/3] fix: fetch interval data from all 60-day activities, not just 20 Co-authored-by: MaximumTrainer <1376575+MaximumTrainer@users.noreply.github.com> Agent-Logs-Url: https://github.com/MaximumTrainer/SilverSprint/sessions/7c734a9f-8982-4599-817e-a3bcde5477cd --- src/hooks/useIntervalsData.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/hooks/useIntervalsData.ts b/src/hooks/useIntervalsData.ts index acbd8fb..e2d8b5b 100644 --- a/src/hooks/useIntervalsData.ts +++ b/src/hooks/useIntervalsData.ts @@ -154,7 +154,7 @@ export const useIntervalsData = (athleteId: string, accessToken: string, authTyp ?? wellnessEntries.find((w) => typeof w.weight === 'number' && w.weight > 0)?.weight ?? null; - // 3. Parse Latest Session for Sprint Metrics + // 3. Select latest session/activity for sprint metrics const latestSession = activities[0]; // 4. Calculate Neural Fatigue Index (NFI) @@ -201,11 +201,11 @@ export const useIntervalsData = (athleteId: string, accessToken: string, authTyp // 8. Race estimates based on best Vmax + training interval history const bestVmax60d = activities.reduce((best, a) => Math.max(best, a.max_speed), 0); - // Fetch structured interval data from the Intervals.icu API for each activity. + // Fetch structured interval data from the Intervals.icu API for each activity + // in the 60-day window. Only sprint-range efforts (≤ 400m) are included by the parser. // The /intervals endpoint provides accurate rep-level data (distance, max_speed, // moving_time) that is not present in the activity list response. - // We limit to 20 most-recent activities to keep the number of parallel calls reasonable. - const activitiesForIntervals = activities.slice(0, 20); + const activitiesForIntervals = activities; const intervalFetches = await Promise.allSettled( activitiesForIntervals.map(async (a) => { const res = await fetch(