Peter Handel · 1136 Crescent Dr · fifty 1-mile neighborhood loops
Everything below is built from your actual training data, not generic tables.
Absorption week after the 40-miler on 7/25. What actually happened: the Yosemite hiking load was far bigger than planned — 171k steps across Thu–Sat and a 65-flight day — so this was a heavier week than "recovery" suggests.
The week's hard effort. 65 flights climbed and nearly 54k steps — this was a long mountain day, not a rest-week filler.
10.12 mi @ 12:29/mi, HR 125/151. Cadence 156 spm · GCT 294 ms · vertical ratio 10.3% · decoupling +10%. Running-form metrics recorded (Low Power Mode was off). This became the baseline the cadence work is measured against.
Revised on 8/4 once the terrain was mapped. The house sits at 466 ft — the local high point — so every run finishes with a climb, and the driveway alone is 135 ft at −30.7%. Fewer miles, more vertical: ~27 mi and ~4,800 ft, versus the original flat-ish 20–25 mi long run. This is the one week with real hills before race day.
Done. First run on the Hidden Valley terrain, clockwise.
Cadence 165 spm — up from 156 on 8/2, best recorded. Held steady all run (166→164). Stride shortened 0.89→0.84 m: exactly the intended trade.
GCT 309 ms, up from 294 — the one metric that moved the wrong way. Partly the climbing (298→320 across halves). Watch it on flatter ground.
81% of the run in Z2, 2% above 140 bpm — aerobically easy, correctly executed on a 55/100 readiness morning. No usable decoupling number: the loop descends 404 ft net in the first half and climbs 394 ft net in the second, so HR:pace drift here is grade, not cardiac drift.
Planned: Steep Descent Repeat ×3 (5.0 mi, +1,575 ft). Actual: a beach walk instead — 1.86 mi, 12,305 steps, 490 active kcal, load 15.6.
Cost of the swap: −5.0 mi and −1,575 ft for the week. The week lands at 28.3 mi / 4,050 ft instead of 33.3 mi / 5,625 ft. Saturday still carries most of the training value, so this is a small loss.
Not made up on Thursday — deliberately. Eccentric DOMS peaks 24–48 h after steep descending, so a hard descent session on 8/6 would put peak soreness on Saturday 8/8. Thursday stayed easy to protect the long run.
Ran 11:30–1:03, warmer than the 8am starts. Deliberately easy — HR 122, zero time above 140.
Slower with a LOWER heart rate than 8/4 (16:44 vs 14:18/mi, HR 122 vs 127, power −13%). Easier effort, not decline.
⚠️ But form degraded at the slower pace: cadence fell 165 → 157 and GCT rose 309 → 358 ms. Intent was short steps; stride actually lengthened 0.84 → 0.86 m. Lesson: you cannot practise cadence at shuffle pace — do the drill at 13:30–14:30/mi.
Dehydration: drank 18 sips = 0.47 L/hr, finished ~0.9 L down. Resting HR 100 → 87 → 80 after 1.2 L. This is what corrected the Saturday sip rate from 6 to 9–10 per 30 min.
Gatorade tested at 51 g carb/hr with no GI trouble — validated the Saturday fuel plan.
Planned 3 laps / 16.5 mi. Ran 4 laps / 22.17 mi — 35% over plan. 2,656 kcal, 156 W. Second-longest run ever.
Decoupling +4.4% — first clean number of the block, because four identical laps means the halves are genuinely terrain-matched. Beats the 40-miler's +6.3%. Six hours at race pace under 6% drift is the best aerobic result yet.
Cadence held: 164 · 161 · 164 · 161 by lap. Zero decay over six hours. GCT drifted only 328 → 341 ms. Lap durations 88 · 90 · 91 · 90 min — three minutes of spread.
Fuel plan validated. 3 Gatorade + ½ tsp salt portioned as a 7 oz shot per lap ≈ 480 mg sodium/hr, ~0.9 L/hr fluid. Post-run 184.8 lb; likely only 0.3–0.8 L down over 6 h, versus 0.9 L down in 100 min on 8/6 at the old 6-sip rate.
⚠️ Knee spoke on lap 4 (~mile 18, hour 4.5) — no pain walking or on stairs, cleared in minutes, able to resume. Fatigue phenomenon, not structural. Vertical ratio hit 11.0%, an all-time high, and stride was 32 in against a 24 in target — overstriding is the most plausible mechanical contributor.
Mile splits mapped the course: Strawberry descent miles averaged 14:52, climb-home miles 16:32. Miles 6, 12 and 17 were the three slowest (18:54 / 18:31 / 18:44) — end of each lap, climb plus aid stop.
Plan changed mid-week (8/14): the alternating-surface 4×12 became a daily-12 block at your request, and it began Thu 8/13 — Sat 8/15 is day 3. Mon–Fri delivered 26.7 mi. Two things I had wrong and have corrected here: Wednesday was a 120-minute / 11.18 mi run, not the 60 minutes I first reported, and 8/8 was 22.17 mi, not 24.
Intended as a 4-mile knee diagnostic at 4.0 mph. Ran 5.59 mph instead.
Cadence 149 spm — lowest of the block. ⚠️ Knee noticed at 45 min. Stopped at the hour. Correct call.
Quads, hamstrings, calves, TFL, glutes.
Roll TFL, glutes and outer quad rather than the IT band directly.
Rest day as run. The 12-miler landed Thursday instead.
Two sustained blocks: 74 min hard, then 37 min steady after a 2-min break.
This was a tempo day, not an easy day. 36% of the first block sat above 150 bpm. I originally logged this as a 60-minute session — that was a window I picked by hand, and it understated the day by half.
The best-executed run of the whole build, and the first with a valid decoupling number.
You stepped grade down while stepping speed up: 6% → 3% → 1.5%, 4.58 → 5.08 → 5.52 mph. Metabolic cost across the three legs was 34.7 → 34.4 → 35.1 ml/kg/min — flat within ±1%. Deliberately constant workload for 103 minutes.
Decoupling +3.6% (HR 133.0 → 139.7 against constant demand). Under 5% is excellent. Every earlier decoupling figure was contaminated by terrain; this one is clean.
0% of the run above 150 bpm, per-2-min HR sd of 1.1–2.9 bpm. Exceptional pacing discipline. 111 ft/mi of climbing vs the Door Loop's 148 ft/mi — real vertical stimulus.
Day 3 of the daily block, which began Thu 8/13 — not day 1. You have run 7 of the last 14 days and 159 mi in 30 days.
Cadence 165 at 14:00–15:00/mi. Avoid sustained steep descent — rolling is fine.
Eat before you go. Yesterday you ran 103 min fasted after a no-breakfast day. It worked, but it won't at 12 mi daily.
66.88 mi across six days, capped by a 22-mile Saturday in which the knee stayed completely silent for 5h34 — an hour past the ~4.5 h point where it had spoken on every previous long effort. The knee story turned decisively this week: it spoke at 45 min on Wed, then went 62 min clean Thu, 126 min clean Fri, and 5h34 clean Sat. Twice-daily IT-band rolling started Wed and is doing real work. Ground contact time held flat at 277 ms across the whole Saturday run — the metric that degrades under structural fatigue did not move.
Day 1 of the streak. Zero knee symptoms after Sunday's rest.
Treadmill console read 8.02 mi vs HealthKit's 8.48 — trust the belt indoors. Stepped grade profile, finished at 1.5%.
158 ft/mi — more vertical per mile than the Door Loop, and double Monday.
⚠️ Knee spoke at 1h45 and I ran the last 15 min through it. Took ~2 h to clear afterwards — painful walking and on stairs. First episode that did not resolve within minutes.
Constant 3% was a novel stimulus. Uphill spares the patellofemoral joint but loads the posterolateral structures and calves differently.
Took the release valve a day early, correctly.
Knee tweaked at 45 min — jumped straight off and rolled, rather than pushing through as on Tuesday. Resolved immediately. That was the right call and the trend turned from here.
Started twice-daily IT-band rolling. Roll the TFL, glutes and vastus lateralis — those tension the band. Avoid grinding the tender lateral epicondyle itself.
Inside the ~90-min treadmill threshold. No symptoms.
Longest clean run of the block, and longer than Tuesday's session that caused the worst episode. This is the evidence that the 45-min onset on Wed was a bad day, not a new ceiling.
Ran on 6h06m sleep — but deep sleep was 61 min (a new high) with min HR 41 (lowest ever) and HRV above baseline. Recovery markers carried it.
Chiropractor pleased with the body, feet not jammed. Two days of rolling behind it.
The single most important result of the block: the knee stayed silent for 5h34 — a full hour past the ~4.5 h ceiling where it had spoken on every previous long effort. Planned as 25 mi; ran 22. Started 08:11 rather than the planned 06:00, which put the whole back half in the hottest part of the day.
Compared with the 8/08 22-miler, matched for distance and course:
| 8/08 | 8/22 | |
|---|---|---|
| Speed, hour 1–2 | 1.88 m/s | 1.99 |
| HR at that speed | 132 | 119 |
| Final-hour speed | 1.66 | 1.90 |
| Final-hour HR | 137 | 123 |
| Decoupling | +13.1% | +7.4% |
| Knee | spoke at hour 4.5 | silent |
Faster, 13 bpm lower, half the drift, no knee. On 8/08 speed collapsed 1.88 → 1.66 in the final hour; this time it held 1.99 → 1.90.
Speed-per-heartbeat, running samples only (≥1.6 m/s, so walk breaks can't distort it), rebaselined on hour 1–2 because three of these four runs open with a warm-up:
| hour | 7/18 30 mi | 7/25 40 mi | 8/08 22 mi | 8/22 22 mi |
|---|---|---|---|---|
| 1–2 | 0.0% | 0.0% | 0.0% | 0.0% |
| 2–3 | +2.6% | +4.3% | +0.4% | +7.9% |
| 3–4 | +4.9% | +2.0% | +3.5% | +5.4% |
| 4–5 | −1.0% | +7.5% | +5.7% | +7.5% |
| 5–6 | +5.3% | +2.1% | +13.1% | +7.4% |
| 6–7 | +4.6% | −6.0% | — | — |
| 7–8 | — | −1.1% | — | — |
Mid-pack, not the worst. 8/08 drifted nearly double over the same distance. The 7/25 40-miler is the standout — finished 8 h with HR 5 bpm lower than at hour 2 at the same speed, i.e. it got more efficient as it went.
⚠ Baseline sensitivity, stated plainly: the same hour 5–6 measurement reads +13.2% off the first 30 min, +10.9% off hour 0–1, or +7.4% off hour 1–2. Only the divisor changes. That a defensible choice moves it that far is itself the finding — a genuinely bad decoupling reads badly from any baseline. 8/08's +13.1% does; this one doesn't.
Ground contact time 277 → 278 ms across 5½ hours. No degradation at all, against 309 ms on the 8/04 outdoor run. GCT is what collapses under structural fatigue and it's the most knee-relevant channel — this is the best mechanical result on record.
Vertical oscillation 9.0 cm, step length 0.81 m → vertical ratio 11.1% (efficient is <7%). Unchanged from 8/04 and still the weakest metric — a lot of energy going upward. Running power 168 W = 1.99 W/kg.
Derived cadence ≈140 spm, below the 165 target — though 165 was measured at 11:00/mi on a treadmill and cadence legitimately falls with pace. Can't be measured directly: step counts were inflated 2.4–2.7× by three devices.
4 Uncrustables, 3 fruit-snack packs, 6 Clif Bloks = 233 g carb over 5h34 = 42 g/h, against an 85 g/h plan for a fasted start. Last calorie at 4:30; ran the final 65 min unfuelled.
And yet: power at the finish was 173 W against 170 W at the open. Glycogen depletion is monotonic — you'd have faded, not rallied. So under-fuelling is a real gap to close, but it demonstrably did not cost this run. No GI trouble at 42 g/h either.
Drank 4.8–5.0 L = 0.86–0.90 L/h, above the 0.6–0.8 target. Post-run weight 185.7 lb against a morning baseline of 185.5 (8/20) and 185.2 (8/19) — at or above baseline, so not dehydrated. Sweat rate ~0.8–0.9 L/h, essentially fully replaced.
⚑ The mistake worth not repeating: topped the bladder back up with pure water at the 1/3 point, halving the sodium concentration of most of the day's fluid. Fix for race day: 1 LMNT per 1.5 L on every fill including top-offs — 2 packets per 3 L bladder, 8–10 packets carried.
Retracted: an initial −4,600 mg sodium deficit counted only drink sodium and omitted food — 4 Uncrustables at 230 mg each plus Bloks and fruit snacks add 1,115 mg, a third of the real total (~3,385 mg). Against 4.8 L of sweat that spans +1,465 mg surplus (400 mg/L, heat-acclimatised — likely after a month of August training) to −3,335 mg deficit (1,400 mg/L). The unquenchable thirst is separately explained by a ~2,340 mg post-run meal, 1,750 of it from seven meatballs. Verdict: unresolved, and probably benign.
Glycogen: ruled out (full power at the finish). Hypovolemia: ruled out (weight-neutral). Sodium: uncertain. Heat was the leading candidate — the break falls between 09:41 and 10:11 as the day warmed, and the curve plateaus at ~11% for the final 2.5 h rather than compounding, which is what thermal steady-state looks like. But 7/25 ran 8 h from 08:09 with zero drift, so heat alone doesn't explain it either. Most honest read: +7.4% over 5h34 is unremarkable for an ultra effort and may need no special explanation.
Devices separated via HealthKit provenance (Watch7,11 = Ultra 2, Watch7,5 = Series 10) and scored against a Polar H10 worn all day. Ultra 2: 0.56 bpm mean error, 99.8% within ±3, worst miss 4 bpm, r = 0.992. Series 10: 1.47 bpm mean, 87.3% within ±3, worst miss 22 bpm. Race day: Ultra 2, and trust it without a strap. See the three-source graph →
Correction to an earlier note: it was the Ultra 2 that stopped first (13:15); the Series 10 covered the finish. Both logged steadily until then — the apparent 12:10 dropout was an export artifact, not a watch.
① Start at 4:30am. Removes the heat confound and rehearses the race clock. ② Weigh in before AND after — the missing pre-run weight is what made today's hydration analysis guesswork. ③ 2 LMNT per 3 L, every fill. ④ Push carb toward 60–85 g/h — 42 was tolerated easily, so there's headroom. ⑤ Ultra 2 only.
41.15 mi, not the 85 that was written — and the reduction was correct. Two rest days, two easy 9s, an easy 5, and a 17.82-mile Saturday instead of a second 25. ACWR came down 1.39 → 1.07 and HRV went from below baseline to above it. Twice this week Peter apologised for a choice the data endorsed.
Zero time above 140 bpm, and power ROSE across the last three blocks (187 → 191 → 194 W) at flat HR. Drift ~2% over the hour. Indoor — no GCT/stride/vertical channels.
Power 192 W was the highest of the block at that point, at 11 bpm lower average HR than the 8/22 long run. A taper responding correctly.
Ran 17.82 rather than 25 — the right call. Started 07:30, not the planned 4:30am, so the race clock is still unrehearsed. The big wins were process: he weighed in before AND after, and logged fluid, sodium and fuel by the minute. That turned hydration from guesswork into a solved problem.
| 8/22 | 8/29 | |
|---|---|---|
| Fluid rate | 0.86–0.90 L/h | 0.58 L/h |
| Sodium | ~3,385 mg | 2,843 mg = 591 mg/h |
| Urinations | not tracked | 6 in 5 h |
| Weight change | +0.2 lb vs baseline | +0.1 lb measured |
2 × 1.5 L Nalgene, 1 LMNT packet each, 100 ml left over = 2.9 L consumed at 667 mg/L. 591 mg/h, squarely in the 500–800 target. He finished heavier than he started, having urinated six times. Fluid and sodium are dialled in — and if anything he drinks slightly more than he needs.
⚑ Retracted: after 8/22 I built a −4,600 mg sodium-deficit story and a hyponatremia hypothesis. It died in three stages — he pointed out the food sodium I hadn't counted (1,115 mg), then that the entire 2.9 L was LMNT not water. He was at or above target both times. I was wrong in the same direction each round, always toward the more dramatic explanation.
200 g over 5 h = 40 g/h, against a 60–85 target. Fluid and sodium are solved; this isn't. The cause is composition: Uncrustables deliver only 15 g carb per 100 kcal versus 24–26 for fruit snacks, Bloks, banana and Coke. Shift the mix, not the volume.
| hour | decoupling |
|---|---|
| 0–1 | 0.0% |
| 1–2 | +10.3% ← the knee window |
| 2–3 | +3.6% |
| 3–4 | +5.3% |
| 4–5 | +6.3% |
HR at matched running speed fell across the run — 123 in hour 1 to 118 in hour 5. It got better after hour 2, not worse. +6.3% off the hour 0–1 baseline; note that off the hour 1–2 baseline the same data reads −4.4%. Sign-flipping on baseline choice is itself the finding: a genuinely bad decoupling reads badly from any anchor.
| speed band | 8/22 | 8/29 | Δ |
|---|---|---|---|
| 1.4–1.6 m/s | 303 | 355 | +52 ms |
| 1.6–1.8 | 293 | 346 | +53 |
| 1.8–2.0 | 280 | 322 | +42 |
| 2.0–2.2 | 269 | 309 | +40 |
| 2.2–2.5 | 260 | 294 | +34 |
Median paired speed was identical — 1.94 vs 1.95 m/s — so all ~44 ms is mechanical, none is pace. ~15% longer on the ground per step at every speed. Cause unresolved: block fatigue, shoes, surface, or gait around the knee.
Never hurt while running. Pain only on restarting after a stop to pee or drink, gone within 30 s–2 min of moving, no pain after the run at all. Location: lateral.
That is textbook start-up / gelling pain. I floated post-meniscectomy osteoarthritis — lateral location argues against it, since the 2020 meniscectomy was medial and would load the medial compartment. His IT-band read has more support than I gave it. Front-runners are early ITBS or lateral patellofemoral tracking; both respond to the same rolling and glute work. Plan: roll hourly.
Nothing this week makes you fitter; everything can make you fresher — or tireder. Readiness is 73, HRV is above baseline, ACWR is 1.07, and Tuesday produced the highest running power of the whole block. You are arriving in good shape. Any knee pain that persists while running means stop that run.
195 W at 12:02/mi is the highest power of the entire block, on pace identical to 8/28 (192 W at 12:00/mi). Fresh legs four days out — exactly what a taper should produce.
⚠ Heart rate is 94% missing from this run — a 36.1-minute gap between 17:59:48 and 18:35:55. Speed (n=297) and power (n=296) captured fully; HR did not. No drift number is computable.
The 140–145 bpm at run onset then 114 bpm seventy seconds later is a 31 bpm fall while still running — that is not physiology. Discount it as optical cadence-lock artifact. The 125–129 bpm at 18:35–18:37 is plausible for the end of an easy 3-miler.
The workout split into Running 2.35 mi + Walking 0.80 mi = 3.15 mi. Nothing was lost; it was recorded as two workouts.
Carb loading begins today: 670–835 g/day (8–10 g/kg) through Friday.
Rice, pasta, potatoes, bread, bananas, juice, oatmeal — and not by adding fat to any of it. A big bowl of plain pasta with marinara is exactly correct this week. Your recent days have run ~200–330 g; that number needs to roughly triple.
Expect +2 to +4 lb from glycogen and its bound water. That is the load working, not fat.
Do not run unless you want to. The job today is logistics and carbohydrate.
Set the aid table tonight. 7 Uncrustables · 8 fruit-snack pouches · 8 Clif Blok packets (non-caffeine) · 4 bananas · 5×8 oz Coke or juice · 3 savory rounds (broth, pretzels, salted potato) · 5 LMNT packets · 7.5 L water. Two 1.5 L Nalgenes, 1 packet each.
Fluids at ambient temperature, and no caffeine. Both prior afib episodes followed cold liquid — 2024 by 28 seconds — and the 2021 episode also followed caffeine in iced tea.
Weigh in before bed and again at 4:15 am. That 4:15 number is the reference for every mid-race check.
Projected from the 8/29 rate (16:57/mi): 14.1 h if pace holds, 15.3 h at +8% fade, 16.2 h at +15%. Plan on 15 h, carry for 16. Finish somewhere between 6:40 and 8:45 pm.
| 8/29 actual | race target | |
|---|---|---|
| Fluid | 0.58 L/h | 0.50 L/h |
| Sodium | 591 mg/h | ~550 mg/h |
| Carbohydrate | 40 g/h | 60–65 g/h |
Drink less than you think. On 8/29 you finished +0.1 lb after six urinations at 0.58 L/h. Two weighed runs say your instinct is to over-drink. 0.50 L/h is plenty.
Alternate: Uncrustable → fruit snack + 3 Bloks → banana, with 8 oz Coke from hour 4 and a savory round at hours 6, 9 and 12 (broth + pretzels, or salted potato). The savory rounds matter — sweet fatigue past hour 6 is the main reason people stop eating, and broth delivers 700–900 mg sodium at once.
Fewer Uncrustables than instinct says. They give 15 g carb per 100 kcal against 24–26 for bananas, fruit snacks, Bloks and Coke. That single swap is what takes you from 40 to 65 g/h without eating more.
Carry nothing. You pass your driveway every mile. A table beats a pack: no 6.6 lb on your back for 15 h (the likely cause of the right rhomboid pain), no chance of the pure-water top-off error, and you can weigh yourself mid-race.
Weigh at laps 10, 20, 30, 40. Target −1 to −2 lb versus your 4:15 am weight. If you are gaining, drink less. That is the one number that tells you in real time.
Roll the IT band at every stop through hour 4. Lateral start-up pain that clears in under two minutes is the expected pattern and is not a stop signal. Pain that persists while running, or hurts walking afterwards, is — that was the 8/18 pattern.
⚑ If afib starts: stop, sit, assess. Do not take the flecainide mid-race. Its sodium-channel blockade is use-dependent and strengthens at high heart rates, the tablets are four years old, and you have unquantified valve disease. Dizzy, breathless or chest pain → that is an ER trip. Feeling fine with an irregular pulse → your 2024 episode self-terminated in 2 h; call the cardiologist's line and wait.
Fifty 1-mile loops past your own front door. Every logistics problem from the 40-miler disappears here — water, ice, food, and dry socks are available every single mile.
| T+ | Clock | Mile | Eat | Drink & notes |
|---|---|---|---|---|
| 0:00 | 4:30am | ~0 | — (breakfast done by 3:45am) | 6–8 oz Headlamp on. First 3 laps deliberately slow. |
| 0:30 | 5:00am | ~2 | ½ PB&J w/ cream cheese | 6–8 oz Dark + cool. Bank easy miles. Sip less than you think. |
| 1:00 | 5:30am | ~4 | Mott's ×2 | 6–8 oz Dark + cool. Bank easy miles. Sip less than you think. |
| 1:30 | 6:00am | ~6 | ½ PB&J w/ cream cheese | 6–8 oz Dark + cool. Bank easy miles. Sip less than you think. |
| 2:00 | 6:30am | ~8 | Welch's ×2 | 6–8 oz Sunrise ~6:30am — sunscreen. Settle into rhythm, HR ≤140. |
| 2:30 | 7:00am | ~10 | ½ PB&J w/ cream cheese | 6–8 oz Sunrise ~6:30am — sunscreen. Settle into rhythm, HR ≤140. |
| 3:00 | 7:30am | ~12 | 🧂 Salted Watermelon BLOKS | 6–8 oz Sunrise ~6:30am — sunscreen. Settle into rhythm, HR ≤140. |
| 3:30 | 8:00am | ~13 | ½ PB&J w/ cream cheese | 6–8 oz Sunrise ~6:30am — sunscreen. Settle into rhythm, HR ≤140. |
| 4:00 | 8:30am | ~15 | Honey Stinger chews | 6–8 oz Sunrise ~6:30am — sunscreen. Settle into rhythm, HR ≤140. |
| 4:30 | 9:00am | ~17 | ½ PB&J w/ cream cheese | 6–8 oz Sunrise ~6:30am — sunscreen. Settle into rhythm, HR ≤140. |
| 5:00 | 9:30am | ~19 | Mott's ×2 | 6–8 oz Sunrise ~6:30am — sunscreen. Settle into rhythm, HR ≤140. |
| 5:30 | 10:00am | ~21 | ½ PB&J w/ cream cheese | 6–8 oz Sunrise ~6:30am — sunscreen. Settle into rhythm, HR ≤140. |
| 6:00 | 10:30am | ~23 | Welch's ×2 | 6–8 oz Sunrise ~6:30am — sunscreen. Settle into rhythm, HR ≤140. · 🧦 SOCK CHANGE + foot check |
| 6:30 | 11:00am | ~25 | ½ PB&J w/ cream cheese | 6–8 oz 🔥 Heat window — ice in hat every lap, douse head, slow down on purpose. |
| 7:00 | 11:30am | ~27 | 🧂 Salted Watermelon BLOKS | 6–8 oz 🔥 Heat window — ice in hat every lap, douse head, slow down on purpose. |
| 7:30 | 12:00pm | ~29 | ½ PB&J w/ cream cheese | 6–8 oz 🔥 Heat window — ice in hat every lap, douse head, slow down on purpose. |
| 8:00 | 12:30pm | ~31 | ☕ CLIF SOURS — 3 blocks (caffeine) | 6–8 oz 🔥 Heat window — ice in hat every lap, douse head, slow down on purpose. |
| 8:30 | 1:00pm | ~33 | ½ PB&J w/ cream cheese | 6–8 oz 🔥 Heat window — ice in hat every lap, douse head, slow down on purpose. |
| 9:00 | 1:30pm | ~35 | ☕ CLIF SOURS — 3 blocks (caffeine) | 6–8 oz 🔥 Heat window — ice in hat every lap, douse head, slow down on purpose. · 🧦 second sock change if wet |
| 9:30 | 2:00pm | ~37 | 🧂 Pretzels / chips / broth | 6–8 oz 🔥 Heat window — ice in hat every lap, douse head, slow down on purpose. |
| 10:00 | 2:30pm | ~38 | ☕ CLIF SOURS — 3 blocks (caffeine) | 6–8 oz 🔥 Heat window — ice in hat every lap, douse head, slow down on purpose. |
| 10:30 | 3:00pm | ~40 | 🧂 Pretzels / chips / broth | 6–8 oz 🔥 Heat window — ice in hat every lap, douse head, slow down on purpose. |
| 11:00 | 3:30pm | ~42 | ☕ CLIF SOURS — 3 blocks (caffeine) | 6–8 oz Survival shuffle is fine. Keep eating. Walk the hills if needed. |
| 11:30 | 4:00pm | ~44 | 🧂 Pretzels / chips / broth | 6–8 oz Survival shuffle is fine. Keep eating. Walk the hills if needed. |
| 12:00 | 4:30pm | ~46 | ☕ CLIF SOURS — 3 blocks (caffeine) | 6–8 oz Survival shuffle is fine. Keep eating. Walk the hills if needed. |
| 12:30 | 5:00pm | ~48 | 🧂 Pretzels / chips / broth | 6–8 oz Survival shuffle is fine. Keep eating. Walk the hills if needed. |
| 13:00 | 5:30pm | ~50 | ☕ CLIF SOURS — 3 blocks (caffeine) | 6–8 oz Survival shuffle is fine. Keep eating. Walk the hills if needed. |
Covers all five remaining long runs plus race day. Two items are flagged — you only had a single packet of each.
run-analyze.py
Watch cadence trending toward 165, ground contact under 250 ms, and decoupling under 8%. The data tells you
whether the plan is working before race day does.