Seks 1000-metere på 3:42, steady-puls 169 — 1 slag over normalen din på farten, laktat 3,8.
| Mål | I dag | Baseline | Δ |
|---|---|---|---|
| Kadens | 177 spm | 177 | +0 |
| Kontakttid | 240 ms | 234 | +6 |
| Steglengde | 1,23 m | 1,22 | +0,01 |
| Vertikal osc. | 8,8 cm | 8,7 | +0,1 |
| Vertikal ratio | 7,3 % | 7,3 | +0,1 |
| Dato | Økt | Fart | Steady-puls | Laktat | Skår |
|---|---|---|---|---|---|
| 09.07 | 10 x 1000 🇮🇹 | 3:48 | 160,2 | — | 8,9 |
| 17.07 | 8 x 1000 | 3:42 | 169,5 | 3,6 / 3,7 / 4,5 / 5,2 | 9,4 |
| 23.07 | 6 x 1000 🔥 | 3:36 | 166,7 | — | 9,6 |
| 29.07 | 6 x 5 min | 4:10 | 155,4 | — | 9,3 |
| 29.07 | 10 x 1000 @ 3:50 | 3:49 | 159,1 | 2,7 | 9,8 |
| 05.08 | 6 x 1000 @ 3:42-42-43-43-4 | 3:42 | 168,8 | 3,8 | 9,8 |
| Dato | Økt | Fart | Steady-puls | Laktat | Skår |
|---|---|---|---|---|---|
| 16.10 | 6 x 1000 @ 4:10-4:05 | 4:02 | 146,2 | — | 8,2 v1 |
| 23.10 | 8 x 1000 @ 4:10-4:00 | 4:04 | 153,2 | — | 8,8 v1 |
| 30.10 | 18 x 1000 @ 4:10 | 4:07 | 151,2 | — | 7,7 v1 |
| 25.11 | 4×1 km | 4:12 | 139,5 | — | 8,6 v1 |
| 27.11 | 4 x 1000 @ 4:10 | 4:03 | 149,4 | — | 7,3 v1 |
| 11.12 | 6 x 1000 @ 4:00 | 3:59 | 143,1 | — | 8,5 v1 |
| 18.12 | 8 x 1000 @ 3:55-3:50 | 3:52 | 142,2 | — | 8,1 v1 |
| 21.12 | 8 x 1000 @ 4:05 | 4:03 | 163,1 | — | 9,1 v1 |
| 31.12 | 8 x 1000 | 4:08 | 161,3 | — | 8,4 v1 |
| 15.01 | 8 x 1000 | 3:46 | 167,9 | — | 7,6 v1 |
| 20.01 | 8 x 1000 @ 3:50 | 3:47 | 159,2 | — | 8,4 v1 |
| 22.01 | 10 x 1000 | 3:54 | 161,8 | — | 8,5 v1 |
| 05.02 | 12 x 1000 | 3:45 | 163,0 | — | 8,9 v1 |
| 10.02 | 15 x 1000 @ 4:00 | 3:57 | 158,6 | — | 8,1 v1 |
| 12.02 | 10 x 1000 @ 3:50 | 3:45 | 166,9 | 3,3 | 9,3 v1 |
| 19.02 | 8 x 1000 @ 3:50 | 3:45 | 158,0 | — | 8,2 v1 |
| 26.02 | 10 x 1000 @ 3:50 | 3:45 | 169,1 | 3,2 | 7,9 v1 |
| 06.03 | 10 x 1000 @ 14-15 kmh | 3:57 | 133,4 | — | 7,9 v1 |
| 21.04 | 6 x 1000 | 4:07 | 156,2 | — | 7,1 v1 |
| 23.04 | 4 x 1000 | 4:06 | 160,9 | — | 9,1 v1 |
| 07.05 | 8 x 1000 @ 3:50-3:40 | 3:43 | 134,2 | — | 8,6 v1 |
| 19.05 | 10 x 1000 @ 3:50 | 3:49 | 146,0 | — | 8,4 v1 |
| 21.05 | 3 x 1000 | 3:45 | 138,3 | — | 8,6 v1 |
| 26.05 | 8 x 1000 @ 3:50 | 3:50 | 163,9 | — | 9,3 v1 |
| 16.06 | 1 x 800m | 4:01 | 144,3 | — | 4,4 v1 |
| 08.07 | 6 x 1/1 km | 4:07 | 157,3 | — | 6,2 v1 |
| 24.07 | 8 x 1000 | 3:56 | 142,7 | — | 8,5 v1 |
| 02.09 | 4 x 1000 | 3:52 | 155,1 | — | 7,6 v1 |
| 17.09 | 15 x 1000 @ 4:00 - 3:45 | 3:55 | 158,1 | — | 8,2 v1 |
| 05.11 | 6 x 1000 @ 4:00 | 4:38 | 165,8 | — | 7,9 v1 |
| 12.11 | 6 x 1000 @ 3:45 | 3:44 | 168,5 | — | 9,3 v1 |
| 17.11 | 8 x 1000 | 3:51 | 163,4 | — | 8,6 v1 |
| 19.11 | 6 x 1000 @ 3:45 | 3:44 | 132,6 | — | 8,6 v1 |
| 03.12 | 6 x 1000 @ 3:45 | 3:44 | 168,0 | — | 6,8 v1 |
| 08.12 | 7 x 1000 | 3:48 | 163,1 | — | 8,9 v1 |
| 10.12 | 6 x 1000 @ 3:45 | 3:44 | 166,7 | — | 8,9 v1 |
| 15.12 | 6 x 1000 @ 3:45 | 3:44 | 164,6 | — | 8,9 v1 |
| 01.01 | 8 x 1000 progresjon | 3:48 | 158,0 | — | 9,3 |
| 07.01 | 8 x 1000 @ 3:45 | 3:45 | 166,9 | 4,7 | 8,9 |
| 14.01 | 5 x 1000 @ ~4:00 | 3:59 | 162,2 | — | 9,4 |
| 21.01 | 10 x 1000 (8 @ 3:55, 1 @ 3 | 3:52 | 164,6 | — | 8,7 |
| 04.02 | 10 x 1000 @ 3:50 | 3:49 | 162,8 | 4,0 / 2,7 | 9,7 |
| 25.02 | 8 x 1000 @ 3:55 | 3:54 | 159,2 | — | 9,9 |
| 04.03 | 12 x 1000 @ 3:50 | 3:49 | 160,8 | 1,9 / 2,5 | 10,0 |
| 11.03 | 12 x 1000 @ 3:50 | 3:49 | 163,1 | 2,7 / 2,6 | 9,8 |
| 25.03 | 4 x 1000 @ 3:53-3:52-3:51- | 3:52 | 160,9 | — | 9,8 |
| 09.04 | 6 x 1000 aerob (post-sykdo | 3:59 | 153,2 | — | 9,6 |
| 30.04 | 8 x 1000 @ 3:55 (planlagt | 3:57 | 170,1 | — | 6,4 |
| 13.05 | 6 x 1000 @ 4:00 | 4:00 | 160,1 | 3,5 / 4,2 | 7,7 |
| 20.05 | 8 x 1000 @ 4:00-3:55 | 3:57 | 160,3 | 2,0 | 9,4 |
| 27.05 | 10 x 1000 @ 3:57-3:48 | 3:54 | 164,1 | — | 8,7 |
| 03.06 | 10 x 1000 @ 4:00-3:50 | 3:53 | 163,7 | 2,6 / 3,1 | 9,0 |
| 08.06 | 5 x 5 min | 4:08 | 155,5 | — | 9,3 |
| 10.06 | 10 x 1000 @ 4:00-3:45 | 3:49 | 161,8 | — | 7,8 |
| 17.06 | 10 x 1000 @ 3:57-3:44 | 3:50 | 162,5 | 3,3 / 3,4 | 9,4 |
| 09.07 | 10 x 1000 🇮🇹 | 3:48 | 160,2 | — | 8,9 |
| 17.07 | 8 x 1000 | 3:42 | 169,5 | 3,6 / 3,7 / 4,5 / 5,2 | 9,4 |
| 23.07 | 6 x 1000 🔥 | 3:36 | 166,7 | — | 9,6 |
| 29.07 | 6 x 5 min | 4:10 | 155,4 | — | 9,3 |
| 29.07 | 10 x 1000 @ 3:50 | 3:49 | 159,1 | 2,7 | 9,8 |
| 05.08 | 6 x 1000 @ 3:42-42-43-43-4 | 3:42 | 168,8 | 3,8 | 9,8 |
Seks tusenmetere på utendørs bane i 3:42 · 3:42 · 3:43 · 3:43 · 3:42 · 3:39. Fem drag innenfor ett sekund av hverandre, og så et sisteledd tre sekunder raskere. HR_steady gikk 166,0 → 171,2, altså +5,2 slag (3,13 %) gjennom 22 minutter arbeid. Laktat etter drag 6: 5,4 mmol.
Skår 9,0 (Eksepsjonell) — eksekvering 9,0, kontekst 9,1, fem komponenter (vektsum 0,675).
Selve utførelsen er den reneste du har levert på denne farten i år: watt-CV 1,33 %, kadens-CV 0,28 %, decoupling 0,43 %. Fire dager etter en 34-kilometer og fire dager etter siste symptomdag fra infeksjonen. HR/fart-bremsen leser ΔHR +1,6 — kroppen bruker nøyaktig den pulsen farten tilsier.
Det ene som fortsatt drar er laktaten: 5,4 mmol er høyere enn 17.07 ga på tilsvarende dose. Det står, men det står alene — se §7.
Denne analysen er skrevet om (v2) etter at økta ble reklassifisert fra I3-terskel til over_terskel og reskåret fra 8,3 til 9,0, og etter at det ble bekreftet at pulsen ble målt med Polar optisk overarmssensor. Førsteutkastets lesning av pulsfallet i pausene er trukket tilbake — begrunnelsen står i §4.
Morgentallene var gode. HRV 70 ms BALANCED mot baseline-gulv 63 — samme verdi som mandag, etter en topp på 82 tirsdag. Hvilepuls 38, som er der den har ligget hele uka (38 · 38 · 37 · 38). Stress-snitt 18. Training Readiness 74.
Det ene hakket i bildet er søvnen: 6 timer 03 minutter, skår 77 — ukas korteste natt, mot 8:54 søndag, 7:25 mandag og 7:05 tirsdag. Tre-natters-snittet står fortsatt på 7,8 timer, og sjudagers-gjelda er 2,09 timer («moderat»), så det er én kort natt og ikke en trend.
Pre-readiness composite lander på 91,0 — grønn (optimal), og det er den kontekstskåren på 9,1 hviler på. Komponentene: HRV 100/100, hvilepuls 100/100, søvnskår 77, søvngjeld 100, stress 64, sykdom 60 med days_since = 4.
Den siste linja er ny i v2. I førsteutkastet leste sykdomskomponenten 100 av 100 med days_since = null — full uttelling som standard, fordi illness_periods.json stoppet på 26.07 og den bekreftede infeksjonen 31.07–01.08 kun lå i illness_confirmed.json. De to filene er nå synket (§10), og kontekstskåren falt fra 9,2 til 9,1. Effekten er liten fordi vekten er 5 %, men retningen er riktig: dagen skal ikke få full uttelling på sykdomsfrihet fire dager etter en infeksjon. Samme synk endret prognosemodellens risikoflagg (§8).
Belastning: TSB inn i dagen −2,28 (CTL 98,91 / ATL 101,19 per 04.08). Dagens TRIMP 163,1 tar deg til TSB −9,59, CTL 100,44, ATL 110,03. Etter to hviledager og to easy-dager var du så fersk du har vært siden juni — og du brukte det.
Forhold: 13,8 °C, føles som 12,7, 83 % fuktighet, 9,7 km/t vind, overskyet, 0 mm. Ingen varmealibi og ingen varmestraff. Start kl. 18 — kveldsøkt, som normalt gir +2 slag mot ettermiddags-baseline. Sko: Saucony Endorphin Elite 2, 47,9 km totalt hvorav 36 harde. Samme sko som 23.07.
Fire dager siden siste symptomdag. Blokkevalen for uke 31 satte kvalitetsretur til dag 4–5 med 01.08 som siste symptomdag, og til fredag hvis 02.08 var det. Du valgte den tidligste av de to lesningene. Tallene under gir deg rett i det.
| Drag | Tid | Pace | HR_steady | HR første 500 m | HR maks | Watt | Kadens | Mønster |
|---|---|---|---|---|---|---|---|---|
| 1 | 222 s | 3:42 | 166,0 | 145,0 | 168 | 482 | 185 | flat |
| 2 | 222 s | 3:42 | 168,6 | 146,7 | 170 | 472 | 185 | negativ |
| 3 | 223 s | 3:43 | 169,6 | 153,3 | 172 | 481 | 185 | flat |
| 4 | 223 s | 3:43 | 169,0 | 148,3 | 170 | 467 | 185 | negativ |
| 5 | 222 s | 3:42 | 168,4 | 149,9 | 169 | 470 | 186 | flat |
| 6 | 219 s | 3:39 | 171,2 | 152,4 | 172 | 479 | 186 | flat |
Planen sa 3:42–3:45 med 60 sekunders stående pause. Du la deg på nedre kant fra første drag og ble der. Skåringsmotoren leser 6 av 6 innenfor ±3 s/km av dragspesifikk target og gir pace_target_per_rep 9,5.
Drag 6 er det som skiller seg ut. 1010 meter på 219 sekunder — 3:39/km, tre sekunder under båndets raske kant. To av seks drag har negativ split innad (drag 2: 3:48 → 3:41 over halvdelene; drag 4: 3:52 → 3:44), de fire andre er flate. Åpningen på drag 4 er den tregeste i settet, og det er også det draget som ligger lengst fra målfarten på første halvdel — 231,7 s/km. Rytmen kom tilbake i andre halvdel hver gang.
Banen gjør pace-tallene rene: stigning 0,0 m per drag i GAP-avlesningen (de 70 metrene i økt-totalen er fra oppvarming og nedjogg til og fra banen). Ingen GAP-korreksjon, ingen vindtolkning.
Én referanseramme verdt å ha med: dine seks drag lå på 100,8 % av 5 km-PB-farten (PB 18:38, altså 3:44/km). Du løp altså sekstusen meter i intervall raskere enn femkilometeren din er registrert på. Det sier vel så mye om at 5 km-PB-en er gammel som om dagens økt — men det plasserer farten der den hører hjemme: dette var ikke terskel, det var 10 km-fart.
Sonene: LT1 = 159, LT2 = 169, HRmax operasjonell 186.
HR_steady-serien er 166,0 · 168,6 · 169,6 · 169,0 · 168,4 · 171,2. Drag 1 ligger under LT2, drag 2–5 ligger på LT2 ± ett slag, drag 6 ligger 2,2 slag over. Inter-rep-driften er +5,2 bpm / 3,13 %, og halvparten av den kommer på det siste draget der du økte farten. Tar man drag 1–5 alene er driften +2,4 slag over 18 minutter — det er nesten flatt for denne intensiteten.
Intra-rep-driften er derimot stor: snitt 19,5 bpm, maks 21,9 fra første til siste 500 meter i hvert drag. Pulsen ved 500 meter lå på 145–153 og endte på 166–171 hver gang. Det er signaturen på 60 sekunders stående pause — pulsen synker mellom dragene og må opp igjen fra bunnen ved hver start. Det er design, ikke tretthet.
Tid over LT2: 217 av 1338 arbeidssekunder, 16,2 %. Systemet leser det som «lite anaerobt bidrag — terskel/sub-terskel». Aerob treningseffekt 4,3, anaerob 1,9.
Decoupling 0,43 % — pace-per-puls var 35,45 i første halvdel og 35,60 i andre. Tett koblet. På en økt der du økte farten på siste drag og pulsen fulgte etter i takt, er det så nær ideal som avlesningen blir.
HR-recovery — og her må førsteutkastet rettes. Fallet 60 sekunder etter hvert drag: 168→111 (57), 169→121 (48), 169→127 (42), 170→122 (48), 168→121 (47). Snitt 48,4 slag, som systemet leser som «sterk parasympatisk respons (god form)» og gir 9,5.
I v1 sammenlignet jeg det tallet med juli-øktene og leste et fysiologisk signal ut av forskjellen. Den sammenligningen holder ikke. Denne økta ble målt med Polar optisk overarmssensor, ikke brystbelte — og optiske sensorer underrapporterer nettopp raske pulsfall, fordi bevegelsesartefakt-filtreringen glatter ut brå endringer og gulvet legger seg for høyt. Å lese det som autonom respons var å måle sensoren, ikke kroppen.
Tallene bærer den forklaringen bedre enn de bar min:
| Økt | Snitt-fall 60 s | Puls-bunn i pausene |
|---|---|---|
| 17.07 (8 × 1000) | 59,0 | 104–122 |
| 23.07 (6 × 1000) | 77,2 | 76–103 |
| 29.07 (10 × 1000) | 68,6 | 74–105 |
| 05.08 (6 × 1000) | 48,4 | 111–127 |
Se på bunnkolonnen: 17.07 og 05.08 stopper på 104–127, mens 23.07 og 29.07 går ned i 74–103. Det er ikke en glidende skala med dagsform — det er to grupper. En kropp som gradvis restituerer dårligere gir en glidende skala; to måleprinsipper gir to grupper. Mønsteret er akkurat det man venter når to av øktene er målt optisk og to med belte. Hvilket belte som satt på 17.07 vet jeg ikke, og det er poenget: ingenting i repoet registrerer hvilken pulssensor som ble brukt. Verken activities.json, garmin_activities.json eller stream-filene har feltet. Uten det er enhver HR-recovery-sammenligning på tvers av økter uetterprøvbar — det gjelder også de tre andre radene i tabellen.
Det som står igjen etter rettelsen: 48,4 er en god absoluttverdi og skåres som det. Den sier ingenting om utvikling, og den er ikke bevis for at infeksjonen sitter igjen. Det eneste signalet som fortsatt peker den veien er laktaten (§7), og den står nå alene.
Merk hva sensoren ikke ødelegger: steady-state-pulsen under arbeid. Optiske sensorer er brukbare når pulsen er stabil, og bremsemodellen bekrefter det — ΔHR +1,6 mot 133 referansedrag betyr at HR_steady-tallene sitter der de skal. Decoupling, drift og sonetreff er alle bygget på steady-state og står.
HR/fart-bremsen (live-brems 5) leser klar: ΔHR-median +1,6 mot modellen HR = 72,8 + 20,9 · fart(m/s), bygget på 133 av dine egne drag siste 120 dager (R² 0,50). Ingen drag utenfor modellens spenn. Etter 01.08, der langturen leste +7,3 og havnet på SE-AN, er dette den avlesningen som sier at infeksjonen er ute av systemet.
VO2-utnyttelse mot lab-verdien 61,7: 93,4 % i snitt, 94,5 % på siste drag. Terskel-/HM-region, ikke VO2max-arbeid.
Watt per drag: 482 · 472 · 481 · 467 · 470 · 479. Snitt 475,2 W, spenn 15 watt, CV 1,33 % — systemet kaller det «eksepsjonelt jevn», og på 74,6 kg er det 6,37 W/kg holdt i 22 minutter fordelt på seks drag.
Kadensen er like stram: 185 · 185 · 185 · 185 · 186 · 186, CV 0,28 %, «eksepsjonelt stabil». Steglengde 123 cm mot 8-ukers-snitt 122,3 (+0,56 %).
Det interessante er forholdet mellom watt og drag 6. Du løp tre sekunder raskere på siste drag med 479 W mot settsnittet 475 — under én prosent mer effekt for 1,4 % mer fart. Det er ikke et sluttspurt-drag der du dro på; det er et drag der stegfrekvensen gikk opp ett slag og resten fulgte.
Løpsdynamikken mot 8-ukers-baselinen: kadens 88,6 mot 88,6 (+0,02 %), steglengde 123,0 mot 122,3 (+0,56 %), vertikalforhold 7,3 mot 7,3 (+0,96 %), vertikal oscillasjon 8,8 mot 8,7 (+1,49 %). Bakkekontakttid 239,8 ms mot 234,3 (+2,36 %) er det største avviket, og det er godt under 5 %-grensen. Ingen flagg. Systemets ord: «stabil løpsdynamikk vs 8-ukers-snitt».
Ingen RPE-logg for økta, så den subjektive siden mangler helt. Det koster skår (§11), men viktigere: på en økt fire dager etter sykdom er beinfølelse og pustefølelse akkurat det man vil ha nedskrevet.
Det eneste reelle fatigue-signalet i datasettet er laktaten, og den hører hjemme i §7.
Den direkte parallellen er 17.07: 8 × 1000 «over terskel», snitt 3:42, samme bane, 12,7 °C, PUMA Fast-R Nitro Elite 3. Den økta har fire laktatpunkter: Lt(2) 3,6 · Lt(4) 3,7 · Lt(6) 4,5 · Lt(8) 5,2 og skår 8,9.
Sammenligningen er nesten laboratoriemessig ren, og den går ikke helt i din favør:
| 17.07 | 05.08 | |
|---|---|---|
| Tid, drag 1–6 | 1341 s | 1331 s |
| Fart, drag 1–6 | 3:48–3:39 (stigende) | 3:42–3:39 (flat) |
| HR_steady drag 6 | 170,2 | 171,2 |
| Laktat etter drag 6 | 4,5 | 5,4 |
Ti sekunder raskere over seks kilometer, ett slag høyere puls — og 0,9 mmol høyere laktat. Etter Carls egen regel (lavere laktat ved samme fart = bedre form) er det ikke et framskritt.
Det finnes to ærlige motforestillinger, og begge er reelle. Den ene: prøven 17.07 ble tatt midt i økta med to drag igjen, mens dagens ble tatt etter det siste draget — og det siste draget var dagens raskeste og eneste under båndet. Sammenligner man i stedet siste-drag mot siste-drag, står 5,2 etter åtte drag mot 5,4 etter seks, og differansen krymper til 0,2. Den andre: 05.08 kommer fire dager etter en 34-kilometer og fire dager etter en infeksjon; 17.07 kom i en normaluke.
Konklusjonen bør derfor være forsiktig: ett punkt, en dose som ikke er identisk, og en kropp som nettopp har vært syk. Det som ikke står igjen er en påstand om at formen er bedre enn 17.07.
I v1 skrev jeg at recovery-tallet i §4 pekte samme vei og at to uavhengige avlesninger dermed sa det samme. Det er trukket tilbake — den andre avlesningen var sensoren. Laktaten står alene, og et enkeltpunkt som står alene bør behandles som det: en observasjon å bekrefte eller avkrefte, ikke en konklusjon. Alt som måles under selve arbeidet — decoupling 0,43 %, bremsemodell +1,6, watt-CV 1,33 % — peker motsatt vei.
For perspektiv på hvor 3:42 sitter nå: 29.07 ga 2,7 mmol på 3:49 etter åtte kilometer, og 27.07 ga 3,4 på 3:51. Sju sekunder raskere per kilometer flytter deg fra 2,7 til over 5. Det er en bratt kurve, og den bekrefter det COACH_INSTRUCTIONS allerede sier: 3:49 er nå aerobt billig, mens 3:42 er reelt over terskel.
23.07 — samme format, 6 × 1000 på 3:39/3:38/3:35/3:35/3:36/3:34, HR_steady 161,1 → 170,3, skår 8,1 — var raskere og ga lavere sluttpuls. Ingen laktatprøve den dagen, så den kan ikke bære sammenligningen.
CTL 100,44, ATL 110,03, TSB −9,59 etter økta. Det ligger midt i det båndet du historisk leverer best i (−15 til −5 = produktiv kvalitetsfase). Fasen er «Fase 3 uke 5 (taper EnergiMila)», uke 32, og planen kaller dagens økt «SISTE fulle terskel (T−7)» før Energimila 12.08.
Uka står på 98 planlagte km, 43,6 levert så langt, én av to kvalitetsøkter i boks. Fire ukers volum bak: 100,1 · 100,2 · 100,1 · 97,2.
phase_coherence merker økta som «passer ikke optimalt til fasen» fordi den klassifiserer 6 × 1000 som interval_medium, mens fasetabellen venter interval_long, interval_xlong, tempo_threshold eller long_run_quality_block. Den avlesningen bør ikke tas alvorlig her: en 6 × 1000 på 10 km-fart sju dager før en 10 km er nøyaktig riktig økt. Det er fasetabellens forventningsliste som er for smal for en taper-uke, ikke økta som er feil.
Prognosemodellen leser Energimila til 35:53 med sannsynlighet 81 % for sub-37 (CI 35:02–38:24). Etter sykdomssynken i §10 leser den nå illness_days_14d: 2 og har hevet risikoflagget: «Forhøyet nedsiderisiko — sikt mot nedre del av CI, ikke punktprediksjonen.» Punktprediksjonen er uendret — modellen framskriver med vilje ikke en post-sykdom-dipp — men rådet rundt den er nytt, og det er det rette rådet sju dager ut. Til sammenligning sto det før synken på et bilde av deg med null sykedager siste 14 dager.
TOSK-økt på utendørs bane, kveld. Du åpnet på 3:42 og holdt den — ingen forsiktig åpning, ingen oppbygging. Sammenlignet med 17.07, som startet på 3:48 og jobbet seg ned, er dette en helt annen strategi: der bygget du inn i økta, her låste du farten fra første runde.
Valget på siste drag er det som fortjener en kommentar. Planen sa 3:42–3:45. Du løp 3:39. Det er ikke mye, og watt-tallet viser at det ikke kostet mye — men det flyttet laktatmålingen fra å være en avlesning av den planlagte økta til å være en avlesning av et drag som lå utenfor båndet.
Og det leder til dagens ene reelle prosessfunn: planens laktatport ble aldri lest. Planteksten sier ordrett «Laktat styrer: >4,5 på drag 3 → resten @ 3:45». Prøven ble tatt etter drag 6. Porten kunne dermed ikke virke.
Ville den ha fyrt? Sannsynligvis ikke. Ved drag 3 sto du på 3:43 med HR_steady 169,6, og labprofilen projiserer 3,17 mmol der — trygt under 4,5. Porten ville altså ha sluppet deg videre. Men den ville ha gitt deg et andre punkt på kurven, og med to punkter (drag 3 og drag 6) ville du visst om 5,4 kom av det raske sisteleddet eller av at hele økta lå høyere enn den skulle. Nå vet du det ikke. Det er den eneste informasjonen dagen faktisk mistet.
En detalj til: labprofilens HR→laktat-projeksjon leser 3,49 mmol ved HR_steady 171,2. Målt: 5,4. Avviket er ikke et feilmål — det er at pulsen komprimeres nær LT2 mens laktaten ikke gjør det. Ved 3:39/km, ti sekunder raskere enn LT2-farten 3:49, er 5,4 mmol helt som ventet fra fart-siden. Projeksjonen fra puls kan ikke brukes til å dømme laktat i dette området.
Systemet splitter 70 % eksekvering (objektiv) / 30 % kontekst (dagsform). Eksekvering 9,0, kontekst 9,1, total 9,0 (Eksepsjonell). Fem komponenter, vektsum 0,675.
| Komponent | Vekt | Skår | Note |
|---|---|---|---|
| pct_reps_in_zone | 12,5 % | 9,5 | 5/6 drag i HR-bånd (83 %) — halvert vekt fordi laktat er målt |
| inter_rep_drift | 15 % | 9,0 | +5 bpm rep1→repN |
| hr_recovery | 15 % | 9,5 | Snitt-drop 60 s: 48 bpm |
| pace_target_per_rep | 15 % | 9,5 | 6/6 innen ±3 s/km |
| laktat_treff | 10 % | 7,0 | Målt 5,4 mmol — i grenseland |
Dette er skåren etter reklassifisering. Førsteutkastet sto på 8,3 (Sterk) med eksekvering 7,8, og forskjellen er hele poenget i denne seksjonen.
Funn 1 — økta var skåret som I3. intensity_zone var I4, men score_tag ble terskel — I3-kategorien, med HR-bånd 160–169, laktatbånd 2,0–3,3 og pace-bånd 3:45–4:10. Alle seks drag lå raskere enn hele pace-båndet, som i seg selv burde vært et varsel. Kategorien som passer heter over_terskel, og dens eksempelliste inneholder ordrett strengen «6 x 1000 @ 3:42».
Årsaken er ikke uheldig substring-matching, men en eksplisitt regel. _label_resolver i session_types.json har som mønster 12: {"contains": ["høy terskel", "hoy terskel"], "tag": "terskel"}. Og «høy terskel» er nettopp navnet systemet selv gir I4-sonen (intensity_zone_name), som resolveren limer inn i søketeksten. Mønster 3 fanger «over terskel» og ligger foran — derfor fikk 17.07 riktig bånd og denne ikke. Regelen sier altså at I4-sonens eget navn betyr I3.
Hva reklassifiseringen gjorde:
| terskel (v1) | over_terskel (v2) | |
|---|---|---|
| Drag i HR-sonen | 4/6 (67 %) → 6,5 | 5/6 (83 %) → 9,5 |
| laktat_treff | 5,4 «over target» → 5,0 | 5,4 «i grenseland» → 7,0 |
| pa_hr_coupling | 9,5 (15 %) | faller ut av vektsettet |
| Eksekvering | 7,8 | 9,0 |
| Total | 8,3 Sterk | 9,0 Eksepsjonell |
Én forbeholdelse i ærlighetens navn: over_terskel-varianten har tynnere dekning — fem komponenter og vektsum 0,675, fordi pa_hr_coupling faller ut og pct_reps_in_zone halveres når laktat er målt. 9,0 hviler dermed på færre bein enn 8,3 gjorde. Retningen er likevel riktig: økta ble målt mot et bånd den aldri var ment å treffe.
Reklassifiseringen er lagt inn i data/static/quality_overrides.json på strava_id 19616255315, ikke ved å endre resolveren. Det betyr at 28.04, 01.06 og 23.07 fortsatt står skåret som I3 — alle tre er I4-økter merket «høy terskel». En endring av mønster 12 ville reskåre dem alle, og de er låst og fryst. Det er en egen beslutning.
Funn 2 — to sonedefinisjoner i samme kjøring. time_in_zone bruker I4-båndet [170–175] og rapporterer 16,2 % i sonen / 83,8 % under. pct_reps_in_zone bruker nå [168–177]. Begge er «I4», men de er ikke samme bånd — det ene er en fast sonetabell, det andre en dynamisk [lt2−1, 0,95 × maks]. Før reklassifiseringen var spriket verre (160–169 mot 170–175, med motsatt konklusjon), men det er ikke borte.
Funn 3 — ingen kilde til hvilken pulssensor som ble brukt. Som §4 dokumenterer: økta ble målt optisk, ikke med belte, og det avgjør om hr_recovery kan sammenlignes på tvers av økter. Feltet finnes ikke i noen datafil. hr_unreliable.json har heller ingen bruk her — koden der er alt-eller-ingenting (dropper fem HR-komponenter og setter tak 8,5 på eksekvering), selv om filas eget _skjema lover et exclude_components-felt per økt. Det feltet er dokumentert, men ikke implementert: HR_BASED_COMPONENTS er hardkodet i quality_session_metrics.py. Å flagge denne økta ville derfor kastet fem gode komponenter for å håndtere én.
Kontekstskåren på 9,1 kommer utelukkende fra pre-readiness composite 91,0 (grønn) — se §2 for hvorfor den falt fra 9,2.
Etter reskåringen står bare én post igjen i systemets egen liste:
python3 sync_all.py --log-session. På den første kvalitetsøkta etter en infeksjon er beinfølelse og pustefølelse det mest verdifulle datapunktet du kan legge til, og det eneste ingen sensor kan hente inn i ettertid. Det er også det eneste som ville sagt noe om restitusjonen i dag som ikke er sensoravhengig.Utover det er det ikke skåren som har mest å hente, men datagrunnlaget:
hr_recovery ikke sammenlignbar over tid — verken for denne økta eller de tre andre i §4-tabellen.laktat_treff 7,0 er reell, ikke et artefakt: 5,4 ligger 0,4 over over_terskel-takets 5,0 og 0,9 over planens eget målbånd 3,5–4,5. Den posten løftes av at draget treffes, ikke av at kategorien endres.Dette var riktig økt på riktig dag. Du hadde TSB −2,28, HRV 70, hvilepuls 38 og fire dager på easy bak deg, og du brukte den ferskheten på den siste fulle terskelen før Energimila. Utførelsen — 1,33 % watt-spredning, 0,28 % kadens-spredning, 0,43 % decoupling — er den reneste på denne farten i år, og HR/fart-bremsen på +1,6 sier at pulsen under arbeid er tilbake der den skal være.
Det ene som skal tas med videre: laktaten på 5,4 er ikke et framskritt fra 17.07. Det er én måling, tatt etter et drag som lå utenfor båndet, og den står nå alene — v1s andre signal viste seg å være pulssensoren, ikke kroppen. Ikke grunn til å endre noe, men grunn til å måle igjen.
Og en påminnelse om hvordan dette dokumentet ble til: førsteutkastet ga økta 8,3 og bygde en fysiologisk fortelling på en HR-avlesning som ikke tålte sammenligning. Begge deler er rettet. Lærdommen er den samme begge steder — et tall er ikke en observasjon før man vet hva som produserte det.
Neste økt som betyr noe er fredagens langtur, 30 km med 5-4-3-2-1 km @ 4:00–4:05 og 1 km flyt mellom. Den er den eneste MP-dosen i uke 32 og den første av seks som skal ta Amsterdam-blokka fra ~62 til ~102 kvalitets-km på langtur. Den skal vernes; dagens økt kan hentes inn av mandagens primer, fredagens kan ikke hentes inn.
Til trener, tre flagg. Lær: _label_resolver-mønster 12 mapper I4-sonens eget navn til I3-båndet — denne økta er rettet med en override, men 28.04, 01.06 og 23.07 står fortsatt feil, og de er låst. Vurder: et hr_sensor-felt, og en implementering av exclude_components i hr_unreliable.json slik at én dårlig komponent kan droppes uten å kaste fem gode. Observer: laktaten på mandagens primer og på selve Energimila — 5,4 fra i dag trenger et andre punkt før det betyr noe.
| # | Tid | Fart | Mål | Første 500 | Siste 500 | Steady-puls | Forventet | Maks | Fall 60 s | Effekt | Kadens | Laktat |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 3:42 | 3:42 | 3:42–3:45 | 3:43 | 3:42 | 166,0 | 168,1 (−2,1) | 168 | −57 | 482 W | 185 | — |
| 2 | 3:42 | 3:42 | 3:42–3:45 | 3:48 | 3:40 | 168,6 | 168,1 (+0,5) | 170 | −48 | 472 W | 185 | — |
| 3 | 3:43 | 3:43 | 3:42–3:45 | 3:44 | 3:44 | 169,6 | 167,6 (+2,0) | 172 | −42 | 481 W | 185 | — |
| 4 | 3:43 | 3:43 | 3:42–3:45 | 3:52 | 3:44 | 169,0 | 167,6 (+1,4) | 170 | −48 | 467 W | 185 | — |
| 5 | 3:42 | 3:42 | 3:42–3:45 | 3:42 | 3:44 | 168,4 | 168,1 (+0,3) | 169 | −47 | 470 W | 186 | — |
| 6 | 3:39 | 3:39 | 3:42–3:45 | 3:38 | 3:40 | 171,2 | 169,7 (+1,5) | 172 | — | 479 W | 186 | 3,8 |
| Dag | HRV | Hvilepuls | Søvn |
|---|---|---|---|
| D+1 | 79 ↑ +7,4 | 38 ↓ −0,3 | 93 ↑ +10,3 |
| D+2 | 77 ↑ +5,4 | 38 ↓ −0,3 | 92 ↑ +9,3 |
{
"activity_id": 19616255315,
"date": "2026-08-05",
"name": "OnsdagsTOSK",
"session_label": "6 x 1000 over terskel",
"quality_type": "interval",
"interval_structure": "6 x 1000 @ 3:42-42-43-43-42-39",
"interval_type": "distance",
"is_track": true,
"is_treadmill": false,
"arena": "utendørs bane",
"distance_km": 17.88,
"duration_s": 5715,
"moving_time_s": 5209,
"avg_hr": 141.9,
"max_hr": 172.0,
"avg_power": 390.3,
"avg_cadence": 88.6,
"avg_gct": 239.8000030517578,
"avg_stride_length": 123.0,
"avg_vertical_oscillation": 8.85,
"avg_vertical_ratio": 7.340000152587891,
"elevation_gain": 70.0,
"gear_name": "Saucony Endorphin Elite 2",
"gear_km_at_run": null,
"weather": {
"temp_c": 13.8,
"feels_like_c": 12.7,
"humidity_pct": 83,
"wind_kmh": 9.7,
"precip_mm": 0.0,
"condition": "overskyet"
},
"quality_km": 6.0,
"quality_avg_pace": "3:42",
"quality_avg_hr": 160,
"quality_avg_power": 475,
"quality_avg_cadence": 185,
"lactate": [
{
"after_rep": 6,
"value": 3.8
}
],
"reps": [
{
"n": 1,
"prescribed_distance_m": 1000,
"gps_distance_m": 1000,
"time_s": 222,
"elapsed_time_s": 222,
"pace": "3:42",
"hr_avg": 156,
"hr_max": 168.0,
"cadence": 185,
"power": 482,
"per_km": null,
"n_laps_in_rep": 1,
"merged_from_laps": null,
"flag": null,
"stream_stats": {
"stream_idx_start": 1617,
"stream_idx_end": 1838,
"hr_first_500m": 145.0,
"hr_last_500m": 166.0,
"hr_steady_state": 166.0,
"pace_first_500m_s": 223.0,
"pace_last_500m_s": 221.9,
"pace_steady_state_s": 221.9
}
},
{
"n": 2,
"prescribed_distance_m": 1000,
"gps_distance_m": 1000,
"time_s": 222,
"elapsed_time_s": 222,
"pace": "3:42",
"hr_avg": 158,
"hr_max": 170.0,
"cadence": 185,
"power": 472,
"per_km": null,
"n_laps_in_rep": 1,
"merged_from_laps": null,
"flag": null,
"stream_stats": {
"stream_idx_start": 1899,
"stream_idx_end": 2121,
"hr_first_500m": 146.7,
"hr_last_500m": 168.6,
"hr_steady_state": 168.6,
"pace_first_500m_s": 227.9,
"pace_last_500m_s": 220.5,
"pace_steady_state_s": 220.5
}
},
{
"n": 3,
"prescribed_distance_m": 1000,
"gps_distance_m": 1000,
"time_s": 223,
"elapsed_time_s": 223,
"pace": "3:43",
"hr_avg": 162,
"hr_max": 172.0,
"cadence": 185,
"power": 481,
"per_km": null,
"n_laps_in_rep": 1,
"merged_from_laps": null,
"flag": null,
"stream_stats": {
"stream_idx_start": 2185,
"stream_idx_end": 2408,
"hr_first_500m": 153.3,
"hr_last_500m": 169.6,
"hr_steady_state": 169.6,
"pace_first_500m_s": 223.6,
"pace_last_500m_s": 224.3,
"pace_steady_state_s": 224.3
}
},
{
"n": 4,
"prescribed_distance_m": 1000,
"gps_distance_m": 1000,
"time_s": 223,
"elapsed_time_s": 223,
"pace": "3:43",
"hr_avg": 160,
"hr_max": 170.0,
"cadence": 185,
"power": 467,
"per_km": null,
"n_laps_in_rep": 1,
"merged_from_laps": null,
"flag": null,
"stream_stats": {
"stream_idx_start": 2461,
"stream_idx_end": 2691,
"hr_first_500m": 148.3,
"hr_last_500m": 169.0,
"hr_steady_state": 169.0,
"pace_first_500m_s": 231.7,
"pace_last_500m_s": 224.0,
"pace_steady_state_s": 224.0
}
},
{
"n": 5,
"prescribed_distance_m": 1000,
"gps_distance_m": 1000,
"time_s": 222,
"elapsed_time_s": 222,
"pace": "3:42",
"hr_avg": 160,
"hr_max": 169.0,
"cadence": 186,
"power": 470,
"per_km": null,
"n_laps_in_rep": 1,
"merged_from_laps": null,
"flag": null,
"stream_stats": {
"stream_idx_start": 2755,
"stream_idx_end": 2978,
"hr_first_500m": 149.9,
"hr_last_500m": 168.4,
"hr_steady_state": 168.4,
"pace_first_500m_s": 222.5,
"pace_last_500m_s": 224.4,
"pace_steady_state_s": 224.4
}
},
{
"n": 6,
"prescribed_distance_m": 1000,
"gps_distance_m": 1010,
"time_s": 219,
"elapsed_time_s": 219,
"pace": "3:39",
"hr_avg": 162,
"hr_max": 172.0,
"cadence": 186,
"power": 479,
"per_km": null,
"n_laps_in_rep": 1,
"merged_from_laps": null,
"flag": null,
"stream_stats": {
"stream_idx_start": 3040,
"stream_idx_end": 3259,
"hr_first_500m": 152.4,
"hr_last_500m": 171.2,
"hr_steady_state": 171.2,
"pace_first_500m_s": 217.8,
"pace_last_500m_s": 219.7,
"pace_steady_state_s": 219.6
}
}
],
"block_id": 13,
"block_phase": "build",
"training_block": "Amsterdam Maraton 2026",
"block_goal_date": "2026-10-18",
"hr_unreliable": false,
"description": "6 x 1000 @ 3:42-42-43-43-42-39\r\nLt(6) 3,8",
"session_score": 9.8,
"execution_score": 9.0,
"context_score": 9.1,
"score_tier": "Eksepsjonell",
"score_tag": "over_terskel",
"_scorer_version": "2.0.0-2026-09-09"
}