Activity detail now shows comprehensive interval data — work intervals are visually distinguished from rest, with expandable rows showing power (NP, W/kg, L/R balance, work kJ), running metrics (stride, GAP, max speed), plus TSS, decoupling, elevation, and temperature
Fixed race day email not being sent when a warmup workout was also scheduled on the same day — the system could pick up the workout first and never detect the A/B race event, resulting in a regular training email instead of race day guidance
Fixed daily adaptation replacing pre-race warmups, cooldowns, and FTP tests with endurance rides — these user-intentional workouts are now protected from automatic adaptation
Fixed Coach+ chat erroring on custom questions — improved error handling for tool calls so the AI recovers gracefully instead of showing "Something went wrong"
Fixed weekly plan sometimes generating workouts much longer than the available time slot — the AI occasionally produced descriptive step lines without duration markers, making the duration estimate unreliable; the system now detects this and falls back to a template workout that respects your schedule
Fixed interval/lap data not appearing in activity details despite the recent fix — the Intervals.icu API response format was parsed incorrectly, so interval power, HR, cadence, and pace data was silently dropped
Fixed training plan showing negative TSS and training hours for future weeks when your current fitness exceeds what the goal requires
Fixed dashboard occasionally crashing when AI generates JSON with trailing commas in goal analysis or readiness messages
Fixed activity detail page failing to load for Strava-sourced activities — the intervals endpoint returns an error for Strava activities due to API restrictions, which now gracefully falls back to showing the activity without interval data
Fixed post-workout analysis misclassifying sweet spot and threshold workouts as endurance — the AI now receives a metrics-based classification hint so workouts like TrainerRoad's "Rosa" (IF 0.87) are correctly identified as sweet spot
Fixed navigation tabs being invisible on tablet screens — inactive tabs blended into the header background, making it appear only the active page was selectable