2026-06-06 to 2026-06-13 Live TrainingPeaks Luca Workout Analysis
Report scope
- Athlete: Sidney
- TrainingPeaks athlete ID: 1575220
- Review window: 2026-06-06 through 2026-06-13 inclusive
- Filter used for analysis: TrainingPeaks activities tagged
luca - Main target protected by this review: Ghost of the Gravel, 2026-06-27
Evidence and live data connection
OpenClaw was connected to live TrainingPeaks data for this review.
- Authentication check:
tp-mcp auth-statusreturned authenticated. - Authenticated account:
luca@materiaal.cc - Athlete ID confirmed by TrainingPeaks MCP config: 1575220
- Primary live data path used: local TrainingPeaks MCP Python environment at
/Users/notgeoff/Documents/projects/coachluca/_system/trainingpeaks-mcp, usingtp_mcp.client.TPClientand explicit Sidney athlete endpoints. - Explicit endpoint pattern used:
/fitness/v6/athletes/1575220/workouts/YYYY-MM-DD/YYYY-MM-DD - Reason for explicit endpoint: the helper path
tp_get_workouts()hit anensure_athlete_id()runtime bug in this environment, so the report used the verified direct Sidney endpoint instead. - Workout analysis source: Peaksware workout analysis endpoint through the same authenticated client.
Evidence artifacts for reviewer follow-up:
- Raw live TrainingPeaks fetch:
tmp/trainingpeaks-live-2026-06-06-to-2026-06-12.json - Compact live summary:
tmp/trainingpeaks-live-2026-06-06-to-2026-06-12-summary.json - Per-workout analysis files:
tmp/tp-analysis-2026-06-06-to-12/ - June 13 live TrainingPeaks fetch:
tmp/trainingpeaks-live-2026-06-13.json - June 13 compact summary:
tmp/trainingpeaks-live-2026-06-13-summary.json - June 13 workout analysis files:
tmp/tp-analysis-2026-06-13/workout_3779663600.jsonandtmp/tp-analysis-2026-06-13/workout_3779663600-summary.json - Completed Luca-tagged workout analysis files:
tmp/tp-analysis-2026-06-06-to-12/workout_3775054591.jsontmp/tp-analysis-2026-06-06-to-12/workout_3775055445.jsontmp/tp-analysis-2026-06-06-to-12/workout_3779663570.jsontmp/tp-analysis-2026-06-06-to-12/workout_3779663579.jsontmp/tp-analysis-2026-06-06-to-12/workout_3779663588.jsontmp/tp-analysis-2026-06-06-to-12/workout_3779663597.jsontmp/tp-analysis-2026-06-13/workout_3779663600.json
Limitations:
- The live analysis files contained power, GPS, speed, distance, elevation-related data, and summary TrainingPeaks metrics. Heart-rate analysis was not available from the June 7-12 downloaded analysis files. June 13 has partial HR data only: Sidney's HR monitor failed around 2:20, and the late TrainingPeaks
HeartRaterows appear to carry stale repeated values, so no HR-based conclusion should be drawn after that point. - Athlete comments and coach comments were not present in the extracted live summaries for the Luca-tagged completed bike sessions.
- Several daily logs had readiness marked Unconfirmed because same-morning subjective feedback was missing. TrainingPeaks now confirms the bike completions, but it does not replace subjective recovery, symptom, GI, or perceived-exertion feedback.
Inclusion and exclusion summary
Included for completed-activity analysis:
Luca-tagged but not completed or no activity file:
Live but excluded from Luca-tagged analysis:
Load summary for completed Luca-tagged bike work
- Completed Luca-tagged bike sessions: 7
- Planned duration across completed bike sessions: 17.33 h
- Actual duration across completed bike sessions: 16.32 h
- Duration delta: -1.01 h
- Actual TrainingPeaks TSS: 786.9
- Distance: 440.5 km
- Mechanical work: 9688 kJ
- Largest positive load deviation: June 8 easy endurance, +0.29 h and +28.1 TSS versus plan.
- Largest negative load deviation: June 11 gravel primer, -0.91 h and -60.5 TSS versus plan.
- Overall interpretation: the block delivered meaningful aerobic and gravel-specific load, then confirmed the key Ghost simulation almost exactly on target. June 11 came in short, but June 13 made that gap less important as the decisive rehearsal load. The missing subjective response data still matters, especially for fuelling, GI, back/SI, and late-ride RPE.
Power distribution and best-effort calculations below use FTP approximately 260 W. These are approximate from the downloaded analysis time-series samples, not a replacement for TrainingPeaks native charts.
2026-06-06
Live TrainingPeaks activities
2 minute bangers, workout 3775053724, bike, completed, actual 1.64 h, TSS 69.6.- Tags: Cycling, not
luca. - Result: excluded from the Luca-tagged analysis by scope.
Context note
The daily log records Sidney reporting rainy weather, tiredness, a completed 25 minute run-walk, and about 1 hour of core. The coaching response moved the longer endurance work to June 7 and treated the run-walk and core as real off-bike load. Because the completed bike workout was not tagged luca, it should not be used to judge Luca session execution, but the fatigue and off-bike load matter for interpreting June 7 and June 8.
Open follow-up
Ask Sidney whether the June 6 core created any back, SI, hip-flexor, abdominal, calf, or ankle response. This matters because later daily notes repeatedly carried forward those guardrails without direct subjective confirmation.
2026-06-07
Endurance 3:00, workout 3775054591
Plan versus actual:
Power distribution, approximate FTP 260 W:
Best sampled powers:
Interpretation:
Sidney completed almost exactly the prescribed duration after the June 6 schedule change. IF 0.647 and VI 1.06 support a generally controlled endurance execution. The distribution was not purely low Z2: about 22.5% sat in the 75-86% FTP band, and there was some time above 86% FTP. That likely reflects terrain, group/road variability, or small climbs/pressure moments rather than a failed endurance ride, but it was not an ultra-easy day coming after fatigue, run-walk, and core on June 6.
Coaching read:
The session delivered useful endurance load and was within the adjusted ceiling. The cost is meaningful enough that June 8 needed to stay absorb-and-protect, which matches the subsequent plan.
2026-06-08
Easy endurance 1:15-1:30, workout 3775055445
Plan versus actual:
Power distribution, approximate FTP 260 W:
Best sampled powers:
Interpretation:
This is the clearest day where the execution ran hotter than the intent. The morning plan classified readiness as Amber and asked for easy endurance, Z1 to low Z2, with gym only if the ride felt normal and no soreness or heaviness was present. Actual duration exceeded the low-end plan by 17 minutes and TSS overshot by 28.1. IF 0.700 and NP 182 W are reasonable for endurance, but high for an absorb-and-protect day after June 6 fatigue/core and June 7 endurance.
Coaching read:
The ride was productive but not as protective as prescribed. It probably added more load than intended before the June 9 control session. If Sidney reports feeling flat on June 13 or after, June 8 is one likely contributor. The unfiled Strength Sidney workout that day was not tagged luca and had no file; do not assume completion. Ask for gym feedback if she did any strength work.
2026-06-09
Short power control, workout 3779663570
Plan versus actual:
Power distribution, approximate FTP 260 W:
Best sampled powers:
Interpretation:
This appears to have achieved the intended short-power stimulus without a major TSS overshoot. The 9.2% of samples above 110% FTP and best 2 minute power around 344 W indicate the short-power component was real. VI 1.13 fits variable work. Duration ran 22 minutes longer than plan, but TSS only exceeded plan by 7.3, suggesting the added time was likely mostly lower-intensity riding rather than a large hidden intensity cost.
Coaching read:
Good stimulus, acceptable load. Given the prior day ran hotter than intended, the only concern is cumulative load rather than the June 9 session by itself. The daily log references possible ride fuelling and core work through nutrition context, but no direct session-response note was available. Ask Sidney whether any core was completed and whether it produced soreness.
2026-06-10
Easy endurance 1:15, workout 3779663579
Plan versus actual:
Power distribution, approximate FTP 260 W:
Best sampled powers:
Interpretation:
This was the cleanest support-day execution in the window. Duration matched plan, TSS was only +3.2, IF was low, and 79.2% of sampled power was below 75% FTP. This fits the instruction to keep the day easy between June 9 control work and the June 11 primer.
No-file note:
The optional Luca-tagged treadmill run-walk, workout 3779663664, was not completed in live TrainingPeaks and had no activity file. Since the morning note made it truly optional and conditional on no ankle, calf, back, SI, or heaviness response, this should be treated as skipped unless Sidney says otherwise. Ask directly before adding any run/walk load to the record.
Coaching read:
Good restraint. This day helped absorb the prior two days and set up the June 11 primer.
2026-06-11
Gravel endurance primer 3:15, workout 3779663588
Plan versus actual:
Power distribution, approximate FTP 260 W:
Best sampled powers:
Interpretation:
The session was materially shorter and lower TSS than planned, but it still included meaningful gravel pressure. The best 20 minute power near 243 W, best 10 minute near 250 W, and 24.8% of samples between 86% and 110% FTP show real sustained work. The actual execution looks like a condensed primer rather than a missed day.
This is probably positive for the larger block if Sidney absorbed it well. The original plan kept June 13 as the block priority, and the June 11 morning note explicitly made the second pressure block conditional on clean early ride response. The shortened total reduced fatigue risk before the five-hour simulation while still touching sustained race-relevant pressure.
Coaching read:
Keep this as a useful but incomplete primer. Do not try to make up the missing 55 minutes before June 13. The key missing data is why the ride ended early: planned choice, route/logistics, fatigue, back/SI, fuelling/GI, weather, equipment, or time constraint.
2026-06-12
Easy spin 0:45-1:00, workout 3779663597
Plan versus actual:
Power distribution, approximate FTP 260 W:
Best sampled powers:
Interpretation:
This was close to the prescribed duration and largely easy. TSS was +7.1 above plan, but still low in absolute terms. The best 30 minute power near 178 W and low VI suggest a stable aerobic spin. The daily plan had removed optional upper/core activation from the athlete-facing note because readiness was unconfirmed, and the live uncompleted activation aligns with that conservative choice.
No-file note:
The Luca-tagged optional upper + core activation, workout 3779663679, was not completed and had no file. Treat as skipped unless Sidney reports otherwise. The non-Luca Strength Sidney workout also had no completion/file and should not be assumed completed.
Coaching read:
Appropriate pre-simulation support day. The one concern is nutrition: the morning log was carb-light, and the coaching note asked for extra pre-ride carbohydrate. We need Sidney's actual pre-ride/during/post-ride intake and how the legs felt to interpret readiness for June 13.
2026-06-13
Ghost simulation 5:00, workout 3779663600
Plan versus actual:
TrainingPeaks compliance fields:
Structure execution, using the live TrainingPeaks Structure channel:
Final-hour pressure execution:
Partial HR coverage:
Metric note: The June 13 structure comparison uses the live TrainingPeaks workout object and the completed workout's embedded Structure channel, not the secondary derived-metrics JSON artifact. The raw time-series rows are sparse, so segment averages are coaching approximations, but the final-hour pressure pattern is clear: the four prescribed 5-minute efforts were completed at or above the planned target. HR is partial only; late HR values are excluded because the monitor failed and TrainingPeaks appears to carry stale values after the failure.
Interpretation:
Sidney completed the simulation almost exactly as prescribed by duration, distance, and load. The live TrainingPeaks object reports 99.4% duration compliance, 100.2% TSS compliance, and 98.3% distance compliance. A 4:58 ride, 279 TSS, 135 km, 1579 m climbing, and 3272 kJ is a legitimate race-rehearsal load, not a partial completion. The total TSS landed almost perfectly on plan, which means the workload target was met despite the earlier concern that June 11 had come in short.
The overall intensity was race-relevant and well matched to the plan. IF 0.75 over nearly five hours is substantial, while VI 1.06 shows good pacing discipline for gravel terrain. The important comparison is not a generic first-third versus final-third power slope; it is execution against the prescribed structure. On that basis, the workout was very successful.
The final-hour work is the clearest evidence. The plan asked for 4 x 5 minutes at 90-94% FTP, with 5-minute recoveries. The completed file's structure-labeled rows show those four pressure reps averaging about 257 W, 251 W, 243 W, and 264 W against a 234-244 W target range. That is not a power fade. That is successful completion of the planned final-hour pressure.
Execution context and missing data:
The main coaching flag is not execution quality; it is missing context. HR can only be interpreted before the monitor failure: about 146 bpm in the first hour, 157 bpm in the second hour, and 165 bpm from 2:00-2:20. After that, HR should be treated as missing, not as evidence of late cardiac drift. The power file itself does not show failed final-hour execution when compared to the actual plan.
In plain coaching terms: the ride was successful, and the final-hour structure was executed very well. Because HR is missing after about 2:20, do not frame this as confirmed cardiac drift. The still-missing information is not whether she hit the power structure; she did. The missing information is subjective and practical: RPE, GI response, thirst, heat, back/SI, and exactly how the race fuelling setup worked.
For Ghost of the Gravel preparation, this is strongly positive information. Sidney can carry the race-relevant duration and workload, and she can still execute the planned final-hour pressure. The next decision should be based on recovery and fuelling response, not on a presumed late power failure.
Fuelling and recovery read:
The available nutrition log shows a high-carbohydrate breakfast at 08:58, about two hours before the TrainingPeaks start time of 10:58. That meal provided about 170 g carbohydrate, which is directionally strong, but the timing was tighter than the planned 3-4 hour race-breakfast window. This can work for some athletes, but it raises the importance of gut comfort feedback.
The post-ride smoothie at 16:16 appears close to the finish window and added about 111 g carbohydrate, which is a good immediate recovery signal. The later rice, chicken, avocado, vegetables, mango, and sesame meal improved protein and micronutrient coverage. What is still missing is the key race-rehearsal evidence: on-bike carbohydrate per hour, fluid per hour, sodium per hour, product timing, and GI response. Since the ride prescription targeted 85-90 g carbohydrate per hour and 600-900 mg sodium per hour, this should be collected before changing the race plan.
Coaching read:
This was a successful Ghost simulation. The plan asked for a full rehearsal, and the file delivered nearly exact planned duration and TSS, on target distance, substantial climbing, controlled variability, and successful final-hour pressure. From a race-readiness perspective, this is the best single confirmation in the June 6-13 block.
The limiter is no longer visible as a power-execution problem in this file. The right next questions are recovery cost and fuelling reliability: arrive fresh, fuel early, keep sodium/fluid steady, and avoid spending unnecessary matches in the first three hours.
Pattern findings
What went well
- The completed Luca-tagged bike work gives a coherent progression: endurance, endurance-plus overload, short-power control, true easy support, condensed gravel pressure, easy pre-simulation spin, then a full Ghost simulation.
- June 10 and June 12 were controlled enough to serve the larger block.
- June 9 delivered a short-power stimulus without a major TSS overshoot.
- June 11 did not hit full planned volume, but it included meaningful pressure and likely reduced fatigue before the June 13 simulation.
- June 13 delivered the key rehearsal load almost exactly as planned: 4.97 h, 279 TSS, 135.2 km, 1579 m climbing, 3272 kJ, NP 195 W, and VI 1.06.
Main concerns
- Subjective recovery data is thin. Daily readiness was often Unconfirmed because sleep, soreness, fatigue, back/SI, GI, and RPE feedback were missing.
- June 8 exceeded the intended absorb-and-protect load. This is the main small red flag in the data.
- June 11 ended substantially short. This may be wise load management or may signal fatigue/logistics. We need the reason.
- June 13 showed excellent plan execution, including the final four 5-minute pressure reps. HR became unusable after the monitor failed around 2:20, so fuelling, fluid/sodium, heat, RPE, and back/SI follow-up remain important before final race-week decisions.
- Strength/gym completion is unclear. The only Luca-tagged strength/activation item in the window was uncompleted, while non-Luca strength entries had no files. Do not assume gym work happened.
- HR was unavailable in the June 7-12 live analysis files, so internal load for those rides is inferred from power/TSS only. June 13 HR is partial only and should not be used for late-ride drift analysis.
Recommendations for planned activities through 2026-06-27
These recommendations use the completed June 13 simulation as the key decision point. The race fitness box is largely checked; the work now is absorption, fuelling certainty, equipment certainty, and controlled sharpness.
2026-06-14 Optional recovery spin
Keep as written in principle, but bias strongly toward recovery after the completed 279 TSS simulation. Full rest is acceptable; a very short recovery spin is only useful if it improves legs.
Adjustment recommendation:
- Make June 14 full rest or 30-45 minutes maximum recovery spin.
- Do not chase volume because June 11 was short. The simulation supersedes that gap.
- No strength.
2026-06-15 Rest day
Keep as written: full rest.
Adjustment recommendation:
- No ride. Gentle mobility only if it clearly improves comfort.
- Prioritize carbohydrate repletion, protein consistency, and sleep.
2026-06-16 Threshold sharpening 3 x 10 min
This is the first decision point after the simulation.
Recommended adjustment:
- If Sidney reports normal fatigue only, good sleep, no back/SI issue, and no GI fallout: keep threshold sharpening, but start with 2 x 10 min at 94-98% FTP and add the third rep only if power, RPE, back/SI, and cadence are clean.
- If she reports heaviness, poor sleep, back/SI symptoms, poor gut response, or high RPE drift from June 13: replace with 60-90 minutes endurance only and skip threshold.
- If subjective feedback is missing: default to 2 x 10 min maximum, not 3 x 10 min.
2026-06-17 Endurance with cadence 1:30
Keep the aerobic cadence day, but protect it from becoming another June 8 style overshoot.
Recommended adjustment:
- Cap at 1:15-1:30.
- Keep cadence efforts aerobic, 95-105 rpm, no power chasing.
- Optional movement reset should remain 10-15 minutes and stop before it feels like training.
2026-06-18 Recovery day
Keep as written.
Adjustment recommendation:
- No structured training.
- Use this as the checkpoint before the final gravel endurance day. If Sidney is not clearly rebounding by this day, reduce June 19.
2026-06-19 Final gravel endurance 3:15-3:30
This is the second major conditional workout before race week.
Recommended adjustment:
- If June 13 and June 16 are both absorbed well: keep 3:00-3:15 with limited 90-95% pressure, but cap the day and avoid extra volume.
- If June 13 is hard to absorb or June 16 is reduced: ride 2:15-2:45 endurance only, or skip the ride if symptoms/fatigue persist.
- If back/SI or systemic heaviness appears: remove the 90-95% efforts and keep endurance.
- There is no reason to chase another 279 TSS rehearsal.
2026-06-20 Optional recovery spin
Keep optional.
Adjustment recommendation:
- Full rest is preferable if June 19 included pressure work.
- If spinning, 45 minutes is enough.
2026-06-21 Easy endurance 1:15
Keep as flexible support.
Adjustment recommendation:
- Ride only if it improves rhythm before the June 22 tune.
- If Friday/Saturday left heaviness, take full rest.
- Do not exceed 1:15.
2026-06-22 Threshold tune 1:15
Keep as a sharpness session only if freshness is present.
Recommended adjustment:
- If fresh: keep 2 x 5 min at 95-100% FTP plus 3 x 15 sec accelerations.
- If any fatigue is present: reduce to 1 x 5 min and 2 accelerations.
- If travel stress or poor recovery is already showing before June 23: make this an easy spin and preserve freshness.
2026-06-23 Travel to Alberta
Keep as travel/recovery.
Adjustment recommendation:
- No meaningful training load.
- Use the optional movement reset only if it reduces stiffness after travel.
- Confirm bike, kit, charging, repair, bottles, and race nutrition after arrival.
2026-06-24 Gravel feel 1:00-1:15
Keep as a logistics and terrain-feel session, not a workout to prove fitness.
Recommended adjustment:
- If travel fatigue is low: keep 2-3 x 3 min at 85-90% FTP.
- If travel fatigue or logistics are high: ride 45-60 minutes easy and skip pressure checks.
- Optional activation should stay one easy round only.
2026-06-25 Race prep day
Keep as written: no recon ride.
Adjustment recommendation:
- Do not replace a missed June 24 gravel feel unless explicitly reopened.
- Prioritize food, hydration, number pickup/logistics, equipment, bottles, and calm.
2026-06-26 Pre-race openers
Keep if Sidney is fresh enough for openers to improve feel.
Recommended adjustment:
- If fresh: keep 3 x 1 min at 100-105% FTP and 3 x 12 sec fast openers.
- If stale, heavy, or travel-affected: reduce to 2 x 1 min and 2 x 12 sec, or easy spin only.
- No extra volume and no makeup recon.
2026-06-27 Ghost of the Gravel
Race day plan remains appropriate from current evidence.
Execution emphasis:
- Fuel early and consistently, 90-100 g carbohydrate per hour if practised successfully.
- Sodium target 700-1000 mg/hr depending on heat and sweat rate.
- Fluid target 600-800 mL/hr adjusted for conditions.
- Start controlled enough to keep positioning and fuelling intact.
- Let the first half feel composed, fuel before hunger, drink before thirst, and preserve the ability to repeat the kind of final-hour pressure she executed successfully in the simulation.
- Treat the final hour as an active race window only if race-week freshness and gut confidence support it.
Specific questions for Sidney
These questions would materially improve the next review agent's confidence.
- June 6: Did the 25 minute run-walk or 1 hour core create any back, SI, hip-flexor, abdominal, calf, or ankle soreness in the next 24-48 hours?
- June 8: Did any gym/strength work happen? If yes, what movements, duration, load, and next-day soreness?
- June 9: Did core work happen around the ride? Any soreness or fatigue response?
- June 10: Was the optional treadmill run-walk skipped, or completed without a TrainingPeaks file?
- June 11: Why was the gravel primer 55 minutes shorter than planned: fatigue, symptoms, time, weather, route, equipment, or deliberate choice?
- June 11: Was there any back/SI tightness, unusual RPE, or fuelling/GI issue during the pressure work?
- June 12: Did she add the recommended pre-ride carbohydrate after the carb-light breakfast?
- June 13 simulation: What did she take on-bike by hour: carbohydrate, fluid, sodium, caffeine, and products?
- June 13 simulation: Any GI symptoms from the breakfast timing or from the race-bottle concentration?
- June 13 simulation: How did the final hour feel: controlled pressure, survival, or still race-capable?
- June 13 simulation: Any back/SI, hip, foot, calf, hand, or neck issues during or after?
- June 13 simulation: Did the final four pressure efforts feel controlled, hard-but-repeatable, or close to the limit?
- June 13 simulation: What was the perceived effort in the final 30 minutes compared with the first hour?
Bottom line
The completed Luca-tagged TrainingPeaks data now show the full June 6-13 build into the key Ghost simulation: 16.32 hours and 786.9 TSS across seven completed bike sessions. The week included one hotter-than-intended easy day on June 8, one well-executed control day on June 9, a properly easy support day on June 10, a shortened but still meaningful gravel primer on June 11, a suitable easy spin on June 12, and a successful full Ghost simulation on June 13.
The June 13 ride is the decisive anchor: Sidney completed the key rehearsal at almost exactly planned load and executed the final-hour pressure work successfully. The coaching response should be to absorb it, not build on top of it. The next two weeks should preserve the race-readiness gained from that ride while confirming recovery and fuelling reliability. Keep recovery intact, make June 16 and June 19 conditional, keep gym/activation work optional and light, and treat fuelling execution details as the most important missing evidence before race day.