May 2nd, 2026

Week of May 2

IntervalCoach 1.7 for iPhone & iPad shipped to the App Store. A major release that brings the full webapp experience to iOS: Apple Health workout sync (per-sport opt-in) so your training flows automatically into Intervals.icu, send-to-Apple-Watch for any planned workout, a native Analytics screen with fitness trend, eFTP history with the projection plume, power profile radar, critical speed, wellness, training-load distribution, and Max peer benchmarks (tap any chart to read the exact value at a date), a Calendar with month-grid view and sport-colored dots that lets you move/delete workouts in-app instead of bouncing to Intervals.icu, AI-generated race pace plans on A/B/C events, an agent Decisions log so you can see what your coach decided and why, Coach+ chat polish with richer signal cards and a tool-approval flow for plan changes, public profile sharing, full localization to 12 languages, and a top-to-bottom Settings rewrite. Plus countless polish, accessibility fixes, and faster startup.

Your FTP test preference now actually drives the test you get. Picking "20-minute test" in Settings used to still produce a ramp-shaped workout — only the description changed. The planner now reads your preference correctly and the 20-minute test is emitted as a Zwift FreeRide step so your trainer drops out of ERG for the 20-min effort. Without that, ERG would have held you at the prescribed wattage and the test could never have discovered an improvement.

Coach+ got a lot more honest and reliable this week. Tool actions that need approval no longer count against your monthly chat budget and now go through even if you're at your cap. Coach+ also pushes back on workout requests that conflict with your adaptation status — if today is rest, capped at Z2, or running a TSS multiplier below 1.0, it now names the active signal driving that constraint and proposes an alternative within the cap before generating anything (you can still override). It can no longer promise an interval session in text but quietly generate an endurance ride (the workoutType argument now must match what was promised, with mappings for terms like "blokken" → sweet_spot/threshold, "drempel" → threshold, "duurrit" → endurance). Cross-day swaps now run as a single atomic call so asking to move Friday's workout to Thursday doesn't leave both on the calendar. The chat agent also no longer goes silent after running tools — every reply is guaranteed to contain text explaining what's about to happen.

Dashboard, daily outlook, and calendar now stay in sync. Several fixes shipped this week to stop the three surfaces from contradicting each other: Daily Outlook no longer fabricates dramatic "reduced to 50% TSS, max Z3" copy when the system actually left the workout unchanged; turning off "Daily Adaptation" no longer also stops your workouts from being pushed to Intervals.icu; a short commute or warm-up ride no longer wipes the day's scheduled session from the dashboard (sport, duration, AND TSS now have to roughly match for a planned workout to be marked done); athletes without a connected wearable now see an honest "unknown" recovery state instead of a falsely confident "looks good"; and the "Synced X ago" timestamp finally reflects the most recent fitness/wellness refresh instead of getting stuck at yesterday's narrative cache.

Training plan accuracy fixes. Race week now includes an opener intensity session for athletes who train 2-3x/week even when the race itself lands on a training day. Peak week TSS targets for high-fitness athletes with limited training hours no longer come out unreachable (the availability cap now activates by default whenever planned weekly hours are known). Multi-session training days no longer silently lose their endurance session when the planner trims for spacing — days with a dedicated strength slot are now treated as still-training days for the spacing calculation. The Phase Roadmap no longer shows a one-week Base island sandwiched between two Build segments. Multi-day holiday events stop leaking into the following week. Workout rotation now enforces real variety for 2-3x/week athletes — the recency penalty now also counts the number of training sessions between repeats, translating to roughly 15 weeks of distinct workouts before any one returns.

Workout rendering fixes. HR-based workouts crossing two zones (e.g. Z1-Z2 easy run) were silently collapsing to just the upper zone — the writer now emits the combined "Z1-Z2 HR" form so Intervals.icu honours both ends. Run workout charts no longer collapse to a flat 50% bar when pace targets carry decimals (Tinman, McMillan, Pfitzinger), and the Y-axis label correctly shows "Threshold" for runs, "CSS" for swims, "FTP" for cycling. Swim workouts no longer say "Rest 25-50mtr 65% pace" between hard intervals — recovery is now rendered as time-based wall rest. AI-generated workout titles can no longer contradict the planned workout type (a VO2max session is titled VO2max, in every locale).

Reliability and recovery-signal fixes. Stretching, yoga, e-bike commutes, and weight-training sessions no longer count as "consecutive training days" in the readiness engine. The subscription card now shows the correct expiry date when Stripe has a fixed cancellation date set. The HealthKit sync no longer logs spurious zero-value rejections for fields Apple uses 0 as a "no measurement" sentinel for. Daily Outlook and Today's Plan stay consistent in the first day or two of a new weekly plan (the freshness carve-out is gone now that signals do their own debouncing), and when signals shift to "skip" after the morning cron ran, the outlook now writes honest copy acknowledging the workout is still on the calendar instead of asserting a deletion that didn't happen.

On the blog: What Kristen Faulkner's AI Experiment Means for the Rest of Us — the Olympic road race champion has been coding 10+ hours a day building an AI training model on her own biometric history, and won three Pan-American golds off the back of it. A note on what that signals for the rest of us — and why most athletes shouldn't have to write the code themselves.

Full changelog with all the details: https://www.intervalcoach.app/changelog
As always, let me know if you run into any issues or have feedback!