TrainingPeaks publish report: July 22 to September 13

  • Executed: 2026-07-07 by Cowork session, per planning/2026-07-07-tp-publish-instructions-jul-08-to-sep-13.md
  • Scope: the 67 remaining TrainingPeaks ID: pending calendar sections (Jul 8-21 and the Jul 22 bike ride were already published with IDs)
  • Athlete ID 1575220 passed explicitly on every call. Create-only; no pre-existing item touched.

Totals

67 items created: 42 bike workouts, 8 strength workouts, 6 runs, 10 Day Off items (7 recovery days + 3 travel days, following the June rest-day pattern), 1 event. Every item read back after create; every calendar section now carries a real ID and grep "TrainingPeaks ID: pending" across the range returns nothing.

Pre-publish checks

  • Auth valid via keyring (athlete 1575220). The /users/v3/user 402 bug did not reproduce.
  • Live power zones match context/power-zones.md exactly (Z1 0-145 ... Z6 315-2000, FTP 260). No drift.
  • Only pre-existing item in the window: our own 2026-07-22 "Endurance 2:00" (3833232317). No Gunnar items, no collisions, no events.

Deviations and limitations

  1. CX subtype not set: tp_get_workout_types returns a persistent server error, so CX-surface days were published as sport Bike without a subtype ID. Titles carry the CX context.
  2. FTP retest (Aug 18, 3833248279) published description-only: the structure validator requires numeric %FTP on every step, and the 20-min test step is "maximal even effort". The full protocol is spelled out in the description, as the instructions allow.
  3. Maximal short efforts in structures: the Sep 1 starts and Sep 8 accelerations were encoded as 150-300% FTP steps named "(maximal)" since TP requires numeric targets. Recovery durations for "full recovery" were set to fit the planned session length (2:30 after starts, 4:00 / 2:48 in openers).
  4. "Endurance to finish" steps (Jul 25, Aug 1, Aug 15) had no listed duration; set to fill the 3:30 lower-bound total (30/46/45 min).
  5. Nested 30/30 set blocks (Jul 28, Aug 25) flattened to alternating repetition blocks and 8-min recovery steps, per the tool's documented multi-set pattern.
  6. Event 39391662 (Canmore C2, Sep 13): priority C persisted and verified. Event type does NOT persist — "Cyclocross", then fallbacks "MountainBiking" and "RoadCycling" all read back as Undefined. This is a live TP API/mapping limitation; the type may need to be set manually in the TP UI. The event object also has no tag field, so it carries no luca tag.
  7. Descriptions normalized to Canadian English (fuelling/fuelled) where source files had American spellings (Aug 8, 18, 22, 29, Sep 13). Source calendar files were not edited beyond ID writeback.

Created IDs

  • 2026-07-22 Run 25 min with easy hills: 3833244252
  • 2026-07-23 CX skills 1:30: 3833244282
  • 2026-07-24 Easy spin 1:00: 3833244312 | Gym: posterior chain 2: 3833244340
  • 2026-07-25 Long ride 3:30 with late pressure: 3833245079 (structured, TSS 181.2)
  • 2026-07-26 Endurance 1:45: 3833245100
  • 2026-07-27 Recovery day: 3833245110
  • 2026-07-28 30/30s, 3 sets of 8: 3833245672 (structured, TSS 91.9) | Gym: posterior chain 3: 3833245871
  • 2026-07-29 Endurance 2:00 heat session: 3833246152
  • 2026-07-30 CX skills and starts 1:30: 3833246366
  • 2026-07-31 Easy spin 1:00: 3833247393 | Gym: posterior chain 4: 3833247404
  • 2026-08-01 Long ride 3:30 with race-pace blocks: 3833247438 (structured, TSS 185.4)
  • 2026-08-02 Endurance 1:30: 3833247471 | Run 25 min with hill strides: 3833247478
  • 2026-08-03 Travel to Vermont: 3833247592
  • 2026-08-04 Camp ride: endurance: 3833247612
  • 2026-08-05 Camp quality day: 3833247638
  • 2026-08-06 Camp ride: easy with technical play: 3833247650
  • 2026-08-07 Camp ride: endurance with tempo touches: 3833247662
  • 2026-08-08 Camp final ride: 3833247670
  • 2026-08-09 Travel home, optional spin: 3833247776
  • 2026-08-10 Recovery day: 3833247793
  • 2026-08-11 Race-pace repeatability 5 x 3 min: 3833247820 (structured, TSS 78.6) | Gym: posterior chain 5: 3833247835
  • 2026-08-12 Endurance 2:00 heat session: 3833247896 | Run 25 min with hill strides: 3833247911
  • 2026-08-13 CX skills and starts 1:30: 3833247998
  • 2026-08-14 Easy spin 1:00: 3833248006 | Gym: posterior chain 6: 3833248096
  • 2026-08-15 Long ride 3:30-4:00, final durability ride: 3833248122 (structured, TSS 189.8)
  • 2026-08-16 Endurance 2:00: 3833248137
  • 2026-08-17 Recovery day: 3833248146
  • 2026-08-18 FTP retest: 3833248279 (description-only, see deviation 2)
  • 2026-08-19 Easy spin 1:15: 3833248289 | Gym: maintenance 1: 3833248363
  • 2026-08-20 Short-power retest: 3833248365
  • 2026-08-21 Easy spin 1:00: 3833248368 | Run 20 min easy: 3833248370
  • 2026-08-22 CX race simulation 1: 3833248511
  • 2026-08-23 Travel to Alberta: 3833248523
  • 2026-08-24 Recovery day: 3833248536
  • 2026-08-25 30/30s maintenance, 2 sets of 8: 3833248568 (structured, TSS 70.5) | Gym: maintenance 2: 3833248579
  • 2026-08-26 Endurance 1:45: 3833248603
  • 2026-08-27 CX skills 1:30: 3833248761
  • 2026-08-28 Easy spin 1:00: 3833248768
  • 2026-08-29 CX race simulation 2: 3833248781
  • 2026-08-30 Endurance 2:15: 3833248808 | Run 20 min with strides: 3833248822
  • 2026-08-31 Recovery day: 3833248828
  • 2026-09-01 Starts and 1-min sharpener: 3833249030 (structured, TSS 104.2) | Gym: light maintenance: 3833249037
  • 2026-09-02 Endurance 1:30: 3833249045 | Run 15 min easy: 3833249059
  • 2026-09-03 CX skills at race speed 1:15: 3833249066
  • 2026-09-04 Easy spin 1:00: 3833249078
  • 2026-09-05 CX race simulation 3, short and sharp: 3833249274
  • 2026-09-06 Endurance 1:30: 3833249286
  • 2026-09-07 Recovery day: 3833249304
  • 2026-09-08 Openers 1:00: 3833249339 (structured, TSS 64.6)
  • 2026-09-09 Easy spin with CX touch: 3833249355
  • 2026-09-10 Rest or 45 min easy: 3833249362
  • 2026-09-11 Travel to Canmore, easy ride: 3833249478
  • 2026-09-12 Pre-race openers and course recon: 3833249497
  • 2026-09-13 Canmore C2 — season opener: event 39391662 (priority C verified; eventType Undefined, see deviation 6)

Amendment (2026-07-07, same session)

Per operator request after the initial publish:

  1. Structured workout blocks added to all 32 previously description-only bike sessions via tp_update_workout (spins as single easy steps, endurance/heat/camp rides as warm-up/endurance/cool-down, camp quality day as the solo 4x4 option, CX skills sessions as named skills blocks plus maximal-start repeats at 150-300% FTP, race sims with a race-rhythm block at 85-105% FTP, Sep 11/12 with their acceleration and opener sets). Every Luca-created bike workout now carries in-activity workout blocks with server-computed TSS/IF. Still description-only by design: strength (8), runs (6), rest/travel Day Off items (10), and the two maximal benchmark days (FTP retest 3833248279, short-power retest 3833248365) where numeric targets would be invented.
  2. Wording rule: "touch/touches" removed everywhere. TP titles and calendar files renamed: 2026-08-07 → "Camp ride: endurance with tempo efforts" (3833247662), 2026-09-09 → "Easy spin with CX flow" (3833249355), including calendar Id slugs (no external references existed). Rule recorded in athlete/skills/trainingpeaks-activity-creator/SKILL.md alongside a standing rule to prefer structured blocks on every bike session.

Amendment 2 (2026-07-08)

The Jul 8-21 items, published earlier by a separate session, had the same gap plus formatting artifacts. Fixed via tp_update_workout: structured blocks added to all 10 unstructured bike rides in that window plus the pre-existing Jul 22 ride (3833232317); Jul 21 VO2 4x4 (3833226845) got its intended interval structure which the earlier publish had failed to build; raw ### markdown headers pasted into 13 descriptions were cleaned to the standard Workout / Fuelling / Notes format; American "fueling/fueled" corrected, including the Jul 18 title, now "Long endurance 3:00 with fuelling verification" in both TP and the calendar file. Jul 14 FTP test and Jul 16 short-power benchmarks remain description-only (maximal test days), with their protocols spelled out in plain text. Verified by full Jul 8-21 readback: every bike ride except the two test days now shows structure-derived TSS.

Amendment 3 (2026-07-08): off-bike climbing block

Operator requested special focus on leg strength, stair climbing, and hill running repeats for off-bike climbing. Changes made in both the calendar files and live TP:

  • Gym add-ons (climbing-specific): weighted step-ups and single-leg calf raises added to posterior chain 2 (3833244340), 4 (3833247404), and 5 (3833247835); calf raises added to posterior chain 3 (3833245871) and 6 (3833248096), which already carry step-downs; light step-ups and calf raises added to maintenance 1 (3833248363, now ~40 min) and 2 (3833248579, hold load). Sep 1 light session untouched (taper).
  • Runs upgraded from strides to hill repeats: Aug 12 → "Run 25 min with hill repeats", 6 x 30 sec uphill (3833247911); Aug 30 → "Run 20 min with hill repeats", 5 x 30 sec uphill, last one before the race (3833248822). Jul 22 easy-hills run and Aug 2 first-strides run left as the progression base; Aug 21 and Sep 2 runs stay easy (pre-sim and taper).
  • New stair sessions on light days: 2026-07-29 "Stair climbing intro 15 min" → TP 3838416230; 2026-08-26 "Stair repeats 20 min" (Edmonton, altitude note included) → TP 3838416270. Both sport Run, tag luca, ankle/calf/SI caution retained, IDs written back to the calendar files.
  • Progression logic: strength base and stair rhythm first (late July), loaded step-ups through the August build, hill/stair repeats peaking Aug 26-30, then only the existing CX skills run-ups from Sep 1 onward so the taper is untouched. CX skills sessions already rehearse run-ups at race speed and were not changed.

Amendment 4 (2026-07-11): blocks on test days, runs, and stair sessions

Operator confirmed blocks should exist on every activity. Added via tp_update_workout:

  • Bike test days now carry structure with maximal steps as labelled wide ranges: FTP test Jul 14 (3833095200) and FTP retest Aug 18 (3833248279) with "20 min test: maximal even effort" at 100-120 %FTP; short-power benchmarks Jul 16 (3833095231) and retest Aug 20 (3833248365) with all-out steps at 150-300 / 130-200 / 110-140 %FTP.
  • All runs and stair sessions structured with percentOfThresholdPace: run/walks Jul 12 (3833094458) and Jul 17 (3833095255), Jul 22 easy-hills run (3833244252), Aug 2 hill strides (3833247478), Aug 12 and Aug 30 hill repeats (3833247911, 3833248822), Aug 21 and Sep 2 easy runs (3833248370, 3833249059), stair sessions Jul 29 (3838416230) and Aug 26 (3838416270).
  • Remaining description-only by design: strength sessions and rest/travel Day Off items, where TP structure has no meaningful rendering. The supplement skill rule was updated accordingly.
  • Verified by Jul 11-21 readback: every ride and run in the window now shows structure-derived TSS (FTP test 96.6, benchmarks 117.3).

Verification

Final tp_get_workouts 2026-07-22 to 2026-09-13 returns 67 workouts (66 new + the pre-existing Jul 22 ride) and tp_get_events returns the one event — matching the calendar exactly. All readbacks confirmed date, title, sport type, tags luca, and structure presence on the 8 structured workouts.