Legacy-hub — det gamle designet, bygges fortsatt nattlig. Den nye huben ligger på hub.html (Hub 2.0). Denne sida pensjoneres ved eget vedtak.
📝 Morgenbrief · Fredag 2026-09-11 Klar for trening — full kvalitet OK
💤 Restitusjon • HRV 68 ms, -6 vs i går (7d-snitt 69)
• RHR 38 bpm (snitt 38.1)
• Søvn 6.6t / 84
✓ Training Readiness 88 — høy
ℹ Natt: overnight HR 40 (-3 vs 14d) · resp 11.0 · natt-HRV 68
📊 Form 📈 TSB -6 — kvalitetsfase. Du tilbringer ~25 % av tida her, normal arbeidsuke uten alarm.
• CTL 108 (fitness) · ATL 114 (siste 7d)
📋 I går 11 km kvalitetsøkt i går. HRV-respons innenfor forventning.
🏃 Dagens plan 📋 Easy 6 km · 6 km · sone I1
🟢 Klar — kjør plan som lagt opp
🌤️ Vær i dag ☁️ 7–16°C
💊 Supplement 💊 D3 6400 IE E2D + Feraccru E2D (jern annenhver dag).
📅 Kalender i dag I dag: heldags M: Øvingshelg · heldags D: Badedag!! · 18:00 Bokslepp Pappa.
🌤️ Vær 7 dager · Trondheim (Yr.no)
Fre 11.9
☁️
716°
💨 3 m/s · 🌧 0.0 mm
Lør 12.9
☁️
815°
💨 4 m/s · 🌧 0.0 mm
Søn 13.9
☁️
913°
💨 4 m/s · 🌧 0.0 mm
Man 14.9
☁️
913°
💨 2 m/s · 🌧 0.0 mm
Tir 15.9
🌧️
1114°
💨 3 m/s · 🌧 8.3 mm 🌧
Ons 16.9
☁️
912°
💨 4 m/s · 🌧 4.8 mm
Tor 17.9
🌧️
813°
💨 3 m/s · 🌧 3.6 mm

Historiske grafer for kroppstilstand. Velg tidsvindu — opp til alt-time. Daglig verdi (transparent) + 7-dagers glidende snitt (mørk linje) + baseline (gull) der relevant.

💚21 dager BALANCED HRV på rad
😴7 netter søvn ≥ 80
🧠7 dager lav stress
🛏️ Søvngjeld · siste 15 dager
1.1 t
Snitt 7.6t/natt vs 7.5t-mål
Totalt 114t mot 112t mål
🦠 Dysregulerings-gate
🟢 Fortsett
ingen aktiv autonom forstyrrelse
Dyp = ≥2 kardinale overnatt-markører (RHR/HRV/natte-HR) i ≥2 av siste 3 d · temp 10°C
💗 HRV-variabilitet (CV) · 29d
10.3%
Moderat · SD 7.1 på snitt 69.4 ms
Grønn stipling = målnivå 12.5 % · skal falle gjennom taper

🎯 Beredskap (historisk)

💗 HRV (gull linje = baseline · rød skygge = bekreftet infeksjon · gul skygge = vedvarende belastning/stress · blå = ferie · 🏁 = race · 🍷 = alkohol)

❤️ Hvilepuls (RHR)

🌙 Overnight HR (snitt natt)

🫁 Respirasjon (snitt natt)

😴 Søvn (score venstre · timer høyre)

⚡ Training Readiness

🧠 Stress (snitt)

🔋 Body Battery (peak)

🔀 Sammenlign to metrikker (normalisert 0–100 i vinduet — mønster-jakt, ikke absoluttverdier)

vs

Siste 7 dager — wellness

DatoHRVStatusRHRSøvnStressTR
2026-09-1168BALANCED386.6h/841288
2026-09-1074BALANCED387.5h/962076
2026-09-0978BALANCED378.1h/941675
2026-09-0863BALANCED387.2h/831858
2026-09-0763BALANCED388.1h/901954
2026-09-0668BALANCED398.1h/892123
2026-09-0565BALANCED398.0h/912181

🏠 Blokka nå — blokkuke 8 av 13 · plan v4.3 (frosset original 18.07) · Running_Brief_Plan_Kbh-Amsterdam_v4.md

🏁
København HM
09-20 · om 9 d · A-mål · P(mål) 35 %
🏁
Amsterdam Maraton
10-18 · om 37 d · A-mål · P(mål) 88 %
I dag · Fre 11.09
Easy 6 km
6 km · I1
I morgen · Lør 12.09
Langtur 20 km m/ 5 km @ HMP 3:47–3:50 — KBH-GENERALPRØVE + fylling + race-frokost. Sko: Adios Pro 4
20 km · I1-I3
Bremser (live)
RHR 7d38 / brems ≥41grønn
Overnight-HR 7d42 / brems ≥46grønn
HRV / baseline68 / 62 (abort <55)grønn
TSB (morgen)-6info
7d-brudd i ≥5 d → −30 % volum + én kvalitet ut · full tabell: ⚙️ Øktformer & regler
Porter og målepunkter
T2.519.07
Kontroll #220.07
Kontroll #303.08
Energimila12.08
Kontroll #417.08
Lab (T3)01.09
Go/no-go19.09
🏁Kbh HM20.09
P4-port11.10
🏁Amsterdam18.10
Langtur-trappa · ≥30 km
10 / 11 (≥34: 4 planlagt+gjort)
34
34
34
32
34
33
30
35
33
32
36
fylt = gjennomført · ring = ≥34 · B1b: >3 HRV-dager flagges
K6-speilet · 8-ukers I3-dragsnitt
3:48.0 → mål ≤3:47 ved T−7
delmål 1.9: ≤3:49 · port søn 13.9 (u31–37) · racefart ≈ dragsnitt (Berlin: −2 s)
MP-km eksplisitt (L4 + 3/1)
87 / 90
u34: 18 · u35: 14 · u40: 33 · u41: 15 · u42: 10 — teller kun kontrollert utført (P4)
Laktat-serien · 5×2000 @ 3:52
2,2
#3 · 2,2→2,3
09-08 ✓
2,6–3,0
#2
20.7
2,4–2,8
#3
3.8
2,3–2,7
#4
17.8
lab
T3
31.8
fallende Lt(2) @ 3:52 = LT2 flytter riktig vei · drag2→5 > +0,4 = clearance-flagg

⚡ Kvalitetsøkter

434
Totalt
69
2026
95
2025
108
2024
61
2023
34
2022
40
2021
27
2020
2960
Total q-km
4839
Total km
325
Terskel
47
Aerob
65
VO2max
43
45/15
13
Motbakke
2
Hybrid
7
Langtur
111
Mølle
100
Innendørs bane
49
Utendørs bane
Dato Dag Struktur Kategori Drag n Total Kv-km Pace drag HR snitt HR maks Score Sko Vær

🛣️ Langturer

225
Totalt
27
2026
38
2025
44
2024
36
2023
43
2022
29
2021
6
2020
5826
Total km
501t
Tid på bena
75
L1
L1 · Rolig volum
Ren rolig langtur i sin helhet under første terskel (LT1/I1-sonen). Formål: aerob grunntrening — kapillarisering, fettforbrenning og tid på beina. Skåres på aerob respons (vekt 0.35), distanse (0.25), pace-økonomi (0.20) og decoupling (0.20). Dette er «brød og smør»-langturen som hele uka hviler på.
42
L2
L2 · Standard
Klassisk langtur med naturlig fartsøkning eller en jevn moderat del, men uten strukturert maratonfart. Ligger et hakk over L1 og driver opp i øvre rolig / nedre moderat sone (I2). Skåres på aerob (0.30), decoupling (0.25), distanse (0.25) og pace-økonomi (0.20). Bygger utholdenhet med litt mer belastning enn L1.
15
L3
L3 · Progressiv
Progresjonslangtur der farten bygger seg opp gjennom økta og avsluttes raskere enn den startet — ofte mot moderat/terskel til slutt. Har en egen «progresjon»-komponent (vekt 0.30) i tillegg til aerob (0.25), distanse (0.15), decoupling (0.15) og pace-økonomi (0.15). Trener pacing-disiplin og motstand mot tretthet.
78
L4
L4 · Maratonfart
Langtur med en betydelig blokk i maratonfart (MP) — den mest maratonspesifikke langtur-økta. Skåres tungt på «kvalitet» (0.35: hvor mange km i fart og hvor tro mot MP), pluss aerob (0.20), distanse (0.15), decoupling (0.15) og pace-økonomi (0.15). Bygger racespesifikk utholdenhet.
10
L5
L5 · Terskelblokker
Langtur med terskelblokker — raskere enn maratonfart, rundt LT2. Høy-intensiv kvalitet lagt inn i en langtur. Skåres som L4 med «kvalitet» (0.35) tyngst. Utvikler laktatterskelen i en utholdenhetskontekst; de mest krevende langturene med stor treningseffekt.
5
L6
L6 · Spesial
Spesielle/atypiske økter som ikke passer i de andre kategoriene — f.eks. back-to-back-langturer, race-simulering eller uvanlig struktur. Arver skåringsvektene til sin grunntype: rolig → L1-aktig, kvalitet → L4-aktig, progressiv → L3-aktig.
40
18-20 km
75
20-25 km
32
25-30 km
48
30-35 km
30
35+ km
Dato Dag Navn Blokk Klasse Format Dist Tid Pace HR snitt HR maks Kv-km Stign Sko Vær Skår

💡 Klikk på et løp for å åpne hele analysen i ny fane.

Distanse er rundet til offisiell verdi. Pace beregnet fra offisiell tid + offisiell distanse. Stigning fra Strava. Klikk kolonne-header for å sortere — særlig nyttig på Skår.

Dato Navn Type Dist Tid Pace HR snitt HR maks Stign Skår Sko Vær

🏆 Personlige rekorder — top 5 per distanse

Beregnet fra offisielle distanser og tider. Klikk en rad for å åpne race-dashboard.

5 km

#TidPaceDatoLøpSkår
1 🏆18:383:44/km2025-08-135k-split fra EnergiMila 2025 (første halvdel)6.2

10 km

#TidPaceDatoLøpSkår
1 🏆36:433:40/km2026-08-12Energimila 36:43 🔥9.8
237:243:44/km2025-08-13EnergiMila 37:24 🥳🤩7.9
338:263:51/km2025-06-07Sommernattsløpet 38:26 🥳8.8
438:383:52/km2024-03-2210k på bane. 38:38 og pers 🥳7.7
539:253:56/km2024-05-25Nidaros Løpefest 39:254.4

Halvmaraton

#TidPaceDatoLøpSkår
1 🏆1:21:193:51/km2026-03-29🇩🇪 Berlin halvmaraton 1:21:19 🇩🇪9.8
21:24:244:00/km2025-09-06Trondheim halvmaraton 1:24:248.3
31:27:494:10/km2023-09-02Trondheim halvmaraton 2023 - 1:27:49 🎉8.2
41:29:164:14/km2022-11-05Halvmaraton med TOSK8.9
51:33:454:27/km2021-08-08Halvmaraton6.9

Maraton

#TidPaceDatoLøpSkår
1 🏆2:53:064:06/km2025-10-26🇩🇪 Frankfurt Maraton 2:53:06 🇩🇪9.4
22:56:364:11/km2024-12-01Valencia Maraton 2:56:36 🇪🇸8.0
32:59:114:15/km2024-05-05København Maraton 2:59:11 🇩🇰8.6
42:59:344:15/km2024-09-29Berlin Maraton 2:59:34 🇩🇪8.0
53:09:024:29/km2023-11-05New York Marathon 3:09:02 🗽🎉5.9

3000 m bane

#TidPaceDatoLøpSkår
1 🏆10:493:36/km2024-03-103000 meter - 10:492.2

📈 PR-utvikling per distanse

Hver kurve viser den raskeste tiden per race over historikken (akkumulert PR-progresjon). Punkter er race-tider, kurven er rullende minimum.

📊 World Athletics-poeng per løp

Én skala på tvers av distanser. Stiplede linjer = målnivået: 518 p = sub-1:20 halvmaraton, 522 p = sub-2:50 maraton. Hold over et punkt for detaljer.

🚶 Rolige turer

1444
Totalt
154
2026
245
2025
217
2024
199
2023
149
2022
166
2021
212
2020
102
2019
11294
Total km
1066t
Tid på bena
1046
☀️ Utendørs
355
🏠 Innendørs
43
? Ukjent arena
281
<5 km
720
5-10 km
372
10-15 km
68
15-20 km
3
20+ km
Dato Ukedag Navn Arena Dist Tid Pace HR snitt HR maks Stign Sko Vær Temp

🔬 Tester

Makspuls-tester, laktatprofiler og VO2max-målinger. Klikk på en rad for å se testresultat. · Laktat · puls · fart — alle feltmålinger mot labkurvene (3D, avvikskart, tidsserie) →

6
Totalt
2
🔬 Lab (Laktat+VO2)
1
🩸 Laktatprofil
3
💗 Makspulstest
DatoTypeTittelResultat
2026-09-01🔬 Lab (Laktat+VO2)Laktatprofil og VO2-maks (test 2) →HRmax 186 · LT1 160 · LT2 170 @ 3:45 · VO2 61.1 · TaiDoc ×0,7 = Biosen
2026-02-24🔬 Lab (Laktat+VO2)Laktatprofil og VO2-maks →HRmax 186 · LT1 159 · LT2 169 @ 3:49 · VO2 61.7
2025-11-10💗 MakspulstestMakspulstest →HRmax 188 (peak 183 + 5)
2024-05-31💗 MakspulstestMakspulstest →HRmax 185 (peak 180 + 5)
2024-03-01🩸 LaktatprofilLaktatprofil Løplabbet Lade →Første laktatprofil — venter på data
2020-05-10💗 MakspulstestMislykket forsøk på makspulstest →HRmax 186 (peak 181 + 5)
Uke 37 · 11. september
🏋️ Fase S5-HM-taper
Tir: Pre-HM minimal · Tor: INGEN PLYOMETRI — bare mage/supermann om ønskelig (Rodal #1+
Logg-statistikk
9 økter · 9 øvelser
Siste: 2026-06-18
Uke 37 · Fase S5-HM-taper · 2026-09-07 → 2026-09-13 ● Nå
Tirsdag · Pre-HM minimal
knebøy 2×4 @ 60 kg · RPE 5
vedlikehold
copenhagen adductor 3×8 @ kroppsvekt · RPE 5
Torsdag · INGEN PLYOMETRI — bare mage/supermann om ønskelig (Rodal #1+5+9)
INGEN PLYOMETRI — bare mage/supermann om ønskelig (Rodal #1+5+9)
Uke 38 · Fase S5-HM-uke · 2026-09-14 → 2026-09-20
Tirsdag · INGEN STYRKE
INGEN STYRKE
Torsdag · INGEN STYRKE
INGEN STYRKE
Uke 39 · Fase S6-post-HM · 2026-09-21 → 2026-09-27
Tirsdag · HVILE / lett mobility
HVILE / lett mobility
Torsdag · Lett core
copenhagen adductor 3×8 @ kroppsvekt · RPE 5
plank 3×45s @ kroppsvekt · RPE 5
Uke 40 · Fase S6-vedlikehold · 2026-09-28 → 2026-10-04
Tirsdag · Lett A
knebøy 2×5 @ 60 kg · RPE 6
bulgarian split squat 2×6 @ 12.5 kg · RPE 6
hip thrust 2×8 @ 50 kg · RPE 6
copenhagen adductor 3×8 @ kroppsvekt · RPE 6
Torsdag · Rodal-styrke 1 runde (lett)
Uke 41 · Fase S6-maraton-taper · 2026-10-05 → 2026-10-11
Tirsdag · Maraton-taper lett
knebøy 2×4 @ 55 kg · RPE 5
copenhagen adductor 3×8 @ kroppsvekt · RPE 5
Torsdag · INGEN PLYOMETRI før maraton — bare core (Rodal #1+5+9 om ønskelig)
INGEN PLYOMETRI før maraton — bare core (Rodal #1+5+9 om ønskelig)

⚖️ Kroppsmål

⚖️ Vekt

73.8kg
2026-09-09-0.4 kg siden 08-09

Referansevekt i carl.json er 74 kg (W/kg-beregninger). Grønt bånd = referanse ±1 kg, gulv 73 kg (SHBG) — helseovervåkning, ikke styringsmål. Logges sporadisk, så kurven er punkter, ikke en trend.

DatoVektEndringKilde
2026-09-0973.8 kg-0.4garmin
2026-08-0974.2 kg+0.0garmin
2026-08-0474.2 kg-0.4garmin
2026-07-3074.6 kg-0.6manuell
2026-07-2075.2 kg+1.7garmin
2026-06-0773.5 kg+0.2garmin
2026-05-2273.3 kg-0.2garmin
2026-05-1973.5 kg+0.0garmin

🩺 Blodtrykk

122/75mmHg
2026-07-29 · puls 40 · legekontor
DatommHgPulsKontekst
2026-07-29122/7540legekontor
2026-06-04123/7538formiddag, før lunsj, ikke spist
2025-10-14114/7138morgen

WHO-bånd. Systolisk: <120 optimal, 120-129 normal, 130-139 høy-normal, ≥140 hypertensjon · Diastolisk: <80 optimal, 80-84 normal, 85-89 høy-normal, ≥90 hypertensjon

Aerob trent: typisk 105-120 / 65-75 i hvile, HR 35-50. Carl: HRmax 186, hvilepuls 37-45 målt natt.

Måles ved spesifikke målepunkter, ikke daglig. Kontormålinger kan ha white coat-effekt.

🩸 Helse & blodprøver

Jern & blod

Hemoglobin
13,2 g/dL
BAD
Ref: 13,4 - 17,0
Sist: 21.07.2026 · 24 prøver
B-Hemoglobin — 24 målinger
Mål for utøver: >14 g/dL
DatoVerdiRef
21.07.202613,2 g/dL13,4 - 17,0
20.04.202613,5 g/dL13,4 - 17,0
10.03.202613,5 g/dL13,4 - 17,0
06.01.202613,1 g/dL13,4 - 17,0
03.06.202513,3 g/dL13,4 - 17,0
22.04.202512,8 g/dL13,4 - 17,0
28.11.202413,0 g/dL13,4 - 17,0
22.05.202413,7 g/dL13,4 - 17,0
Hematokrit
0,41
WARN
Ref: 0,40 - 0,50
Sist: 21.07.2026 · 4 prøver
B-Hematokrit — 4 målinger
DatoVerdiRef
21.07.20260,41 0,40 - 0,50
10.03.20260,42 0,40 - 0,50
06.01.20260,40 0,40 - 0,50
03.06.20250,41 0,40 - 0,50
MCV
94 fL
OK
Ref: 82 - 98
Sist: 21.07.2026 · 12 prøver
MCV — 12 målinger
DatoVerdiRef
21.07.202694 fL82 - 98
10.03.202694 fL82 - 98
06.01.202691 fL82 - 98
22.04.202595 fL82 - 98
28.11.202499 fL82 - 98
22.05.202493 fL82 - 98
24.01.202495 fL82 - 98
27.02.202392 fL82 - 98
MCH
30 pg
OK
Ref: 27 - 33
Sist: 21.07.2026 · 12 prøver
MCH — 12 målinger
DatoVerdiRef
21.07.202630 pg27 - 33
10.03.202630 pg27 - 33
06.01.202630 pg27 - 33
22.04.202530 pg27 - 33
28.11.202431 pg27 - 33
22.05.202430 pg27 - 33
24.01.202430 pg27 - 33
27.02.202330 pg27 - 33
Ferritin
65 ug/L
WARN
Ref: 20 - 300
Sist: 21.07.2026 · 25 prøver
S-Ferritin — 25 målinger
Mål for utøver: >100 µg/L (utholdenhetsmål)
DatoVerdiRef
21.07.202665 ug/L20 - 300
20.04.202661 ug/L20 - 300
10.03.202671 ug/L20 - 300
06.01.202653 ug/L20 - 300
03.06.202571 ug/L20 - 300
22.04.202583 ug/L20 - 300
28.11.202494 ug/L20 - 300
22.05.202493 ug/L20 - 300
Transferrinreseptor
1,11 mg/L
OK
Ref: 0,76 - 1,76
Sist: 21.07.2026 · 3 prøver
S-Transferrinreseptor — 3 målinger
DatoVerdiRef
21.07.20261,11 mg/L0,76 - 1,76
03.06.20251,10 mg/L0,76 - 1,76
24.01.20241,44 mg/L0,76 - 1,76
Transferrinmetning
26 %
OK
Ref: 15 - 57
Sist: 21.07.2026 · 6 prøver
S-Transferrinmetning — 6 målinger
Mål: >25 % for utøver
DatoVerdiRef
21.07.202626 %15 - 57
03.06.202520 %15 - 57
24.01.202425 %15 - 57
14.09.20108 %15 - 57
02.02.200935 %15 - 57
11.09.200727 %15 - 57
Retikulocytter
0,03 10^12/L
WARN
Ref: 0,03 - 0,11
Sist: 21.07.2026 · 1 prøver
B-Retikulocytter — 1 målinger
DatoVerdiRef
21.07.20260,03 10^12/L0,03 - 0,11

Vitamin & mineral

Aktivt-B12
120,6 pmol/L
OK
Ref: >60
Sist: 21.07.2026 · 3 prøver
S-Aktivt-B12 — 3 målinger
DatoVerdiRef
21.07.2026120,6 pmol/L>60
20.04.2026105,6 pmol/L>60
22.04.2025115,5 pmol/L>60
Vitamin D
83 nmol/L
OK
Ref: 50 - 150
Sist: 21.07.2026 · 14 prøver
S-Vitamin D — 14 målinger
DatoVerdiRef
21.07.202683 nmol/L50 - 150
22.04.202549 nmol/L50 - 150
24.01.202458 nmol/L50 - 150
27.02.202354 nmol/L50 - 150
30.05.202256 nmol/L50 - 150
17.12.202146 nmol/L50 - 150
04.09.201957 nmol/L50 - 150
04.04.201943 nmol/L50 - 150
- Vitamin D3
83 nmol/L
NEUTRAL
Ref: —
Sist: 21.07.2026 · 14 prøver
- Vitamin D3 — 14 målinger
DatoVerdiRef
21.07.202683 nmol/L
22.04.202549 nmol/L
24.01.202458 nmol/L
27.02.202354 nmol/L
30.05.202256 nmol/L
17.12.202146 nmol/L
04.09.201957 nmol/L
04.04.201943 nmol/L
Vitamin B12
235 pmol/L
WARN
Ref: 170 - 650
Sist: 28.11.2024 · 8 prøver
S-Vitamin B12 — 8 målinger
DatoVerdiRef
28.11.2024235 pmol/L170 - 650
22.05.2024266 pmol/L170 - 650
24.01.2024266 pmol/L170 - 650
27.02.2023424 pmol/L170 - 650
30.05.2022262 pmol/L170 - 650
17.12.2021251 pmol/L170 - 650
08.02.2021299 pmol/L170 - 650
04.09.2019319 pmol/L170 - 650
Folat
20,8 nmol/L
OK
Ref: >5,7
Sist: 21.07.2026 · 6 prøver
S-Folat — 6 målinger
DatoVerdiRef
21.07.202620,8 nmol/L>5,7
20.04.202616,9 nmol/L>5,7
30.05.202216,9 nmol/L>5,7
17.12.202112,1 nmol/L>5,7
08.02.202115,7 nmol/L>5,7
04.09.201916,5 nmol/L>5,7
Kalsium
2,35 mmol/L
OK
Ref: 2,15 - 2,51
Sist: 14.09.2010 · 1 prøver
S-Kalsium — 1 målinger
DatoVerdiRef
14.09.20102,35 mmol/L2,15 - 2,51

Hormoner

TSH
1,5 mU/L
OK
Ref: 0,20 - 4,0
Sist: 20.04.2026 · 22 prøver
S-TSH — 22 målinger
DatoVerdiRef
20.04.20261,5 mU/L0,20 - 4,0
10.03.20261,5 mU/L0,20 - 4,0
06.01.20261,6 mU/L0,20 - 4,0
22.04.20252,2 mU/L0,20 - 4,0
28.11.20241,4 mU/L0,20 - 4,0
22.05.20241,9 mU/L0,20 - 4,0
24.01.20241,6 mU/L0,20 - 4,0
27.02.20231,4 mU/L0,20 - 4,0
Testosteron
24 nmol/L
OK
Ref: 8 - 35
Sist: 21.07.2026 · 6 prøver
S-Testosteron — 6 målinger
DatoVerdiRef
21.07.202624 nmol/L8 - 35
10.03.202621 nmol/L8 - 35
06.01.202619 nmol/L8 - 35
03.06.202527 nmol/L8 - 35
27.02.202323 nmol/L8 - 35
11.09.200733 nmol/L8 - 35
SHBG
73 nmol/L
WARN
Ref: 8 - 60
Sist: 21.07.2026 · 6 prøver
S-SHBG — 6 målinger
DatoVerdiRef
21.07.202673 nmol/L8 - 60
10.03.202668 nmol/L8 - 60
06.01.202671 nmol/L8 - 60
03.06.202570 nmol/L8 - 60
27.02.202366 nmol/L8 - 60
11.09.200736 nmol/L8 - 60
Fri Testosteron indeks
3,2
WARN
Ref: 2,3 - 9,9
Sist: 21.07.2026 · 5 prøver
Fri Testosteron indeks — 5 målinger
DatoVerdiRef
21.07.20263,2 2,3 - 9,9
10.03.20263,2 2,3 - 9,9
06.01.20262,7 2,3 - 9,9
03.06.20253,8 2,3 - 9,9
27.02.20233,5 2,3 - 9,9
Fritt T4
15,4 pmol/L
OK
Ref: 11,0 - 23,0
Sist: 20.04.2026 · 11 prøver
S-Fritt T4 — 11 målinger
DatoVerdiRef
20.04.202615,4 pmol/L11,0 - 23,0
03.07.202016,7 pmol/L11,0 - 23,0
04.04.201914,9 pmol/L11,0 - 23,0
03.09.201818,3 pmol/L11,0 - 23,0
28.09.201716,9 pmol/L11,0 - 23,0
22.03.201718,3 pmol/L11,0 - 23,0
17.10.201616,9 pmol/L11,0 - 23,0
10.02.201616,4 pmol/L11,0 - 23,0
Fritt T3
5,6 pmol/L
OK
Ref: 3,5 - 6,5
Sist: 20.04.2026 · 1 prøver
S-Fritt T3 — 1 målinger
DatoVerdiRef
20.04.20265,6 pmol/L3,5 - 6,5
Kortisol morgen
382 nmol/L
OK
Ref: 200 - 650
Sist: 20.04.2026 · 1 prøver
S-Kortisol morgen — 1 målinger
DatoVerdiRef
20.04.2026382 nmol/L200 - 650

Lever & nyre

Kreatinin
76 umol/L
OK
Ref: 60 - 105
Sist: 21.07.2026 · 23 prøver
S-Kreatinin — 23 målinger
DatoVerdiRef
21.07.202676 umol/L60 - 105
20.04.202677 umol/L60 - 105
10.03.202674 umol/L60 - 105
06.01.202673 umol/L60 - 105
22.04.202581 umol/L60 - 105
28.11.202476 umol/L60 - 105
22.05.202475 umol/L60 - 105
24.01.202474 umol/L60 - 105
eGFR (EKFC)
106 mL/min/1,73m2
OK
Ref: >65
Sist: 21.07.2026 · 3 prøver
S-eGFR (EKFC) — 3 målinger
DatoVerdiRef
21.07.2026106 mL/min/1,73m2>65
20.04.2026106 mL/min/1,73m2>65
10.03.2026108 mL/min/1,73m2>65
Albumin
47 g/L
WARN
Ref: 35 - 45
Sist: 21.07.2026 · 6 prøver
S-Albumin — 6 målinger
DatoVerdiRef
21.07.202647 g/L35 - 45
10.03.202646 g/L35 - 45
06.01.202649 g/L35 - 45
03.06.202545 g/L35 - 45
27.02.202347 g/L36 - 48
11.09.200747 g/L36 - 48
eGFR (CKD-EPI)
109 mL/min/1,73m2
OK
Ref: >65
Sist: 06.01.2026 · 19 prøver
S-eGFR (CKD-EPI) — 19 målinger
DatoVerdiRef
06.01.2026109 mL/min/1,73m2>65
22.04.2025104 mL/min/1,73m2>65
28.11.2024108 mL/min/1,73m2>65
22.05.2024109 mL/min/1,73m2>68
24.01.2024110 mL/min/1,73m2>68
27.02.2023109 mL/min/1,73m2>68
30.05.2022112 mL/min/1,73m2>68
17.12.2021110 mL/min/1,73m2>68
ALAT
25 U/L
OK
Ref: <70
Sist: 21.07.2026 · 12 prøver
S-ALAT — 12 målinger
DatoVerdiRef
21.07.202625 U/L<70
20.04.202622 U/L<70
06.01.202631 U/L<70
22.04.202517 U/L<70
28.11.202420 U/L<70
22.05.202422 U/L<70
24.01.202419 U/L<70
27.02.202320 U/L<70
ASAT
20 U/L
OK
Ref: <45
Sist: 08.02.2021 · 11 prøver
S-ASAT — 11 målinger
DatoVerdiRef
08.02.202120 U/L<45
03.07.202020 U/L<45
04.09.201920 U/L<45
04.04.201926 U/L<45
03.09.201816 U/L<45
28.09.201717 U/L<45
22.03.201720 U/L<45
17.10.201621 U/L<45
Bilirubin, total
6 umol/L
OK
Ref: <26
Sist: 03.07.2020 · 9 prøver
S-Bilirubin, total — 9 målinger
DatoVerdiRef
03.07.20206 umol/L<26
04.04.201911 umol/L<26
03.09.20189 umol/L<26
28.09.20179 umol/L<26
22.03.201712 umol/L<26
17.10.201610 umol/L<26
10.02.201611 umol/L<26
21.10.20159 umol/L<26
Gamma GT
13 U/L
OK
Ref: <80
Sist: 17.10.2016 · 4 prøver
S-Gamma GT — 4 målinger
DatoVerdiRef
17.10.201613 U/L<80
10.02.201614 U/L<80
21.10.201517 U/L<80
14.09.201023 U/L<80

Inflammasjon

MikroCRP
0,4 mg/L
OK
Ref: <5
Sist: 06.01.2026 · 1 prøver
S-MikroCRP — 1 målinger
DatoVerdiRef
06.01.20260,4 mg/L<5
CRP
<1 mg/L
NEUTRAL
Ref: <5
Sist: 20.04.2026 · 17 prøver
S-CRP — 17 målinger
DatoVerdiRef
20.04.2026<1 mg/L<5
22.04.2025<1 mg/L<5
28.11.2024<1 mg/L<5
22.05.2024<1 mg/L<5
24.01.2024<1 mg/L<5
27.02.2023<1 mg/L<5
30.05.2022<1 mg/L<5
08.02.2021<1 mg/L<5

Øvrig

Leukocytter
5,4 10^9 /L
OK
Ref: 3,5 - 10,0
Sist: 21.07.2026 · 22 prøver
B-Leukocytter — 22 målinger
DatoVerdiRef
21.07.20265,4 10^9 /L3,5 - 10,0
20.04.20265,9 10^9 /L3,5 - 10,0
06.01.20266,9 10^9 /L3,5 - 10,0
22.04.20256,2 10^9 /L3,5 - 10,0
28.11.20246,9 10^9 /L3,5 - 10,0
22.05.20247,4 10^9 /L3,5 - 10,0
24.01.20244,7 10^9 /L3,5 - 10,0
27.02.20235,0 10^9 /L3,5 - 10,0
LDL-kolesterol
3,0 mmol/L
OK
Ref: 1,4 - 4,7
Sist: 06.01.2026 · 2 prøver
S-LDL-kolesterol — 2 målinger
DatoVerdiRef
06.01.20263,0 mmol/L1,4 - 4,7
27.02.20233,0 mmol/L1,4 - 4,7
PSA
0,87 ug/L
OK
Ref: <2,0
Sist: 06.01.2026 · 3 prøver
S-PSA — 3 målinger
DatoVerdiRef
06.01.20260,87 ug/L<2,0
03.06.20250,86 ug/L<2,0
28.09.20170,86 ug/L0 - 2,5
Jern
19,1 umol/L
OK
Ref: 9,0 - 34,0
Sist: 21.07.2026 · 6 prøver
S-Jern — 6 målinger
DatoVerdiRef
21.07.202619,1 umol/L9,0 - 34,0
03.06.202513,9 umol/L9,0 - 34,0
24.01.202418,6 umol/L9,0 - 34,0
14.09.20105,2 umol/L9,0 - 34,0
02.02.200925,0 umol/L9,0 - 34,0
11.09.200721,2 umol/L9,0 - 34,0
Jernbindingskap.
71 umol/L
OK
Ref: 49 - 83
Sist: 21.07.2026 · 6 prøver
S-Jernbindingskap. — 6 målinger
DatoVerdiRef
21.07.202671 umol/L49 - 83
03.06.202569 umol/L49 - 83
24.01.202474 umol/L49 - 83
14.09.201067 umol/L49 - 83
02.02.200971 umol/L49 - 83
11.09.200780 umol/L49 - 83
FSH
5 U/L
OK
Ref: 1 - 12
Sist: 03.06.2025 · 2 prøver
S-FSH — 2 målinger
DatoVerdiRef
03.06.20255 U/L1 - 12
11.09.20075 U/L< 12
LH
4 U/L
OK
Ref: 1 - 10
Sist: 03.06.2025 · 2 prøver
S-LH — 2 målinger
DatoVerdiRef
03.06.20254 U/L1 - 10
11.09.20075 U/L< 12
Trombocytter
243 10^9 /L
OK
Ref: 145 - 348
Sist: 22.04.2025 · 9 prøver
B-Trombocytter — 9 målinger
DatoVerdiRef
22.04.2025243 10^9 /L145 - 348
28.11.2024229 10^9 /L145 - 348
22.05.2024273 10^9 /L145 - 348
24.01.2024261 10^9 /L145 - 348
27.02.2023237 10^9 /L145 - 348
30.05.2022262 10^9 /L145 - 348
17.12.2021267 10^9 /L145 - 348
14.09.2010292 10^9 /L145 - 348
CK
67 U/L
OK
Ref: <400
Sist: 20.04.2026 · 2 prøver
S-CK — 2 målinger
DatoVerdiRef
20.04.202667 U/L<400
24.01.202469 U/L<400
Kolesterol
4,8 mmol/L
OK
Ref: 3,3 - 6,9
Sist: 27.02.2023 · 2 prøver
S-Kolesterol — 2 målinger
DatoVerdiRef
27.02.20234,8 mmol/L3,3 - 6,9
21.10.20154,8 mmol/L3,3 - 6,9
Lp(a)
<100 mg/L
NEUTRAL
Ref: <250
Sist: 27.02.2023 · 1 prøver
S-Lp(a) — 1 målinger
DatoVerdiRef
27.02.2023<100 mg/L<250
Homocystein
13,2 umol/L
OK
Ref: 5,0 - 15,0
Sist: 30.05.2022 · 1 prøver
P-Homocystein — 1 målinger
DatoVerdiRef
30.05.202213,2 umol/L5,0 - 15,0
Metylmalonsyre
0,15 umol/L
OK
Ref: <0,30
Sist: 30.05.2022 · 1 prøver
S-Metylmalonsyre — 1 målinger
DatoVerdiRef
30.05.20220,15 umol/L<0,30
Natrium
140 mmol/L
OK
Ref: 137 - 145
Sist: 21.07.2026 · 14 prøver
S-Natrium — 14 målinger
DatoVerdiRef
21.07.2026140 mmol/L137 - 145
30.05.2022140 mmol/L137 - 145
17.12.2021142 mmol/L137 - 145
08.02.2021141 mmol/L137 - 145
03.07.2020142 mmol/L137 - 145
04.09.2019139 mmol/L137 - 145
04.04.2019139 mmol/L137 - 145
03.09.2018141 mmol/L137 - 145
Kalium
4,1 mmol/L
OK
Ref: 3,6 - 5,0
Sist: 21.07.2026 · 14 prøver
S-Kalium — 14 målinger
DatoVerdiRef
21.07.20264,1 mmol/L3,6 - 5,0
30.05.20224,0 mmol/L3,6 - 5,0
17.12.20214,3 mmol/L3,6 - 5,0
08.02.20214,3 mmol/L3,6 - 5,0
03.07.20204,1 mmol/L3,6 - 5,0
04.09.20194,0 mmol/L3,6 - 5,0
04.04.20194,4 mmol/L3,6 - 5,0
03.09.20184,2 mmol/L3,6 - 5,0
Fosfatase, alkalisk
57 U/L
OK
Ref: <105
Sist: 03.07.2020 · 9 prøver
S-Fosfatase, alkalisk — 9 målinger
DatoVerdiRef
03.07.202057 U/L<105
04.04.201952 U/L<105
03.09.201847 U/L<105
28.09.201746 U/L<105
22.03.201749 U/L<105
17.10.201645 U/L<105
10.02.201653 U/L<105
21.10.201555 U/L<105
Fosfatidyletanol PEth
0,07 umol/L
NEUTRAL
Ref: NEG (<0,03)
Sist: 04.09.2019 · 1 prøver
B-Fosfatidyletanol PEth — 1 målinger
DatoVerdiRef
04.09.20190,07 umol/LNEG (<0,03)
Urinsyre
349 umol/L
OK
Ref: 230 - 480
Sist: 17.10.2016 · 3 prøver
S-Urinsyre — 3 målinger
DatoVerdiRef
17.10.2016349 umol/L230 - 480
10.02.2016345 umol/L230 - 480
21.10.2015344 umol/L230 - 480
Amylase total
50 U/L
OK
Ref: 25 - 120
Sist: 17.10.2016 · 3 prøver
S-Amylase total — 3 målinger
DatoVerdiRef
17.10.201650 U/L25 - 120
10.02.201650 U/L25 - 120
21.10.201548 U/L25 - 120
HbA1c
5,6 %
OK
Ref: <6,1
Sist: 21.10.2015 · 1 prøver
B-HbA1c — 1 målinger
DatoVerdiRef
21.10.20155,6 %<6,1
HDL-kolesterol
1,8 mmol/L
OK
Ref: 0,8 - 2,1
Sist: 21.10.2015 · 1 prøver
S-HDL-kolesterol — 1 målinger
DatoVerdiRef
21.10.20151,8 mmol/L0,8 - 2,1
Leukocytter m/diff.
Utført
NEUTRAL
Ref: —
Sist: 21.07.2026 · 4 prøver
B-Leukocytter m/diff. — 4 målinger
DatoVerdiRef
21.07.2026Utført
20.04.2026Utført
14.09.2010Utført
02.02.2009Utført
- Nøytrofile
4,9 10^9 /L
OK
Ref: 1,6 - 8,3
Sist: 14.09.2010 · 2 prøver
- Nøytrofile — 2 målinger
DatoVerdiRef
14.09.20104,9 10^9 /L1,6 - 8,3
02.02.20092,5 10^9 /L1,6 - 8,3
- Lymfocytter
2,2 10^9 /L
OK
Ref: 0,8 - 5,0
Sist: 14.09.2010 · 2 prøver
- Lymfocytter — 2 målinger
DatoVerdiRef
14.09.20102,2 10^9 /L0,8 - 5,0
02.02.20092,1 10^9 /L0,8 - 5,0
- Monocytter
0,9 10^9 /L
OK
Ref: 0,1 - 1,0
Sist: 14.09.2010 · 2 prøver
- Monocytter — 2 målinger
DatoVerdiRef
14.09.20100,9 10^9 /L0,1 - 1,0
02.02.20090,3 10^9 /L0,1 - 1,0
- Eosinofile
0,1 10^9 /L
OK
Ref: <0,7
Sist: 14.09.2010 · 2 prøver
- Eosinofile — 2 målinger
DatoVerdiRef
14.09.20100,1 10^9 /L<0,7
02.02.20090,2 10^9 /L<0,7
- Basofile
0 10^9 /L
OK
Ref: <0,2
Sist: 14.09.2010 · 2 prøver
- Basofile — 2 målinger
DatoVerdiRef
14.09.20100 10^9 /L<0,2
02.02.20090,0 10^9 /L<0,2
Progesteron
Se kommentar nmol/L
NEUTRAL
Ref: —
Sist: 14.09.2010 · 1 prøver
S-Progesteron — 1 målinger
DatoVerdiRef
14.09.2010Se kommentar nmol/L
Urinstoff
3,8 mmol/L
WARN
Ref: 3,2 - 8,1
Sist: 11.09.2007 · 1 prøver
S-Urinstoff — 1 målinger
DatoVerdiRef
11.09.20073,8 mmol/L3,2 - 8,1
Nøytrofile
1,5 10^9 /L
WARN
Ref: 1,5 - 7,3
Sist: 21.07.2026 · 2 prøver
Nøytrofile — 2 målinger
DatoVerdiRef
21.07.20261,5 10^9 /L1,5 - 7,3
20.04.20261,9 10^9 /L1,5 - 7,3
Lymfocytter
3,3 10^9 /L
OK
Ref: 1,1 - 3,3
Sist: 21.07.2026 · 2 prøver
Lymfocytter — 2 målinger
DatoVerdiRef
21.07.20263,3 10^9 /L1,1 - 3,3
20.04.20263,4 10^9 /L1,1 - 3,3
Monocytter
0,4 10^9 /L
OK
Ref: 0,2 - 0,8
Sist: 21.07.2026 · 2 prøver
Monocytter — 2 målinger
DatoVerdiRef
21.07.20260,4 10^9 /L0,2 - 0,8
20.04.20260,3 10^9 /L0,2 - 0,8
Eosinofile
0,2 10^9 /L
OK
Ref: <0,4
Sist: 21.07.2026 · 2 prøver
Eosinofile — 2 målinger
DatoVerdiRef
21.07.20260,2 10^9 /L<0,4
20.04.20260,2 10^9 /L<0,4
Basofile
<0,1 10^9 /L
NEUTRAL
Ref: <0,2
Sist: 21.07.2026 · 2 prøver
Basofile — 2 målinger
DatoVerdiRef
21.07.2026<0,1 10^9 /L<0,2
20.04.2026<0,1 10^9 /L<0,2
LD
176 U/L
OK
Ref: <205
Sist: 20.04.2026 · 1 prøver
S-LD — 1 målinger
DatoVerdiRef
20.04.2026176 U/L<205
NT-proBNP
<35 ng/L
NEUTRAL
Ref: <85
Sist: 20.04.2026 · 1 prøver
P-NT-proBNP — 1 målinger
DatoVerdiRef
20.04.2026<35 ng/L<85

Hover over kortene for full historikk · Status «WARN» betyr enten utenfor referansen, eller suboptimal for utøver (siste 15% av referanseområdet).

💊 Medikamenter & supplement

Vitamin D loading
Ferdig: 4/4 doser
OK
Benferol 50 000 IE × 4 uker — fullført. Vedlikehold D3 6 400 IE E2D pågår.
Feraccru (jern)
Pågår: 3 uker E2D
OK
30 mg jernferritinmaltol annenhver dag. Bedre toleranse enn standard jern.

🦠 Sykdomsrisiko (prospektiv modell)

Risiko nå · basert på 42 historiske perioder
25%
Lav risiko
RHR-creep -0.6 · HRV-drop -1.6% · søvn-drop -3.0% · stress -4.2
Modellforklaring
Matcher dagens 4-dagers wellness-signaler mot mønsteret 3-4 dager før hver historiske sykdomsperiode (siden 2022). RHR-creep og HRV-drop vekter tyngst. ≥60% = lett trening anbefalt.

🩸 Laktat · puls · fart — alle feltmålinger mot labkurvene

62 feltmålinger fra 38 økter (2024-02-12 → 2026-09-08; 61 med steady-puls, 50 med sluttfart fra strøm) mot labkurvene Lab 24.02.2026 og Lab 01.09.2026. Biosen-skala (TaiDoc × 0,7). Gjeldende LT2: 16.0 km/t · 3:45 · 170 bpm · 2.8 mmol. Labrapport →

Referansefart for forventet laktat/puls: — laktat 30 s etter draget domineres av de siste 60–90 s; sluttfart brukes der strømmen finnes (ellers dragsnitt).

1 · Tre dimensjoner: fart, puls og laktat

Hvert punkt er én laktatmåling (drag) plassert etter fart, steady-puls og laktat. De to labkurvene er «ryggraden»: der ligger fart, puls og laktat i steady state (5 min-trinn). Punkter over ryggraden i laktat-retning har mer laktat enn labben tilsier for farten; punkter bak ryggraden (lavere puls) er drag der pulsen ikke rakk opp. Farge = dato, symbol = arena. Dra for å rotere, scroll for zoom, klikk i tegnforklaringen for å slå av/på; «Avvik til labkurve» tegner en pinne fra hvert punkt til forventet posisjon.

Kamera:

2 · De samme punktene i tre plan

Venstre: den klassiske laktatkurven med feltpunktene lagt inn — fartsgevinsten fra februar til september synes som at de nyeste punktene ligger til høyre for/under de eldste. Midten: laktat mot puls, mindre følsom for underlag og vær enn fart, men drag-puls ligger systematisk under trinn-puls. Høyre: puls mot fart — over labkurvene betyr høyere puls enn labben for samme fart (varme, tretthet, dehydrering), under betyr at pulsen henger etter (korte drag). Tegnforklaringen under venstre panel gjelder alle tre.

3 · Avvikskart: hver måling mot labkurven

Forventet laktat og puls er lest av labkurven ved samme fart, med kurven interpolert i tid mellom de to testene. Vannrett: pulsavvik (bpm). Loddrett: laktatavvik (mmol/l). Origo = «akkurat som labben». Øverst til høyre: høyere puls og mer laktat enn forventet (varme, vind, tung dag). Nederst til venstre: lavere begge (fersk, form over lab). Øverst til venstre: mer laktat med lavere puls — typisk drag som avsluttes raskt (laktatet leser sluttfarten, pulsen henger etter) eller vindutsatte støt. Nederst til høyre: høy puls uten metabolsk kostnad (drift, varme, dehydrering). Bytt til «Siste 500 m» øverst for å se hvor mye av laktatavviket sluttfarten forklarer.

4 · Avvikene over tid

Øverst: laktatavvik per måling (mmol/l over/under labkurven; blått = under, oransje = over). Nederst: sekunder per km raskere (+, blått) eller saktere (−, oransje) enn labkurven ved samme laktat — et formmål i s/km som kan sammenlignes på tvers av økter. Vertikale linjer: labtestene og stripsbyttet 05.08.2026. Før 24.02.2026 er referansen februar-kurven, så 2024-punktene viser formgapet til 2026, ikke dagsform.

5 · Forbehold

Feltmålinger er tatt ~30 s etter drag på 1000–3200 m med stående pause, labkurven på 5 min-trinn i steady state. Drag-puls er derfor systematisk lavere enn trinn-puls — pulsavvikene leses relativt til hverandre, ikke mot null. Laktatet etter et drag leser de siste 60–90 sekundene, ikke snittet; «Siste 500 m» er nærmere det måleren ser, men ikke identisk. Vind og kupert løype gir høyere metabolsk kostnad ved samme fart (03.09: 25 W over terskel på den vindutsatte etappen) — det vises som laktat over kurven uten at formen er dårligere. Laktat er på Biosen-skala (TaiDoc × 0,7; parallellmålinger 01.09.2026, Mentzoni 2024); 2024–2025-punktene forutsetter at 0,7 ble brukt også da. Labkurven 01.09 kan være noe flattert av lavt glykogen (33 km to dager før).

6 · Alle målinger

Δlaktat = målt − forventet ved dragsnitt; Δlaktat (slutt) = mot forventet ved siste 500 m. Δpuls = steady-puls − forventet. Δfart = s/km raskere (+) eller saktere (−) enn labkurven ved samme laktat (dragsnitt); * = laktat over kurvens toppunkt (ekstrapolert). TSB = morgen.

DatoØktFormatArenaDragSnittSiste 500PulsLaktatForv.ΔlaktatΔ (slutt)ΔpulsΔfartTSB
2026-09-085 x 2000 👷‍♂️5x2000Vei/pir53:503:481592.32.5-0.2-0.3-8+3-17
2026-09-085 x 2000 👷‍♂️5x2000Vei/pir23:503:461572.22.5-0.3-0.5-10+4-17
2026-09-034 x 20004x2000Vei/pir43:453:401684.02.8+1.2+0.2-2-6-5
2026-09-034 x 20004x2000Vei/pir23:483:461663.22.6+0.6+0.5-3-5-5
2026-08-24MandagsTOSK3x3200Utendørs bane33:482.72.6+0.1-1-15
2026-08-17MandagsTOSK5x2000Utendørs bane53:473:441642.52.7-0.2-0.5-5+3-5
2026-08-17MandagsTOSK5x2000Utendørs bane23:493:501652.52.6-0.1+0.0-3+1-5
2026-08-05OnsdagsTOSK6x1000Utendørs bane63:393:401713.84.0-0.2-0.1-2+1-9
2026-07-29OnsdagsTOSK10x1000Utendørs bane83:493:481602.72.6+0.1+0.0-8-1-22
2026-07-27MandagsTOSK5x2000Utendørs bane43:511633.42.5+0.9-4-8-19
2026-07-205 x 20005x2000Vei/pir53:513:541622.52.5+0.0+0.2-6+0-22
2026-07-205 x 20005x2000Vei/pir23:513:521613.22.5+0.7+0.8-7-7-22
2026-07-178 x 10008x1000Vei/pir83:373:361735.24.5+0.8+0.6-1-4-9
2026-07-178 x 10008x1000Vei/pir63:393:391704.54.1+0.4+0.4-3-2-9
2026-07-178 x 10008x1000Vei/pir43:433:451693.73.3+0.4+0.6-3-2-9
2026-07-178 x 10008x1000Vei/pir23:483:481673.62.8+0.8+0.9-2-6-9
2026-06-17OnsdagsTOSK10x1000Vei/pir103:443:441653.43.3+0.1+0.0-6-1-23
2026-06-17OnsdagsTOSK10x1000Vei/pir63:493:481633.32.8+0.5+0.4-6-5-23
2026-06-08MandagsTOSK3x2000Vei/pir33:533:531633.82.5+1.3+1.3-4-12-28
2026-06-03OnsdagsTOSK10x1000Vei/pir103:513:511673.12.7+0.4+0.4-1-5-25
2026-06-03OnsdagsTOSK10x1000Vei/pir63:523:531632.62.6+0.0+0.1-5-0-25
2026-05-20OnsdagsTOSK8x1000Utendørs bane83:543:551632.02.5-0.5-0.4-4+6-8
2026-05-18MandagsTOSK20x400Utendørs bane203:304:171683.95.7-1.8+2.5-12+11-10
2026-05-18MandagsTOSK20x400Utendørs bane103:354:371633.24.8-1.6+2.1-13+11-10
2026-05-13OnsdagsTOSK6x1000Utendørs bane64:004:011604.22.0+2.2+2.2-3-215
2026-05-13OnsdagsTOSK6x1000Utendørs bane43:563:551623.52.3+1.2+1.1-3-125
2026-05-11MandagsTOSK4drag 0.8-2.0 kmUtendørs bane44:104:091542.11.6+0.5+0.5-5-117
2026-05-11MandagsTOSK4drag 0.8-2.0 kmUtendørs bane34:104:101542.71.6+1.1+1.1-5-187
2026-03-23MandagsTOSK4drag 1.0-2.0 kmInnendørs bane23:553:471632.22.5-0.3-1.1-3+3-2
2026-03-18OnsdagsTOSK3x3000Innendørs bane33:523:481642.52.8-0.3-0.7-4+3-8
2026-03-16MandagsTOSK5x2000Innendørs bane53:493:471663.93.1+0.8+0.6-3-7-16
2026-03-11OnsdagsTOSK12x1000Innendørs bane123:493:461612.63.1-0.6-0.9-8+5-9
2026-03-11OnsdagsTOSK12x1000Innendørs bane63:493:441642.73.1-0.5-1.0-6+4-9
2026-03-09MandagsTOSK6x2000Innendørs bane63:503:471632.53.0-0.6-0.9-6+5-10
2026-03-09MandagsTOSK6x2000Innendørs bane43:493:441642.73.2-0.5-1.0-6+4-10
2026-03-04OnsdagsTOSK12x1000Innendørs bane123:493:451602.53.2-0.7-1.1-10+6-6
2026-03-04OnsdagsTOSK12x1000Innendørs bane63:493:421591.93.2-1.3-2.1-10+15-6
2026-02-04OnsdagsTOSK10x1000Innendørs bane103:493:441612.73.2-0.5-1.0-9+5-2
2026-02-04OnsdagsTOSK10x1000Innendørs bane53:493:431634.03.2+0.8+0.1-7-7-2
2026-01-31Ranheimshallen6x2062Innendørs bane63:451664.23.6+0.6-6-5-10
2026-01-07OnsdagsTOSK8x1000Innendørs bane63:453:401694.73.6+1.1+0.5-3-93
2026-01-05MandagsTOSK12x1000Innendørs bane53:461754.03.5+0.5+4-4-2
2026-01-05MandagsTOSK12x1000Innendørs bane23:501533.83.1+0.7-16-6-2
2025-02-26OnsdagsTOSK10x1000Innendørs bane53:453:421703.23.6-0.5-0.8-2+4-24
2025-02-24MandagsTOSK10x2000Innendørs bane103:563:571652.42.5-0.1+0.0-1+1-27
2025-02-24MandagsTOSK10x2000Innendørs bane64:034:001582.31.9+0.4+0.2-5-5-27
2025-02-12OnsdagsTOSK10x1000Innendørs bane103:443:441653.33.8-0.5-0.5-8+4-20
2024-11-04MandagsTOSK5x3000Innendørs bane34:034:051592.21.9+0.3+0.3-4-4-22
2024-07-03OnsdagsTOSK8x1000Utendørs bane83:361506.84.7+2.1-27-16*-23
2024-07-03OnsdagsTOSK8x1000Utendørs bane63:471484.23.4+0.8-23-7-23
2024-07-03OnsdagsTOSK8x1000Utendørs bane23:561503.62.5+1.1-16-11-23
2024-04-10OnsdagsTOSK5x4000Innendørs bane43:583:571403.02.3+0.7+0.7-25-7-6
2024-04-10OnsdagsTOSK5x4000Innendørs bane23:563:581482.52.5+0.0+0.2-18-0-6
2024-04-03OnsdagsTOSK12x1000Innendørs bane103:571522.22.4-0.2-14+2-16
2024-04-03OnsdagsTOSK12x1000Innendørs bane54:011541.62.0-0.4-10+11-16
2024-03-18MandagsTOSK8x2000Innendørs bane74:034:021575.31.9+3.4+3.3-5-32*-23
2024-03-13OnsdagsTOSK20x1000Innendørs bane104:091473.11.7+1.4-14-19-20
2024-03-04MandagsTOSK8x2000Innendørs bane73:563:571643.12.5+0.6+0.7-2-6-25
2024-03-04MandagsTOSK8x2000Innendørs bane33:553:491643.22.6+0.6+0.0-2-6-25
2024-02-21OnsdagsTOSK12x1000Innendørs bane83:521603.12.9+0.2-8-2-15
2024-02-12MandagsTOSK7x2000Innendørs bane63:583:571631.82.3-0.5-0.6-2+9-16
2024-02-12MandagsTOSK7x2000Innendørs bane23:563:571652.42.5-0.1+0.0-1+1-16

👟 Sko-rotasjon

⚡ Kvalitet
Adidas Adios Pro 4 #2
68%
274 km totalt
kvalitet145/250
total274/400
Easy129
Kval135
Race10
19 økter · sist 48d
⚡ Kvalitet
ASICS Metaspeed Sky Tokyo
65%
254 km totalt
kvalitet162/250
total254/400
Easy93
Kval162
Race0
16 økter · sist 8d
⚡ Kvalitet
PUMA Fast-R Nitro Elite 3
63%
219 km totalt
kvalitet156/250
total219/400
Easy63
Kval93
Race64
11 økter · sist 1d
⚡ Kvalitet
Saucony Endorphin Elite 2
27%
97 km totalt
kvalitet66/250
total97/400
Easy31
Kval66
Race0
8 økter · sist 16d
⚡ Kvalitet
Nike Streakfly 2
4%
12 km totalt
kvalitet10/250
total12/400
Easy2
Kval10
Race0
2 økter · sist 263d
🛣 Kvalitet · langtur
Nike Alphafly #5 Yellow
67%
268 km totalt
kvalitet153/250
total268/400
Easy115
Kval100
Race52
9 økter · sist 12d
🚶 Easy / mengde
Nike Alphafly
100%
1066 km totalt
total1066/1000
Easy913
Kval101
Race53
80 økter · sist 19d
🚶 Easy / mengde
Nike Zoom Fly 6
97%
967 km totalt
total967/1000
Easy961
Kval6
Race0
112 økter · sist 17d
🚶 Easy / mengde
Adidas Adios Pro 4
95%
946 km totalt
total946/1000
Easy513
Kval433
Race0
72 økter · sist 7d
🚶 Easy / mengde
Nike Vaporfly 4
62%
621 km totalt
total621/1000
Easy461
Kval139
Race21
40 økter · sist 2d
🚶 Easy / mengde
Saucony Endorphin Pro 4
45%
452 km totalt
total452/1000
Easy233
Kval220
Race0
45 økter · sist 24d
🚶 Easy / mengde
Nike Pegasus 37
41%
407 km totalt
total407/1000
Easy368
Kval40
Race0
43 økter · sist 43d
🚶 Easy / mengde
Nike Vaporfly2 Green #2
27%
274 km totalt
total274/1000
Easy152
Kval88
Race33
29 økter · sist 29d
⚠ Kun korte økter
HOKA Cielo X1 2.0
74 km totalt
Easy40
Kval35
Race0
8 økter · sist 88d
⚠ Kun korte økter
Adidas Prime X 2.0
22 km totalt
Easy22
Kval0
Race0
3 økter · sist 799d
📦 Race · lager
Nike Alphafly 3
10%
10 km totalt
total10/100
Easy0
Kval0
Race10
1 økter · sist 30d
🏆 Race
PUMA Fast-R Nitro Elite 3 #Poison Pink
0%
0 km · ingen registrerte økter ennå
Konkurranse-sko for København HM (2026-09-20) og Amsterdam Maraton (2026-10-18). Samme modell som forrige par, som ble racet på Frankfurt M + Berlin HM (63,6 race-km). Budsjett: HM 21 + M 42 + oppvarming ≈ 68 km av 100 — hold tune-økter i dem til et minimum.
🏆 Race
Adidas Adios Pro 4 #3
0%
0 km · ingen registrerte økter ennå
Ubrukt lager. Planlagt til Energimila 10 km (2026-08-12). Etter det ~87 km race-liv igjen — duger som backup til Amsterdam.

Kalendere: Familiekalender · vindu: 365 dager · ↗ Åpne i ny fane

Prediksjon (LOO ~2 %): København 1:20:39 / mål 1:20:00 (35 %) · Amsterdam 2:43:58 / mål 2:50:00 (88 %) · ↗ Åpne i ny fane

🔮 Race-prediksjon

Kalibrert fysiologi-modell · 34 løp · ref-dato 2026-09-11 · fitness-anker 3:43/km (10k-ekv, kilde: blanding (race+kalman)) · 90-dagers trend 0.0 s/km · effektiv Riegel-k 1.1066

Mål 2026 — sannsynlighet (gitt fortsatt trening iht. trend)

Race-eve-sjekk: ingen risikoflagg (HRV -1.5% vs baseline · 0 infeksjons-/uavklart-dager 14 d · utenfor post-M-vindu). Flagg utløses ved HRV ≤−10 % dag-før, infeksjon/uavklart sykdom siste 14 d, eller kort-løp 15–45 d etter maraton. Rene stress-perioder gir egen info-linje.
København HM
2026-09-20 · om 9 dager
Mål1:20:00
Prediksjon1:20:39
80 %1:18:33 – 1:23:37
35% sjanse for målet
Amsterdam Maraton
2026-10-18 · om 37 dager
Mål2:50:00
Prediksjon2:43:58
80 %2:39:27 – 2:50:35
88% sjanse for målet

📈 Prognose- & måloppnåelse-utvikling (fra Berlin HM · rekonstruert ukentlig + ekte daglige snapshots fra 4. juli · faktiske verdier)

Prognostisert tid Måltid P(mål) 80 % CI
Øverst: faktisk prognostisert måltid (raskere = høyere) med 80 % konfidensbånd (av/på) + måltid-linje. Nederst: faktisk sannsynlighet for å nå målet. Samme tidsakse. Punkter før 4. juli er modell-estimert as-of hver dato (rekonstruert). Bytt distanse med knappene.

Race-readiness → København HM (2026-09-20 · om 9 dager · B5, kalibrert på 19 historiske løp @ T−7)

GRØNN 7/9 Historisk treff: grønn: slo modellen 0 % (snittfeil -0.61 %, n=1) · gul: slo modellen 46 % (snittfeil +0.08 %, n=13) · rød: slo modellen 0 % (snittfeil -0.71 %, n=5)
KomponentPoengVerdiVurdering
TSB race-dag (prognose)2/230.6i målbåndet +25…+35
HRV-CV 6 uker3/311.0nivå lav vs egen historikk · trend fallende ✓
Sykdomsfravær 14 d2/20friskt vindu
Taper-ferskhet (kval-km 7d/6u-snitt)0/21.21full treningsdose — ikke tapret

Taper-cockpit (A8 — siste 14 d før mål: TSB-bane, HRV-CV-trend, søvnbank, sjekkliste)

TSB-bane mot race-dag (mål: +5..+15)

Heltrukket = faktisk · stiplet = plan-projeksjon (grov TRIMP) · grønt bånd = målsone. Race-dag: 30.6

HRV-CV 7d-rullende (C8 — skal falle gjennom taper)

Stiplet linje = målnivå (nedre tertil av egen historikk, 12.5 %). r=−0,82 mot å slå modellen (n=7).
Søvnbank siste 7 netter: 53.6 / 52.5 t

Plan-what-if → Amsterdam Maraton (A2 — simulerer PLANEN, ikke abstrakt form · retning/størrelsesorden, ikke sekunder)

0%
0
4 u
0
Kanaler: fitted β_tsb + β_M-durab · CTL-skalert gjenvinning (clampet) · sykdomsheuristikk fra Paris/Frankfurt-fasiten (0,45 %/d siste 6 u, maks 2,5 %). Grov TRIMP-projeksjon av training_plan_daily — samme motor som plan_whatif.py.
Mål-prediksjon vs PR-form: «PR-form» (under) er beste race i dag, i nøytrale forhold (12 °C) og uten/ med taper. «Mål-prediksjon» er race på selve måldagen = framskrevet form til da + taper + den dagens forventede temperatur. Derfor kan f.eks. Energimila (12. aug, ~16 °C) ligge nær PR-taper trass i formframgang — augustvarmen koster sekunder. København (sept) og Amsterdam (okt) er kjøligere, så formframgangen slår mer rent ut.
Om maraton-tallet: Modellen leser maraton-durability fra matchet-puls langtur-pace (din pace ved fast puls på langtur), kreditert etter hvor mye 25k+-volum du faktisk har lagt ned. Din aerobe økonomi er allerede på toppnivå (4:32/km @ puls 150), så prediksjonen er kapasitets-basert og ligger foran din demonstrerte PR (2:53). Det rimer med halvmaratonen din (1:21:19 → Riegel ≈ 2:49), men forutsetter at du faktisk bygger maraton-spesifikt volum i sommer. Tallet strammer/letter daglig etter hvert som 25k+-kilometerne kommer.

PR-form nå → med optimal taper

DistansePaceTaperGevinst
5 km16:443:21/km 16:32−12s
10 km36:033:36/km 35:32−30s
Halvmaraton1:22:213:54/km 1:20:52−89s
Maraton2:47:473:59/km 2:43:25−262s
«Nå» = predikert race-tid fra dagens fitness (race i dag). «Taper» = samme form + optimal nedtrapping (litteratur-basert: 1,2–2,6 %).

Hva-hvis

0%
0°C
Skyv for å se hvordan ekstra form, taper og vær endrer mål-sannsynligheten. «0 %» = modellens egen trend-framskriving.

Predikert tid på enhver distanse (dagens form · dra glideren for å utforske)

+0%
Søylene er predikert tid for en flat race ved dagens form og nøytrale forhold, forankret i modellens egne PR-form-tall. Sorte feilstolper = 95 % usikkerhet (fra leave-one-out-residualene). 🔶 = måltidene dine (10k/HM/M): ligger målmarkøren under søyletoppen er målet innenfor dagens form, ligger den over krever målet litt mer form. 3 km er ekstrapolert under det kalibrerte området (5 km→maraton) — derfor gråtonet og med bredere usikkerhet. Dra «form-justering» for å utforske.

Anbefalte treningsfarter (anker: lab Granåsen 24.02.26 — LT1 4:12@160 · LT2 3:45@170, 3,3 mmol · VO2maks 61.1 · dagens terskel (3,3 mmol) ≈ 3:48 (+3s vs lab))

SoneFart/kmPulsEvne nåMerknad
Restitusjon5:21–5:54/km<125Super-lett, kun for å løsne. La pulsen styre — ikke se på farten.
Rolig / mengde (I1 — hoveddel)4:55–5:27/km<138 (sikt 125–135)Hoveddelen av volumet. PULS-STYRT: hold deg under 140, gjerne 125–135. Farten er underordnet — la den komme av seg selv. Bygger aerob motor uten å samle tretthet.
Øvre rolig / steady (øvre I2)4:30–4:55/km138–156Brukes SPARSOMT — siste del av en langtur eller en bevisst steady. IKKE daglig mengde (unngå grå sone like under LT1).
Aerob terskel / LT1 (lab)4:09–4:15/km158–162Lab: 4:12/km @ puls 160, 1.4 mmol. Rolig langtur-kvalitet / steady. Forv. laktat ~1.4 mmol (lab-kurve).
Maratonfart (MP)3:58–4:05/km161–166Mål-MP Amsterdam = 4:01. Legg MP-bolker i langtur. Forv. laktat ~1.8 mmol (lab-kurve).
Terskel / LT2 (2,8 mmol)3:45–3:48/km166–1703:48Lab: 3:45/km @ puls 170 (2.8 mmol). 2000 m-drag — størst HM-utbytte. Dagens 2,8 mmol-fart ≈ 3:48 (+3s vs lab). Forv. laktat ~2.8 mmol (lab-kurve).
VO2max-intervall (I5)3:13–3:23/km176–1863–5 min-drag (1000–1200 m). Pulsen henger etter — kjør på fart.
Fart / R-pace2:55–3:07/km200–600 m. Økonomi/spenst, full pause.
Soner forankret i lab-testen (gullstandard). «Fart/km» går fra toppform-mål → dagens evne; puls er rettesnor. Terskel/LT2 er lactat-forankret (3,3 mmol = din anaerobe terskel), og «evne nå» leses fra fersk laktat. Race-pace i dag: 5k 3:21 · 10k 3:36 · HM 3:54 · M 3:59.

Fokus mot hvert mål

København HM · 9d · mål-pace 3:48/km · prediksjon 1:20:39 (35%)
Terskelvolum er kongen: lange terskeldrag (2000–3000 m) ved LT2 (3:45–3:49 / puls 166–170) + progressive langturer. Din styrke — bygg terskel-km jevnt.
Amsterdam Maraton · 37d · mål-pace 4:02/km · prediksjon 2:43:58 (88%)
Maraton-spesifikt volum er flaskehalsen (økonomien er på toppnivå). Prioriter 25k+-langturer med MP-bolker (4:01) — løft 25k+-volumet mot full build.

Siste laktat (grunnsannhet terskel)

DatoLaktatFartPuls
2026-09-033.2 mmol3:48/km166
2026-09-034.0 mmol3:45/km168
2026-09-082.2 mmol3:50/km157
2026-09-082.3 mmol3:50/km159
🗺️ Blokkplan → Amsterdam (uke-for-uke, SVG-tidslinje, live sub-3-KPI-er) ligger på hub → Trening → Blokkplan. Detaljer: Running_Brief_Plan_Kbh-Amsterdam_v4.md.

Denne ukas plan (fase TAPER · 1.3 u til København HM · mål-volum 62 km · CTL 105.9 / TSB 8.0)

DagTypeØktHensikt
ManRolig + stigningsløp8 km rolig @ 4:55–5:27 + 6×100 m stigningerRestitusjon fra helgas langtur, holde steget kvikt.
TirTerskel (LT2)5×2000 m @ 3:45–3:48 (puls 166–170), 75 s pause + 3 km opp/nedTerskelvolum — størst utbytte for HM, bærer også maraton.
OnsRolig9 km rolig @ 4:55–5:27Aerob mengde.
TorLang terskel3×3000 m @ 3:45–3:48 (puls 166–170), 90 s pause + 3 km opp/nedHM-spesifikk terskelutholdenhet (Kbh, mål 3:47/km).
FreRestitusjon6 km veldig rolig @ 5:21–5:54Lett, full restitusjon før helga.
LørLangtur m/ maraton-fart35 km, siste 12 km @ 3:58–4:05 (MP)Maraton-spesifikt 25k+-volum — sesongens flaskehals. Bygg økonomi under tretthet.
SønRolig volum10 km rolig @ 4:55–5:27Volum på trette bein (maraton-utholdenhet).
Belastningen ser bærekraftig ut (TSB 8). Fokus: København nærmest — terskelvolum er kongen. Langtur med MP holder maraton-sporet.

Laktatprofil (lab Granåsen 24.02.26 · LT1 4:12 / LT2 3:49 @ 3,3 mmol · dine faktiske drag-målinger som prikker)

Blå kurve = lab-laktatprofilen din (Granåsen). Ringene markerer LT1 (4:12 @ ~1,5 mmol) og LT2/terskel (3:49 @ 3,3 mmol). Prikkene er dine egne laktatmålinger fra dragene (siste 4 mnd) — ligger de under/til høyre for kurven, er du i bedre form enn labben; over/til venstre, så drar du hardere enn lab-formen tilsier. Sikt ~3,3 mmol på 2000m-terskeldragene.

Signaler bak dagens form (trening + løp)

Dagens form (blanding)3:43/km = 60% løp-forankret (3:40) + 40% Kalman-fusjon (3:46)
Anker-løp (kalibrerer nivå)2026-08-12 · 3:40/km (10k-ekv)
Aerob effektivitet nå (pace @ puls 128)5:10/km
Aerob endring siden anker-løp+5s bedre
Fart ved sub-terskel-puls 155 (matchet, stabil)3:46/km ← brukt i modellen
Fart ved LT2-puls 169 (matchet)3:36/km (estimat — høyeste drag-puls 162, dvs. ikke kjørt ved LT2-puls ennå)
Rå snittfart terskeldrag (I3/I4-median)3:47/km — innsats-avhengig, derav «treg»
Fart på VO2-intervaller3:40/km
Form (CTL) / ferskhet (TSB) — dagens rad, etter dagens økt105.9 / 8.0
Mengde siste 4 uker · kvalitet-km 12u413.9 km · 196.9 km
Lengste langtur (12u)35.0 km
Ferskt løp veier tyngst; eldre løp lar treningssignalet overta gradvis. Blandingen (60 % løp / 40 % Kalman) lander på din egen lesning.

Aerob effektivitet over tid (puls-normalisert rolig-pace @ HR 128 — høyere = bedre form)

Terskelform over tid (median fart på ekte terskeldrag ved LT2-puls, m/95 % CI — raskere = bedre)

Kun reelle terskeldrag ≥1000 m (HRsteady i LT2-pulsbåndet, periode-korrekt), med plausibilitets-filter mot korrupte gamle GPS-målinger. Median over rullende vindu; skyggebånd = 95 % CI som smalner når du legger ned flere drag/km. Y-aksen er vendt: stiger kurven, er du raskere ved terskelpuls = bedre form.

Latent form-tilstand (Kalman-fusjon: løp + matchet-puls + aerob + LT2/VO2, m/95 % CI-bånd)

Én skjult form-tilstand som utvikler seg med trening (Banister) og korrigeres av målinger (løp tyngst, så LT2/VO2/aerob). Båndet strammer etter løp, vider seg i pauser. Dette er ankeret prediksjonene leses fra.

Historisk presisjon (leave-one-out)

Kalibrering: predikert vs faktisk (T−14d) — per distanse

Snittfeil per horisont

NårSnittfeil (MAE)
T−84 dager2.35%
T−56 dager2.03%
T−28 dager1.67%
T−14 dager1.29%
T−7 dager1.44%

95% usikkerhet per distanse

Distanse± (95%)
10 km±2.8%
Halvmaraton±4.4%
Maraton±3.7%
Metode & forbehold. Fysiologi-først: dagens form uttrykkes som «10k-ekvivalent pace» fra beste nylige løp (Riegel-normalisert), og distanse-skalering + vær/taper/maraton-utholdenhet er kalibrert på dine 34 løp. Konfidensintervall fra leave-one-out-residualer + projeksjons-usikkerhet som vokser med horisont. ML (ridge/gradient boosting) ble testet, men slo ikke fysiologi-modellen ved dette datagrunnlaget (overtilpasning) — derfor brukes den robuste fysiologi-modellen. Terreng-løp (skogsmaraton) og sosiale løp er holdt utenfor kalibreringen. Garmin-prognoser brukes IKKE som fasit, kun til sammenligning.

📈 Avanserte analyser

Løpsøkonomi over tid (easy-økter) — effekt/puls, høyere = bedre · gull = 10-økters median · sykdom/stress skraveres

🌡️ Pace per temperatur · HR-normalisert til 128 (siste 2 år)

🧠 Subjektiv ↔ objektiv: hva sier kroppen før kroppen sier det?

Analyse av daily_log-notater. Søker etter "godfølelse" / "tunge ben"-mønstre og måler HRV/RHR-respons 1-7 dager etter notatet.

✓ Positive notater (godfølelse, lett, deilig)
3 notater
HRV-respons +0.2 ms · RHR +0.9 bpm
LOW-HRV innenfor 7 dager: 61.9%
⚠️ Negative notater (tunge ben, sliten, stiv)
3 notater
HRV-respons -12.9 ms · RHR +2.9 bpm
LOW-HRV innenfor 7 dager: 76.2%

Tidlig-varsel-edge: Når du noterer "tunge ben" eller lignende, faller HRV i snitt 12.9 ms og RHR stiger 2.9 bpm i påfølgende uke. Stol på instinktet — dataene følger.

📊 Analyser

Alle dype analyser, gruppert og søkbare. Hover over for kort sammendrag + hovedkonklusjon · klikk tittelen for å lese hele · filtrer med knappene eller søk fritt.

🏁 Race & pacing (6)

Tverrmaraton-synteseHva: Alle 11 maraton lest på tvers — blokk-KPI, pacing, fylling, vær, race-eve — destillert til sub-3-oppskrift v2 med konfidens per krav.
Konklusjon: Plattform (volum+CTL) er inngangsbilletten; realisering (P4-taper-port, pacing, fylling) avgjør utfallet.
Fable2026-07-05
#maraton#sub-3#oppskrift#pacing

Tverr-maraton-syntesen → sub-3-oppskrift v2

Dato: 2026-07-05 · Skrevet av: Claude (Fable, økt 2 i 2-dagersplanen) · Grunnlag: alle 11 maraton-dypanalyser i `Sessions/Races/maraton/` (13 seksjoner / ~7 700 ord per løp), LOO-residualene i `race_predict_model.json` (post-MOD-1..5), `race_weather.json` (tidsvektet race-vær), `block_stats.json`, `quality.json` (664 økter), `illness_periods.json`, Riegel-seksjonene (§2.9) i `Analyser/race_deep/*.md`.

Hva dette er: Den første analysen som leser alle 11 maraton på tvers — hva skiller de beste fra de verste, kvantifisert per KPI — og destillerer det til sub-3-oppskrift v2 med konfidensnivå per krav. v1-oppskriften (blokkanalysen 2026-07-03 §7, i dag KPI-grunnlag for Blokkplan-fanen og Amsterdam-briefen §4) var én flat liste lest ut av 10 blokk-rader. v2 bygger på hele race-dokumentasjonen (pacing, mage, race-eve, vær — ikke bare blokka), inkluderer London (som juli-tabellen utelot), retter to KPI-definisjoner som ikke tålte etterprøving, og skiller plattform (det som bygger kapasiteten) fra realisering (det som avgjør om den kommer ut på dagen).

Metode-noter: (1) «vs modell» er dagens LOO T-14 fra `race_predict_model.json` — etter MOD-refit 03.07 avviker den noe fra juli-rapportens tall (Paris −1,2 % nå vs −2,2 % da; Frankfurt −1,0 vs −2,4). London er ekskludert fra kalibreringen og har ingen LOO-verdi. (2) Blokk-KPI-ene er re-beregnet med én konsistent metode for alle 11 blokker (quality.json per `block_goal_date`); avvik mot juli-tabellen på øktscore/decoupling skyldes reskår-drift siden 03.07 og at decoupling her måles på 30k+-turene (metoden som reproduserer juli-tallet for Kbh: 1,44 ≈ 1,4). (3) Halvdels-splits er beregnet fra 1000m-laps i `Races/*_data.json`, skalert til offisiell tid; for Valencia-24 og Frankfurt finnes offisielle mattetider og de har forrang. Trondheims splits er GPS-upålitelige («klokka på bærtur», 43,0 km målt).


1. Fasiten — 11 maraton på én side

#LøpTidvs modell (T-14)Fade (2./1. halvdel)Snitt-HR vs LT2Vær (racesnitt)Definerende hendelse
1Trondheim 20213:30:07−1,4 %(GPS-usikker)163,8 · LT1+311,1° · 1,7 m/sDebut. Maks-HR 188 av 190 — alt brukt.
2Barcelona 20223:25:19+0,4 %−0,3 %159,9 · under LT1**18,5°** · 1,3Varme. Holdt bevisst igjen — reserve ubrukt.
3Oslo 20223:19:48**+1,7 %****+5,1 %**165,514,3° · 3,6«Knakk i siste bakken» — null MP-arbeid i blokka.
4Valencia 20223:14:23−1,9 %+2,0 %162,910,7° · 1,2«Gikk ut for hardt, vondt fra 20 km.»
5Paris 20233:21:46−1,2 %+0,7 %167 · = LT28,4° · **6,1**11 sykedager (kne + infeksjoner), halv oppkjøring.
6New York 20233:09:02**−3,2 %**+1,9 %173 · **over LT2**11,4° · 1,0Krampe-fare. Langturene raske men dårlig utført.
7København 2024**2:59:11**+0,5 %+0,5 %172,8 · over LT211,9° · 3,7Første sub-3. TOSK-tog i 4:15. «Ødelagt på 38 km.»
8Berlin 20242:59:34+0,2 %+1,7 %(HR korrupt)11,0° · 3,4Mageknip km 27–30 — nesten kostet sub-3.
9Valencia 20242:56:37+0,5 %+0,3 %156,6 · under LT111,9° · 1,5PB tross 3 d forkjølelse. Materialets dypeste taper.
10London 20253:19:12(ekskl.)**+18,4 %**150,9 · maks 179**16,8° (maks 19,2)** · 0,3Dagsform-kollaps: «Tungt fra start, ble bare verre.»
11Frankfurt 2025**2:53:06**−1,0 %**−0,7 %** (off. −3,0 s/km)161,9 · I37,3° · **6,4**PB, negativ split, siste km raskest. 7 sykedager i blokka.

Tider = offisielle chip-tider; LOO regner på Garmin-varighet (5–9 s avvik, Paris 43 s pga. sen klokkestart). Berlin-HR (143) og delvis Valencia-24-HR er sensor-artefakter — merket i kildeanalysene.

Tre klynger trer fram: sub-3-laget (7–9, 11: alle innenfor −1,0…+0,5 % av modellen, fade ≤+1,7 %), utviklingsløpene (1–6: spredning i begge retninger, fade opp til +5,1 %), og London — alene i sin klasse, og nettopp derfor holdt utenfor kalibreringen.

2. Blokk-KPI-ene — alle 11 med samme målestokk

Blokkkm/ukval-km/u30k+MP-kmøktscoreLT-scoredcp 30k+syk (blokk / siste 6 u)peak CTLrace-TSBdrag-snitttune-up
Trondheim 2161,35,3665,687,960 / 091,7+374:171
Barcelona 2247,34,6205,427,662 / 077,3+19,54:330
Oslo 2264,18,121065,977,565,33 / 095,9+33,74:180
Valencia 2261,912,54726,297,550 / 094,7+20,34:121*
Paris 2337,76,03256,157,12**11 / 6**86,1+34,34:240
NY 2371,217,161717,29**7,01****3,6**0 / 0104,0+33,94:002
**Kbh 24**91,623,9101258,268,431,41 / 0115,0+493:592
**Berlin 24**86,625,381598,358,192,90 / 0109,2+374:100
**Valencia 24**85,923,15807,948,16−2,32 / 0113,9+544:140
London 2582,4**25,6**71317,958,570,31 / 0**100,0**+32,84:040
**Frankfurt 25****97,6**21,0**13****178**7,42**8,62**3,4†**7 / 4**106,4+38**3:50**2

\ Valencia-22s tune-up (TOSK-HM) var B-innsats — nå ekskludert fra modellkalibrering (MOD-2). † Sommerblokk-decoupling er varme-konfundert (Frankfurt-turene i juli/aug: 5,4–8,3 %; siste 30k+ før taper: −0,35 %). Se funn F4.*


3. Hva som skiller beste fra verste — åtte funn

F1 — Plattform-terskelen er skarp og har aldri vært brutt: intet sub-3 under 85 km/u og CTL 106; ingen blokk over grensa har manglet plattformen. Høyeste dose uten sub-3: London 82,4 km/u / CTL 100 (falt på dagsform, ikke plattform — F7) og NY-23 71,2 / CTL 104 (falt på plattformen) → 3:09. Svakeste sub-3-blokk: Valencia-24 (85,9 km/u, CTL 113,9 — kort blokk på høy base). Spranget 71→86 km/u og 104→106+ CTL sammenfaller med spranget 3:09 → 2:59. Dose-korrelasjonene fra juli-analysen (km/u r=+0,92 mot formgevinst) peker samme vei: volumet bygger plattformen, og i dine data finnes ingen snarvei. Era-konfundering er reell (2024–25-blokkene er bedre på alt samtidig), men bruddet er for skarpt til å forklares bort.

F2 — Over plattform-terskelen slutter dosen å forklare noe; da tar realiseringen over. Innen sub-3-laget spenner dosen vidt (drag 108–323, kvalitets-km/u 21–25,3, CTL 106–115, taper +37…+54) — og utfallsforskjellene følger den ikke: København hadde tre ganger så mange drag og 9 CTL-poeng mer enn Frankfurt, men løp 6 min saktere. Det som faktisk skilte, var aerob effektivitet (samme fart på HR 162 i stedet for 173) og langtur-tetthet (13×30k+ mot 10). Og London — materialets høyeste kvalitets-dose (25,6 km/u, 368 drag) — leverte sub-3-lagets dårligste utfall. Blokk-KPI-ene er inngangsbilletten, ikke garantien.

F3 — De tre store underprestasjonene har tre ulike årsaker, og alle tre er målbare på forhånd. NY-23 (−3,2 %): materialets dårligste langtur-utførelse — LT-score 7,01, 30k+-decoupling 3,6 %, og de tre siste 30k+-turene skåret 7,2–7,8 med dcp opp til 5,4. Paris-23 (−1,2…−2,2 %): 11 sykedager, hvorav 6 siste seks uker. Valencia-22 (−1,9 %): åpnet for hardt («vondt fra 20 km») på blokkas svakeste race-uke-wellness (HRV 48, søvnscore 68) og grunn taper (+20,3). Trening som dose var ikke problemet i noen av dem — utførelse, sykdom og pacing var. Det er disse tre + London-dagsformen oppskriftens realiserings-del skal vokte.

F4 — v1-oppskriftens decoupling-krav («<2 % blokk-snitt») tåler ikke etterprøving; det som diskriminerer er de SISTE 30k+-turene. Frankfurt — beste maraton — hadde 3,4 % snitt-decoupling på 30k+ (juli/august-turene i varme: 5,4–8,3 %), og Berlin 2,9 %. Sesongen konfunderer blokk-snittet. Det som skiller rent: NY-23 er eneste blokk der ingen av de to siste 30k+-turene før taper hadde decoupling ≤1 % og score ≥8. Alle fire sub-3-blokkene passerer (Kbh −0,05/8,3 og −1,02/9,6 · Berlin −2,11/8,7 · Val-24 −1,42/9,1 · Frankfurt −0,35/8,8) — og London passerer også (−4,2/9,4), som er nettopp poenget: kravet fanger plattform-svikt (NY), ikke dagsform (London). v2 flytter derfor målingen fra blokk-snitt til taper-inngangen.

F5 — Pacing-disiplin er løst — men den ble løst av en mekanisme, ikke av modning alene. Fade-serien 2021→2025: +5,1 (Oslo) og +2,0 (Val-22, «for hardt ut») i tidlig æra; deretter +1,9 (NY, bevisst aggressiv); så — fra og med første TOSK-tog i København — +0,5, +1,7 (mage, ikke pacing), +0,3, −0,7. Alle fire løpene med gruppe-disponering fra start (Kbh, Val-24, Frankfurt, delvis Berlin solo-på-plan) ligger innenfor ±1,7 %. Frankfurts åpning (km 1 på 4:20 mot snitt 4:06) er malen: konservativ første km, MP-lås, alt fra km 35. London bryter ikke mønsteret — «tungt fra start» er dagsform, ikke disponering (en som åpner for hardt sprekker sent, ikke fra km 1).

*F6 — Mage/fylling er sub-3-æraens største enkelthendelses-risiko — og den eneste som nesten kostet et mål uten forvarsel.* Berlin km 27–30: «voldsomt mageknip», ~3 km fartsfall, sub-3 berget med 26 sek. NY: krampe-fare («hårfint unna») i mild varme — elektrolytt/fylling plausibel medvirkende. Frankfurt — eneste løp med dokumentert strategi (5–6 gels, Maurten 320 før start, øvd på langturene) — hadde null GI-trøbbel og negativ split. Alt før 2024 er udokumentert. Wellness/HRV varsler ikke GI (Berlin hadde blokkas beste taper-wellness: HRV 73, søvnscore 90 uka før). Eneste forsvar er trening: fyllingen må øves på L4-turene til den er race-sikker. `fueling_log.json` (85–90 g/t-KPI) står klar men er tom — Amsterdam-blokka blir første med data.

F7 — Race-eve/dagsform: ukesnitt lyver, dag-før-signalene gjør ikke. London hadde grønne ukesnitt (HRV 66,7, RHR 38,9, søvn 82,7) og ryddig taper (+32,8) — og kollapset. De signalene som historisk har truffet: dag-før-HRV ≥10 % under 4-ukers baseline (3/3 under prediksjon — Paris −25,6 %, Sommernattsløpet, Nidaros-25), sykdom siste 14 døgn (Paris, Frankfurt: −1,0…−2,4 %), postM-vinduet (komplett mønster på 10k). Det er MOD-5-flagget på prediksjon.html — syntesen bekrefter at det er riktig arkitektur: flagg og sikt mot nedre CI, aldri flytt punktet. London-residualen (~+13 % over enhver modell) er samtidig ærlig-sonen: en slik dag kan ikke prises, bare gjøres sjeldnere (søvn-rutine siste 2–3 netter, reise-logistikk, smittevern — og et tune-up som varsellampe: London manglet det).

F8 — Vær: alle PB-er ligger i 7–12°-vinduet; varme er ikke motbevist som London-bidragsyter, men den er ikke hovedhistorien. Racesnitt-temperaturene: sub-3-laget 7,3–11,9°; alle øvrige unntatt de to varme lå 8,4–14,3. De to varme: Barcelona 18,5° (holdt igjen, HR under LT1, «fin opplevelse») og London 16,8°/maks 19,2 i sol. At Barcelona gikk fint ved 18,5° er grunnen til at heat-prioren har terskel 15° — men Barcelona ble løpt på 4:49/km med stor reserve; termoregulering ved sub-3-intensitet er en annen sport. Londons lave HR (150,9) utelukker ren varmestress som hovedårsak; varmen var trolig forsterker, ikke utløser. Vind: Frankfurt (6,4 m/s) kostet 30–50 sek — og ble håndtert (gruppe, WGAP-ro); Paris (6,1 m/s) i tillegg til alt annet. Regelen fra plan §5 står seg: >16° → +3–5 s/km fra start; og fortsett å velge kalde løp — det har du nesten alltid gjort (9 av 11 under 15° racesnitt).

4. Riegel-modenhetskurven (race_deep-vinkelen)

§2.9-seriene på tvers gir den reneste utviklingshistorien i materialet — avviket mellom kort-distanse-Riegel (eksp. 1,06) og faktisk maratontid:

ÅrLøpPrediktorRiegel-ekv.FaktiskAvvik
2021TrondheimHM 1:33:45~3:15:303:30:07**+15 min** (reell eksponent ~1,14)
2022ValenciaHM 1:29:16 (B)~3:07:303:14:23+6–7 min
2023NY10k 39:26 / HM 1:27:522:57:37 / 3:02:153:09:02+11 / +7 min
2024København10k 38:382:57:432:59:11+1,5 min
2025Frankfurt10k 37:24 / HM 1:24:242:53:40 / 2:57:102:53:06**−0,5 / −4 min**

Krysningen skjer mellom NY-23 og Kbh-24 — nøyaktig der langtur-KPI-ene krysser oppskrifts-nivå (6→10 ×30k+, LT-score 7,0→8,4, 71→92 km/u). «Carl-konstanten» (maraton ≈ 10k-Riegel) er altså ikke en konstant — den er et modenhets-sertifikat som gjelder så lenge langtur-plattformen vedlikeholdes. Dagens modell-k på 1,093 er gjennomsnittet over hele reisen; i moden tilstand er den effektive eksponenten mot 10k ~1,06. Praktisk konsekvens for høsten: Energimila er sub-2:50-sjekkpunktet — eksakt Riegel-1,06 gir 36:57 → 2:49:59 og 37:00 → 2:50:12. Planens sub-37-mål og sjekkpunktet er altså i praksis samme strek (13 sek skiller); løper du 36:5x 12. august med intakt langtur-trapp bak deg, sier hele historikken at 4:01/km i Amsterdam er innenfor — og modellen venter 35:54 (P75 for sub-37). (10k-en ligger T−9,5 uker — lengre ut enn ideal-vinduet 4–6 uker; København HM T−4 uker er near-ankeret som lukker gapet, jf. FRAMEWORK-rekkefølgen.)


5. SUB-3-OPPSKRIFT v2 (nå: sub-2:50-oppskriften)

Konfidens-skala: A = konsistent i ≥4 blokker + mekanisme + LOO/back-test-støtte · B = 2–3 observasjoner eller konfundert (era/sesong) · C = n=1 eller hypotese — føre-var.

Lag 1 — PLATTFORM (bygger kapasiteten; blokk-monitoren måler disse)

#KPIKrav (grønn)KonfidensEvidens
P1Ukevolum**≥85 km/u snitt** i bygget**A**4/4 sub-3 ≥85,9; beste under (71,2) ga 3:09. r=+0,92 mot formgevinst.
P2Peak CTL**106–115****A**Skarpt brudd 104→106. Kollineær med P1 — de er ett krav i praksis.
P3Langturer ≥30 km**≥5, mål 8–13****A** (nødvendighet) / **B** (13 > 8)Sub-3: 5–13. Frankfurt-13 var motoren — men med 7 sykedager; 8–10 à la Kbh/Berlin er trygg sone. Antall alene beviser ingenting: NY og Trondheim hadde 6.
P4Langtur-utførelse**De to siste 30k+ før taper: minst én med decoupling ≤1 % OG score ≥8****A**Eneste KPI som skiller NY-23 fra alle sub-3-blokkene (F4). Erstatter v1s blokk-snitt-krav, som Frankfurt selv strøk på (sesong-konfundert).
P5MP-km på langtur**≥80, mål 120–180 — utført kontrollert****A** for ≥80, **B** for «mer er bedre»Sub-3: 80–178. NY-motbeviset: 171 MP-km med dcp 3,6/score 7,0 → −3,2 %. Kravet er MP-km × P4, aldri MP-km alene.
P6Kvalitets-km**21–25 km/u**, terskel-forankret (sub-3-lagets drag-snitt 3:50–4:14; Val-24s 4:14 er mølle-deflatert)**B**Alle sub-3 hadde det — men London (25,6) også. Plattform-KPI, ikke prediktor. Mer enn 25 har aldri gitt gevinst (Kbh 323 drag < Frankfurt 142 i utfall).
P7Øktscore-snitt**≥7,5****B**Sub-3: 7,4–8,4; utviklingsblokkene 5,4–7,3. Diskriminerer æra mer enn utfall; reskår-drift gjør terskelen myk.
P8Sykedager**≤2 siste 6 uker; ved 2 HRV-svake morgener på rad ryker PM-økta, aldri søvn/langtur****A**0 siste-6-uker i alle løp som slo modellen; 4–6 hos Paris/Frankfurt (−1,0…−2,4 %). Frankfurt-dosen (98 km/u) ga 7 sykedager — 2024-dosen var like rask og frisk.
P9Taper**TSB +30…+40 med CTL-tap ≤8** (dyp +49/+54 fungerte, men kostet 15 CTL-poeng uten gevinst)**A** på retning (positiv TSB: 4/4 sub-3 ≥+37; svakeste readiness-løp var +19,5/+20,3) · **B** på eksakt vinduFrankfurt-modellen (kort/frisk, CTL bevart) er malen. HRV-CV skal falle gjennom taper (r=−0,82, n=7 → **B**).
P10Tune-up**10k (helst) 4–6 uker ut — obligatorisk****A** som prediktor (Kbh/Frankfurt: treff ±1,5 min), **B** som risiko-detektor3 av 4 blokker uten tune-up ga overraskelser (Berlin-mage unntaket ingen test fanger). Aldri 10k-A-innsats 15–45 d etter maraton (postM: komplett mønster, −1,4…−7,7 %).

Lag 2 — REALISERING (beskytter dagen; race-uke-rutinen måler disse)

#KPIKravKonfidensEvidens
R1Åpning**Første 5 km: mål-MP +5–10 s/km; aldri raskere enn mål-MP før km 8** (Frankfurt: km 1 på 4:20 mot 4:06-snitt)**A**Fade-serien (F5): alle fire disponerte løp ≤+1,7 %; begge tidlige «for hardt ut» kostet 2–5 %.
R2Gruppe**Løp i tog der det finnes** (TOSK-tog Kbh/Val-24/Frankfurt)**A**Alle tre gruppe-løpene: fade ≤+0,5 %. Mekanisme: fjerner impuls-feilen R1 vokter.
R3HR-profil**Åpne 155–160, kjerne i I3 (160–169), I4 først fra km 38****B**Frankfurt-malen. Motbevisene: NY/Kbh over LT2 hele veien = taket brukt opp; Paris på LT2 = plattformen for lav. (HR-artefakter: valider mot LT1-plausibilitet før tolkning.)
R4Fylling**85–90 g karbo/t + koffein-plan, øvd på ALLE L4-turer til race-sikker** (logges nå i fueling_log)**B** (tallet) / **A** (at det må øves)F6: Berlin-knipet nesten kostet sub-3; Frankfurt med innøvd plan gikk rent. Tallet 85–90 er litteratur + én suksess — dataene kommer i høst.
R5Race-eve-flagg**Sjekk prediksjon.html kvelden før: HRV ≥10 % under baseline / sykdom <14 d / postM → sikt nedre CI****B+**3/3 historiske HRV-flagg → under prediksjon; LOO-validert som flagg, forkastet som justering.
R6Dagsform-hygiene**Søvn-rutine siste 2–3 netter (Frankfurt race-eve 6,2 t var i minste laget), reise-logistikk planlagt, smittevern siste 10 d****C**London-hullet: årsaken ble aldri identifisert — dette er føre-var-laget, ikke målbart ennå. Dag-for-dag-logging rundt race (nå på plass) gjør neste avvik diagnostiserbart.
R7Vær-respons**>16° racesnitt → +3–5 s/km fra start; vind >5 m/s → gruppe + WGAP-ro (Frankfurt-malen)****B**F8: alle PB 7–12°; Barcelona viser at reserve redder varmedager, London at varme + dagsform ikke skal utfordres.
R8Etter målgang**Immunvakt 72 t / null kvalitet 3–5 d****A**To lange forkjølelser kom rett etter race (bl.a. Frankfurt 27.10→05.11, severe); Paris/Frankfurt-blokkene viser hva sykdom koster neste syklus.

Restrisikoen — det oppskriften IKKE kjøper

Full etterlevelse av lag 1+2 har historisk levert −1,0…+0,5 % mot modellen (de fire sub-3-løpene), og M-intervallet er empirisk [−2,4, +1,4] % (MOD-3). Utenfor det ligger kun hendelser: GI (Berlin — øvbar, R4), og dagsform-kollaps (London — ~+13 %, én gang på 11, ikke prisbar). Regn med det slik: P(oppskrift fulgt → innenfor CI) er høy og kalibrert; halen er tynn, men den finnes, og den flyttes bare av R4–R6-disiplin — ikke av mer trening.

6. Amsterdam-blokka mot v2 — gap-sjekk (plan av 03.07)

Planen (`Running_Brief_Blokkplan-Amsterdam_v2.md`) treffer v2 nesten overalt: snitt ≥85 ✓ (peak 108–110, bevisst under Frankfurt-dosen — riktig per P8), langturtrapp 28→36 gir 5×30k+ ✓ (nedre kant av P3 — bevisst sykdoms-trade; hold utførelsen (P4) hellig når antallet er minimum), MP-generalprøver T−15/T−8 ✓, immunvakt ✓, HRV-gate ✓, taper mot positiv TSB ✓, tune-ups ✓ (Energimila = sub-2:50-sjekkpunktet, §4; Kbh HM = near-anker T−4 u). To skjerpinger fra syntesen: (1) MP-km: planens «80+» er gulvet — sikt 120–150 samlet (36-km-turen m/ 3×6 MP + 26 m/ 12 MP + L4-blokkene i u34–36 gir anslagsvis 100–140 hvis alle leveres; prioriter disse øktene over alt annet ved konflikt). (2) P4-porten før taper: de to siste 30k+ (u40–41) må levere ≤1 % decoupling / score ≥8 — hvis ikke, er det Amsterdam-pacingen som justeres (mot 2:52-scenario), ikke treningen som forseres. Det er NY-leksen omsatt til regel.

7. Ærlighetsnotat

n = 11 løp / 4 sub-3 — alle terskler er rangeringer med skarpe brudd, ikke kausale bevis. Era-konfundering: 2024–25-blokkene er bedre på nesten alt samtidig; dose-funnene (P1–P3) arver den svakheten, sykdoms-/utførelses-/pacing-funnene (P4, P8, R1) virker innen æra og står støere. Reskår-drift: øktscore/LT-score er skåret om siden juli-tabellen (avvik ±0,2; Kbh-decoupling reproduseres eksakt med 30k+-metoden, Frankfurt ikke — trolig re-skåring). Kildekonflikt funnet: Frankfurt-sidens «ingen sykdom siste 21 d» stemmer ikke med illness_periods (mild 2-dagers 18.–19.10, T−8) — juli-rapportens «2 siste 14 døgn» er den riktige lesningen. GPS-splits (§1) er rekonstruert for 8 av 11 løp (offisielle matter kun NY/Kbh/Val-24/Frankfurt-æraen); Trondheim er ubrukelig. Riegel-tallene i §4 er sitert fra §2.9-kildene; kontrollregning viser at Frankfurt-sidens to ekvivalenter avviker ~1,5 min fra eksakt 1,06-formel (eksakt: 10k 37:24 → 2:52:03, HM 1:24:24 → 2:55:58 — de øvrige sidene regner riktig). Konklusjonen står uansett (moden æra: 10k-Riegel innenfor ~±1,5 min), men sjekkpunkt-regnestykket for Energimila bruker eksakt formel. London-analysen kan aldri lukkes helt: årsaken er og blir ulogget — det eneste etterprøvbare svaret er R5/R6-disiplin og dag-for-dag-logging rundt fremtidige race. Og den største enkeltusikkerheten for sub-2:50: ingen av de 11 løpene er løpt på 4:01/km — oppskriften ekstrapolerer ~5 s/km forbi Frankfurt. Riegel-sjekkpunktet (Energimila) er designet for å teste akkurat dét før det koster noe.

Tverrkortdistanse-syntese (10k+HM)Hva: Alle 21 kortløp på tvers → Energimila-realiseringsplan + sub-1:20-oppskrift for København.
Konklusjon: Åpningskilometeren er sterkeste diskriminator; 10k tåler full uke, HM vil ha ekte taper.
Fable2026-07-06
#10k#HM#energimila#sub-1:20

Tverr-kortdistanse-syntesen (10k + HM) → Energimila-plan + sub-1:20-oppskrift

Dato: 2026-07-06 · Skrevet av: Claude (Fable, FABLE-5 fra TODO-spec-banken) · Grunnlag: alle 21 kortdistanse-løp (11×10k + 10×HM) via `Races/*_data.json` (1000m-laps, komplett etter RACE-1 05.07), `race_predict_model.json` (LOO T-14 post-MOD/B2/B6 + `excluded_residuals`), `race_weather.json` (tidsvektet), `race_model_features.json` (T-14-snapshots), `training_load.json` (TSB-pre = dag-før-raden), `wellness.json` (morning_snapshot), Analyser-md (EnergiMila v2, Trondheim HM v1, Berlin HM v8, Sommernattsløpet v1, Nidaros-24 v1), `Analyser/race_deep/2026-03-29_BerlinHM.md`, light-sidene, og `Running_Report_Tverrmaraton-Syntese_v1.md` §4 (Riegel-modenhet) som anker.

Hva dette er: Søsteranalysen til tverrmaraton-syntesen — alle korte løp lest på tvers med én målestokk. Den svarer på spec-spørsmålene: hva skiller gode fra dårlige korte dager, Nidaros-25-gåten, hvorfor 10k «er» modellens svakeste kategori, Energimila-realiseringsplanen (sub-2:50-sjekkpunktet 36:57, 12.8, T−9,5 u til Amsterdam), og sub-1:20-oppskriften for København HM (20.9, T−4 u).

Metode-noter: (1) «vs modell» = LOO T-14 fra dagens `race_predict_model.json` (negativt = løp tregere enn modellen ventet). Ekskluderte løp (effort_b/trail/sosialt) viser `excluded_residuals`-verdien i parentes — de er aldri sett av fitten. (2) Åpning = km 1 fra 1000m-laps mot løpets snitt, og mot LOO-predikert pace der den finnes («bærekraftig»). (3) Fade = snitt-pace 2. halvdel vs 1. (midt-km ekskludert ved odde antall) — avviker metodisk fra kildeanalysenes km-bånd, retning er identisk. (4) TSB-pre = raden dag-før i training_load (POST-bug-regelen §4.3; Berlin-HM-v8s «TSB +4,2 race-day» er race-dags-raden og skal leses som post-verdi — dag-før var +25,0, som race_deep-pakken sier). (5) Laps er GPS-rekonstruert og skalert til offisiell distanse; kun de store byløpene har matter. Nidaros-22 målte 9,55 km — pace-tallene der flatterer.


1. Fasiten — 21 løp på én side

11×10k

#LøpTidvs modell (T-14)Åpning km 1 (vs snitt)FadeVær (racesnitt)dsmDefinerende
1Tordenskiold 2020 (solo)43:42(B-innsats: +3,0)−0,4−1,5 %8,7° · 3,0Solo-testløp, sub-45-mål.
2Høst-10k 202042:07+0,2−4,5−1,2 %8,8° · 2,8PB −2 min.
3Nidaros 202239:48−0,6−4,0+2,0 %14,6° · 3,4**13**13 d etter Barcelona. Kort løype (9,55).
4Tordenskiold 202341:26+1,5−6,8+4,3 %13,6° · 4,837Kupert (km-er med +25 hm) — fade er terreng.
5Nidaros 202339:58**+1,8**+1,8−0,7 %8,6° · 5,062Første sub-40. Jevn, 3:50-avslutning.
6Oslo 10k 202339:26−0,7−1,4−0,2 %13,0° · 2,8167PB. Dødsjevn.
710k bane 202438:38−1,2−1,6+1,8 %4,4° · 1,3138PB midt i blokk (TSB-pre +2,3).
8Nidaros 202439:25+0,3**−11,6**+6,9 %15,7° · 1,7**20**Åpnet 12 s/km over bærekraft; postM-dummy «reddet» residualen. Score 4,4.
9Nidaros 202540:54**−4,7****−21,3****+10,9 %**6,0° · **5,9****27**Gåten — se §3.
10Sommernattsløpet 202538:25+1,2+0,1−1,1 %11,1° · 2,341PB 6 u etter London — med HRV-flagg dag-før (−25,6 %).
11**EnergiMila 2025****37:24****0,0**+2,3−0,7 %16,9° · 1,1108PB −1:01. Jevn 3:47 + 3:36-avslutning. Modell-treff på sekundet.

10×HM

#LøpTidvs modell (T-14)Åpning km 1 (vs snitt)FadeVærDefinerende
1Trondheim HM 20191:44:42−3,9+7,8−4,7 %10,4° · 1,2Debut. Modellen kjenner ikke 2019-plattformen.
2Solo-HM 20201:42:05−1,1+2,9−3,6 %7,6° · 1,9«All out med tunge bein», TSB-pre −15.
3Familiehalv 20201:44:02(sosialt: −4,8)+2,8−2,1 %12,0° · 5,8Ekskludert (sosial).
4HM okt 20201:36:07−2,2−1,00,0 %6,0° · 3,9PB −6 min.
5HM 20211:33:45−0,4+0,1+1,4 %16,7° · 3,4Fra TSB −50 (T−14) til +11 på dagen — overload→rebound.
6Skogsmaraton 2021 (HM-trail)1:56:04(trail: −20,6)+12,0 %14,4° · 4,2Terreng/+494 hm. Ekskludert, selvforklarende.
7TOSK-HM 20221:29:16(B-innsats: +4,3)+6,5−1,5 %8,8° · 5,2B-løp i TOSK-følge — likevel raskere enn modellen.
8Trondheim HM 20231:27:49+0,3−1,0−2,2 %14,7° · 2,6PB på dyp taper (TSB-pre +36). HR-sensorfeil.
9**Trondheim HM 2025****1:24:24**−0,8+7,8−2,6 %15,8° · 2,6PB. −8,1 s/km halvdels-split — «for konservativ start» (Carls egne ord).
10**Berlin HM 2026****1:21:19****+1,6**+4,4−1,5 %6,8° · 3,8PB, sweet-spot-eksekvering (8,9): 95 % I3, aldri I4, finish 3:30.

To klynger per kategori: på 10k skiller åpningen rene løp (±3 s/km på km 1 → alle innenfor ±1,8 % av modellen) fra sprekkene (−10…−21 s/km → de to eneste fadene >6 %). På HM er negativ split husstilen (alle moderne HM −1,5…−2,6 % fade) og begge PB-ene åpnet 4–8 s/km konservativt. Merk at 7 av 11 10k er løpt i mai/juni — og alle tre Nidaros-startene ligger i postM-vinduet (13/20/27 d). Det er ikke en løype-forbannelse, det er terminlista.


2. Hva som skiller gode fra dårlige KORTE dager — seks funn

K1 — Åpnings-kilometeren er den sterkeste enkelt-diskriminatoren i hele kortdistanse-materialet. Målt mot LOO-predikert («bærekraftig») pace: alle rene 10k åpnet innenfor −3…+2 s/km (Nidaros-23 −2, Bane-24 +1, Sommernatt −3, EnergiMila +2, Berlin HM +1) — begge sprekkene åpnet −10…−12 (Nidaros-25: 3:44 på km 1, EnergiMila-PB-pace tre måneder før EnergiMila-formen). På flat løype har hvert eneste rene 10k siden 2023 hatt flat-til-negativ fade (−0,2…−1,5 %); hver fade >+4 % har en navngitt årsak (terreng Tordenskiold-23, postM Nidaros-24, kollaps Nidaros-25). Trondheim HM-25 viser samtidig motsatt grøft: +10 s/km for konservativ åpning kostet ~1 min (v1-analysens eget regnestykke). Regelen er symmetrisk: km 1 = målpace ±3 s/km.

K2 — Fade-profilen ved 10k-intensitet er binær, ikke gradvis. De rene løpene ligger 3–5 s/km i «lomma» hele veien og lukker 5–10 s/km raskere siste km (Nidaros-23: 3:50-finish; EnergiMila: 3:36; Sommernatt: 3:47). Sprekkene holder først skjemaet — Nidaros-25s første 6 km snittet 3:54,3, eksakt LOO-predikert pace — men frontlastet (km 1 3:44), og betaler så +28 s/km over siste 4 km (4:17–4:25–4:22–4:27). Ved 10k-intensitet finnes ingen mellomting: enten holder du, eller så koster hver banket sekund tredobbelt etter km 6–7. HM fader mykere (Trondheim-19 og Solo-20 hadde negative split-tall men −3,9/−1,1 % mot modellen — der var det plattformen, ikke disponeringen).

K3 — Taper-behovet er distanse-asymmetrisk: 10k-PB-ene kom UTEN taper, HM-PB-ene MED. EnergiMila-25: TSB-pre −6,2 med 101,5 km siste 7 døgn — PB og modell-treff 0,0. Bane-24-PB: TSB +2,3 / 89 km. Sommernatt-PB: +13 / 76 km. HM-PB-ene: Berlin +25,0 (ATL/CTL-fall 5:1, «lærebok» per v8), Trondheim-25 +17, Trondheim-23 +36 (dyp). 10k tåler — kanskje foretrekker — full treningsuke på høy plattform; HM vil ha ekte nedtrapping. Det rimer med modellens `10k-terskeldose`-feature (β +0,010 i dagens fit): høy fersk terskel-last er en ferskhets-straff på dagen, men den er liten — og volumet i seg selv har aldri kostet et 10k-løp i materialet. (Konfidens B: n=2–3 per celle, men entydig retning + mekanisme.)

K4 — Vind-sårbarheten på 10k er i hovedsak priset ferdig etter B2 — restrisikoen er interaksjonen vind × åpning. LOO-residual mot vind for de ni rene kalibrerings-10k: r = +0,64 — altså svakt positivt; de to nest-vindigste (Nidaros-23 5,0 m/s, Tordenskiold-23 4,8) slo modellen med +1,8/+1,5 %. Modellen tar om noe litt for mye betalt for moderat vind nå. Det som gjenstår er halen: Nidaros-25 (5,9 m/s + yr + føles-som 0°) er materialets eneste vind-katastrofe, og den ble utløst av åpningen (K1), ikke av vinden alene — vinden bestemte prisen på feilen. Kvadratisk vind-form står riktig parkert til flere >6 m/s-løp finnes (PREDICTION_MODEL §9).

K5 — Dag-før-HRV-flagget (MOD-5) diskriminerer IKKE på kortdistanse. Replikert med race_outlook-formelen eksakt (HRV dag-før vs snitt dag 2–29, flagg ≤−10 %): flagget fyrte foran tre moderne kortløp — Nidaros-25 (−18,1 % → −4,7), Sommernattsløpet-25 (−25,6 % → +1,2, PB) og Berlin HM-26 (−17,5 % → +1,6, PB). 1 av 3. Nidaros-24 (−9,0) lå rett utenfor terskelen → +0,3. Maraton-fasiten (Paris) står, og «sikt nedre CI»-rådet er fortsatt riktig der — men på 10k/HM ville rådet kostet to PB-forsøk. Fysiologien er plausibel: 38–85 min på/over LT2 er langt mindre avhengig av autonom ferskhet enn tre timer på LT1 med glykogen- og termoregulering. Tverrmaraton-syntesens F7-formulering («3/3 under prediksjon», inkl. Sommernatt) reproduseres ikke post-refit — Sommernatt er +1,2 i dagens LOO. Forslag (Carl-beslutning, ingen kode endret): gjør flagg-ordlyden på prediksjon.html distanse-avhengig — M: dagens råd; 10k/HM: informasjonslinje («historisk uten prediksjonsverdi alene på kort distanse — sjekk postM/vind/åpningsplan») . postM- og sykdom-14d-flaggene beholdes uendret for alle kategorier.

K6 — Kvalitets-speilet er kortdistansens form-markør: snitt-drag-pace i blokka ≈ HM-race-pace. Berlin-blokka (race_deep): 209 drag, snitt 3:48/km på arbeids-HR 139–147 → race 3:51 på HR 162. Drag-farten speiler racefarten nesten eksakt, på ~20 slag lavere puls — det er automatisert fart, ikke maksuttak. Målbart fremover: for Kbh 3:47 bør sein-blokk-dragsnittet ned mot 3:43–3:45; for Energimila 36:5x bør I4-øktenes 1000-metere ligge 3:38–3:42. (Konfidens B — én blokk med full dokumentasjon, men mekanismen er den samme som gjorde 10k-terskeldose og LT2-økt-pace til modell-features.)


3. Nidaros-25-gåten — løst så langt data rekker

Spørsmålet var om −4,7 % tross postM-flagg er dagsform à la London eller et mønster. Svaret er: et komponert, målbart uhell — ikke London. Fire bidragsytere, alle synlige før eller under start:

1. postM-vinduet (27 d etter London) — modellen priset det (+3,5 % med dagens β 0,034; +4,2 % ved MOD-1-innføringen), så −4,7 er på toppen av postM-justeringen.

2. Materialets verste 10k-forhold: 5,9 m/s tidsvektet (27 km/t i kast per light-siden), yr, føles-som 0°. Vind-featuren tok sitt, men K4-interaksjonen — å frontlaste i motvindsløype — er ikke priset.

3. Åpningen: km 1 på 3:44 = −10 s/km under bærekraftig (3:54), som er nøyaktig EnergiMila-PB-pace han nådde først i august. Første 6 km snittet 3:54 (riktig!), men frontlastet — siste 4 km kostet +28 s/km mot bærekraftig. Selvforskyldt og identisk med Nidaros-24-mønsteret (−12 s/km åpning, fade 6,9 %).

4. Dagsform-komponenten: HRV dag-før −18 % (reelt flagg denne gangen), «ikke dagen i dag heller», og løpet ble avskrevet mentalt underveis (Carls notat). Pulsbeltet sviktet i kulda (snitt 130 — fysiologisk umulig; RACE-HR-1 står i TODO), så effort kan ikke verifiseres.

Mot London-testen: London var «tungt fra start» med lav HR og jevnt forfall — upprisbar dagsform. Nidaros-25 fulgte skjema i 6 km og knakk der frontlastingen + vinden forfalt — et pacing-forløp, ikke et kollaps-forløp. Konklusjonen er optimistisk: alle fire bidragsyterne er unngåelige eller kjente (BLK-2 verner mot 1, RE-reglene i §5 mot 2–3; 4 var ekte, men alene har den aldri kostet mer enn ±1,5 % på kort distanse, jf. K5). Fjorten dager senere: PB. Formen var der hele tiden — akkurat som light-siden konkluderte, men nå med splits som bevis.


4. Modell-dommen: er 10k løpene eller modellen? (spec-spørsmål 3)

Løpene — nærmere bestemt ETT løp og én æra. Og premisset er allerede foreldet. Spec-tallene (σ 1,8, CI [−5,6, +3,3]) er fra MOD-3-runden 03.07; dagens fil (post-B2/B6 05.07) sier 10k σ 1,82 / CI [−4,62, +1,71] — og HM er nå svakeste kategori på σ (2,25). Dekomponert på T-14:

(σ under = populasjons-σ på T-14-settet alene; filas `sigma_pct` (10k 1,82 / HM 2,25 / M 1,37) er beregnet over alle horisonter og brukes av CI-ene.)

Kategorinsnittσ (T-14)Uten én outlier
10k10−0,201,75**uten Nidaros-25: +0,29 / σ 0,97** — modellens strammeste kategori
HM7−0,931,632023+: +0,3/−0,8/+1,6 · pre-2023: −3,9/−1,1/−2,2/−0,4
M10−0,551,36

10k-«svakheten» er én venstre-hale-hendelse av en identifiserbar og (nå) regelbeskyttet type (postM × vind × åpning). HM-svakheten er 2019–20-æraen, der modellen systematisk over-predikerer fordi anker/features ikke kan se hvor tynn plattformen var — et data-, ikke modellproblem, og det tynnes naturlig ut etter hvert som moderne HM-er akkumulerer. Den asymmetriske CI-en gjør allerede jobben sin: halen er ekte (man kan sprekke −5 %, aldri overprestere +5 %), og den skal prises, ikke fittes. Ingen modellendring anbefales — kun MOD-5-nyansen fra K5. B6-vaktene bekrefter seg selv (effort_b +3,0/+4,3 = B-løp går fortere enn A-kalibrert modell venter; trail −20,6; London −11,4).


5. ENERGIMILA-REALISERINGSPLANEN (12.8.2026 — sub-2:50-sjekkpunktet)

Strekene: 36:57 = eksakt Riegel-1,06 mot Amsterdam 2:49:59 (maraton-syntesen §4/§7). Sub-1:20-broen: ren Riegel krever 10k ≤ 36:15, men Carls egen 10k→HM-eksponent er 1,041 (EnergiMila → Berlin HM, chip) → ≤ 36:46. Én augustkveld, to sjekkpunkter: 36:5x kvitterer maraton-streken, 36:4x kvitterer i praksis begge. Dagens outlook: pred 35:52, P(sub-37) = 75 % — målet ligger altså under modellens forventning; dette er en realiserings-, ikke en kapasitetsplan. postM-fritt ✓ (290 d siden Frankfurt).

#RegelKravKonfidensEvidens
RE1Åpning**Km 1 = målpace ±2 s (3:40–3:44). Aldri under 3:38.****A**K1: ±3 → alle rene; −10/−12 → begge sprekker.
RE2Profil**Lås 3:41–3:43 til km 7, alt fra km 8. Fade-mål ≤ 0 %.** 5k-pass 18:25–18:30 (underveis ryker 5k-split-PR-en 18:38 — planlagt, ikke signal om å henge på).**A**K2: alle rene 10k lukker 5–10 s/km raskere siste km. EnergiMila-25-malen.
RE3Ingen taper**Hold uka (u32) normal; lett dag-før holder.** Ikke kopier HM-taperen.**B**K3: PB på TSB −6 / 101 km-uke. Terskeldose-straffen nulles av 2–3 lette døgn.
RE4Siste harde økt**Full terskel senest T−5 (fre 7.8); T−2 kun strides.**BK3-mekanismen (ferskhet, ikke fitness); Berlin-blokkas siste-uke-mønster.
RE5Vær-gate**>5 m/s: bytt til even-effort (WGAP-ro), aldri jag km-tider i motvind.** Varme er ikke-tema: 19-start målte 16,9°/1,1 m/s i 2025; >15° koster 0,15 %/° (prior) ≈ 2–3 s totalt.**B**K4: vinden priser åpningsfeil, ikke jevn innsats. Frankfurt-malen.
RE6Race-eve**Søvn ≥ 8 t (Berlin 8,4 ✓, Frankfurt 6,2 ✗). HRV-flagg alene = info, ikke måljustering (K5). Reelle flagg: sykdom <14 d, vind, postM.**BK5: 2 av 3 kortdistanse-flagg foran PB-er.
RE7Verktøy**A9-generatoren (`Races/pacing_energimila.html`) mates med 36:50-mål + RE1/RE2-låsene.** Beltet sjekkes i kulde/regn (Nidaros-25-lærdommen, RACE-HR-1).Operativt.

Gapet fra 37:24 er 27 s (2,7 s/km), og verktøyene er allerede i planen: terskel-progresjonen u29–32 (Kbh-blokka bygger samtidig, K6-speilet: I4-1000-metere på 3:38–3:42), varme-returen fra Italia (kvantifiseres i FABLE-4-rapporten — utladningen hjemme u29–30 er innenfor vinduet), og en åpningsdisiplin som allerede var ren i 2025. Løpet skal bekrefte, ikke skape, formen — nøyaktig som modellens 35:52 sier.


6. SUB-1:20-OPPSKRIFTEN — København HM 20.9 (T−4 u til Amsterdam)

Gapet: 1:21:19 → 1:19:59 = 80 s = 3,8 s/km (3:51 → 3:47). Berlin-fasiten sier hvor de bor:

#Kildes/kmKonfidensEvidens
S1**LT2-løftet**2–3**B+**Berlin ble løpt PÅ lab-LT2 (3:49/3:51). Berlin-blokk-dosen (80 km/u × 12 u, 22,1 kval-km/u, 209 drag à 3:48) flyttet LT2 fra ~3:55 (2024) til 3:49 (lab 24.02). Samme dose-klasse ligger i u29–37-planen; lab-retest aug/sep (planlagt, PREDICTION_MODEL §9) verifiserer. Uten S1 betyr 3:47 å ligge *over* terskel i 80 min — mulig, men da må alt annet klaffe.
S2**I4-billetten**1–1,5**B**Berlin: 95 % I3, **0 % I4**, siste km 3:42, finish-stykket 3:30, decoupling −4,2 % — reserven er dokumentert, ikke antatt. Kbh-planen: I4 tillatt fra km 15–16 (Trondheim-25 hadde 15 % I4 og tålte det). v8 sier det samme: «sub-1:20 krever nær 100 % av plattformen».
S3**Taper-repetisjon**0,5–1**B**Berlin-malen: TSB-pre +25, ATL/CTL-fall 5:1, søvn 8,4 t. HM er taper-sensitiv (K3) — dette er gratis fart hvis den gjentas, tapt fart hvis ikke.
S4**Forhold**0–1**C**Berlin: 5,7°/3,4 m/s, vind-kost ~1 s/km (v8s WGAP-regnskap → «vindfri» 1:20:57). Kbh september: flatt, typisk 12–15°; 2024-M-dagen der blåste 3,7 m/s — vind-gate som RE5.
S5(Vekt)(1,5–2 per kg)**C**v8s Stellingwerff-anslag. IKKE et krav — kun hvis det skjer uten kraft-tap; S1–S4 dekker gapet uten.

Midtpunkt-sum S1–S4 ≈ 4–6 s/km mot et behov på 3,8 — sub-1:20 er dekket med margin hvis terskelblokka leveres og dagen disponeres etter husstilen (åpning +3–5 s/km, halvdels-split −4…−6, K1/K2-speilvendt for HM). Energimila er go/no-go-lampen: 36:4x → åpne Kbh på 3:47-skjema; 37:0x–37:1x → åpne på 3:49 og hent S2-reserven fra km 15. Dagens outlook: pred 1:19:22, P(sub-1:20) = 57 % — modellen ser det samme som oppskriften, med ærlig usikkerhet.

Amsterdam-vinkelen (near-ankeret): Kbh T−4 u er P10-tune-up-en som re-kalibrerer maraton-ankeret (beste race samme kategori 540 d) — en 1:19:xx løfter hele prediksjonskjeden inn mot 18.10. Kostnaden er reell og skal planlegges, ikke oppdages: R8-immunvakt 72 t + null kvalitet 3–5 d etter målgang (Berlin-HM-kvitteringen: severe infeksjon 30.3–2.4, dagen etter løpet), og u39 i Amsterdam-blokka legges deretter.


7. Gap-sjekk mot plan + ærlighetsnotat

Planen (Blokkplan-Amsterdam v2 + outlook per 05.07) treffer syntesen nesten overalt: tune-ups på riktige datoer og avstander ✓ (Energimila T−9,5 u — utenfor ideal-vinduet 4–6 u, men Kbh T−4 lukker gapet, nøyaktig som maraton-syntesen §4 sa) · postM-fritt for begge ✓ · outlook-sannsynlighetene (75/57/61 %) er konsistente med oppskriftenes konfidens. To skjerpinger: (1) u32/33 rundt Energimila skal IKKE taper-behandles — hold volumuka, lett dag-før (K3/RE3; en klassisk felle er å gi 10k-en HM-respekt). (2) Kbh-uka SKAL taper-behandles (S3) og etterfølges av immunvakt-planlagt u39 — HM-en er både A-mål og Amsterdam-anker, og begge rollene tåler dårlig en infeksjon à la 30.3.

Ærlighetsnotat: n=21, hvorav 17 i kalibrering — alt er rangeringer med skarpe brudd, ikke kausalbevis. Åpnings-/fade-funnene (K1/K2) står støest (virker innen æra og på tvers); taper-asymmetrien (K3) hviler på 2–3 moderne løp per celle. HM-σ-dommen (æra-data) og K5 (n=3 flagg) er sårbare for neste datapunkt. Laps er GPS-rekonstruert — åpnings-km-ene kan bære ±2–3 s GPS-støy (retningen overlever, størrelsen er ca.). Nidaros-22 er 9,55 km (løpemål); Tordenskiold-23s fade er terreng. MOD-5-replikasjonen bruker morning_snapshot-verdier og race_outlook-formelen eksakt, men historisk finaliserte HRV-verdier kan avvike marginalt fra snapshot. Spec-ens «σ 1,8 / CI [−5,6, +3,3]» og F7s «Sommernatt under prediksjon» er pre-05.07-tilstander — denne rapporten bruker dagens modellfil konsekvent, og avvikene er dokumentert der de oppstår (§4, K5). Carl-eksponenten 1,041 er en n=1-bro med 7,5 mnd mellom endepunktene — derfor oppgis begge strekene (36:15 ren Riegel / 36:46 Carl-ratio) i stedet for én. Og den største enkeltusikkerheten er den samme som i maraton-syntesen: ingen av S-kildene er bevist additive — 4–6 s/km-regnskapet er beste ærlige lesning av én blokk-fasit (Berlin), designet for å bli testet billig (Energimila) før det koster noe (Kbh).

Maraton pacing-DNAHva: Per-sekund-telemetri på tvers av alle 11 maraton — hvor tid lekker, hendelse vs brudd, in-race-gates.
Konklusjon: All tid lekker i km 35–40; kollaps er binær og synlig live på steglengde+HR (→ Amsterdam-gates km 5/25/35).
Fable2026-07-06
#pacing#km 35-40#in-race#gates

Maraton-pacing-DNA — in-race-telemetri på tvers av 11 maraton

Dato: 2026-07-06 · Skrevet av: Claude (Fable, FABLE-6 fra TODO-spec-banken) · Grunnlag: `Races/_stream.json` (per-sekund: velocity/HR/kadens/watts/altitude, alle 11) + `Races/_data.json` (1000m-laps) · `race_weather.json` · maraton-sidene og `Running_Report_Tverrmaraton-Syntese_v1.md` som kontekst-anker.

Hva dette er: Tverrmaraton-syntesen brukte halvdels-fade; dette er første gang per-sekund-streams og km-laps leses på tvers av alle 11. Spørsmålene fra specen: hvor lekker tid, in-race HR-drift/decoupling per 5k, respons på vind/høydemeter, og «point of no return»-mønsteret i de sprukne løpene. Leveransen ender i en skjerpet km-for-km-plan for Amsterdam (A9) og et forslag til in-race-decoupling-definisjon som komplement til P4-porten.

Metode-noter: (1) Km-avvik måles mot løpets egen snittpace (skalerte 1000m-laps). (2) EF = fart/HR; drift = EF per segment vs baseline km 3–8 (unngår HR-lag i start). (3) HR-artefakter renset før alt annet: NY-23/Berlin-24 har `hr_removed` (ingen HR-analyse); i tillegg fant denne gjennomgangen artefakt-blokker i Valencia-22 km 6–12 (spike til 188 midtløps, retur til 162), Paris-23 km 12–20 (blokk på 176–182, retur til 156–160 på samme fart) og Valencia-24 fra km ~21 (glir 158→139 på jevn 4:10 — wrist-dropout). Disse km-ene er ekskludert fra EF/HR-tall; Valencia-22 bruker baseline km 13–20. London-25s HR er vurdert EKTE (koherent forløp uten spike-mønster). (4) Ingen latlng i race-streams → vind-retning/WGAP ikke forsøkt; vind analyseres via km-uro og watts. (5) Strava-høyde-TOTALER er søppel (MOD-8), men per-km-stigning fra barometrisk altimeter har reelt signal — brukt kun relativt, innen løp, med løp-faste effekter. (6) Trondheim-21 GPS-upålitelig — ute av km-profilene.


1. Fasiten — in-race-telemetri på én side

LøpÅpning km 1Banket <30kTap 35k→målBrudd-onsetRecoveryEF-drift 31–35Stride 35–40 vs 5–10Siste 2,2 kmkm-SD (vind)
Trondheim 21+1,6 %52 s23 s−4,6 %−0,6 %**−14,7 s/km**4,7 (1,7 m/s)
Barcelona 22+4,2 %67 s17 s+1,1 %−2,3 %**−14,3**3,8 (1,3)
Oslo 22**−3,7 %****215 s****159 s**km 24→35nei (kollaps 37–39)−4,0 %**−11,3 %**+1,24,4 (3,6)
Valencia 22+0,2 %76 s55 skm 35nei−1,2 %−1,8 %+0,73,0 (1,2)
Paris 23+1,5 %101 s82 skm 37nei−0,0 %***−6,0 %**−4,47,2 (**6,1**)
NY 23(Verrazzano)149 s54 skm 37delvis(ingen HR)**−5,4 %**−5,15,9 (1,0)
København 24+0,4 %52 s39 s**−8,5 %**−2,6 %−3,32,7 (3,7)
Berlin 24+1,1 %56 s16 skm 28 (GI)**JA — full**(ingen HR)−1,9 %−3,63,4 (3,4)
Valencia 24+3,0 %28 s20 s(HR død fra 21)−2,2 %−10,12,8 (1,5)
London 25(syk fra start)313 skm ~16–20nei(syk baseline)***−19,1 %**+48,24,3 (0,3)
**Frankfurt 25****+5,4 %****29 s****0 s****−0,1 %****−0,5 %**−4,63,4 (**6,4**)

\ Paris' 31–35 ser ren ut, men 36–40 er −13,2 % — klippekant, ikke jevn glidning. London: baseline km 3–8 var allerede patologisk (HR 173 på planfart), så drift-tallet måler mot en syk referanse. «Banket» = sek raskere enn eget løpssnitt før 30 km — merk at metrikken pr. konstruksjon speiler fade (se §5).*

2. Sju DNA-funn

D1 — All tid lekker i km 35–40. Aldri på slutten — reserven finnes nesten alltid. Segment-tapene mot egen snittfart: de sprukne løpene taper +54…+159 s i 35–40 (Oslo +140 i selve segmentet); sub-3-laget +13…+32; Frankfurt −13. Men siste 2,2 km er NEGATIV i 9 av 11 løp — selv NY med krampefare (−5,1 s/km) og Paris (−4,4). Bare Oslo (flat) og London (+48) manglet spurt. Lekkasjen i 35–40 er altså ikke absolutt tom tank — det er et kontroll-/durability-tap som «slipper» når mål nærmer seg. Konsekvens for Amsterdam: 35–40 er ikke stedet for frislipp; frislippet (38+) er gratis bare hvis 30–37 var kontrollert. I tillegg synes en mild halvveis-lull rundt km 24–26 i 6 av 11 løp (+4…+20 s/km enkelt-km; NY-tallet er Queensboro) — gel + fokuspunkt der er billig forsikring.

D2 — Åpningen predikerer lekkasjen: ingen vellykket maraton åpnet km 1 raskere enn snittfarten. Sub-3-DNA-et per km: km 1 = +6 s/km, km 2 = +1, deretter flatt (±2 s) til 35. Alle fire sub-3: km 1 mellom +0,4 % (Kbh) og +5,4 % (Frankfurt). De sprukne åpnet på eller under snitt (Oslo −3,7 %, og km 3-snittet deres er −11 s/km). Innen km 4–30 var dypeste enkelt-km i et sub-3-løp bare −8 s vs snitt (Kbh km 12). Frankfurt-malen kvantifisert: km 1 +13 s (HR 148!), km 2 +3, lås fra km 3.

D3 — Kollapsen er binær, ikke gradvis. Pooled regresjon (309 km, høyde + løp-faste effekter, km ≤35): den systematiske «gradvise fadingen» er bare +0,06 s/km per km (SE 0,03) — under 2 s/km fra km 5 til 35. Alt annet tap er konsentrert i identifiserbare brudd/hendelser. Maratonfade er hos deg ikke en jevn fysiologisk glidning; det er disiplin + ett binært brudd som enten kommer eller ikke.

D4 — To fade-moduser, og de kan skilles LIVE: hendelse vs brudd. Berlin-GI-en er malen for hendelse: onset km 28, +13/+19/+14 s/km i tre km (~46 s), stabil kadens, stride-dipp som HENTET SEG (−4 % i segmentet → tilbake til −1,9 %), og km 31–42 tilbake på planfart. Total kost ~50–80 s, sub-3 holdt. Bruddene (Oslo, Val-22, Paris, NY, London) deler én mekanisk signatur: kadensen holder (−1…−3 spm), steglengden kollapser — −5,4 % (NY), −6,0 (Paris), −11,3 (Oslo), −19,1 (London), mot ≤−2,6 % i alle sub-3. Etter brudd-onset er taksten 9–18 s/km til mål, uten retur. Live-regel: fartsfall med intakt steglengde/HR = hendelse → ikke jag, den går over; fartsfall med krympende steg og stigende HR = brudd → lås ny realistisk fart umiddelbart, hvert «jage-km» forverrer (Oslo banket 215 s og betalte 159+ i 35–40 alene).

D5 — London var synlig i telemetrien fra km 2, og abort-vinduet ble ikke brukt. HR 174/174/173 på km 2–4 i planfart — +12…+15 slag over din normale MP-HR (155–162 i alle friske løp). Ingen andre løp viser dette (Val-24 med 3 d forkjølelse: 166–168 første 10k — forhøyet, men leverte PB; terskelen ligger altså rundt 170, ikke 165). Fra km 11 falt HR sammen med farten — kroppen nektet å levere effekt. Dette gir en operasjonell dagsform-gate som R5-flaggene (kvelden før) ikke dekker: HR ≥170 vedvarende første 5 km på planfart → dette er London-dagen; skift til nedre-CI-plan senest km 8–10. London fortsatte på plan til ~15k og betalte 313 s fra 35k.

D6 — København vs Frankfurt: samme utfallsklasse, motsatt kardial kost — race-durability er marginvalg, ikke bare plattform. Kbh red LT2+11 (HR 180) fra km 21, EF-drift −8,5 % ved 31–35, «ødelagt på 38» — men betalte bare 39 s fra 35k (plattform + tog reddet det). Frankfurt lå i I3 til km 37 (HR-snitt 165 ved km 35, LT2 først km 38+), EF-drift −0,1 % ved 31–35, og KJØPTE de −13 sekundene i 35–40. Treningsporten (P4) var grønn i begge blokker — porten måler plattformen, ikke om du disponerer marginen på løpsdagen. In-race-uttrykket av «riktig margin» er EF-drift ≥ −2 % ved 31–35; over LT2 før km 25 har historisk garantert 35–40-regning (Kbh 39 s, NY per løpssiden). Trondheim-debuten viser samme fysikk fra andre siden: −4,6 % drift → −7,8 % → maks-HR 188 i mål.

D7 — Høyde og vind er priset og håndterbare; det som koster er å håndtere dem alene/emosjonelt. Høyde: +5,5 s/km per 10 m stigning, −5,2 s/km per 10 m fall (SE 0,8/0,6 — symmetrisk refusjon; NYs bro-km og Oslos «siste bakke» bærer signalet). Ikke kjemp mot broer — 10 m koster 5–6 s og betales tilbake på nedsiden. Vind: detrendet km-uro (SD) i vindstille løp er 2,7–3,8 s/km; Paris i 6,1 m/s ALENE: 7,2. Frankfurt i 6,4 m/s I TOG: 3,4 — som vindstille. Watts-kanalen viser mekanismen: Frankfurts effekt svinger ±5–7 % per 5k mens farten står stille — vinden ble absorbert i watt (bak gruppa), ikke i pace. Amsterdam-regelen: i vindsonen skal innsatsen variere, aldri farten.

3. Amsterdam km-for-km — skjerpet A9-plan (mål 2:50:00 · 4:01,7/km · kontrollsum 2:49:59)

Dagens A9 (`pacing_plan.py`) er en lineær ±1 %-rampe. DNA-et sier profilen skal være fase-formet, ikke lineær — åpningskost foran, lås i midten, betalt frislipp bak:

FaseKmPaceRegel + in-race-gate
Åpning1**4:10–4:11**Frankfurt-malen (+9 s). HR skal være <155 (Frankfurt km 1: 148). Trengsel er gratis her.
Nedtrapping2–34:06 → 4:04Fortsatt over mål. Ikke vev deg inn i 3:55-tog.
Innfasing4–84:02**Gate km 5:** HR ≤163 grønn · 164–169 obs (Val-24-dagen: lever, men dropp frislipp) · **≥170 = London-gate: bytt til nedre-CI-plan (≈2:53, +4–5 s/km) senest km 8** (D5). Aldri raskere enn 3:57 før km 8.
Lås9–24**4:01–4:02**I tog. Korridor ±4 s. Kadens-referanse noteres ~km 10 (din: 180–184). **Gate km 25: HR ≥172 = Kbh-mønster** → gi opp negativ splitt, forsvar 2:50, prioriter fylling + tog (D6; regningen ellers: ~30–40 s i 35–40).
Halvveis-lull24–264:01–4:02Gel + fokuspunkt — mini-dippen i 6/11 løp starter her (D1).
GI-protokoll27–304:01Ved mageknip: aksepter inntil +10–15 s/km i maks 3 km, **ikke jag tilbake** — Berlin viser full recovery og total kost <80 s (D4). Jaging konverterer hendelse til brudd.
Vindsonen30–37**4:01–4:02 — lås**A9s 💨-sone (Amstel). Le/gruppe FØR km 30; watt får svinge, ikke farten (D7: tog i 6,4 m/s = vindstille-uro). Km-variasjon >±4 s = du drar alene — kjøp le for 2–3 s/km. **Gate km 35: kadens −4 spm fra referansen eller fart −10 s på intakt innsats = brudd underveis → lås 4:06–4:08 resten, redder ~60–90 s vs å jage (D4).**
Betalt frislipp38–40**3:58–3:59**KUN hvis km-35-gaten er grønn (kadens intakt, HR <172). Reserven er historisk reell: 9/11 løp spurter (D1).
Mål41–42,2**3:56–3:57**Frankfurt tok −4,6 s/km her; du har gjort dette i hvert friskt løp.

Kostnadsregnskapet: åpningen (km 1–3) koster ~15 s mot jevn fart; frislippet (38–mål) henter ~15–20 s — netto null mot 2:50:00-planen, men med brudd-risikoen priset ned i den delen av løpet der 10/11 løp lekker. Forslag til `pacing_plan.py` (kjøres IKKE nå — parallelløkt-regel): erstatt lineær bias for M-kategorien med fase-profilen over (åpning +9/+4/+2 s, lås, −3/−5 s fra 38), og legg gate-tekstene inn som rader i HTML-en/armbåndet. 5k-splitt for armbånd: 20:25 · 20:11 · 20:09 · 20:09 · 20:09 · 20:09 · 20:09 · 20:00 + 8:40 (= 2:50:00).

4. Forslag: in-race-decoupling som P4-komplement (til konsolideringsøkta)

P4-porten (to siste 30k+ før taper: dcp ≤1 % OG score ≥8) måler plattform og består. Men Kbh viser at grønn port + feil margin fortsatt gir −8,5 % in-race-drift (D6). Forslag — ny beskrivende metrikk i `post_race_calibration.py`/race_deep-malen, ikke ny gate:

> Race-decoupling = EF(km 31–35) / EF(km 3–8) − 1, med artefakt-rens først (denne rapportens metode: spike/dropout-km ut; lap-HR, ikke hr_avg). Bånd: grønn ≥ −2 % (Frankfurt −0,1) · gul −2…−5 (riktig margin, sliten dag) · rød < −5 (marginen var feil — Kbh −8,5). Sekundær: stride-ratio 35–40 vs 5–10 (fungerer også uten HR: NY/Berlin) — brudd < −4 %.

Dette gir hvert framtidige løp en durability-fasit som kan krysses mot P4-portens treningsverdier — etter 3–4 løp vet vi om treningsporten predikerer race-drift eller bare deltakelse. Amsterdam blir første datapunkt.

5. Ærlighetsnotat

n = 11, hvorav 2 uten HR og 3 med delvis artefakt-HR — EF-tabellen står på 6 hele + 2 halve løp. Artefakt-klassifiseringen (Val-22 km 6–12, Paris km 12–20, Val-24 km 21+) er min lesning av kurveform (spike/blokk/dropout-mønstre), ikke Carl-kanonisk; bør bekreftes før den ev. propageres til `hr_unreliable.json`-tenkning — men konklusjonene D2/D4/D7 står uten disse km-ene. Kbh-HR-en (180 flatt siste 15 k) er ekstrem, men konsistent med løpssiden og uten artefakt-mønster — beholdt. «Banket»-kolonnen er målt mot eget løpssnitt og speiler pr. konstruksjon fade (et jevnt løp kan ikke banke); den brukes derfor bare som jevnhets-mål, ikke kausalt. London-tallene mot eget snitt er meningsløse (snittet er kollapset) — D5 bruker plan-referanse. Høyde-koeffisienten bæres av de reelt kuperte løpene (NY/Oslo); på flate løyper er per-km-støyen ±2–3 m og flytter ingenting. Vind-funnet (D7) er n=2 vindløp mot n=1 håndtert — mekanismen (watts vs pace) er det som bærer det, ikke antallet. Kadens-/stride-NIVÅER er ikke sammenlignbare på tvers av æraer (170→184 spm fra 2021 til 2025 — klokker og løpsstil); alt i D4 er relativt innen løp. Og hovedforbeholdet fra syntesen gjelder fortsatt: ingen av de 11 er løpt på 4:01/km — km-planen i §3 ekstrapolerer Frankfurt-formen ~5 s/km, med Energimila som designert test.


Parallelløkt-notat: kun denne filen er skrevet; TODO/CHANGELOG/SYSTEM_OVERVIEW urørt; ingen sync/bygg kjørt; ingen skriv til data/. Konsoliderings-linje nederst.

Konsolidering: `Running_Report_Maraton-PacingDNA_v1.md` — all lekkasje bor i km 35–40 og er binær (hendelse vs brudd, skillbare live via steglengde+HR); London var synlig fra km 2 (HR ≥170-gate); skjerpet fase-basert Amsterdam-plan (2:49:59-kontrollsum) + forslag om race-decoupling-metrikk (EF 31–35 vs 3–8, grønn ≥ −2 %) som P4-komplement.

Kortdistanse-telemetriHva: Per-sekund på de 21 kortløpene — HR-margin, brudd-mekanikk, vind i watt.
Konklusjon: Kbh-frislippet bør starte km 15 med I4-billett (Berlin-reserven ble sluppet 3 km for sent).
Opus2026-07-07
#10k#HM#in-race#kbh

Kortdistanse-telemetri — per-sekund pacing-DNA på tvers av 21 korte løp (O8)

Dato: 2026-07-07 · Skrevet av: Claude (Opus, OPUS-SPOR-D / D1 fra TODO) · Grunnlag: `Races/*_stream.json` (per-sekund: velocity/HR/kadens/watts/altitude) + `_data.json` (1000m-laps) for alle 21 kortløp (11×10k + 10×HM) · `race_weather.json` (tidsvektet vind) · `race_predict_model.json` (LOO T-14) · About_me + SYSTEM_OVERVIEW lest først.

Hva dette er: Søsteren til maraton-PacingDNA-en (F6), samme metode på kort distanse. F5 leste 1000m-laps; dette er første gang per-sekund-streams (kadens, watts, steglengde) leses på tvers av alle 21 korte. Tre operative spørsmål fra specen: (1) S2-timing — Berlin HM lå 95 % i I3; når «kjøpes» reserven, og hva betyr det for Kbh-frislippet fra km 15? (2) K2-brudd-mekanikken på 10k — km 6–7: ryker steglengden eller pulsen først? (3) Vind i watts — even-effort-regelen (RE5) tallfestet. Leveransen ender i km-gates for Energimila og en S2-frislipp-plan for København.

Metode-noter (arvet fra F6, verifisert mot koden): (1) Per-km og per-500m rekonstruert fra per-sekund mot skalert distanse. (2) EF = velocity/HR; drift = EF(sein) / EF(baseline) − 1. Baseline 10k = km 2–3, sein = km 7–9; HM = km 3–8 vs (N−6)…(N−2). (3) Steglengde = velocity·60/kadens (m/steg) — kadens er full (begge bein, ~180–186). (4) HR renset først: Nidaros-23 og Nidaros-25 har `hr_removed` (blacklist G6 — pulsbelte sviktet i kulda) → ingen HR-analyse, men velocity/kadens/watts står. Trondheim-HM-23 har HR-sensorfeil (snitt 153 på 3:29/km-PB, EF-drift +13,7 % = dropout) → ekskludert fra EF. Nidaros-22 målte 9,65 km (kort løype) → pace-nivået flatterer, brukt kun til form. (5) Watts finnes fra 2022 (Stryd) → vind-analysen er 2022+. (6) Ingen latlng i race-streams → vind via km-uro + watts, ikke retning.


1. Fasiten — 21 kortløp per-sekund

10k (baseline km 2–3 → sein km 7–9):

LøpTidresid T-14Åpning km1 vs snittFade (2H vs 1H)EF-driftSteg-drift seinKadensΔSiste km
Tordenskiold-20 (solo)43:42(+5,3 B)+4,5−6,5 %+1,3 %+4,5 %−1,33:37
Høst-10k-2042:07+0,2−6,4+0,2 %−1,2 %+0,6 %+0,14:30
Nidaros-22 (9,65 km)39:48−0,6−3,0+1,8 %−4,4 %−3,8 %−0,34:01
Tordenskiold-23 (terreng)¹41:26+1,5−1,9−1,5 %−7,2 %−3,9 %−1,23:13
Nidaros-23 (HR ute)39:58+1,8+7,0−4,7 %−1,3 %+0,33:10
Oslo-10k-2339:26−0,7+3,8−5,1 %−1,2 %−0,5 %−0,52:59
Bane-2438:38−1,2−1,6+1,7 %−0,9 %−1,7 %−2,03:53
**Nidaros-24** (postM)39:25+0,3**−9,8****+5,3 %**−4,9 %**−6,6 %**−1,13:44
**Nidaros-25** (sprekk)40:54**−4,7****−29,4****+20,0 %****−8,8 %**−3,45:50
Sommernatt-2538:26+1,2+2,3−2,6 %+1,4 %+1,1 %−0,03:30
**EnergiMila-25** (PB)37:240,0+4,5−2,7 %−2,7 %−0,4 %+0,13:19

HM (baseline km 3–8 → sein):

LøpTidresidÅpning km1FadeEF-driftSteg-driftKadensΔSiste km
Trondheim-HM-19 (debut)1:44:42−3,9+9,5−4,9 %(+2,9)²+4,4 %+0,94:44
Solo-HM-201:42:05−1,1+4,2−3,2 %−0,8 %+2,9 %+0,44:54
HM-okt-201:35:36−2,2+0,2−0,5 %−1,9 %−1,2 %+1,64:16
HM-211:33:45−0,4+1,2+0,5 %(−11,7)²−0,7 %−1,94:09
TOSK-HM-22 (B)1:29:16(+4,8 B)+7,9−2,3 %−1,0 %−0,4 %+2,13:57
Trondheim-HM-23 (HR-feil)1:27:49+0,3+0,0−2,3 %(ekskl.)²+2,2 %+1,03:59
**Trondheim-HM-25** (PB)1:24:24−0,8+9,3−3,4 %−3,1 %−0,4 %+3,23:31
**Berlin-HM-26** (PB)1:21:19+1,6+6,2−2,2 %+1,7 %+0,8 %+1,83:29

¹ Tordenskiold-23: kupert, ingen stream — laps-fallback. ² EF-drift-outliere: Trondheim-HM-23 HR-sensorfeil (ekskludert); HM-21 −11,7 % er ekte sein-HR-stigning mot 183 (hardt sluttdrag, ikke artefakt); Trondheim-19 er 2019-plattform. Ekskluderte løp (B-innsats/trail/sosialt) vises med residual i parentes — aldri sett av fitten.

To signaturer springer ut umiddelbart: på 10k skiller steg-driften rene løp (±1,7 %) fra sprekkene (Nidaros-24 −6,6 %, Nidaros-25 −8,8 %) — mens kadensen står nær intakt i begge. På HM er mønsteret motsatt: kadensen STIGER sein i alle moderne løp (+1,0 til +3,2 spm) og steget holder — negativ-split-spurten er kadens-drevet, 10k-bruddet er steg-drevet. Det er to helt ulike fysiske forløp, og de forklarer resten av rapporten.


2. Spørsmål 1 — S2/Berlin-reserven: kjøpt tidlig i I3, sluppet 3 km for sent

Berlin HM-26 per-500m, med gap til lab-LT2 (HR 169):

km1–10,5 (åpning+lås)11–15 (midtlås)15–18 (venting)18–21,1 (frislipp)
HR-snitt160,7163163**165–168**
Gap til LT2+5…+8+6+6+1…+4
Pace3:513:503:48**3:45 → 3:41 → 3:29**
Steglengde1,411,411,42**1,44 → 1,47 → 1,54**

Funn: Reserven ble kjøpt av en disiplinert åpning (km 1 HR 159, deretter lås 162–165 = 95 % I3) og lå urørt hele løpet — HR nådde maks 168, aldri inn i I4 (170–175). Frislippet kom ikke før km 18–19: farten falt 3:48 → 3:45 → 3:41 → 3:29 mens HR bare krøp 164 → 168 og steglengden eksploderte +9 % (1,41 → 1,54). Han spurtet siste km på 3:29 med 1 slag til LT2 og tre soner (I4 helt) ubrukt.

Det betyr: «I4-billetten» (S2-posten i sub-1:20-oppskriften, verdt 1–1,5 s/km) ble aldri innløst i Berlin. Fra km 15 lå HR på 163 (+6 til LT2) mens han fortsatt løp 3:48–3:49 — 3 km der marginen sto ubrukt. Berlin ble 1:21:19 med en halv fart-sone i banken.

Kbh-frislippsplan (sub-1:20 = 3:47/km):

  • km 1–14: kjøp reserven som i Berlin. Lås 3:47–3:48 på HR ≤165 (95 % I3). Dette krever S1 (LT2-løftet 3:49→ mål 3:43–3:45 lab-verifisert aug/sep) — uten det sitter 3:47 på 169, ikke 165, og reserven finnes ikke.
  • km 15: START frislippet (ikke km 18). Her lå Berlin på HR 163 med hele I4-båndet ubrukt. Innløs billetten: HR-tak 172–174 (Trondheim-25 tålte 15 % I4), pace 3:44–3:45.
  • km 18–21,1: siste innskudd. Berlins finish-stykke (3:41 → 3:29 på HR 167–168) viser hva reserven leverer — replikér fra km 18 med HR mot 174.
  • Regnestykket: 6 km fra km 15 på 3:44 (mot Berlins 3:48) = 24 s + I4-headroom = 3:47-snitt lander sub-1:20 med margin. Reserven er dokumentert (HR-taket 168 vs 175), ikke antatt. Energimila er go/no-go-lampen: 36:4x → åpne Kbh på 3:47-låsen; 37:0x → åpne 3:49 og hent alt fra km 15.

3. Spørsmål 2 — K2-bruddet på 10k: steglengden ryker først, pulsen er ikke utløseren

Km 6–7 for de to sprekkene mot de to rene PB-ene (baseline km 3–5,5 → brudd km 5,5–7,5):

LøpSteglengdeKadensHRPace
**Nidaros-24** (postM sprekk)1,435 → 1,380 = **−3,9 %**179,9 → 180,0 = **±0**173,8 → 170,4 = **−3,5**+3,9 %
**Nidaros-25** (sprekk, HR ute)1,377 → 1,294 = **−6,0 %**184,3 → 181,8 = −2,6+8,0 %
EnergiMila-25 (PB)1,476 → 1,454 = −1,5 %±0,1172,2 → 171,7 = −0,4+1,5 %
Sommernatt-25 (PB)1,424 → 1,433 = +0,7 %+0,3174,7 → 173,8 = −0,9−0,8 %

Funn — steglengden, entydig. I Nidaros-24 (den ene sprekken med gyldig HR) faller steget −3,9 % mens kadensen står nagelfast (±0) og pulsen faktisk SYNKER 3,5 slag (174 → 170). Kroppen slipper ikke pace fordi hjertet når taket — den slipper steget, og pulsen daler med farten. Det er en nevromuskulær/mekanisk kollaps, ikke en kardial. Nidaros-25 (uten HR) viser samme signatur forsterket: steg −6,0 %, kadens tilnærmet intakt. De rene løpene holder steget (±1,5 %) — ingen mellomting, akkurat som K2 sa, nå med mekanismen synlig.

Årsakskjeden (Nidaros-24): overpacet åpning (−9,8 s) → HR spiker til 176 (I5) km 3 → betaler for det km 5–7: steget kollapser, HR daler til 170 idet farten bløder. Frontlastingen brukte opp benet, ikke pusten.

Live-gate for Energimila (til RE-plan-vedlegget): overvåk steglengde fra km 5 (Stryd viser den live; proxy = pace ved holdt kadens). Et fall >3 % ved intakt kadens = bruddet har startet — km-en er allerede tapt, ikke jag den (Nidaros-24 banket 3 km og betalte +9 s/km til mål). Dette er 10k-ekvivalenten til maratonens km 35-gate (F6 D4), men utløseren er steg-ikke-HR fordi 10k-bruddet er mekanisk.


4. Spørsmål 3 — Vind i watts: pace svinger mer enn effekten, og det er selvskaden

Per-km variasjonskoeffisient (CV), pace vs watts:

LøpVind (racesnitt)Pace-CVWatts-CVUtfall
**Nidaros-25****5,9 m/s****13,0 %**8,4 %sprekk −4,7 %
Oslo-10k-232,8 m/s7,2 %4,4 %PB (kupert løype)
Nidaros-241,7 m/s3,7 %5,5 %sprekk (watts > pace)
EnergiMila-251,1 m/s3,6 %2,8 %PB
Sommernatt-252,3 m/s2,4 %1,5 %PB

Funn: Watts-kanalen gjør synlig det pace skjuler. I materialets eneste vind-katastrofe (Nidaros-25, 5,9 m/s solo) svingte pace 13,0 % mens effekten «bare» svingte 8,4 % — han jaget km-tida i motvind, spikret ikke effekten. De rene PB-ene i moderat vind holdt watts-CV under 3 %. Target-effektbåndet fra de rene 10k er stramt: 462–479 W (EnergiMila 470±21, Sommernatt 462±20, Bane-24 462±14, Oslo 479±35). Berlin HM lå på 449±28 (HM-effekt, lengre).

Nidaros-24 er lærerik som motstykke: watts-CV (5,5 %) > pace-CV (3,7 %) — der pushet han effekten for å forsvare farten mens benet sviktet (§3), motsatt selvskade. Begge sprekkene brøt even-effort, hver sin vei.

Operativ regel (skjerper RE5): i >5 m/s — pace km 1 etter watts, ikke klokka. Hold 465–480 W-båndet og la farten flyte (treg i motvind, kvitt på medvind). Å jage pace-tallet i motvind er nøyaktig det som konverterte Nidaros-25 fra en vindfull dag til en kollaps (K4-interaksjonen: vinden priset frontlastingen, ikke løpet). Stryd er allerede på — dette krever bare at Mål-fanen/armbåndet viser watt-bånd, ikke bare pace, på vind-gate-løp.


5. Tre tverrgående funn (per-sekund bekrefter F5)

A — Fade er binær på 10k, mykt monoton på HM (K2 verifisert per-sekund). Rene 10k: fade ≤0 %, steg ±1,7 %. Sprekker: fade +5…+20 %, steg −4…−9 %. Ingen 10k lander i mellom. HM fader alltid −2…−3,4 % (negativ split) uansett utfall — mykt, kadens-drevet, ikke et brudd.

B — Åpningen er stadig den sterkeste diskriminatoren (K1). Rene 10k åpnet km 1 innen ±5 s av snitt; begge sprekkene frontlastet grovt (Nidaros-24 −9,8, Nidaros-25 −29,4 vs eget kollaps-inflaterte snitt; F5s −11,6/−21,3 vs bærekraft er den renere målestokken). Symmetrisk felle på HM: Trondheim-25 åpnet +9,3 s (for konservativt) og la ~1 min i banken — men det er en billigere feil enn frontlasting.

C — EF-drift som durability-fasit (F6 §4-metoden på kort). Berlin +1,7 % (EF bedret seg sein — reserven), rene 10k ±1–3 %. Dette er kortdistansens P4-speil: EF-drift ≥ −2 % km-sein = marginen var riktig. Berlin og EnergiMila kvitterer; sprekkene har ingen gyldig HR å måle på (blacklist), så steg-driften (§3) er durability-proxyen der.


6. Leveranse: Energimila km-gates (RE-plan-vedlegg, 12.8 — sub-2:50-sjekkpunkt 36:57)

Bygger på F5s RE1–RE7, nå med per-sekund-gates:

kmGateTall
1Åpning etter watt, ikke pace3:40–3:44 **OG** 465–480 W. Aldri <3:38 / >495 W km 1.
2–5Lås3:41–3:43, watt-bånd 465–480. Steglengde-referanse noteres km 3 (~1,47–1,48).
5→**Steg-gate (§3)**Fall >3 % fra km-3-referansen ved intakt kadens = brudd → lås ny realistisk pace, ikke jag.
6–9Frislipp gradvisAlt fra km 8; 5k-pass 18:25–18:30 (5k-split-PR 18:38 ryker planlagt).
**Vind-gate (§4)**>5 m/s: styr på watt-bånd, la pace flyte.
eveBelte-sjekkPuls-belte testes i kulde/regn (Nidaros-25-lærdommen).

7. Ærlighetsnotat

n=21, hvorav 4 uten gyldig HR (2 blacklist, 1 sensorfeil, 1 uten HR-belte) og watts kun 2022+ (13 løp) — vind-funnet (§4) står på n=1 ekte vindløp (Nidaros-25) mot 4 rolige; mekanismen (watt-CV < pace-CV) bærer det, ikke antallet, og Oslo-10k viser at høy pace-CV alene (kupert løype) ikke er feilmarkør. Steg-brudd-funnet (§3) er sterkest — det virker i begge sprekkene og har mekanisme (kadens intakt, HR daler), men den ene med gyldig HR er n=1. Berlin-reserven (§2) er ett løp lest grundig; S2-postens additivitet med S1/S3 er fortsatt ubevist (F5-forbeholdet). Steglengde-NIVÅENE er ikke sammenlignbare på tvers av æraer (kadens 170→184 spm 2019→2025 = klokke + stil) — alt i §1/§3 er relativt innen løp. Laps/streams er GPS-rekonstruert (±2–3 s km-støy). Target-watt-båndet (465–480) er Stryd-spesifikt for Carl, ikke normativt. Og hovedforbeholdet fra F5/F6 gjelder: ingen av disse er løpt på Kbh-mål 3:47 eller Amsterdam 4:01 — §2-planen ekstrapolerer Berlin-formen, med Energimila som designert billig test.


Parallelløkt-notat (SPOR D): kun denne fila skrevet i D1-steget; TODO/CHANGELOG/SYSTEM_OVERVIEW/quality.json urørt; ingen sync/bygg/git; ingen skriv til data/. Egne D2/D3-leveranser i egne filer.

Konsolidering: `Running_Report_Kortdistanse-Telemetri_v1.md` (O8/D1) — per-sekund på 21 kortløp: (1) Berlin-reserven ble kjøpt i 95 % I3 (HR-tak 168 vs LT2 169) og sluppet 3 km for sent → Kbh-frislipp fra km 15 m/ I4-billett, ikke km 18; (2) 10k-bruddet km 6–7 er steglengde-kollaps ved intakt kadens mens HR daler (Nidaros-24 steg −3,9 %/HR −3,5) — ikke kardialt → steg-gate fra km 5; (3) vind = pace svinger mer enn watt (Nidaros-25 13 % vs 8,4 %) → styr på 465–480 W-bånd i >5 m/s. Fade binær på 10k / kadens-drevet spurt på HM verifisert per-sekund.

Race-portefølje 2027–2030Hva: Vurdering av Praha HM (3.4.27) + Genève M (9.5.27) og porteføljearkitektur mot 2:45.
Konklusjon: Praha = 2027-sertifikatet (1:19:08); Genève = realiseringsløp T−5u etter, sikt 2:48–2:52 (aldri 2:45 der).
Fable2026-07-07
#2027#praha#genève#planlegging

Race-porteføljen 2027–2030

FABLE-22 · skrevet 2026-07-07 · Fastpunkter (Carl 07.07): Generali Prague Half Marathon lør 3.4.2027 · Generali Genève Marathon søn 9.5.2027 — porteføljen bygges rundt disse; de evalueres, men overprøves ikke. Kilder: F17 Syvårs-syntesen v2 (§6 prinsippene + formene A/B/C) · F18 Livstids-PR (aldersvindu, AG-bane, scenariene) · Tverrmaraton-syntesen (F8 vær-vinduet, P/R-oppskriften, §4 Riegel) · F15 Infeksjonsvinduene (eksponeringslogikk, IV1–IV5) · `races.json`-fasiter via kilderapportene · websøk for løpsfakta (løypeprofiler, klimanormaler, datoer — URL-liste i §7). Miljø-atlaset (F24) er ikke kjørt — vær-resonnementet hviler på tverrmaraton F8 + klimanormaler. Alt read-only; kun denne fila er skrevet (parallellprotokoll).

Ramme: Dette er porteføljearkitektur, ikke plan. Alt etter våren 2027 er betinget på Amsterdam-fasiten (18.10.2026) + lab-retesten aug/sep — F18s to neste datapunkter. Blokkplan v3 og høsten 2026 røres ikke her. Riegel-tall bruker eksakt 1,06-formel (HM-sekunder × 2,0849).


0. Kortversjon

Praha er en nesten perfekt match — Genève er det ikke, og det er greit hvis rollene settes riktig. Praha HM treffer PB-profilen på alle tre akser (flat/rask verdensklasse-løype, 6–12° ved 10:00-start tidlig april, dypt felt med fartholdere) og er 2027-utgaven av Berlin-HM-sertifikatet: vår = testbane (F17 prinsipp 4), strek = 1:19:08 (2:45-motoren, F18). Genève feiler på to av tre akser — «rolling» løype med ~300–385 m stigning og mai-varme som truer 7–12°-vinduet — og mangler den tredje (fartholdere stopper på 3:00; sub-2:50-feltet er tynt → ingen tog, R2-gapet). Genève er derfor feil arena for maks-realisering, men riktig plassert som realiserings-løp: T−5 uker etter Praha er near-anker-logikken fra 2026 (Kbh HM T−4 → Amsterdam), og mål-nivået settes av Praha-fasiten — sikt 2:48–2:52-klassen, aldri 2:45 her.

Vinter-konflikten løses med hybrid, ikke med vinter-M-blokk. Genève som tid-A ville krevd en dedikert M-blokk gjennom motor-vinteren — i strid med F17 prinsipp 1 (vinteren er motor-fabrikken) og upraktisk i Trondheim-vinter (30k+-trapp på is/mørke; mølle-30k-ekvivalens ukartlagt, F24 ikke kjørt). Malen er i stedet 2024-presedensen (Val-22/Val-24: PB på cappede blokker på høy base): motor-vinter med 3–5×30k+ innbakt seint → Praha-bygg → 5-ukers M-bro til Genève. Året er enheten (F17 prinsipp 3).

Høsten 2027: Valencia 5.12 er førstevalget (vær-odds, tog, flat, 2 PB-presedens, T+30 uker fra Genève), Frankfurt ~31.10 andrevalg, Amsterdam ~17.10 tredje; Berlin 26.9 frarådes som A-mål (T+20 + sommerbygg i varme). Mål-sone 2:46–2:48 per F18 scenario A. 2028–2030: årsmal 1 vår-HM-sertifikat + 1 høst-A-maraton + lokale 10k (som per F15 F3 ikke koster infeksjonseksponering) — 2:45-forsøkene ligger 2028–2029 (44–45 år), 2030 er forsvar. Færre-men-riktigere A-løp er ikke bare F15-logikk, det er aldringslogikk: restitusjon/immun blir den bindende beskrankningen før farten (F17 §5).


1. Fastpunktene evaluert

1.1 Praha halvmaraton, lørdag 3.4.2027 — GO som A-innsats (motor-sertifikatet)

AkseFaktaMot PB-profilen
LøypeFlat, sløyfe fra Jan Palach-plassen langs Vltava; verdens raskeste HM i 2012; løyperekord 58:16 (2026); World Athletics Elite Label; brostein/stigning minimert✓ flat/rask
TemperaturStart 10:00 (2026-utgaven). Praha tidlig april: morgen 2–6°, dagshøy ~11–13° → racevindu typisk **6–12°**✓ i PB-vinduet 7–12°
Felt/togRunCzech-felt i SuperHalfs-serien, fartholdergrupper standard; sub-1:20-selskap rikelig✓ tog finnes

Rolle: vår-HM-sertifikat per F17 prinsipp 4 — nøyaktig Berlin-HM-2026-modellen, med 24 ukers runway fra Amsterdam (18.10 → 3.4). Streker: sub-1:20 = 2:46:47 Riegel-latent; 1:19:08 = 2:45:00-motoren (F17 §5/F18). Sertifikatet kalibrerer både Genève-målet (§1.3) og hele 2027-høsten. Alder på dagen: 42.

1.2 Genève maraton, søndag 9.5.2027 — matcher ikke PB-profilen; løpes som realisering, ikke som tid-A

AkseFaktaMot PB-profilen
LøypeÉn sløyfe: start Route de Frank-Thomas (Cologny) → landsbygd → mål Pont du Mont-Blanc. Arrangøren selv: «rolling layout»; ~**300–385 m** stigning (Marathon Index 385 m; offisiell GPX finnes for eksakt tall)✗ ikke flat — Carls PB-baner (Valencia/Frankfurt/Berlin) er vesentlig flatere
TemperaturStart 09:00. Genève mai-normal: maks 19,7° / min 9,1°; mai er årets våteste måned; typisk race-dag ~16° → løpet beveger seg **12→17°** gjennom formiddagen; varme år bryter >16°-regelen (R7)✗ PB-vinduet 7–12° holder sjelden hele veien
Felt/togFartholdere kun 3:00–5:00; vinnertid 2:11 (2025), men sub-2:50-feltet er tynt → **ingen gruppe rundt 2:48–2:52**✗ R2-gapet: solo-disponering (Berlin-24-modus)

Det Genève HAR: riktig plassering. T−5 uker etter Praha er near-anker-logikken fra 2026 (Kbh HM T−4 uker foran Amsterdam) — modellen får et ferskt HM-anker, og broen er lang nok til 2 skarpe 30k+/MP-økter + taper, kort nok til at Praha-formen bæres inn. Og som «realiserings-rep» er den nettopp det F18 sier maratonen trenger: flere forsøk på å lukke Riegel-gapet (motoren ligger 1,5–3,5 min foran maratonen).

Løypekost-anslag (C): rolling + ~300 m D+ + typisk 14–16° priser anslagsvis +1–2,5 min mot Valencia-klassen for Carls nivå. Ikke et modelltall — settes ordentlig av race_outlook med Praha-ankeret i april 2027; men det er nok til dommen: 2:45-forsøk hører hjemme på flate, kalde høstbaner, aldri her.

1.3 Genève-målet settes av Praha-fasiten (skisse, modellen regner endelig)

Praha-utfallRiegel-latent MGenève-sikte (løype+vær priset, P4-port bestått)
1:21-klassen (flatt vs Berlin HM-26)2:49:3x**2:52–2:54** — realiserings-rep, ingen PB-jakt
1:20:0x–1:20:5x2:47–2:48**2:49–2:51** — sub-2:50 mulig hvis ≤14° og P4 grønn
Sub-1:20 (sertifikatet innfridd)≤2:46:4x**2:48–2:50** — kontrollert; spar 2:45-ammunisjonen til høsten

Dobbel-logikk mot Amsterdam-fasiten: hvis Amsterdam ≥ 2:50 er Genève vårens sub-2:50-sjekkpunkt (F18 scenario A: «sub-2:50 høsten 2026/våren 2027»); hvis Amsterdam < 2:50 er Genève trykkfri realisering — og kan ved Form C nedgraderes til B-innsats (effort-tag B, MOD-2) uten at fastpunktet røres. postM-regelen gjelder etterpå uansett: ingen 10k-A-innsats 15–45 d etter Genève (midt-mai→slutt juni 2027 fredes).

1.4 Vinter-konflikten: vår-M vs motor-vinteren — hybridløsningen

F17 prinsipp 1 (vinteren er motor-fabrikken, ikke-forhandlbar) og prinsipp 4 (vår = testbane) kolliderer med Genève som A-mål — en dedikert vinter-M-blokk ville ofret Bakken-basen/mølle-kvaliteten som produserte begge de store terskel-løftene, og krevd 30k+-trapp i Trondheim-vinter (is/mørke; mølle-langtur-ekvivalens er ukartlagt — F24 ikke kjørt). Løsningen er å la være å velge:

  • Nov–feb: motor-vinter som 2025/26 (Bakken-base → dobbel-terskel/mølle-kvalitet), volumplattform 85–90 km/u, og 3–5×30k+ bakt inn som rolige L1/L2-turer i februar-mars (helg/dagslys, ikke MP-arbeid ennå).
  • Jan–mar: Praha-bygg = Berlin-HM-blokka 2026 om igjen (den leverte 1:21:19 og lab-kvitteringen).
  • 6.4–2.5: M-broen (4 uker + race-uke): 2×30k+ med MP-arbeid (T−4 og T−3, P4-porten på disse to), Frankfurt-taper (kort/frisk, TSB +30…+40). Presedens: Val-22 og Val-24 ga PB på cappede blokker (8,9–11 uker) på høy base — «året er enheten».
  • P-kravene regnes samlet vinter+bro: ≥85 km/u i bygget ✓ (HM-blokka ligger der alt), P3 nedre kant (5×30k+ totalt — bevisst minimum, samme trade som Amsterdam-26), P5 blir IKKE nådd (MP-km langt under 80 → nok et argument for at Genève ikke er tid-A; broens MP-økter er generalprøver, ikke plattform).

F15-regnskapet for dobbelen: to A-eksponeringer på 36 dager (Praha D+10-vindu ut 13.4; Genève-reisen ved maks systemisk last). IV1/IV2 ut D+10 etter begge, hjemreise-logistikken planlegges som del av race-uka, symptomscreening — ikke RHR/CRP (IV3). Inn mot 2027 bør re-typing-køen (F15 §3/C1) være avgjort, så illness-gaten teller riktig.


2. Kalenderskisser 2027 — per form (A/B/C fra F17 §6, F18-vektet)

Fastpunktene låser våren i alle tre former; formene skiller seg i høsten og i hva Genève er. Beslutningspunkt: desember 2026, med Amsterdam-fasit + lab-retest i hånda.

SlotForm A′ — «2026-malen + dobbel vår» (F18-favoritt)Form B′ — racecraft-maksForm C′ — motor-året
Nov–febMotor-vinter (ikke-forhandlbar i alle former)Motor-vinterMotor-vinter, full vekt
3.4 Praha**A: sertifikat, sub-1:20/1:19:08-strek**A: sertifikat**A: årets hovedmål #1**
6.4–2.5M-bro (2×30k+ MP, P4-port)M-broIngen bro — HM-restitusjon + 10k-bygg
9.5 Genève**Realisering per §1.3** (2:48–2:52-klassen)A-innsats, aggressivt sikte nedre sone**B-innsats** (effort-B): kontrollert MP-gjennomkjøring ~2:55+
Mai–junpostM-fredning (ingen 10k-A 15–45 d) → basepostM-fredning → base10k-sesong fra sent juni (Energimila-klassen, lokal = null eksponeringskost)
Jul–augSommerbase (Italia-varme = naturlig adaptasjon, O1-rammene)Sommerbase10k/HM-spissing; evt. Kbh HM sep som 1:19-jakt
Høst**A-maraton: Valencia 5.12 (1. valg) / Frankfurt ~31.10 (2.) — mål 2:46–2:48**2. A-maraton (Berlin 26.9 el. Frankfurt) + evt. Valencia = 3 M på åretIngen høst-M — HM/10k-PB-jakt, M hviler til 2028
Eksponeringer (A-race-klassen, F15)**3** (Praha, Genève, høst-M) — samme som 20264–5 — flest vinduer, F15-prisen2–3, laveste risiko
Velges hvisAmsterdam 2:48–2:52 + lab kvitterer motoren (F18 default)Amsterdam viser at utførelses-varians (ikke kapasitet) er gapetAmsterdam avslører motor-tak, eller høsten 2026 koster ny infeksjonsrunde

Merk for Form A′: porteføljen holder eksponeringslinja fra 2026 (3 A-race-klasse-vinduer) bare hvis det IKKE legges en ekstra sensommer-HM inn — Praha bærer HM-sertifikatet for hele året. En sep-HM (Kbh-slotten) er i A′ en luksus som koster et fjerde vindu; ta den bare hvis høst-M ligger i desember (Valencia) så avstanden er ≥10 uker.

3. Høst-2027-kandidatene (Valencia/Berlin/Frankfurt-klassen) — rangert

#LøpDato 2027Avstand fra GenèveForMot
1**Valencia**søn 5.12 (typisk slot, ikke offisielt bekreftet)T+30 uCarls beste vær-odds (racesnitt 10,7°/11,9° i -22/-24), flat, tog/TOSK-presedens, 2 PB der, lengst runway (full sommerbase + hel høstblokk)Desember = lang sesong å holde; reise lengst
2**Frankfurt**~31.10 (siste okt-søndag; okt er fast slot)T+25 uPB-banen 2025 (7,3° racesnitt), flat, kaldt-garantien best i oktober-klassen2025-blokka der kjøpte 7 sykedager på 98 km/u — dose-, ikke arena-feil, men respekter taket 85–95
3Amsterdam~17.10 (typisk slot)T+23 uKjent logistikk/bane fra 2026; fasit-sammenligning år-over-årIngen fordel utover det kjente; vær-odds som Frankfurt minus
4Berlinsøn 26.9 (bekreftet)T+20 uFeltet/toget dypest av alleTidligst: hele spissbygget i juli-august-varme, kortest absorbsjonsrom etter Genève-sesongen; 2024-magekniprisikoen er øvbar (R4), men slotten er strukturelt trangest

Vær-vinduet (tverrmaraton F8) er rangeringens ryggrad: alle maraton-PB ligger på 7–12° racesnitt, og sen oktober–desember er de eneste slotsene som nesten garanterer det. Mål-sone høst-27: 2:46–2:48 (F18 scenario A: «2:47–2:48 sent 2027»), forutsatt Genève-våren leverte sub-2:50 eller nær.

4. 2028–2030 — arkitekturen mot 2:45

F18-rammen: 2:45 krever AG ~79,4 % (43 år) / 80,0 % (44) — Carl er på 74,7 % og stiger ~2 poeng/år → forsøksvinduet er 2028–2029 (44–45 år), peak-window-slutt ~46, sub-2:50 holdbart til ~46–47 hvis kontinuiteten holder. F17 §5: aldringen biter først i restitusjon/immun, ikke i farten. Det gir en årsmal, ikke en løpsliste:

  • Årsmalen (alle år): vinter-motor (ikke-forhandlbar) → vår-HM-sertifikat (SuperHalfs-klassen: Praha har nå presedens; Berlin HM/Kbh HM er ekvivalente slots) → sommerbase → én høst-A-maraton på flat/kald bane (Valencia/Frankfurt-klassen) → desember-hvile. Lokale 10k (Energimila-klassen) strøs fritt — F15 F3: de koster ingen infeksjonseksponering. Lab-retest hver aug/sep som fast kalibreringspunkt.
  • 2028 (43–44): vår-HM med 1:19-strek → høst = 2:45-forsøk #1 (Valencia-slotten har best odds). Betinget: Genève/høst-27 leverte 2:46–2:48 og AG-banen fortsatt stiger (scenario A intakt).
  • 2029 (44–45): gjenta; 2:45-forsøk #2 hvis #1 glapp med margin < ~90 sek. Glapp det stort, les det som scenario B (platå ~76–77 % AG) og re-sikt til 2:47–2:48 — fortsatt sterke masters-tider.
  • 2030 (45–46): forsvarsår — sub-2:50-vedlikehold (kravet stiger mot ~78 % AG), vekt på HM/10k der AG-avkastningen per risiko er best, én M hvis kroppen kvitterer. Herfra er «færre-men-riktigere» ikke lenger et valg, det er beskrankningen.
  • Vår-M gjentas ikke som mønster. Genève-27 er et engangs-fastpunkt med god begrunnelse (near-anker + realiserings-rep). Å gjøre dobbel vår-M til årsmal ville spist to motor-vintre av tre fram mot 2:45-vinduet — stikk i strid med det både F17 (mekanismene) og F18 (beskrankningen er maraton-realisering på modent motor-fundament) peker på.

5. Konfidens per dom

DomKonfidensHvorfor
Praha matcher PB-profilen (flat/rask, 6–12°, tog)**A**Tre uavhengige fakta-akser, alle verifisert (løyperekord/Elite Label, klimanormal + 10:00-start, RunCzech-fartholdere)
Genève matcher ikke PB-profilen (profil + varme + tog-mangel)**B+**D+-tallet varierer per kilde (300–385 m; GPX bør hentes før pacing), men «rolling» er arrangørens eget ord, pacer-lista (3:00 gulv) og mai-normalene er entydige
Genève som realisering på T−5-near-anker er riktig rolle**B**Near-anker-logikken har 2026-presedens (Kbh T−4), men n=1 og Amsterdam-fasiten foreligger ikke ennå
Hybrid-vinteren (motor + bro) over dedikert vinter-M-blokk**B**Val-22/Val-24-presedensen er reell (2 PB på cappede blokker på høy base), men begge var høst-cappet, ikke vår; mølle-vinter→vår-M er uprøvd (og P5 nås ikke — priset inn i §1.3-siktene)
Valencia > Frankfurt > Amsterdam > Berlin for høst-27**B**Vær-vinduet (F8, A-funn) + runway-logikk; datoene for Valencia/Frankfurt/Amsterdam er typiske slots, ikke offisielle
2:45-vinduet 2028–29, årsmal 1+1+lokale-10k**B/C**Arver F18s ekstrapoleringsforbehold i sin helhet (aldringskurven er lånt, n=0 på Carls egen aldersbrems)

6. Ærlighetsnotat

  • Løpsfakta er ferskvare. Start-tider (Praha 10:00, Genève 09:00) er 2026-utgavenes og «subject to change»; Genève-pacerlista er 2026; Valencia/Frankfurt/Amsterdam-2027-datoene er mønster-avledet, ikke offisielt annonsert (kun Berlin 26.9.2027 og Praha 3.4.2027 er bekreftet i kildene). Genèves stigningstall spriker (Marathon Index 385 m; «flat»-markedsføring hos arrangøren står i spenn med deres eget «rolling») — hent offisiell GPX før pacing-arbeid i 2027.
  • Klimanormaler ≠ race-dag. Praha tidlig april kan være 2° og surt; Genève i mai kan være 11° og perfekt. Dommene er odds-basert (F8-metoden), ikke deterministiske. Vind i Genève (bise langs sjøen) er ukjent terreng — ikke vurdert, F24 ville dekket dette.
  • Løypekost-anslaget for Genève (+1–2,5 min) er skjønn, ikke modell — Carl har aldri løpt M på rolling profil i moden æra (Trondheim-21 er ubrukelig som referanse). Regnes ordentlig av modellen med Praha-anker i april 2027.
  • §1.3-siktene er skisser. race_outlook med ferskt near-anker, faktisk vær og P4-status eier de endelige tallene; tabellen er til porteføljevalg, ikke til armbånd.
  • Hele §4 arver F18s forbehold: framskrivinger på lånt aldringskurve, og alt hviler på at Amsterdam + lab aug/sep bekrefter scenario A. Dette dokumentet skal re-leses i desember 2026 med de to fasitene i hånda — det er beslutningspunktet, ikke i dag.
  • Ingen datafiler, TODO, CHANGELOG eller bygg er rørt; kun denne fila er skrevet. Konsolidering (hub-kort, TODO-kryss) gjøres i egen økt per parallellprotokollen.

7. Nettkilder (løpsfakta)

  • Praha: [RunCzech — løpet + løypebeskrivelse](https://www.runczech.com/en/events/generali-prague-half-marathon-2026/races/generali-prague-half-marathon) · [RunCzech — course description](https://www.runczech.com/en/events/generali-prague-half-marathon-2026/course-description) · [SuperHalfs Prague](https://www.superhalfs.com/en/events/prague/) · [2027-dato (RunResell)](https://runresell.com/en/blog/prague-half-marathon-2027-registration-entry-fee-and-everything-we-know-so-far/) · [Finishers — Prague 2027](https://www.finishers.com/en/event/prague-half-marathon) · [Wikipedia — Prague Half Marathon](https://en.wikipedia.org/wiki/Prague_Half_Marathon)
  • Praha-klima: [Weather Spark — Prague April](https://weatherspark.com/m/77807/4/Average-Weather-in-April-in-Prague-Czechia) · [PragueGo — spring](https://www.praguego.com/weather/spring)
  • Genève: [Generali Genève Marathon — Marathon-siden (start Cologny, 09:00, «rolling», fartholdere 3:00–5:00, GPX)](https://www.generaligenevemarathon.com/en/marathon) · [Marathon Index — course & elevation (385 m, race-dag ~16°)](https://marathon-index.com/races/geneva-marathon/course/) · [World Athletics — resultater 2025 (vinner 2:11:37)](https://worldathletics.org/competition/calendar-results/results/7220694)
  • Genève-klima: [Weather Atlas — Geneva May (19,7°/9,1°, våteste måned)](https://www.weather-atlas.com/en/switzerland/geneva-weather-may) · [Climates to Travel — Geneva](https://www.climatestotravel.com/climate/switzerland/geneva)
  • Høst-27-datoer: [BMW Berlin-Marathon — registrering (26.9.2027)](https://www.bmw-berlin-marathon.com/en/registration/registration-information) · [InfoMaratonValencia — 2027 (forventet 5.12)](https://infomaratonvalencia.com/en/valencia-marathon-2027-date-weather-and-what-to-expect/) · [Mainova Frankfurt Marathon (okt-slot; 25.10.2026)](https://www.frankfurt-marathon.com/en/)

Én-linje for konsolideringsøkta: `Running_Report_RacePortefolje_v1.md` — Praha 3.4.27 GO som A-sertifikat (flat/rask + 6–12° + tog = full PB-profil-match; strek 1:19:08 = 2:45-motoren); Genève 9.5.27 matcher ikke PB-profilen (rolling ~300–385 m D+, mai 12–17°, ingen fartholdere under 3:00) men er riktig plassert som realiserings-løp på T−5-near-anker — mål settes av Praha-fasiten (2:48–2:52-klassen, aldri 2:45); vinter-konflikten løses med hybrid (motor-vinter + 3–5×30k+ innbakt + 5-ukers M-bro; Val-22/24-presedensen), ikke dedikert vinter-M-blokk; høst-27: Valencia 5.12 > Frankfurt > Amsterdam > Berlin, mål 2:46–2:48; 2028–30: årsmal 1 vår-HM + 1 høst-A-M + lokale 10k (F15: null eksponeringskost), 2:45-forsøk 2028–29 (44–45), 2030 forsvar; alt betinget Amsterdam + lab aug/sep — beslutningspunkt desember 2026. Kun egen fil skrevet, parallellprotokoll holdt.

Energimila 2026 — løpsanalyseHva: Løpsanalyse av Energimila 12.8.2026 — 36:43, pers med 40 s: pacing, puls, dynamikk og prognose mot utfall.
Konklusjon: Nær optimal pacing i tog med negativ splitt; modellen var ~2,5 % for optimistisk prospektivt, og pulsdriften er det med mest å gå på.
Fable2026-08-12
#10k#energimila#pers#pacing

EnergiMila 36:43

Dato: 12. august 2026 · Distanse: 10 km (GPS 10.01 km) · Score: *7.9/10 — Solid — på linje med form (race_index, auto_pacing) · Løype:* flat, 2×5 km + oppløp på bane

> Manuell analyse skrevet av Claude (Fable) kvelden etter løpet, etter mal fra de arkiverte `build_race_analyses.py`-rapportene (v1-pipeline, pensjonert til `_arkiv/scripts_v1/` — derfor kommer det ingen ny auto-generert `_analyse.md`). Offisiell skår 7.9 er hentet fra `race_index.json` (v2-pipeline, kjørt 12.08 22:53). Tall merket (estimat) er regnet manuelt fra lap-data i `activities.json`.


1. Sammendrag

Løpt på 36:43 (3:40/km snittpace, offisiell tid fra aktivitetstittel; Garmin-varighet 36:45). PB med 40 sekunder (−1,8 % vs 37:23 fra EnergiMila 2025). Negativ splitt, kontrollert HR-forløp og rakettavslutning på banen (siste lap 3:28/km).

Hovedfunn: pacing-strategi nær optimal — lås på 3:39–3:43 gjennom felt-arbeid i tog bak Bjarte Holmgard, negativ splitt −2,3 s/km; konsistens CV ~2,0 % (estimat); HR-drift ~+13 bpm Q1→Q4 — bedre enn i fjor (+15), men fortsatt komponenten med mest å gå på.

Du skrev selv: «Pers med over 40s!! Fantastisk løpekveld med stooort TOSK oppmøte. All ære og takk til Bjarte Holmgard som dro et stort tog i jevn fart hele veien» — og det er også den tekniske historien om løpet: drafting og jevnt felt-tempo konverterte formen til tid uten dyre tempovekslinger.

2. Resultat og kontekst

2.1 Resultattabell

MetrikkVerdi
Distanse (offisiell / GPS)10,0 km / 10,01 km
Tid**36:43**
Snittpace**3:40/km**
HR snitt / maks172 / 179 bpm
Effekt snitt475 W
Kadens snitt182 spm
Steglengde snitt150 cm
GCT snitt213 ms
Vertical ratio6,33 %
Aerob TE4,6
Sko**Nike Alphafly 3** (debut — 6 km forsøkstur dagen før)

2.2 Prediksjon vs utfall

  • Hub-ens prospektive prediksjon (outlook_history — fasiten for hva modellen faktisk sa): stabilt 35:38–36:00 hele juli/august; T−14 (29. juli): 35:49, race-eve: 35:47, race-morgen: 35:38. Du løp 36:43 — modellen var 54–65 s (~2,5 %) for optimistisk. Dette er det ærlige kalibreringstallet.
  • LOO T−14 (race_predict_model, etter kveldens refit): −0,11 %. Dette er en retrospektiv leave-one-out-beregning på den re-kalibrerte modellen — ikke det hub-en viste før løpet. De to tallene skal ikke forveksles; systemfunn rapportert til Carl: LOO-konvensjonen («vs modell = LOO T-14», regel F i race-prosa-instruksen) gir systematisk penere tall enn prospektiv fasit.
  • race_outlook-ankeret på løpsdagen (3:42/km ≈ 36:57) er generert i 22:53-synken etter løpet og inkluderer det — heller ikke prospektivt.
  • Modellens 1. august-prognose (35:48, P(sub-37) 83 %) var mer optimistisk; dagens anker var nedjustert. Utfallet landet midt mellom — sub-37 levert med god margin.
  • Garmin-klokka lå før løpet rundt 38:0x — slått med ~1:20, konsistent med mønsteret fra Berlin HM der klokka underpredikerer racedagsform.

2.3 PB-kontekst

  • Ny PB! −1,8 % vs forrige PB (3:44/km → 3:40/km)

PB-progresjon i kategorien:

DatoTidPaceLøp
2020-05-2843:424:22/kmTordenskioldløpet solo
2020-10-1642:074:13/kmHøstens 10k
2022-05-2139:483:59/kmNidaros løpefest
2023-09-1639:263:57/kmOslo Maraton 10k
2024-03-2238:383:52/km10k på bane
2025-06-0738:253:50/kmSommernattsløpet
2025-08-1337:233:44/kmEnergiMila 2025
**2026-08-12****36:43****3:40/km****EnergiMila 2026** 🔥

Ett år, samme løype, samme dag i kalenderen: −40 s. Årsraten 2024→2026 ligger stabilt på ~50–60 s/år — bemerkelsesverdig lineært for en 41-åring i sitt 7. strukturerte treningsår.

3. Pre-race kontekst

3.1 Treningsbelastning på løpsdagen

  • ATL 98 · CTL 100 · TSB (pre-race, morgenbrief): +2 — balansert, nøyaktig der en B-race skal ligge
  • 12 dager tidligere: TSB −28 etter 143 km-uke. Mini-taperen (primer mandag, easy+strides tirsdag) traff presist.
  • Volum siste 4 uker: 409 km · kvalitets-km siste 12 uker: 211

3.2 Wellness på løpsdagen

MetrikkVerdiKontekst
HRV**83 ms**kraftig over 7d-snitt (~72)
RHR**36 bpm**under baseline 37,7
Søvn7,1 t / score 86god
Training Readiness**100**maks

Beste samlede morgenstatus i hele treningsblokken — readiness 100 på race-dag er sjeldent presist truffet. Alkohol-flagget fra helgen (1 dag) var nullet ut av HRV-responsen.

3.3 Form-vurdering

  • Stressperioden 26. juli var ferdig avklart; ingen aktiv dysregulering inn mot løpet.
  • Eneste somatiske restanse: trepanert stortånegl (28. juli) — håndtert med skobytte, null symptomer underveis.

4. Race-day forhold

4.1 Vær

  • Temperatur: 12,9 °C (føltes som 10,8)
  • Vind: ~3,2 m/s
  • Luftfuktighet: 75 %, overskyet, oppholdsvær

Nær ditt dokumenterte klimaoptimum (~10 °C). Ingen værjustering av resultatet — dette var reell form.

4.2 Gjennomføring av dagen

Middag 16:15 (liten porsjon pasta) → toalett ×2 → Stamox + Nomio ~17:00 → gel 30 min før start → 3 km oppvarming inkl. 4×20 s stigningsløp, ferdig 10 min før start. Ingenting å endre — dette er nå validert kveldsrace-protokoll og bør arkiveres som standard for kveldsstarter.

5. Pacing

5.1 Halvdels-splitt og variasjon

  • 1. halvdel (5 km): ~18:26 (3:41/km) — midt i planens 18:25–18:30-vindu
  • 2. halvdel: ~18:17 (3:39/km)
  • Delta: −2,3 s/km — negativ splitt
  • CV (estimat): ~2,0 % — jevn
  • Raskeste lap: 10 (3:28/km) · Tregeste: 9 (3:46/km)

5.2 Per-lap (manuelle runder, ~1 km)

LapDist (m)TidPaceHR
110673:563:41/km156
29493:283:39/km170
310083:423:40/km173
410173:473:43/km174
59673:333:40/km174
610013:373:36/km175
79463:293:40/km174
810103:433:40/km175
910133:493:46/km175
1010363:363:28/km176

5.3 Tolkning

Planen sa: åpne 3:40–3:44 (aldri under 3:38), lås 3:41–3:43 til km 7, slipp fra km 8. Fasiten er nesten en kalkering — åpning 3:41, lås-fasen 3:36–3:43, 5k-passering i vinduet, eksplosiv avslutning. Toget bak Bjarte gjorde låsingen «gratis»: du slapp å eie tempoet selv og betalte mindre for samme fart (drafting er verdt 1–2 s/km ved 3:40-fart selv i svak vind).

Din egen kritikk av km 9 (3:46) fortjener nyansering: km 9 var også i fjor løpets tregeste målte segment med den bratteste stigningen (+4 m). Grade-justert løp du trolig ~3:41–3:42 der — reelt tap mot nabolapene er 2–3 s, ikke 6. Kombinert med en spurt som kunne startet ved 600 m i stedet for 400 m (~2–3 s til), var kveldens teoretiske tak ~36:35–36:38. Du la igjen svært lite på veien.

6. HR-respons

6.1 Drift Q1 → Q4 (estimat fra lap-HR)

  • Q1 ~163 bpm → Q4 ~176 bpm: +13 bpm — merkbar, men forbedret fra +15 i fjor, på 6,7 s/km høyere fart.
  • Snitt-HR 172 (92 % av HRmax 186) med maks 179 først på oppløpet = riktig disponert 10k: hele I4-budsjettet brukt, I5 spart til banen.

6.2 Sone-fordeling

Lap 1 i I2/I3 (innløpseffekt — ditt kjente mønster, nå brukt taktisk riktig i stedet for å bli kompensert med panikkfart), deretter 9 lap stabilt i I4 (170–176). Ingen I5-km før spurten.

6.3 Aerob decoupling (estimat)

Pace/HR-ratio 1. vs 2. halvdel: −4,3 % — under 5 %-grensen, samme aerobe signatur som Berlin HM (−4,2 %). Motoren tåler mer enn 37 minutter; begrensningen i dag var ren fart, ikke utholdenhet.

7. Løpsdynamikk

MetrikkVerdi2025-referanseEndring
Kadens182 spm182 spm
Steglengde150 cm146 cm**+4 cm**
GCT213 ms214 ms
Vertical ratio6,33 %6,35 %

Hele fartsøkningen på ett år er tatt ut i steglengde ved identisk kadens og bakkekontakt — nevromuskulær utvikling, nøyaktig det profilen din har pekt på som begrensende faktor. Alphafly 3-debuten var friksjonsfri: ingen gnag, ingen negle-trøbbel, og dynamikktallene står seg. Skoen er herved kvalifisert som race-kandidat for København HM.

8. Eksekusjonsscore

Offisiell pipeline-skår: 7.9/10 — «Solid — på linje med form» (race_index.json, `score_source: auto_pacing`, ikke frosset). Nøyaktig samme skår som EnergiMila 2025. Min komponentvise rekonstruksjon under landet på ~8.1 — differansen ligger trolig i strengere HR-drift-vekting i auto-skåringen.

Komponentestimat (uoffisielt)

KomponentEstimatNotat
Pacing-strategi2,3/2,5negativ splitt −2,3 s/km (aggressivt neg. −5 til −10 er 10k-idealet i malen)
Pacing-konsistens1,2/1,5CV ~2,0 %
HR-kontroll0,9/1,5drift +13 Q1→Q4
Sterk avslutning1,0/1,0siste lap 3:28/km
Tid-utfall2,5/2,5PB −1,8 %
PB-byks-bonus0,2/0,7moderat byks
Vanskelighetsbonus0,0/1,0optimale forhold
**Total****~8,1/10***Solid, på grensen til Sterk*

9. Sammenligning med fjoråret — samme løype, samme uke

Metrikk20252026Endring
Tid37:2336:43**−40 s**
Snittpace3:44/km3:40/km−4,0 s/km
HR snitt170172+2
Splitt−1,5 s/km−2,3 s/kmmer negativ
HR-drift Q1→Q4+15,4~+13bedre
Temperatur19,0 °C12,9 °C−6 °C (fordel 2026, verdt ~10–15 s)
TSB (pre)~−10+2bedre timet taper
SkoAlphafly #5Alphafly 3debut

Justert for temperatur og taper er den underliggende formfremgangen på ~25–30 s/10k — resten hentet du på bedre rigging av dagen. Det er selve poenget med å ha et system.

10. Hva dette betyr for høsten

Med 36:43 som nytt anker (personlig Riegel-eksponent 1,064, kalibrert Orkanger→Frankfurt 2025):

  • København HM (20. sep, 5,5 uker): samme-form-ekvivalent 1:21:17; med treningseffekt + taper: 1:20:15–1:20:45. Sub-1:20 krever at halvmaratonspesifikke økter (2×5 km @ HMP-typen) leverer i september — mulig, men fortsatt knapt favoritt.
  • Amsterdam (18. okt, 9,5 uker): direkte konvertering med fjorårets faktor (4,63): 2:49:55 — sub-2:50 ligger nå nøyaktig på streken, med 9 uker igjen å flytte den på. Modellens 2:44:37 forutsetter at alt klaffer; realistisk målkorridor per i dag: 2:46–2:50.
  • Km 9-lærdommen skaleres: på maraton er «3 sekunder glemt i en kneik» × 42 løpets margin. Grade-disiplin i Amsterdams bruparti blir et konkret arbeidspunkt.

11. Post-race

  • ~75 g karbo + 20 g protein innen 60 min, deretter normal kveldsrutine.
  • Forvent HRV-dipp og forhøyet RHR i morgen (aerob TE 4,6 er «overreaching»-territorium) — rolig eller hvile torsdag, normal easy fredag hvis HRV > 65.
  • Obs neglene ved første langtur i Alphafly 3 — 10 km beviser ikke 30 km.

12. Vurdering og læringspunkter

Hva fungerte

  • Planetterlevelse: åpning, lås og slipp-punkt levert på sekundet
  • Taktisk løsning: tog/drafting konverterte form til tid billigst mulig
  • Kveldsrace-protokollen (måltider, Stamox/Nomio, gel, 3 km oppvarming) — arkiver som standard
  • Skodebut uten kostnad, negle-problemet designet bort
  • Innløpseffekten akseptert i stedet for kompensert — lap 1 på 3:41 med HR 156

Hva kan forbedres

  • HR-drift fortsatt løpets svakeste komponent — mer racespesifikk I4-eksponering (4×2000 @ 10k-fart) demper den
  • Spurtstart ved 600 m, ikke 400 m — du hadde 3:28-fart tilgjengelig og brukte den i ~380 m
  • Grade-bevissthet i km 9-typen segmenter: aksepter 2 s GAP-nøytralt tap, ikke 5

Anbefalinger for neste lignende løp

  • Samme plan, men flytt lås-taket fra 3:43 til 3:41 neste gang formen sier sub-36:30
  • Behold manuell lap på km-skilt — datakvaliteten i kveldens analyse kommer derfra

Skrevet 2026-08-12 av Claude (Fable) på forespørsel fra Carl. Kilder: activities.json (id 19714633024), race_outlook.json (12.08), morgenbrief 12.08, Races/2025-08-13_EnergiMila-3724_analyse.md (mal og fjorårsreferanse). Erstattes ikke av, og erstatter ikke, pipeline-genererte flater.

🫀 Fysiologi, modell & prognose (10)

LT2-motoren (terskelfart 2022–2026)Hva: Dose→respons for terskelfarten, lab-forankret, med dosemål for u29–37.
Konklusjon: 3:49 er nå aerobt billig; terskel flyttes videre på 3:45–3:47-drag (K6-port: I3-dragsnitt ≤3:47 innen 1.9).
Fable2026-07-06
#LT2#terskel#dose#K6-port

LT2-motoren — dose→respons for terskelfarten 2022–2026

FABLE-9 · skrevet 2026-07-06 · kilder: `quality.json` (415 intervalløkter), `lactate_log.json` (21 økter m/ in-session laktat), `zones.json` (`lactate_profile_lab` + `physiology_by_period`), `Sessions/tester/` (to lab-tester), `training_blocks.json` (LÅST, kun lest), `fitness_filter.json`. Alt read-only. Spørsmålet: hva flyttet LT2 fra ~3:55 (2024) til 3:49 (lab 24.02.26), og hvilken terskeldose u29–37 leverer S1s 2–3 s/km til København HM?


0. Kortversjon (TL;DR)

LT2-løftet er ekte og lab-forankret, men to ting skjerpes mot S1-formuleringen: (1) løftet er større enn 6 s/km når man matcher laktat-terskelen mellom de to lab-testene (9 s/km ved 3,3 mmol, ~14 s/km ved 4 mmol), og (2) hovedtyngden av løftet ligger før Berlin-HM-blokka — in-session-laktaten viser at 3:44/km allerede satt LT2 (3,3 mmol) i februar 2025. Berlin-blokka konsoliderte (gjorde 3:49 aerobt billig, <2,7 mmol) mer enn den flyttet 4-mmol-farten. For Kbh er den operative spaken K6-speilet: 8-ukers I3-dragsnitt før løpet ≈ racefart (Berlin: dragsnitt 3:51 → race 3:50). Sein-blokk-dosen u29–37 må derfor dra I3-dragsnittet fra dagens 3:55-median ned mot ≤3:47, med de skarpeste I3/I4-øktene på 3:43–3:45. Konfidens: B for 2024→2026-banen (to labber + 46 in-session-punkter), C for alt før 2024 (laktat mangler, proxy er dose-konfundert).


1. Fasit — LT2-banen forankret på de to hardeste punktene

De to lab-testene er de eneste sanne LT2-målingene i materialet. De brukte ulik terskeldefinisjon, og det må korrigeres før man leser av «løftet»:

LabDatoProtokollLT2-defLT2-pace (rapportert)LT2-HR
Løplabbet Lade (Leirdal)2024-03-015 trinn, 0 %**4 mmol**3:57/km (15,2 km/t)164
Granåsen (Moxnes)2026-02-245-min-steg, 0 %**3,3 mmol**3:49/km (15,7 km/t)169

Matcher man laktat-nivået (interpolert fra begge testenes trinn-punkter):

  • Ved 3,3 mmol: 2024 ≈ 3:58 → 2026 = 3:49. Løft = 9 s/km.
  • Ved 4,0 mmol: 2024 = 3:57 → 2026 ≈ 3:42–3:43. Løft = ~14–15 s/km.

Uansett hvilken terskel man legger til grunn er det reelle LT2-løftet større enn de 6 s/km S1 oppgir (S1s «~3:55→3:49» ligger nær 3,3-mmol-tallet, men undervurderer 2024-baselinen — den var 3:57–3:58 på lab, ikke 3:55). Samtidig flyttet HR ved terskel seg oppover (164→169) og HRmax nedover (lab-konvensjon 185→186, alderslinje), så løftet er ekte fysiologi, ikke en pulsdrift-artefakt.

Treningsproxyen (median I3/I4-pace, 56-dagers vindu — det `training_fitness.lt2_asof` faktisk regner) sporer samme retning, men er trégere og era-konfundert:

KvartalProxy-LT2KvartalProxy-LT2
2022-Q14:222024-Q34:00
2022-Q34:092024-Q44:08
2023-Q24:252025-Q2**3:50**
2023-Q44:002025-Q4**3:48**
2024-Q14:002026-Q13:52
2024-Q24:052026-Q23:55

Proxyen bekrefter et brudd rundt sommer/høst 2023 (4:20→4:00) og en ny senkning sommer 2025 (→3:48–3:50), men den svinger ±10 s/km på øktvalg og taper — den er en trend-indikator, ikke en LT2-måler.


2. Hovedfunn — *når* løftet skjedde (og hva det betyr for S1)

Funn 1 — In-session-laktaten daterer løftet til før Berlin-HM-blokka. Dette er rapportens viktigste nyanse. Sporet av «pace som gir LT2-laktat»:

  • Feb–mar 2024: 3:52–3:58/km @ HR 159–165 ga 3,1–3,2 mmol (akkurat på/rett under 3,3-terskelen). → LT2-pace ≈ 3:55.
  • Feb 2025: 3:44/km @ HR 165 ga 3,3 mmol — eksakt LT2. → LT2-pace ≈ 3:44 allerede her, ni måneder før Berlin-HM-blokka.
  • Jan–mar 2026 (Berlin-blokka): 3:49/km @ HR 159–169 ga bare 1,9–2,7 mmol — komfortabelt under terskel. 3:49 var blitt aerobt billig.
  • Jun 2026: 3:44/km @ HR 165 → 3,4 mmol — stabilt på 3:44-terskelen.

Lest sammen: det store LT2-løftet (~3:55→3:44) falt i 2024→tidlig 2025, drevet av volumekspansjonen i Kbh-M- og Berlin-M-blokkene 2024 (builds på 100/88 km/u, I3-km/u opp i 11–12). Berlin-HM-blokka vår 2026 flyttet ikke 4-mmol-farten mye videre — den gjorde 3:49 sub-terskel (senket laktat ved gitt fart), som er nøyaktig det som lot ham løpe Berlin HM lab-LT2 i 80 minutter uten å sprekke. S1s mekanisme er riktig, men krediteringen bør splittes: plattformen ble bygd 2024–25; Berlin-blokka realiserte den.

Funn 2 — Dobbel-terskel er signaturen på konsolideringsfasene. De to periodene med tettest LT2-senkning har begge høy dobbel-terskel-frekvens: Kbh/Berlin-M-æraen 2024 (3–5 dobbel-dager per build) og Bakken-basen nov–des 2025 (10 dobbel-dager på 8,7 uker, I3 7,8 km/u) som ledet rett inn i Berlin-HM-formen. Mekanismen (Seiler/norsk dobbel-terskel: mye tid akkurat på/under LT2 med lav enkelt-øktbelastning) rimer med at det er laktat-ved-fart som faller, ikke nødvendigvis maks-terskelfarten.

Funn 3 — K6-speilet er den operative dose→respons-loven. For hvert HM/10k har jeg regnet racefart mot vektet I3-dragsnitt de siste 8 ukene før løpet:

LøpRacefartI3-dragsnitt 8uDiff
Berlin HM 2026 (1:21:19)3:503:51**−2 s**
Trondheim HM 2025 (1:24:24)3:593:54+6 s
Nidaros 10k 2023 (39:58)3:584:14−16 s
Oslo 10k 2023 (39:26)3:534:00−7 s
Bane-10k 2024 (38:38)3:524:02−11 s
EnergiMila 2025 (37:24)3:443:55−11 s

For HM er speilet nesten 1:1 (Berlin −2 s): racefarten ≈ sein-blokk-I3-dragsnittet. For 10k løper han 7–16 s/km raskere enn HM-pace-draget (som forventet — kortere distanse). Dette gir en direkte, testbar dosemål-regel for Kbh (§3). Konfidens B: én HM med full dokumentasjon i det nye pace-regimet, men mekanismen er den samme som gjorde `10k-terskeldose` og LT2-øktpace til modell-features.

Funn 4 — I3-øktfart per år bekrefter en jevn, ikke sprangvis, senkning (median økt-pace, ikke lab): 2022 4:30 · 2023 4:15 · 2024 4:05 · 2025 4:00 · 2026 3:55. ~7 s/km per år siden 2022. De skarpeste enkeltøktene i 2026 traff allerede 3:45 (og 3:38 på I4 i 2025), så toppen av dose-repertoaret er der; det er snittet som må dras ned for Kbh.


3. Dosemål u29–37 — hva som leverer S1s 2–3 s/km til København (3:47)

Gapet er 1:21:19 → 1:19:59 = 3,8 s/km (3:51→3:47), hvorav S1 skal levere 2–3. Oversatt til dose via K6-speilet (Funn 3): 8-ukers I3-dragsnitt inn mot Kbh må ned fra dagens ~3:55-median til ≤3:47 — altså 8 s/km raskere gjennomsnittlig terskelfart enn i dag, med racefarten som følger draget.

Konkret dose (u29–37), forankret i blokkene som faktisk flyttet LT2:

ParameterMål u29–37Forankring
I3/I4-volum**11–13 kval-km/u**Kbh-M-24 (11,2) + Berlin-HM-26 (11,8) er de to blokkene med sterkest LT2-konsolidering; London-25 (11,9) holdt 3:49-proxyen.
Drag-pace, hoveddose (I3)Progresjon **3:49 → 3:45** over blokkaIn-session: 3:49 er nå <2,7 mmol → det er *for lett* til å flytte terskel videre. Draget må ligge der laktat = 3–3,5 mmol, dvs. 3:45–3:47.
Skarpeste I3/I4-økter**3:43–3:45** (I4-1000-metere ned mot 3:40–3:42)K6: for Kbh 3:47 må sein-blokk-toppfarten speile HM-pace med margin. 2025 nådde 3:38 på I4 — kapasiteten finnes.
Dobbel-terskel**≥1 dobbel-uke hver 3.–4. uke**Funn 2: konsolideringssignaturen. Nov-2025-basen (10 dobbel-dager) → Berlin-form.
8-ukers I3-dragsnitt (K6-porten)**≤3:47 innen ~1. september**Direkte Kbh-prediktor (Funn 3). Mål-porten som bør vises mot planen.
Lab-retestaug/sep (planlagt, PREDICTION_MODEL §9)Verifiser at 4-mmol-farten faktisk er ≤3:45 før Kbh — eneste harde sjekk.

Energimila-speilet (10k, 12.8): samme motor, kortere billett. K6 sier 10k-racefart ligger ~11 s/km under I3-draget, så et 8-ukers I3-dragsnitt på ~3:52–3:55 er nok for 36:5x. Dosen over dekker dette med margin; Energimila er go/no-go-lampen, ikke en egen doseringsjobb.


4. Ærlig konfidens og feller

Era-konfundering (den store). `physiology_by_period` holder HR-sonene faste for hele 2023–2026 (LT2-HR 169, Carl-beslutning, låst), men brukte ulike HR-bånd 2020–2022 (LT2-HR 170→172, HRmax 191→189). En «I3-økt» i 2022 er derfor ikke pulslikt en I3-økt i 2026, og pace-en reflekterer både form og sonedefinisjon. Derfor: proxy-tall før 2023 (§1, venstre kolonne) er retningsindikatorer, ikke målinger — konfidens C. All kvantitativ dose→respons her hviler på 2023–2026, der HR-rammen er konstant.

Laktat er tynn før 2024. Første in-session-måling er 12.02.2024; første lab er 01.03.2024. Hele 2019–2023-LT2 er proxy-only. «~3:55 (2024)»-baselinen er godt underbygd (lab + 6 in-session-punkter), men «hva LT2 var i 2022» kan ikke tallfestes bedre enn «et sted rundt 4:15–4:25, dose-konfundert».

Dose-konfundering i proxyen. `lt2_asof` = median valgt I3/I4-øktpace. Kontrollerte base-økter ser trege ut uten å være det (fitness_filter blåser derfor opp R for lt2/vo2 med 1,4×/1,8×). Proxyen kan altså vise «tregere LT2» i en base-fase som i virkeligheten bygde terskel — nok en grunn til at lab + in-session-laktat er ankeret, ikke proxyen.

To lab-tester, to terskeldefinisjoner. Den vanligste feilen her ville vært å lese «3:57 → 3:49 = 8 s» rått. Det blander 4-mmol-fart med 3,3-mmol-fart. Matchet laktat er løftet 9 s (ved 3,3) eller ~14 s (ved 4) — begge oppgitt i §1 så leseren ikke arver feilen.

Vindusdefinisjon vs FABLE-5. S1 oppgir Berlin-dosen som «80 km/u, 22,1 kval-km/u, 209 drag». Min måling på det rene 12-ukers build-vinduet (jan–mar 2026) gir 89,6 km/u løpsvolum, 16,1 kval-km/u, 124 I3-drag @ 3:52. Differansen er vindus-definisjon (S1 favner trolig Bakken-basen nov–des 2025 med inn, ~20 uker) — ikke en motsigelse. Begge tall er riktige for sitt vindu; jeg oppgir mitt eksplisitt så u29–37-dosen (§3) er kalibrert mot den rene byggefasen.


5. Én linje til Blokkplan v3 (FABLE-8)

LT2-dosen er nå tallfestet: I3/I4 11–13 km/u, drag-pace 3:49→3:45, K6-port «8-ukers I3-dragsnitt ≤3:47 innen 1. sept», dobbel-terskel hver 3.–4. uke, lab-retest aug/sep. S1 (2–3 s/km) er dekket hvis draget faktisk faller til laktat-terskelen (3:45), ikke bare til den nå-sub-terskel-lette 3:49-farten. Det er den ene kalibreringen v3 bør notere som åpen til lab-retesten kvitterer.

Responder-profilenHva: Hvilke stimulus-klasser som faktisk flytter Carls form.
Konklusjon: Volum-responder på aksen som transfererer til racefart; dobbel-terskel virker kun på høy base.
Fable2026-07-07
#volum#intensitet#respons

Responder-profilen — hvilke stimuli flytter DIN form

FABLE-19 · skrevet 2026-07-07 · kilder: `quality.json` (665 økter → 632 klassifiserte kval/langtur), `training_fitness.py` (aerob@128, LT2- og VO2-proxy — de kontinuerlige responsmålene), `fitness_filter.json` (fusjonert 10k-ekv / q155-race-form), `training_load.json` (CTL/volum), `training_blocks.json` (LÅST, kun lest). Alt read-only, ingen pipeline-/data-skriv. Spørsmålet: dose→respons per stimulus-klasse — hva gir målbar formrespons, er Carl volum- eller intensitetsresponder, og finnes interaksjoner?

Avgrensning mot F9: F9 eier terskel-dosen (LT2 3:49→3:45, K6-porten). Denne går bredere — alle stimulus-klasser mot alle form-kanaler — og legger to ting F9 ikke hadde: (1) et responder-oppgjør (volum vs intensitet, på det kanalen som faktisk er uavhengig av dosen), og (2) tidskonstanter (hvor fort hver akse svarer). Terskel-tallene her dupliserer ikke F9; de rammer den inn responder-teoretisk.


0. Kortversjon (TL;DR)

Carl er en volum-responder på den aksen som betyr mest for løpsform, og en terskel-responder på LT2-aksen spesifikt — men LT2-aksen er nær taket, så marginalflyttene der er små.

Tre funn bærer rapporten:

1. Den aerobe motoren er nesten ren volum. `aerob@128` — det eneste responsmålet som er uavhengig av kvalitetsdosen (regnes kun fra rolige løp) — sporer akkumulert løpsvolum med r ≈ −0,87 over hele materialet og −0,41 innen den låste sone-æraen (2024–26). Den fusjonerte 10k-ekv-formen (q155/race) sporer volum enda tettere (−0,98 / −0,65), og et fremtidsrettet mål (volum-anomali → bedring de neste 2–6 ukene) gir +0,34 — den reneste «dose respons»-signaturen i settet. Volum er makrospaken. Tidskonstant: ~26 uker (treg).

2. Terskelform (LT2) svarer på terskeldose, og svarer raskere (~4–8 uker). Men det store LT2-løftet (2023→24, −18 s/km i årsmedian, opptil −23 mellom sommer-23 og sommer-24) er over-determinert — volum, terskeldrag, MP-langtur og dobbel-terskel eksploderte samtidig — og innen den moderne høybase-æraen er signalet svakt (r = −0,28) fordi han er nær taket (F9: plattformen er alt bygd). Terskel-responsen er ekte, men delvis sirkulær (proxyen er definert av de samme øktene som utgjør dosen) og nå småstegs.

3. Dobbel-terskel er en terskel-spesifikk høybase-spak, ikke en base-bygger. Mølle-vinteren 2025/26 (10 dobbel-dager, værtvunget) er det reneste natur-eksperimentet: LT2 −8 s/km, mens `aerob@128` og fusjonert form sto stille. Interaksjonstesten bekrefter: LT2-gevinsten etter dobbel-uker lander kun på høy base (n=10 på høy, n=1 på lav — han gjør dem aldri på lav base, som i seg selv er svaret).

Operativ konsekvens: vinter-basen 26/27s volum er den høyest-ROI investeringen for generell form (treg spak, må starte tidlig); terskel-skjerpingen u29–37 (F9s 3:45-drag) er en rask spak som slår inn i tide før Kbh; dobbel-terskel hører hjemme i vinter-basen på høyt volum, ikke som sein skjerpe-verktøy; og 4×4/kort-VO2/bakke er uprøvd for Carl — ikke over-invester, men heller ikke avskriv (4×4 kjørte bare én æra).

Konfidens: B+ for volum-responder-funnet (uavhengig kanal, replikert innen-æra + fremtidsrettet), B for dobbel-terskel-på-høybase (natur-eksperiment + interaksjon), C for finkornet klasse-rangering utover det (selv-seleksjon + sirkularitet + era kan ikke regnes bort).


1. Responsmålene — og hvorfor `aerob@128` er ankeret

Fire kontinuerlige form-kanaler, alle i sekunder/km (lavere = raskere = bedre):

KanalHvaUavhengig av kval-dosen?
**`aerob@128`**Puls-normalisert rolig-pace @ HR 128 (rullende 42-d median, kun rolige løp)**JA** — regnes utelukkende fra rolige økter. Den eneste rene responsmålingen.
**fusjonert (10k-ekv / q155)**Kalman-fusjon av race + matchet-puls-signal**Stort sett** — dominert av race + q155, ikke av øktpace.
LT2-proxyMedian I3/I4-øktpace (56-d)**NEI, delvis sirkulær** — dosen (terskeldrag) *definerer* metrikken.
VO2-proxyMedian I4/I5-øktpace (56-d)**NEI, delvis sirkulær** + støyende.

Dette skillet er hele rapportens metodiske ryggrad. Å «vise» at terskeldrag flytter LT2-proxyen er nesten en tautologi: raskere terskeldrag er en bedre LT2-proxy. Derfor vektes `aerob@128` og fusjonert form som de sanne responsmålene, og LT2/VO2 leses som bekreftende men delvis definisjonelle.

Form-banen per år (median, s/km):

Åraerob@128LT2VO2fusjonert (10k-ekv)
2020360263263268
2021355261254255
2022352264259258
2023343258237247
2024327240249236
2025323240232234
2026316233225230

`aerob@128` faller monotont hvert eneste år — den jevneste kurven i materialet. LT2 gjør sitt sprang 2023→24 og står så nær stille. Det mønsteret alene peker på svaret: den aerobe aksen er en glidende volum-funksjon, terskel-aksen er en steg-funksjon som ble bygd og så nådde tak.


2. Stimulus-rangering — dose→respons per klasse

Klassifiseringen delte de 632 kval/langtur-øktene i klasser (drag 1000/2000, tempo-tid, 45/15, kort-VO2, 4×4-mølle, bakke, MP-langtur, terskel-/progressiv-/volum-langtur) + dobbel-terskel som et dag-nivå-trekk (20 dobbel-dager, korrigert deteksjon: ≥2 distinkte intervalløkter samme dag). Metoden kjørte tre kutt for å bryte era-trenden: (a) nivå-korrelasjon dose↔kanal, (b) 26-ukers endring i kanal vs dose i samme vindu, (c) fremtidsrettet uke-anomali (detrendet per år). Rangeringen under vekter de minst sirkulære kanalene tyngst.

RangStimulusFlytter hvilken kanalEvidens (retning, styrke)Konfidens
**1****Ren volum (rolig km)**aerob@128 + fusjonert race-formNivå aerob~vol **≈−0,87** (lifetime), **−0,41** (låst æra); d_aerob~volum **+0,45** (låst æra); fusjonert~vol **−0,98/−0,65**; *fremtidsrettet* fusjonert~vol **+0,34**. Konsistent på tvers av alle tre kutt, på den uavhengige kanalen.**B+**
**2****MP-langtur**LT2/aerob (blandet)d_LT2~26u **+0,25**; men MP-dose ↔ volum r=**0,48** — kan ikke skilles fra volum. Sannsynlig ekte, ikke rent identifisert.**C+**
**3****Terskeldrag (1000/2000) + dobbel-terskel**LT2-proxy (rask, ~4–8 u)LT2~terskel-dose −0,81 (lifetime), −0,28 (låst æra); dobbel-terskel isolert i mølle-eksperimentet (**−8 s LT2**, §4). Sterkt for plattform-steget/mølle; svakt + sirkulært finkornet.**B / C**
**4****45/15 (on-off)**LT2 (svakt)d_LT2~26u +0,16; folder inn i terskel. Ingen selvstendig signatur.**C**
**5****4×4-mølle / kort-VO2**VO2-proxy (svakt, sirkulært)Uke-anomali vo2~4×4 +0,18, ~dobbel +0,23 — men sirkulært, og 4×4 kjørte **kun 2024** (85 km, så borte). Ingen ren VO2-kanal å teste mot.**C− / utilstrekkelig**
**6****Bakke**(VO2/fusjonert, tilsynelatende)Uke-anomali +0,21 på flere kanaler — men n=12, **kun 2022–23**, fullstendig era-konfundert med 2023-gjennombruddet. Ikke tolkbart.**utilstrekkelig**

Den harde lærdommen i tabellen: bare rad 1 tåler alle tre kuttene på en uavhengig kanal. Alt under rad 1 er enten sirkulært (terskel/VO2), sammenfiltret med volum (MP), eller n-skjørt/era-låst (4×4, bakke). Det er ikke en svakhet ved analysen — det er responder-profilen: én robust makrospak (volum), én rask men nær-tak mikrospak (terskel), og en hale av stimuli som ikke har nok rent varierende dose til å dømmes.


3. Volum- vs intensitet-responder — dommen med tidskonstanter

Det tydeligste enkeltresultatet kommer fra 26-ukers-endring innen den låste sone-æraen (2024–26, der HR-rammen er konstant — minst era-artefakt):

26-u endring i …vs rolig-volum i vinduetvs terskel-dose i vinduet
**aerob@128** (bedring)**+0,45****−0,46**
LT2-proxy (bedring)−0,07−0,06

`aerob@128` bedres i volum-tunge vinduer og, om noe, svekkes i intensitets-tunge vinduer (fordi intensitet fortrenger den rolige kilometeren som driver signalet). LT2-endringen lar seg ikke rent forklare av noen av delene innen-æra — fordi de moderne LT2-flyttene er små og lumpy (nær tak, F9). Dette er den ærlige versjonen: volum-aksen er styrbar og forutsigbar; terskel-aksen er nesten ferdig-bygd.

Tidskonstantene (nivå-korrelasjon mot ulike trailing-vindu) forklarer hvorfor de to spakene brukes forskjellig:

KanalBest vindur ved 4 ur ved 8 ur ved 26 u
aerob@128 vs volum**26 u**−0,81−0,87**−0,91**
LT2 vs terskel-dose(raskt)**−0,68**−0,76−0,82

Den aerobe motoren er en treg akkumulator (~6 mnd tidskonstant — best forklart av et halvårs volum). Terskelformen svarer allerede innen fire uker (−0,68) og er praktisk talt mettet ved åtte. Det er den fysiologiske begrunnelsen for hele periodiserings-arkitekturen: du kan skjerpe terskel raskt inn mot et løp (F9s K6-port ved 8 uker fungerer nettopp derfor), men den aerobe basen må bygges måneder i forveien og kan ikke hastes fram i en skarp blokk.

Dom: Carl er volum-responder på den aksen som transfererer til racefart (aerob base → fusjonert 10k-ekv, den minst sirkulære målingen, sterkest volum-koblet), og terskel-responder på LT2-aksen — men den er rask og nær tak, så den gir skarphet, ikke nivå. 2:45-motoren (F9s 3:45-terskel) krever derfor terskel-skjerpingen oppå en vernet volum-base, ikke i stedet for den. Det er nøyaktig F17s «plattform + spak»-arkitektur — nå med tidskonstantene festet.


4. Interaksjoner

Dobbel-terskel × base (bekreftet). Formet som spørsmålet stilte det — er dobbel kun effektivt på høy base? Ja, empirisk:

TilstandLT2-bedring de neste 2–6 un
Dobbel-uke + høy base (≥median uke-km)**+2,6 s/km**10
Dobbel-uke + lav base+1,7 s/km1
Ingen dobbel (alle uker)+0,2 s/km323

Han gjør nesten aldri dobbel-terskel på lav base (n=1) — atferden er selv svaret: dobbel-terskel er et høybase-verktøy i praksis. Og når den brukes, følges den av ~13× større LT2-bedring enn en snittuke. Mølle-vinter-eksperimentet gjør mekanismen konkret og bryter selv-seleksjonen (dobbel var værtvunget, ikke formvalgt):

Mølle-vinteren 2025/26aerob@128LT2fusjonert
Start (2025-11-01)312240229
Slutt base (2026-02-15)317 (+5, verre)**232 (−8)**230 (flatt)

10 dobbel-dager senket LT2 ~8 s/km mens den aerobe basen faktisk gikk litt tilbake (vinter = mindre rolig utevolum + mølle) og fusjonert form sto stille. Det isolerer dobbel-terskel som terskel-spesifikk: den bygger ikke base, den skjerper motoren — og den gjorde det som lot Berlin HM løpes på lab-LT2 i 80 min (F9). Konfidens B: ett rent vindu, men det peker samme vei som interaksjonen og F9.

MP-langtur × volum (uatskillelig). MP-langturdose korrelerer 0,48 med rolig-volum — de kommer i de samme høyvolum-ukene. d_LT2 er +0,25 mot MP over 26 u, men jeg kan ikke skille MP-effekten fra volumeffekten den rir på. Ærlig utfall: MP-langtur er sannsynlig en ekte bidragsyter til terskel/durability (F17/tverrmaraton støtter det mekanistisk), men F19 kan ikke gi den en egen ren dose→respons-kurve. Flagges som C+.

Klasse-samvariasjon ellers er lav (de fleste uke-dose-par < 0,15) — det betyr at det ikke er uke-til-uke-samtidighet som er hovedkonfunderen, men den delte års-trenden (alt vokser sammen). Derfor er innen-æra- og endrings-kuttene (§3) de ærlige tallene, og lifetime-nivåene (§1–2) er trend-inflaterte referanser.


5. Feller og ærlig konfidens

Sirkularitet (den skarpeste). LT2- og VO2-proxyene er definert av de samme øktene som utgjør intensitets-dosen. Enhver «terskeldrag → LT2-bedring»-kobling er derfor delvis en tautologi. Det er grunnen til at hele responder-dommen (§3) hviler på `aerob@128` (kun rolige løp) og fusjonert form (race/q155) — de eneste kanalene der dose og respons er reelt adskilt. Volum-responder-funnet er sterkt nettopp fordi den reneste kanalen er den tydeligste.

Selv-seleksjon. Carl periodiserer — han gjør mer terskel i terskelblokker, som også er når terskel forbedres (planlagt). Rå dose→respons kan derfor ikke skille «stimulus virket» fra «han doserte det når det uansett steg». Delvis brutt av: (a) innen-æra-kontraster, (b) natur-eksperimentet (værtvunget dobbel), (c) den uavhengige kanalen. Ikke fullt løsbart — flagges her, ikke bortforklart.

Era-konfundering. 2024–26 er bedre på volum, kvalitet, gruppe, utstyr, sone-definisjon og kunnskap samtidig. Lifetime-korrelasjonene (−0,88, −0,98) er derfor trend-inflaterte og oppgis kun som referanse; de innen-æra-lave tallene (−0,41, −0,65, +0,45) er de ærlige. Sone-æraene før 2023 er inkonsistente — all pre-2023-intensitet er retningsindikator (arvet fra F9/F17).

Tak-effekt. Den moderne LT2-aksen beveger seg lite fordi Carl er nær sitt tak der (F9). Svakt innen-æra LT2-signal er altså forventet, ikke en målefeil — men det betyr også at F19 ikke kan rangere de skarpe intensitets-klassene finkornet på LT2 i dag.

n og dekning. 4×4-mølle: kun 2024 (så borte) → ingen holdbar VO2-dom. Bakke: n=12, kun 2022–23 → utolkbar. Dobbel-terskel: 20 dager totalt, 10 i det ene rene vinduet → B, ikke A. Fravær av bevis ≠ bevis for fravær: at 4×4/kort-VO2 ikke kan påvises betyr ikke at de er nytteløse — bare at Carl aldri har kjørt dem i nok isolert dose til å måle. Det er i seg selv en anbefaling (§6).

Fusjonert 26u-endring er støyende. Den race-ankrede fusjonerte kanalen er stegvis; dens 26u-endring-mot-dose er upålitelig (høy-dose-vinduer ender ofte på en race-topp så detrening). Volum-dommen for fusjonert hviler derfor på nivå (−0,98/−0,65) + fremtidsrettet anomali (+0,34), ikke på 26u-endringen.


6. Operative implikasjoner

For u29–41 (Energimila → Kbh → Amsterdam, inneværende sesong)

*Hold rolig-volum oppe gjennom kvalitetsblokkene. Den skarpeste innen-æra-effekten var at intensitets-tunge vinduer svekker* `aerob@128` (−0,46) — fordi intensitet fortrenger rolig km. Når terskel-dosen skrus opp u29–37 (F9), må ukevolumet ikke falle med den; base og skjerp er to spaker, ikke én. Praktisk: behold 85–95 km/u-plattformen (F17) mens F9s 3:45-drag legges oppå.

Stol på at terskel-skjerpingen slår inn i tide. LT2 svarer innen 4–8 uker → F9s K6-port («8-ukers I3-dragsnitt ≤3:47 innen 1. sept») er tidskonstant-riktig: skjerpingen rekker Kbh selv om den startes seint i blokka. Ikke fremskynd den på bekostning av basen.

Ikke forvent aerob-gevinst av høstblokka — den er allerede investert. `aerob@128` har ~6 mnd tidskonstant; formen som bærer Amsterdam ble bygd vinteren/våren 26. Høsten skjerper og vedlikeholder, den bygger ikke aerob base. Det avlaster presset på å «pakke inn» mer volum seint.

For vinter-basen 26/27 (ikke-forhandlbar, F17)

Volum er den høyest-ROI investeringen for generell form — og den må starte tidlig. Dette er F19s tyngste operative bidrag: fordi den aerobe/fusjonerte aksen (den som transfererer til racefart) er en treg volum-funksjon, er vinter-basens rolige kilometer den best dokumenterte spaken i hele materialet. Prioriter kontinuerlig volum-akkumulering fra november; den betaler ut i mars–mai.

Legg dobbel-terskel i vinter-basen, på høyt volum — ikke som sein skjerpe-blokk. Mølle-eksperimentet + interaksjonen sier dobbel-terskel er en høybase-terskelspak (−8 s LT2 over basen). Gjenta Bakken/mølle-malen (dobbel hver 3.–4. uke, F9), forankret i vinterens volum. Den bygger motoren for 2:45 (F9s 3:45-terskel) uten å kreve mer maks-volum (som traff sykdomstaket i 2025, F17).

*Bruk vinteren til å faktisk teste en uprøvd spak.* 4×4-mølle og kort-VO2 er de eneste klassene F19 ikke kan dømme — ikke fordi de er nytteløse, men fordi Carl aldri har kjørt dem i isolert nok dose (4×4 kun 2024). Vinter-basen 26/27, uten vår-maraton å taper mot (F17 prinsipp 4), er det riktige stedet å kjøre en avgrenset 4×4- eller kort-VO2-periode med lab-retest før/etter — så neste responder-analyse har en ren kurve å lese. Det er lavrisiko-nedside (VO2 61,7 er reserve, ikke beskrankning, F17) og potensiell oppside på den ene aksen materialet er blindt på.

Vern den rolige kilometeren mot intensitets-fortrengning. Samme regel som u29–41, men mer kritisk over en hel vinter: hvis en dobbel-terskel- eller VO2-test skrus opp, kompenser volumet så `aerob@128`-basen ikke eroderer (−0,46-effekten). Base først, skarphet oppå.


7. Én linje til COACH/blokkplan

Responder-profilen: volum bygger nivå (treg, ~6 mnd, vernes); terskel/dobbel skjerper motoren (rask, ~4–8 u, høybase-verktøy); 4×4/kort-VO2 er uprøvd og bør testes rent i vinter-basen 26/27. Regelen som følger direkte: skru aldri opp intensitet på bekostning av rolig-volum — de er to spaker, og basen er den som transfererer til racefart.

Varmeadaptasjon Italia + søvn→kvalitetHva: Italia-oppholdet som varme-eksperiment + test av søvn-som-kvalitetsprediktor.
Konklusjon: Partiell varme-adaptasjon (fasit ved T2.5 19.7); «søvn <78 = dårlig kvalitet» er motbevist (søvn = HRV-proxy).
Fable2026-07-06
#varme#adaptasjon#søvn#T2.5

Running Report — Varmeadaptasjon Italia (del 1) + søvn→kvalitet-verifisering

Dato: 2026-07-06 · Økt: FABLE-4 (TODO) · Status: del 1 ferdig (varme-eksponeringsvinduet) + 4b ferdig · Del 2 (ETTER-vinduet): rammeverk lagt, utfylles av Opus etter 17.7

Kilder: `wellness.json` (flate felt + morning_snapshot), `activities.json` + `data/raw/strava/`, `data/cache/weather_archive/`, `illness_periods.json`, `alcohol_log.json`, `quality.json`, `training_load.json`, `COACH_INSTRUCTIONS.md`

Metode-note: all mellomregning holdt i minne/`_tmp` (ingen skriv til `data/`). Denne økta rørte KUN denne rapportfila (parallellregel). Konsolideringslinje nederst.


SAMMENDRAG (TL;DR)

4a — Varme: Italia-oppholdet gir IKKE en ren plasmavolum-måling, fordi eksponeringsvinduet er dominert av tre konfundere som alle drar autonomien feil vei: høyde (Seefeld 1180 m, 26.6–2.7), reise/søvnbrudd, og alkohol (1–2 enh., ferie-logget). Difference-in-differences mot samme kalenderuker 2025 viser at markørene ble undertrykt under oppholdet, ikke forbedret: RHR +2,4 · HRV −5,6 · søvn −5,9 relativt til hva sesongen alene tilsier. Adaptasjonssignaturen dukker opp SENT og på lav høyde: de to siste dagene i Bolzano (240 m, 4.–5.7) faller RHR til 36–37 (under juni-baseline 38,5) med HRV 74–84 (over baseline 71), og 33,5 km-turen 5.7 i 25 °C ble holdt på snitt-HR 122. Det er et modest, delvis adaptasjonssignal — konsistent med litteraturens partielle akklimatisering ved <2 ukers passiv+aktiv varme, men for konfundert til å tallfeste plasmavolum presist. Den rene målingen er utladningsvinduet hjemme (T2.5, 19.7) — det er der del 2 leverer fasit.

4b — Søvn→kvalitet: Regelen «søvnscore <78 = aldri vellykket kvalitet» holder ikke — verken per økt eller i ukessnitt. I ukessnitt nådde 19 av 38 lav-søvn-uker (<78) en kvalitet ≥8. Per økt scorer bandet [74,78) faktisk høyere (snitt 7,65) enn [78,86). Den ekte inflekssjonen ligger på <74 (−0,65 poeng, 95 % CI [0,14–1,17], p=0,006) — men i multippel regresjon forsvinner søvn helt når HRV kontrolleres (β_søvn=+0,002, p=0,83; β_HRV=+0,030, p<0,001). Søvn er en proxy for HRV, ikke en selvstendig prediktor. Forslag: fjern «<78 aldri vellykket»-påstanden (empirisk feil), behold søvn som bekreftende markør, og hvis en frittstående terskel ønskes, flytt den til <74 som myk obs — ikke absolutt abort.


DEL 4a — VARMEADAPTASJON ITALIA

1. Design og vinduer

Italia-ferien behandles som et naturlig varme-eksperiment. Baseline = 4 uker hjemme før avreise. «Under» = eksponeringen så langt. Alt matches mot samme kalenderuker 2025 (Trondheim, 9–16 °C hele perioden) som sesong-kontroll, slik at vi kan skille varme-effekt fra vanlig sommer-drift.

VinduDatoerStedTemp (løp)n dager
**PRE26** (baseline)25.5–21.6Trondheim9–18 °C28
**UND26** (eksponering)22.6–5.7transit → Berlin → Dresden → **Seefeld 1180 m** → Bolzano 240 m16–28 °C14
PRE25 (kontroll)25.5–21.6 2025Trondheim9–17 °C28
UND25 (kontroll)22.6–5.7 2025Trondheim10–18 °C14

Reiselogg (fra GPS i råstreams): 21.–22.6 Oslo · 23.–24.6 Berlin (52,5 °N) · 25.6 Dresden · 26.6–2.7 Seefeld (Tirol, 1150–1180 m) · 3.–5.7 Bolzano/Eppan (227–243 m). Høyde-oppholdet midt i vinduet er den viktigste konfunderen (se §4).

2. Beredskapsmarkører — difference-in-differences

Difference-in-differences (DiD) = (UND26−PRE26) − (UND25−PRE25). DiD isolerer det som er spesielt for 2026-vinduet fra vanlig sesong-drift.

MarkørPRE26UND26Δ26PRE25UND25Δ25**DiD**Tolkning
RHR38,539,6+1,239,938,7−1,2**+2,4**motsatt av sesong — akutt strain
HRV71,168,0−3,166,568,9+2,4**−5,6**undertrykt autonomi
Søvnscore85,778,6−7,182,881,6−1,2**−5,9**varme+reise ødelegger søvn
Stress_avg18,723,9+5,121,321,4+0,1**+5,0**nattlig belastning opp
Training readiness68,165,8−2,4(TR ikke i 2025-data)

Lesning: I 2025 (kjølig) forbedret markørene seg svakt inn i «under»-vinduet (RHR −1,2, HRV +2,4) — normal sommer-form. I 2026 gikk alt motsatt vei. Under selve eksponeringen er dette en strain-fase, ikke en adaptasjons-fase. RHR PRE26 vs UND26 er signifikant forhøyet (MWU p=0,042), men — kritisk — dette er høyde- og reise-konfundert, ikke ren varme.

3. Adaptasjonssignaturen — sen og på lav høyde

Splitter vi UND26 på høyde forsvinner det meste av «forverringen»:

Del-vinduStedRHRHRV
Seefeld-uka (26.6–2.7)1180 m**40,7****64,7**
Lav-høyde-dager (resten)40–240 m38,671,3
**Bolzano sluttdager (4.–5.7)****240 m****36,5****79**
PRE26-baseline (referanse)Trondheim38,571,1

De to siste dagene — etter nedstigning fra høyde, med ~10 dagers varmeeksponering i kroppen — viser den klassiske varmeadaptasjons-readouten: RHR under baseline (−2 bpm), HRV over baseline (+8 til +13). Dette er signaturen på (partiell) plasmavolum-ekspansjon: mer plasma → lavere hvilepuls og bedre vagal tonus når varme- og høyde-strainen slipper.

Løpsbekreftelse: Langturen 5.7 (33,5 km, 25 °C, Bolzano) ble holdt på snitt-HR 122 — eksepsjonelt lavt for distanse og temperatur. Decoupling var likevel 6,47 %, som er varmens signatur (kardiovaskulær drift fra termoregulering, ikke aerob svikt). Til sammenligning: den ene hete langturen i 2025-kontrollen (20.7.2025, 30 km, 24 °C) hadde decoupling 8,32 % og score falt til 6,5. 2026-turen holdt score 8,3 til tross for lengre distanse i samme varme — et tegn på at kroppen håndterer varmelasten bedre nå enn kontrollåret.

4. Konfundere — hvorfor dette ikke er en ren måling

Tre konfundere gjør at eksponeringsvinduet ikke kan gi et presist plasmavolum-tall:

(a) Høyde (størst). Seefeld 1150–1180 m midt i vinduet hever RHR og senker HRV akutt — stikk motsatt av varmeadaptasjonens retning. Seefeld-uka (RHR 40,7 / HRV 64,7) drar hele UND26-snittet feil vei og maskerer varme-signalet. Dette er grunnen til at adaptasjonen først blir synlig etter nedstigning.

(b) Reise/søvn. Søvnscore falt −5,9 (DiD) — den klareste enkelt-effekten. Nye senger, sen middag, varme netter. Søvnbrudd senker HRV uavhengig av varme.

(c) Alkohol. `illness_classification.json` typer 25.–29.6 og 3.7 som stress (ferie: varme/flytting/alkohol 1–2 enh.), eksplisitt IKKE infeksjon. Alkohol nuller illness-score men senker HRV og hever RHR/stress natten etter. Dette overlapper Seefeld-innreisen og forsterker (a)+(b).

Ferie-episoden er et SEPARAT fenomen. Stress-periodene 17.–18.6, 25.–29.6 og 3.7 (peak-score 4,0–5,5, alle stress-typet) er reise/varme/alkohol-drevet dysregulering — ikke et varme-adaptasjons-signal og ikke residiv av post-Berlin-infeksjonen (jf. T2-evalueringen: 14/14 BALANCED, null infeksjon siden april). De skal ikke telles som «varmen gjorde ham syk». Detektoren måler autonom forstyrrelse og kan ikke skille varme-strain fra begynnende adaptasjon — derfor er den nøytral her.

5. Efficiency factor (EF) — for støyete i dette vinduet

Temp-justert EF på rolige økter (justering ~1,6 s/km per °C over 12 °C-referanse, fra vær↔pace-kurven) ble testet som aerob-readout:

VinduRå-EF (median)Temp-just. EF (median)
PRE262,5272,541
UND262,3942,462
PRE252,5022,490
UND252,3142,334

Temp-justering henter tilbake mesteparten av rå-fallet (UND26-gapet krymper fra −0,133 til −0,079). Men 2025-kontrollen faller like mye (−0,156 rå / −0,156 just.) UTEN noen varme — så EF-fallet i deload-vinduet er i hovedsak øktsammensetning (hvilke rolige turer som ble logget, høyde-turene i Seefeld), ikke fysiologi. Konklusjon: EF er for støyete i et 2-ukers ferie-vindu til å være readout. RHR/HRV-banen (§3) og den hete langturen er de troverdige signalene. Den rene EF/pace@128-målingen hører hjemme i normaltemperatur hjemme (T2.5).

6. Plasmavolum-proxy og forventet utladning hjemme

Proxy (RHR-fall + HRV-respons): Det beste enkelt-estimatet er sluttvinduet på lav høyde: RHR −2 bpm og HRV +8 til +13 vs baseline. I varmeadaptasjons-litteraturen svarer et RHR-fall av denne størrelsen til ~2–4 % plasmavolum-ekspansjon — altså partiell akklimatisering (full akklimatisering, 5–6 % PV / RHR −5–10, krever 10–14 dager sammenhengende aktiv varme, som dette oppholdet ikke var — det var avbrutt av en høyde-uke). Karakter på signalet: B− (reelt, men modest og konfundert).

Forventet utladning hjemme (17.7→): Plasmavolum-gevinst fra varme er ferskvare — den decay-er over ~7–14 dager uten fortsatt varme-stimulus. Trondheim i slutten av juli er 15–20 °C, så stimulusen forsvinner ved hjemkomst. To scenarier:

  • Hvis adaptasjonen ble banket: de første ~10 dagene hjemme (17.–27.7) skal gi et vindu med lavere HR på samme pace / bedre pace@128 og lav RHR — en «gratis» form-topp mens plasmavolumet fortsatt er utvidet. Første hjemme-kvalitet (u30) kan føles uvanlig lett. Utnytt dette vinduet til én god terskeløkt tidlig i u30 heller enn å vente.
  • Hvis oppholdet kostet mer enn det ga: pace@128 hjemme ligger på eller under juni-baseline, RHR normal-til-forhøyet. Da var reise/alkohol/høyde-prisen større enn varme-gevinsten, og u29–30 skal behandles som ren gjenoppbygging.

Vi vet ikke hvilket scenario før målingen. Det er hele poenget med å designe del 2 som en ren utfylling.

7. Konkret doserings-input

Til u29 (siste ferieuke, 6.–16.7):

  • Varmen er fortsatt et lovlig stimulus — ikke jag pace (puls <138 på alt rolig, kvalitet kun morgen/skygge), akkurat som blokkplanen sier. Men vær klar over at Seefeld-høyden nå er borte (Bolzano-lavland), så resten av oppholdet er ren varme uten høyde-strain — det er her den rene adaptasjonen kan bygge seg litt til.
  • Behold langturen som ukas viktigste økt (race-fylling-øving), aksepter høyere decoupling i varmen som normalt.
  • Ikke legg inn ny hard stressor før hjemkomst — én stressor av gangen (blokkplanens u30-regel: bane/gym først, dobbel terskel u31).

Til T2.5-tolkning (19.7, hjemkomst):

Blokkplanen/T2-evalueringen har allerede definert T2.5-readouten (HRV-baseline, RHR-7d, CTL, én pace@128 i normaltemperatur). Denne rapporten gir forventnings-ankeret for de tallene:

  • HRV-baseline: forvent ≥58 (april roterer ut av 50d-vinduet) — og hvis varme-adaptasjon banket, en positiv HRV-hale de første dagene hjemme.
  • RHR-7d: forvent 37–39. Ser du 36–37 vedvarende første uka hjemme → adaptasjon bekreftet (plasmavolum fortsatt utvidet). Ser du 40+ → reise-/alkohol-prisen dominerte.
  • pace@128 i normaltemp: dette er den rene aerob-readouten EF ikke kunne gi i varmen. Forvent på eller litt under juni-baseline (temp-just. EF ~2,54). Bedre enn baseline = adaptasjon banket; verre = koster fortsatt.
  • Beslutningsregel: dette endrer IKKE den spikrede blokkplanen (fase 3-gaten er T2.5, ikke nå). Det justerer kun hvor aggressiv første hjemme-uke (u30) skal være: adaptasjon banket → utnytt utladningsvinduet med tidlig terskeløkt; ellers → gjenoppbygging.

8. RAMMEVERK FOR DEL 2 (Opus, etter 17.7) — ren utfylling

Del 2 forlenger nøyaktig samme struktur med ETTER-vinduet (14 d hjemme, 17.–31.7). Alt under er spesifisert så Opus bare fyller inn tall:

1. Definer vinduene: ETTER26 = 17.–31.7.2026 (Trondheim, normaltemp). Kontroll: ETTER25 = 17.–31.7.2025 (allerede delvis uttrukket her — Trondheim, se §1-kontrollen; utvid til 31.7). DiD-strukturen fra §2 gjenbrukes: (ETTER26−PRE26) − (ETTER25−PRE25).

2. Utladnings-kurve: plott RHR + HRV dag-for-dag 17.–31.7 mot PRE26-baseline (38,5 / 71,1). Se etter (a) om RHR starter lavt (36–37) og stiger mot baseline over ~10 dager = adaptasjon som decay-er, eller (b) starter forhøyet = ingen banket gevinst. Marker decay-halveringstiden.

3. pace@128 / temp-just. EF hjemme: kjør §5-metoden på ETTER26-rolige økter (nå i normaltemp, så justeringen er nær null → ren readout). Sammenlign mot PRE26 (2,541) OG mot den hete UND26. Dette er den rene aerob-effekten oppholdet ikke kunne gi.

4. Kvalitets-readout: første 2–3 hjemme-kvaliteter (u30–31) — score + HR_steady_state vs pace. Lavere HR på samme pace de første øktene = adaptasjonsvindu utnyttet.

5. Fasit-linje: «Kostet Italia-oppholdet mer enn det ga, eller banket det en utladbar form-topp?» — konkluder med karakter (A/B/C) og en setning til blokkplanens u30-dosering.

6. Ferdig-kriterium: samme rapport, ny seksjon «DEL 2 — ETTER-vinduet», samme tabell-format. Ingen kode, ingen data-skriv.


DEL 4b — SØVN→KVALITET-VERIFISERING

1. Spørsmålet

`COACH_INSTRUCTIONS.md` hevder: «Søvnscore under 78 har i ukessnitt aldri sammenfalt med vellykket kvalitetsøkt.» Testet mot alle skårede kvalitetsøkter med tilgjengelig søvnscore (natten før = `sleep_score` samme dato, tilgjengelig fra 2022-02-01). N = 340 kvalitetsøkter (intervall-typen; langturer har egen skår-skala og er ekskludert). «Vellykket» operasjonalisert som session_score ≥8,0 (Solid-tier+); «dårlig» som <7,0.

2. Score-fordeling per søvn-bin

Søvn-binnSnitt-scoreMedian%≥7,5%≥8,0Maks
[0,74)30**7,05**6,8547 %37 %9,1
[74,78)37**7,65**8,2065 %51 %9,4
[78,82)677,647,7060 %46 %9,4
[82,86)797,557,9056 %49 %9,4
[86,90)637,638,2060 %54 %9,5
[90,101)64**8,01**8,2075 %55 %9,6

Umiddelbart synlig: bandet [74,78) — akkurat under den påståtte terskelen — har snitt 7,65 og median 8,20, høyere enn [78,86). Terskelen 78 deler ikke populasjonen. Den eneste binen som skiller seg negativt er [0,74).

3. Testen av regelen — den holder ikke

Ukessnitt (den faktiske påstanden): For hver ISO-uke: snitt-søvn den uka vs beste kvalitet ≥8,0.

Uke-snitt søvnn ukerP(minst én kvalitet ≥8)
<7838**0,50**
[78,82)350,54
[82,86)400,62
≥86730,70

19 av 38 uker med snitt-søvn <78 nådde likevel en kvalitet ≥8. Påstanden «aldri» er dermed direkte motbevist. Eksempler: uke 7/2024 (snitt 77,0 → best 9,4), uke 25/2026 (snitt 70,0 → best 9,2 — Seefeld-uka!), uke 52/2024 (snitt 74,5 → best 9,1).

Per-økt-separasjon: Beste enkelt-terskel for å skille score≥8 er 83, ikke 78 — og selv den er en elendig separator (Youden J=0,077, TPR 0,58 / FPR 0,50 — praktisk talt myntkast). Spearman søvn↔score: ρ=0,134 (p=0,013) — svak, men reell monoton sammenheng.

<78 vs ≥78: ikke signifikant (MWU p=0,082 énsidig). <74 vs ≥74: signifikant — snitt 7,05 vs 7,69, diff 0,65 poeng, 95 % bootstrap-CI [0,14–1,17], p=0,006 (10 000 resamples). Den ekte inflekssjonen er 74, ikke 78.

4. Konfunder-sjekk — søvn er en proxy for HRV

Multippel regresjon på øktene med komplett HRV+TSB (n=322):

```

session_score ~ søvn + HRV + TSB

søvn β = +0,0022 p = 0,825 ← ingen selvstendig effekt

HRV β = +0,0304 p < 0,001 ← den ekte driveren

TSB β = −0,0024 p = 0,602 ← ingen effekt

```

Søvnens tilsynelatende effekt forsvinner helt når HRV kontrolleres. Grunnen: netter med søvn <74 har lav HRV (snitt 55,7) mot 67,5 for ≥74. Søvn og HRV korrelerer r=0,718 (COACH_INSTRUCTIONS' eget tall). Søvnscoren bekrefter det HRV allerede sier — den legger ikke til uavhengig prediksjonskraft. Dette stemmer med COACH-dokumentets egen linje andre steder: «HRV og RHR er primære, søvnscore og stress_avg er bekreftende».

Gate-sammenligning (prediksjon av dårlig økt <7,0; base rate 0,25):

GateFyrerP(dårlig \fyrer)Recall
søvn<78 (dagens regel)600,330,25
søvn<74270,520,17
søvn<75 & HRV<60 (COACH abort)240,500,15
**HRV<55 alene**42**0,52****0,27**
søvn<74 ELLER HRV<55540,500,33

Dagens «<78»-gate fyrer på 60 økter men treffer bare 33 % — knapt over tilfeldig. HRV<55 alene er en bedre og enklere gate. Den kombinerte COACH-regelen «<75 & HRV<60 = abort» er god (50 % presisjon) — men det er HRV-leddet som bærer den.

5. FORSLAG til ny regel-tekst (krever Carl-godkjenning før COACH_INSTRUCTIONS endres)

Fjern setningen: «Søvnscore under 78 har i ukessnitt aldri sammenfalt med vellykket kvalitetsøkt.» (Empirisk feil: 19/38 lav-søvn-uker nådde ≥8; bandet [74,78) scorer høyere enn [78,86).)

Erstatt med (foreslått ordlyd):

> Søvnscore er en bekreftende markør for HRV, ikke en selvstendig kvalitets-prediktor. I data (n=340, 2022–2026) har søvn ingen uavhengig effekt på øktscore når HRV kontrolleres (β≈0, p=0,83); HRV er driveren (r_søvn↔HRV=0,72). Praktisk: én dårlig natt (<78) med god HRV er ikke grunn til å avlyse kvalitet — bandet 74–78 scorer på nivå med normalen. Den reelle inflekssjonen er <74, som i snitt koster ~0,6 tier-poeng (CI 0,14–1,17) — behandle som myk obs, ikke abort. Absolutt abort-kriterium forblir det kombinerte: søvn <75 OG HRV <60, eller HRV <55 alene (begge ~50 % treff på dårlig økt).

Rasjonale: endringen strammer ikke inn og løsner ikke opp beslutningsregelen der den fungerer (den HRV-baserte aborten står). Den fjerner bare en frittstående søvn-terskel som beviselig gir falske alarmer (33 % presisjon) og kunne fått Carl til å avlyse gode økter på en isolert dårlig natt.


Konsolideringslinje (til Carl / neste økt)

`Running_Report_Varmeadaptasjon-Italia_v1.md` — 4a: Italia-vinduet er høyde/reise/alkohol-konfundert; adaptasjonen (RHR −2/HRV +13 vs baseline) vises først sent på lav høyde + 33,5 km@25°C på HR 122 → modest/partiell (B−), ren måling utsettes til T2.5 (19.7), del 2-rammeverk lagt for Opus. 4b: «søvn <78 = aldri vellykket» er FEIL (19/38 lav-uker nådde ≥8; søvn β≈0 når HRV kontrolleres) → forslag: fjern regelen, søvn = bekreftende markør, myk obs ved <74, behold HRV-abort. COACH_INSTRUCTIONS uendret til Carl godkjenner.

PolariseringsindeksHva: Intensitetsfordeling (lav/terskel/høy) per æra — polarisert vs pyramidal.
Konklusjon: Retningsgivende fordeling per æra; grå-sone-drift kartlagt (æra-konfundert, konfidens per funn).
Opus2026-07-07
#intensitet#soner#polarisert

Polariseringsindeksen — er treningen polarisert eller pyramidal, og betyr det noe?

Dato: 2026-07-07 · Skrevet av: Claude (Opus 4.8, OPUS-SPOR-A fra TODO) · Grunnlag: `data/processed/activities.json` (2 081 løp etter cross-training-filter, sone-merket I1–I5), `data/processed/races.json` (PB-progresjon), `data/processed/training_blocks.json` (23 låste blokker), EF-motor fra samme easy-korpus som RC6. Ankere: F19 (volum-responder), F17/K3 (peak-CTL disponibel). Alt read-only; kun denne fila er skrevet (parallell-protokoll, SPOR A).


Hva dette er: Måler intensitetsfordelingen — lav (I1+I2) vs terskel (I3) vs høy (I4+I5) — per æra og per blokk, og stiller to spørsmål: (1) er Carl polarisert (Seiler: ~80 % lav, lite terskel, ~15 % høy) eller pyramidal (lav > terskel > høy)? (2) korrelerer miksen med formsprang? Svaret på (1) er entydig; svaret på (2) reframer hva spaken faktisk er.

Metode-noter (les før tallene):

1. Sonebøtter: Lav = I1+I2 (under LT1-området), Mid = I3 (LT1–LT2, terskel), Høy = I4+I5 (over LT2, VO2). Mapper mot Seilers 3-sonemodell (Z1/Z2/Z3). Vektet på løpsminutter (moving_time), med antall som støtte.

2. Viktigste forbehold — økt-primærsone, ikke sekund-for-sekund tid-i-sone. `activities.json` gir én sone per økt (klokkas/pace-klassifisering), ikke en HR-strøm-fordeling. En terskeløkt merket I3 i 70 min inneholder reelt ~20 min I1-oppvarming + I3-arbeidet. Ekte tid-i-sone ville derfor skjøvet Lav% oppover (mot ~85–90 %) og krympet Mid/Høy. Retningen (pyramidal, Mid>Høy) er robust mot dette; de absolutte prosentene overvurderer kvalitetsandelen. En sann polariseringstest krever strøm-parsing (655 `_stream.json`) — utenfor denne økta, foreslått som neste steg.

3. Æra-relative soner (§4.4): pace-grensene drifter mellom æraer; sone-klassifiseringen bruker periodens fysiologi (`zones.json`), så år er sammenlignbare på intensitet, ikke på absolutt pace.

4. Tynt, konfundert n: 6–7 hele år, alt monotont forbedret samtidig (F17/F20 æra-konfund). Korrelasjoner under er retningsgivende, ikke kausale. Konfidensgrad oppgitt per funn.


1. Polarisering per år — Carl er pyramidal, hvert eneste år

Andel av løpsminutter. H:M = høy dividert på terskel (<1 = mer terskel enn VO2 = pyramidal).

ÅrLav %Mid %Høy %H:MKlasseØkter L/M/H
202080,612,37,10,58pyramidal211/27/16
202181,113,94,90,36pyramidal193/32/13
202281,513,54,90,36pyramidal195/28/11
202375,914,89,40,63pyramidal234/38/26
**2024**72,8**19,3**7,90,41pyramidal272/**78**/30
202578,313,48,30,62pyramidal294/52/38
2026*74,717,97,40,41pyramidal139/32/14

*2026 delår. Konklusjon: H:M er <1 hvert år (0,36–0,63) — Carl gjør konsekvent MER terskel enn VO2. Det er definisjonen på pyramidal. Han er ikke polarisert i Seiler-forstand (som krever Høy ≈ Mid eller mer). Dette er den norske dobbel-terskel-modellen, ikke 80/5/15-polarisering.

To ting til fra tabellen: (a) 80/20-splittet lav:hard holder på øktnivå (~73–81 % lav) — det er «hard-delen» som er terskel-tung, ikke fraværet av lav. (b) Høy-enden vokste med æraen: 2020–22 ~5 % → 2023–26 ~8 %. VO2-arbeidet (bane/intervall fra 2023) kom inn samtidig med den beste motor-æraen.


2. Polarisering per blokk — samme bilde, uten unntak

Sone-minutter innenfor hver låste build-blokk (`training_blocks.json`):

BlkMålUkerLav %Mid %Høy %Klasse
1Trondheim M 20211675,424,10,5pyramidal
4Valencia M 20221174,814,011,1pyramidal (nær balansert)
5Paris M 20231678,621,40,0pyramidal (ren terskel)
6New York M 20231679,610,310,2pyramidal (nær balansert)
7København M 20241671,818,210,0pyramidal
8Berlin M 20241677,116,96,0pyramidal
10London M 20251675,915,98,2pyramidal
11Frankfurt M 20251682,614,92,5pyramidal
13Amsterdam M 20261659,232,38,5pyramidal (foreløpig)†

†Amsterdam-blokka startet 28.06.2026 — kun 10 økter inn i et 16-ukers bygg. Tidlig-bygg front-laster ofte kvalitet før rolig-volumet rampes; 59/32-miksen er et små-n-tidligbilde, ikke blokkens endelige profil. Overtolk den ikke ennå.

Ingen blokk er polarisert. De nærmeste balanserte (Høy ≈ Mid) er Valencia 2022 og NY 2023 — begge med bevisst VO2-innslag. Ren-terskel-ytterpunktene (Paris 2023, Valencia 2024) hadde ~0 % høy.


3. Korrelerer miksen med formsprang? Ja — men med kvalitets-VOLUM, ikke med ratio

Motor = EF (fra RC6). Utfallsdata:

ÅrEF10k-PBHM-PBM-PBPeak-CTL
20201,30342:071:36:0777
20221,32939:481:29:163:14:2896
20231,37639:261:27:523:09:07104
**2024**1,43538:38**2:56:37**115
**2025**1,472**37:23**1:24:22**2:53:06**106
20261,4791:21:1895

Korrelasjoner (år-nivå, n=6–7, retningsgivende):

  • Høy% vs EF: r=0,57 · Mid% vs EF: r=0,63 · (H:M-ratio) vs EF: r=0,16
  • ΔEF (år-mot-år) vs årets Høy%: r=0,69 · vs årets Mid%: r=0,33

Tolkningen som betyr noe: Det er absolutt kvalitets-/høyintensitets-volum som sporer motoren, ikke polariseringsgraden. H:M-ratioen — selve «hvor polarisert er du»-tallet — korrelerer ikke med form (r=0,16). Men mengden høyintensitet gjør det (ΔEF vs Høy% r=0,69). Reframe: spørsmålet er ikke «bli mer polarisert», det er «gjør nok kvalitet på en stabil rolig base». Det matcher F19 (volum-responder) og K3 (peak-CTL disponibel): spaken er kvalitet på en plattform, og plattformen er de rolige ~78 %.

Gjennombruddet 2024 illustrerer: det var et terskel-spike-år (Mid 19,3 %, 78 I3-økter — dobbel-terskel-æraen), ikke et polariserings-skifte. 2025 bygde videre med høy rolig-andel + stigende VO2 (Høy 8,3 %). De to beste motor-årene var terskel-pyramide + et VO2-dryss på toppen.


4. Funn

P1 — Carl er pyramidal, ikke polarisert. Entydig, hvert år og hver blokk. Konfidens: A (for retningen; B for de eksakte %-ene pga. økt-primærsone-metoden). H:M <1 uten unntak. Den polariserte 80/5/15-oppskriften beskriver ham ikke — han ligger ~78/14/8. Enhver coaching-input som forutsetter «polarisert» er feil anker.

P2 — 80/20 lav:hard holder på øktnivå; det er hard-miksen som er pyramidal. Konfidens: A. ~75–80 % av minuttene er lav (og ekte tid-i-sone ville gjort den enda høyere, metode-note 2). Debatten er ikke om basen er stor nok — den er det — men om kvalitets-delen skal vris fra terskel mot VO2. Data sier nei (P3).

P3 — Formsprang spores av absolutt høyintensitets-volum, ikke av polariseringsratio. Konfidens: C (n=6, æra-konfundert). ΔEF vs Høy% r=0,69; H:M vs EF r=0,16. Ikke jag ratioen som KPI — den betyr ingenting for formen din. Jag absolutt kvalitets-km på en bevart rolig base.

P4 — VO2-enden vokste da motoren tok av. Konfidens: C. Høy% 2020–22 ~5 % → 2023–26 ~8 %, sammenfallende med bane/intervall-innføringen og de største motor-årene. Et moderat VO2-dryss (I4/I5 ~8 %) på toppen av terskel-pyramiden er mønsteret i dine beste æraer — behold litt VO2 selv i maratonbygg.

P5 — Amsterdam-blokka trender mest terskel-tung noensinne (foreløpig). Konfidens: C. 32 % Mid på 10 økter er et tidlig-bygg-bilde, men verdt å overvåke: ikke la I3-volumet presse den rolige basen under ~75 % av minuttene (F19: aldri intensitet på bekostning av rolig-volum).


5. Hva dette betyr — praktisk

1. Slutt å spørre «burde jeg være mer polarisert». Du er pyramidal, og det virker (10k 42:07→37:23, maraton 3:14→2:53 på samme grunnform). Data sier: gjør nok kvalitet på en stabil rolig base — ikke flytt kvalitet fra terskel til VO2 for polariseringens skyld.

2. Vern de rolige ~78 % (F19). Økt-primærsone-metoden undervurderer allerede hvor rolig du er; ekte tid-i-sone er høyere. Ikke la Amsterdam-terskelblokka erodere den under ~75 % av minuttene.

3. Behold VO2-drysset. Motor-sprangene fulgte absolutt høyintensitets-volum; ~8 % I4/I5 på toppen av pyramiden er signaturen på 2024–25. Legg et lite VO2-innslag inn selv i maratonbygg — ikke bare terskel.

4. Ikke bruk polariseringsratioen som KPI. Den sporer ikke formen din (r=0,16). Spor absolutt kvalitets-km og rolig-% i stedet — det er de to tallene som betyr noe.

5. Vil du ha en ekte polariseringstest, trengs tid-i-sone fra strøm. Bygg en sone-tid-serie (fra `_stream.json`) inn i hubben — samme anbefaling som RC6s motor-trend-graf. Da blir både polarisering og reversibilitet synlig i sanntid, og de eksakte %-ene i §1 kan erstattes med HR-oppløste tall.


6. Usikkerhet

  • Økt-primærsone ≠ tid-i-sone (metode-note 2) — den enkeltstørste feilkilden. Retningen (pyramidal) tåler det; de absolutte %-ene overvurderer kvalitetsandelen. Strøm-parsing er neste steg.
  • Æra-konfund: intensitetsmiks, volum, vekt, sko og kunnskap flyttet seg samtidig 2019→2026. Korrelasjonene i §3 kan ikke dekomponeres kausalt (n=6).
  • Sone-labels er HR/pace-klassifisering per æra, ikke laktat-verifisert sone-tid. LT-grensene er stabile bakover; pace-grensene drifter (§4.4) — derfor æra-relativ lesing.
  • Amsterdam-blokka er partiell (10 økter) — P5 er foreløpig.
  • PB-tabellen bruker `duration_s` der offisiell tid mangler i `races.json`; HM/M-verdiene matcher About_me/Kontinuitet, men enkelt-løp kan avvike noen sekunder fra offisiell tid.

Bygger på F19/F17. Alle sone-, EF- og PB-tall er regnet fra `activities.json`, `races.json` og `training_blocks.json` i denne økta — ingen er antatt. Der metoden overvurderer kvalitetsandelen (økt-primærsone) eller n er tynt, er det merket med konfidens B/C.

Modellforbedring + blokkanalyseHva: Uavhengig gjennomgang av prediksjonsmodellen (postM-vindu, effort_b, CI-kvantiler, heat-prior, risk_flags).
Konklusjon: LOO 1,97→1,59 % (T-14 1,27 %); grunnlaget for MOD-1..5 og blokk-monitoren.
Fable2026-07-03
#modell#MOD-1-5#blokk#LOO

Modellforbedring + blokkanalyse — uavhengig gjennomgang

Dato: 2026-07-03 · Skrevet av: Claude (Fable) · Grunnlag: alle 34 løp, 13 treningsblokker, quality.json (609 økter), wellness, illness, biometrics, LOO-resultater i `race_predict_model.json`

Alt under er testet med samme leave-one-race-out-metodikk som modellen selv bruker (`race_predict.loo_validate`), på dagens datasett. Ingen filer i pipelinen er endret — dette er analyse + forslag.


1. Hovedresultat

Dagens modell reproduserer til MAE 1,97 % (alle snapshots) / 1,80 % (T-14). To validerte endringer tar den til 1,59 % / 1,27 % — målt på samme løpssett (27 A-løp):

VariantMAE alleT-1410k T-14HM T-14M T-14
Dagens modell1,78 %1,59 %2,02 %1,27 %1,38 %
+ post-maraton-vindu1,69 %1,44 %1,66 %1,30 %1,38 %
+ B-løp ut av kalibrering**1,59 %****1,27 %****1,39 %**1,30 %**1,12 %**

Dokumentets påstand om at «grensen er data, ikke modell» var nesten riktig — men to systematiske feilkilder lå igjen i dataene, ikke i featurene.


2. Funn 1 — post-maraton-vinduet (validert, anbefales inn)

Alle korte løp 15–45 dager etter et maraton underpresterer mot modellen. Mønsteret er komplett og entydig i historikken:

DatoLøpDager etter MFeil vs modell
2022-05-21Nidaros 10k (13 d etter Barcelona)13±0,0 %
2024-05-25Nidaros 10k (etter København)20−2,6 %
2025-05-24Nidaros 10k (etter London)27**−7,7 %**
2023-05-09Tordenskiold 10k (etter Paris)37−3,5 %
2025-06-07Sommernattsløpet (etter London)41−1,4 %
2023-06-03Nidaros 10k (etter Paris)62+1,8 %

Fra 49+ dager er effekten borte. Fysiologisk velkjent (restitusjonsgjeld etter maraton), og featuren er kjent på forhånd — begge datoer ligger i kalenderen. Implementert som dummy (5k/10k, 15–45 d etter M) gir den β = +0,041 → +4,2 % pace-straff i vinduet, og 10k-presisjonen bedres 2,02 → 1,66 % uten å røre HM/M. Samme klasse funn som terskeldosen: ferskhet, ikke fitness.

Planleggingsregel av samme funn: ikke legg A-innsats på 10k i uke 2–6 etter maraton. 13 dager gikk bra (fortsatt taper-frisk); 3–6 uker er dødsonen.

3. Funn 2 — B-løp forurenser kalibreringen

De to største positive residualene er ikke-maksimale løp som i dag former fitten: «Halvmaraton med TOSK» 2022 (+4,5 %) og solo-10k mai 2020 (+4,8 %, tempomål sub-45). `EXCLUDE_FIT` har allerede prinsippet (Familiehalv, skogsmaraton) — det er bare ikke ført konsekvent. Å ta disse to ut av kalibreringen (de kan fortsatt predikeres) gir resten av forbedringen i tabellen over, inkludert M 1,38 → 1,12 %.

Forslag: et `effort`-felt i `race_overrides.json` (A = maksimal / B = tempo/sosial), så `EXCLUDE_FIT` bygges fra data i stedet for hardkodede datoer. Du bekrefter klassifiseringen én gang — jeg har bare funnet to kandidater, men du kjenner løpene.

4. Funn 3 — konfidensintervallene er ikke kalibrert

De globale split-normal-faktorene (0,65/1,15) treffer ikke per kategori. Empirisk dekning av «95 %»-intervallet (LOO T≤28): 10k 85 %, HM 83 %, M 100 %. Skjevheten går til og med motsatt vei for HM (oppsiden er tyngst) enn for 10k (nedsiden). Empiriske 90 %-kvantiler per kategori, anbefalt variant:

Katn90 %-intervall (feil i %)
10k33−5,6 … +3,3
HM24−3,6 … +3,6
M30−2,4 … +1,4

Forslag: erstatt de faste faktorene med empiriske kvantiler per kategori (split-konform prediksjon). Ingen nye parametre å fitte, alltid kalibrert per definisjon, og P(mål) leses av samme fordeling. Merk hva M-raden faktisk sier: når formen og blokka er på plass, leverer du maraton innenfor −2,4/+1,4 % — nedsiderisikoen i maraton er nesten utelukkende hendelser (varme, sykdom), ikke formusikkerhet.

5. Funn 4 — heat-featuren måler feil ting

`temp_c` er temperatur ved starttidspunkt. Et maraton varer 3 timer. London 2025: 12,6° lagret — 15,6° snitt underveis, 18,1° på det verste (time-arkivet bekrefter). Derfor er heat-koeffisienten i praksis null (β = +0,005 på skalert ledd ≈ 0,04 %/°C), og modellen er blind for varme — den eneste faktoren som historisk har kostet deg 11 % (London, +18,3 % fade i 2. halvdel, HR-kollaps −11 %).

Forslag i to trinn: (1) backfill race-vær som tidsvektet snitt over løpsvinduet på by-koordinater (Open-Meteo archive, samme klient som pipelinen alt bruker — ~30 kall, én gang), (2) re-fit; hvis n fortsatt er for tynt til å lære varme fra data (sannsynlig — du har klokt unngått varmeløp), legg inn litteratur-prior i stedet for fitting: ~0,2–0,3 %/°C over ~13° effektiv for M, avtagende for kortere løp. Da blir Amsterdam-prognosen ærlig også i et 18°-scenario, og prediksjon.html kan vise «ved 11° / ved 16° / ved 20°».

6. Testet og forkastet (så ingen leter her igjen)

I samme LOO-harnisk, dokumentert i §6-ånden til PREDICTION_MODEL.md: høyde per løp (Strava-elevasjon for støyende, ankeret absorberer løypeprofil; 1,97→1,99 %), recency-vekting av løp i fit (verre ved alle halveringstider 365–1095 d), HRV-CV som regresjonsfeature (T-14 verre, 1,59→1,69), dag-før-HRV som punktjustering av prediksjonen (LOO 1,53→1,70 — bekrefter readiness-funnet deres). Vekt/søvn/RHR var alt forkastet og ingenting i denne analysen utfordrer det.

Men dag-før-HRV er ikke verdiløs — den er et risiko-signal, ikke et nivå-signal:

Dag-før-HRV vs 4-ukers baselineSnittfeil vs modell
Laveste tertil (Δ −22 %)−0,97 %
Midt−0,43 %
Høyeste tertil (Δ +10 %)+0,18 %

Alle tre løpene med Δ ≤ −10 % (Paris −25,6 %, Sommernattsløpet, Nidaros-25) endte under prediksjon. Forslag: race-eve-flagg på prediksjon.html — HRV ≥10 % under baseline, sykdomsdager siste 14 d, eller postM-vindu → «forhøyet nedsiderisiko, sikt mot nedre CI» — uten å flytte punktprediksjonen.


7. Blokkanalysen — hva som faktisk korrelerer med resultat

Alle 10 maratonblokker med utfall, sortert etter «slo modellen» (err T-14):

BlokkTidvs modellkm/ukval-km/u30k+MP-kmøktscorelangtur-scoredcpsykedager
Oslo 20223:19:48+1,2 %64821065,977,562,13
Valencia 20242:56:37+0,8 %86235807,898,160,72
København 20242:59:20+0,2 %9224101258,148,431,41
Berlin 20242:59:41+0,1 %872581598,128,191,90
Barcelona 20223:25:19−0,7 %475205,427,66−0,52
Valencia 20223:14:28−1,6 %62134726,327,553,50
Trondheim 20213:30:07−1,7 %615665,667,961,20
Paris 20233:21:03−2,2 %3863256,157,12−0,3**11**
Frankfurt 20252:53:06−2,4 %9821131787,578,622,1**7**
New York 20233:09:07−3,0 %711761717,47**7,01****3,1**0

To utfallsmål, to historier:

Total formgevinst gjennom blokka (10k-ekv ved race vs anker ved T-84) følger dose nesten monotont: km/u r=+0,92, peak CTL +0,84, kvalitets-km/u +0,82, snitt øktscore +0,79, antall økter ≥8 +0,75, MP-km på langtur +0,70, antall 30k+ +0,67. Delvis era-konfundert (2024–25-blokkene er bedre på alt samtidig), men retningen er utvetydig: volum + kvalitetsdose bygger formen; det finnes ingen snarvei i dine data.

Å slå modellen på dagen (err T-14, der inngangsform alt er kontrollert for) handler derimot ikke om dose — det handler om fravær av forstyrrelse og kvalitet på det spesifikke:

  • De tre største underprestasjonene har hver sin tydelige årsak: Paris = 11 sykedager (mest av alle blokker) + lavest volum. Frankfurt = 7 sykedager, hvorav 2 siste 14 døgn — beste maraton (2:53), men blokka (98 km/u, 13×30k+, 178 MP-km) tilsa ~2:49. New York = dårligst langtur-kvalitet (score 7,01) og høyest decoupling (3,1) tross stor kvalitetsdose — langturenes utførelse, ikke antall, sviktet.
  • Sub-3-laget (København, Berlin, Valencia 24, Frankfurt) deler en presis oppskrift: ≥85 km/u snitt, 21–25 kvalitets-km/u, 5–13 langturer 30k+, 80–178 MP-km, snitt øktscore ≥7,5, langtur-score ≥8,1, peak CTL 106–115, race-TSB +37–54, ≤2 sykedager siste 6 uker.
  • HRV-CV siste 6 uker før racet korrelerer r=−0,82 (n=7) med å slå modellen — jo roligere HRV-en svinger inn mot løpet, jo bedre. Som featuretest overlever den ikke (se §6), men som taper-KPI er den gratis: CV skal falle gjennom taper.
  • Pacing er ikke problemet ditt: 9 av 10 maraton innenfor −1,2…+5,2 % fade (Frankfurt negativ split). Unntaket er London (heat), som er et vær/hendelses-problem, ikke et utførelsesproblem.

8. Anbefalinger, prioritert

Nå (før Amsterdam-blokka spikres):

1. postM-vindu-featuren inn i `race_predict.py` (~10 linjer, `_dsm` fra races.json). Validert: 10k T-14 2,02→1,66 %.

2. `effort`-tag i `race_overrides.json` + EXCLUDE_FIT fra data. Validert: samlet 1,69→1,59 %. Krever bare din bekreftelse på A/B per løp.

3. Empiriske CI-kvantiler per kategori i `race_outlook.py` (erstatt 0,65/1,15). Gir ærlig P(mål) — dagens 10k/HM-intervaller er for smale.

4. Race-vær-backfill + heat-prior (`backfill_race_weather.py`, én gang + re-fit). Gjør varme-scenarier for Amsterdam/Energimila reelle.

5. Race-eve-flagg på prediksjon.html: HRV-delta ≤ −10 %, sykdom siste 14 d, postM-vindu → «sikt mot nedre CI». Ingen endring i punktprediksjon.

Amsterdam-blokka (styring, ikke modell):

6. Blokk-monitor på hub-en: live måling av inneværende blokk mot sub-3-oppskriften i §7 (km/u, kval-km/u, 30k+-tellere, MP-km, øktscore-snitt, sykedager, HRV-CV-trend). Dagens status: km 4u = 366 (≈91/u) og CTL 89,7 — du ligger alt på oppskriftens bane; peak-CTL-målet (106–115) og 13×30k+ à la Frankfurt er det som gjenstår utover høsten. Merk Frankfurt-lærdommen: oppskriften tåler ikke sykdom — helle mot 2024-dosen (87–92 km/u) med bedre søvn/restitusjonsdisiplin er trolig raskere enn Frankfurt-dosen med 7 sykedager.

7. Langtur-kvalitet som eksplisitt mål: NY-caset viser at 30k+-antall ikke er nok — hold langtur-score ≥8 og decoupling <2 % som blokk-krav, ikke bare volum.

8. Tune-up-plassering: København HM (T-28 for Amsterdam) fungerer som anker-løp for modellen — perfekt plassert. Ingen 10k-A-innsats mellom Amsterdam og ev. senmaraton våren 2027 i uke 2–6.

Senere (2027+, når n vokser):

9. Banister-simulering av planlagt blokk: projeksjonen bruker i dag flat gjenvinning + 0,5 %. Med `training_plan_daily.json` som input kan framskrivingen kjøre impuls-respons på planlagt last → «hva gjør ±10 km/u med Amsterdam-prognosen». Størst verdi av alt på coaching-siden, middels jobb.

10. Per-distanse koeffisienter + laktat-Kalman-kilde — som alt planlagt i PREDICTION_MODEL §9; postM-featuren gjør per-distanse-splitten mindre presserende.

11. Kuratert løypeprofil-tabell (offisiell høydemeter per løp) hvis dere vil re-teste høyde — Strava-elevasjon er ubrukelig som feature (Frankfurt «551 m»).

Datahygiene (småplukk): 4 løp mangler `_data.json`/starttid (RACE-1 i TODO — trengs også for vær-backfill), og ~50 `quality.json.bak_progdetect_*` (~280 MB) kan arkiveres.


9. Ærlighetsnotat

n = 29 kalibrerbare løp. postM-vinduet hviler på 5–6 observasjoner med komplett mønster og klar fysiologi — validert i LOO, men følg med de neste 2–3 post-M-løpene. Blokk-korrelasjonene (n = 10) er rangeringer, ikke bevis; era-konfundering er reell for dose-funnene, mindre for sykdoms-/kvalitetsfunnene som virker innen era. Wellness-nivåer, vekt, styrkevolum og alkohol viste ingen sammenheng med utfall i noen av analysene — konsistent med det dere alt har forkastet.

Livstids-PR-horisonten 2026–2035Hva: Age-graded bane per distanse + når PB-vinduene topper.
Konklusjon: Motoren ligger foran maratonen (HM → 2:49); 2:45 er en 2028–29-sak (44–45 år).
Fable2026-07-07
#prognose#alder#2:45#AG%

Livstids-PR-horisonten 2026–2035

FABLE-18 · skrevet 2026-07-07 · Kilder: `races.json` (34 race-entries, PB-baner 2019→2026) · `zones.json` (physiology_by_period + lab-anker Granåsen 24.02.2026) · `oxygen_capacity.json` (career_projection v2) · `lactate_log.json` · ankere: F17 Syvårs-syntesen v2 (§1 nivåbanen, §3 mekanisme-rangering, §5 Riegel+alderslinje, §6 formene A/B/C). Age-grading beregnet fra WMA 2020 male road-tabeller (Alan Jones / USATF-MLDR, godkjent 2020-05-20 — se §1). Alt read-only; kun denne fila er skrevet (parallellprotokoll).

Ramme: dette er en ekstrapolering forbi materialet. Ingen maraton er løpt på under 2:53, ingen HM under 1:21; aldersbrems er antatt-kommende, ikke observert. Alderskurvene hviler på litteratur (WMA-tabeller, VO2-aldring 0,7 %/år), ikke på Carls egne data — han har ennå ikke løpt lenge nok som masters til å ha en egen aldringskurve. Alt operativt for høsten bor i Blokkplan v3 og røres ikke her; dette er horisont-arbeid til 2027-valget etter Amsterdam.


0. Kortversjon

Carl er fortsatt på vei OPP i age-graded prosent på alle tre distanser — uten synlig avmatning. Hver distanses ferskeste PB er også dens høyeste AG% noensinne, og stegene er fremdeles +2 til +3,7 poeng. Nåværende nivå: 10k 75,1 % · HM 75,9 % · maraton 74,7 % (WMA 2020). Det plasserer ham i øvre sjikt av «sterk regional/klubb» og på vei mot 80 %-terskelen som konvensjonelt kalles nasjonal masters-klasse. Aldersgraderingen ser altså ingen topp ennå — banen peker oppover inn i aldersvinduet, ikke ut av det.

Den viktigste enkeltavlesningen: motoren ligger foran maratonen. Berlin-HM 1:21:19 projiserer via Riegel til en 2:49:32-maraton; 10k-en (37:23) til 2:51:58. Han har allerede løpt 2:53:06. Med andre ord: kortdistanse-nivået sier at en sub-2:50-maraton allerede ligger i beina — det som mangler er ikke tak (VO2/terskel), men maraton-realisering (durability × utførelse). Dette er nøyaktig F17 §3s M4-tese, nå kvantifisert fra PB-siden.

2:45-banen: 2:45:00 krever AG ≈ 79,4 % ved 43 / 80,0 % ved 44. Carl er på 74,7 % og legger på ~2 poeng/år. To til to-og-et-halvt år av dagens AG-stigning lander på 79–80 % — dvs. 2028–2029, alder 44–45, akkurat i enden av peak-vinduet (VO2-modellen setter peak-window-slutt til 46). 2:45 er ikke neste steg; det er steget etter sub-2:50, og det er innen rekkevidde hvis motoren holder og maraton-realiseringen tetter gapet til motoren.

PB-vinduene lukker seg i rekkefølge kort→lang, men maratonen topper SIST. 10k/HM er VO2-drevne og topper først (nå→~44); maratonen er durability-drevet, og durability bygges fortsatt — så maraton-PB-vinduet åpner senere og varer lengst, sannsynlig topp 2028–2029. Sub-2:50 er holdbart til ~46–47 hvis kontinuiteten (F17s friske uker + F15s immunvern) holder — men det er den delen av svaret som ekstrapolerer lengst.


1. Metode, kilder og hva du kan stole på

Age-grading oversetter en tid til «hvor nær verdens-standarden for kjønn+alder» den er, slik at prestasjoner på tvers av alder og distanse blir sammenlignbare. Konvensjon: `AG% = alders-standard(alder, distanse) / faktisk tid`, ekvivalent med `verdens-standard(open) / (faktisk tid × aldersfaktor)`. Aldersfaktoren multipliseres med tiden for å gi en «open-ekvivalent» (hva tiden tilsvarer i 20–30-årsalder).

Kilde og utgave: WMA 2020 Long Distance Running-tabeller, utviklet av Alan Jones og Tom Bernhard, godkjent av USA Track & Field Masters Long Distance Running Council 20.05.2020 (repo: `github.com/AlanLyttonJones/Age-Grade-Tables`, `2020 Files/MaleRoadStd2020`). Dette er den samme utgaven Howard Grubbs offisielle MLDR-kalkulator bruker. En 2025-utgave finnes nå (godkjent 2025-01-10) og gir marginalt andre absoluttverdier; jeg bruker 2020 for stabilitet gjennom hele karrieren.

Verdiene jeg regner med (eksplisitt, så de kan verifiseres):

StørrelseVerdiMerknad
Open-standard 10k26:24Herrer, 2020-utgaven (Kipruto-æra)
Open-standard HM58:01Herrer, pre-mai-2020 WR (Kamworor 2019)
Open-standard maraton2:01:39Herrer, Kipchoge Berlin 2018
Aldersfaktor (unifisert utholdenhets-road-kurve)35: 0,975 · 38: 0,958 · 40: 0,947 · 41: 0,941 · 42: 0,934 · 43: 0,928 · 45: 0,915Enkelt-alder, herrer

Presisjonsforbehold (les dette før du bruker tallene): (1) Jeg bruker én unifisert herre-utholdenhetskurve; de ekte tabellene skiller 10k/HM/maraton med <0,004 i faktor i dette aldersspennet, så event-forskjellen flytter AG% <0,4 poeng. (2) Absoluttnivået på AG% bærer ~±1 poeng fra utgave- og interpolasjonsvalg. (3) Trenden er robust for alt dette — Carls forbedringer er 11–22 % per distanse, mens aldersstraffen er ~0,5–0,6 %/år, så «fortsatt på vei opp» endres ikke av faktor-slingring på andre desimal. Bruk AG%-nivåene som omtrentlige (±1 pkt) og AG%-banen som sikker.

Alder regnes som fylte år på løpsdagen (født 17.07.1984). Offisielle brikketider brukt der beskrivelsen oppgir dem (f.eks. HM 1:35:36, maraton 2:53:06). Fysiologi-ankeret er lab Granåsen 24.02.2026: VO2maks 61,7 · LT2 3:49@169 (3,3 mmol) · LT1 4:12@159 · HRmax 186.


2. AG%-banen — er han fortsatt på vei OPP?

Ja, entydig. Under er age-graded prosent for hver PB-settende prestasjon per distanse. Legg merke til at hver distanses siste rad er dens høyeste AG% — det finnes ingen intern topp ennå, og differansene (siste kolonne) viser ingen systematisk avtagning.

10k (open-std 26:24):

DatoAlderTidAG%Δ
2020-10-163642:0764,7 %
2023-06-033839:5269,1 %+4,4
2023-09-163939:2670,3 %+1,2
2024-03-223938:3871,7 %+1,5
2025-06-074038:2572,6 %+0,9
**2025-08-13****41****37:23****75,1 %****+2,5**

Halvmaraton (open-std 58:01):

DatoAlderTidAG%Δ
2019-09-07351:44:4256,8 %
2020-10-30361:35:3662,6 %+5,8
2021-08-08371:33:4564,2 %+1,6
2022-11-05381:29:1667,8 %+3,6
2023-09-02391:27:4969,4 %+1,5
2025-09-06411:24:2473,1 %+3,7
**2026-03-29****41****1:21:19****75,9 %****+2,8**

Maraton (open-std 2:01:39):

DatoAlderTidAG%Δ
2021-09-04373:30:0760,1 %
2022-05-08373:25:1961,5 %+1,4
2022-09-17383:19:4863,5 %+2,1
2022-12-04383:14:2365,3 %+1,8
2023-11-05393:09:0267,6 %+2,3
2024-05-05392:59:1171,3 %+3,7
2024-12-01402:56:3772,8 %+1,5
**2025-10-26****41****2:53:06****74,7 %****+2,0**

Tre avlesninger:

(a) Banen er monoton og fortsatt bratt. Over seks–sju år stiger AG% ~2–3 poeng i året på hver distanse, og det ferskeste steget er ikke mindre enn snittet (maraton +2,0, HM +2,8, 10k +2,5). En atlet som nærmer seg sitt tak, får krympende AG-steg først — det ser vi ikke. Aldersgraderingen sier at Carl fortsatt er i en oppbyggingsfase, ikke en platåfase, selv ved 42.

(b) Nivået nå ≈ 75 %, terskelen han nærmer seg er 80 %. WMA-konvensjonen: 60 % lokal, 70 % regional, 80 % nasjonal klasse, 90 %+ internasjonal/verdensklasse. Carl på 74,7–75,9 % er solid regional/sterk klubb, ~4–5 poeng under nasjonal masters-klasse. Det er ikke langt — på dagens stigningstakt er 80 % ~2 år unna, og 80 % AG er nettopp det 2:45/1:19/35:5x-nivået krever (§4).

(c) HM leder AG-tabellen, maraton ligger bakerst — og det er diagnostisk. At HM (75,9) ligger foran maraton (74,7) på AG% er ikke tilfeldig støy; det er det samme signalet som Riegel gir i §3: motoren er lenger fremme enn maraton-realiseringen. Distansen med mest hodrom er den som skal bygges — men den bygges via de andre to.


3. Hvilken distanse er beskrankningen NÅ — Riegel-krysslesning

F17 §5 slår fast at Carl passerte Riegel-modenhet mellom NY-23 og Kbh-24: maratontiden er siden ≈ 10k-Riegel-1,06, betinget på langtur-plattformen. Vi kan bruke det motsatt vei — projisere dagens kortdistanse-PB-er til maraton og se hvor maratonen burde ligge:

Utgangspunkt (PB)Riegel k=1,06 → maraton
Berlin HM 1:21:19**2:49:32**
EnergiMila 10k 37:232:51:58
Faktisk maraton-PB2:53:06

Maratonen ligger 1,5–3,5 minutter bak det motoren tilsier. To lesninger, begge peker samme vei:

  • Motoren (VO2/terskel) er ikke beskrankningen for sub-2:50. HM-en sier 2:49 allerede finnes. Dette bekrefter F17 M3 (hele 2:59→2:53-steget var effektivitet, ikke tak) og F17 M1 (over volumplattformen slutter dose å forklare utfall).
  • Beskrankningen er maraton-spesifikk realisering: durability over 32+ km × P4-utførelse på dagen × friske uker inn i løpet. Det er «yngste mekanisme» i F17 (M4, 2025–26), og den er fortsatt under bygging — hvilket er godt nytt for horisonten: den spaken er ikke uttømt.

Konsekvens for PB-vinduene: maratonen har mest urealisert potensial akkurat nå, men henter det ikke inn ved mer maraton-volum — den henter det ved (i) å skjerpe motoren enda et hakk (3:45-terskel, jf. F9) så Riegel-utgangspunktet blir raskere, og (ii) å realisere det motoren allerede gir. Amsterdam er den første testen på om gapet lukkes.


4. PB-vindu-kartet per distanse + livstids-topp

Prinsippet som strukturerer vinduene: kortere distanser er mer VO2-drevne og topper først; maratonen er mer durability-drevet og topper sist. VO2maks aldres (~0,7 %/år, litteratur), men durability og løpsøkonomi kan fortsatt forbedres i 40-åra — derfor forskyves maraton-toppen bakover relativt til 10k. Carls VO2 61,7 @ 41,6 (målt under forkjølelse; lab-notatet anslår reelt hvilt nivå 63–65) gir en reserve maraton-nivået ikke bruker opp — gapet er durability/effektivitet, ikke tak (F17 §5).

DistanseAG% nåVindu åpentSannsynlig toppLivstids-estimat (konfidens)Hva den er begrenset av
**10k**75,1 %2026–2028 (42–44)**35:30–36:00** (M)VO2 — topper først, mest aldersfølsom
**HM**75,9 %2027–2028 (43–44)**1:18–1:19** (M)VO2 × terskel-durability
**Maraton**74,7 %nå (åpner bredest)2028–2029 (44–45)**2:45–2:47** (M/M-)Durability × realisering — topper sist, lengst runway

Konfidens-koding: M = middels (ekstrapolering på 1–2 år langs en etablert bane) · M- = middels-lav (3+ år ut, forutsetter at durability-spaken leverer og helsa holder).

Livstids-topp, samlet dom: På fortsatt-progresjon-scenariet (§5) ligger Carls livstids-topper rundt 10k 35:4x · HM 1:18–1:19 · maraton 2:45–2:47, alle i vinduet 2027–2029 (alder 43–45), alle krevende AG ~79–80 % (nasjonal masters-klasse). Dette er ikke en spådom om at han når dem — det er hva dagens bane peker mot hvis den fortsetter uendret, noe ingen bane gjør i det uendelige.

Kryssvalidering mot systemets egen modell: `oxygen_capacity.json` (career_projection v2, uavhengig av min age-grading) setter status-quo-maraton til 2:49:42 (2027) → ~2:51 (2028–30), og «optimalisert jern+D-vitamin»-scenariet til 2:46 holdt 2027–2030, med peak-window-slutt alder 46. Min Riegel-baserte 2:49-latent-nå og 2:45-mot-2028-29 ligger inne i dette spennet — to uavhengige metoder brakketterer altså 2:45–2:50 for de neste fire årene. Det styrker dommen. (D-vitamin/ferritin som løftespak hører til F23 og forfølges ikke her, men modellen antyder at det er verdt ~3 min på maraton — et reelt, ikke-treningsmessig håndtak.)

Sub-2:50-nivåets varighet. To regnestykker rammer det inn:

  • Holder han en fast maratontid, stiger AG% med alderen (2:50 = 76,1 % ved 41 → 78,2 % ved 45) — dvs. samme tid blir en «bedre» prestasjon jo eldre han blir.
  • Holder han dagens maraton-form (~75,5 % AG), driver den ekvivalente tiden utover: 2:52 (42) → 2:54 (43) → 2:56 (45). Ren alder koster altså ~1:10/år på maratontiden ved konstant AG%.

Kombinert: sub-2:50 krever ~76,6 % AG ved 42, stigende til ~78 % ved 45. Carl er 74,7 % og stiger ~2/år. Sub-2:50 er derfor «neste steg» (2026–2027), og deretter holdbart gjennom minst midten av 40-åra — så lenge AG% bare holder stand mot aldringen, hvilket krever at durability/realisering fortsetter å hente inn det VO2-aldringen taper. Konkret: sub-2:50 bør vare fra første innfrielse til ~46–47 (2031–2032), altså ~5 år, forutsatt kontinuitet. Dette er svaret som ekstrapolerer lengst og skal leses med det forbeholdet (§7).


5. Tre scenarier med konfidens

Framskrivingene under bruker VO2-aldring 0,7 %/år (litteratur, `oxygen_capacity.json` konstant) som ryggrad, med durability-banen som det som skiller scenariene. Alle er betinget på F17s ikke-forhandlbare: vinter-motor-blokka og immun-vernet (F15) i race-ukene.

Scenario A — Fortsatt progresjon (konfidens: middels). AG% fortsetter ~+1,5–2/år i 1–2 år til, så flater det mot 79–80 %. Motoren skjerpes til 3:45-terskel (F9 sein-blokk-dose), Riegel-utgangspunktet blir 1:19/35:5x, maraton-realiseringen lukker gapet. Bane: sub-2:50 høsten 2026/våren 2027 → 2:47–2:48 sent 2027 → 2:45-forsøk 2028–2029 (44–45). HM 1:18–1:19, 10k 35:4x i samme vindu. Dette er scenariet dagens data faktisk peker mot — men det forutsetter at ingen av de tre siste PB-stegene var toppen, og de kan ikke vite det ennå.

Scenario B — Platå (konfidens: middels). AG% topper ~76–77 % i 2026–2027 og holder der. Motoren har levert det den skal; maraton-realiseringen tetter gapet til motoren, men motoren flytter seg ikke mer. Bane: sub-2:50 nås (~2:48–2:50) og blir livstids-maratonen, HM stabiliserer ~1:20, 10k ~36:3x. 2:45 nås ikke — kravet (79–80 % AG) ligger over platået. Dette er det «nøkterne» utfallet: han realiserer motoren han har, men får ikke en ny motor-generasjon. Fullt respektabelt — 2:48–2:50 ved 42–44 er sterke masters-tider.

Scenario C — Aldersnorm slår inn (konfidens: lav-middels). VO2-aldringen begynner å bite før durability rekker å kompensere; AG% flater nå og begynner svakt fallende ~2028+. Bane: 2:53 (Frankfurt) står som livstids-maraton, sub-2:50 nås knapt eller glipper, og fokus skifter til å forsvare nivået (holde AG% mot aldringen). Utløsere som ville peke hit: en ny infeksjonstung sesong (F15), tap av kontinuitet (F17s friske uker), eller at 41-årsstegene faktisk var toppen. Ingenting i materialet varsler dette ennå — men fraværet av en observert aldersbrems betyr bare at den er uobservert, ikke at den ikke kommer.

Vekting: Data i dag favoriserer A/B over C — AG-banen er fortsatt oppadgående uten avmatning, og motoren ligger foran maratonen (urealisert potensial finnes). Men A vs B avgjøres av noe vi ikke har sett ennå: om Carl har ett motor-løft til i seg (3:55→3:45-terskel som holder), eller om Berlin-HM-nivået var motorens tak. Amsterdam + lab-retest aug/sep 2026 er de neste to datapunktene som skiller A fra B.


6. Implikasjoner for 2027-formvalget (A/B/C fra F17 §6)

F18-analysen gir én tydelig styringsinput til de tre kandidat-formene i F17 §6: motoren (10k/HM) ligger foran maratonen, så beskrankningen mot 2:45 er maraton-realisering, ikke motor-bygging. Det vrir prioriteringen:

  • Form A (gjenta 2026-malen: vinter-motor → vår-HM-sertifikat → høst-A-maraton) — favorisert av F18. Fordi motoren allerede projiserer 2:49-latent, gir én velbygd høst-maraton med motoren skjerpet av en vår-HM mest igjen for 2:45-banen. F18s tallgrunnlag sier at det som mangler er maraton-realisering på et modent motor-fundament — nøyaktig det Form A leverer. Mål-sone 2:45–2:48 høsten 2027 er i tråd med fortsatt-progresjon-scenariet.
  • Form C (motor-året, maraton hviler) — mindre nødvendig enn den ser ut, men billigste vei til selve 2:45-motoren. Riegel sier motoren ikke er den akutte beskrankningen (den ligger foran), så et rent motor-år løser ikke det som lagger (maraton-realisering). MEN: 2:45 krever til slutt 1:19/35:5x uansett, og et motor-år minimerer infeksjons-eksponering (færre A-maraton, F15). Form C er altså riktig hvis Amsterdam avslører at motoren likevel er taket (mot forventning), eller hvis høsten koster en ny infeksjonsrunde.
  • Form B (2024-malen, 2–3 cappede maraton på høy base) — mest racecraft, men flest eksponeringsvinduer. F18 legger til ett moment: hver ekstra A-maraton er ikke bare en F15-eksponering, men også et AG-realiserings-forsøk. Flere maraton = flere sjanser til å lukke det 1,5–3,5-min Riegel-gapet — verdifullt hvis gapet skyldes utførelses-varians (London-dagsformen) heller enn kapasitet. Men prisen (F15s infeksjonsvinduer, forsterket ved 42–43) står ved lag.

Samlet F18-anbefaling til 2027-valget (avgjøres endelig av Amsterdam-fasiten): default mot Form A — den matcher der beskrankningen faktisk ligger. Hold Form C som fallback hvis Amsterdam eller aug/sep-labben viser at motoren er taket. Reserver Form B for scenariet der utførelses-varians, ikke kapasitet, er det som skiller Carl fra en 2:49 — da kjøper flere forsøk ned variansen. Alle tre forutsetter vinter-basen 2026/27 og immun-vernet i race-ukene; de er de best dokumenterte investeringene i materialet (F17 §6).


7. Ærlighetsnotat

Dette er den mest ekstrapolerende rapporten i serien, og det skal sies rett ut. Kildene (races/zones/lab) er solide og målte; framskrivingene er det ikke. Konkret:

  • Aldringskurven er lånt, ikke Carls egen. WMA-faktorene og 0,7 %/år-VO2-aldringen er populasjonslitteratur. Carl har vært masters-løper i praksis siden ~2021 og har ennå ikke produsert nok år med fallende form til å vise sin egen aldringstakt. Alt i §4–§5 forbi 2027 antar at han følger normen — han kan aldres saktere (sen treningsstart, stort utviklingsrom, F17) eller raskere (restitusjons-/immun-akse). Vi vet ikke, og n=0 på Carls egen aldersbrems.
  • AG%-absoluttnivået bærer ~±1 poeng (utgave/interpolasjon, §1). Bruk nivåene omtrentlig. Trenden («fortsatt opp») er derimot robust — den overlever enhver rimelig faktor-justering fordi forbedringene (11–22 %) dominerer aldersstraffen (~0,5 %/år) med en størrelsesorden.
  • Riegel-projeksjonene bruker eksakt k=1,06 (F17-fasiten) og forutsetter at langtur-plattformen holder krysningen ved lag; svikter durability-basen, blir 2:49-latent-tallet optimistisk.
  • «Motoren ligger foran maratonen» er det sikreste funnet her (to uavhengige metoder: AG-tabell + Riegel), og det er lite ekstrapolerende — det beskriver dagens tilstand, ikke fremtiden. «Sub-2:50 varer til ~46–47» er det mest usikre — det er en fem-års framskriving som forutsetter uendret kontinuitet, og skal leses som en horisont-skisse, ikke en prognose.
  • VO2 61,7 er målt under forkjølelse (lab-notat); reelt nivå trolig 63–65, som gir mer reserve enn tabellene her bruker — framskrivingene er i så fall om noe konservative på motor-siden. Neste lab (aug/sep 2026) er det viktigste enkeltdatapunktet for å oppgradere/nedgradere hele §4–§5.

Ingen `illness_classification.json`, `races.json` eller andre datafiler er endret; ingen bygg/git kjørt. Konsolidering (hub-kort, CHANGELOG, TODO-kryss) gjøres i egen økt per parallellprotokollen — ikke her.

Sykdomsgate — backtest v2Hva: Fasit-splittet backtest av dysregulerings-gaten (autonom/infeksjon/stress).
Konklusjon: Gaten måler autonom forstyrrelse (30 % recall, 6 d lead), ikke infeksjon — språket vasket deretter.
Opus2026-07-05
#dysregulering#gate#backtest

Dysregulerings-gate — backtest v2 med typet fasit (KLASS-2/KLASS-4)

> ⚠️ KORREKSJON 2026-07-22. «autonom 30 % recall / 6 d lead» og «infection 0/2» under beskriver merkelapper Carl siden har strøket. Den viktige innsikten forsterkes, ikke svekkes: «autonom»-fasiten er per definisjon ikke-infeksjon, så 6-dagers-leadet var evne til å forutse eksogen dysregulering (varme/reise/dårlige netter) — nettopp det Carl vil fortsette gjennom. Og «infection 0/2» er en artefakt av at de to april-merkelappene (30.3 = post-race-krater, 06.4 = rolig dag) bommer på selve infeksjonen 14.–20.4 med ~2 uker. Wellness så den infeksjonen kraftig og vedvarende. Re-etablert fasit: `Analyser/synteser/Running_Report_LastSykdomHRVStress_Revisjon_v1.md`.

Dato: 2026-07-05 (Fable økt 3) · Verktøy: `scripts/backtest_illness_model.py --fasit {all|infection|stress|autonom}` · Data: `illness_backtest*.json`

Erstatter tolkningen i `Sykdomsgate_backtest_2026-07-04.md` (tallene der står — det er merkelappen som var feil).

Hvorfor v2

Typingen i `illness_classification.json` (Carl, 2026-07-05) gjorde det mulig å spørre: hva er det gaten faktisk predikerer? Fasit-splittet backtest (2025-01-01 → 2026-07-05, alarm = ≥2 indikatorer):

FasitFerske onsetsRecallLead (median)FP-episoder/18 mnd
**all** (v1-tallet)113/11 (27 %)6 d4
**autonom** (stress + uavklart)10**3/10 (30 %)**6 d (3–6)4
**infection** (kun bekreftede)2**0/2 (0 %)**(samme gate)
**stress** (kun typede, alle 2026)10/1for tynt (n=1)

Konklusjon — det ærlige hjemmet for 27 %-tallet

1. Gaten er en autonom-forstyrrelse-detektor, ikke en sykdomsprediktor. Recall-tallet (27–30 %) beskriver ferske dysregulerings-onsets (stress + uavklart). Begge de bekreftede infeksjonene (post-Berlin mars/april-26) kom uten wellness-prodrom — 0/2.

2. Ren stress-fasit kan ikke kalibreres ennå — bare 2026-perioder er typet stress (4, hvorav 3 residiv). Re-kjør `--fasit stress` når typingen vokser bakover (KLASS-3 gjør det billigere).

3. Gate-adferden endres IKKE — ≥2-indikator-alarmen er fortsatt spesifikk (4 FP-episoder/18 mnd) og lead på 6 d er reell handlingstid. Det som endres er språket: brief/status/prediksjon sier nå «dysregulering (stress/sykdom)», og race-eve-flagget skiller infeksjon/uavklart (evidensgrunnlaget Paris/Frankfurt) fra rene stress-perioder (egen, mildere linje).

Implementert (2026-07-05, Fable økt 3)

  • `backtest_illness_model.py`: `--fasit stress|autonom` (+ `fasit` i output; varianter → `illness_backtest_{fasit}.json`, kanonisk fil forblir all-kjøringen).
  • Språkvask (KLASS-2): `predict_illness.py` (gate + summary, typet etterklang) · `morning_brief_v2.py` (⛔ DYSREGULERINGSGATE / ⚠ Dysregulerings-varsel) · `generate_status.py` (Dysregulerings-risiko-seksjon, typet «Fersk periode», Type-kolonne i historikk-tabellen) · `race_outlook.py` risk_flags (`illness_days_14d` teller nå kun infeksjon/uavklart; NY `stress_days_14d`/`stress_flag` med mildere råd) · `build_prediction_dashboard.py` (typet flagg-tekst).

Gjenstår (TODO)

  • KLASS-3: enklere manuell typing (CLI/Pushover) — flere typede perioder gir skarpere fasit.
  • KLASS-4-restene: gate-kalibrering (terskler per type) hvis stress-fasiten en dag får n nok — i dag er det kun språk og telling som skiller.
Biomekanikk-evolusjonenHva: Kadens, steglengde, bakkekontakt/vertikal og stride-kollaps 2019–2026, justert for sensor- og klokkeskifter.
Konklusjon: Kadensløftet (173→181 på kvalitet) er ekte og bevisst, gir ~2 % bedre økonomi — og Carl kollapser ikke på lange turer.
Opus2026-07-20
#kadens#steglengde#GCT#durabilitet

Biomekanikk-evolusjonen — kadens, steglengde, GCT/vertikal og stride-kollaps

FABLE-25 · skrevet 2026-07-20 (Opus 4.8) · Kilder: `activities.json` (2344 løp 2019–26, dynamikk-felter), `quality.json` (quality_avg_cadence + reps), `durability.json` (F6 stride-kollaps, ≥25 km), sko-logg (gear_name per økt). Alt read-only; kun denne fila er skrevet (parallellprotokoll). Breddegrad/klokke: se §1.

Ramme: Spec-en ba om kadens-evolusjonen 170→184 (når, hva drev, kost/gevinst), steglengde-vs-fart per æra, GCT/vertikal-baner, og stride-kollaps-signaturen (F6) i treningsdata som tidlig varsel. Fella er sensor-/klokkeskifte mellom æraer — og den er stor nok til å få sitt eget kapittel først, fordi halvparten av «utviklingen» i rå GCT/vertikal-tall er måleteknikk, ikke bein. Kadens er den robuste metrikken (måles av alt); GCT/vertikal er bare tolkbare innen en klokke-æra.


0. Kortversjon

Kadens-løftet er ekte, men intensitets-spesifikt og bevisst. Quality-kadensen steg fra 173 spm (2020) til 181 (2026) — og gjorde det ved matchet fart (175→182 i 3:1x-båndet), så det er ikke en mekanisk bieffekt av å løpe fortere. Rolig-kadensen står derimot flatt (~168–170). Toppen (p90) når 184–186 i 2024–26 — «184» er altså det moderne fort-endepunktet, ikke et snitt. Steg-endringen ligger i 2024–25, etter at superskoene var etablert (2021+) → dette er et bevisst turnover-grep, ikke skoene.

Grepet betaler seg. Ved matchet fart (2024–25, ren sensor-æra) har høy-kadens-løp kortere bakkekontakt (GCT 252 vs 256 ms), mindre vertikal sprett (8,6 vs 9,0 cm) og ~2 % bedre løpsøkonomi enn lav-kadens-løp. Innen samme klokke-æra (2024→25) faller GCT 251,9→250,5 ms og vertical ratio 7,84→7,73 % ved høyere fart — mekanikken strammes.

Carl kollapser ikke. F6-signaturen i trening (cad_drop på ≥25 km) er −1,5 % i snitt — kadensen holder eller stiger i siste tredjedel, også på de lengste (L5/L6: −2,7 %). Null av 103 langturer er absorpsjons-flagget. Der kadensen unntaksvis fader (positiv cad_drop) henger det svakt sammen med tregere HRV-retur (r=0,34, bedre varsel enn økonomi-fallets r=0,10) — så cad_drop er en brukbar restitusjons-knapp, men grunnraten for kollaps er lav. Nevromuskulær durabilitet er ikke Carls begrensning.


1. Sensor-æraene (les dette før noen GCT-graf)

Dynamikk-dekning per år (andel løp med steglengde/GCT/vertikal):

År20192020202120222023202420252026
Dynamikk-dekning0 %0 %69 %**5 %**61 %94 %96 %45 %
GCT (ms)256,3256,4258,8251,9250,5250,0

Fire brudd, alle måletekniske: (1) pre-2021 er tomt — ingen løpsdynamikk (basisklokke/ingen RD-sensor), så kadens/steglengde finnes ikke før 2021 uansett hva beina gjorde. (2) 2022 er et hull (5 % dekning) — en klokke/strap-periode uten dynamikk. (3) 2023→24 hopper dekningen 61 %→94 % samtidig som GCT «forbedres» 258,8→251,9 ms — det er en klokkebytte-artefakt like mye som en ekte endring. (4) 2026 er halv (45 %) — trolig nytt instrument midt i året. Regel for hele rapporten: kadens sammenlignes på tvers av år; GCT/vertikal/steglengde sammenlignes kun innen 2024–25 (samme klokke, full dekning). Alt annet er retning med forbehold.

2. Kadens-evolusjonen 170→184

To uavhengige kilder, samme historie. quality_avg_cadence (Garmin-målt i kvalitetsvinduet, uavhengig av steglengde-derivering):

År2020202120222023202420252026
Snitt-kadens173,2175,3175,8176,6177,3**180,6**181,2
Median173176175,5177180**182**181,5
p90 (fort-ende)179179183,5184,2184,0**186**185
Quality-fart (m/s)3,33,33,13,23,43,43,4

Snittet stiger jevnt 173→181; medianen tar et steg-hopp i 2024–25 (177→182). At farten er nær konstant (3,3→3,4 m/s) mens kadensen stiger +4,6 % betyr at steglengden ble kortet ved matchet pace — bevisst turnover, ikke mekanikk. Testet direkte i 3:1x-båndet (fart 3,3–3,6): 175,2 (2020) → 176,8 (2023) → 181,6 (2024–25) → 181,7 (2026). Rolig-kadensen (hel-løp-derivert) står imens flatt ~168–170 — løftet er isolert til kvalitet/fart.

3. Hva drev det: sko, fart eller bevissthet?

  • Ikke fart: løftet holder ved matchet pace (§2) — han løper ikke bare fortere.
  • Sko muliggjorde, men forklarer ikke steget: superskoene kom medio 2021 (Vaporfly/Alphafly/Endorphin), og dekker hele dynamikk-æraen. Men det store kadens-hoppet ligger i 2024–25, år etter at skoene var innarbeidet — så skoene er scenen, ikke utløseren.
  • Bevisst: steg-endringens timing (2024→25, +3 spm på ett år i median) peker på et innført form-signal rundt 2024, ikke gradvis drift. Sammenfaller med sub-2:50-satsingen — et økonomi-grep tatt med hensikt.

4. Kost/gevinst

Ved matchet fart (2024–25, ren sensor-æra, per løp), høy- vs lav-kadens-halvdel:

nKadensGCT (ms)Vert. sprett (cm)Vert. ratioØkonomi (EF)
Lav kadens443163,4255,68,997,8723,65
**Høy kadens**443176,2**252,3****8,64**7,88**24,17**

Gevinsten er entydig retningsmessig: kortere bakkekontakt, mindre vertikal sprett, ~2,2 % bedre økonomi ved høyere kadens. Ingen synlig kostnad i disse metrikkene (den teoretiske metabolske kostnaden ved svært høy kadens vises ikke i dette området). Forbehold: assosiativt, ikke randomisert — raskere/sprekere dager har både høyere kadens og bedre økonomi. Vertical ratio er dessuten mekanisk bundet til steglengde (ratio = sprett/steg), så den er ikke en ren effektivitets-avlesning når kadens endres — derfor står den ~flat her mens sprett og GCT beveger seg.

5. Steglengde-vs-fart + GCT/vertikal-baner

Steglengde (cm) ved matchet fart er æra-stabil — kurven flytter seg lite 2020–25; kadens (ikke steg) er spaken i fort-enden. GCT/vertikal innen ren æra (2024→25): GCT 251,9→250,5 ms, vertical ratio 7,84→7,73 %, sprett 8,84→8,74 cm — alt strammer seg svakt ved høyere snittfart. Men 2023-tallene (GCT 258,8; ratio 7,98) skal ikke leses som «dårligere mekanikk før» — de er fra en annen/dårligere-dekket klokke-æra (§1). Cross-æra-banen for GCT/vertikal er ikke tolkbar; kun 2024–25-segmentet er ekte.

6. Stride-kollaps (F6) i treningsdata

`durability.json` gir F6-signaturen på 103 langturer ≥25 km: cad_drop (kadens-fall siste vs første tredjedel) og ef_drop (økonomi-fall). GCT/vertikal-fall krever FIT-nivå (HRQC-1) og er ikke beregnet — treningsside-F6 er derfor kadens + økonomi.

  • cad_drop snitt −1,5 % (median −1,2; p90 0,0) — kadensen holder eller stiger i siste tredjedel. Ingen kollaps, heller det motsatte. 0 av 103 langturer absorpsjons-flagget.
  • Kollaps ↔ restitusjon: korr(cad_drop, HRV-returdager) = 0,34 (n=57) — de få turene der kadensen fader (mindre negativ / positiv drop) henger sammen med tregere HRV-retur. ef_drop er et svakere varsel (r=0,10). → Overvåk positiv cad_drop på langtur som restitusjons-flagg, ikke økonomi-fallet.
  • Robust på de lengste: L5/L6 (de tyngste klassene) har cad_drop −2,3 til −2,7 % — kadensen stiger mest i siste tredjedel der. Durabiliteten svikter ikke med distanse.
  • Trend: stabil god durabilitet 2021–26 (cad_drop −1,0 til −2,0 % hvert år); ingen forvitring.

7. Metodenoter og forbehold

  • Kadens-kilder: quality_avg_cadence (Garmin-målt, autoritativ for kvalitet) + hel-løp-derivert (fart×6000/steglengde_cm, for rolig). De to vinduene er ikke identiske — quality-tallet er reps, derivert er hele økten inkl. oppvarming; kvalitets-løftet leses av quality_avg_cadence.
  • Sensor-fella (§1) er den viktigste: rå GCT/vertikal-trender pre-2024 blander bein og klokke. Fremtidige biomek-analyser bør begrenses til 2024+ (nåværende instrument) med mindre klokke-ID verifiseres per økt (device_name finnes ikke i processed; må hentes fra `data/raw/garmin` FIT/summary hvis det trengs).
  • Kost/gevinst er assosiativt (§4), og vertical ratio er steglengde-konfundert.
  • F6-trening mangler GCT/vertikal-fall (krever FIT) — signaturen er kadens+økonomi, ikke full per-sekund-stride som race-F6.

8. Implikasjoner (coaching / F22)

1. Fortsett kadens-grepet. Det bevisste 2024–25-løftet gir målbar økonomigevinst (~2 %) uten synlig kostnad, og faller sammen med sub-2:50-satsingen — det er en form-investering som virker.

2. Nevromuskulær durabilitet er ikke begrensningen. Ingen stride-kollaps på langtur, robust også på 30k+ → Carl tåler maraton-spesifikt langarbeid biomekanisk; begrensningen ligger andre steder (økonomi/absorpsjon/immun, jf. F7/F15), ikke i beina som gir seg.

3. cad_drop inn som monitor: en langtur der kadensen fader i siste tredjedel er et tidlig restitusjons-varsel (svak, men bedre enn økonomi-fall) — verdt en linje i durability-kortet/A4-briefen.

4. Rens biomek-æraene i pipelinen: før GCT/vertikal brukes på hub eller i F22-vær/underlag-resonnement, merk 2022-hullet og 2023/24-klokkebyttet — ellers leses måleteknikk som framgang.

Leveranse: denne fila. Ingen skriv til data/kode/hub. Dette var den siste ukjørte Fable-specen (F24 Miljø-atlas kjørt samme dag) — spec-banken i TODO §RUNDE B er dermed tom.

Miljø-atlaset (vær, sesong, underlag)Hva: Vær, sesong, dagslys og underlag som form-kontekst for løpsøkonomien 2019–2026.
Konklusjon: Økonomien svinger ~4 % gjennom året med topp aug–okt; mølla er den renere vinterflaten, og varme over 15 °C er den store kostnaden.
Opus2026-07-20
#vær#sesong#mølle#varme#økonomi

Miljø-atlaset — vær, sesong og underlag som form-kontekst

FABLE-24 · skrevet 2026-07-20 (Opus 4.8) · Kilder: `activities.json` (2380 løpsøkter 2019–26, vær innbakt per økt fra `weather_archive/`), `quality.json` (v2.4-skår, ferskt re-skåret R4), `durability.json`, F4a-varmemetoden (`race_predict.heat_term`/`HEAT_PRIOR`), F17 E6 (mølle-vinteren). Alt read-only; kun denne fila er skrevet (parallellprotokoll). Breddegrad 63,44°N (Trondheim) — dagslys beregnet geometrisk fra dato.

Ramme: Dette er et kontekst-atlas, ikke en plan. Målet er tre ting revisjonen og F22 etterspurte: (1) mølle-vs-ute-ekvivalensen (F22 kalte den «ukartlagt»), (2) sesongformkurven — når på året er kroppen best — og (3) hvilke værfaktorer som faktisk flytter økonomien, og hvilke som ikke gjør det. Form-proxyen gjennomgående er EF = fart/puls (m/s per slag × 1000) på rolige økter (I1/I2, HR 115–158, 3–25 km), per-år-demeaned slik at Carls flerårige formstigning 2019→26 ikke drukner sesongsignalet. Der annet ikke er sagt: pool = temp-dekket, EF vinsorisert 2–98 %, 2019 droppet (tynn/støyete tidlig-Garmin). n oppgis overalt; små n flagges.


0. Kortversjon

Økonomien svinger ~4 % gjennom året, og bunnen og toppen er de samme hvert eneste år (7 av 7). Lavest jan–feb (−0,57 EF mot eget årssnitt), høyest aug–sep–okt (+0,33 til +0,35). Spennet beste−verste måned er 0,92 EF-enheter = 4,0 % av snitt-EF. Dette er ikke temperatur (den er nær-nøytral, se §3) — det er treningsfase + akkumulert sommerbase. Praktisk: Carls naturlige PB-vindu er sensommer/tidlig høst. Det underbygger F22s høst-A-maraton-vekting direkte.

*Mølle er ikke et kompromiss om vinteren — den er den renere kvalitetsflaten. Ute-økonomien om vinteren (nov–mar) faller −0,91 EF mot årssnittet; mølle-økonomien faller bare −0,15. Ved matchet puls løper Carl ~11 s/km raskere på mølle enn ute om vinteren (318 vs 330 s/km) — fordi føre/kulde/lag straffer ute, ikke fordi mølla jukser. Og kvaliteten holder: v2.4-skår vinter mølle 7,58 vs ute 7,59 (identisk). De 19 mølle-kvalitetsøktene sist vinter (F17) var altså et økonomisk riktig* valg, ikke en nødløsning.

Temperatur-optimum er 8–15 °C. Kulde er en mild straff, varme er den store. Ved matchet puls: <8 °C koster ~8 s/km mot optimum, >15 °C koster ~13 s/km og gir det største EF-fallet (−1,7). Under 15 °C er økonomien bemerkelsesverdig temperatur-robust (~0,05 %/°C). Dette er nøyaktig varme-prioren fra `race_predict` sett i treningsdata — og en påminnelse om at Carl er uprøvd >18 °C.

Tre nullfunn (like nyttige): mørke, nedbør og vind flytter ikke den rolige økonomien når man kontrollerer for temperatur. Vinterstraffen er kulde + føre, ikke lysmangel. Nedbør og vind betyr noe for race og harde intervaller, men vaskes ut på snitt-rolig-økonomi (rundløyper kansellerer med/motvind).


1. Mølle-vs-ute-ekvivalensen (F22-hullet)

F22 bygde vær-resonnementet på klimanormaler fordi atlaset manglet, og flagget eksplisitt at «mølle-30k-ekvivalensen er ukartlagt». Her er den, for kvalitet og rolig — på to uavhengige metrikker.

Rolig økonomi (EF, per-år-demeaned):

SegmentnEF_dm mølleEF_dm utePace@HR møllePace@HR ute
Alle årstider16 / 1429−0,260,00324 s/km315 s/km
**Vinter nov–mar**11 / 514**−0,15****−0,91****318 s/km****330 s/km**

Poenget ligger i vinterraden: ute-økonomien kollapser −0,91 EF (≈3,7 %) om vinteren, mølla holder −0,15. Mølla er ~0,76 EF bedre enn ute-vinter — den bevarer sommer-nær økonomi mens ute-vinter straffes av is/brøytekant/lag/kulde. Om sommeren snur fortegnet marginalt (ute er da den beste flaten), som forventet.

Kvalitet (v2.4 session_score, ferskt re-skåret):

Segmentn mølle / uteSkår mølleSkår uteExec mølleExec ute
Alle kvalitetsøkter12 / 4357,407,487,127,34
Vinter nov–mar5 / 1857,587,597,027,47

Session-skåren er praktisk talt identisk (vinter 7,58 vs 7,59). Execution ligger litt lavere på mølle (kontrollert fart, ingen HR-drift fra vind/terreng), men helheten kompenseres av kontekst — kvaliteten overføres.

Ekvivalensregelen: på rolig og kvalitet er mølle ≈ 1:1 med gode ute-forhold; ute-vinter er det som skal justeres, ikke mølla — trekk fra ~10–12 s/km før du sammenligner en vinter-ute-pace med sommer. Forbehold: n er lite (16 rolige, 12 kvalitet), og 30k+-ekvivalensen forblir uobservert — Carl kjører ikke 30k på mølle, så F22-hullet for de lange turene er fortsatt åpent (mølle dekker kvalitet/rolig, ikke maraton-spesifikk langkjøring). Mølle-fartkalibrering (belte vs GPS) er en kjent, men her retnings-uskadelig, usikkerhet.

2. Sesongformkurven — årshjulet i tall

EF_dm per måned, ren pool (2020–26, temp-dekket, vinsorisert, n=1152). Positiv = bedre enn eget årssnitt:

janfebmaraprmaijunjulaugsepoktnovdes
EF_dm−0,57−0,57−0,22−0,12+0,11+0,08+0,09**+0,35****+0,35****+0,33**+0,04+0,09
dagslys5,88,511,714,918,320,319,216,012,79,66,54,7

Formen er entydig: bunn jan–feb, jevn stigning gjennom våren, platå-topp aug–okt, mild nedgang gjennom nov–des før den faller i dypvinteren. Konsistens: sommer(7–9) > vinter(1–3) i alle 7 årene. Dette er ikke ett godt år som drar snittet — det er en stabil årsrytme.

At sep (+0,35, 12,7 t lys) slår mai (+0,11, 18,3 t lys) viser at toppen ikke er en dagslys-effekt — den følger treningsfase og akkumulert base, ikke sola. Aug–okt-toppen sammenfaller med Carls historiske høst-maraton-tradisjon (Amsterdam/Frankfurt-vinduet): kroppen er økonomisk best akkurat når A-løpene har ligget.

3. Temperatur: kulde mild, varme dyr, midten robust

Pace ved matchet puls (HR 130–145, ute), som isolerer temperatur fra intensitet:

Temp<−5−5–00–88–15>15
Pace (s/km)328,6328,0328,4**320,1**333,0
EF_dm−0,2−0,6−0,70,0−1,7

Optimum er 8–15 °C. Kulde (<8 °C) koster ~8 s/km mot optimum — merkbart, men mildt og flatt hele veien ned til −5 °C og lavere (kroppen håndterer kulde godt; føre er den egentlige vinterstraffen, ikke lufttemperaturen i seg selv). Varme >15 °C koster ~13 s/km og gir det klart største økonomifallet (−1,7 EF). Den lineære EF~temp-hellingen er nær null (~0,05 %/°C) — under 15 °C er Carl temperatur-robust.

Dette reproduserer varme-prioren i `race_predict` fra treningssiden: straff først >15 °C, ~0,2–0,3 %/°C for de lange distansene, og en ærlig uprøvd-sone >18 °C (Carl har aldri racet i ekte varme; sommer-varmeøktene her er dessuten få og ferie-konfundert — behandle >18 °C som prior, ikke som målt).

4. Nullfunnene — hva som *ikke* flytter økonomien

Mørke: rå dagslys-bøtter korrelerer med EF, men utelukkende via temperatur-konfund (de mørke månedene er de kalde). Kontrollerer man for temperatur (kun 4–12 °C-bånd), forsvinner dagslys-effekten (<10 t: +0,02 · 10–14 t: −0,43 · >14 t: −0,24 — ingen monoton retning). Mørke i seg selv straffer ikke den rolige økonomien. Vinterbunnen i §2 er kulde/føre/fase, ikke lysmangel — nyttig som bakgrunn (jf. søvnarkitektur-rapporten), ikke som gate.

Nedbør: tørt −0,57 vs vått −0,34 EF_dm — ingen straff (om noe motsatt, trolig fordi våte dager er mildere). Vind: ingen monoton straff på snitt-rolig-økonomi (<8 km/t −0,62 → >25 km/t −0,18). Begge betyr noe for race og harde enkeltøkter, men på en rolig rundløype kansellerer med- og motvind, og regn er nøytralt for økonomi. Ikke bruk vær-dårlig-dag som unnskyldning for en svak rolig-pace; bruk temperatur og underlag.

5. Årshjul for nøkkeløkter

  • Jan–feb (økonomibunn, 5–8 t lys, kaldt/is): motor-/basefase. Legg kvalitet på mølle — den bevarer økonomi og fjerner føre-lotteriet. Ikke jag paces ute (økonomien er ~4 % nede); styr på puls/følelse. Dårlig vindu for testing/PB, godt for volum + styrke.
  • Mar–apr (stigende): overgang. Økonomien tar seg opp. Start skjerping. Er vår-race målet (Praha/Genève 2027), er dette den kritiske broa — du bygger mot et sesong-underskudd (§6).
  • Mai–jul (temp-optimum 8–15 °C, nær-døgnlys): beste ytre forhold for volum + kvalitet. Flytt harde økter til morgen på >15 °C-dager. Økonomien klatrer mot topp.
  • Aug–okt (ØKONOMITOPP, mildt): primært race-/PB-vindu. Legg A-løp her. Sammenfaller med historisk høst-maraton-form.
  • Nov–des (avtakende, mørkner): post-høstrace-restitusjon + tidlig base. Økonomien fortsatt brukbar (+0,04/+0,09) før dypvinter-fallet. Mølle-sesongen begynner.

6. Input til F22 (race-porteføljen)

1. Vår-fastpunktene ligger utenfor formtoppen. Praha HM (3.4) faller på apr (−0,12 EF_dm), Genève M (9.5) på mai (+0,11) — begge ~0,4–0,5 EF (≈2 %) under aug–okt-toppen (+0,35). Dette bekrefter F22s instinkt tallmessig: Genève er ikke PB-arenaen, og vår-mål krever bevisst vinterbase for å tette et reelt sesong-økonomiunderskudd. 2:45-forsøk hører hjemme om høsten.

2. Klimatisk er vår-løpene derimot i vinduet. Sentral-Europa tidlig april/mai gir typisk 6–15 °C = Carls optimum (§3) — motsatt av en varme-risiko. Vær-aksen taler for Praha/Genève; det er form-fasen, ikke klimaet, som er begrensningen.

3. Høst-A-maraton er økonomisk hjemmebane. Valencia (des)/Frankfurt·Amsterdam (okt) ligger på eller rett etter formtoppen — F22s høst-vekting har fysiologisk medvind, ikke bare vær-odds.

4. Vinter-motorblokken kan lene seg på mølle for kvalitet uten økonomitap (§1) — det gjør en Praha-bygg gjennom Trondheim-vinter mer robust enn F22 antok. Men de innbakte 30k+-turene må fortsatt ut (mølle-langkjøring er uobservert); is/mørke-risikoen på selve langturtrappa står.

7. Metodenoter og forbehold

  • EF som form-proxy: fart/puls fanger aerob økonomi, men er konfundert av intensitet (avgrenset til I1/I2, HR-bånd), stigning (ikke normalisert — rundløyper midler det ut), og drift på lange økter. Per-år-demeaning fjerner flerårig fitness-trend, ikke fase-variasjon innen året — sesongkurven blander derfor «ekte» sesong med treningsfase (som er poenget for et årshjul, men ikke for kausalitet).
  • Vær er innbakt per økt (`weather_archive`, Open-Meteo, nærmeste time til øktstart), temp-dekning fra 2019; 2019 droppet i hovedpoolene pga. tynn/støyete tidlig-Garmin (ga fysisk umulige EF-verdier).
  • Små-n-flaggene: mølle 16 rolige / 12 kvalitet; varme >15 °C få og ferie-konfundert. Behandle disse som retning, ikke presisjon.
  • Ikke gjort (bevisst): race-residual per måned (ingen residualfelt i `race_model_features`), og 30k+-mølle-ekvivalens (uobserverbart). Begge er ærlige hull, ikke uteglemmelser.

Leveranse: denne fila. Ingen skriv til data/kode/hub. Neste: F25 Biomekanikk-evolusjonen (kadens/GCT/stride-kollaps) er den gjenstående ukjørte Fable-specen; F22 kan nå oppdatere §-notatene som hvilte på «F24 ikke kjørt».

Modellvurdering: dynamisk ankervektHva: Dynamisk race-/Kalman-vekt i 10 km-ankeret testet med leave-one-race-out på 27 kalibreringsløp.
Konklusjon: Verre — LOO-feilen øker 15–18 % på alle horisonter; ferske løp er de mest støyende ankrene. Forkastet.
2026-07-16
#modell#anker#LOO#Kalman

Modellvurdering: dynamisk race/Kalman-vekt i anchor10k

Dato: 2026-07-16 · Forslag: erstatt statisk blanding 0,6 race + 0,4 Kalman med recency-vekt w(gap) — høy rett etter løp, avtagende med tiden.

Metode: leave-one-race-out på de 27 kalibreringsløpene, identisk med `race_predict.loo_validate`, men med `_a10k` erstattet av blend-varianter konsistent i både fit og prediksjon per fold. Kalman-tilstand per snapshot fra `fitness_filter` (eget løp ekskludert som måling). Kjørt på kopi i sandbox — ingen filer i systemet er endret.

Dom: VERRE — forkast i nåværende form

LOO-feilen øker 15–18 % relativt på alle horisonter og alle distanser. Ingen av 36 parametriseringer (w_max 0,8–1,0 · w_min 0,2–0,4 · τ 30–150 d) slår statisk 0,6 på T-14. Hovedgrunnen er at premisset er empirisk snudd i dine data: ferske løp (0–45 d gamle) er de mest støyende ankrene, ikke de beste.

Tall: før (statisk 0,6) vs. etter (dynamisk w 0,9→0,3, τ=60 d)

LOO-MAE i % av løpstid (bias i parentes; − = modellen for optimistisk):

HorisontFørEtterGrid-beste (36 konfig.)
T-14**1,23 %**1,45 %1,29 %
T-7**1,16 %**1,35 %1,22 %
Race-dag (T-1)**1,45 %**1,62 %
Distanse (T≤14)FørEtterI tid på målnivå
10K**1,38 %** (−0,46)1,62 % (−0,48)31 s → 36 s på 37:00
HM**1,26 %** (−0,44)1,44 % (−0,28)60 s → 69 s på 1:20
M**0,97 %** (−0,47)1,16 % (−0,45)99 s → 118 s på 2:50

σ (T≤28): 10K 1,86→1,94 · HM 1,73→1,88 · M 1,25→1,53. CI: in-sample `q_pct`-dekning er ~90 % per konstruksjon i begge. Ærlig nested dekning (kvantiler fra de andre løpene, testet på holdt-ut løp): 76 % før, 80 % etter — men til prisen av bredere bånd (5,2→5,7 pp) OG større punktfeil. Det er bredere usikkerhet fra en dårligere modell, ikke bedre kalibrering. Begge ligger under 90-målet; endringen fikser ikke det.

Per løp (T≤14): dynamisk bedre på 9, verre på 17 av 27. Hele gevinsten sitter i ett løp (2019-09-07, −1,8 pp); tre løp taper ~1,0–1,1 pp. Nested hyperparametervalg (hver fold velger fritt i grid-en uten testløpet): 1,26 % — taper fortsatt mot statisk 1,20 %. Familien er altså ikke reddbar med «riktig» decay-hastighet.

Hvorfor premisset ikke treffer

Feilfor rent race-anker vs. ren Kalman, binnet på anker-alder (T≤28):
Anker-alderRace-ankerKalmann
0–45 d1,45 %**1,07 %**17
46–120 d**0,82 %**0,96 %18
121–200 d**1,46 %**2,04 %24
201–400 d**0,92 %**1,27 %19

Et løp er én måling: form + dagsstøy (vær, pacing, løype, dagsform). Brukt rått som anker rett etterpå arver prediksjonen dagsstøyen 1:1; Kalman-shrinkage mot prior vinner da — klassisk regresjon mot snittet. Race-ankeret er best i 46–120-dagerssonen og forblir konkurransedyktig helt til 400 d fordi tre recency-mekanismer allerede finnes i systemet: (1) ankervinduer på 12/18/24 mnd (10K/HM/M) — et 20 år gammelt løp kan aldri bli anker, fallback til trenings-signaler gir strukturelt w=0; (2) aero-skaleringen i `anchor10k` (fra dag 35, rampe til dag 125) oppdaterer eldre ankre med faktisk treningsutvikling; (3) Kalman-siden av blandingen har hvert løp som måling (R=25) som eldes via prosess-støy 0,06/d. Forslaget dobbelt-teller recency — og med fortegnet feil vei i 0–45-dagerssonen.

Effekt på Mål-fanen i dag (asof 2026-07-15, anker-gap 108 d → w≈0,40)

Anker 3:44→3:46. Energimila 35:56→36:05, P(sub-37) 77→74 %. KBH HM og Amsterdam uendret — framskrivingen konvergerer mot distanse-toppen over 56 d, så vekten påvirker kun mål nærmere enn ~8 uker samt «PR-form nå» og grafen.

Risiko om den likevel implementeres

Dagen etter Energimila hopper w til ~0,9 på ett ferskt løp — maksimal vekt på signalet akkurat når det er mest støyende, med direkte gjennomslag i KBH-prediksjonen (39 d ut, ~30 % av anker-skiftet) og rykk i utviklingsgrafen. Deretter driver a_now mekanisk mot Kalman etter hvert som w decayer (~3–4 s/km over 60 d med dagens 9 s/km race–Kalman-avstand) — grafen viser «fallende form» uten at noe i treningen har endret seg. I tillegg: β og `q_pct` er kalibrert på rent race-anker; med tidsvarierende w blir avviket mellom kalibreringslag og nowcast-lag også tidsvarierende og uforutsigbart. Carl-forutsetningene (TSB-tolkning, distanse-topp-guard for HM-sterk profil, terskel-dose som ferskhet) røres ikke direkte av forslaget, men 10K er distansen som taper mest presisjon — feil retning gitt at 10K/M allerede er utsatt for over-prediksjon fra HM-form.

Anbefaling

Forkast; behold statisk 0,6. To funn fra analysen er verdt egne, separate LOO-beslutninger etter høstens tre løp (30 kalibreringsløp):

1. Omvendt fersk-shrink. Dataene antyder det motsatte av forslaget: lavere race-vekt når ankeret er <45 d (f.eks. 0,45), høyere i 46–150-sonen. Beste variant ga 1,14 % vs. 1,20 % på T≤14 — men bare 14/27 løp bedre, +0,05 pp er innenfor seleksjonsstøy med n=27 og 8 testede varianter. Trenger mer data, ikke implementering nå.

2. β↔blanding-konsistens (pre-eksisterende). Produksjonen fitter β på rent race-anker men anvender dem på 0,6-blandet anker i nowcast → målt +0,5 % systematisk treg-bias T≤14 og MAE 1,54 % på T-28 (mot 1,33 % for konsistent refit). I dag kansellerer denne skjevheten delvis LOO-ens optimisme — men det er to feil som tilfeldigvis delvis nuller hverandre, og dynamisk w ville gjort skiftet tidsvarierende. Kandidat: refit β på blandet anker, LOO-valideres som egen endring.

Filer: ingenting endret. Backtest-kode kan gjenkjøres fra scratchpad (`backtest_blend.py`, `backtest_blend2.py`, `backtest_t1.py`) mot kopi av `scripts/` + `data/`.

🔋 Restitusjon & treningsmønster (9)

Absorpsjons-synteseHva: Hvor mange dager hver økt-klasse koster før HRV/BB er tilbake på baseline.
Konklusjon: Kvalitet ~0–1 d, 30k+ 2–3 d, maraton 4–5 d; RHR er non-responder — les HRV+BB.
Fable2026-07-06
#restitusjon#HRV#absorpsjon

Absorpsjons-syntesen → hva en hard økt koster i wellness-dager

Dato: 2026-07-06 · Skrevet av: Claude (Fable, FABLE-7 fra TODO) · Grunnlag: `wellness.json` (flate felt, design #5), `quality.json` (664 økter → 427 harde i HRV-æraen), `training_load.json` (TSB pre = forrige dags rad), `illness_periods.json` + `alcohol_log.json` (konfunder-vern), race-vær i `quality.json.weather`. Startpunkt fra specen: `durability_langtur.py` (B1, eksperimentell) og `Sessions/recovery_response/` (n=2).

Hva dette er: Første analyse som måler absorpsjonskostnaden per økt-klasse på tvers — hvor mange wellness-dager en 30k+, en kvalitetsøkt eller et race koster før HRV/RHR/Body Battery er tilbake på personlig baseline — og hva som predikerer rask vs treg absorpsjon. Formålet er doserings-input til Amsterdam-blokka (u29–41) og en readiness-side durability-markør som støtter B1b-valideringen. Dette er absorpsjons-motstykket til tverrmaraton- og tverrkortdistanse-syntesene: de leste prestasjon; denne leser restitusjon.

Metode-noter (les før tallene):

1. Æra: kun 2022-09 → i dag. HRV/Body Battery/søvn er komplett først fra høsten 2022 (2022: 98 HRV-dager; 2023→: ~360/år). De to maratonene i 2022 (Barcelona-forløperen finnes ikke; Oslo 17.09 og Valencia 04.12) mangler HRV — maraton-HRV hviler på n=7 (2023-04 → 2025-10).

2. Baseline: rullende 50-dagers median, dag −4 til −54 før økta (samme definisjon som beredskaps-modellen, design #5). HRV-retur = første dag metrikken er ≥ baseline igjen; RHR-retur = ≤ baseline.

3. To målinger, ulik renhet. (a) Akutt kostnad D+1 — morgenen etter, den reneste enkeltmålingen; ekskluderer kun økt-dagen/D+1 i sykdoms-/alkohol-vindu (nA i tabellen). (b) Retur-til-baseline — hvor mange dager til metrikken er hjemme; her fortsetter Carl å trene (~6 dager/uke), så dette er reell restitusjons-bane under last, ikke isolert enkeltøkt-kostnad. Vinduer med sykdom/alkohol nulles (nR). Den isolerte delmengden (ingen ny hard økt i vinduet) er for liten til å bære egne tall.

4. Signal-valg: HRV og Body Battery bærer analysen. RHR er en non-responder for Carl (funn A4) og brukes som støtte, ikke primærmål. Konsistent med beredskaps-vekten (RHR-akutt kun 1 p).

5. Ingen skriv til `data/`. Mellomregning holdt i minnet + `outputs/_absorp.json` (utenfor repoet). Ingen sync, ingen dashboards, ingen redigering av TODO/CHANGELOG/SYSTEM_OVERVIEW (parallell-protokollen).


1. Fasiten — absorpsjon per økt-klasse

Økt-klassen (akutt / retur)HRVΔ% D+1RHRΔ D+1BBΔ D+1HRV-retur median**Wellness-kostnad**
Kvalitet terskel268 (257 / 220)**0,0 %**0−31 d**~0–1 dag** (52 % ingen dip)
Kvalitet VO2/4×459 (59 / 55)**+2,3 %**0−21 d**~0–1 dag**
Langtur 25–30 km20 (20 / 20)+1,6 %−1+31 d**~1 dag**
Langtur 30 km+59 (56 / 54)−1,6 %−1−22 d**~2–3 dager**
Race 10k8 (8 / 7)−17 %+1−18~2,5 d**~2–4 dager**
Race HM4 (3 / 3)−45 %*−1−45*~2,5 d**~2–3 dager** (tynt)
Race maraton9 (8 / 7 m/HRV)**−31 %**+0,5−47**4 d****~4–5 dager**

\* HM-tallene hviler på 3 rene løp — retningsgivende, ikke etablert. HRVΔ%-medianen for maraton er −30,8 % (spenn −19 til −43); BB-underskuddet tettes typisk igjen på D+2 selv når HRV fortsatt ligger nede (funn A7).

Tre klasser trer fram: kvalitet (autonomt tilnærmet gratis), 30k+/kort-race (en 2–3-dagers restitusjonsenhet), og maraton (en egen 4–5-dagers krater-klasse). Spranget mellom dem er langt større enn spredningen innad — økt-klassen selv er den dominerende absorpsjons-prediktoren. Alt annet (søvn, TSB, vær, score) modulerer i margen.


2. Seks funn

A1 — Den autonome kostnaden ved kvalitetsarbeid er tilnærmet null. 52 % av rene terskel/VO2-økter har HRV ≥ baseline allerede neste morgen; median-dippen er eksakt 0,0 %. VO2/4×4 koster ikke mer enn terskel (+2,3 % vs 0,0 % — om noe en parasympatisk rebound), stikk i strid med intuisjonen om at «harde intervaller» tapper mest. Det korroboreres av det ene recovery_response-tilfellet på plass (2026-05-11 MandagsTOSK: HRV +16,7 dagen etter). Kostnaden ved en kvalitetsøkt er muskulær/glykogen (BB −3), ikke autonom. Konsekvens for gaten: en isolert kvalitetsøkt som etterlater deg HRV-rød neste morgen er et signal om noe annet (søvngjeld, infeksjon, livsstress) — ikke om økta. Dysregulerings-språket (KLASS-2) bør leses slik.

A2 — En 30 km+ er en 2–3-dagers restitusjonsenhet — grunt dip, lang hale. Selve dippen er liten (HRV −1,6 %, RHR −1), men halen er det som teller: 61 % av 30k+-turene bruker ≥2 dager på full HRV+RHR-retur (snitt 2,5 dager mot ~1 for kvalitet). Dette er den reelle «blokk»-enheten når du planlegger avstand mellom harde stimuli — ikke kvalitetsøkta.

A3 — Race skalerer bratt med distanse; maraton er sin egen klasse. 10k ~2–4 dager, HM ~2–3 (tynt), maraton 4–5 dager med et −31 % HRV-krater D+1 (retur-median 4 dager: sekvensen var 2-4-4-5 på de fire målbare). Dette validerer 72-timers immunvakta som et gulv, ikke et tak — full autonom klarering etter maraton er 4–5 dager, ikke 3. Amsterdam-planens «3–5 rolige dager» treffer; Kbh HM → Amsterdam (28 d) har rikelig margin.

A4 — RHR er en non-responder for Carl; les absorpsjon på HRV (+ BB). Median RHRΔ D+1 er 0 for kvalitet, −1 for 30k+ (faktisk ned — parasympatisk), +0,5 etter maraton; maks-avvik ≤7 slag i hele materialet. RHR beveger seg nesten ikke selv etter et maraton. Absorpsjons-vurdering som lener seg på RHR vil systematisk «friskmelde» for tidlig. Dette er konsistent med modellens egen vekting (RHR-akutt 1 p mot HRV 3 p) og bør stå eksplisitt i enhver readiness-tolkning.

*A5 — Ferskhet (TSB-inngang) bestemmer størrelsen på det akutte dippet, ikke retur-farten — et velkjørt race SKAL gi et krater. For race korrelerer TSB-pre med HRVΔ% D+1 på r=−0,53 (n=19): jo ferskere inn, jo større dip — fordi du løper hardere og henter mer ut. Men TSB predikerer ikke tregere klarering. Samlet over alt hardt: r=−0,18. Praktisk viktig: et −30 til −45 % HRV-krater morgenen etter et godt tapret race (Energimila, Kbh, Amsterdam) er forventet og godartet — kroppens kvittering for at du fikk brukt formen. Race-eve-flagget og dysregulerings-gaten må ikke feiltolke det som sykdom. (Den ene «omvendte» bekreftelsen: 2025-08-13 10k løpt på TSB −6 ga HRV +25 %* dagen etter — lite ferskhet, moderat innsats, ingen krater.)

A6 — Varme forlenger klareringen marginalt, men målbart. Temperatur på økta korrelerer med tregere full retur (retBÅDE +0,14 til +0,18*). Gruppekontrasten er tydeligst: raske absorbenter kjørte kaldere enn trege — 30k+ 7,8° vs 10,6°, kvalitet 4,9° vs 7,9°. Størrelsesorden ~en halv dag ekstra per håndfull grader. Modest, men relevant for (a) ferie-varmen (u29) og norsk sommer (u30–31), og (b) FABLE-4a: samme økt i varme leses litt verre på wellness enn i kjølig — ikke overtolk de påfølgende dagene.

A7 — Søvn-«løftestangen» er stort sett en måle-artefakt; energi er ikke maraton-flaskehalsen. Dette er analysens ubehagelige funn. Søvnscore natten etter korrelerer sterkt med HRV neste morgen (r=+0,51 overalt) — men det er mekanisk: HRV måles under den samme natta søvnscoren graderer. Betinger man på økter som faktisk dippet HRV, predikerer søvn-etter ikke raskere flerdagers-retur i det hele tatt (r=+0,02, n=156). Den naive korrelasjonen overselger altså effekten kraftig; dataene her kan ikke bevise at «sove godt → absorbere raskere». Søvn er fortsatt det fornuftige å verne (fysiologi + det er det du faktisk styrer), men det er ikke den demonstrerte spaken tallet antyder. Beslektet: Body Battery-underskuddet etter maraton (−47 D+1) er stort sett tettet på D+2, mens HRV fortsatt ligger nede til D+4 — energitilgang er ikke det som holder deg nede etter et maraton; det autonome er.

(Score og distanse-innen-klasse er i praksis null-prediktorer: retBÅDE vs score −0,16 over alt hardt, vs km −0,01. CTL-inngang likeså. Absorpsjon avhenger av klasse og innsats, ikke av hvor godt økta ble skåret eller hvor sprek du var.)*


3. Doserings-input u29–41 (Amsterdam-blokka)

Oversatt til blokkplanens faser (`Running_Brief_Blokkplan-Amsterdam_v2.md` §3). Alt nedenfor er avstands- og tolknings-regler — ingen av dem endrer planens økter, de forteller hvordan du leser wellness rundt dem.

Kvalitet er autonomt billig → doble-terskel-ukene er råd (u31 første dobbel, u34–36 ukentlig onsdag). HRV-gaten på PM-terskel-morgenene vokter akkumulert dysregulering (sykdom, søvngjeld, stress) — ikke gårsdagens terskeløkt, som per A1 ikke skal ha satt spor. Regel: er HRV rød morgenen før en planlagt dobbel uten et race/30k+/sykdom i forkant, behandle det som livsstress/søvn og avgjør på følelse — ikke kutt automatisk på antagelsen «gårsdagens terskel tok meg».

30k+ er en 2–3-dagers enhet → hold harde stimuli unna D+1/D+2 etter langtur. Konkret for M-spissingen: L4-turene (u40 36 km m/ MP, u41 26 km m/ 12 MP) skal ha ≥2 rolige dager før neste harde stimulus. I HM-bygget (u34–36) ligger onsdags-dobbel og helge-langtur 32/34 km allerede ~3 dager fra hverandre — behold det; ikke la en 30k+ havne rett foran eller etter en dobbel.

Race er en 4–5-dagers enhet → immunvakt + ikke kvalitet innen 4 dager, og ignorer krateret. Etter Energimila (u32) og Kbh HM (u38): 72 t immunvakt er gulvet, full HRV-klarering tar 4–5 dager. Forvent −30 til −45 % HRV morgenen etter — det er A5-krateret, ikke et varsel. Sikt kvalitet-retur til dag 4–5, ikke dag 3.

Varme (u29 ferie-hale + norsk sommer u30–31) → legg til ~½ dag i forventet klarering. Ferie-langturene (24/26 km i varme) vil lese litt verre på wellness enn samme innsats kaldt; ikke overkutt dagene etter på det grunnlaget alene (kobling til FABLE-4a — la varme-syntesen eie den endelige justeringen).

RHR-blindsone → ikke friskmeld på RHR alene. Gjennom hele blokka: bruk HRV (+ BB-lading) som absorpsjons-signal. En «fin» RHR dagen etter en 30k+ eller et race betyr ingenting for Carl (A4).

B1b-kobling (durability): en 30k+ som koster >3 HRV-dager (mot median 2–3) er en dårlig absorbert langtur — bruk det som en readiness-side durability-flagg ved siden av decoupling. Det gir B1b en uavhengig andre-akse (autonom hale, ikke bare in-run degradering) å validere mot NY-2023/Frankfurt-blokka når 30k+-turene kommer fra u29.


4. Konfidens per påstand

PåstandKonfidensHvorfor
Klasse-hierarki (maraton ≫ race > 30k+ ≫ kvalitet)**A**Stor n, stort effekt-sprang, robust mot metode-valg
Kvalitet autonomt ~gratis (52 % ingen dip)**A**n=327, ren akutt-måling, korroborert av recovery_response
RHR non-responder for Carl**A**Konsistent ~0 på tvers, matcher modell-vekting
30k+ = 2–3 dager**B**n=54 retur, reell-under-last (ikke isolert)
Maraton = 4–5 dager**B**HRV-retur klar, men n=7 med HRV
Varme forlenger ~½ dag**B**Signifikant men modest; era/sesong-konfundering mulig
TSB-inngang → dip-størrelse, ikke retur-fart**B/C**Mekanistisk ren, men race-n=19
Søvn IKKE bevist absorpsjons-spak**B**Betinget test rein (r=+0,02); fravær av bevis ≠ bevis på fravær
HM ~2–3 dager**C**n=3 rene løp

5. Ærlighetsnotat (begrensninger)

  • Reell-under-last, ikke isolert. Carl trener ~6 dager/uke, så «retur-til-baseline» er restitusjons-banen med påfølgende trening. Det er trolig riktig ramme for dosering (du restituerer aldri i vakuum), men det er ikke en ren enkeltøkt-kostnad. Den isolerte delmengden er for tynn til egne tall.
  • HRV-æra + tynn race-n. Alt hviler på 2022-09→; HM (n=3–4) og maraton (n=7 m/HRV) er tynne. 10k-race-tallet blandes av tune-up-innsats vs A-innsats (ikke separert her).
  • Søvn-koblingen delvis sirkulær (A7) — den er eksponert, ikke skjult, men betyr at enhver «søvn→restitusjon»-påstand fra rå korrelasjon må avvises.
  • Baseline-lekkasje: 50-dagers baseline kan inkludere andre harde økters etterdønninger, som demper målt dip (gjør kvalitet-kostnaden om noe undervurdert, ikke overvurdert — konservativt for A1).
  • Ikke testet: den isolerte delmengden (ingen ny hard økt i vinduet) — bør inn i en v2 når n vokser u29+.

Én-linje for konsoliderings-økta: `Running_Report_Absorpsjons-Syntese_v1.md` — absorpsjon per klasse: kvalitet ~0–1 d (autonomt gratis, 52 % ingen HRV-dip), 30k+ 2–3 d, maraton 4–5 d (−31 % HRV-krater, validerer immunvakt som gulv); RHR er non-responder (les HRV+BB); TSB-inngang styrer dip-størrelse ikke retur-fart (post-race-krater er godartet — gaten må ikke misfyre); varme +~½ d; søvn-«spaken» er stort sett måle-artefakt (r=+0,02 betinget på faktisk dip). Doserings-input u29–41 + B1b-flagg (30k+ >3 HRV-dager = dårlig absorbert) i §3. Ingen data/-skriv, ingen låste filer rørt.

Søvnarkitektur-dypdykkHva: Bærer dyp/REM/våken-minutter signal utover søvnscore/HRV?
Konklusjon: Null selvstendig signal (HRV-proxy); race-eve-frykten avkreftet — natten før løp ligger på baseline.
Fable2026-07-07
#søvn#arkitektur#HRV

Running Report — Søvnarkitektur-dypdykket

Dato: 2026-07-07 · Økt: FABLE-21 (TODO, Runde A) · Status: ferdig · Utfall: i hovedsak NULL (arkitektur = HRV/varighet-proxy for kvalitet), med to reelle ikke-prediktive strukturfunn (sesong + varme).

Kilder: `wellness.json` (sleep_deep/rem/light/awake_min + varighet, fra 2022-02) · `quality.json` (session_score, kvalitetsintervaller) · `training_load.json` (TSB pre = forrige dags rad, §4.3) · `races.json` (race-eve-netter) · `alcohol_log.json` (8 datoer) · `weather`-felt i quality (varme-proxy). Metode-arv: FABLE-4b (bins → multippel regresjon m/ HRV-kontroll → prekommitterte terskler → gate-logikk → multiple-testing-ærlighet).

Parallellregel: Denne økta rørte KUN denne rapportfila. Ingen skriv til `data/`, ingen TODO/CHANGELOG, ingen bygg, ingen git. All mellomregning i minne/scratchpad.


Sammendrag (les denne)

Spørsmålet var: bærer selve arkitekturen (dyp/REM/våken-minutter, ikke score) et selvstendig signal — predikerer arkitektur-avvik NOE som søvnscoren ikke allerede fanger? F4b viste at søvnscore er en HRV-proxy uten egen prediksjonskraft for øktkvalitet. Denne analysen utvider konklusjonen til minuttnivået: også arkitekturen er en proxy.

Hovedfunn (konfidens i parentes):

1. Arkitektur → øktkvalitet: NULL, høy konfidens. Med HRV (og TSB) kontrollert har ingen arkitektur-komponent — dyp, REM, våken, varighet, effektivitet, restorativ (dyp+REM) — selvstendig effekt på session_score (alle p≥0,18; HRV bærer alt, p=5·10⁻⁷). De to metrikkene som signifikante ut univariat (lett søvn ρ=+0,18; varighet ρ=+0,16) kollapser fullstendig når HRV legges inn — de var varighets-/HRV-speil. (n=341/323, HRV-kontroll, F4b reprodusert eksakt.)

2. Arkitektur legger ingenting til utover scoren: NULL, høy konfidens. Residualiserer man hver arkitektur-metrikk på søvnscoren og tester residualet mot kvalitet (H6), er ingen residual signifikant (alle p≥0,13). Arkitektur → score → HRV er én og samme informasjon; kjeden ender i HRV. Dette lukker arkitektur-spekulasjonen for morning brief / coaching (à la F16).

3. Race-eve-frykten er ubegrunnet: betryggende, lav–middels konfidens (n=10 maraton, deskriptivt). Selve natten før løp (T‑1) ligger på Carls personlige 30-d baseline (snitt Δvarighet +0,08 t — praktisk talt null). De famøse «dårlige» race-nettene er T‑2 (reisenatten to netter før), ikke natten før: Frankfurt hadde 6,2 t T‑2 men 8,1 t / 142 min dyp T‑1 og løp PB 2:53. Ingen synlig kobling race-eve-arkitektur → prestasjon.

4. Arkitekturen har reell sesongstruktur: middels–høy konfidens. Varighet er lengre vinter/vår (jan–apr ~7,1–7,2 t) enn sommer (jun–aug ~6,8–6,9 t); REM topper sen vinter/vår (feb–mai ~78–81 min), bunner sensommer (aug ~69); dyp søvn er høyest sensommer/høst (aug–sep ~101–103). Kruskal p=0,001 (dyp), 0,002 (varighet), 0,01 (REM). Robust (n≈120–150/mnd) — men beskriver input, ikke prestasjon.

5. Varme komprimerer søvnen: middels konfidens (dag-temp-proxy, sesong-konfundert, n liten). På varme dager (≥20 °C) er natten −0,6 t kortere (p<10⁻⁴) og REM −19 min (p=0,008). Innen sommer (jun–sep) overlever REM-effekten delvis (varm ≥22° vs sval <16°: REM 55 vs 75 min, p=0,035, n=8), mens varighets-effekten mest er sesong.

6. Alkohol: ingen påvisbar arkitektur-signatur, n=8 + sirkulær merking → ingen påstand. Logg-datoene er dels auto-detektert via «REM-krasj», så en test mot samme signal er sirkulær. Ingenting signifikant.

Operativ bunnlinje: Arkitektur-tallene er fine å se på, men de er ikke en beslutningsvariabel for om en kvalitetsøkt blir god — det er HRV. Ingen ny brief-/coaching-regel foreslås. Den ene plassen arkitektur allerede brukes riktig i systemet er sykdomsdeteksjonen (`illness_periods` bruker `deep_crash_pct` + `awake_spike_min`) — dvs. arkitektur er en dysregulerings-detektor, ikke en kvalitets-prediktor. Det skillet er hele funnet.


1. Spørsmålet og metoden

TODO/FABLE-21 spurte om arkitekturen — de faktiske søvnstadiene i minutter, ikke Garmins sammendrags-score — bærer informasjon utover det systemet allerede har. Fem underspørsmål: (a) netter før beste/verste kvalitet og løp, (b) reise/alkohol/varme-effekter, (c) sesongmønstre, og kjernen (d) predikerer arkitektur-avvik noe scoren ikke gjør — gjelder F4bs «score = HRV-proxy»-funn også arkitekturen?

Datagrunnlag. Arkitektur-feltene (`sleep_deep_min`, `sleep_rem_min`, `sleep_light_min`, `sleep_awake_min`, `sleep_duration_h`) har ≥85 % dekning fra 2022-02-01 (313–362 netter/år); før det er de tomme. Natt-konvensjon som i F4b: søvn datert dag D = natten før morgenen D, koblet til kvalitetsøkten samme dag. Analyse-korpus: 341 kvalitetsintervaller med komplett arkitektur (langturer ekskludert — egen skår-skala). Avledede mål: dyp %, REM %, våken %, restorativ = dyp+REM, effektivitet = sovende/(sovende+våken).

Prekommittert design (før fasit-kobling). Terskler satt på forhånd: en arkitektur-effekt regnes «selvstendig» kun hvis koeffisienten er p<0,0125 (Bonferroni ~4 metrikker) og overlever HRV-kontroll. Kontroll-variabler: HRV (`hrv_value`, fallback overnight) og TSB (pre = forrige dags rad i `training_load.json`, §4.3). Alle 44 tester som ble kjørt er ført i regnskapet (§7) — multiple-testing-ærlighet.

Kalibrering (H0). Før noe nytt: reproduserte F4bs kjerneregresjon `score ~ søvnscore + HRV + TSB`. Resultat n=323: søvn β=+0,0021 (p=0,83), HRV β=+0,0305 (p=1,2·10⁻⁵), TSB β=−0,0024 (p=0,60) — matcher F4b (+0,0022 / +0,0304 / −0,0024) til fjerde desimal. Netter med søvn<74 har HRV 55,7 vs 67,5 for ≥74 — identisk med F4b. Join-konvensjonen er verifisert; alt under bygger på samme rør.


2. Bærer arkitekturen selvstendig kvalitetssignal? (H1 — NULL)

Univariat ser to metrikker «lovende» ut: lett søvn (Spearman ρ=+0,18, p=0,0008) og total varighet (ρ=+0,16, p=0,003) korrelerer svakt positivt med øktscore. Dyp, REM, våken, dyp %, REM %, restorativ og effektivitet er alle flate (|ρ|≤0,08, p≥0,15).

Men de to «treffene» er varighets-artefakter: lett søvn og varighet korrelerer r=0,70 med hverandre (lange netter er mest lett søvn), og begge korrelerer med HRV (r≈0,15–0,26). I multippel regresjon med HRV forsvinner begge:

Modell (n=323)arkitektur-leddHRV
`score ~ deep+rem+awake+HRV+TSB`deep p=0,28 · rem p=0,74 · awake p=0,18**p=5·10⁻⁷**
`score ~ light+dur_h+HRV`light p=0,17 · dur_h p=0,67**p=2·10⁻⁶**
`score ~ restorativ+effektivitet+HRV`restorativ p=0,38 · effektivitet p=0,22**p=1·10⁻⁷**

Ingen arkitektur-komponent nærmer seg den prekommitterte terskelen (0,0125). HRV er den eneste driveren i hver modell. Konklusjon: arkitekturen bærer intet selvstendig signal for øktkvalitet utover HRV. (Høy konfidens: n stor, effekt-nullen er entydig, ikke et grensetilfelle.)


3. Netter før beste vs verste kvalitet (H2)

Sammenligner arkitektur på netter før topp-desil (snitt-score 9,29) mot bunn-desil (5,04) kvalitetsøkter, k=34 hver:

MetrikkToppBunnΔMWU p
Lett søvn (min)263227+360,002
Varighet (t)7,36,8+0,40,005
Dyp (min)94106−120,10
REM (min)7876+20,66
Restorativ (min)172183−110,13
Våken (min)5,84,4+1,40,44
Effektivitet (%)98,898,9−0,20,62

Samme mønster som H1: de beste øktene følger lengre netter (mer lett søvn, mer total tid), men ikke mer dyp eller REM — faktisk marginalt mindre dyp. Dette er ikke en arkitektur-kvalitets-signatur; det er «lengre + bedre HRV henger sammen». Ingenting her overlever HRV-kontrollen fra §2.


4. Race-eve (H3 — betryggende, deskriptivt)

For alle 25 løp 2022+ ble T‑1 (natten før løp) og T‑2 (to netter før) tabulert. Det operative spørsmålet er om race-eve-arkitektur påvirker prestasjon, og om «anticipation-insomnia» før A-løp er en reell risiko.

Maraton T‑1 vs Carls personlige 30-dagers baseline:

LøpVarighet T‑1baselineΔDyp T‑1REM T‑1
København M 2:596,67,2−0,611568
Berlin M 2:597,47,2+0,210156
Valencia M 2:566,77,2−0,58647
London M 3:19 🥵7,37,1+0,110476
**Frankfurt M 2:53 (PB)****8,1**7,2**+0,9****142**84
New York M 3:097,77,1+0,616162
Snitt (n=10)**+0,08**

Race-eve-natten er i snitt på baseline (median Δ +0,08 t). Det er ingen systematisk søvnunderskudd natten før løp — tvert imot sover Carl om noe litt bedre før de store målløpene (taper + lav belastning → god søvn: Frankfurt 8,1 t, EnergiMila 8,8 t/score 94, Sommernattsløpet 8,1 t/score 100). Anticipation-insomnia er ikke synlig i dataene.

«Berlin 8,4 vs Frankfurt 6,2»-forvirringen oppklart. Spec-en refererte til T‑2, ikke T‑1. Frankfurt: reisenatten (T‑2, 25.10) var 6,2 t — men natten rett før løp (T‑1, 26.10) var 8,1 t og PB fulgte. Berlin HM: T‑2 var 8,4 t, T‑1 var 7,1 t, også PB. Begge løp ble PB uansett T‑2-natt → race-eve-arkitektur er ikke en prestasjonsspak. De to svakeste maratonene (Barcelona, Valencia 3:14) hadde henholdsvis høy REM (136 min) og normal arkitektur — motsatt av en «dårlig søvn → dårlig løp»-historie. (Lav–middels konfidens: n=10, rent deskriptivt, ingen inferens prekommittert.)


5. Reise / alkohol / varme (H4)

Varme — den klareste miljøeffekten. På kvalitetsøkt-dager med ≥20 °C (dag-temp som proxy) er natten −0,6 t kortere (p=7·10⁻⁵) og REM −19 min (p=0,008) vs dager <10 °C. Fordi varme dager er sommerdager, testet jeg innen jun–sep for å skille varme fra sesong: varm (≥22°) vs sval (<16°) sommernatt gir REM 55 vs 75 min (p=0,035) og varighet 6,5 vs 6,9 t (p=0,11, ns) — REM-suppresjonen overlever delvis sesong-kontrollen, varighets-effekten er mest sesong. Fysiologisk plausibelt (varme undertrykker REM). Middels konfidens: dag-temp ≠ natt-temp, og n=8 for den rene varme-innen-sommer-kontrasten. Konsistent med F4a-rammen (Italia-vinduet: søvn −5,9 under varme/reise).

Alkohol — ingen påstand. De 8 loggede datoene gir natten etter: varighet +0,8 t, REM +12 min, HRV −7,7 — men ingenting signifikant (alle p≥0,07), og verre: flere logg-datoer er auto-detektert nettopp via «sterk REM-krasj», så å teste REM mot dem er sirkulært. Underpowered + kontaminert merking → arkitektur-alkohol-effekt kan ikke vurderes på disse dataene. (For treningsberedskap gjelder uansett designregel 3: alkohol nuller illness-score, bevarer fysiologi.)

Reise har ingen egen logg; den observerbare reise-effekten er fanget i T‑2-race-nettene (§4) og varme/ferie-vinduene (F4a). Ingen selvstendig test mulig.


6. Sesongmønster (H5 — reelt, ikke-prediktivt)

Måned-snitt over alle netter 2022+ (n≈120–150/mnd):

MndDypREMLettVarighetMndDypREMLettVarighet
Jan96722587,11Jul98752416,90
Feb88812637,21Aug101692446,89
Mar90812497,01Sep103712477,01
Apr91812557,14Okt98742537,08
Mai101782437,03Nov97732486,96
Jun96732386,79Des98722547,05

Kruskal-Wallis over måneder: dyp p=0,001, varighet p=0,002, REM p=0,01 (våken og effektivitet ns). Mønsteret er koherent: sommeren gir kortere netter med mindre REM og litt mer dyp; vinter/vår gir lengre netter med mer REM. Trolig lys/temperatur-drevet (norske lyse sommernetter + varme). Robust gitt n, men dette beskriver hvordan miljøet former inputen — det er ikke en prestasjons- eller beredskaps-prediktor, og gir ingen operativ regel utover det §5 (varme) allerede sier.


7. Predikerer arkitektur-avvik noe scoren ikke gjør? (H6 — NULL, kjernetesten)

Dette er spec-ens sentrale spørsmål. Metode: residualiser hver arkitektur-metrikk på søvnscoren (fjern alt scoren allerede «vet»), og test om residualet predikerer øktkvalitet med HRV kontrollert.

Arkitektur-residual (etter søvnscore)β mot scorep (n=323)
dyp_resid−0,00330,25
REM_resid−0,00220,57
våken_resid+0,01040,18
effektivitet_resid−0,05090,16
restorativ_resid−0,00370,15
lett_resid+0,00250,13
varighet_resid+0,13590,37

Ingen arkitektur-residual er i nærheten av signifikant. Det arkitekturen «vet» utover søvnscoren, forklarer ikke øktkvalitet. Kombinert med §2: arkitektur → søvnscore → HRV er én informasjonskjede, og bare HRV-enden har prediksjonskraft. F4bs funn generaliserer rent til minuttnivået: også arkitekturen er en HRV-proxy. Null-funnet er svaret — og det er et verdifullt svar: det lukker arkitektur-spekulasjonen, og morning brief / coaching trenger ikke gjette på dyp/REM-minutter.


8. Multiple-testing-regnskap

Totalt 44 hypotesetester kjørt. Ved ren tilfeldighet ville ~2,2 falle under p<0,05; 9 gjorde det (alle også <0,0125). Men de ni klumper seg i nøyaktig to reelle fenomener, begge om søvn-inputen, null om prediksjon:

  • Sesong (H5): dyp p=0,001, varighet p=0,002, REM p=0,01
  • Varme (H4): varighet p=7·10⁻⁵, REM p=0,008
  • Varighets-artefakter (H1/H2 univariat): lett søvn og varighet mot score — som dør under HRV-kontroll (§2) og derfor ikke er ekte prediktorer

Ingen av de ni overlevende sier at arkitektur predikerer kvalitet eller prestasjon. Alle prediksjons-testene (H1 multippel, H2 restorativ/dyp, H6 alle residualer) er nuller. Det er den ærlige lesningen: de reelle signalene handler om hva som former søvnen (årstid, varme), ikke om hva søvnen former.


9. Operative implikasjoner

1. Ingen ny brief- eller coaching-regel. Arkitektur-minutter er ikke en beslutningsvariabel for kvalitetsøkter. Behold HRV som primær beredskaps-driver (som F4b allerede etablerte). Dette bekrefter og utvider G1-ryddingen.

2. Race-eve: ikke bekymre deg for natten før. Data viser at Carl sover på baseline eller bedre før A-løp, og at prestasjon er upåvirket av race-eve-arkitektur (Frankfurt PB på T‑2 6,2 t). Reise-nettene (T‑2) er der forstyrrelsen sitter, men de kostet ikke tid. Ingen søvn-basert race-uke-regel er berettiget. Innspill til FABLE-22: dette støtter «reise inn tidlig, men ikke overdramatiser én dårlig reisenatt».

3. Arkitekturens ekte jobb er dysregulerings-deteksjon, ikke kvalitets-prediksjon. `illness_periods` bruker allerede `deep_crash_pct` og `awake_spike_min` som sykdomssignaler — det er den fysiologisk riktige bruken (akutt arkitektur-brudd = autonom forstyrrelse), og den skal ikke forveksles med å bruke arkitektur til å forutsi om en økt blir god. Skillet knytter til F15/KLASS-4: arkitektur hører hjemme i sykdoms-/dysregulerings-laget, ikke i kvalitets-laget.

4. Sesong/varme er kontekst, ikke alarm. At sommernetter er kortere med mindre REM er normalt for Carl — det bør ikke tolkes som formtap. Nyttig som bakgrunn når man leser wellness om sommeren (jf. F4a-varme og evt. FABLE-24 miljø-atlas), ikke som en gate.

Åpne tråder (ikke løst her): natt-temperatur mangler (kun dag-temp-proxy) — en ekte varme-på-arkitektur-test krever soveromstemp Carl ikke logger. Alkohol-arkitektur er ikke vurderbar før loggen er renere og ikke-sirkulær. Begge er lavprioritet gitt at hovedspørsmålet (prediksjon) er avklart negativt.


Konsolideringslinje (til Carl / neste økt)

`Running_Report_Sovnarkitektur_v1.md` — NULL-funn på kjernespørsmålet: søvnarkitekturen (dyp/REM/våken/varighet i minutter) bærer intet selvstendig signal for øktkvalitet utover HRV, og ingen arkitektur-residual predikerer noe søvnscoren ikke alt gjør (H1+H6 nuller, HRV p=5·10⁻⁷, F4b reprodusert eksakt, n=341/323). Lukker arkitektur-spekulasjonen à la F16 — ingen ny brief-/coaching-regel. Race-eve-frykt avkreftet: T‑1-natten ligger på baseline (Δ +0,08 t), Frankfurt PB på 6,2 t T‑2-reisenatt; race-eve-arkitektur er ikke en prestasjonsspak (deskriptivt, n=10). To reelle men ikke-prediktive strukturfunn: arkitekturen har sesongmønster (kortere/mindre-REM-somre, p≤0,01) og komprimeres av varme (varighet −0,6 t, REM −19 min; REM-effekt overlever delvis sesong-kontroll, n liten). Alkohol ikke vurderbar (n=8 + sirkulær merking). Operativt: arkitekturens riktige rolle er sykdoms-/dysregulerings-deteksjon (`illness_periods` bruker alt deep_crash/awake_spike), ikke kvalitetsprediksjon. 44 tester ført; 9 signifikante klumper i sesong+varme, alle prediksjons-tester null. Ingen `data/`-skriv, ingen bygg (parallellprotokoll).

KontinuitetsanalysenHva: Alle treningsavbrudd 2019–2026: årsak, kostnad, og om kontinuitet slår peak.
Konklusjon: Ett skade-avbrudd på 7,5 år; kostnad = timing × varighet (4 dager i byggefase rev to måneder).
Fable2026-07-07
#kontinuitet#avbrudd#CTL

Kontinuitetsanalysen — avbruddene 2019→2026

Dato: 2026-07-07 · Skrevet av: Claude (Fable, FABLE-20 fra TODO) · Grunnlag: `data/processed/activities.json` (hull-deteksjon, løpsfiltrert), `data/processed/training_load.json` (CTL/TSB-baner), `data/processed/illness_periods.json` + `data/static/illness_classification.json` (typede forstyrrelser), `data/processed/races.json` + `race_predict_model.json` (progresjon + LOO-residualer). Ankere: F17 Syvårs-syntesen v2 («friske uker er investeringen») og F15 Infeksjonsvinduene (infeksjonskost-rammen). Alt read-only; kun denne fila er skrevet (parallell-protokoll).


Hva dette er: Testen av F17-hypotesen «friske uker er investeringen», kvantifisert. Analysen katalogiserer hvert treningsavbrudd 2019→2026 (>5 d uten løp / >50 % volumfall uke-mot-uke), attribuerer årsak, måler kostnad (CTL-tap + retur-tid), og stiller det avgjørende spørsmålet: er kontinuitet en bedre prediktor for årsprogresjon enn peak-CTL/peak-uker? Svaret er mer nyansert enn hypotesen — og reframer selve kostnadsbegrepet.

Metode-noter (les før tallene):

1. Løpsfilter (viktig datarettelse): `activities.json` inneholder 161 «Ride», 69 «Ski», 58 «Hike» m.fl. feilimportert som `type=Run` (Strava-default; jf. `nonrun_overrides.json`, SYSTEM_OVERVIEW §4.6). Ufiltrert ga dette f.eks. 2019 = 1696 «løpe»-km (sykkelturer i sommerferien). Filtrert (id-liste + navnenøkkelord) matcher F17s årstabell eksakt: 2019 757 km (F17: 758), 2024 4170 (4170), 2025 4357 (4357). Alle tall under bruker det filtrerte løps-korpuset.

2. Avbrudd = uønsket brudd, ikke planlagt nedtrapping. Volumfall-metrikken (§3) fanger både avbrudd og planlagte deload/taper-uker — den er derfor konfundert og brukes kun som støtte. Den rene testen bor i avbruddskatalogen (§1), som teller ufrivillige hendelser (sykdom/skade) + kalenderpauser separat.

3. Sykdomsdetektoren dekker kun 2022+ (krever Garmin-wellness). Avbrudd 2019–21 attribueres fra Strava-beskrivelser + CTL-form, ikke fra detektoren. Skade-attribusjon er beskrivelses-basert (nøkkelord + Carls egne ord) hele veien.

4. CTL-kostnad = CTL ved onset minus CTL-bunn innen 35 d. Retur-tid = dager fra bunn til CTL igjen ≥ pre-nivå. Sesong-slutt-avbrudd får kunstig «>120 d» fordi treningen bevisst stanser — merket der det gjelder.

5. «vs modell» = LOO-residual fra `race_predict_model.json` (negativ err_pct = tregere enn modellen ventet).


1. Avbruddskatalogen — hva som faktisk brøt kontinuiteten

Fullstendig >5-dagers komplett-stopp-liste (2019-Q1 utelatt — pre-strukturert, CTL≈0). Klassifisert på årsak, med CTL-kostnad.

AvbruddDagerÅrsakCTL-tapReturKommentar
**2022-12→2023-01 (kne)**~40 (6 uker ≈0 km)**SKADE****−43,6** (94,7→51,1)209 d*«Ødelagt kne etter Valencia». Materialets eneste ekte skade-avbrudd. Rebygde kun til CTL 82 før Paris.
2021-12-23→01-0716Jul/ferie−24,8~30 dÅrets største kalenderpause; frivillig.
2022-12-29→01-1619Jul + kne-hale−6,7raskDel av kne-episoden over (lav base = lite igjen å tape).
2019-10-17→10-2913Sesongslutt−11,1Frivillig høstpause (nybegynner-æra).
2021-09-05→09-117Post-race−13,7~14 dEtter maraton-debut («alt brukt», HR 188/190).
2024-12-02→12-076Post-race + reise−13,0~14 dEtter Valencia (PB 2:56). Planlagt utladning.
2023-04-03→04-086Post-race−9,0~10 dEtter Paris.
2019/2022 øvrige6–8Jul / vinter−4…−9raskNybegynner-/basefase-pauser.

(Kne-retur «209 d» = til nøyaktig pre-Valencia-peak 94,7; men Paris-blokka var reelt tilbake i trening innen ~5 uker på lavere platå. Tallet illustrerer at et 43-CTL-krater ikke hentes inn på én blokk.)

Den store observasjonen fra katalogen: På 7,5 år finnes det nøyaktig ett ufrivillig skade-avbrudd — kneet vinteren 2022/23. Alt annet >5-dagers stopp er enten frivillig (jul, sesongslutt, planlagt post-race-utladning) eller kort sykdom. Injury-nøkkelordskann av alle 2 000+ beskrivelser bekrefter: utover kneet finnes bare forbigående nevn (låret sep-22 én uke, «kne slarker litt» nov-24 én økt) — ingen med layoff. Carl er ekstremt holdbar; kontinuiteten hans brytes av kalender og virus, nesten aldri av kropp. Det er i seg selv det viktigste kontinuitets-funnet, og det setter rammen for resten.


2. Funn

K1 — Kostnaden til et avbrudd styres av TIMING × VARIGHET, ikke av dag-antallet. Katalogen spriker enormt i pris: kneet (badly-timed, rett inn i en maratonblokk) kostet −43,6 CTL og et helt maraton (Paris, se K3), mens 2025s 21 detekterte forstyrrelses-dager (§4) kostet nær null. En jul-pause på 16 dager (−24,8 CTL) hentes inn på fire uker uten spor i noen race; en 4-dagers infeksjon midt i en byggefase (post-Berlin 2026, −14 CTL, 55 d retur) river to måneder. Dag-antall er en dårlig kostnadsmåler. Den dyre varianten er lang + dårlig timet (skade/infeksjon i byggefase eller taper); den billige er kort eller etter målløpet.

K2 — På årsnivå kan kontinuitet IKKE skilles fra volum/peak — alt er kollineært og monotont. Progresjonen (10k-PB, den reneste motor-proxyen) er strengt monoton: 42:07 (2020) → 39:48 → 39:26 → 38:38 → 37:23 (2025). Det er også volum, peak-CTL og kontinuitet. Rangkorrelasjon mot 10k-progresjon (n=5 år, ultra-tynt, kun retningsgivende): median-ukevolum ρ=+1,0, peak-CTL ρ=+0,9, kontinuitets-fraksjon ρ=+0,35, lav-CV-kontinuitet ρ=+0,30. Naивt lest «taper» kontinuiteten for volum og peak — men det er en felle: (a) alt er den samme era-konfunderte tidstrenden F17 advarer mot, og (b) *du kan ikke bygge median-84-km-uker uten kontinuitet — høyt medianvolum er delvis et kontinuitetsmål. Kontinuitets-indeksene* (CV, lav-uke-andel) er dessuten forurenset av planlagte deloads/tapere (metode-note 2). Årsnivået kan altså ikke avgjøre spørsmålet; det må stilles på avbrudds- og kontrast-nivå.

K3 — Peak-CTL er DISPONIBEL — det ene stedet dataene skiller, vinner kontinuitet/kvalitet over peak. Den eneste separerbare kontrasten i materialet er 2024→2025: peak-CTL FALT 115→106 (−9), men 2025 ga årets største motorsprang (10k −75 s til 37:23, maraton −3:31 til 2:53:06). Volumet var praktisk talt identisk (median-uke 83,6→84,0 km), kontinuiteten holdt (kun 2 lav-uker mot 3), og kvaliteten (dobbel-terskel/mølle) steg. Å presse peak-CTL høyere var altså ikke spaken over platået — det bekrefter F17s «volum er en plattform, ikke en spak», og flytter det til peak-CTL spesifikt: 2025 beviser at nivået klatrer videre på lavere peak så lenge de friske ukene og kvaliteten er der.

K4 — Race-residualene bekrefter mekanismen: den dyre avbrutte blokka underpresterte, den billige gjorde det ikke. Paris 2023 (kne-stjålet base, kun CTL 82 mot 94,7-peaken) underpresterte modellen på hvert horisont (T-14 −1,2 %, T-28 −1,5 %, T-56 −3,5 %, T-84 −2,4 %) — avbruddet er synlig i tallet, ikke bare i fortellingen. Frankfurt 2025 (spredte, korte sykedager, full base) lå derimot på/over modell (T-7 −0,8 % → T-84 +4,9 %) — en negativ-split-PB. Kontinuitet som bygde full base → race på nivå; avbrutt base → race under nivå. (Brukt varsomt: residualer konflater vær/dagsform/racecraft; Paris og Frankfurt er to punkter, ikke en lov.)

K5 — Det reneste årsnivå-signalet peker likevel mot friske uker: det beste året var det friskeste. 2024 — gjennombruddsåret (første sub-3, peak-CTL 115 all-time, største maratonsprang −9:51) — hadde færrest forstyrrelses-dager i hele materialet: 3. Til sammenligning 2022: 11, 2023: 16, 2025: 21, 2026: 40 (så langt). Den friskeste sesongen var den beste sesongen. Det er den sterkeste år-nivå-støtten til F17-hypotesen — men n=1, og 2024 var også toppen på volum og kvalitet, så det er ikke en ren kausaltest. Det er suggestivt, ikke bevist.


3. Kontinuitets-metrikk vs progresjon — tabellen

ÅrMedian-uke kmCV % (lavere=jevnere)Kont-fraksjon¹Peak-CTLForstyrr.-dager²10k-PBMaraton-PB
201917530,6269
202042270,817742:07
202147330,88923:30:07
202252470,79961139:483:14:28
202368300,811041639:263:09:07
**2024****84**320,75**115****3**38:38**2:56:37**
**2025**84**24****0,88**10621**37:23****2:53:06**
2026*79270,8195401:21:18 (HM)

¹ Andel uker ≥70 % av årets median. ² Detektor, kun 2022+. *2026 delår.

Dommen (ærlig): På denne tabellen er volumnivået den sterkeste enkeltkorrelaten til progresjon, ikke noen kontinuitets-indeks — men (K2) det er en tidstrend-artefakt, og volumet forutsetter kontinuiteten. *Kontinuitet er ikke en bedre årsnivå-prediktor enn peak-CTL/volum; den er en nødvendig betingelse for dem. Der dataene faktisk skiller (2024→2025, K3), taper peak-CTL. Og det reneste enkeltmønsteret (K5: friskeste år = beste år) og residual-mekanismen (K4) peker samme vei: friske uker vinner ikke en regresjon mot volum — de muliggjør volumet og beskytter realiseringen. F17-hypotesen holder, men presiseres: investeringen er ikke en kontinuitets-ratio å maksimere, det er fraværet av dyre avbrudd*.


4. Kontrafaktisk: hva ville 2025 vært uten de 7+10 sykedagene? (**estimat — merket ærlig**)

F17s ramme: Frankfurt-blokka «kostet 7 sykedager», pluss den 10-dagers post-Frankfurt-perioden (27.10, F15 foreslår re-typet → infection). Detektoren finner 9 forstyrrelses-dager før Frankfurt (11.7 2d, 5.8 1d, 20.9 2d, 18.10 2d + hale) og 12 etter (27.10→05.11 pluss to desember-netter) — konsistent med «7+10».

De 7 (i blokka): alle korte (1–2 d), spredt over juli–oktober. Tross dem toppet CTL på 106 (5. okt) — årets høyeste — og Frankfurt ble en negativ-split-PB (2:53:06) som lå på/over sin egen modell (T-7 −0,8 %). Fjerner man dem: CTL kanskje +2–4 inn i race, men Frankfurt overpresterte allerede sin base. Estimert tidsgevinst: neglisjerbar — trolig <15–20 s, innenfor modellstøyen. Blokka absorberte dem.

De 10 (etter Frankfurt): sesongslutt, null race etter 26.10. Effekt på 2025-utfall: null. Marginal effekt = litt tidligere start på vinterbasen 25/26.

Ærlig dom: 2025 uten de 7+10 sykedagene ≈ identisk 2025. Nettopp fordi de var korte og godt (eller uskadelig) timet, var de nesten gratis — 2025 var allerede den «friske» kontrafaktikken. Det motsatte av en gratis-sak finnes to andre steder i materialet, og det er de kontrafaktikkene som betyr noe: Paris-2023-uten-kneet (full base → et reelt 3:0x i stedet for 3:21) og Berlin-2026-uten-infeksjonen (to måneder spart). Lærdommen speiler K1: det er ikke antall sykedager i et år som avgjør — det er om de treffer en byggefase/taper eller ikke. 2025 hadde flest forstyrrelses-dager av alle modne år (21) og betalte minst for dem.


5. Konfidens per funn

FunnKonfidensHvorfor
K1 — kostnad = timing × varighet, ikke dag-antall**A**Katalogen spriker to størrelsesordener på pris; mekanistisk opplagt
Katalogen: ett ufrivillig skade-avbrudd på 7,5 år**A**Uttømmende hull-skann + beskrivelses-skann; robust
K3 — peak-CTL disponibel (2024→2025)**B**Ren separerbar kontrast, men n=1 år-par, dobbel-terskel-konfundert
K4 — avbrutt base → race under modell (Paris)**B**Residual entydig på Paris, men to-punkts + racecraft-konfunder
K5 — friskeste år = beste år (2024)**B/C**Sterkt mønster, men n=1 og kollineært med volum/kvalitet
K2 — kontinuitet ikke separerbar fra volum på årsnivå**A**Kollinearitet + monoton trend er et faktum, ikke et estimat
§4 — 2025-kontrafaktikk ≈ identisk**B**Godt begrunnet av CTL-topp + Frankfurt-residual, men et estimat

6. Implikasjoner (operative — til blokkplan v3 / 2027-arkitektur)

1. Kontinuitets-metrikken som betyr noe er «dyre-avbrudd-teller», ikke en ratio. Blokk-monitorens ≤2-sykedager-KPI (BLK-1) bør vektes på timing: en sykedag i taper eller siste byggeuke er dyr; en i basefase eller post-race er gratis. Foreslå: flagg kun forstyrrelser som faller i de siste 6 ukene før A-race eller i en definert byggefase.

2. Slutt å jakte peak-CTL over ~106–110. K3 viser nivået klatrer på lavere peak med bevart kontinuitet + kvalitet. Dette bekrefter v3s tak (85–95 km/u bygg) fra en ny vinkel: peak-CTL er ikke spaken, og å presse den kjøper avbrudds-risiko (jf. Frankfurt-taket, F17).

3. Skade er ikke risikoen — virus og kalender er. Kneet 22/23 er eneste skade på 7,5 år; holdbarheten er et aktivum, ikke en bekymring. Kontinuitets-vernet skal derfor rettes mot infeksjon (F15s kalenderstyrte immunvakt IV1–IV5) og mot å ikke stable dårlig-timede avbrudd — ikke mot skadeforebygging, som allerede er løst av Carls kropp.

4. 2027-valg (F17 §6): kontinuitets-linsen favoriserer form A (gjenta 2026-malen) — færre A-race = færre dårlig-timede eksponeringsvinduer, og mindre fristelse til peak-jag. Form B (2–3 maraton) multipliserer eksponeringsvinduene (K1) og bør kun velges hvis immunvakta er stram.


7. Ærlighetsnotat (begrensninger)

  • n er tynt på hvert nivå. Progresjon: 5 år med standalone-10k. Skade-avbrudd: 1. Separerbar peak-kontrast: 1 årpar. Ingen av funnene tåler et p-krav — de er retningsgivende mønstre for én person.
  • Era-konfundering er total (arvet fra F17): 2024–26 er bedre på volum, kvalitet, kontinuitet, utstyr og kunnskap samtidig. K2 er ærlig om at årsnivået ikke kan dekomponeres; K3/K5 er de minst konfunderte bitene, men ikke ukonfunderte.
  • Kontinuitets-indeksen (CV, lav-uke-andel) er forurenset av planlagt periodisering — deload/taper-uker ser ut som «brudd». Derfor lener analysen seg på avbruddskatalogen (ufrivillige hendelser), ikke på indeksen, for kausale påstander.
  • Detektoren undertelller sykdom (F15: flu-B PCR+ nær usynlig) og dekker ikke 2019–21. De faktiske forstyrrelses-dagene per år er trolig høyere enn §3-kolonnen, særlig tidlig — trenden (2024 friskest) kan være robust, men absoluttallene er gulv.
  • Retur-tid er støyete for sesongslutt-avbrudd (treningen stanser bevisst → kunstig lang «retur»). Merket i §1; ikke overtolk «209 d» for kneet.
  • CTL (Banister) er en modell, ikke målt form; τ-valgene (ATL/CTL) er systemets standard og ikke re-validert her.

Én-linje for konsolideringsøkta: `Running_Report_Kontinuitet_v1.md` — på 7,5 år har Carl ett ufrivillig skade-avbrudd (kneet vinter 22/23, −43,6 CTL, stjal Paris-basen); ellers brytes kontinuiteten av kalender og virus, nesten aldri av kropp. Avbruddskostnad = timing × varighet, ikke dag-antall (K1): 2025s 21 forstyrrelses-dager var nær gratis (korte/godt timet — kontrafaktikken ≈ identisk 2025), mens 4 infeksjons-dager i en byggefase (2026) rev to måneder. Kontinuitet er ikke en bedre års-prediktor enn volum/peak — den er betingelsen for dem (K2), men peak-CTL er disponibel (2024→2025: −9 peak, største motorsprang, K3), og friskeste år = beste år (2024, 3 forstyrr.-dager, K5). F17-hypotesen holder, presisert: investeringen er fraværet av dyre (lange, dårlig-timede) avbrudd, ikke en kontinuitets-ratio å maksimere. Datarettelse underveis: løpsfilteret fjernet sykkel/ski/tur feilimportert som Run (matcher nå F17s årstabell eksakt). Ingen data-/TODO-/CHANGELOG-skriv; parallell-protokoll holdt.

Detrenings-/reversibilitetskurvenHva: Hvor fort faller reell form (ikke bare CTL) i et avbrudd, og hvor fort kommer den tilbake.
Konklusjon: To klokker: CTL-halveringstid 29 d vs fysiologisk motor (EF/LT2) — motoren holder lenger.
Opus2026-07-07
#detrening#decay#CTL

Detrenings- og reversibilitetskurven — hva et avbrudd faktisk koster motoren

Dato: 2026-07-07 · Skrevet av: Claude (Opus 4.8, OPUS-SPOR-A fra TODO) · Grunnlag: `data/processed/training_load.json` (CTL/ATL/TSB-baner, τ_CTL=42, τ_ATL=7), `data/processed/activities.json` (2 081 løp etter cross-training-filter), `data/processed/quality.json` (I3-terskeløkter), `data/static/zones.json` (`physiology_by_period` — LT2-ankere per æra). Anker: F20 / `Running_Report_Kontinuitet_v1.md` (avbruddskatalogen — bygger på, duplerer ikke). Alt read-only; kun denne fila er skrevet (parallell-protokoll, SPOR A).


Hva dette er: F20 katalogiserte hvilke avbrudd som skjedde og CTL-kostnaden av dem. Denne tar neste steg: decay-raten — hvor fort taper Carl reell form (ikke CTL-bokføring) i et avbrudd, og hvor fort kommer den tilbake. Skillet er hele poenget: CTL er et EMA-regnskap over belastning, ikke et mål på motoren. Spørsmålet RC6 svarer på er «hva koster sommerens Europa-bilferie egentlig», og svaret er mindre enn CTL-krateret antyder.

Metode-noter (les før tallene):

1. To klokker, ikke én. CTL (fitness-proxy i Banister-modellen) faller matematisk med τ=42 d → halveringstid 29,1 d i et komplett stopp. Motoren måles fysiologisk: aerob effektivitet, terskel og VO2. De to henger sammen, men de reverserer i vidt forskjellig tempo — det er hovedfunnet.

2. Aerob-markøren = EF = m/min per hjerteslag for easy/langtur, utendørs, HR 115–150, ≥5 km (n=1 144). HR-normalisert, så den fanger «hvor fort går han på en gitt puls». Oversatt til intuisjon som pace@128 = 1000/(EF·128) s/km. Dette er «aerob@128» — ikke et smalt HR-bånd (der n er for tynt bakover), men hele easy-korpuset normalisert.

3. LT2-proxy leses fra to hold: æra-ankrene i `zones.json` (Carl-kanoniske, låst) og empirisk median-pace på I3-terskeløkter per år. Pace-grensene drifter mellom æraer (SYSTEM_OVERVIEW §4.4) — LT2 leses derfor æra-relativt, aldri absolutt bakover.

4. VO2 har ingen kontinuerlig historikk i systemet (`garmin_pred_history` har 2 rader, fra 2026-07-05; Garmins løpende VO2-estimat er aldri logget). Eneste harde punkt er lab-ankeret VO2maks 61,7 (Granåsen 24.02.2026). VO2 behandles derfor som diskret anker, med EF/terskel som den kontinuerlige proxyen.

5. n er tynt og konfundert. Materialet har ett ekte skade-avbrudd på 7,5 år (kneet 22/23 — F20s funn). Alt annet >5-dagers stopp er kort (6–20 d) eller frivillig. Reversibilitets-τ under er derfor størrelsesordener, ikke fittede konstanter. Der jeg gir et tall, gir jeg konfidensgrad.


1. Avbruddskatalogen, re-derivert fra data (CTL-siden — bekrefter F20)

Gap ≥6 d uten løping, 2020→, med CTL ved onset, CTL-bunn innen 35 d og retur-tid til pre-nivå. Matcher F20s katalog (samme hendelser, samme størrelsesorden).

AvbruddDagerCTL onset→bunnCTL-tapRetur (CTL≥pre)Type
**2022-12-04 → (kne, kompound)**6 + 20¹94,7 → 51,8**−42,9**251 dSkade
2021-12-22 → 01-081777,5 → 45,2−32,3203 dJul/kalender
2024-12-01 → 12-08796,7 → 72,4−24,390 dPost-race (Valencia)
2021-09-04 → 09-12888,3 → 64,3−24,0>250 dPost-race (debut-M)
2022-05-08 → 05-14677,3 → 64,5−12,866 dKort/vinter
2023-04-02 → 04-09782,0 → 71,1−10,9103 dPost-race (Paris)

¹ Kne-krateret er kompound: et 6-dagers stopp 04.–10.12 (CTL 95→52) + et 20-dagers 28.12–17.01. F20s «−43,6» og denne −42,9 er samme hendelse, ulik onset-dag.

Observasjon (samme som F20 K1): CTL-tapet styres av timing × varighet, ikke dag-antall. Et 7-dagers post-race-stopp (Valencia) «koster» −24 CTL fordi det starter fra en høy, fersk topp; et 20-dagers kne-hale-stopp koster −7 fordi basen alt var i grus. CTL-tap er en dårlig formkostnad-måler — det er derfor motoren må måles direkte.


2. Aerob motor (EF / pace@128) — den lange trenden

EF-median per år, med pace@128 som intuisjon. Monoton stigning; dette er motoren som faktisk bygges.

ÅrEF (m/min/bpm)pace@128n
20191,1047:0533
20201,3036:00135
20211,3115:58139
20221,3295:53118
20231,3765:41174
20241,4355:27194
20251,4725:19232
20261,4795:17119

Fra strukturert start (2020) til nå: −43 s/km på samme puls (6:00 → 5:17 @ HR128). Det er motoren. 2019 er nybegynner-outlier (n=33, lav base). Merk at trenden er æra-konfundert (vekt, terreng-miks, sko, kunnskap flytter seg samtidig — arvet fra F17/F20); les den som retning, ikke ren fysiologi.


3. Reversibilitet — hva skjer med motoren i et avbrudd

D1 — Korte brudd (<2 uker) koster motoren ~ingenting. **Konfidens: B.**

EF-endring fra 35-dagers pre-vindu til første 21 dager tilbake, for alle gap≥6 d med nok data (n=7 brudd): scatter ±5 %, uten pålitelig trend (regresjon EF% mot gap-dager: r=0,43 på n=7 — det er støy, og fortegnet blir til og med feil). Konkret: 6–9-dagers stopp ga +1,6 %, −4,5 %, −4,2 %, +3,5 %, −0,4 %, +0,0 %, −5,4 %. Sprikende rundt null. Under to uker helt av flytter ikke den aerobe effektiviteten mer enn dag-til-dag-støyen. Det matcher fysiologien: mitokondrie-tetthet og plasmavolum tåler 1–2 uker; det som faller først er glykogen og «touch», ikke motoren.

D2 — Det ene lange bruddet (kne, 6 uker ~0 km): −6 til −8 % EF, tilbake innen ~7 uker. **Konfidens: C (n=1).**

Uke-for-uke EF etter gjenopptak 17.01.2023 (pre-nivå EF 1,355, pace@128 5:46):

Uke tilbakeEFvs prepace@128
0–31,346–1,363−0,7 … +0,6 %5:44–5:48
41,270**−6,3 %**6:09
51,243**−8,3 %**6:17
61,321−2,5 %5:55
71,339−1,2 %5:50
8–121,318–1,334−1,6 … −2,8 %5:51–5:56

Bunnen er ikke på dag én tilbake — de første ukene var korte, forsiktige jogg (lav HR → EF ser normal ut). Den reelle detreningen viste seg da volum/lengde kom tilbake (uke 4–5: −8 % EF ≈ +30 s/km på HR128), og var innhentet til innenfor 2 % av pre-nivå i uke 7. Sammenlign med CTL: samme hendelse tok 251 d å fylle tilbake til pre-toppen. Motoren reverterte ~7× raskere enn CTL-regnskapet. (Varsomt: n=1 hendelse, 2–12 løp per ukevindu, terreng/HR-konfund. Formen på kurven er robust; de eksakte prosentene er ikke.)

D3 — Post-race-«brudd» er ikke detrening, det er race-skade + skarp taper. **Konfidens: C.**

Debut-maraton sep-21 (−3,7 % EF) og Valencia des-24 (−4,6 %) ser ut som rask detrening, men er konfundert to veier: pre-vinduet er taper-skjerpet (kunstig høy EF), og de første ukene tilbake bærer muskelskade fra selve løpet (EF lavt uansett trening). Disse tallene måler race-kostnad, ikke reversibilitet, og skal ikke leses som decay-rate.

Syntese — reversibilitets-τ per markør

MarkørHvor fort tapes denHvor fort kommer den tilbakeKonfidens
**CTL** (bokføring)Halveringstid 29 d (deterministisk)Uker–måneder (250 d etter kne)A
**Aerob EF / pace@128**~0 under 2 uker; −6…−8 % etter 6 uker helt av~5 uker til innenfor 2 % (τ ≈ 3–5 uker)C
**LT2 / terskel**Ikke målbart tapt i noe dokumentert bruddBygges over år, ikke uker (§4)B
**VO2maks**Ingen kontinuerlig data; antatt som EFDiskret lab-anker, ingen brudd-oppløsningC

4. LT2 og VO2 — de trege, «klebrige» markørene

LT2 klatret jevnt gjennom æraene og ble aldri målbart revet av et avbrudd:

ÅrLT2-anker (zones.json)Empirisk I3-øktpace
20204:25 @ HR1704:27 (n=17)
20214:15 @ HR1714:20 (n=29)
20224:05 @ HR1724:30 (n=22)
2023–263:49 @ HR1694:15 → 4:05 → 4:00 → 3:55 (2023→26)

De to kildene (kanonisk anker + empirisk øktpace) sporer hverandre og bekrefter uavhengig: terskelen er en fleràrig strukturell adaptasjon (−36 s/km 2020→2026), ikke noe som svinger med en 2-ukers pause. Det er den motsatte tidskonstanten av glykogen/«touch» — treg å bygge, treg å tape.

VO2maks: lab 61,7 (feb 2026) er eneste harde punkt. Uten kontinuerlig logg kan detrening-effekt på VO2 ikke måles direkte her; litteraturen (Coyle, Mujika) sier VO2 faller ~1 %/uke først etter ~2 ukers totalstopp og henter seg inn på uker — konsistent med EF-mønsteret over. Behandle VO2 som treg og klebrig, som terskelen.


5. Hva dette betyr — praktisk, med tallene

1. Slutt å lese CTL-krateret som formkostnad. CTL-halveringstiden på 29 d og et −43-krater er belastnings-bokføring. Motoren (EF, terskel) er formen, og den beveger seg knapt under to uker og reverterer innen ~5 uker selv etter 6 uker helt av. Frankfurt-taket og «volum er en plattform, ikke en spak» (F17/K3) gjelder også reversibilitet: du taper ikke plattformen på en ferie.

2. Europa-bilferien (sommer 2026) koster motoren ~null. ~2 uker med redusert løping ligger godt inne i «gratis»-sonen (D1). 3–5 rolige økter i uka holder EF flatt. Det eneste som faller er CTL (bokføring), og det fylles tilbake på ~4 uker (τ_CTL=42 → ~1 %/dag oppbygging ved normal dose). Ikke panikk-bygg etter ferien — jag TSB tilbake til båndet, ikke CTL-toppen.

3. Bruddet du skal frykte er langt + dårlig timet. Paris 2023 (kne-stjålet base, kun CTL 82 mot 94,7-toppen) underpresterte modellen på hvert horisont (F20 K4). Det er ikke dagene som er dyre — det er en flerukers forstyrrelse som lander i en byggefase eller taper. Vern de siste 6 ukene før et A-løp (kobler til F15s immunvakt IV1–IV5, K1s «dyre-avbrudd-teller»).

4. Detrenings-vern ≠ skadevern. Ett skade-avbrudd på 7,5 år — kroppen har alt løst holdbarheten (F20). Reversibilitets-regnskapet peker samme vei: rett vernet mot infeksjon i feil vindu og mot å stable dårlig-timede pauser, ikke mot decay i seg selv, som er langsom for alt som betyr noe.

5. Topp-vinduet 2026–2028 handler om friske uker, ikke om å frykte tap. VO2 og terskel er fleràrige bygg; ingen kort pause truer dem. Sub-1:20/sub-2:50 kjøpes ved å akkumulere kvalitet på en motor som ikke lekker mellom øktene — ikke ved å aldri ta pause.


6. Usikkerhet og hva som ville skjerpet dette

  • n=1 ekte skade-avbrudd. Hele D2 hviler på kneet. Et nytt langt brudd (håpentlig aldri) ville vært eneste måte å validere reversibilitets-τ på.
  • EF-konfund: terreng, temperatur, vind, HR-bånd og innen-økt-decoupling flytter EF uavhengig av form. Per-ukevindu har 2–15 løp. Kurveformen er robust; punktprosentene er ikke.
  • pace@128 er en transform av EF, ikke en direkte måling — robust, men en modell.
  • Æra-konfund (arvet fra F17/F20): EF-stigningen 2019→2026 er form og vekt og terrengmiks og utstyr samtidig. Årsnivået kan ikke dekomponeres.
  • VO2 har ingen brudd-oppløsning. Hvis Garmins VO2-estimat begynner å logges (append som `garmin_pred_history`, B7), får neste versjon en fjerde markør med reell tidsserie.
  • Skjerpingsforslag: logg Garmin-VO2 daglig framover; bygg EF-serien inn i hubben som en «motor-trend»-graf med brudd-markører, så reversibilitet blir synlig i sanntid ved neste pause.

Bygger på F20 (Kontinuitet). Ingen CTL-/EF-tall er antatt — alle er regnet fra `training_load.json`, `activities.json`, `quality.json` og `zones.json` i denne økta. Der data er tynt (D2/D3, VO2) er det merket med konfidens C.

Mikrosyklus-arkitekturenHva: Hvor mange dager mellom kvalitetsøkter gir best skår/adaptasjon.
Konklusjon: Fast skjelett (Man+Ons-TOSK + helg-langtur); «3-1-rytmen» finnes ikke som fast kadens.
Opus2026-07-07
#mikrosyklus#spacing#3-1

Mikrosyklus-arkitekturen — ukestruktur, 3-1-rytmen og formsprang (RC8 / D4)

Dato: 2026-07-07 · Skrevet av: Claude (Opus, OPUS-SPOR-D / D4 fra TODO) · Grunnlag: `activities.json` (ukevolum + økt-datoer 2021→2026) · `quality.json` (kvalitetsøkter + langturer + skår) · `training_load.json` (daglig ATL/CTL/TSB) · `races.json` (deload-timing) · About_me + SYSTEM_OVERVIEW lest først.

Hva dette er: RC8 fra Runde-C. Spørsmålene: (1) hva ER Carls faktiske mikrosyklus (dag-til-dag-sekvensering)? (2) følger han 3-1-rytmen (Bakken månedssyklus) han sier han gjør? (3) hvilke ukestrukturer ga best absorpsjon/formsprang? Analysen dekker 2021→2026 (287 uker), moderne æra der data er tett.

Metode-noter: (1) Uke = ISO-uke. Kvalitet = interval/tempo/vo2max_4x4 i quality.json (MP-langturer telles som langtur, ikke Q — viktig for §3). (2) Deload = uke med km < 80 % av foregående 3-ukers snitt. (3) Form-respons målt som ΔCTL over +3 uker (TRIMP-basert) + kvalitetsskår-snitt — begge er blokkfase-konfundert (se §5). (4) Absorpsjon på uke-nivå er grovt proxy'd via CTL/skår; ekte HRV/RHR-absorpsjon er dag-nivå (F7/F20-territorium).


1. Den kanoniske mikrosyklusen — et fast skjelett

Dag-for-dag (2022+):

ManTirOnsTorFreLørSøn
Kvalitet**98**39**117**34331414
Langtur4641419**74****57**

Skjelettet er MandagsTOSK + OnsdagsTOSK + helg-langtur — 72 % av all kvalitet ligger man/ons (bane-dagene), 88 % av langturene ligger tor–søn med tyngde lør/søn. Resten av uka er rolig påfyll.

Kvalitets-avstand (dager mellom to påfølgende kvalitetsøkter, ≤10 d):

Gap1 d2 d3 d4 d5 d6 d7 d
Antall**8****106**4423712332

Median 4 d. Modusen er 2 d (Man→Ons), deretter 5 d (Ons→neste Man). Back-to-back kvalitet (1 d) forekom 8 ganger på 5 år (~2 %) — Carl legger så godt som aldri to harde dager på rad. Det er den sterkeste enkeltregelen i mikrosyklusen: hard-lett-hard-lett, aldri hard-hard.

Ukevolum (287 uker >10 km): median 70 km, p25 51, p75 89, maks 130.


2. 3-1-rytmen finnes IKKE som fast kadens — deloads er hendelsesstyrte

Den uttalte «3 uker progresjon + 1 uke regenerering» (CLAUDE.md, Bakken-månedssyklus) er aspirasjon, ikke praksis. 51 deload-uker i perioden, med gap mellom deloads:

Gap mellom deloads (uker)124 (ren 3-1)5–610+
Antall203**3**911

Ren 3-1 (4-ukers gap) forekom 3 ganger. Median-gapet er 4 uker, men spennet er 1→24 — helt uregelmessig. Og avgjørende: 59 % av alle deloads ligger innen ±1 uke av et løp. Carls «regenerering» er ikke en kalenderrytme — det er taper + løp-restitusjon + livsavbrudd (reise/sykdom). Han bygger sammenhengende til noe tvinger en nedtrapping.

Det rimer med F17/F20-lærdommen («friske uker er investeringen»): kontinuitet, ikke syklisk deload, er den faktiske drivmekanismen. En innlagt 3-1 ville brutt kontinuiteten han tjener på.


3. To vinnende arkitekturer — volum-ledet maraton vs frekvens-ledet HM

De to PB-blokkene har motsatt mikrosyklus, hver riktig for sin distanse:

Berlin HM-26 (1:21:19) — frekvens-ledet:

```

W02-W13: 2Q nesten hver uke, 79-113 km, CTL 83→93 → W13 taper 54km

```

Metronom: 2 kvalitetsøkter + ~90 km, uke etter uke, ingen midt-blokk-deload — 11 sammenhengende uker + én taper. CTL +10 over blokka. HM belønner terskel-frekvens.

Frankfurt-25 (2:53:06) — volum-ledet:

```

W33-W43: 1Q/uke men 100-120 km, CTL 99→106 → W41-43 taper 92→76→72

```

1 bane-kvalitet + 100–120 km (kvaliteten flyttet INN i MP-langturene, som teller som langtur her). Mye høyere CTL-plattform (106 vs 93). Maraton belønner volum + spesifikk MP-langtur, ikke bane-frekvens.

Fellesnevner: ingen av PB-blokkene brukte midt-blokk-deload. Begge akkumulerte 10–11 uker sammenhengende og tapret én gang. Det er §2-funnet i praksis.


4. Form-respons per ukestruktur (kvalitetsantall)

ΔCTL over +3 uker + kvalitetsskår, bøttet på ukas kvalitetsantall:

Q/uken ukermedian kmmedian ΔCTL(+3u)median kval-skår
05549+0,5
19669**+2,4**7,05
29580+1,87,95
31686+1,28,02

Lesning (med tunge forbehold, §5): 1–2 kvalitetsøkter på 65–80 km er den CTL-effektive sonen. 3 Q/uke gir MINST CTL-vekst (+1,2) — men de ukene ligger nær løp/taper (der CTL faller per konstruksjon), og kvalitetsskåren er høyest (8,0), så det er en seleksjons-, ikke en dose-effekt. Kvalitetsskåren stiger monotont med Q-antall (7,05→7,95→8,02) fordi flere-Q-uker er fitness-uker. Storuke (≥90 km, ΔCTL +2,0) og moderat uke (40–70 km, +1,9) bygger CTL likt — fordi CTL er TRIMP-drevet: en 65 km-uke med 2 kvalitet matcher en 95 km rolig uke.


5. Operativt + ærlighetsnotat

Til Amsterdam-blokka (u29–41): bruk Frankfurt-arkitekturen (den er maraton-fasiten): 1 bane-kvalitet + MP-tyngde i langturen + 100–120 km storuker, CTL mot 105+, ingen midt-blokk-deload — akkumulér til T−3 taper. Behold hard-lett-hard-lett (aldri back-to-back kvalitet, §1). Kbh HM-toppen (T−4) tåler en kort 2X-frekvens-uke à la Berlin-blokka for skarphet. Ikke innfør en kunstig 3-1 — kontinuiteten er verdien (§2).

Ærlighetsnotat: dette er beskrivende korrelasjon, ikke kausalitet. ΔCTL-per-struktur (§4) er tungt blokkfase-konfundert (peak-uker → taper → CTL-fall gjør høy-Q-uker «se dårlige ut»); retningen (1–2 Q er nok for CTL) er robust, størrelsene ikke. PB-blokk-fingeravtrykkene (§3) er n=2 — «volum-maraton / frekvens-HM»-kontrasten er sterk og mekanistisk plausibel, men to blokker beviser ikke en lov. Deload-deteksjonen (80 %-terskel) er en heuristikk; en annen terskel flytter tellingen, men ikke konklusjonen (ingen fast 4-ukers kadens). «Absorpsjon» er her CTL/skår-proxy — ekte absorpsjon (HRV/RHR-retur per øktklasse) bor i F7/F20 og er ikke reberegnet her. Kvalitets-antallet undervurderer maraton-blokkenes reelle harde arbeid fordi MP-langturer telles som langtur, ikke Q (§3-nyansen). Æra er relativt homogen (2021→26, samme løper), så æra-konfundering er mindre her enn i D1/D2 — men fitness-trenden gjennom perioden farger alle +3u-tallene.


Parallelløkt-notat (SPOR D): kun denne fila skrevet i D4-steget; TODO/CHANGELOG/SYSTEM_OVERVIEW/quality.json/training_blocks urørt; ingen sync/bygg/git; ingen skriv til data/.

Konsolidering: `Running_Report_Mikrosyklus_v1.md` (RC8/D4) — mikrosyklusen er et fast skjelett (Man+Ons-TOSK + helg-langtur; kvalitet spaced 2–3 d, back-to-back ~2 %). 3-1-rytmen finnes ikke som kadens — 59 % av deloads er ±1 u fra løp, PB-blokkene kjørte 10–11 sammenhengende uker + én taper (kontinuitet > syklisk deload, F17/F20). To vinnende arkitekturer: Frankfurt volum-ledet (1Q+110km, CTL 106) / Berlin-HM frekvens-ledet (2Q+90km, CTL 93) → Amsterdam bruker volum-arkitekturen. Form-respons: 1–2 Q er CTL-nok; 3 Q er seleksjon ikke dose (blokkfase-konfundert).

Subjektiv-signal-syntesenHva: Prekommittert test av 7 års egne ord mot sykdom/sprekk/PB.
Konklusjon: Ordene leder ingenting (Barcelona «dette går dårlig» → PB); kun eksplisitt sykdomsord har verdi.
Fable2026-07-07
#språk#subjektivt#null-funn

Subjektiv-Signal-Syntesen — 7 år med egne ord som ledende indikator (FABLE-16)

Dato: 2026-07-07 · Økt: FABLE-16 (kveldspakke 3) · Status: komplett — hovedkonklusjonen er et robust NULL-funn pluss ett reelt bifunn.

Kilder: Strava name+description for alle 2 439 aktiviteter (997 tekstenheter, 700 med beskrivelse) · `Coach/daily_log.json` (13 entries, 12.4–19.5.26 — for tynn og for sen til lead-testing, se §7) · fasit: `illness_periods.json` (31 perioder) + `illness_classification.json` (typing) · HRV fra `wellness.json` (2022-09→) · `session_score`/`langtur_score` · LOO T-14-residualer fra `race_predict_model.json` · F5/F6-kategoriene (rene/sprekk, hendelse/brudd).

Én setning: Carls egne ord LEDER ingenting — ikke sykdom, ikke sprekker, ikke PB-er — og «magefølelse i tekst» skal ikke inn i noen gate; men eksplisitt sykdomsspråk (🤧/forkjølelse/hals) bærer infeksjonsinformasjon som wellness-detektoren beviselig ikke ser, og bør fanges som TYPE-hint, ikke som prediktor.


1. Metode — prekommittering, blinding, og hvorfor du kan stole på et null

Multiple-testing-kravet i spec-en (spørsmål 4) ble håndtert slik, i denne rekkefølgen:

1. Prekommittering FØR fasit-kobling. Markørfamiliene og alle tester ble låst før noen tekst ble koblet mot utfall. Familiene: A1 tunge/råtne bein · A2 uforklart tyngde/flathet · A3 sliten/søvn · A4 eksplisitt sykdomsnært (tett/snufs/hals/forkjøl/feber/🤧) · A5 pulsavvik · A6 kutt/avbrudd · A7 negasjon-uten-årsak («ikke dagen», «lite som stemte») · A8 mage/GI · B1 flyt/letthet · B2 overskudd · B3 entusiasme/emoji · B4 progresjonsobservasjon. Dømmekraftsregler: «tungt men godt» = positiv; ytre forklaring (vind/varme/høyde/dagen-derpå/skade) → NEG_EXPLAINED, ikke NEG_UNEXPLAINED; ironi kodes på substans.

2. Blind koding. Leksikon-pass (deterministisk) + LLM-dømmekraft på 410 enheter (112 leksikon-flaggede + alle økter i −7..−1-vinduer rundt onsets/løp + 120 tilfeldige kontroller), presentert shufflet og UTEN dato/utfall. Kodekategorier per øktdag: NEG_U · NEG_E · SICK · MIX · POS · NEU. Resultat per dato (verste kode per dag): 38 NEG_U, 12 SICK (+2 MIX med A4-innslag = 14 dager med eksplisitt sykdomsspråk), 60 POS, 35 NEG_E, 7 MIX, 245 NEU — 397 kodede datoer.

3. Åtte prekommitterte tester (T1–T8) + én eksplisitt merket eksplorativ. Alle rapporteres under, uansett utfall.

Skrivetidspunkt-aksiomet (spec-ens felle nr. 1): Strava-tekst skrives ETTER økta samme dag. «Ledende» betyr her: tekst fra øktdag t−k, utfall dag t. Race-dagens egen tekst er per definisjon post-hoc for det løpet og er ekskludert fra alle lead-tester.


2. Korpus-realiteten (viktig premiss for alt under)

Beskrivelses-raten er ekstremt æra-skjev: 2019 0 % → 2021 23 % → 2022 61 % → 2023 88 % → 2024–26 93–97 %. Detektor-onsets er samtidig skjeve mot wellness-æraen (19 av 31 i 2025–26). All sammenligning på tvers av æra er derfor gjort era-kontrollert der det betyr noe (T7 ble snudd av nettopp dette). Median beskrivelse er 30 tegn — språket er kompakt, men det er ekte Carl-språk: struktur + én subjektiv setning, ofte med ironi som krever tolkning («Terningkast fire», «80 % i vater», «FML»-serien på ellipse = skade-frustrasjon, ikke dysregulering).


3. T1/T2 — Leder språket sykdom? **NEI. Retningen er faktisk motsatt.**

PopulasjonKodede øktdager i −7..−1NEG_U/SICKRate
Før **infeksjon**-onsets (n=2 perioder, typet)50**0 %**
Før **stress**-onsets (n=4)1218 %
Før **uavklart**-onsets (n=25)7568 %
**Alle onset-vinduer****92****7****7,6 %**
Kontrolldager (utenfor ±14 d onset, −7..0 race, utenfor perioder)15424**15,6 %**
Kontroll era-matchet (kun 2025–26)47715 %

Ukene før dysregulerings-onsets er språklig roligere enn hverdagen, ikke mørkere. Skoleeksempelet er den dyreste perioden i systemet: infeksjonen 30.3.26 kom med POS-tekst dagen før (Berlin HM-PB-en 29.3) og nøytrale økter hele uka før. Kroppen gikk fra «Melder sub 1:20 til Køben 💪» til seng på under 48 timer, med null språklig forvarsel. Det rimer med F7-mekanikken: infeksjonene slår til ETTER uttaket, gjennom det åpne vinduet — de annonserer seg ikke i treningsfølelsen før.

Eksplorativt tillegg (post-hoc, IKKE prekommittert, telles deretter): «fortsatt»-persistens — ≥2 NEG-økter innen 5 dager utenfor perioder — forekom 6 ganger; 1 av 6 ble fulgt av onset innen 7 d, mot 29 % base-rate for vilkårlige dager. Selv vedvarende tyngde-språk leder ikke.


4. T3/T4 — Er ordene i det minste et HRV-ekko? **Nei — de er uavhengige. Men uavhengig ≠ prediktiv.**

  • T3: Av 39 NEG_U/SICK-dager med HRV-data hadde bare 5 samtidig HRV under Garmin-baseline; 34 hadde normal HRV (base-rate for HRV-under-baseline på kodede dager: 13,8 %). Ordene dupliserer altså IKKE tallene — de måler noe eget (opplevd tyngde ved normal autonom status).
  • T4: I de 14 onset-vinduene der noe i det hele tatt fyrte, kom HRV-avviket først eller alene i 10; språket først/alene i 4 — og i de 4 fyrte HRV aldri. Sirkularitets-forbehold: detektoren er selv bygget på wellness-signaler, så «HRV leder detektor-onset» er delvis samme instrument som måler seg selv. Den ærlige formuleringen: språket er den eneste uavhengige kanalen vi har mot detektoren — og den uavhengige kanalen tier før onsets.

Konklusjon spørsmål 1: ordene bekrefter ikke engang tallene — de er ortogonale, og ingen av delene gir språket lead-verdi.


5. T5/T6 — Race-vinduene: verken varsel før sprekk eller ekte flyt-signal før PB

T5 — sprekk vs rene (LOO T-14-residual som dagsfasit, F5/F6-kategorier som moduslabel):

UtfallsklasseKodede pre-dagerNEGPOS
Sprekker (resid ≤ −3 %: THM-19, NY-23, Nidaros-25, London-25)8**0**2
Midtsjikt (−3..0)2214
Gode dager (≥ 0)29**5 (17 %)**2

Katastrofene var språklig usynlige: London-25-vinduet er tre nøytrale økter («6 x 1000 med kone og kid på sykkel» t−6, ren struktur t−4, «Levere bok på biblioteket. 3 SL» t−2). Nidaros-25-vinduet likeså (17. mai-hilsen, 10x1000 @ 3:50, 3x1000 med konemor). Og hendelse-løpet Berlin-24 (GI) hadde et identisk nøytralt vindu — språket skiller ikke hendelse fra brudd før løpet, fordi det ikke skiller noe som helst før løpet (spørsmål 2 = besvart, negativt).

Spec-sitatet oppklart: «Ikke dagen i dag heller» sto IKKE der Nidaros-25-morgenen. Det er race-beskrivelsen selv, skrevet etter målgang, og «heller» peker bakover på løpsserien, ikke på dagene før: Nidaros-24 «Prøver igjen senere. 🤷‍♂️» → London-25 «On to the next!» → Nidaros-25 «Ikke dagen i dag heller». Det er en frustrasjons-tråd over tre skuffende løp — sporbar, menneskelig, og uten prediktiv verdi.

T6 — entusiasme før PB (spørsmål 3): POS-rate før PB-løp 19 % vs 0 % før ikke-PB — ser lovende ut helt til man ser på residualene: løpene med ≥1 POS-dag i vinduet snitter −1,06 % mot modellen; alle andre −0,93 % (−0,37 % uten London-outlieren). Flaggskip-eksemplet er NY-23: «Test av sko og fart. Har trua.🗽» (t−4) og «Meldt perfekt løpevær i morgen. Dette lover bra. 👌» (t−1) → −3,2 % mot modellen (pers på margin, men vinduets klart svakeste moderne maraton-dag). Motstykket avgjør saken: Barcelona-22-kvelden før: «På plass i Barcelona. Puls i taket, dette kommer til å gå dårlig. 🤷‍♂️» → +0,37 % og pers. Og gullkornet Kbh-24: uka før sub-3-gjennombruddet inneholdt BÅDE forkjølelses-etterslep (t−6), «Puls 10 slag over der den burde være 🫣» (t−4) OG optimisme (t−1) — kroppen leverte tidenes løp gjennom hele det språklige spekteret. Entusiasmen og uroen på forhånd er støy; entusiasmen på race-dagen er kvittering. Fordi pre-race-tekstene beviselig er skrevet FØR løpet, er dette ikke etterrasjonalisering i dataene — det er etterrasjonalisering i hukommelsen: mønsteret «jeg kjente det på meg» finnes ikke i det som faktisk ble skrevet.


6. Bifunnet som består: eksplisitt sykdomsspråk er systemets eneste mild-infeksjonskanal

De 14 dagene med eksplisitt sykdomsspråk (SICK + MIX-A4) mot detektor-fasiten:

  • 11 av 14 ligger >3 dager unna nærmeste detektor-periode. «Forkjølelsen har ikke sluppet taket» (21.8.24), «Vondt i halsen og tung i kroppen. Burde holdt meg hjemme. 🤧» (16.6.25), «Bihulebetennelse og hoster» (19.10.25, t−7 før Frankfurt-PB-en!), «Lett forkjølelse forrige uke» (29.4.24, Kbh-uka) — ingen av disse episodene finnes i `illness_periods.json`.
  • Wellness-detektoren ser altså IKKE milde luftveisinfeksjoner (konsistent med Sykdomsgate-backtest v2: infection-recall 0/2). Språket gjør det — presist, eksplisitt og gratis.
  • Verdien er typing og dokumentasjon, ikke prediksjon: (a) FABLE-15s re-typing av 2022–25-uavklart-periodene bør kryssjekke A4-treff-datoene; (b) race-eve-flagget `illness_days_14d` bør kunne mates av språk-episoder, ikke bare detektor-perioder (Frankfurt-caset viser samtidig at mild forkjølelse t−7 IKKE er abort-grunn — PB-en kom likevel); (c) en fremtidig `illness_language_log` gir detektor-backtestene ekte fasit for mild-enden.

T8 lukker samtidighets-spørsmålet: NEG_U-dagenes session_score (7,63, n=26) er identisk med NEU-dagenes (7,56, n=149; kutt-øktene 7,47). Ordene måler opplevelse, skåren måler eksekvering mot (nedjustert) plan — to forskjellige ting, og ingen av dem forutsier morgendagen. T7 (stillhet som signal) døde i era-kontrollen: rå 92 % vs 64 % tekstrate før onsets, era-matchet 95 % vs 96 % — ren artefakt av at Carl skriver mer nå enn i 2019.


7. Ærlighetsnotat

Koder-bias: Jeg kjente deler av fasiten fra systemkonteksten (post-Berlin-infeksjonene, Nidaros-25, Berlin-PB) før kodingen. Blindingen fjernet dato/label, men tekstinnhold kan røpe kontekst («2 uker til Paris»), og enkelte grensedommer (NEG_E vs NEG_U, MIX) er skjønn. Leksikon-laget er deterministisk og upåvirket; hovedkonklusjonene tåler dessuten bias i BEGGE retninger fordi de er null-funn med motsatt fortegn av hypotesen. n-svakhet: 2 typede infeksjoner med til sammen 5 kodede pre-dager kan ikke utelukke et svakt infeksjonsspesifikt språksignal — men den ene godt observerte (mars-26) hadde positivt fortegn. Era-konfundering er behandlet eksplisitt (T7 snudd; T1-kontrollen era-matchet). Detektor-sirkularitet i T4 er flagget i §4. T8-seleksjon: avbrutte økter kan mangle skår; A6-subgruppen (n=8) endrer ikke bildet. daily_log dekker bare 13 dager i én (allerede syk) periode — spec-ens antagelse om en stor kvalitativ dagslogg holdt ikke; race-analysenes sitater er samme Strava-tekster som her. Ingen p-verdier er rapportert med vilje: n-ene er små, og alle effektretninger peker samme vei — mot null.


8. Forslag (Carl godkjenner — ingenting er endret av denne økta)

1. Anti-regel til COACH_INSTRUCTIONS-v2-forslaget (O9): «Subjektiv tyngde/uro i tekst siste uke før løp er IKKE beslutningsgrunnlag — historikken viser null prediktiv verdi (Barcelona-22, Kbh-24), og en språk-gate ville kostet PB-er.» Speiler K5-lærdommen for HRV på kortdistanse.

2. Brief-regelen spec-en ba om: morning brief skal IKKE tolke stemning i gårsdagens økt-tekst (null-funnet lukker spekulasjonen). Eneste språk-trigger som er verdt noe: eksplisitt A4-sykdomsord (forkjøl*/tett/hals/hoste/feber/🤧) i ny Strava-desc → én informasjonslinje i brief («sykdomsord logget i går — telles mot illness_days_14d hvis det vedvarer»), aldri en gate alene.

3. Til FABLE-15/OPUS-køen: lag `illness_language_log.json` (dato + sitat + A4-treff, manuelt godkjent) fra de 14 SICK-datoene i §6 som fasit-styrking for mild-infeksjoner; kryssjekk mot uavklart-re-typing.

Parallelløkt-notat: kun denne filen er skrevet; TODO/CHANGELOG/SYSTEM_OVERVIEW urørt; ingen sync/bygg kjørt; ingen skriv til data/. Prekommitterings- og kodefilene ligger i øktas scratchpad, gjengitt i sin helhet i §1.

Konsolidering: `Running_Report_SubjektivSignal_v1.md` — prekommittert + blindkodet test av 7 års økt-språk mot typet sykdomsfasit, HRV, session_score og LOO-residualer: språket LEDER ingenting (onsets 7,6 % NEG vs 15,6 % kontroll; sprekk-vinduer 0 NEG; «flyt før PB» motbevist med Barcelona/NY som kronvitner; «ikke dagen i dag heller» var post-race og pekte på løpsserien) — men eksplisitt sykdomsspråk fanger mild-infeksjoner detektoren ikke ser (11/14 utenfor perioder) → tre forslag: anti-regel i O9, A4-linje i morning brief, illness_language_log til FABLE-15.

Last · sykdom · HRV · stress — revisjonHva: Hva wellness faktisk kan skille når beslutningen er å redusere eller fortsette treningen.
Konklusjon: Signalet ligger i vedvarenhet og dybde over flere døgn; natte-puls er den mest infeksjonsspesifikke markøren, og lasten peker feil vei for denne beslutningen.
Fable2026-07-22
#sykdom#HRV#natte-puls#stress#gate

Last / Sykdom / HRV / Stress — revisjon med ferske øyne

Reduser trening nå vs kan fortsette — hva wellness faktisk kan og ikke kan skille

Fable, 2026-07-22. Syntese/dømmekraft — ingen kode endret, ingen data skrevet, ingen git/sync. Kilder: `wellness.json` (rhr, hrv_ms, overnight_hr_avg, respiration_avg, stress_avg, body_battery, sleep_), `training_load.json`, `illness_periods.json`, `illness_classification.json`, `illness_backtest.json`, samt F15/F16-analysene og backtest-notatene. Fasit er Carls minne per 22.07: tre korte luftveisinfeksjoner jan–apr 2026, alt annet i 2026 ikke-infeksjon, pre-2026 ukjent.


0. Svaret først

Systemet fungerer dårlig i dag fordi det er bygget for å måle og validere feil ting. Detektoren er en «autonom dysregulering»-teller kalibrert mot en fasit som enten er upålitelig (2025 og bakover) eller per definisjon ikke-infeksjon (de typede stress-periodene). Den ene reelle, kraftige infeksjonen vi har rene data rundt — den i midten av april — så wellness helt tydelig. Problemet er ikke at kroppen er stille under infeksjon. Problemet er at gaten leter etter feil mønster, på feil dato, med feil markører.

Fire funn bærer rapporten:

1. Det finnes et signal som skiller «reduser» fra «fortsett» — men det ligger i VEDVARENHET og DYBDE over flere døgn, ikke i noen enkeltdags-terskel. April-infeksjonen holdt RHR +4–7, HRV −32 til −49 %, og natte-HR +7 til +15 i sju sammenhengende døgn, med stigende bane. Alle de kjente ikke-infeksjonene (varme, reise, alkohol, én dårlig natt) er 1–2-dagers blipp som spretter tilbake — selv når enkeltdagen treffer like hardt som en enkelt april-dag. Separatoren er «hvor mange døgn holder ≥2 markører seg nede», ikke «hvor ille er det i dag».

2. Natte-HR (`overnight_hr_avg`) er den mest infeksjons-spesifikke markøren vi har — og `predict_illness` bruker den ikke. Gaten kjører på fem indikatorer, hvorav to (`stress_high`, `bb_falling`) er heldøgns-aggregater som en hard treningsdag eller varmedag flytter uten sykdom. Den utelater natte-HR og respirasjon, som er de to `detect_illness` faktisk fanger infeksjon med. Gaten inkluderer altså støy-markørene og dropper signal-markørene.

3. Lasten peker feil vei for akkurat denne beslutningen. Den reelle infeksjonen traff på ATL-persentil 3 (dypt post-race-søkk etter Berlin, TSB +23) — det klassiske åpne vinduet. De falsk-alarm-utsatte periodene (varme/reise, vinterlast) lå på ATL p56–98. «ATL ≥ p90 = forhøyet risiko» er riktig for den kalenderstyrte immunvakten, men i den daglige reduser/fortsett-gaten trekker den mot fortsett-tilfellene og bort fra det ene reduser-tilfellet.

4. Signalets styrke følger hvor mye infeksjonen betyr. April (to uker nede) skrek. Den milde tidlig-på-året-infeksjonen (sår hals, trente gjennom) er enten stille eller umulig å skille fra vinterlasten. Det er ikke en svakhet — det er nesten ideelt for en reduser/fortsett-beslutning: signalet er høyt når du bør redusere og lavt når du kan fortsette.

Nordstjernen bør derfor ikke være «bedre sykdomsdeteksjon». Den bør være et gradert, vedvarenhets-basert reduser/se-an/fortsett-signal bygget på overnatt-målte markører, med last og varme som forklar-bort-kontekst i stedet for som risiko-forhøyere. Under viser jeg empirien, river rammeverket, og lander på en prioritert plan.

Ærlig forbehold satt tidlig: vi har n = 1 kraftig, rent observert infeksjon (april). Alt kvantitativt under hviler tungt på den ene episoden. Mekanismen er fysiologisk solid og separasjonen er ren, men dette er en hypotese å validere framover, ikke en ferdig-validert modell. Jeg sier eksplisitt hvor n er tynt.


1. Re-etablert fasit og hva wellness faktisk gjorde rundt de tre infeksjonene

1.1 Fasiten evalueringen hviler på

Carl 22.07: tre korte luftveisinfeksjoner (sår hals/hoste) januar–april 2026 — et par runder etter Berlin HM (29.3) pluss én tidlig på året. Feber praktisk talt aldri. Alt annet i 2026 = ikke-infeksjon (stress/varme/reise/alkohol/søvn). Fra 2025 og bakover: ingen pålitelig historikk.

Det snur premisset i hele det eksisterende arbeidet. Backtestenes «19 utbrudd», «27 % recall», «4 falsk-alarm på 18 mnd» og F16s «0/2 infeksjons-recall» er alle regnet mot merkelapper som nå er strøket som fasit. Jeg behandler dem som beregninger på feil grunnlag (§2.2), ikke som funn.

1.2 Det jeg gjorde

For hver dag bygde jeg baseline-relative avvik mot en robust bakover-median (28-dagers, med de siste 3 dagene utelatt så et raskt onset ikke forurenser sin egen baseline). Markørene: RHR, HRV (%-avvik), natte-HR, respirasjon, stress, body battery. Så karakteriserte jeg vinduene rundt de tre infeksjonene mot de kjente ikke-infeksjonene og mot friske kontrollperioder. Alle tall er regnet i denne økta fra rådataene.

1.3 April-infeksjonen — den skrek, den var ikke stille

Berlin HM 29.3 (PB). Merkelappene i `illness_classification.json` setter onset 30.3 og 06.4. Den faktiske fysiologien forteller en annen historie:

DatoRHRHRVnatte-HRrespstressBBLesning
22.–28.3 (frisk pre)3964–8040–4511–1220–2487–100normal
**30.3** (merkelapp)42554813**1-dags post-race-krater**
31.3–05.435–3871–8939–421115–2039–66**full restitusjon**
06.4 (merkelapp)377041121859rolig — ingenting
07.–10.436–4174–7742–4311–1220–2152–65mild uro
**14.–20.4****42–45****38–51****48–56**12–1426–3625–47**infeksjon, full styrke**
21.–26.443–4552–6446–5011–1227–3057–79langsom retur

Det dominerende wellness-utslaget i hele post-Berlin-forløpet ligger 14.–20. april — ikke på noen av merkelapp-datoene. Mot en frisk mars-referanse (RHR 38, HRV 75, natte-HR 41, resp 11) er dette RHR +4–7, HRV −32 til −49 %, natte-HR +7 til +15, respirasjon +1 til +3, stress fordoblet, body battery halvert — holdt i sju sammenhengende døgn, med natte-HR stigende fra 48 til 56. Merkelappen 30.3 er dagen etter et PB-halvmaraton: et rent post-race-krater (den G5-dempingen `predict_illness` alt har), fulgt av seks dager genuint god restitusjon. Merkelappen 06.4 er en rolig dag.

Konsekvensen for F16-funnet «detektoren undertaller infeksjoner»: det er en artefakt av at spørsmålet var «leder wellness FØR merkelapp-datoen». Wellness ligger ikke foran onset — den er samtidig med infeksjonen, og da er den umiskjennelig. «Infeksjoner er wellness-stille» er feil for den ene infeksjonen som slo Carl ut. Den var alt annet enn stille; den var bare feildatert i fasiten.

1.4 Tidlig-på-året-infeksjonen — enten mild, eller begravd i vinterlast

Detektoren fanget flere tidlig-2026-perioder (2.1, 24.1, 16.2, 5.3). Ingen av dem har april-signaturen. Januar samlet viser en RHR-creep fra 37 (1.1) til 42 (24.1) og gjennomgående dempet HRV (50–60-tallet mot 80-tallet i frisk desember og februar) — men de daglige avvikene er milde (median RHR +1, HRV −8 %) og januar lå på ATL p47–87 midt i mølle-vinteren med dobbel-terskel (jf. ResponderProfil). Den skarpeste enkeltdagen er 24.1 (natte-HR +11, resp +3, HRV −38 %), men det er én dag på ATL p87 — like gjerne ettervirkning av en hard økt eller én dårlig natt.

Ærlig konklusjon: den tidlige infeksjonen etterlot ingen distinkt, vedvarende wellness-signatur slik april gjorde. Enten var den for mild, eller så er den ikke til å skille fra vinterens treningslast. Jeg kan ikke peke på én dato og si «her var den» med trygghet. Det er i seg selv et funn — milde infeksjoner Carl trener gjennom er wellness-stille eller last-forvekslbare, og det er greit, fordi de ikke krevde en «reduser» uansett.

1.5 Kontrasten — de kjente ikke-infeksjonene

De typede stress-periodene og ferievinduene, samme metode:

Vindu (fasit)RHR-Δ mdHRV-% mdnatte-HR-Δ mdpeak enkeltdagMaks sammenh. ≥2 flagg
**April-infeksjon (14.–20.4)****+5****−38 %****+8**RHR+7 / HRV−49 % / ohr+13**7 døgn**
Januar (creep, mild)+1−8 %+2HRV−38 % / ohr+11 (24.1)6 døgn (grunt)
Ferieoppstart 17.–18.6+2−3 %+1RHR+2,50
Bilferie 25.–29.6 (varme/alk.)+2−7 %+1RHR+5 / ohr+6 (29.6)1
Ferie 3.7+3,5−16 %+6RHR+3,5 / ohr+61
Hjemme varme 9.–11.70−9 %+3HRV−22 % / ohr+6 (9.7)1
Frisk kontroll (feb, mai/juni, siste 10 d)−1 til −2+3 til +19 %−2 til 00

Poenget som avgjør hele saken: enkeltdags-toppen skiller ikke. Verste sommerdag (29.6, 9.7) treffer RHR 43 og natte-HR 48–49 — like høyt som en enkelt april-dag. Verste sommer-HRV (54–58) er ikke langt fra april. Hvis du dømmer på «hvor ille er det i dag», roper varme og infeksjon likt. Det som skiller er at sommer-blippene spretter tilbake innen ett døgn (29.6 RHR 43 → 30.6 RHR 40 → 4.7 RHR 37), mens april holder og forverrer seg i en uke.

1.6 Separatoren, tallfestet

En komposit «sykdomsbyrde»-indeks som integrerer dybde × varighet — arealet under natte-HR-elevasjonen (dager ≥ +4), antall dager med HRV ≤ −20 %, og lengste sammenhengende «dype» forstyrrelse — separerer rent og monotont:

Vindunatte-HR-arealdager HRV ≤ −20 %lengste dype run
**April-infeksjon****80****10****8**
Januar (mulig tidlig-infeksjon / vinterlast)4253
Post-Berlin stress-hale (2.–5.5)1232
Bilferie (varme/alkohol)1601
Hjemme varme 9.7611
Ferieoppstart / frisk kontroll000

April står i en klasse for seg. Januar lander mellom — nøyaktig den tvetydigheten en mild, gjennom-trent infeksjon eller tung vinterlast skal gi. Alt entydig eksogent ligger på ≤16 / ≤1 dyp dag. Dette er det empiriske svaret på Carls kjernespørsmål: ja, det finnes et skille, og det bor i vedvarenhet × dybde, ikke i enkeltdags-terskler.


2. Rammeverket med ferske øyne

2.1 «Autonom dysregulering» er en koherent størrelse — men den er ikke det Carl vil ha

Beslutningen om å måle årsaks-agnostisk autonom forstyrrelse (F15) er intellektuelt ryddig: detektoren ser bare wellness, og wellness kan ikke i seg selv vite om en HRV-dipp kommer fra virus eller varme. Men konsekvensen er at gaten fyrer på summen av alt som rører autonomien — og for Carl er det store flertallet av det eksogent og forbigående (varme, reise, alkohol, én dårlig natt, hard blokk). Å slå alt sammen til én «dysregulering»-gate betyr at det signalet han vil handle på (ekte overreach/infeksjon → reduser) drukner i det han vil ignorere (→ fortsett).

Rammeverket bør skille årsak. Ikke fordi wellness alene kan gjøre det perfekt, men fordi de tre klassene har ulik dynamikk og kontekst som er målbar:

  • Eksogen-forbigående (varme/reise/alkohol/én natt): 1–2-dagers blipp, spretter tilbake, ofte med kjent ytre trigger (kalender/vær/logg). → fortsett, adresser årsaken.
  • Forventet treningslast (hard blokk, dobbel-terskel-vinter): vedvarende men grunn forstyrrelse, følger ATL, ledsaget av gode økter. → fortsett, med mindre den tipper i dybde.
  • Genuin overreach/infeksjon: vedvarende og dyp, stigende bane, ofte last-uavhengig (april traff på ATL p3), natte-HR og respirasjon med. → reduser.

Signalene som skiller dem er nettopp de §1 fant: vedvarenhet (antall døgn ≥2 markører nede), dybde (natte-HR-areal, HRV ≤ −20 %-dager), bane (stiger vs faller), og forklar-bort-kontekst (vær, kalender, siste harde økt, post-race-vindu).

2.2 Valideringen hviler på merkelapper som er strøket

Dette er den viktigste kritikken av det bestående. Backtestens tall, sporet til kilden:

  • Den kanoniske `illness_backtest.json` regner over 2025-01-01 → 2026-07-05 med ~290 «friske» dager og 44 falsk-alarm-dager (15 %). Men FP-episodene ligger alle i 2025 (7 episoder, 3–11 dager) — nettopp den perioden Carl sier han ikke har pålitelig historikk for. «Falsk alarm» mot en ukjent fasit er ikke falsk alarm; det er ukjent.
  • `illness_backtest_autonom.json` har 17 onsets, «30 % recall, 6 d lead». Men de 17 er per fasit alle eksogene/uavklarte — de to typede infeksjonene (30.3, 06.4) er eksplisitt holdt utenfor autonom-fasiten. «6 dagers lead» beskriver altså modellens evne til å forutse eksogen dysregulering (varme/reise/dårlige netter) — akkurat det Carl vil fortsette gjennom. Modellen er, satt på spissen, optimalisert for å varsle feil ting.
  • F16s «0/2 infeksjons-recall» er de to april-merkelappene (30.3 = post-race-krater, 06.4 = rolig dag). Begge bommer på den faktiske infeksjonen 14.–20.4 med ~2 uker. Recall målt mot feil datoer.

Ingen av disse tallene bør bæres videre. De beskriver en modells treff mot en fasit som ikke holder. Re-etableringen i §1 er grunnlaget som må erstatte dem.

2.3 Markør-valget er bak-fram

`predict_illness._evaluate_window` bruker fem indikatorer: `rhr_creep`, `hrv_drop`, `sleep_low`, `stress_high`, `bb_falling`. To av fem — `stress_high` (stress_avg > 25 i ≥3 d) og `bb_falling` (body battery ned > 15) — er heldøgns-aggregater. De stiger av en hard treningsdag, en varmedag, en reisedag, uten sykdom. Det er den strukturelle grunnen til at gaten er eksponert for last- og eksogen-drevne falske positive (og hele F15s reelle bekymring).

Samtidig utelater `predict_illness` de to markørene `detect_illness` faktisk fanger infeksjon med: natte-HR (`overnight_hr_avg`, tilgjengelig fra medio 2025, vekt 3,5 for +8 bpm i detektoren) og respirasjon. I §1 er natte-HR den reneste separatoren — den måler sovende hjertefrekvens, tung å flytte med én sen kveld, og den som stiger mest entydig og vedvarende under april-infeksjonen (+7 til +15, stigende).

Kombinert med SNAP-1b-to-tids-modellen (§6 i SYSTEM_OVERVIEW): morgen-snapshotet fryser overnatt-verdiene før dagens trening kontaminerer dem, mens de flate feltene (stress_avg, body battery) finaliseres som heldøgns-tall. En reduser/fortsett-detektor som skal kjøre om morgenen bør lene seg helt på overnatt-målte markører (RHR, HRV, natte-HR, respirasjon, søvn) og droppe eller kraftig nedvekte stress_avg og body battery. Det er motsatt vekting av dagens gate.

2.4 Gradert, ikke binært

Dagens gate er binær: ≥2 indikatorer i et 7-dagers vindu → hard gate («bytt kvalitet med easy»). To problemer: den teller indikatorer aggregert over en uke (så ett eksogent blipp som treffer to markører på ulike dager trigger), og den gir samme utfall for et forbigående blipp som for en stigende infeksjon.

En gradert modell løser begge. Jeg testet en kandidat over hele 2026, bygget kun på overnatt-markører og på vedvarenhet (antall av siste 4 døgn med «dyp» overnatt-forstyrrelse: natte-HR ≥ +5 eller HRV ≤ −20 %, samtidig med RHR ≥ +2 eller natte-HR ≥ +5):

  • REDUSER (≥3 av 4 døgn dype): fyrer 16.–22.4 (7 d, infeksjonen ✓), pluss et 2-dagers blipp 25.–26.1 og en enkeltdag 5.5. Ingen sommerdag når rødt.
  • SE-AN (1–2 av 4 døgn, gul — fortsett, følg med): fanger januar-vinduene (grunt, vedvarende → «se an», ikke «reduser»), sommervarmen 29.6–6.7 (8 d gul), hjemme-varmen 9.–12.7, og skuldrene av april-infeksjonen (11.–15.4 opptrapping, 23.–29.4 hale).

Regelen leverer det Carl ber om: rødt nesten utelukkende på den vedvarende infeksjonen; gult (fortsett + forklar) på all varme/reise/last-støy. Dette er fittet på samme 2026-data (n=1 kraftig infeksjon), så det er en illustrasjon av at separasjonen finnes og er operasjonaliserbar — ikke en ferdig kalibrering. Men mekanismen (overnatt-markører + vedvarenhet + gradering) er den riktige arkitekturen, og den er direkte testbar framover.

2.5 Forholdet til den kalenderstyrte immunvakten

Immunvakten (u33, u38–39, post-race D+10) er bevisst ikke HRV-utløst, og bør forbli det. De to systemene har komplementære roller som bør holdes rene:

  • Immunvakt = a priori risiko fra kjent åpent vindu (post-race, planlagte topp-uker). Kalenderdrevet, forebyggende, uavhengig av dagens tall. April-infeksjonen bekrefter verdien: den traff i det dypeste post-race-søkket (ATL p3, TSB +23, D+16 etter Berlin) — akkurat der immunvakten sier «vær forsiktig» uansett hva wellness viser.
  • Reduser/fortsett-detektoren = a posteriori respons på at noe faktisk skjer nå. Wellness-drevet, reaktiv, gradert.

De skal ikke slås sammen. Immunvakten senker terskelen for å ta et gult signal på alvor i et kjent vindu (post-race gult → behandle mer som rødt), men den daglige detektoren skal ikke fôre immunvakten og immunvakten skal ikke undertrykke detektoren. Én endring er verdt å merke: siden den reelle infeksjonen kom på lav ATL, bør ikke «ATL ≥ p90» være en inngang i den daglige gaten (§2.6). Den hører hjemme i immunvakt-laget, ikke i dags-responsen.

2.6 Last peker feil vei for dagsbeslutningen

ATL-konteksten rundt de tre klassene:

HendelseATL-persentilTSBKlasse
April-infeksjon (14.4)**p3**+23reduser
Januar-creep (10.1)p47+10forventet last / mulig mild inf.
Vinter-topp (15.3)p98−9forventet last (trente gjennom)
Ferieoppstart (17.6)p98eksogen (varme/reise)
Bilferie (27.6)p56eksogen
Hjemme varme (9.7)p72eksogen

Den ene «reduser»-hendelsen lå på ATL p3. Alle «fortsett»-hendelsene lå p47–98. For den daglige reduser/fortsett-beslutningen er høy last altså korrelert med fortsett-tilfellene, ikke med reduser-tilfellet. «Høy last = mer risiko» er treningsimmunologisk riktig som forebyggende prior (og forsvarer immunvakten), men å legge ATL ≥ p90 inn i dags-gaten som risiko-forhøyer trekker den mot å rope på varme-uker og harde blokker — de tilfellene der svaret er fortsett. Post-race-vinduet er det som fanger april-risikoen, og det er kalenderstyrt, ikke ATL-styrt.


3. Nye måter å bruke wellness på (eget deliverable)

Utover binær sykdom — her er hva rhr/hrv/stress/bb/søvn (+ nye kilder) kan gi Carl. Sortert etter forventet verdi.

3.1 Natte-HR som førsteklasses markør. Den ligger i `wellness.json` fra medio 2025, brukes av `detect_illness`, men er fraværende i `predict_illness`, i beredskapsskåren (§6-skåren teller HRV/RHR/søvn/TR) og på hubben. Den er den reneste infeksjons/overreach-separatoren i materialet. Kvikk gevinst: eksponer natte-HR-trend mot baseline overalt der RHR vises, og legg den inn som fjerde overnatt-markør i dags-detektoren.

3.2 Kontinuerlig kapasitets-/beredskapssignal framfor binær gate. I stedet for «syk: ja/nei» — et 0–100 dagstall som integrerer overnatt-markørenes avvik fra personlig baseline, med vedvarenhet innbakt (ikke bare i dag, men banen siste 4–7 døgn). Det gir Carl en glidende «hvor mye har jeg å gå på i dag»-avlesning som graderer fra grønt til rødt, og som naturlig fanger både «hard blokk-tretthet» (moderat, forventet) og «noe er galt» (dyp, vedvarende). Dette er reduser/se-an/fortsett-regelen fra §2.4 løftet til et tall.

3.3 Personlige baseline-avvik framfor faste terskler. Flere steder i systemet ligger absolutte terskler (stress > 25, HRV-baseline-multiplikatorer, søvn < 78 — den siste alt motbevist i Varmeadaptasjon-4b). Carls RHR drifter sesongmessig (37 sommer, 40–42 vinter), og HRV-baselinen roterer. Å bytte faste kutt mot rullende personlige persentiler (er dagens RHR i øvre 10 % av mine siste 60 dager?) fjerner sesong-artefakter og gjør signalene sammenliknbare på tvers av året. Dette er en generell oppgradering som gjelder hele wellness-laget, ikke bare sykdom.

3.4 Vedvarenhet/bane som gjenbrukbar primitiv. «Hvor mange sammenhengende døgn har markør X vært nede, og stiger eller faller banen» er nyttig langt utover sykdom: en 3-dagers RHR-creep som IKKE forklares av én hard økt eller varmedag er et generelt over-reaching-varsel; en HRV som faller tre dager på rad inn mot et løp er et taper-problem. Bygg persistens/bane-beregningen én gang, bruk den i sykdom, i beredskap, og i taper-overvåking.

3.5 HRV-CV som taper-KPI. Dag-til-dag-variasjonen i HRV (koeffisient, ikke nivå) er i litteraturen en av de bedre markørene for at kroppen har «satt seg» inn mot et løp — synkende CV = stabilisert autonomi = god taper. Systemet logger HRV nattlig men bruker bare nivået. En rullende 7-dagers HRV-CV på taper-cockpiten (prediksjon.html) gir Carl en objektiv «er jeg klar»-avlesning som er uavhengig av formnivået modellen alt estimerer. (Merk: HRV/RHR er alt forkastet som race-prediktor i modellen — dette er noe annet, en taper-tilstands-KPI, ikke en tidsprediktor.)

3.6 Søvn-regularitet framfor søvn-score. `sleep` har bed_time/wake_time. Variabiliteten i leggetid/oppvåkning (sosial jetlag) er en sterkere prediktor for autonom belastning enn selve søvnscoren — som Varmeadaptasjon-4b viste er en ren HRV-proxy uten selvstendig verdi. En «søvn-regularitets-indeks» (SD i legge/våkne-tid siste 14 d) ville fange reise- og ferie-forstyrrelser tidlig, og ville skilt «dårlig søvn fordi uregelmessig» (eksogent, fortsett) fra «dårlig søvn med forhøyet natte-HR» (mulig infeksjon).

3.7 Adaptasjons-sporing: wellness som utladnings-readout. Varmeadaptasjon-rapporten peker allerede dit: RHR-fall + HRV-respons etter et varme/høyde-opphold er en plasmavolum-avlesning. Generalisert: wellness kan spore positiv adaptasjon, ikke bare forstyrrelse. En vedvarende RHR under baseline + HRV over baseline etter en hard blokk er superkompensasjon (utnytt vinduet); det motsatte er ufullstendig restitusjon. Dette gjør wellness til en tosidig form-sensor, ikke bare et alarmsystem.

3.8 Tidlig-varsel på livsstress. Januar-mønsteret — grunn, vedvarende autonom demping uten dyp enkeltdag — er signaturen på kronisk belastning (jobb, søvn, familie), ikke akutt sykdom. Å flagge dette eksplisitt som «vedvarende mild forstyrrelse — livsstress/last, ikke sykdom» ville gitt Carl et tidlig-varsel på at noe akkumulerer, distinkt fra både «alt fint» og «du blir syk». Gitt profilen (høy stressrespons på trusler mot pilarene, jf. About_me) er dette antagelig det mest verdifulle ikke-trenings-signalet wellness kan gi.


4. Konkrete, prioriterte forslag

Delt i kjappe gevinster og større ombygginger, med merking av hva som kan gjøres autonomt (Opus/Sonnet senere) og hva som krever Carl-input eller nye data.

4.1 Kjappe gevinster (autonomt implementerbare)

A. Legg natte-HR og respirasjon inn i `predict_illness`. De to mest infeksjons-spesifikke markørene mangler i gaten. `detect_illness` har dem alt — kopier vektingen. Lav risiko, høy verdi. Autonomt.

B. Nedvekt eller fjern `stress_high` og `bb_falling` fra dags-gaten. De to heldøgns-markørene driver last/eksogen-eksponeringen (F15s reelle bekymring). Behold dem eventuelt som svakt bekreftende, aldri som selvstendige gate-utløsere. Autonomt, men bør backtestes mot re-etablert fasit først.

C. Bytt ATL ≥ p90 ut av dags-gaten; behold den kun i immunvakt-laget. Lasten peker feil vei for dagsbeslutningen (§2.6). Autonomt.

D. Slutt å regne backtest-tall mot pre-2026 og mot autonom-fasiten som om de var infeksjons-validering. Oppdater notatene så «27 % recall / 4 FP / 6 d lead» ikke siteres videre som modellkvalitet. Autonomt (dokumentasjon).

E. Fjern den absolutte søvn-terskelen der den fortsatt ligger (Varmeadaptasjon-4b leverte ordlyden). Autonomt.

4.2 Større ombygginger (krever backtest / Carl-input)

F. Bygg om detektoren til gradert reduser/se-an/fortsett på vedvarenhet. Kandidaten i §2.4 er utgangspunktet: overnatt-markører, siste-4-døgn-vedvarenhet, tre nivåer. Rødt = vedvarende dyp forstyrrelse (reduser); gult = transient eller grunn (fortsett, forklar årsak); grønt = rolig. Krever backtest mot re-etablert fasit + Carls godkjenning av tersklene.

G. Innfør forklar-bort-kontekst i gult. Når signalet er gult, la systemet knytte det til sannsynlig årsak: post-race-vindu, logget varme (når temperatur finnes, se H), reisedag (kalender), hard økt i går, sen leggetid. Det gjør «fortsett, adresser årsaken» konkret i stedet for generisk. Krever H + kalender-kobling.

H. Koble inn varmesignalet — det finnes allerede. (Korrigert 2026-07-22, steg 3-verifisering: min tidligere påstand «activities.json har null temperatur» var feil — jeg sjekket feil felt.) Ambient temperatur ligger i `activities.json` som `weather.temp_c` (Open-Meteo, hentet per aktivitet av `strava_sync.fetch_weather`), 1974 økter, oppdatert til 20.7, 85 % daglig dekning i 2026 (174/203 dager). Og den skiller rent: Italia-ferien og hjemme-varmen 9.7 lå på median 20–22 °C (16–28), mens april-infeksjonen lå på 10 °C (6–12) — kald. Temperatur er altså en ferdig forklar-bort-markør, ikke et hull. Arbeidet er wiring, ikke anskaffelse: (1) bygg en per-DAG temp-serie fra `weather.temp_c` (maks per dag), (2) fyll de 15 % hviledager-hullene med den samme Open-Meteo-fetchen på hjemmekoordinat (infraen finnes i `strava_sync`), (3) eksponer temp til dysregulerings-logikken så en dag > ~18–20 °C (eller > sesong-norm) kan festes som forklar-bort-tag på en grunn alarm. Autonomt — kilden og fetch-koden finnes; pares naturlig med gate-omleggingen (F).

I. Personlige rullende persentiler framfor faste terskler i hele wellness-laget (§3.3). Større refaktor, men fjerner sesong-artefakter overalt. Autonomt, men bør fases inn markør for markør med verifisering.

4.3 Nye data / krever Carl

J. Lettvekts subjektiv logg for mild-enden. Den tidlige infeksjonen var wellness-stille (§1.4), og F16 viste at eksplisitt sykdomsspråk («sår hals», «hoste») i Strava-desc fanger mild-infeksjoner detektoren ikke ser. En to-tastes daglig logg (Pushover-svar: «frisk / halsvondt / dårlig natt») ville over tid gitt ekte fasit for mild-enden og et subjektivt lag detektoren mangler. Uten dette forblir mild-infeksjon en blindsone. Krever Carl-input (og en enkel innsamlingskanal).

K. Type de gjenstående 2026-periodene og bekreft tidlig-infeksjonen. Jeg kan ikke datofeste den tidlige infeksjonen fra data alene. Om Carl kan peke på omtrentlig uke (januar? februar?), får persistens-analysen et andre infeksjons-punkt å kalibrere mot — det doblet n fra 1 til 2. Krever Carl-input.

4.4 Ærlig nullresultat der det gjelder

To ting kan wellness med dagens data ikke gjøre pålitelig, og det bør sies rett ut:

  • Wellness varsler ikke infeksjon på forhånd. Signalet er samtidig, ikke ledende (april steg da han ble syk, ikke før). Det er en «du blir dårlig nå, reduser»-detektor, ikke et tidlig-varsel. Lead-tiden i de gamle tallene var eksogene perioder med feildaterte onsets. Forvent ikke forvarsel; forvent rask, korrekt samtidig-respons.
  • Mild infeksjon på moderat/høy last er ikke pålitelig skillbar fra lasten selv (januar). Her må subjektiv logg (J) inn hvis mild-enden skal dekkes; ren wellness klarer det ikke.

Det som fungerer, og som er verdt å bygge på: en kraftig, handlingsverdig infeksjon eller ekte overreach gir et vedvarende, dypt, flermarkør-signal som skiller seg rent fra alt eksogent — og det er nettopp de tilfellene der «reduser» er riktig svar. Signalet er sterkest når det betyr mest.


5. Anbefalt implementeringsrekkefølge

1. Dokumentasjons-opprydding først (D). Slutt å bære de gamle backtest-tallene som infeksjons-validering. Det fjerner falskt fundament før noe bygges oppå.

2. Kjappe markør-fikser (A, C, E). Natte-HR + respirasjon inn i `predict_illness`; ATL ut av dags-gaten; absolutt søvn-terskel ut. Lav risiko, umiddelbar retning-korreksjon.

3. Varmesignal (H) — kilden finnes (korrigert). Temperatur ligger allerede i `activities.json` (`weather.temp_c`, 85 % daglig dekning, oppdatert). Bygg per-dag temp-serie + fyll hviledager via eksisterende Open-Meteo-fetch på hjemmekoordinat, og eksponer den som forklar-bort-tag. Pares med gate-omleggingen (F).

4. Backtest-rammeverk mot re-etablert fasit. Bygg om `backtest_illness_model.py` til å evaluere mot april-infeksjonen (rett datert, 14.–20.4) og de kjente ikke-infeksjonene som negativ-kontroll. Uten dette kan ikke F/B/G kalibreres.

5. Gradert vedvarenhets-detektor (F, B). Med rammeverket på plass: bygg reduser/se-an/fortsett-regelen, backtest, la Carl godkjenne tersklene.

6. Forklar-bort-kontekst i gult (G). Krever H + kalender.

7. Subjektiv logg + type tidlig-infeksjon (J, K). Parallelt, når Carl har kapasitet — det er dette som over tid gjør mild-enden og n-problemet løsbart.

8. Nye bruksmåter (3.2, 3.5, 3.6, 3.8) og personlige persentiler (I) som egen arbeidsstrøm når reduser/fortsett-kjernen står.

Steg 1–3 er trygge og autonome og kan gjøres i én Opus/Sonnet-økt. Steg 4–5 er kjernen og bør gjøres bevisst med Carl i loopen på terskler. Steg 6–8 er utvidelser.


Grunnlag: alle wellness-tall regnet i denne økta fra `wellness.json`/`training_load.json`/`illness_periods.json`; april-signaturen, komposit-indeksen og kandidat-regelens 2026-fyring er reproduserbare fra rådataene. n = 1 kraftig infeksjon (april) er den bærende begrensningen — mekanismen er solid, kalibreringen er ikke ferdig. Ingen kode endret, ingen data skrevet, `quality.json` og `illness_classification.json` urørt, ingen git/sync.

Sykdomsgaten — overleveringHva: Hvordan sykdoms-/dysreguleringsgaten ble bygget om til gradert reduser / se an / fortsett, og hvordan den skal revideres.
Konklusjon: Gaten hviler på én kraftig, rent observert infeksjon (april 2026) og må revideres når flere reelle hendelser kommer.
Fable2026-07-22
#sykdom#gate#overlevering

HANDOFF — Last/Sykdom/HRV/Stress-gaten: hva som ble gjort, og hvordan revidere den

Fable, 2026-07-22. Les denne først hvis du skal revidere reduser/se-an/fortsett-gaten i en ny sesjon. Selvstendig — peker til analysene og koden, men gjengir det du trenger for å komme i gang uten å lese alt.

0. Én setning

Sykdoms-/dysregulerings-detektoren ble bygget om fra en binær «≥2 indikatorer»-gate (kalibrert mot upålitelige merkelapper) til en gradert REDUSER / SE_AN / FORTSETT basert på vedvarende dyp autonom forstyrrelse (overnatt-markører) med varme som forklar-bort, backtestet mot en re-etablert fasit. Alt hviler på n = 1 kraftig, rent observert infeksjon (april 2026) — det er den bærende begrensningen, og grunnen til at dette skal revideres når flere reelle hendelser kommer.

1. Les i denne rekkefølgen

1. `Analyser/synteser/Running_Report_LastSykdomHRVStress_Revisjon_v1.md` — hovedanalysen (hvorfor, empirien, alle tallene).

2. `Analyser/synteser/Running_Report_Sykdomsspraak-Mining_v1.md` — 12 tekst-dokumenterte milde infeksjoner 2023–26 (fasit-utvidelsen) + `illness_language_candidates.json`.

3. Koden: `predict_illness.py` (gaten), `scripts/backtest_graded_gate.py` (valideringen).

4. `CHANGELOG.md` del 4 + del 5 (2026-07-22) og `SYSTEM_OVERVIEW.md` §4.5.

2. Fasiten alt hviler på (KRITISK — endret 2026-07-22)

Carl 22.07: eneste ekte infeksjoner er tre korte luftveisinfeksjoner jan–apr 2026 (et par etter Berlin HM 29.3 + én tidlig). 2025 og bakover: ingen pålitelig historikk — `illness_periods`-merkelappene og de gamle backtest-tallene (27–30 % recall / 6 d lead / 4 FP / 0-2 infeksjon) er strøket som fasit. Ikke gjeninnfør dem som modellkvalitet.

Presiseringer funnet 22.07:

  • Den kraftige april-infeksjonen ligger fysiologisk 14.–20.4 (RHR +4–7, HRV −32…−49 %, natte-HR +7–15, 7 døgn), ikke på merkelapp-datoene 30.3 (post-race-krater) / 06.4 (rolig dag).
  • Den «tidlige» 2026-infeksjonen er pinnet til midt/sen februar 2026 (tekst «på vei ut av forkjølelse» 24.2 + opphold 21.–24.2 + detektor-blipp 16.–17.2). Mild.
  • Tekst-mininga (rapport 2) ga 12 tekst-verifiserte infeksjoner 2023–26Carl bekreftet alle 12 (22.07) (`illness_language_candidates.json`, `confirmed_by_carl: true`). Disse er nå foldet inn i `backtest_graded_gate.py` som utvidet fasit (POSITIV = kraftige / MILD = trente-gjennom).

Utvidet validering (22.07, mot alle 12 bekreftede): gaten treffer REDUSER på 2 av 3 kraftige infeksjoner (april-26 og okt/nov-25, begge med natte-HR — rene treff); Valencia-24 maks SE_AN fordi infeksjonen falt sammen med maraton-krateret (post-race-nedgradering) OG mangler natte-HR (pre-okt-25). De milde holder seg stort sett FORTSETT/SE_AN (én mild fra apr-24 nådde REDUSER — grensetilfelle). Hovedlærdom: gaten er sterkest fra okt-25 og framover (natte-HR tilgjengelig); pre-natte-HR krever RHR-creep OG HRV-fall samtidig, så den bommer på HRV-bare-infeksjoner (Oslo-23, apr-24) og post-race-konfunderte (Valencia). Kjør `scripts/backtest_graded_gate.py` for detaljene.

3. Hva som ble endret i koden

`predict_illness.py` (kjøres i sync_daily steg 13):

  • Nye indikatorer i `_evaluate_window`: `overnight_hr_creep` (≥3 d natte-HR > baseline+4) + `resp_high` (≥3 d resp > baseline+1). Speiler `detect_illness`. Verifisert: endrer IKKE fyringen på 2026 (identisk 60-dagers ≥2-mønster) — ren signal-surfacing.
  • `_temp_by_day()` + `_temp_for()`: lokasjon-korrekt ambient temp fra `activities.json` `weather.temp_c` (Open-Meteo på aktivitetens GPS); hviledager fylles ≤3 d fra nærmeste aktivitet.
  • `grade_level(by_date, date_str, indicators=None, recent_race=None, tmap=None)` — REN funksjon, delt med backtesten. Returnerer `level` (REDUSER/SE_AN/FORTSETT), `level_reason`, `deep_run_3d`, `heat_context_c`, `heat_context`, `cardinal_active`, `deep_autonomic`, `n_active`.
  • Gaten (`gate`-dict i `illness_prediction.json`): `elevated_load` FJERNET (ATL ut av dags-gaten); `atl_pctile_90d` beholdt som kontekst; nye felt `level`, `level_reason`, `deep_run_3d`, `heat_context_c`, `heat_context`, `cardinal_active`, `deep_autonomic`.

Konsumenter: `scripts/morning_brief_v2.py` (flagg) og `scripts/build_hub_dashboard.py` (W4-kort) viser nå `level` (⛔ REDUSER / 🟡 SE AN / 🟢 FORTSETT); begge faller tilbake på gammel visning hvis en eldre `illness_prediction.json` mangler `level`.

Uendret bevisst: den kalenderstyrte immunvakten (`training_plan_daily.json` «IMMUNVAKT» + `build_hub_dashboard.render_immune_watch`, post-race 72 t) — ATL-basert immun-forsiktighet bor der, ikke i dags-gaten.

4. Tersklene (tunables) — Carl signerer, juster i toppen av `predict_illness.py`

KonstantVerdiBetydning / begrunnelse
`CARDINAL_MARKERS`rhr_creep, hrv_drop, overnight_hr_creepLast-uavhengige overnatt-markører. Stress/BB er bevisst UTE (heldøgns, last-kontaminert).
`DEEP_MIN_CARDINAL`2«Dyp autonom» = ≥2 kardinale aktive. ≥1 skiller ikke (varme flytter RHR/HRV over 7-d vindu); ≥2 krever natte-HR med → skiller april (12/15) fra sommervarme (3/12).
`REDUCE_PERSIST_DAYS`2REDUSER = dyp i dag + ≥2 av siste 3 d dype (vedvarenhet).
`HEAT_FORKLAR_C`20.0Varmedag ≥ dette nedgraderer REDUSER→SE_AN. Kalibrert: temp↔natte-HR r=0,36 sommer vs 0,04 sept–mai; forstyrrelse først ved ≥20–22 °C; Trondheim sept–mai < 20 → alibiet fyrer naturlig kun jun–aug.
(internt) `overnight_hr_creep`baseline+4, ≥3 dSpeiler detect_illness (+5→2,5p).

5. Hvordan re-kjøre valideringen

```

python3 scripts/backtest_graded_gate.py

```

Forventet i dag (2026-07-22): POSITIV BESTÅTT (april-infeksjon → REDUSER 16.–26.4), NEGATIV BESTÅTT (0 REDUSER på alle 6 kjente eksogene: ferievarme×4, nyttår, transient). UAVKLART (januar + post-Berlin restitusjons-hale) = enten defensibelt. Fasiten er hardkodet i skriptet (POSITIV/NEGATIV/UAVKLART) — oppdater den når Carl bekrefter nye episoder (rapport 2).

6. Åpne spørsmål / hva som gjenstår

  • Kalibrerings-n er nå 12 bekreftede infeksjoner, men bare 4 har natte-HR (fra okt-25). Terskelvalget hviler fortsatt tyngst på april-26 (den ene kraftige med full markør-dekning + nov-25). Når neste hendelse med natte-HR kommer: kjør backtesten, sjekk at REDUSER treffer, juster terskler ved behov. Pre-okt-25-episodene er nyttige som HRV-fasit, men kan ikke teste natte-HR-gaten (se utvidet validering §2).
  • Mild-enden er blind. 9 av 12 tekst-dokumenterte infeksjoner rørte knapt wellness. Gaten skal ikke fange disse (de trengte ingen REDUSER) — men hvis mild-deteksjon ønskes, kreves subjektiv logg (forslag J: to-tasters Pushover-svar «frisk/halsvondt/dårlig natt») + `illness_language_log` fra rapport 2. Ikke bygget.
  • Post-illness-demping er bevisst UTE av gaten. Den blanke `recent_illness`-dempingen er sirkulær mot de støyende detektor-periodene (maskerte april). Persistens-regelen selv-begrenser i stedet (april: REDUSER 16.4→8.5, FORTSETT fra 10.5). Vurder på nytt hvis gaten «crying wolf» i praksis under en reell restitusjon.
  • Type den tidlige 2026-infeksjonen (feb) og bekreft mining-kandidatene → andre kalibreringspunkt.
  • Varme-wiring leser `activities.json` inline. Hvis du vil ha en egen per-dag temp-fil i pipelinen (for hviledager uten nærliggende økt), bygg et eget steg + Open-Meteo på hjemmekoordinat — men dagens ≤3-d-fyll dekker 85 % + av 2026.

7. Ufravikelige regler (samme som alltid)

ALDRI git · rør ALDRI `quality.json` eller `illness_classification.json` · ingen sync/push. Endre kode på egne kopier, lever tilbake, la Carl kjøre sync. `illness_language_candidates.json` er en draft-leveranse — IKKE auto-skriv den til `data/`; Carl bekrefter og bestemmer om/hvordan den blir fasit.


Ett-linjes: gaten er nå gradert (REDUSER/SE_AN/FORTSETT) på vedvarende dyp autonom + varme-forklar-bort, terskler eksplisitte i `predict_illness.py`, validert av `scripts/backtest_graded_gate.py` mot re-etablert fasit — men n=1 kraftig infeksjon; revider når flere reelle hendelser kommer, med rapport 2s tekst-verifiserte episoder som utvidet fasit.

Sykdomsspråk i Strava-tekstHva: Milde infeksjoner 2023–2026 rekonstruert fra Carls egne Strava-titler og -beskrivelser.
Konklusjon: 12 tekstdokumenterte episoder mot 3 fra wellness-detektoren — de fleste milde infeksjoner er wellness-stille; februar-infeksjonen 2026 er nå datert.
Fable2026-07-22
#sykdom#strava-tekst#fasit#infeksjon

Sykdomsspråk-mining — milde infeksjoner 2023–2026 rekonstruert fra Strava-tekst

Fable, 2026-07-22. Analyse — ingen data skrevet, `illness_classification.json`/`quality.json` urørt, ingen git/sync. Kilde: `activities.json` (name + description, ~44 % av økter har beskrivelse 2023–26). Leveranse: denne rapporten + `illness_language_candidates.json` (draft du bekrefter). Verktøy: `mine_illness.py`.

Kort

Du ba om det beste sporet til å finne milde infeksjoner 2–3 år bakover: dine egne Strava-ord. Det virker. Et systematisk søk i navn + beskrivelse (tre spor: eksplisitt sykdomsspråk, opphold uten løping med restitusjons-tekst, siste økt før et opphold) finner 12 kandidat-episoder 2023–2026 — alle med entydig eller nesten-entydig språk. Til sammenligning så wellness-detektoren bare 3 av de 12. Det bekrefter to ting rapporten fra i dag konkluderte med: (1) de fleste milde infeksjonene er wellness-stille, og (2) språket ditt fanger dem detektoren ikke ser — presist og gratis.

Tre konkrete gevinster: (a) du får ~12 tekst-verifiserte fasit-punkter der du før hadde 3 (bare 2026), (b) signalet skalerer med alvorlighet — de fem episodene med kraftig HRV-fall (≤ −30 %) er de du beskrev tyngst, de fem med svakt fall (> −20 %) er de milde du «trente gjennom», og (c) den tidlige 2026-infeksjonen du ikke kunne datofeste er nå pinnet: midten–slutten av februar 2026 («på vei ut av forkjølelse» 24.2 + 3-dagers opphold 21.–24.2 + detektor-blipp 16.–17.2).

Metode — tre spor + leksikon

Søket dekker `name + description` for alle løpedager fra 2022-06 (kandidater rapportert 2023+). Tre spor:

1. Eksplisitt sykdomsspråk (HØY konfidens): forkjøl*, sår/vond hals, hoste, snørr/snufs, feber, influensa, bihule, «rusk i maskineriet», «ikke 100 %», 🤧/🤒/😷, `syk`/`sjuk`/sykdom.

2. Opphold ≥3 d uten løping (du løper nær daglig, så opphold er sjeldne og informative) med restitusjons-tekst i første økt etter («etter forkjølelse», «løpefri», «tilbake på hesten … fortsatt 🤧»).

3. Siste økt før opphold som varsler («burde holdt meg hjemme», «kjenner det i halsen», «avbrutt»).

Stoppord luker ut kjente falske positive: `sykkel`/`sykl*`, `sykt` (slang-forsterker), `frisk luft`, `forfriskende`, `fysisk`. Skade («kne», «akilles», «slark») kodes som egen kategori — den forklarer opphold, men er ikke infeksjon (f.eks. Paris-2023-halen «2 av siste 4 måneder uten løping pga et trøbbel» = kneet, ikke sykdom).

De 12 kandidat-episodene

Sitatet er ditt eget, forkortet. «Wellness» = kraftigste HRV-fall / natte-HR-heving ±5 d rundt episoden (natte-HR finnes først fra ~okt 2025). «Det.» = så wellness-detektoren noe.

EpisodeKonf.Ditt sitatHRVnatte-HRDet.?
**2023-09-16→19**HØY«Oslo M 10k … litt forkjølet» (+ 3 d opphold)−37 %nei
**~2023-12→2024-01-05**HØY−«Endelig bedring etter forkjølelse»−15 %nei
**2024-04-26→29**HØY«Lett forkjølelse forrige uke … ga seg i grevens tid» (+ 3 d opphold)−31 %nei
**2024-08-17→24**HØY«Rusk i maskineriet 🤧 Avbrutt langtur» → «Forkjølelsen har ikke sluppet taket» → «Fortsatt ikke 100 %»−26 %nei
**2024-11-27→12-08**HØY«Tre dager forkjølelse i forkant» (Valencia) → «langtrukken forkjølelse, 7 dager løpefri»−42 %nei
**2025-03-13**HØY−«🤧» (mild, én dag)−4 %nei
**2025-03-26→29**HØY«Tungt etter forkjølelse» (+ 3 d opphold)−16 %nei
**2025-06-16**HØY−«Vondt i halsen og tung i kroppen. Burde holdt meg hjemme 🤧»−11 %nei
**2025-10-19**HØY«Bihulebetennelse og hoster … feberfri»−22 %+4**ja** (uavkl.)
**2025-10-27→11-05**HØY«Tilbake på hesten … Fortsatt 🤧»−46 %+12**ja** (pk 7,5)
**~2026-02-15→24**HØY«på vei ut av forkjølelse» (+ 3 d opphold 21.–24.2)−15 %+4blipp 16.–17.2
**2026-04-06→20**HØY«Nå må sykdom og drit gi seg snart…»−46 %+13**ja** (infeksjon, pk 11,5)

Hva det forteller

Detektoren så 3 av 12 klart (okt-25, nov-25, apr-26) — pluss februar-onsetens blipp 16.–17.2. De tre klare er de kraftigste (HRV-fall −22 til −46 %, natte-HR +12–13 der data finnes). De ni øvrige er de milde, som du selv beskrev som «lett», «mild», «🤧» eller «på vei ut av». Dette er mild-enden rapporten kalte en blindsone — nå kvantifisert: tre av fire tekst-dokumenterte infeksjoner (9 av 12) rører knapt wellness.

Signalet skalerer med alvorlighet. De fem med HRV-fall ≤ −30 % (Oslo-23, april-24, Valencia-24, nov-25, apr-26) er episodene du beskrev tyngst eller som holdt deg løpefri. De fem med > −20 % (jan-24, 13.3.25, 26.3.25, 16.6.25, feb-26) er de milde du trente gjennom. Det er nettopp den egenskapen som gjør den graderte gaten brukbar: den roper når det betyr noe (kraftig, vedvarende → REDUSER) og tier når det ikke gjør det (mild → du fortsatte, og det gikk fint).

Natte-HR finnes først fra ~okt 2025. De fire nyeste episodene er de eneste der gatens beste markør kunne vurderes. Det betyr at pre-2025-episodene ikke kan brukes til å teste natte-HR-gaten — men de er fortsatt verdifulle som HRV-fasit og som dokumentasjon av hvor ofte du faktisk er mild-syk (~5–6 episoder/år, de fleste stille).

Den tidlige 2026-infeksjonen er pinnet. Du husket «én runde tidlig på året» men ikke når. Sporet peker på midten–slutten av februar 2026: «på vei ut av forkjølelse» 24.2, et 3-dagers opphold 21.–24.2 (siste økt før: «Halvmaraton og OL-femmil hos svigers» — hard helg), og et detektor-blipp 16.–17.2. Mild (HRV −15 %, natte-HR +4), derfor stille — men nå datofestet. Det gir gaten et andre 2026-punkt ved siden av april.

Hva du gjør nå

`illness_language_candidates.json` (levert) har alle 12 med `confirmed_by_carl: null`. Sett `true`/`false` per episode — det du bekrefter blir tekst-verifisert fasit for mild-enden (grunnlaget for en `illness_language_log` og for å re-kalibrere gaten med flere enn n=1 kraftig infeksjon). Et par du bør se ekstra på: 13.3.25 og 16.6.25 er enkeltdags-🤧 (kan være halvdags-plager, ikke ekte infeksjon), og jan-24-recovery peker på en infeksjon i romjula 2023 som ligger utenfor tekst-vinduet — bekreft om den var reell.

Begrensninger

Beskrivelses-dekningen er ~44 % (2023–26), så episoder uten tekst OG uten opphold er usynlige for sporet — dette er et nedre estimat på antall milde infeksjoner. «Tungt etter»/«ikke i vater» er tvetydig (tretthet vs sykdom) og er holdt utenfor med mindre entydig sykdomsord er med. Enkeltdags-🤧 kan være støv/allergi, ikke infeksjon — derav HØY− og din bekreftelse. Skade er skilt ut, men grensa mot «tung i kroppen» er skjønn. Ingen p-verdier: dette er gjenfinning, ikke hypotesetest — verdien er fasit-punktene, som du kvalitetssikrer.


Konsolidering: `Running_Report_Sykdomsspraak-Mining_v1.md` — 12 tekst-dokumenterte milde infeksjoner 2023–26 fra egne Strava-ord; detektoren så 3 (de kraftigste); signalet skalerer med alvorlighet (5 sterke ≤−30 % HRV vs 5 milde >−20 %); natte-HR finnes først fra okt-25; tidlig-2026-infeksjonen pinnet til midt/sen februar. Draft `illness_language_candidates.json` for din bekreftelse → tekst-verifisert mild-ende-fasit.

👟 Utstyr & ernæring (3)

SkoeffektenHva: Supersko vs trener på temp-justert EF + mileage-degradering + rotasjonsråd.
Konklusjon: Race-supersko ~2–4 % (øvre grense); konkret par-valg per høstløp.
Opus2026-07-07
#sko#supersko#EF#rotasjon

Skoeffekten — supersko vs trener, mileage-degradering og rotasjonsråd (O10)

Dato: 2026-07-07 · Skrevet av: Claude (Opus, OPUS-SPOR-D / D2 fra TODO) · Grunnlag: `activities.json` (2 441 løp m/ `gear_name/category/km_at_run` + `weather.temp_c` + HR) · `races.json` (skovalg per løp) · `race_predict_model.json` (LOO-residualer) · `data/static/shoe_log.json` (roller/cascade) · About_me + SYSTEM_OVERVIEW lest først.

Hva dette er: Gear ligger på hver aktivitet, aldri krysset. Fire spørsmål: (1) hva er Carls reelle supersko-effekt på temp-justert EF? (2) degraderer skummet målbart med km? (3) samvarierer race-residual med skovalg? (4) hvilket par til Energimila/Kbh/Amsterdam? Hovedfellen er era/temp-konfundering (F4a §5) — formen steg 2021→2026, så rå sko-sammenligninger på tvers av år måler fitness, ikke sko. Alt under er derfor innen-æra + temp-justert + HR-matchet.

Metode-noter: (1) EF = velocity/HR × 100 (F4a-definisjonen; rolig løp ~2,3–2,5). (2) Temp-justering: pace − 1,6 s/km per °C over 12° (F4a-kurven) → normaliserer bort varme. (3) `avg_pace_s` er tom for de fleste økter → pace regnet fra distanse/bevegelsestid. (4) Rolig-utvalg: ikke-race, ikke-intervall, utendørs, HR 120–150, pace 4:10–6:00, ≥6 km → n=993. (5) Skoklasser: TRAINER (uplatet: Pegasus 34/37, Novablast, Clifton) · PLATED_TEMPO (Tempo Next%, Magic Speed, Zoom Fly 3/5/6) · RACE_SUPER (karbon+superskum: Alphafly-, Vaporfly-, Adios Pro-, Endorphin Pro-, PUMA Fast-R-, Metaspeed-, Takumi-, Streakfly-, Cielo-familiene). (6) Navn med dobbelt merkeprefiks (2026-reimport: «Nike Nike Alphafly…») normalisert.


1. Fasiten — EF-stigen, innen æra

KlassenTemp-just EF (median)vs RACE_SUPER, HR+æra+temp-matchet
TRAINER342,127**+10,7 s/km tregere** (median, n=20 matcher)
PLATED_TEMPO2382,296+7,3 s/km tregere (n=214)
RACE_SUPER7212,398— (referanse)

Innen-æra (median EF, n) — den ærlige kontrollen:

ÅrTRAINERPLATED_TEMPORACE_SUPERSko-gap super−trener
20212,127 (26)2,212 (23)2,263 (18)**+0,136 (~6 %)**
20222,010 (4)2,246 (52)2,268 (57)+0,26 (tynn trener-n)
20232,177 (4)2,285 (57)2,323 (119)+0,146
20242,220 (30)2,404 (212)(ingen trener)
20252,452 (45)2,474 (210)
20262,452 (31)2,494 (105)

Stigen er monoton hvert eneste år: trener < platet tempo < race-super. Det er ekte og entydig i retning. Størrelsen er derimot en overkant-grense, ikke et presist tall — se §2.


2. Funn 1 — Supersko-effekten: reell, verdt 2–4 %, men tallene her er øvre grense

Innen-æra og HR-matchet løper race-super ~10–14 s/km raskere enn trener på rolig puls (median +10,7, snitt +14,1 s/km ≈ 3,6–4,8 % ved 4:55-pace), og innen 2021 alene er EF-gapet +0,136 (~6 %). Platet tempo ligger midt imellom (+7,3 s/km).

Men to konfundere blåser tallet opp:

1. Recovery-dag-seleksjon. Carl tar trenerne (Pegasus) på de mest slitne restitusjonsdagene → høyere HR på gitt pace → lavere EF som tilskrives skoen. Skovalget korrelerer med øktens formål.

2. Trener-æraen er tidlig. 30 av 34 trener-økter er 2021–23; ingen etter 2023 (Pegasus 37 gikk ut av rotasjon). Lav-fitness-år trekker trener-EF ned uavhengig av sko.

Ærlig dom: supersko-effekten er reell og i tråd med litteraturens 2–4 % — trolig i øvre del for Carl, men de rå 3,6–6 %-tallene her er inflatert av (1)+(2) og skal ikke leses som «supersko gir Carl 5 %». Retningen (super > platet > trener) er robust; den operative konsekvensen er triviell (Carl racer alltid i supersko), men den bekrefter at rolig-trening i trener er «gratis» EF-tap på ~2–4 % — greit for restitusjon, feil for kvalitet der farten teller.


3. Funn 2 — Mileage-degradering: NULL-funn i rolig-EF (æra spiser signalet)

Testet på de fire høy-km Alphafly-parene (temp-just EF vs `gear_km_at_run`, HR 120–150):

Parnkm-spennEF tidligEF seinΔSlope
AlphaFly Turquoise #21920–2 2962,3472,427**+0,080**+0,007/100km
Alphafly Yellow #31020–1 5242,4072,483+0,076+0,006/100km
ALPHAFLY NEXT%770–1 3282,2812,311+0,030−0,002/100km
Alphafly Purple #4800–1 3062,4322,511+0,079+0,010/100km

EF faller ALDRI med km — den stiger svakt. Grunnen er ren konfundering: km akkumuleres over tid, og formen steg i samme tid, så «sene» km-er er også senere-æra (fitter). Fitness-driften overdøver enhver skum-degradering fullstendig. Dette er nøyaktig fellen specen advarte mot.

Konsekvens: rolig-EF kan ikke måle skum-degradering på Carls data — signalet (litteraturens ~2–5 % tap etter 250 km) bor i topp-fart/race-økonomi, ikke i rolig løp på HR 130, og drukner uansett i æra-driften. Cascade-strategien (race→kvalitet→easy) er dermed validert fra motsatt kant: gamle supersko beholder rolig-EF helt opp til 2 300 km (Turquoise #2), så de er trygge easy-sko lenge. Race-km-taket (≤100 km) er et føre-var-valg, ikke et data-tvunget ett — se §4.


4. Funn 3 — Race-residual vs skovalg: utestbart (alt racet i supersko), men INGEN slitasje-straff synlig

Alle 2021→2026-løp er løpt i platede race-sko (Alphafly/Vaporfly/Adios Pro/Endorphin/PUMA/Metaspeed) — null varians i «super vs trener»-dimensjonen på race, så spørsmålet kan ikke besvares direkte. 2019–20-løpene mangler gear-logg.

Men race-km-dimensjonen er lærerik: residual korrelerer ikke med skoens km-stand:

  • Ferske sko (typisk): Valencia-24 (0 km, +0,5), Kbh-24 (3,9, +0,5), EnergiMila-25-PB (42, 0,0), Frankfurt-PB (40, −1,0), Berlin-HM-PB (82,7, +1,6).
  • Godt brukte race-sko UTEN straff: Oslo-M-22 (Alphafly 278 km, +1,7), Trondheim-HM-23 (Alphafly Turq 361 km, +0,3 — men HR-feil).
  • De dårlige residualene har alle andre årsaker enn sko: London-25 (−9,6, sykdom, sko 7 km fersk), Nidaros-25 (−4,7, vind/postM, 49 km), NY-23 (−3,2, Alphafly 12 km fersk). De to verste (TOSK-HM-22 +4,8 / Skogsmaraton −19,7) er B-innsats/trail, ekskludert.

Dom: race-dataene aktivt mislykkes i å vise en slitasje-straff opp til 361 km. Det mykner km-taket: 100 km er konservativt fornuftig (foam-topp bor i sprett, ikke EF), men Carl har racet PB-er på 278 km og 82 km uten synlig kost. Fersk race-sko er lav-risiko-valget, ikke et bevist krav.

PB-plattformene (til rotasjon under): maraton-PB Frankfurt = PUMA Fast-R; HM-PB Berlin = PUMA Fast-R; forrige HM-PB Trondheim-25 = Vaporfly 4 (13 km); 10k-PB EnergiMila = Alphafly #5; Sommernatt-PB = Adios Pro 4 #2. Alphafly og PUMA Fast-R er de dokumenterte race-plattformene.


5. Leveranse — rotasjonsråd Energimila / Kbh / Amsterdam

Fra shoe_log-roller + PB-historikk + km-status. Prinsipp: A-løp i fersk (<100 km) plattform Carl har racet før; bed inn 2–3 økter først (fit-sjekk); unngå kjente gnagsår-sko på lange løp.

LøpAnbefaltBackupBegrunnelse
**Energimila 10k** (12.8)**Nike Streakfly 2** (5–10k-spesialist, karbon, ~200 g)Vaporfly 4 (fersk, 98 km)Streakfly er designet for 10k-racing, men kun 12 km logget og max ~12 km stack → **bed inn nå: 2 harde drag-økter før 12.8 for å bekrefte passform**. Ellers Vaporfly 4 (Trondheim-HM-25-PB-plattform).
**København HM** (20.9)**PUMA Fast-R Nitro Elite 3 (NY)** — planlagt kjøpVaporfly 4 / Alphafly 3 (lager)HM-PB-plattformen (Berlin). Dagens PUMA er 104 km (over race-taket, nedgradert) → kjøp NY-paret nå og legg 2–3 rolige + én tempo på det innen 20.9.
**Amsterdam Maraton** (18.10)**Nike Alphafly 3 (lager)** — ubrukt reservefersk PUMA Fast-R (NY) etter KbhMaraton = mest skum-avhengige distanse; Alphafly er Carls maraton-plattform. Reserven er 0 km → **inn med 3–4 rolige + én MP-langtur i septemberblokka** så den er innkjørt (ikke race på 0 km-sko blindt).

Kjøps-/innkjøringsplan: kjøp de to nye race-parene (PUMA Fast-R NY + evt. et Alphafly-par) innen u30–32 så begge får 30–60 innkjøringskm før sine løp. Unngå Metaspeed Sky (tåboks-gnagsår), Cielo X1 og Prime X (gnagsår >10 km) på alt annet enn korte drag. `Nike Alphafly #5 Yellow` er nå fast langtur-kvalitets-sko (ikke race) — ikke ta den tilbake til race uten grunn.


6. Ærlighetsnotat

Supersko-effekten (§2) er retnings-sikker men størrelse-usikker: n_trener=34 (mest 2021), recovery-dag-seleksjon og æra-drift blåser opp de rå 3,6–6 % — den ærlige lesningen er «2–4 %, litteratur-konsistent, øvre halvdel». Mileage-degraderingen (§3) er et metode-null, ikke et fysiologisk null: æra-konfunderingen gjør rolig-EF ubrukelig til formålet, så «ingen degradering funnet» betyr «ikke målbart her», ikke «foam degraderer ikke». Race-residual-vs-sko (§4) kan ikke besvares (alle race i supersko) — slitasje-observasjonen (ingen straff til 361 km) er n=2 godt brukte race-sko og bør ikke overtolkes. Rotasjonsrådene (§5) hviler på shoe_log-roller + n=1–2 PB-plattform per distanse, ikke på kausal sko-testing. Temp-justeringen (1,6 s/km/°C) er F4a-kurvens snitt — de fleste Trondheim-rolige er <12° så justeringen er liten uansett. gear_km_at_run forutsetter korrekt logget skobytte; feil der forskyver mileage-punktene. Den ene tingen som står helt trygt: Carl racer allerede optimalt (fersk supersko), og gamle supersko er trygge easy-sko — resten er finjustering, ikke feilretting.


Parallelløkt-notat (SPOR D): kun denne fila skrevet i D2-steget; TODO/CHANGELOG/SYSTEM_OVERVIEW/quality.json urørt; ingen sync/bygg/git; ingen skriv til data/.

Konsolidering: `Running_Report_Skoeffekten_v1.md` (O10/D2) — supersko vs trener på temp-just EF innen-æra: monoton stige (trener 2,13 < platet 2,30 < super 2,40), race-super ~10–14 s/km raskere på matchet HR = 2–4 % (øvre grense, recovery-dag- og æra-konfundert). Mileage-degradering = metode-null (æra-drift spiser signalet; EF stiger svakt til 2 300 km) → cascade-strategien validert, race-km-tak er føre-var ikke data-tvunget (PB-er på 278/82 km uten straff). Race-residual-vs-sko utestbart (alt i supersko). Rotasjon: Energimila→Streakfly 2 (bed inn), Kbh→ny PUMA Fast-R, Amsterdam→Alphafly 3-reserve — kjøp+innkjør u30–32.

Biomarkører & ernæringHva: Blodmarkører (jern/ferritin/Hb/D-vit/B12) mot trening og dine egne mål.
Konklusjon: Ferritin under mål + fallende; D-vit alltid under 75 — retest 21.07 sjekker respons på tilskudd.
Fable2026-07-07
#jern#ferritin#D-vitamin#ernæring

Helse-/biomarkørsyntesen v2 — blod × trening

Dato: 2026-07-07 · Fable (FABLE-23) · erstatter v1. Grunnlag: `blodprover.json` (84 analytter, lengste serier ferritin n=24, Hb n=23, D-vit n=13), `carl.json` helse-konstanter + supplement-protokoll, `activities.json` (årsvolum), FABLE-15 (CRP-punktet). Endret fra v1: infeksjonsvinkelen tatt ut; måles mot dine egne mål, ikke lab-gulvet; rammet rundt supplement-protokollen fra 28.04 og retesten 21.07.

Forbehold: mønsteranalyse, n er liten på jern- og hormonpanelet, og ferritin/CRP er akutt-fase-reaktanter som forstyrres rundt infeksjonene (20.04.2025, 20.04.2026). Medisinske vurderinger er dine — jeg rører dem ikke.


1. 20.04.2026 er pre-supplement-baseline

Siste fulle panel ble tatt 8 dager før du startet jern + D3 + omega-3 (28.04). Det er altså «før»-bildet, og 21.07 er første måling som viser respons. Mot dine egne mål fra carl.json:

MarkørDitt mål20.04.2026Nylig baneMot mål
Ferritinoptimal 100, aspir. 15061104 (jan-24) → 53 → 71 → 61Under optimal siden midt-2024
Hboptimal 14,513,512,8–13,5, MCV 91–99Ved kronisk-lav (13,5), normocytisk
Vit Doptimal 75(49, apr-25)aldri > 60, alltid < 75Under mål hver måling
B12bekymring < 250235 (nov-24)424→266→266→235 fallendeUnder din 250-grense, synkende
SHBG / fri-T-indeksSHBG-terskel 5068 / 3,266–71 / 2,7–3,8SHBG over, fri-T i nedre kvartil

Organpanelene er rene og trenger ingen oppfølging: kreatinin 73–81 med eGFR 104–109, CK 67, ALAT 22, LD 176, NT-proBNP < 35, TSH stabil på 22 målinger, morgenkortisol 382 og fritt T3 5,6 den 20.04 (ingen holdepunkt for lavenergitilgjengelighet der og da).


2. Hva tallene sier

Ferritin. Steg gjennom volumoppbyggingen til 104 (jan-24), faller nå i andre år på ~4 400 km — 53 (jan-26) er laveste siden 2021. Korrelasjonen mot trailing-12-mnd-km er svak (r=0,13) fordi banen topper på midten, men retningen de siste to årene er ned mens volumet står i tak. Du har ligget under ditt eget 100-mål siden midt-2024. Transferrinmetning 25→20 og sTfR 1,44→1,10 (jan-24→jun-25) peker samme vei, alt innen referanse. Feraccru fra 28.04 treffer altså et reelt fall, ikke en innbilt lav verdi.

Hb. Ligger på din kronisk-lav-linje (12,8–13,5), normocytisk, med adekvat ferritin. Det skiller ikke seg selv mellom plasmavolum-fortynning og tidlig jernbegrensning — retikulocytter/retikulocytt-Hb ville gjort det, og mangler i serien. Verdt å legge på 21.07-panelet (§4).

Vitamin D. Sesongstyrt, med vinter/vår-bunn (feb 41, apr 43–49, des 46) og høst-topp (sep 57, okt 60). Aldri målt over 60, alltid under ditt 75-mål. Siste verdi 49 (apr-25), så et 15-måneders hull inn mot vinteroppkjøringen. Benferol-loadingen + D3-vedlikehold fra 28.04 er den ene protokoll-delen som mest sannsynlig gir tydelig utslag 21.07.

B12. 424 (feb-23) → 266 → 235 (nov-24), under din 250-grense og fallende. Allerede notert i carl.json, med sublingual B12 «vurderes ved juli-prøvene». Aktivt-B12 (105,6) ligger fremdeles greit, så den fallende total-B12 er mer en trend å følge enn noe akutt.

SHBG / fri-testosteron. SHBG 66–71 (over 60), total-T normal (19–27), fri-T-indeks i nedre kvartil (2,7–3,8). Kjent høylast-mønster. Ikke noe å gjøre med nå — en restitusjonsmarkør å holde øye med hvis fri-T-indeksen fortsetter ned mot 2,3.


3. CRP er blind for deg — differensialen er ikke

Dette er det ene lab-poenget verdt å ta med videre. Den 20.04.2026, midt i den påviste infeksjonen (onset 06.04, 15 dagers hale), var CRP < 1 og totalt leukocyttall 5,9 — begge så «friske» ut. Differensialen gjorde ikke det:

20.04.2026VerdiRef
Nøytrofile1,91,5–7,3
Lymfocytter3,41,1–3,3 (over)
N:L-ratio0,56

Poenget er lab-tolkning: CRP er en upålitelig infeksjonsmarkør for deg — differensialen (særlig N:L) fanger det bedre. Neste gang noe skal objektiveres, be om «leukocytter m/diff», ikke CRP. n=1 på differensialen (den andre i basen er fra 2010), så dette er en billig test-hypotese, ikke et etablert funn.

Samme akse bakover: flu-B PCR+ 28.03.2025 forklarer London-kollapsen 27.04.2025 — den eneste rene biomarkør↔race-koblingen i materialet.


4. Hva 21.07 bør svare på — og hva jeg ville lagt på

Den planlagte retesten (Hb, ferritin, D, B12, Hct, transferrinmetning) leses som respons på 28.04-protokollen. «Bra» mot dine mål: ferritin på vei mot 100, D klart over 50 og mot 75, Hb over 13,5. Ferritin er akutt-fase-forstyrret, så les den mot at du forhåpentlig er infeksjonsfri i juli — da er tallet renere enn apr-verdiene.

Tre ting jeg ville lagt til på samme prøve:

1. Retikulocytter (+ retikulocytt-Hb). Det ene som faktisk avgjør pseudoanemi vs. jernbegrensning for Hb-en din. Uten den blir Hb-tolkningen stående åpen uansett hvor mange ganger du måler.

2. sTfR ved siden av ferritin — mindre infeksjonsfølsom, nyttig når ferritin er forstyrret.

3. Leukocytter m/diff som frisk baseline. Har du én differensial tatt i frisk tilstand, blir en senere infeksjons-differensial (§3) mye lettere å lese.

Jern-absorpsjonen fra Feraccru sjekkes indirekte av ferritin-responsen 21.07; ingen egen test for det.


5. Monitorering videre

MarkørKadensFlagg vedHvorfor
Ferritin + jernstatus21.07, så hver 3.–4. mnd i høyvolumfortsatt fall, eller metning < 20 %§2 — trend ned under toppvolum
Hb + MCV + retikulocyttermed jernstatusHb < 13,0 med fallende MCV§2 — åpent pseudoanemi-spørsmål
Vit D2×/år, én sensommer én senvinterunder 50 i bunn-målingen§2 — sesongbunn treffer vinterblokka
B12 (+ aktivt)halvårligtotal < 250 fallende, aktivt lavt§2 — synkende
Leukocytter m/diffad hoc ved mistenkt infeksjonN:L < 1 med lymfocytose§3 — CRP er blind for deg
SHBG / fri-T-indekshalvårligfri-T-indeks under 2,3§2 — last-markør

6. Konfidens

Organpaneler rene (A). D-vit under mål + 15-mnd hull (A). Ferritin faller under toppvolum, trend ikke deplesjon (B — akutt-fase-forbehold). Hb-mønster mot pseudoanemi (B/C — mangler retikulocytter). Differensial fanger infeksjon der CRP svikter (B — mekanistisk klart, n=1). SHBG/fri-T høylast-mønster (C — n=5).

Én linje for konsolideringen: organpanelene er rene; de reelle punktene er ferritin under ditt 100-mål og fallende under toppvolum, Hb på kronisk-lav-linja (pseudoanemi vs. jernbegrenset uavklart uten retikulocytter), og D-vit alltid under 75 med et 15-mnd hull — alle tre allerede under behandling siden 28.04, med 21.07 som respons-sjekk. Lab-tips: CRP er blind for infeksjon hos deg; differensialen (N:L 0,56 midt i Berlin-infeksjonen) fanget det. B12 235 fallende. Ingen data-skriv; blodprover.json urørt.

Helse-/biomarkørsyntesen v3Hva: 12-ukers-avlesningen av protokollen fra 28.04 (retesten 21.07) mot utøvermålene.
Konklusjon: Vitamin D over mål, ferritin fortsatt flatt under mål; retikulocyttene lukker hemoglobin-spørsmålet.
Fable2026-07-23
#biomarkører#retest#protokoll

Helse-/biomarkørsyntesen v3 — 21.07-retesten

Dato: 2026-07-23 · Fable (FABLE-23) · erstatter v2. 21.07-svarene er lagt inn i `blodprover.json` (+ ny analytt Retikulocytter); `carl.json` oppdatert (SHBG-estimat 73, retest-resultat); hub-helsevisning rebygd. Dette er 12-ukers-avlesningen av protokollen fra 28.04. To ting er nye siden v2: retikulocyttene lukker Hb-spørsmålet, og differensialen tvinger frem en korreksjon av et v2-funn.


1. Protokoll-responsen (28.04 → 21.07, 12 uker)

MarkørFør21.07Ditt målDom
Vit D (25-OH)49 (apr-25)**83**75Over mål — første gang > 60 i hele serien
Ferritin61 →65100Flatt, fortsatt under mål
Transferrinmetning20 (jun-25)**26**> 25I mål
Jern13,9 (jun-25)**19,1**9–34Opp
sTfR1,101,110,76–1,76Stabil
Hb13,5 →13,214,5Ned 0,3
Retikulocytter0,030,03–0,11Lav-normal (§2)
Aktivt-B12105,6**120,6**> 60Opp
Folat16,920,8> 5,7Opp
SHBG / fri-T / total-T68 / 3,2 / 2173 / 3,2 / 24Uendret last-mønster

Kort: D-vitaminet er den klare vinneren — 49 → 83 på loading + vedlikehold, over 75-målet du aldri har nådd før (toppen i hele serien var 60). Jernet svarer funksjonelt (metning 20 → 26 %, jern 13,9 → 19,1), men lagrene henger igjen (ferritin 61 → 65). Merk at 20.04-ferritinen (61) ble tatt midt i infeksjonen og er trolig akutt-fase-løftet, så den reelle bunnen var lavere og den reelle gevinsten litt større enn +4 antyder. B12/folat opp uten at sublingual ble startet — den bekymringen er mindre presserende nå.


2. Retikulocyttene lukker Hb-spørsmålet: dilusjonelt, ikke jernmangel

v2 lot dette stå åpent fordi retikulocytter manglet. Nå har vi dem: 0,03, i nedre kant av referansen, ingen retikulocytose. Sammen med normal MCV (94), adekvat funksjonelt jern (metning 26 %, sTfR normal 1,11) og fravær av mikrocytose peker det samlet mot plasmavolum-fortynning, ikke jernmangelanemi. Iron-protokollen løftet ikke Hb (13,5 → 13,2), akkurat som forventet hvis konsentrasjonen er dilusjonell — jern flytter ikke en fortynnet Hb.

Praktisk: slutt å lese Hb 13,2 som et jernproblem. Ferritin-for-prestasjon og Hb er to separate spørsmål — det første er reelt (§4), det andre er et treningsartefakt du ikke skal jage med mer jern. Forbehold: lav-normal retikulocytt kan i teorien være lett hypoproliferativt, men med rent jern/B12/folat/TSH/kreatinin er dilusjonelt den enkleste forklaringen. n er liten, og dette er din kliniske avlesning å gjøre — jeg leverer mønsteret.


3. Korreksjon av v2 §3: differensialen er IKKE en infeksjonsmarkør for deg

Dette er den viktigste endringen, og den går imot det jeg skrev i v2. v2 hevdet at differensialen 20.04 (N:L 0,56, lymfocytose) «fanget» Berlin-infeksjonen. 21.07-prøven, tatt frisk, viser samme bilde — sterkere:

NøytrofileLymfocytterN:L
20.04.2026 (i infeksjon)1,93,40,56
21.07.2026 (frisk)1,53,30,45

Nøytrofilene var faktisk høyere under infeksjonen, og N:L høyere. Det lymfocytt-dominerte mønsteret med lave nøytrofile er altså din konstitusjonelle baseline, ikke et infeksjonssignal. v2-tipset — «be om differensial når CRP svikter» — faller: differensialen din ser lik ut frisk og syk, så den skiller ikke. Det styrker kjernen fra F15/v2 (infeksjoner er lab-tause hos deg → symptomer, ikke tall), men fjerner løsningen jeg foreslo.

Sidenotat, ingen tolkning påtvunget: nøytrofile 1,5 ligger på referansegulvet (var 1,9 i april). Verdt å ha i bakhodet som din egen baseline hvis en fremtidig telling ser «lav» ut.


4. Ferritin under toppvolum — fortsatt den ene å følge

65 mot ditt 100-mål, med funksjonelt jern i orden. På 12 uker Feraccru annenhver dag har lagrene så vidt flyttet seg, mens volumet går ~4 400 km/år. Hvis ferritin mot 100 betyr noe for deg prestasjonsmessig, er dagens regime tregt — dosering/frekvens er din vurdering, jeg noterer bare at responskurven er slak. Retest ferritin + metning om ~3 måneder viser om lagrene tar igjen når D og funksjonelt jern nå er på plass.


5. Resten er rent

Elektrolytter Na 140 / K 4,1, kreatinin 76 med eGFR 106, ALAT 25, TSH stabil. Albumin 47 (over 45) — samme milde forhøyning som før, forenlig med hemokonsentrasjon ved prøvetaking, ikke noe eget. SHBG 73 er ny topp, fri-T-indeks uendret 3,2 — last-mønsteret fra v2 står, ingenting nytt å gjøre.


6. Hva 21.07 endrer i monitoreringen

D-vitamin flyttes fra «rette opp» til «holde» — neste måling senvinter bekrefter at 6 400 IE annenhver dag holder nivået gjennom mørketiden. Jern følges videre på ferritin + metning (§4). Hb er avklart (dilusjonelt) og tas ut av jern-regnskapet. Differensial-for-infeksjon utgår (§3). Alt annet halvårlig som før.

MarkørNesteFlagg ved
Ferritin + metning~3 mndferritin faller igjen, eller metning < 20 %
Vit Dsenvinterunder 50 i bunn
Hb + MCVmed jernstatusHb < 13,0 **med** fallende MCV (ellers dilusjonelt)
SHBG / fri-T-indekshalvårligfri-T-indeks under 2,3

7. Konfidens

D-respons reell og over mål (A). Funksjonelt jern opp, lagre henger (A). Hb dilusjonelt/pseudoanemi — nå med retikulocytt-støtte (B, opp fra B/C i v2). Differensial = baseline, ikke infeksjonsmarkør (B — n=2, men retningen entydig og selv-korrigerende mot v2). Ferritin under mål under toppvolum (A).

Én linje for konsolideringen: 12-ukers-retesten (21.07) — D-vit 49→83 (over 75-målet, aldri før >60), funksjonelt jern opp (metning 20→26 %, jern 13,9→19,1) men ferritin flatt 61→65 (fortsatt under 100); retikulocytter 0,03 avklarer at lav Hb er dilusjonell, ikke jernmangel — slutt å jage Hb med jern. v2-korreksjon: differensialen (N:L 0,45 frisk vs 0,56 i infeksjon) er konstitusjonell baseline, ikke infeksjonsmarkør — tipset «be om diff når CRP svikter» faller, F15s «symptomer, ikke tall» står sterkere. B12/folat opp, resten rent. Data lagt inn (blodprover.json +Retikulocytter, carl.json), hub rebygd + sanity-OK; deploy skjer ved din neste sync (jeg kjører ikke git).

🗺️ Plan & coaching (6)

Blokkplan Amsterdam v3Hva: Alle vinduets funn foldet inn i én operativ blokkplan med endringslogg E1–E10.
Konklusjon: Mini-taperen før Energimila skrotet; P4-taper-porten formalisert u40–41.
Fable2026-07-06
#blokkplan#amsterdam#u28-42

Blokkplan — Energimila → København HM → Amsterdam (v3, operativ samleplan)

Dato: 2026-07-06 · Skrevet av: Claude (Fable, FABLE-8 fra TODO) · Status: FORSLAG til spikring — folder alle Fable-vinduets funn inn i én plan. `training_plan_daily.json` er IKKE rørt — dagene spikres med Carl i dialog etter at v3 er lest (PLAN_STRUKTUR-regelen). Konkrete dag-endringer som trengs står samlet i §7.

Erstatter: v2 (03.07) som gjeldende blokkplan-dokument. v2s beslutningsgrunnlag (§1–2 der) og v1s teorikapitler gjelder fortsatt.

Mål: Energimila 10 km ons 12.8 (sub-37 · strek 36:57) · København HM søn 20.9 (sub-1:20) · Amsterdam maraton søn 18.10 (sub-2:50)

Modell i dag (06.07): Energimila 35:52 → P(sub-37) 75 % · Kbh 1:19:22 → P(sub-1:20) 57 % · Amsterdam 2:47:56 → P(sub-2:50) 61 %

Akseptert avhengighet: S1 (LT2-løft 2–3 s/km, konfidens B+) tas som gitt; FABLE-9 skjerper dose→respons-tallet parallelt → åpen kalibrering, se §7.


0. Hva v3 folder inn (kildekart)

KildeDet som hentes inn
`Running_Brief_Blokkplan-Amsterdam_v2.md`Basis: faser, volumtak 108–110, langtur-trapp, immunvakt, dobbel terskel, styrkeregler
Tverrmaraton-syntesen §5–6P1–P10-kravene, **P4-taper-porten u40–41**, MP-mål 120–150, R1–R8-realisering
FABLE-4 §7 (varme)u28–29-dosering, **T2.5-anker 19.7**, mulig utladningsvindu u30 → tidlig terskeløkt HVIS RHR 36–37 hjemme
FABLE-5 §5/§6/§7 (kortdistanse)**u32 = INGEN taper** før Energimila · **u38 = ekte taper** før Kbh · u39 immunvakt-planlagt · RE1–RE7 · S1–S5 + go/no-go-skjema
FABLE-6 §3 (pacing-DNA)Fase-formet Amsterdam-plan m/ tre in-race-gates (km 5/25/35), GI-protokoll, vindsone-regel — race-uke-gates inn i race-ukene
FABLE-7 §3 (absorpsjon)**30k+ = 2–3-dagers enhet** (avstander rundt L4-turene sjekket → to funn, §2/E7) · race = 4–5-dagers enhet · RHR-blindsone · krateret er godartet

Tall-fasit for «dagens plan» er `training_plan_daily.json` (dagene er sannheten). Merk: daily-fila er revidert etter v2-prosaen — ferieukene står i 100 km (ikke 67–75) og u40 i 100 (ikke 92). v3 bruker daily-fila som fasit og retter ikke v2-teksten bakover.


1. Endringslogg vs v2

#EndringKildeHvorfor
E1**Mini-taperen før Energimila skrotes.** u32: 71 → ~95 km, normal treningsuke; kun lett dag-før (tir 11.8). Siste fulle terskel senest **fre 7.8** (T−5); langtur lør 8.8 kuttes ikke, men holdes ≤28 km og rolig.FABLE-5 K3/RE3/RE4/§7Taper er distanse-asymmetrisk: alle 10k-PB-ene kom på full treningsuke (EnergiMila-25: PB på TSB −6,2 og 101,5 km siste 7 døgn). Full taper koster HM/M-bygget uten å gi noe på 10k.
E2**u38 bekreftes som EKTE taper — nå med Berlin-malen som eksplisitt fasit:** TSB-pre mot +20…+25, ATL/CTL-fall ~5:1, søvn ≥8 t race-eve.FABLE-5 K3/S3HM-PB-ene kom alle på ekte taper (+17…+25…+36). S3 er 0,5–1 s/km «gratis» fart — hvis den gjentas.
E3**u39 = immunvakt-planlagt, null kvalitet — nå med forventningsanker:** HRV −30…−45 % man 21.9 er A5-krateret (godartet kvittering, ikke sykdom); full autonom klarering 4–5 d; 72 t immunvakt er GULVET.FABLE-5 §6 · FABLE-7 A3/A5Berlin-HM-kvitteringen: severe infeksjon dagen etter løpet. Kbh er både A-mål og Amsterdam-anker — ingen av rollene tåler en repetisjon.
E4**P4-porten formaliseres i u40–41** (måles på 36-km-turen 3.10 og generalprøven 10.10; strengt P4-krav: de to siste 30k+ = 34 km u35 + 36 km u40). Rød port → Amsterdam-pacing justeres mot 2:52-scenario — **treningen forseres aldri.**Tverrmaraton P4/§6Eneste KPI som skiller NY-23 fra alle sub-3-blokkene. NY-leksen omsatt til regel.
E5**Race-uke-gates inn i alle tre race-ukene** (§5): Energimila RE1–RE7 · Kbh go/no-go-skjema + S2-reserve · Amsterdam fase-plan m/ gates km 5/25/35, GI-protokoll og vindsone-regel. Erstatter v2 §5s lineære pacing-linjer («Amsterdam 4:03 første 5 km, alt fra 35» utgår).FABLE-6 §3 · FABLE-5 §5/§6All maraton-tid lekker i km 35–40 og kollapsen er binær — fasen og gatene priser det ned. London var synlig fra km 2; gaten fantes ikke da.
E6**MP-km-målet heves: 80+ (gulv) → sikt 120–150.** Dagens plan har ~75–80 eksplisitte MP-km → påplussing i §7. Hard betingelse: MP-km × P4-utførelse, aldri MP-km alene.Tverrmaraton P5/§6Sub-3-laget: 80–178 MP-km. NY-motbeviset: 171 MP-km dårlig utført → −3,2 %.
E7**Avstandsregel etter 30k+:** ≥2 rolige dager før neste harde stimulus. Konsekvens: **u41-TOSK flyttes man 5.10 → tir 6.10** (u40 har alt gjort dette). Man-TOSKene u35/u36 (D+2 etter 32/34 km) står, men får eksplisitt HRV-gate + B1b-flagget som vakt.FABLE-7 A2/§330k+ er en 2–3-dagers enhet (61 % bruker ≥2 d på HRV-retur). M-spissingen får den strenge regelen; HM-byggets ukestruktur beholdes per FABLE-7s egen anbefaling.
E8**HRV/søvn-styringen oppdatert (G1 utført):** søvn <78 alene er IKKE abort (<74 = myk obs); abort = søvn <75 OG HRV <60, eller HRV <55 alene. Rød HRV før dobbel UTEN race/30k+/sykdom i forkant = livsstress → avgjør på følelse, ikke auto-kutt.FABLE-4b · FABLE-7 A1«<78 aldri vellykket» er motbevist (19/38 lav-uker nådde ≥8); kvalitet er autonomt ~gratis — gaten vokter akkumulert dysregulering, ikke gårsdagens terskel.
E9**T2.5-porten (19.7) styrer u30-aggressivitet:** RHR 36–37 vedvarende hjemme → utnytt utladningsvinduet (17.–27.7) med tidlig full terskeløkt; RHR 40+ → u30 = ren gjenoppbygging. Blokkstrukturen endres ikke av porten.FABLE-4a §6–7Italia ga partiell adaptasjon (B−); plasmavolum-gevinst decay-er over 7–14 d — vinduet er nå-eller-aldri.
E10**Wellness-lesning gjennom hele blokka:** absorpsjon leses på HRV + Body Battery — **aldri friskmeld på RHR alene** (non-responder). Varme (u28–31): +~½ dag forventet klarering, ikke overkutt. 30k+ som koster >3 HRV-dager = dårlig absorbert (B1b-flagg, G8).FABLE-7 A4/A6/§3RHR beveger seg ≤1 slag selv etter maraton — RHR-basert friskmelding er systematisk for tidlig.

Verktøystøtte som lander i kveld (OPUS-IMPL-1, parallelt): G2 distanse-avhengig HRV-flaggtekst · G3 fase-profil + gate-rader i pacing-armbåndene · G4 race-decoupling-metrikk · G5 krater-demping i dysregulerings-gaten · G8 B1b-flagg · OPPSKRIFT-2 (P4-port, MP-mål 120–150 og Energimila-streken på Mål-fanen).


2. Uke-for-uke (u28–42)

Volum = dagens daily-fil; fete avvik = v3-endring som skal inn ved dag-spikringen. Langtur-trappa (30k+, P3-tellende): 30 (u29) · 30 (u31) · 32 (u34) · 34 (u35) · 36 (u40) = 5 stk — minimum av P3; antallet er vernet, utførelsen hellig.

UkeDatoerkmInnhold + regler
286.–12.7100Italia, Bolzano-lavland — Seefeld-høyden er bak, resten er ren varme (adaptasjonen kan bygge litt til). Puls <138 på alt rolig, kvalitet kun morgen/skygge, ingen ny hard stressor. Langtur søn 28 = ukas viktigste økt, fylling 80 g/t (første datapunkter til `fueling_log`). Aksepter høyere decoupling i varmen som normalt.
2913.–19.7100Hjemreise tor 16.7 (to rolige dager). Langtur lør 18.7 **30 km** hjemme i normaltemp (trapp 1/5). **Søn 19.7 = T2.5-PORTEN** (§4.1): HRV-baseline ≥58 · RHR-7d 37–39 · pace@128.
3020.–26.7100Re-intro bane + gym — én stressor av gangen. Man TOSK re-intro (kontrollert, laktat ≤3,3) ligger D+2 etter 30-km-turen → HRV-gate på morgenen. **T2.5-utfallet styrer:** adaptasjon banket → tidlig full terskel i utladningsvinduet (17.–27.7); ellers gjenoppbygging som planlagt. Langtur 28 rolig.
3127.7–2.8105Byggetopp: man TOSK · **ons første DOBBEL TERSKEL** (AM LT1 6 km · PM 10×1000 @ 3:50–3:53) m/ HRV-gate etter E8-reglene · lør **30 km L3 progressiv** (trapp 2/5).
323.–9.8**71 → ~95 (E1)****Normal uke — ingen mini-taper.** Man TOSK 10k-spiss (6×1000 @ 3:45–3:48) · **siste fulle terskel senest fre 7.8 (RE4)** · fart-uten-syre (400/strides) beholdes i uka · langtur lør 8.8 **26–28 rolig** (ikke 30+ — 2–3-dagershalen skal ikke inn i race-vinduet). Detaljert dagfordeling spikres med Carl (§7.1).
3310.–16.874**RACE-UKE.** Man easy + strides · tir primer 3×1000 @ 3:50 (full pause) — lett dag-før holder · **ons 12.8 🏁 ENERGIMILA** (kjøreplan §5.1, streken §4.2) · tor–lør immunvakt (72 t = gulv) · lør langtur 22 kun I1 · kvalitet-retur tidligst dag 4–5 (søn/man). Forvent HRV-dip i −17 %-klassen D+1 — godartet (A5).
3417.–23.8104HM-bygg: man TOSK 4×2000 @ 3:50 (D+5 etter race ✓) · ons DOBBEL · lør **L4 32 km** m/ 3×5 @ MP (**forslag: 3×6**, E6/§7.3) — race-fylling 85 g/t (trapp 3/5).
3524.–30.8108**SESONGTOPP.** Man TOSK m/ **eksplisitt HRV-gate** (D+2 etter 32-km-turen, E7) · ons DOBBEL · lør **L4 34 km** m/ 12 km sammenhengende MP (**forslag: 14–15**, §7.3) — full race-fylling (trapp 4/5).
3631.8–6.9100Down-uke: man TOSK m/ HRV-gate (D+2 etter 34-km-turen) · lør 28 m/ siste 6 @ HMP 3:50 — K6-speilet mot Kbh begynner å måles her (dragsnitt-mål sein blokk **3:43–3:45**; FABLE-9 kalibrerer, §7.5).
377.–13.972Kbh-taper del 1: man TOSK skarp/kort (5×1000 @ 3:45) · lør 20 m/ 5 @ HMP 3:47–3:50 — generalprøve racesko + fylling.
3814.–20.960**EKTE TAPER (E2, Berlin-malen):** TSB-pre mot +20…+25, ATL/CTL-fall ~5:1, søvn ≥8 t race-eve. Tir primer 4×1000 @ 3:50 · **søn 20.9 🏁 KØBENHAVN HM** (kjøreplan §5.2, go/no-go §4.3).
3921.–27.975**IMMUNVAKT-UKE — null kvalitet (planlagt).** HRV-krater −30…−45 % man 21.9 er forventet og godartet (G5-dempingen aktiv). Lør 22 L1 (kun I1). Full autonom klarering dag 4–5; første kvalitet først u40.
4028.9–4.10100Storuke: tir TOSK MP-terskel 5×2000 @ 3:55–3:58 (allerede flyttet fra man ✓) · **lør 3.10: 36 km L4 m/ 3×6 @ MP 4:00–4:03 (T−15)** — generalprøve m/ full race-ernæring 85–90 g/t + racesko (trapp 5/5). **P4-PORT, måling 1 (§4.4).** ≥2 rolige dager etter (søn + man).
415.–11.1090MP-rytme: **TOSK flyttes man 5.10 → tir 6.10 (E7)** · lett-TOSK ons/tor · **lør 10.10: 26 km m/ 12 @ MP 4:01 (T−8)** — siste MP-generalprøve. **P4-PORT, måling 2.** Siste lette styrke.
4212.–18.1074Taper: tir MP-primer 4×1000 @ 4:00 · TSB-mål +30…+40 m/ CTL-tap ≤8 (P9) · HRV-CV fallende (taper-cockpit) · **søn 18.10 🏁 AMSTERDAM** — fase-plan m/ gates (§5.3).

3. KPI-tavla (måles på Blokkplan-fanen / prediksjon.html — OPPSKRIFT-2 wirer v3-verdiene)

KPIv3-kravStatus i planen
P1 volum≥85 km/u snitt i byggetPlan-snitt u30–41 ≈ 90 ✓ (peak 108, bevisst under Frankfurt-dosen — P8-trade)
P2 CTL106–115 peakFølges live
P3 langturer 30k+≥5Eksakt 5 → **antallet er fredet; ingen av dem ofres uten erstatning**
**P4 utførelse**Av de to siste 30k+ før taper (34 u35 · 36 u40): **minst én m/ decoupling ≤1 % OG score ≥8**Porten står i u40–41 (§4.4)
P5 MP-km**120–150** (gulv 80) — alltid MP × utførelse, aldri MP alenePlan i dag ~75–80 eksplisitt → §7.3
P6 kvalitets-km21–25 km/u, terskel-forankretDragsnitt-mål sein blokk 3:43–3:45 (K6; FABLE-9 skjerper)
P7 øktscore≥7,5 snittFølges live
P8 sykdom≤2 sykedager siste 6 u · **2 HRV-svake morgener på rad = PM-økta ryker, aldri søvn/langtur**Immunvakt u33/u39 planlagt
P9 taperTSB +30…+40 m/ CTL-tap ≤8 · HRV-CV fallendeu38 (HM-variant +20…+25) og u42
P10 tune-upsEnergimila T−9,5 u + Kbh T−4 u (near-anker) · postM-fritt ✓

Wellness-lesning hele blokka (E10): absorpsjon = HRV + Body Battery, aldri RHR alene (A4 non-responder) · kvalitet er autonomt ~gratis, 30k+ = 2–3 d, race = 4–5 d (A1–A3) · varme +½ d (A6) · post-race-krater er kvittering, ikke varsel (A5) · 30k+ m/ >3 HRV-dager → B1b-flagg (dårlig absorbert).


4. Portene

4.1 T2.5-porten — søn 19.7. Readout: HRV-baseline ≥58 · RHR-7d 37–39 · én pace@128 i normaltemperatur mot juni-baseline (temp-just. EF ~2,54). RHR 36–37 vedvarende første uke hjemme = adaptasjon banket → tidlig full terskeløkt i u30 (utladningsvinduet 17.–27.7). RHR 40+ / pace@128 under baseline → u29–30 behandles som ren gjenoppbygging. Porten endrer aggressivitet i u30, aldri blokkstrukturen.

4.2 Energimila-streken — ons 12.8. 36:57 = eksakt Riegel-1,06 mot 2:49:59 (36:5x kvitterer altså Amsterdam-planen). Sub-1:20-broen: ren Riegel ≤36:15, Carl-ratioen (1,041) ≤36:46 → 36:4x kvitterer i praksis begge strekene. Modellen venter 35:52 — løpet skal bekrefte form, ikke skape den. Ett enkelt miss (37:0x–37:2x) på dårlig dag/vær er ikke alarm — Kbh T−4 er near-ankeret som overstyrer; systematisk miss på begge tune-ups → Amsterdam re-forhandles mot 2:52-scenariet.

4.3 Kbh go/no-go — race-uka u38. (a) Skjema fra Energimila: 36:4x → åpne på 3:47-skjema · 37:0x+ → åpne 3:49 og hent S2-reserven (I4 tillatt) fra km 15–16. (b) Race-eve: infeksjon siste 14 d = nedjuster mål / nedre CI; HRV-flagg alene = infolinje, ikke måljustering (K5/G2 — 2 av 3 kortdistanse-flagg sto foran PB-er). (c) Ekte no-go kun ved infeksjon (P8/immunvakt-logikken). HM-en bærer to roller (A-mål + Amsterdam-anker) — begge overlever en forsiktig åpning, ingen overlever å jage en syk dag.

4.4 P4-porten — u40–41 (taper-inngangen). Måles på 36-km-turen (3.10) og generalprøven 26 m/ 12 MP (10.10); det strenge P4-kravet gjelder de to siste 30k+ (34 km u35 + 36 km u40): minst én med decoupling ≤1 % OG score ≥8. Grønn → 2:50-planen står. Rød → Amsterdam-pacingen justeres mot 2:52-scenariet (nedre CI) — treningen forseres aldri. (NY-23-leksen: 171 MP-km hjalp ikke når utførelsen sviktet.)

4.5 In-race-gates Amsterdam (D5/D6/D4): km 5: HR ≥170 vedvarende på planfart = London-gate → nedre-CI-plan (≈2:53) senest km 8 · km 25: HR ≥172 = Kbh-mønster → dropp negativ splitt, forsvar 2:50 · km 35: kadens −4 spm fra km-10-referansen eller −10 s på intakt innsats = brudd → lås 4:06–4:08 resten. Detaljer i §5.3.

4.6 Løpende gates: dysregulerings-gaten m/ race-krater-demping D+1…D+4 (G5) · dobbel-terskel-morgener etter E8-reglene · B1b-absorpsjonsflagget (G8).


5. Race-uke-planene

5.1 🏁 Energimila 12.8 — sub-37 (full plan: FABLE-5 §5, RE1–RE7)

UkaINGEN taper (E1): normal u32, siste fulle terskel fre 7.8, lett dag-før m/ primer
KjøreplanKm 1 = **3:40–3:44, aldri under 3:38** · lås 3:41–3:43 til km 7 · **alt fra km 8** · 5k-pass 18:25–18:30 (5k-split-PR-en 18:38 ryker underveis — planlagt) · fade-mål ≤0 %
Vær-gate>5 m/s → even-effort (WGAP-ro), aldri jag km-tider i motvind
Race-eveSøvn ≥8 t · HRV-flagg alene = info (ikke måljustering) · reelle flagg: sykdom <14 d, vind
VerktøyA9-generatoren mates med 36:50-mål + RE1/RE2-låsene; pulsbelte sjekkes i kulde/regn
EtterImmunvakt 72 t (gulv) · kvalitet-retur dag 4–5 · HRV-dip −17 %-klassen D+1 er normalt

5.2 🏁 København HM 20.9 — sub-1:20 (full plan: FABLE-5 §6, S1–S5)

Gapet3,8 s/km fra Berlin-PB — dekkes av S1 LT2-løft (2–3) + S2 I4-billett (1–1,5) + S3 taper (0,5–1) + S4 forhold (0–1) ≈ 4–6 s/km. S1 tas som gitt (B+); FABLE-9 skjerper
UkaEkte taper (E2, Berlin-malen): TSB-pre +20…+25, ATL/CTL ~5:1, søvn ≥8 t
KjøreplanHusstilen: åpning +3–5 s/km (3:50-kontrollert første 3 km), negativ splitt −4…−6 s/km · skjema fra go/no-go-porten §4.3 · I4 først fra km 15–16 (Berlin-reserven: 95 % I3, finish 3:30)
EtterRace = 4–5-dagers enhet: 72 t immunvakt er gulvet, u39 er planlagt deretter — krateret er godartet

5.3 🏁 Amsterdam 18.10 — sub-2:50 (full plan: FABLE-6 §3; kontrollsum 2:49:59)

FaseKmPace
Åpning14:10–4:11 (HR <155 — trengsel er gratis)
Nedtrapping2–34:06 → 4:04
Innfasing4–84:02 — **gate km 5** (§4.5); aldri raskere enn 3:57 før km 8
Lås9–244:01–4:02 i tog, korridor ±4 s; kadens-referanse noteres ~km 10 — **gate km 25**
Halvveis-lull24–26gel + fokuspunkt (mini-dippen i 6/11 løp)
GI-protokoll27–30ved mageknip: aksepter +10–15 s/km i maks 3 km, **ikke jag tilbake** (hendelse ≠ brudd; Berlin-kvitteringen: full recovery, kost <80 s)
Vindsonen30–374:01–4:02 LÅST — le/gruppe FØR km 30; **watt får svinge, aldri farten** · km-variasjon >±4 s = du drar alene — **gate km 35**
Betalt frislipp38–403:58–3:59 — KUN grønn km-35-gate (reserven er reell: 9/11 løp spurter)
Mål41–42,23:56–3:57

5k-armbånd: 20:25 · 20:11 · 20:09 · 20:09 · 20:09 · 20:09 · 20:09 · 20:00 + 8:40 (G3 genererer HTML/armbånd m/ gate-rader). Fylling 85–90 g/t + koffein-plan — øvd på L4-turene (u34/35/40/41) til race-sikker. >16° racesnitt → +3–5 s/km fra start; racesko testet T−15 og T−8.


6. Ferie-justering (nå → 16.7) — uendret fra v2

Varmen er fortsatt lovlig stimulus (og nå uten høyde-strain): puls <138 på alt rolig, kvalitet kun morgen/skygge, langturene er ukas viktigste økter — bruk dem på race-fylling-øving. Ikke jag pace. Hjemkomst 16.7: to rolige dager, så T2.5-porten 19.7.


7. Dag-spikringslista (Carl-dialogen som endrer `training_plan_daily.json`)

1. u32 bygges om (E1): 71 → ~95 km · langtur 18 → 26–28 rolig · siste fulle terskel senest fre 7.8 · kvalitetsrekka fordeles (man 10k-spiss står; ons/fre-detaljene velges i dialog).

2. u41: TOSK man 5.10 → tir 6.10 (E7) — og lett-TOSKen ons 7.10 vurderes → tor 8.10 for å unngå rygg-mot-rygg.

3. MP-påplussing (E6): u34 3×5 → 3×6 · u35 12 → 14–15 · u40 3×6 → 3×7 — kun så langt P4-utførelsen holder. Gir ~95–105 eksplisitte MP-km; resten av 120–150 dekkes av MP-terskel-TOSKene u40–41 + evt. MP-finish på én mellomtur. Blokk-monitoren (OPPSKRIFT-2) teller fasiten.

4. Race-day-labels oppdateres: Energimila «gi på fra 6» → «alt fra km 8» (RE2) · Amsterdam «4:03 første 5 km, MP-lås til 32, alt fra 35» → fase-planen §5.3 (G3-generatoren skriver armbåndet).

5. HRV-gate-notat i day-labels for man-TOSK u30/u35/u36 (D+2 etter 30k+; rød morgen → flytt/demonter, PM-økta ryker aldri søvn/langtur).

Åpne kalibreringer: S1/LT2-dosen — FABLE-9 leverer km/u I3/I4 + drag-pace-mål for u29–37; v3s 3:43–3:45 og terskelvolum justeres mot den rapporten · varme del 2 (O1, etter 17.7) eier finlesningen av T2.5 · `fueling_log` fylles fra u28-langturene — Amsterdam-blokka er første med 85–90 g/t-data · G4-race-decoupling (EF 31–35/3–8) får sitt første datapunkt i Amsterdam.


Grunnlag: v2 (03.07, spikret) · Tverrmaraton-syntesen §5–6 (sub-2:50-oppskriften) · FABLE-4 §6–7 · FABLE-5 §5–7 · FABLE-6 §3 · FABLE-7 §3 · `training_plan_daily.json` u28–42 (lest, ikke rørt) · Fable-Vinduet-Sammendraget. Modelltall per 06.07.

Parallelløkt-notat: kun denne fila er skrevet; TODO/CHANGELOG/SYSTEM_OVERVIEW/data/ urørt; ingen sync/bygg kjørt.

Konsolideringslinje: `Running_Brief_Blokkplan-Amsterdam_v3.md` — v2 + Fable-vinduet foldet til én operativ plan: u32-minitaper skrotet (K3), u38 Berlin-taper, u39 immunvakt m/ krater-anker, P4-port u40–41 (rød → 2:52-pacing, aldri forsert trening), MP-mål 120–150 (plan ~80 → §7-påplussing), race-uke-gates i alle tre løp (London-gate km 5 m.fl.), 30k+-avstandsregel (u41-TOSK → tirsdag), T2.5-port 19.7, RHR-blindsone. Dagene spikres med Carl (§7); S1 åpen kalibrering mot FABLE-9.


Besluttet 18.07.2026 (plan-dialog Fable — dette dokumentet er nå historisk)

Målhierarkiet ble endret 18.07 (Kbh HM = A-mål med ekte HM-topp), og v3s forslag er behandlet i tre dialog-runder og erstattet av v4.3, skrevet inn i `training_plan_daily.json` u30–42 samme dag. Gjeldende intensjonsdokument: `Running_Brief_Plan_Kbh-Amsterdam_v4.md`. Frossen original: `data/plan_snapshots/2026_KbhAmsterdam_ORIGINAL_v4.json`. Hovedavvik fra v3: E1 stadfestet (u32 = 101 km, kontroll man + 6×1000 @ 3:42–3:45 ons) · langtur-trapp 5 → 11× ≥30 (6× ≥34) · K6-porten flyttet til T−7-lesning (aritmetikken i «≤3:47 innen 1.9» holdt ikke) · u37–38 = Berlin-u12/u13-replika · u40 tir-TOSK ut (Frankfurt-mikrostruktur: 4×3/1 + 36 km L4) · u41-langtur 26→18 (T−8, Berlin/Valencia-malen) · u42 = 6×1000+4×1000 @ MP (Kbh/Berlin-24-mønsteret) · dobbel-AM som LT1-intervaller · P4/u38-taper/u39-immunvakt/in-race-gates uendret fredet.

Plandossier (forhandlingsgrunnlag)Hva: Dag-for-dag-sannhet u28–42 + åpne beslutninger til plan-dialogen.
Konklusjon: Grunnlaget for å spikre training_plan_daily.json i dialog (Energimila-dato, volum-tak, taper).
Opus2026-07-07
#plan#dialog#beslutninger

Plandossier Amsterdam — forhandlingsgrunnlag for plan-dialogen

Dato: 2026-07-07 (Fable) · Formål: Carl er uenig i deler av planen og skal ta gjennomgangen i dialog (Opus, 08.07). Dette dossieret er HELE grunnlaget: dagens dag-for-dag-sannhet, v3-forslagene som ennå ikke er dag-spikret, portene/reglene, innsigelses-skjema og endringsprosedyre — samt målbildet for å samle coach-/plandokumentasjonen på ETT sted.

1. Kildehierarki (hva gjelder når dokumenter spriker)

1. `data/static/training_plan_daily.json` — DAGENE ER SANNHETEN (PLAN_STRUKTUR-regelen). Tabellen i §2 er en ren rendering av denne per 07.07.

2. `Running_Brief_Blokkplan-Amsterdam_v3.md` (FABLE-8, 06.07) — gjeldende ANBEFALING m/ endringslogg E1–E10; forslagene i §3 under er IKKE dag-spikret ennå.

3. `Running_Brief_Blokkplan-Amsterdam_v2.md` — historisk (03.07-spikringen).

4. `Coach/TRAINING_PLAN.md` er STALE (skrevet 12. april — «Fase 0→1», foreldede nedtellinger) og skal IKKE brukes som kilde. Pensjoneres/omskrives i konsolideringen (§7).

5. `Coach/COACH_INSTRUCTIONS.md` — coaching-regler (HRV-gates, G1-søvnregelen). `PLAN_STRUKTUR.md` — mekanikken (kommandoer, validering).

2. Planen SLIK DEN FAKTISK STÅR — dag for dag, u28–42 (rendering av training_plan_daily.json, 07.07)

UkeDatoDagTypeØktkm
282026-07-06maneasyEasy 11 km11
282026-07-07tireasy+styrkeEasy 12 km + Rodal bodyweight (4 øv.)12
282026-07-08onskvalitetMølle/ute-terskel: 5×2000 @ 3:53–3:56 (90s)14
282026-07-09toreasy+styrkeEasy 12 km + Rodal kjerne12
282026-07-10freeasyEasy 11 km11
282026-07-11lørkvalitet-lett45/15 × 22 utendørs tidlig ELLER mølle: 10×1000 @ 3:52 (6012
282026-07-12sønlangturLangtur 28 km rolig (tidlig morgen), fylling 80 g/t28
**28****SUM****100**
292026-07-13maneasyEasy 11 km11
292026-07-14tireasy+styrkeEasy 12 km + Rodal bodyweight (4 øv.)12
292026-07-15onskvalitet45/15 × 22 (kontrollert I3)14
292026-07-16toreasy+styrkeEasy 12 km + Rodal kjerne12
292026-07-17frekvalitet-lettTempo: 3×10 min @ 3:55–4:00 (vei/mølle) — reisevennlig (fr12
292026-07-18lørlangturLangtur 30 km rolig (tidlig morgen)30
292026-07-19søneasyEasy 9 km9
**29****SUM****100**
302026-07-20mankvalitetMandagsTOSK re-intro: 8×1000 @ 3:55 (60s stå), kontrollert13
302026-07-21tireasy+styrkeEasy 11 km + Styrke A re-intro 60 kg (4 øvelser)11
302026-07-22onseasyEasy 16 km16
302026-07-23toreasy+styrkeEasy 10 km + Rodal 2 runder10
302026-07-24freeasyEasy 11 km11
302026-07-25lørlangturLangtur 28 km rolig L2 — fylling 80 g/t28
302026-07-26søneasyEasy 11 km11
**30****SUM****100**
312026-07-27mankvalitetMandagsTOSK: 5×2000 @ 3:52–3:55 (90s stå)14
312026-07-28tireasy+styrkeEasy 12 km + Styrke A 65 kg12
312026-07-29onskvalitetDOBBEL TERSKEL: AM 6 km @ 4:10–4:15 (LT1) · PM OnsdagsTOSK19
312026-07-30toreasy+styrkeEasy 10 km + Rodal 210
312026-07-31freeasyEasy 9 km9
312026-08-01lørlangturLangtur 30 km L3 progressiv: siste 6 km 4:15→4:0030
312026-08-02søneasyEasy 11 km11
**31****SUM****105**
322026-08-03mankvalitetMandagsTOSK 10k-spiss: 6×1000 @ 3:45–3:48 (60s stå)12
322026-08-04tireasy+styrkeEasy 10 km + kjerne lett (ingen tunge løft)10
322026-08-05onskvalitet-lett4×400 @ 3:25 + 4×100 strides (fart uten syre)9
322026-08-06toreasyEasy 8 km8
322026-08-07freeasyEasy 6 km + 4×100 strides6
322026-08-08lørlangturLangtur 18 km rolig18
322026-08-09søneasyEasy 8 km8
**32****SUM****71**
332026-08-10maneasyEasy 7 km + 4×100 strides7
332026-08-11tirkvalitet-lettPrimer: 3×1000 @ 3:50 (full pause) + strides8
332026-08-12onsrace🏁 ENERGIMILA 10 km — mål sub-37:00 (3:42/km). Jevn start (14
332026-08-13toreasyRestitusjon: easy 6 km eller hvile (immunvakt)6
332026-08-14freeasyEasy 8 km (immunvakt)8
332026-08-15lørlangturLangtur 22 km rolig (immunvakt — kun I1)22
332026-08-16søneasyEasy 9 km9
**33****SUM****74**
342026-08-17mankvalitetMandagsTOSK: 4×2000 @ 3:50 (90s stå) — HMP-terskel14
342026-08-18tireasy+styrkeEasy 12 km + Styrke A 70 kg12
342026-08-19onskvalitetDOBBEL: AM 6 km @ 4:10 (LT1) · PM 10×1000 @ 3:50 (60s stå)19
342026-08-20toreasy+styrkeEasy 11 km + Rodal 211
342026-08-21freeasyEasy 8 km8
342026-08-22lørlangtur-kvalitetLangtur 32 km L4: 3×5 km @ MP 4:00–4:05 i km 15–30 — race-32
342026-08-23søneasyEasy 8 km eller hvile8
**34****SUM****104**
352026-08-24mankvalitetMandagsTOSK: 3×3000 @ 3:50–3:52 (2 min stå) — HM-spesifikk15
352026-08-25tireasy+styrkeEasy 12 km + Styrke A 70 kg12
352026-08-26onskvalitetDOBBEL: AM 6 km @ 4:10 · PM 45/15 × 25 (kontrollert I3/I4)19
352026-08-27toreasy+styrkeEasy 12 km + Rodal 112
352026-08-28freeasyEasy 8 km8
352026-08-29lørlangtur-kvalitetLangtur 34 km L4: 12 km sammenhengende @ MP 4:00–4:03 (km34
352026-08-30søneasyEasy 8 km8
**35****SUM****108**
362026-08-31mankvalitetMandagsTOSK: 5×2000 @ 3:48–3:50 (90s stå)14
362026-09-01tireasy+styrkeEasy 10 km + Styrke A lett (2 sett)10
362026-09-02onseasyEasy 16 km16
362026-09-03toreasy+styrkeEasy 8 km + Rodal kjerne8
362026-09-04freeasyEasy 11 km11
362026-09-05lørlangtur-kvalitetLangtur 28 km: siste 6 km @ HMP 3:50 (L3/L4)28
362026-09-06søneasyEasy 13 km13
**36****SUM****100**
372026-09-07mankvalitetMandagsTOSK: 5×1000 @ 3:45 (60s stå) — skarp og kort12
372026-09-08tireasy+styrkeEasy 10 km + kjerne lett10
372026-09-09onseasyEasy 8 km8
372026-09-10toreasy+styrkeEasy 8 km + Rodal lett (siste før HM)8
372026-09-11freeasyEasy 6 km6
372026-09-12lørlangtur-kvalitetLangtur 20 km m/ 5 km @ HMP 3:47–3:50 (generalprøve: races20
372026-09-13søneasyEasy 8 km8
**37****SUM****72**
382026-09-14maneasyEasy 8 km + 4×100 strides8
382026-09-15tirkvalitet-lettPrimer: 4×1000 @ 3:50 (full pause)9
382026-09-16onseasyEasy 7 km7
382026-09-17toreasyEasy 6 km + 4×100 strides6
382026-09-18frehvileHvile (reise Kbh) eller 4 km løsning4
382026-09-19løreasyEasy 4 km + 3×100 strides (dagen før)4
382026-09-20sønrace🏁 KØBENHAVN HALVMARATON — mål sub-1:20:00 (3:47/km), start22
**38****SUM****60**
392026-09-21manhvileHvile0
392026-09-22tireasyEasy 11 km11
392026-09-23onseasyEasy 13 km13
392026-09-24toreasy+styrkeEasy 8 km + Rodal lett kjerne8
392026-09-25freeasyEasy 13 km13
392026-09-26lørlangturLangtur 22 km rolig L1 (kun I1 — restitusjonstur)22
392026-09-27søneasyEasy 8 km8
**39****SUM****75**
402026-09-28maneasyEasy 12 km12
402026-09-29tirkvalitetTOSK (flyttet fra man): 5×2000 @ 3:55–3:58 — MP-terskel14
402026-09-30onseasy+styrkeEasy 10 km + Rodal kjerne10
402026-10-01toreasyEasy 10 km10
402026-10-02freeasyEasy 8 km8
402026-10-03lørlangtur-kvalitetLANGTUR 36 km L4: 3×6 km @ MP 4:00–4:03 (km 14–34) — gener36
402026-10-04søneasyEasy 10 km10
**40****SUM****100**
412026-10-05mankvalitetMandagsTOSK: 4×2000 @ 3:58–4:00 (MP-rytme, 90s stå)13
412026-10-06tireasy+styrkeEasy 10 km + Styrke A lett 55 kg, 2 sett (SISTE)10
412026-10-07onskvalitet-lettOnsdagsTOSK: 6×1000 @ 3:52 (60s stå)11
412026-10-08toreasy+styrkeEasy 10 km + Rodal lett10
412026-10-09freeasyEasy 9 km9
412026-10-10lørlangtur-kvalitetLangtur 26 km m/ 12 km @ MP 4:01 (T-8) — siste MP-generalp26
412026-10-11søneasyEasy 11 km11
**41****SUM****90**
422026-10-12maneasyEasy 6 km6
422026-10-13tirkvalitet-lettMP-primer: 4×1000 @ 4:00 (full pause)9
422026-10-14onseasyEasy 7 km + 4×100 strides7
422026-10-15toreasyEasy 5 km (reise AMS)5
422026-10-16frehvileHvile0
422026-10-17løreasyEasy 4 km + 3×100 strides (dagen før)4
422026-10-18sønrace🏁 AMSTERDAM MARATON — mål sub-2:50:00 (4:01/km). Jevnt: 4:43
**42****SUM****74**

3. v3-forslag som IKKE er dag-spikret ennå (avgjøres i dialogen)

#ForslagUkeDagens jsonv3-anbefalingKilde
D1**Skrot mini-taperen før Energimila**3271 km m/ nedtrapping~95 km normal uke, siste fulle terskel fre 7.8, lett kun dag-førE1 (F5 K3: 10k-PB-ene kom på full uke)
D2MP-km-utvidelse på L4-turene34/353×5 @ MP / 12 km MP3×6 / 14–15 km sammenhengendeE6/§7.3 (P5-mål 120–150, gulv 80)
D3u28-reiseavvik (Italia→Tyskland→Norge)28kvalitet ons + lør-lett + langtur sønFAKTISK kjørt: kvalitet tir (4×2000 ✓); forslag: kvalitet #2 fre (10×1000), langtur lør 26–28 m/ fylling, søn reiseDenne uka — spikres bakover
D4T2.5-utfallet → u30-aggressivitet30TOSK re-intro standardRHR 36–37 vedvarende hjemme → tidlig FULL terskel i utladningsvinduet (17.–27.7)§4.1 / F4a
D5Dragsnitt-progresjon mot K6-porten30–37drag-farter står per økt8-ukers I3-dragsnitt ≤3:47 innen ~1.9; skarpeste økter 3:43–3:45; ≥1 dobbel hver 3.–4. ukeF9 §3

4. Portene og de fredede elementene (kort — full tekst i v3 §3–5)

Fredet: langtur-trappa 30-30-32-34-36 (P3-minimum, 5 stk) · u38 ekte taper (E2) · u39 immunvakt null kvalitet (E3) · P4-porten u40–41 (rød → 2:52-pacing, ALDRI forsert trening). Porter: T2.5 (19.7) · Energimila-streken 36:57/36:4x (12.8) · Kbh go/no-go (u38) · P4 (u40–41) · in-race-gates (km 5/25/35). Wellness-lesning: HRV+BB, aldri RHR alene · kvalitet ~gratis, 30k+ = 2–3 d, race = 4–5 d · post-race-krater er godartet.

5. Carls innsigelser (fylles i dialogen — skjema per punkt)

#Uke/øktInnsigelsenAlternativKonsekvens mot KPI/porter (fylles av Opus)Beslutning
I1
I2
I3

Regel for dialogen: hver endring vurderes mot P1–P10 og de fredede elementene; endringer som bryter en port krever eksplisitt «overstyrt av Carl»-merknad. Volum kan alltid ned — porter og langtur-trapp ofres sist.

6. Endringsprosedyre (obligatorisk rekkefølge etter dialogen)

1. Enighet per punkt → skriv endringen inn i `training_plan_daily.json` (dagene, ikke ukene).

2. `python3 scripts/build_weekly_from_daily.py` → uketall regenereres.

3. `python3 scripts/validate_plan.py` → vern (volumsummer, duplikater, faseregler).

4. CHANGELOG-oppføring m/ beslutningsliste (I-numrene) · v3-briefen får en «Besluttet 08.07»-seksjon, IKKE omskriving bakover.

5. Neste sync bygger hub/blokkplan-fanen fra ny sannhet. (A3-forhandleren automatiserer dette senere — regelverket ligger klart, byggingen er O-kø.)

7. Målbilde: ÉN kanonisk coach-/plan-struktur (utføres av Opus i/etter dialogen)

Dagens fragmentering: plan-innhold bor i daily.json + v2 + v3 + STALE TRAINING_PLAN.md; regler bor i COACH_INSTRUCTIONS + v3 + rapporter. Målbildet (tre filer, null parallelle løp):

  • `Coach/TRAINING_PLAN.md` OMSKRIVES post-dialog til det kanoniske intensjonsdokumentet: sesongmål, fase-logikk, portene, KPI-tavla, race-uke-planene — arver v3-innholdet + dialog-beslutningene. Blokkplan-briefs (v1–v3) arkiveres som historiske innspill m/ peker hit.
  • `training_plan_daily.json` forblir maskin-sannheten (uendret rolle).
  • `Coach/COACH_INSTRUCTIONS.md` forblir beslutningsregler for DIALOG (soner, gates, tolkning) — O9-revisjonen (COACH v2-forslag) folder inn vinduets funn.
  • `PLAN_STRUKTUR.md` består som mekanikk-README. SYSTEM_OVERVIEW §7 oppdateres til å peke på strukturen over. Deretter: ETT sted for intensjon, ETT for dager, ETT for regler.
A3-forhandlerregelverketHva: Komplett regelsett for ukeplan-forhandleren + 10 testscenarier.
Konklusjon: Forhandleren skriver aldri selv; amendments godkjennes av Carl (klar for Opus-bygging).
Fable2026-07-06
#ukeplan#regler#flytting

A3 — Forhandlerregelverket (design; Opus bygger)

Dato: 2026-07-06 · Skrevet av: Claude (Fable, FABLE-10 fra TODO) · Grunnlag: runde 3-rapportens A3-skisse · `PLAN_STRUKTUR.md` + `training_plan_daily.json`-skjemaet (verifisert mot fila) · `Coach/COACH_INSTRUCTIONS.md` (HRV-gates, G1-søvnregelen, belastningsregler) · `Running_Brief_Blokkplan-Amsterdam_v2.md` · `Running_Report_Absorpsjons-Syntese_v1.md` §1–3 (FABLE-7) som harde constraints · eksisterende amendment-maskineri (`data/plan_amendments.json`-skjemaet, `build_week_report.effective_targets`, `daily_plan_overrides.json`).

Hva dette er: Det komplette regelsettet ukeplan-forhandleren (A3) skal validere mot — hva som kan flyttes/byttes og aldri, minimumsavstander, HRV/immunvakt-interaksjon, ukevolum-invarians, amendment-formatet (JSON-patch mot `training_plan_daily.json`), og 10 testscenarier med fasit som Opus-byggingen valideres mot. Designet er plan-agnostisk (regler mot faser/dagstyper, ikke datoer) — det overlever Blokkplan v3 (FABLE-8, kjører parallelt) uendret. Ingen pipeline-filer rørt; kun denne leveransefila (parallellprotokollen).


0. Arkitektur-prinsipp: forhandleren skriver ALDRI selv

Fra A3-skissen, uendret: klikk en planlagt økt → «flytt til …» → klient-side validering mot regelboka → amendment-JSON genereres, skrives ikke. Carl godkjenner i coaching-økt; et apply-script (Opus: `scripts/apply_plan_amendment.py`) utfører patchen. Snapshot-disiplinen (T5/`snapshot_week_plan.py`) er hellig: baseline fryses søn/man, endringer etterpå lever som amendments — det er slik ukesrapport-scoringen skiller begrunnet tilpasning fra avvik.

Forhandleren limer sammen tre eksisterende mekanismer — den erstatter ingen av dem:

MekanismeRolle i A3
`training_plan_daily.json` weeks[].days[]Sannheten. Patch-målet. Eneste sted en økt endres (PLAN_STRUKTUR-regelen).
`data/plan_amendments.json` (per ISO-uke)Score-laget: `justified` + `reason` + `adjusts` re-baseliner ukemålene i `build_week_report`. Hver A3-amendment SPEILES hit (§7).
`data/static/daily_plan_overrides.json`Én-dags-lag for morning brief/coaching_view. A3 skriver hit KUN ved samme-dags-endring (dagens økt), aldri for framtidige dager — framtiden endres i planfila.

Fire utfall per forespørsel: TILLAT (grønn — patch genereres) · TILLAT MED VILKÅR (gul — patch + eksplisitte vilkår som er del av amendmenten) · AVSLÅ (rød — regelbrudd m/ regel-ID + motforslag der det finnes) · ESKALER (grå — utenfor mandat: øktinnhold/format, uke-targets, kryssuke-strukturendringer, alt som krever Carl-dialog per PLAN_STRUKTUR).

Mandatet er smalt med vilje: forhandleren flytter, bytter og dropper HELE dager/økter innen strukturen som finnes. Den endrer aldri øktINNHOLD (format, drag, pace-mål — det er Carl-dialog, jf. «dagene spikres med Carl»-regelen), aldri uke-targets direkte, og aldri noe i race-kalenderen.


1. Vokabular og klassifisering

1.1 Dagstyper (fra planfila, verifisert 06.07 — 161 dager, uke 20–42)

`kvalitet` · `kvalitet-dobbel` · `kvalitet-lett` · `kvalitet-kort` · `langtur` · `langtur-kvalitet` · `race` · `easy` · `easy+styrke` · `hvile` · `hvil-eller-easy`. Dagfelter: `date, day, type, label, distance_km, zone` + valgfrie `target_*`, `_note`, `_chat_notat`, `_locked`, m.fl.

1.2 HARD DAG (styrer nabo-regler)

Hard: `kvalitet`, `kvalitet-dobbel`, `kvalitet-lett` (45/15 progressiv = hard økt, ikke «lett kvalitet» — COACH-regel), `kvalitet-kort`, `langtur-kvalitet` (L2+; = full kvalitetsøkt), `race`.

Rolig: `easy`, `easy+styrke`, `hvile`, `hvil-eller-easy`, `langtur` (L1 rolig).

30k+-ENHETEN er ortogonal til hard/rolig: enhver dag med `distance_km ≥ 30` utløser absorpsjonsreglene (M3/M4/M5) uansett type og intensitet — en rolig 30-km-tur er autonomt en 2–3-dagers enhet (FABLE-7 A2). 25–29 km koster ~1 dag og behandles som vanlig dag pluss én obs (ingen egen avstandsregel utover hard/rolig-logikken).

1.3 Beskyttede vinduer (beregnes fra planen + races.json, aldri hardkodede datoer)

VinduDefinisjonEffekt
**Immunvakt**D+1..D+3 etter hvert race (72 t = GULVET, FABLE-7 A3)Ingen kvalitet kan plasseres her. Rolig løping OK.
**Kvalitet-karantene post-race**Kvalitet tidligst **D+4** etter 10k/HM, **D+5** etter maraton (full autonom klarering 4–5 d — FABLE-7 §3)Flytteforslag inn i vinduet avslås.
**Race-uke-vern**Fra første dag i race-ukas taper-/lett-sekvens SLIK PLANEN DEFINERER DEN (v2: mini-taper 5 d før Energimila; RE3/FABLE-5 skjerper til «hold uka, lett dag-før» — v3 eier fasiten) til race-dagenIngen INNFLYTTING av harde økter utover det planen selv har. Dag-før er alltid lett (U8) uansett taper-modell.
**Down-uke**Uker planen selv merker som down/nedtrapping (hver 4. uke-prinsippet)Ingen innflytting av harde økter eller volum-økning (U6).
**L4-anker**Datoforankrede nøkkelturer i M-spissingen (v2: 36 km m/ MP på T−15, 26 km m/ 12 MP på T−8)Flytt maks ±1 dag, aldri på tvers av uker, kaskade-validering (M-regler + T-avstand til race må holde).

2. Flyttbarhets-matrisen — hva kan flyttes/byttes og ALDRI

DagstypeFlyttbar?Regler
`race`**ALDRI** (U1)Race-datoer eies av virkeligheten/races.json. Enhver op som rører en race-dag avslås.
Dag med `_locked: true`**ALDRI** (U3)Samme kontrakt som quality.json-låsen: låst = urørlig for maskineri. 14 slike finnes i planfila i dag.
`langtur` / `langtur-kvalitet`±1 dag innen samme uke (typisk lør↔søn)Droppes ALDRI av forhandleren (U2 — Frankfurt-lærdommen: det er PM-økta som ryker, aldri langturen). Distanse-reduksjon = ESKALER. L4-anker: se §1.3.
`kvalitet` / `kvalitet-lett` / `kvalitet-kort`Fritt innen ISO-ukaAlle M- og V-regler må holde ETTER flyttet. Kan droppes kun m/ amendment (justified + reason).
`kvalitet-dobbel`Flytt som HEL dag innen uka; PM-økta kan droppes SEPARAT (H2)Dobbel = én hard dag (AM+PM samme dag er det lovlige unntaket fra U5). Splitting av AM/PM på to dager = AVSLÅ (da er det ikke lenger dobbel terskel).
`easy` / `easy+styrke`FrittByttes typisk mot den flyttede økta (swap). Styrke-delen har egne regler (M6/M7) — flytting av easy-dagen drar styrken med seg og må M6-valideres.
`hvile` / `hvil-eller-easy`FrittKan byttes mot easy; kan ikke fjernes fra uka hvis det skaper >6 treningsdager ELLER bryter avstandsregler.
Styrkeøkter (bor i `strength_plan.json`)Fritt m/ M6/M7Amendment må peke på strength_plan-endringen eksplisitt (eget patch-target, §7). Innhold (øvelser, maks 4) = ESKALER.

Bytte (swap) vs flytt (move): swap bytter to dagers innhold 1:1 (volum-nøytralt per konstruksjon); move legger økta på en rolig dag og setter kildedagen til easy/hvile (volum-effekt må V1-valideres). Begge valideres mot HELE regelverket på resultat-tilstanden, ikke på operasjonen — og adjacency sjekkes OVER ukegrenser (søndag→mandag neste uke teller).


3. Minimumsavstander (M-reglene — FABLE-7 §3 som harde constraints)

IDRegelKilde/begrunnelse
**M1**Aldri to harde dager på rad — minst 1 rolig dag mellom harde dager (unntak: dobbel terskel innen SAMME dag). Gjelder over ukegrenser.COACH belastningsregel; «aldri kvalitet→kvalitet dag-til-dag» (O5-skissen).
**M2**Etter en 30k+-dag ELLER L4-nøkkeltur (MP-bærende langtur uansett distanse — u41s 26 km m/ 12 MP teller): ≥2 rolige dager før neste harde stimulus (neste harde tidligst D+3). **NB pre-eksisterende spenning:** v2s HM-bygg har lør-L4 → man-TOSK (D+2, én rolig mellom) i u34→35; M-spissingen er alt kalibrert (u40 har TOSK flyttet til tirsdag). Delta-prinsippet (§7) gjelder: eksisterende brudd flagges som warning, blokkerer ikke; en op som INTRODUSERER ny hard dag på D+1/D+2 etter 30k+/L4 avslås. FABLE-8/v3 eier plan-kalibreringen.FABLE-7 A2/§3: 30k+ er en 2–3-dagers enhet; 61 % trenger ≥2 d full HRV+RHR-retur; «sjekk avstander rundt L4-turene».
**M3**Dagen FØR en 30k+-dag er rolig.Følger av M1 for L3/L4 (som er harde); utvidet til rolige 30k+ for enhets-vern.
**M4**Dobbel terskel og 30k+ aldri på nabo-dager (Δ1 kalenderdag, noen retning). Norm = ons↔lør-strukturen (Δ3, to rolige dager mellom — u31/34/35 følger den). Δ2 (én rolig mellom) = TILLAT MED VILKÅR, ikke AVSLÅ.FABLE-7 §3: «ikke la en 30k+ havne rett foran eller etter en dobbel»; behold ~3-dagers strukturen.
**M5**Etter race: immunvakt D+1..D+3 (rolig OK, null kvalitet); kvalitet tidligst D+4 (10k/HM) / D+5 (maraton).FABLE-7 A3 (race 4–5-dagers enhet; 72 t er gulv, ikke tak) + blokkplan §5.
**M6**Tung underkropp-styrke: aldri <36 t før TOSK eller langtur; aldri dagen etter TOSK+langtur-kombinasjon; kjerne/overkropp er unntatt.A3-skissen + styrkereglene (blokkplan §2).
**M7**Siste tunge styrkeøkt T−13 før HM; siste (lette) T−6 før maraton. Flytteforslag som bryter T-grensene avslås.Blokkplan §2.

Presedens ved konflikt mellom regler: U-regler (§2, absolutte) > M-regler > V-regler (§5) > anbefalinger. En op som må bryte en U- eller M-regel for å redde en V-regel avslås — volum reddes aldri på bekostning av avstand.


4. HRV/immunvakt-interaksjon (H-reglene)

Gaten (COACH-tabellen: Toppdag/Grønt/Modifiser/Gult <55 HRV el. ≥43 RHR/Rødt <45 el. ≥44) styrer DAGENS eksekvering; forhandleren styrer PLASSERING. Koblingen:

IDRegel
**H1**Gult/Rødt på en planlagt hard morgen → forhandleren foreslår FLYTT (ikke bare drop) hvis en lovlig slot finnes senere i uka; ellers drop m/ amendment (`reason: tretthet_hrv, justified: true`). Enhver flytt-til-dag med hard økt betinges av gate-recheck den morgenen (vilkår i amendmenten — gaten kan ikke forhåndsklareres).
**H2****Frankfurt-regelen:** to HRV-svake morgener på rad i dobbel-uke → PM-økta av dobbelen ryker FØRST. Aldri langturen, aldri søvnen. Drop av PM er en egen op (ikke flytt — stabling senere i uka ville bryte V4/M1).
**H3****Post-race-krateret er godartet:** HRV −30..−45 % på D+1..D+4 etter tapret race er FORVENTET (FABLE-7 A5; G5-dempingen i OPUS-IMPL-1 koder det samme). Forhandleren skal IKKE generere amendments på krateret alene — immunvakt-vinduet styrer uansett. Feilmodus å vokte i bygget: gate-misfire som auto-foreslår flytting av neste ukes økter pga. forventet krater.
**H4**Post-30k+ HRV-dip D+1..D+2 er forventet del av enheten — ingen aksjon utover M2. **Unntak:** >3 dagers HRV-retur etter en 30k+ = dårlig absorbert (B1b-flagget, G8 bygges i kveld) → forhandleren foreslår +1 dag ekstra avstand før neste harde stimulus (TILLAT MED VILKÅR-mekanikken).
**H5**Rød/gul morgen ETTER en isolert kvalitetsøkt (ingen race/30k+/sykdom i forkant) → signalet er livsstress/søvngjeld, ikke økta (FABLE-7 A1: kvalitet er autonomt ~gratis, 52 % ingen dip). Ikke auto-flytt; flagg til Carl-dialog («avgjør på følelse»).
**H6**RHR friskmelder ALDRI alene (A4: non-responder, maks-avvik ≤7 slag). Klarering leses på HRV + Body Battery.
**H7****G1-søvnregelen:** søvnscore er bekreftende, ikke selvstendig flyttegrunn. <74 = myk obs (~0,6 tier-poeng); IKKE grunnlag for auto-flytt ved god HRV. Abort-kombinasjonene står: søvn <75 + HRV <60, eller HRV <55 alene, eller stress_avg >28 + HRV <55 → behandles som H1.
**H8**Sykdom/dysregulering (⛔-gate i morning brief): all forhandling suspenderes — ingen flytting INN av noe som helst; drops m/ `reason: sykdom`. Kvalitet-retur etter sykdomsperiode er Carl-dialog (ESKALER), ikke regelverk.

5. Ukevolum-invarians (V-reglene)

Uketallene regnes fra dagene (`build_weekly_from_daily.py`) — enhver dag-patch endrer dem automatisk. Derfor er invariansen definert på DAG-SUMMEN, ikke på target-feltene:

IDRegel
**V1**Flytt/bytt er volum-nøytralt:Σ distance_km etter − før≤ 5 km per uke. Større avvik krever amendment m/ `adjusts` (justified reason) — da re-baseliner `effective_targets` ukemålet, og scoringen forblir ærlig.
**V2**Kvalitets-km konverteres ALDRI til easy-km. En droppet kvalitetsøkt erstattes ikke med rolig volum for å «redde» uketallet — volumet får synke, amendmenten dokumenterer hvorfor. (Skjult konsekvens av V1-toleransen: maks 5 km rolig kompensasjon, aldri mer.)
**V3**Langtur-km er udelelig: aldri splitt en langtur i to økter, aldri flytt km fra langtur til andre dager. Reduksjon av langtur-distanse = ESKALER (U2-slektning).
**V4**Maks 3 kvalitetsøkter/uke (langtur-kvalitet teller; dobbel = én). Flytt som gir en uke nr. 4 avslås — også når kilden er nabo-uka.
**V5**Volum-taket (v2: 108–110 km peak) og down-ukas tak brytes aldri ved flytting. Uke-targets endres kun av Carl i planfila, aldri av forhandleren.
**V6**Forhandlerens virkefelt er ISO-uka. Kryssuke-flytt av harde økter = ESKALER (strukturendring, Carl-dialog) — MED UNNTAK av ±1-dags langtur/L4-justering som tilfeldigvis krysser ukegrense (søn↔man): den valideres som vanlig, men adjacency-sjekken (M1/M2) går alltid over ukegrenser uansett.

6. Ofrings-hierarkiet (når noe MÅ ryke)

Når H-reglene eller virkeligheten krever reduksjon og ingen lovlig flytt finnes, ryker øktene i denne rekkefølgen — aldri omvendt:

1. PM-økta av en dobbel (H2 — Frankfurt-regelen; dobbel degraderer til enkel terskel)

2. Kvalitetsøkt nr. 3 i uka (den lavest prioriterte per fase-fokus; i HM-bygget er det den som IKKE er dobbel eller L4)

3. Kvalitetsøkt nr. 2

4. Rolig volum (easy-km trimmes — men se V2: aldri som kvalitets-erstatning)

5. ALDRI automatisk: langtur, race, søvn. Disse forlater bare planen via Carl-dialog.

Styrke ofres uavhengig av denne lista (den konkurrerer ikke med løpe-km) men følger M6/M7 ved re-plassering. TOSK-øktene (man/ons 20:00 Granåsen) er sosialt ankret — de flyttes til andre DAGER kun med eksplisitt merknad i amendmenten om at fellestreningen ryker (kostnaden er reell selv når regelverket tillater flyttet).

Virkeområde-presisering: hierarkiet gjelder UKES-reduksjon (H2, sykdom, tidsklemme over flere dager). En dags-gate (H1) rammer DAGENS økt — den kan ikke «reddes» ved å ofre en annen dags økt i stedet; dagens økt flyttes hvis lovlig slot finnes, ellers droppes den.


7. Amendment-formatet (JSON-patch mot training_plan_daily)

Én amendment = én fil/blokk, selvdokumenterende, reverserbar, med regel-spor. Forhandleren genererer; Carl godkjenner; `apply_plan_amendment.py` (Opus) utfører.

```json

{

"amendment_id": "2026-W31-01",

"created": "2026-07-28T09:12:00",

"iso_week": "2026-W31",

"status": "proposed",

"reason": "tretthet_hrv",

"justified": true,

"note": "HRV 52 onsdag morgen (gult) — onsdags-TOSK flyttet til torsdag, gate-recheck torsdag",

"rule_trace": {

"checked": ["U1","U3","M1","M2","M3","M4","V1","V4"],

"verdict": "TILLAT MED VILKÅR",

"vilkar": ["HRV-gate ≥ Modifiser torsdag morgen, ellers drop m/ ny amendment"]

},

"tsb_effect": "informativ: Δ TSB søndag ≈ +1,5 (plan_whatif-kanalene; retning, ikke sekunder)",

"patch": [

{

"op": "swap_days",

"a": "2026-07-29",

"b": "2026-07-30",

"fields": ["type","label","distance_km","zone","target_hr_steady","target_hr_max","target_lactate","target_pace","decision_rule"]

}

],

"weekly_adjusts": null,

"apply_steps": [

"backup training_plan_daily.json → .bak_{ts} (eksisterende konvensjon)",

"utfør patch; skriv _chat_notat + _amended: {id} på berørte dager; bevar _original per dag",

"speil til data/plan_amendments.json[iso_week].amendments (reason/justified/note/adjusts)",

"python3 scripts/build_weekly_from_daily.py && python3 scripts/validate_plan.py (obligatorisk, feilkode = rollback)",

"kun hvis dagens dato berøres: oppdater daily_plan_overrides.json (morning brief)"

]

}

```

Op-vokabularet (komplett — Opus implementerer nøyaktig disse fem):

opSemantikkFelter
`swap_days`Bytt økt-innhold mellom to datoer i samme uke (date/day-feltene står)`a`, `b`, `fields`
`move_session`Flytt økt fra dato a til rolig dato b; a blir `easy` (default-km angis) eller `hvile``from`, `to`, `source_becomes`
`drop_session`Økt → easy/hvile. KREVER `justified` + `reason` + `weekly_adjusts` (f.eks. `{"n_quality": -1, "planned_km": -14}` — nøyaktig plan_amendments-skjemaets adjusts-vokabular)`date`, `becomes`, `weekly_adjusts`
`drop_pm`Kun for `kvalitet-dobbel`: fjern PM-delen, dagen degraderer til enkel kvalitet (H2)`date`, `weekly_adjusts`
`annotate`Kun `_note`/`_chat_notat`/`decision_rule` på en dag (f.eks. H4-vilkår) — ingen strukturendring`date`, `felter`

Invarianter i apply-scriptet (ikke bare i forhandleren — forsvar i dybden): rører aldri dager med `_locked` eller type `race` · bevarer alle `_`-prefiksede felter det ikke eksplisitt skriver · validerer HELE regelverket på resultat-tilstanden før skriv (samme validator-modul som UI-et — én kilde, to konsumenter) · `validate_plan.py`-feil = full rollback fra .bak · amendments er append-only med stigende id (aldri rediger en applied amendment; korriger med ny).

Delta-prinsippet (kritisk for at forhandleren skal virke i praksis): valider ENDRINGEN, ikke verden. En op avslås hvis den introduserer et nytt regelbrudd eller forverrer et eksisterende; pre-eksisterende plan-brudd (jf. M2-noten om v2s HM-bygg) rapporteres som warnings uten å blokkere urelaterte ops. Uten dette prinsippet ville én kalibrerings-glipp i planen fryse all forhandling — med det blir forhandleren i tillegg en gratis plan-linter (warnings-lista er i praksis en løpende v3-sjekk).


8. Ti testscenarier med fasit (valideringssuiten for Opus-bygget)

Alle scenarier bruker den spikrede v2-planen (`training_plan_daily.json` uke 28–42, lest 06.07). Hver fasit angir utfall + regel-spor + forventet amendment-op. Bygget er godkjent når alle 10 gir eksakt disse utfallene.

T1 — Gul HRV på TOSK-morgen: ingen lovlig slot → drop, ikke flytt

Situasjon: u35 (SESONGTOPP: man 24.8 TOSK 3×3000 · ons dobbel · lør 34k L4). Mandag morgen: HRV 53 ms (Gult: kun I1), RHR 41, søvn 84.

Forespørsel: flytt mandags-TOSK til senere i uka.

Fasit: AVSLÅ alle slots → tilby `drop_session`. Tir → nabo m/ ons-dobbel (M1). Tor → nabo m/ ons-dobbel (M1). Fre → D−1 før 34k (M3). Søn → D+1 etter L4 (M2) og nabo m/ man u36-TOSK (M1 over ukegrense). Amendment: `drop_session` man 24.8 → easy ~10 km, `reason: tretthet_hrv, justified: true, adjusts: {n_quality: −1, planned_km: −5}`. Uka beholder dobbel + L4 (V4-tak irrelevant). §6-noten gjelder: dagens gate rammer dagens økt — dobbel-PM ofres IKKE i stedet.

T2 — Frankfurt-regelen: to svake morgener i dobbel-uke

Situasjon: u34. HRV 54 tir 18.8 OG 52 ons 19.8 (to på rad). Dobbel planlagt ons (AM 6 km LT1 · PM 10×1000).

Fasit: `drop_pm` ons 19.8 (H2: PM-økta ryker FØRST). AM-økta betinges av gate: Gult = kun I1 → AM degraderes til easy (vilkår i amendmenten). Lørdagens 32k L4 STÅR (U2 — aldri langturen). Ingen re-plassering av PM senere i uka (ville gitt V4/M1-stabling). Amendment: `reason: tretthet_hrv, justified: true, adjusts: {planned_km: −10}` (PM-delen). Rule trace: H2, U2, §6 pkt 1.

T3 — Reise lørdag: 32k-L4 → fredag

Situasjon: u34, Carl reiser lør 22.8. Forespørsel: flytt lør-32k-L4 til fre 21.8 (swap m/ fre easy 8k).

Fasit: TILLAT MED VILKÅR. M3: D−1 = tor (easy + Rodal 2 = kjerne, ikke tung underkropp — M6 ✓). M4: ons-dobbel ↔ fre-32k = Δ2 (én rolig mellom) → under Δ3-normen = vilkårs-sonen. M2: etter fre-32k → lør reise/easy, søn easy, man u35-TOSK = D+3 ✓ (flyttet FJERNER faktisk v2s pre-eksisterende D+2-spenning — noteres som bonus-warning-fix). V1: swap 32↔8, ukesum uendret ✓. Vilkår: lør+søn forblir rolige; tor-styrke må forbli kjerne (M6). Op: `swap_days` 21.8↔22.8.

T4 — Kvalitet inn i immunvakta

Situasjon: u33, Energimila ons 12.8 (10k). Fredag 14.8 føles beina fine; forespørsel: 6×1000 lørdag 15.8.

Fasit: AVSLÅ. Lør 15.8 = D+3 → inne i immunvakta (U4/M5: kvalitet tidligst D+4 for 10k = søn 16.8; FABLE-7: sikt dag 4–5, 72 t er gulv ikke tak). Lørdagens planlagte 22k rolig langtur (kun I1) står — rolig er lov. Motforslag i avslaget: neste kvalitet = man 17.8 (u34-TOSK, D+5, allerede planlagt — ingen amendment trengs). H3-note: fine bein D+2–3 etter 10k er normalt; HRV-krateret kan fortsatt henge.

T5 — Post-race-krater: riktig handling er ingen handling

Situasjon: man 21.9, D+1 etter Kbh HM (søn 20.9). HRV −41 % vs baseline, RHR uendret (40), Body Battery −45.

Forespørsel (implisitt/automatikk): naiv gate-lesning sier «Rødt — avlys/flytt ukas økter».

Fasit: INGEN AMENDMENT. H3: −30..−45 % D+1 etter tapret race er forventet og godartet (A5-krateret) — u39 er alt immunvakt-planlagt (q=0, man = hvile). H6: uendret RHR verken friskmelder eller bekymrer (non-responder). Forhandleren genererer ingenting; G5-dempingen (OPUS-IMPL-1) viser info-linje. Bygget MÅ bestå denne: et system som foreslår endringer her har misforstått regelverket.

T6 — Tung styrke <36 t før L4-langtur

Situasjon: u35, travel tirsdag. Forespørsel: flytt tir-styrken (Styrke A 70 kg — tung underkropp) til fre 28.8. Lør 29.8 = 34k L4 (~08:00-start).

Fasit: AVSLÅ tung variant (M6: fre kveld → lør morgen < 36 t før langtur). Vilkårs-variant: TILLAT hvis degradert til kjerne/overkropp (innholds-endring → formelt ESKALER til Carl-dialog, forhandleren foreslår det som motforslag). Løpe-easy-km tirsdag berøres ikke (styrke og løp forhandles separat; patch-target = strength_plan.json).

T7 — Kvalitet konverteres aldri til easy-km

Situasjon: u31, jobbreise ons–fre (29.–31.7). Ons-DOBBELEN kan ikke kjøres. Forespørsel: dropp dobbelen, legg +6 km på tor og +6 km på fre easy «så uka holder 105 km».

Fasit: flytt umulig, drop OK, kompensasjonen AVSLÅS. Flytte-sjekk: tir → nabo m/ man-TOSK (M1); lør = 30k L3 (U2/M3); søn → D+1 etter 30k+ (M2) OG nabo m/ man u32-TOSK (M1 over ukegrense) → ingen slot. `drop_session` ons m/ `reason: jobb, justified: true, adjusts: {n_quality: −1, planned_km: −11}` (19k-dag → ~8k reise-easy). +12 easy-km-kompensasjon: V2-brudd (kvalitets-km → easy-km) og utenfor V1-toleransen (±5) → avslås; maks +5 km rolig omfordeling tilbys.

T8 — L4-anker ±1 dag med kaskade over ukegrensa

Situasjon: u40, 36k-L4 lør 3.10 (T−15-ankeret). Forespørsel: flytt til søn 4.10 (gruppetur).

Fasit: enkelt-flyttet alene AVSLÅS (introduserer M2-brudd); TILLAT kun som PAKKE m/ ofring. ±1 dag er innenfor anker-regelen (T−15 → T−14 ✓, taper spises ikke). Men: søn-36k → man 5.10 u41-TOSK = D+1 (M2-brudd, NYTT). Kaskade-søk: TOSK → tir 6.10 gir D+2 (fortsatt M2-brudd); → ons 7.10 (D+3 ✓) kolliderer m/ ons-1000m-økta → 1000m → tor/fre gir M1/M3-brudd mot lør-26k-L4 (T−8-ankeret, kan ikke vike). Uka har ikke plass til 3 kvalitet + to L4-enheter m/ søndagsstart. Pakke-tilbudet (§6 pkt 2): 36k→søn + man-TOSK→ons + `drop_session` ons-1000m (`adjusts: {n_quality: −1}`) — Carl velger pakke eller beholder lørdag. Dette scenariet tester kaskade-validering over ukegrense + delta-prinsippet + hierarkiet.

T9 — Down-uke-vernet

Situasjon: u36 (down-uke, q=2: man TOSK + lør 28k L3/L4). Tirsdag 1.9: HRV 78, RHR 37, Carl føler seg rå. Forespørsel: legg inn 45/15-økt onsdag 2.9 (planlagt Easy 16).

Fasit: AVSLÅ (U6). Avstandene ville holdt (man-TOSK → ons = 1 rolig mellom ✓ M1; ons → lør-28k: D−1 = tor rolig... 28k <30 og M3 gjelder ikke, M1 ✓) — men down-uka ER adaptasjonen etter sesongtopp u35 (nedtrapping hver 4. uke; taper-inngang mot Kbh). Toppdag-følelse i down-uke er poenget, ikke et ledig vindu. Ingen amendment; motforslag: strides på onsdags-rolig (innhold → Carl-dialog).

T10 — Race og låste dager er urørlige

Situasjon: u38 (Kbh-uka). Forespørsel A: flytt tirsdags-primeren (4×1000 lett) til onsdag 16.9. Forespørsel B: «kan vi flytte selve løpet/race-dagen i planen» (f.eks. ved startlisteendring). Forespørsel C: en vilkårlig op som rører en dag med `_locked: true`.

Fasit: A: TILLAT (planens egen lette kvalitet flyttes INNEN race-uka: ons→race Δ4, U8 dag-før-lett intakt, M1 ✓ — race-uke-vernet forbyr INNFLYTTING av nye harde økter, ikke intern justering av planens egne). B: AVSLÅ (U1) — race-dager eies av races.json/virkeligheten; endret løpsdato er en PLAN-revisjon (Carl + v3), ikke en amendment. C: AVSLÅ (U3) — U-sjekkene kjøres FØR all annen validering; låst er låst.


9. Avgrensninger + åpne valg for Opus-bygget

Bevisste avgrensninger (ikke glemsel): Forhandleren endrer aldri øktinnhold (format/drag/pace — Carl-dialog, jf. PLAN_STRUKTUR-regelen om at dagene spikres i dialog) · uke-targets og fase-grenser eies av planfila/Carl · sykdoms-retur er alltid dialog (H8) · styrke-innhold (maks 4 øvelser-regelen) håndheves ikke av forhandleren — den flytter bare hele styrkeøkter · TSB-visningen er informativ («retning, ikke sekunder» — plan_whatif-merkelappen), aldri en gate.

Åpne valg Opus kan ta uten ny design-runde: (1) validator som ren JS-modul i hub vs Python-API via `Sessions/api/` — regelverket er identisk; anbefaler delt JSON-regeldefinisjon (`data/static/negotiator_rules.json`) så UI og apply-script leser samme kilde. (2) Om `drop_pm` skal auto-foreslås av morning brief ved H2-tilstand (to svake morgener) eller kun på klikk. (3) Warnings-listas hjem (delta-prinsippets linter-output): eget kort på Plan-fanen vs stille logg. (4) `amendment_id`-sekvensering ved flere ops samme dag.

Avhengigheter: FABLE-8 (Blokkplan v3) kjører parallelt — regelverket er fase/dagstype-basert og overlever v3; T-scenarienes datoer må re-valideres mot v3-planfila FØR de brukes som byggetest hvis v3 endrer ukestrukturene (spesielt T1/T3/T8 hvis lør-L4→man-TOSK-spenningen kalibreres bort). G8s B1b-flagg (bygges i kveld) er H4-inputen. Race-uke-vernets taper-definisjon (mini-taper vs RE3 «hold uka») eies av v3.

Kjente feller-lista (spec-banken) kvittert: ingen HR-/quality.json-berøring i dette designet; TSB-referansen bruker pre-konvensjonen implisitt via plan_whatif; ingen låste filer lest for skriving.


Én-linje for konsoliderings-økta: `Running_Report_A3-Forhandlerregler_v1.md` — komplett forhandlerregelverk klart for Opus (O5): U/M/H/V-regler m/ ID-er (aldri-listen: race/_locked/langtur/immunvakt/down-uke; minimumsavstander fra FABLE-7 §3 inkl. L4-nøkkeltur-utvidelsen; HRV-interaksjon m/ Frankfurt-regelen og krater-vern; volum-invarians ±5 km m/ kvalitet-aldri-til-easy), ofrings-hierarki (dobbel-PM først, langtur/søvn aldri), delta-prinsippet (valider endringen, ikke verden — forhandleren blir gratis plan-linter), amendment-format m/ 5-ops JSON-patch mot training_plan_daily + speiling til plan_amendments + obligatorisk build_weekly_from_daily/validate_plan, og 10 testscenarier (T1–T10) med entydig fasit forankret i v2-planens faktiske uker. Ingen pipeline-filer rørt.

COACH-v2-forslag (D1–D9)Hva: Ni foreslåtte coaching-regelendringer med diff, kilde og konfidens.
Konklusjon: Godkjent og skrevet inn i COACH_INSTRUCTIONS 08.07 (med Carls 48-timers-justering av D4).
Opus2026-07-07
#coaching#regler#D1-D9

COACH_INSTRUCTIONS v2 — forslag (diff mot gjeldende, IKKE anvendt)

Dato: 2026-07-07 · Spor: OPUS-SPOR-B / B1 (O9) · Status: FORSLAG. `Coach/COACH_INSTRUCTIONS.md` er ikke endret av denne økta (unntatt athlete-kontekst-blokka fra B2/O14, som er faktaspeiling, ikke coaching-logikk). Ingenting under skrives til COACH før Carl godkjenner.

Hva dette er: Fable-vinduet (FABLE-4–21) og blokkplan v3 produserte ni coaching-relevante funn som ennå ikke er foldet inn i COACH_INSTRUCTIONS. Dokumentet foreslår hver endring som en diff (dagens ordlyd → foreslått ordlyd) med kilde, slik at Carl kan godkjenne punkt for punkt. Prinsippet er kortere og skarpere: COACH skal si regelen, ikke bevise den — beviset ligger i kilderapporten (hub → Verktøy / ⌘K).

Godkjenningsmodell: kryss av per punkt. Ved «ja» skriver en senere Opus-økt endringen inn i `Coach/COACH_INSTRUCTIONS.md` og logger i CHANGELOG. Der et punkt allerede er delvis inne (G1), er forslaget en presisering, ikke en ny regel.


0. Sammendrag — de ni endringene

#TemaKildeNettoPrioritet
D1Søvnregel (allerede rettet — bekreft ordlyd)G1 / F4bPresiseringLav (står)
D2Taper er distanse-asymmetriskF5 K3 / v3 E1–E2Ny regel**Høy** (race-uker nå)
D3HRV-dagflagg er distanse-avhengigF5 K5Skjerper §go/no-go**Høy**
D4Absorpsjon i tre klasser + RHR-blindsone + post-race-krater godartetF7 §3Erstatter løs belastningsregel**Høy**
D5LT2-dosen tallfestet + K6-portenF9 §3Skjerper intensitetsstyring**Høy** (dose u29–37)
D6Varme som lovlig stimulusF4a §7Ny sesong-regelMiddels (ferie/varme)
D7Race-uke-gates (E-serien)v3 E1/E2/E3/E5Oppdaterer race-planregler**Høy**
D8Anti-regel: subjektiv tyngde ≠ beslutningsgrunnlagF16Ny anti-regelMiddels
D9Aldri intensitet på bekostning av rolig-volumF19Skjerper treningsfilosofi**Høy**

1. Diff per punkt

D1 — Søvnregel (allerede rettet 2026-07-06; bekreft)

Dagens (COACH «Søvnscore», siste kule): G1-revisjonen er allerede inne — søvn er bekreftende markør, ikke selvstendig prediktor; reell infleksjon < 74 (~0,6 tier-poeng, CI [0,14–1,17]) = myk obs; HRV < 55 alene = ekte gate; «under 78 aldri vellykket» fjernet.

Forslag: ingen logikk-endring. Kun rydd bort den siste referansen til «78»-terskelen i eventuelle sitat-vennlige oppsummeringer, så den ikke smitter tilbake. Bekreft at ordlyden står som ønsket.

Kilde: FABLE-4b (n=340). Konfidens A.

D2 — Taper er distanse-asymmetrisk (NY REGEL)

Dagens: COACH har ingen distanse-differensiert taper-regel; «Race-planleggingsregler» (03.07) nevner taper generelt.

Forslag — legg til under «Belastningsregler»/«Race-planleggingsregler»:

> Taper etter distanse: 10k tåler — og foretrekker ofte — full treningsuke på høy plattform. Alle 10k-PB-ene kom UTEN taper (EnergiMila-25: PB på TSB −6,2 og 101,5 km siste 7 døgn; Bane-24 +2,3/89 km; Sommernatt +13/76 km). HM/M vil ha ekte nedtrapping (HM-PB-ene: Berlin +25, Trondheim-25 +17, Trondheim-23 +36). Ikke gi et 10k HM-respekt — det koster bygget uten å gi fart. Terskeldose-straffen på et 10k nulles av 2–3 lette døgn.

Kilde: FABLE-5 K3 / RE3–RE4; blokkplan v3 E1–E2. Konfidens B (n=2–3/celle, entydig retning + mekanisme).

D3 — HRV-dagflagg er distanse-avhengig (SKJERPER GO/NO-GO)

Dagens: COACH «Race-eve-sjekk» (pkt. 3, 03.07): HRV ≤ −10 % vs baseline behandles som flagg for alle løp → sikt nedre CI.

Forslag — gjør flagget distanse-avhengig:

> Dag-før-HRV-flagg: For maraton står rådet: HRV ≤ −10 % → sikt nedre CI. For 10k/HM er dag-før-HRV uten prediksjonsverdi alene — flagget fyrte foran to av tre moderne kort-PB-er (Sommernatt-25 −25,6 % → PB; Berlin HM-26 −17,5 % → PB). På kort distanse: informasjonslinje, ikke måljustering — sjekk heller postM-vindu, vind og åpningsplan. postM- og sykdom-14d-flaggene beholdes uendret for ALLE distanser.

Kilde: FABLE-5 K5 (n=3 flagg — sårbar for neste datapunkt; fysiologisk plausibel: 38–85 min på/over LT2 er mindre autonomt-ferskhets-avhengig enn 3 t på LT1). Konfidens B/C.

D4 — Absorpsjon i tre klasser (ERSTATTER LØS BELASTNINGSREGEL)

Dagens: COACH «Belastningsregler» har «Aldri to harde dager på rad» + «Langtur med kvalitet = full kvalitetsøkt», men ingen tallfestet absorpsjons-kostnad, og ingen RHR-advarsel.

Forslag — legg til «Absorpsjon per økt-klasse»:

> Absorpsjons-kostnaden (dager til HRV+BB tilbake på baseline) styres av økt-klassen, ikke av score eller km:

> - Kvalitet (terskel/VO2): ~0–1 dag (52 % ingen HRV-dip) — autonomt nær gratis.

> - 30k+ langtur: 2–3 dager — grunt dip, lang hale. Er den reelle «blokk»-enheten: hold harde stimuli unna D+1/D+2 etter langtur.

> - Maraton: 4–5 dager (−31 % HRV-krater D+1). 72 t immunvakt er GULVET, ikke taket — sikt kvalitet-retur dag 4–5.

> RHR-blindsone: RHR er non-responder for Carl (beveger seg ~0 selv etter maraton). Les absorpsjon på HRV + Body Battery, aldri RHR. En «fin» RHR dagen etter en 30k+/race betyr ingenting.

> Post-race-krateret er godartet: et −30 til −45 % HRV-fall morgenen etter et godt tapret race er forventet (kroppens kvittering, A5) — dysregulerings-gaten/race-eve-flagget skal IKKE lese det som sykdom.

> Durability-flagg: en 30k+ som koster > 3 HRV-dager = dårlig absorbert (B1b-akse).

Kilde: FABLE-7 A2–A5, §3. Konfidens A (RHR non-responder), B (klasse-kostnadene).

D5 — LT2-dosen tallfestet + K6-porten (SKJERPER INTENSITETSSTYRING)

Dagens: COACH «Intensitetsstyring»: «Lab-LT2 3:49/km HF 169 … Mål: gradvis øke andelen økter som treffer LT2 (HF 165–170, laktat 3,5–4,5).»

Forslag — erstatt «gradvis øke» med tallfestet dose:

> LT2-løftet (9 s/km @ 3,3 mmol) kom FØR Berlin-blokka; 3:49 er nå aerobt billig (< 2,7 mmol) — for lett til å flytte terskelen videre. Hoveddose-draget (I3) skal ligge der laktat = 3–3,5 mmol, dvs. 3:45–3:47; de skarpeste I3/I4-øktene 3:43–3:45 (I4-1000-metere ned mot 3:40–3:42 — kapasiteten finnes, 2025 nådde 3:38). K6-porten (operativ Kbh-prediktor): 8-ukers I3-dragsnitt ≤ 3:47 innen ~1. september — dette er porten som bør vises mot planen. Dosevindu u29–37. Lab-retest aug/sep er eneste harde sjekk på at 4-mmol-farten faktisk er ≤ 3:45.

Kilde: FABLE-9 Funn 3–4, §3. Konfidens B (2 labber + 46 in-session-punkter).

D6 — Varme som lovlig stimulus (NY SESONG-REGEL)

Dagens: COACH har ingen varme-regel.

Forslag — legg til under «Intensitetsstyring» eller egen «Varme»-bolk:

> Varme er et lovlig stimulus — ikke jag pace i den. På varme dager: puls < 138 på alt rolig, kvalitet kun morgen/skygge. Aksepter høyere decoupling i varmen som normalt (temp↔pace ~8 s/km per 5 °C). Én stressor av gangen — ikke legg ny hard stressor (høyde, dobbel-terskel, ny arena) oppå varme samtidig. Temp-juster EF før du dømmer en rolig økt som «dårlig».

Kilde: FABLE-4a §7. Konfidens B− (partiell adaptasjon; fasit T2.5 19.7).

D7 — Race-uke-gates / E-serien (OPPDATERER RACE-PLANREGLER)

Dagens: COACH «Race-planleggingsregler» (03.07) pkt. 1–4 er korrekte, men lineære («sikt nedre CI», «immunvakt 3–5 dager»). Blokkplan v3 har erstattet de lineære pacing-linjene med gates.

Forslag — oppdater pkt. 2 og legg til E-serien som referanse:

> - E1 (Energimila 12.8): INGEN mini-taper. u32 71 → ~95 km normal uke; siste fulle terskel senest fre 7.8 (T−5), langtur lør 8.8 ≤ 28 km rolig (halen skal ikke inn i race-vinduet).

> - E2 (Kbh HM 20.9): EKTE taper — Berlin-malen som fasit: TSB-pre +20…+25, ATL/CTL-fall ~5:1, søvn ≥ 8 t race-eve. (S3: taper-repetisjon = 0,5–1 s/km gratis fart hvis den gjentas.)

> - E3 (u39): immunvakt-planlagt, null kvalitet. HRV −30…−45 % man 21.9 er A5-krateret (godartet), ikke sykdom; full autonom klarering 4–5 d.

> - E5: race-uke-gates erstatter lineære pacing-linjer — maraton: fase-plan med gates km 5/25/35, GI-protokoll, vindsone-regel (all maraton-tid lekker km 35–40, kollapsen er binær og synlig live på steglengde+HR).

Kilde: Blokkplan-Amsterdam v3 E1/E2/E3/E5; FABLE-5 §5/§6, FABLE-6 §3, FABLE-7 A3/A5. Konfidens B.

D8 — Anti-regel: subjektiv tyngde ≠ beslutningsgrunnlag (NY ANTI-REGEL)

Dagens: COACH ber eksplisitt om Carls subjektive («tunge/råtne bein», «ok minus») og vekter RPE i score — riktig for øktvurdering. Men det finnes ingen regel mot å la tyngde-språk styre race-/kvalitets-beslutninger.

Forslag — legg til under «Viktige coaching-prinsipper»:

> Anti-regel (F16): Subjektiv tyngde/uro i tekst siste uke før løp er IKKE beslutningsgrunnlag — historikken viser null prediktiv verdi (Barcelona-22 «dette går dårlig» → PB; Kbh-24), og en språk-gate ville kostet PB-er. Bruk subjektivt til øktforståelse og RPE-score, ikke til å avlyse/nedjustere et løp. Eneste språk-trigger med verdi: eksplisitt sykdomsord (forkjøl\*/tett/hals/hoste/feber/🤧) i ny Strava-desc → én informasjonslinje, aldri en gate alene. (Speiler D3-lærdommen for HRV på kortdistanse.)

Kilde: FABLE-16 (prekommittert + blindkodet, 7 års språk). Konfidens A på null-funnet.

D9 — Aldri intensitet på bekostning av rolig-volum (SKJERPER FILOSOFI)

Dagens: COACH «Treningsfilosofi»: «Polarisert ~75/15/10; kontinuitet > enkeltøkter.» Riktig, men sier ikke hvilken spak som bygger nivå.

Forslag — legg til:

> Volum er makrospaken (F19). Carl er volum-responder på aksen som transfererer til racefart (`aerob@128` sporer akkumulert volum r ≈ −0,87; treg spak ~26 uker). Terskel er en rask, men nær-tak skjerpe-spak (~4–8 u); dobbel-terskel virker KUN på høy base. Regel: aldri intensitet på bekostning av rolig-volum. 2:45-motoren krever terskel-skjerpingen (D5) OPPÅ en vernet volum-base, ikke i stedet for den. 4×4/kort-VO2/bakke er uprøvd for Carl → ren test i vinter-basen, ikke sein-blokk-eksperiment.

Kilde: FABLE-19 (uavhengig kanal, replikert innen-æra + fremtidsrettet). Konfidens B+.


2. «Kortere og skarpere» — hva som kan komprimeres samtidig

Ikke funn, men O9-oppdraget ba om innstramming. Kandidater (Carl avgjør):

  • VO2max-HR-bånd-seksjonen (dagens ~50 linjer, fire tabeller) → de tre tabellene er kanonisk i `session_types.json`; COACH kan beholde anker-regelen (lab-max 181, HR_last_30s ikke drag-snitt) og peke dit for båndene.
  • Sjekkliste coaching-anbefaling (12 punkter) og Kvalitetsøkt-pipeline (steg 1–4 + tabeller) er delvis duplisert mot `PIPELINE_QUALITY_SESSION_ANALYSIS.md` og `analyser_okt.sh` — behold sjekklista, forkort pipeline-delen til én peker.
  • Stress_avg-seksjonen kan trekkes sammen til tre linjer (den er en bekreftende markør, ikke primær).

Netto mål: en frisk sesjon skal kunne lese COACH på < 10 min og ha alle reglene, med dybden ett klikk unna.


3. Åpne kalibreringer og forbehold

  • D5: S1s 2–3 s/km til Kbh er dekket hvis draget faktisk faller til laktat-terskelen (3:45), ikke bare til den nå-lette 3:49. Marker åpen til lab-retesten kvitterer (aug/sep).
  • D3/D8 hviler på liten n (3 flagg / 2 typede infeksjoner) — regler med lav kostnad ved feil, men merk sårbarheten.
  • D6 venter på T2.5-fasiten (19.7) for varme-adaptasjonens karakter.
  • Rekkefølge ved godkjenning: D2/D3/D7 haster (race-ukene starter u32); D5/D9 styrer dosen u29–37; D4 er readiness-vern hele blokka; D1/D6/D8 kan følge.

Én linje til konsolideringen: `Running_Report_COACH-v2-Forslag_v1.md` — ni foldbare COACH-endringer (D1–D9) med diff + kilde + konfidens; COACH_INSTRUCTIONS urørt (coaching-logikk), venter på Carls punkt-for-punkt-godkjenning. Athlete-kontekst-speilingen (B2/O14) er allerede skrevet inn separat.

Langtur-kvalitet mot Amsterdam (v2)Hva: Er kvaliteten på langtur mot Amsterdam nok? Revidert etter Carls innsigelser — v1 leste feil plan.
Konklusjon: Hullet er større enn planen sier (~62 kval-km mot gulvet 80); fartsholder-jobben, 5-4-3-2-1 i u32 og 5×5 @ MP i u40 løfter til ~102.
Opus2026-08-02
#amsterdam#langtur#MP-km#plan

Langtur-kvalitet mot Amsterdam — v2, etter Carls innsigelser

Dato: 2026-08-02 · Skrevet av: claude-opus-5

Erstatter: `Running_Report_Langtur-Kvalitet-Amsterdam_v1.md` (samme dag). v1 hadde to feil som endrer konklusjonen. Denne står, v1 gjør ikke.


0. Hva jeg tok feil i, og hvordan jeg fant det ut

Feil 1 — jeg leste feil plan. v1s tabell over planlagte langturer kom fra oppsummeringstabellen i `Running_Brief_Plan_Kbh-Amsterdam_v4.md` §9. Den er utdatert mot `training_plan_daily.json`, som er kanonisk. Faktisk plan:

Ukev1 påstoFaktisk (dagsplanen)
u3226–28 rolig**30 km HELT rolig** (trapp 6/10)
u3322 rolig**30 km HELT rolig** (D+4 etter Energimila)
u3630 m/ siste 6–8 @ HMP**Fartsholder 24 km** (lør redusert til easy 10)

Feil 2, den alvorlige — jeg antok hva «MP-km» betyr i stedet for å reprodusere tallet. Carl spurte hvorfor onsdagsøktene i u40/u41 skulle telle når de er kortere enn en langtur. Det spørsmålet knakk hele resonnementet mitt.

Jeg testet fire kandidat-definisjoner mot syntesens egne tall:

BlokkSyntesenKun L4-langturL4 + 3/1-økter**Alle langturer m/ kvalitet**
Kbh 241259999**125** ✓
Berlin 24159151151**159** ✓
Frankfurt 25178141162**178** ✓

Tre av tre eksakt. P5 er `quality_km` summert over `long_run`-oppføringer i vinduet. Ikke MP-fart. Ikke midtukeøkter.

(Valencia-24 reproduseres ikke i et 16-ukersvindu — syntesen brukte åpenbart mellom-race-vinduet på 8 uker etter Berlin. Endrer ingenting for konklusjonen.)

Og så det avgjørende: hva består de historiske tallene faktisk av?

ØktDistanseFørt som kvalMedian av de 30 raskeste km
27.09.25 (Frankfurt-blokka)35,4 km**30 km****4:23**
05.10.25 (Frankfurt-blokka)40,7 km28 km4:18

Frankfurt-MP var 4:05. En tur der medianen av kvalitetskilometerne lå på 4:23 — altså MP+18 — ble ført med 30 kvalitets-km og utgjorde det største enkeltbidraget til de 178.

Da faller v1s argument mot fartsholder-jobben helt. 21 km på 4:15 er MP+13 mot Amsterdam-MP 4:01 — raskere relativt til MP enn det som talte for Frankfurt. Carl har rett, jeg hadde feil, og jeg hadde feil fordi jeg resonnerte fra hva P5 burde måle i stedet for å sjekke hva den måler.


1. De korrigerte tallene

Definisjon som brukes heretter (den som reproduserer historikken): `quality_km` på `long_run`-oppføringer i 16-ukersvinduet. Races telles ikke — de har egen `tune-up`-kolonne i modellen.

Slik planen står nå

UkeLangturKval-km
u27–u31levert: 5 × 30k+**8,8**
u3230 km helt rolig0
u3330 km helt rolig (D+4)0
u3434 L4: 3×6 @ MP18
u3534 L4: 14 km samm. @ MP14
u36fartsholder 24 km0
u3720 km m/ 5 @ HMP0
u3922 rolig (immunvakt)0
u4036 L4: 3×7 @ MP21
u4118 km rolig0
**~62**

Mot historikken: Kbh 24 = 125 · Berlin 24 = 159 · Frankfurt 25 = 178.

Amsterdam ligger på 35–50 % av sub-3-blokkene og under P5-gulvet på 80 (konfidens A). Det er verre enn v1 påsto, og det er fordi v1 lot planens eget 94-tall stå — men de 94 inneholder 31 km midtuke-3/1 som historikken aldri talte. Planens regnskap er inflatert mot sin egen målestokk.

Carl hadde altså rett i at noe ikke stemte med onsdagsøktene. Det stemmer bare motsatt vei av det han håpet: de skal ut av regnskapet, ikke inn.

Med Carls foreslåtte endringer

EndringKval-km
u32: 30 km med 5-4-3-2-1 + 1 km flyt (fredag)**+15**
u36: fartsholder utvidet til 31 km (5 km oppv. + 21 km @ 4:15 + 5 km ned)**+21**
u40: 5×5 @ MP i stedet for 3×7**+4**
**102**

102 er et ærlig tall, målt på samme måte som Frankfurts 178. Over P5-gulvet med margin, under Kbh-24s 125, og fem langturer med reell kvalitet mot planens nåværende tre.

Alle tre endringene er berettiget. Fartsholder-jobben er den største enkeltgevinsten, og den er gratis i den forstand at økta uansett skal løpes.


2. De to som fortsatt ikke teller — og nå med etterprøvbar begrunnelse

København HM 20.9: `quality_type` er `race`, ikke `long_run`. Historikken teller kun `long_run`; races ligger i `tune-up`-kolonnen. Carl er selv enig. Regelen er nå verifisert, ikke skjønn.

Generalprøven 12.9 (20 km m/ 5 @ 3:47–3:50): her er jeg mindre bastant enn i v1. Systemet klassifiserer langturer helt ned til 15 km, så «20 km er ikke langtur» holder ikke som argument — det var også galt i v1. Den reelle innvendingen er at 5 km HMP i en 20-kilometer er en generalprøve for København, ikke maratonspesifikt arbeid, og at den ligger midt i Kbh-taperen der hele poenget er å være uthvilt. Ta den gjerne med i regnskapet med 5 km hvis du vil — den flytter 102 til 107 og endrer ingen konklusjon. Jeg ville ikke bygget om økta for å få mer ut av den.


3. Risikoen i u32-forslaget — det jeg mener du bør veie

Forslaget er mandag kontroll 5×2000, onsdag 6×1000 @ 3:42–3:45, fredag 30 km med 15 km kvalitet. Tre kvalitetsøkter på fem dager, med den største til slutt.

Det er den tyngste kvalitetsuka i hele blokka, og den kommer seks dager etter en bekreftet infeksjon (31.07–01.08) og fem dager før Energimila.

Din egen R1 i §7 beskriver nøyaktig dette mønsteret: «Overreach juli–aug (last + intensitetskryp)». Og Lov 7: søvn-7d <80 eller stress-7d >25 → −1 kvalitetsøkt den uka.

Min anbefaling: behold langturen, la én av de to andre vike.

  • Fredagens langtur er den klart mest verdifulle — +15 km mot en KPI som ligger under gulvet, og den eneste av de tre som ikke kan hentes inn senere.
  • Onsdagens 6×1000 @ 3:42–3:45 er merket «SISTE fulle terskel før Energimila». Den er den mest race-spesifikke for et B-mål.
  • Mandagens kontroll #3 er den som lettest kan flyttes eller droppes: den måler terskel, og du har allerede tre kontrollpunkter (20.7, 27.7 og laktat 2,7 @ 3:49 den 29.7). Et fjerde punkt målt seks dager etter en infeksjon er dessuten det svakeste datapunktet av dem alle.

Kjører du alle tre, gjør det med åpne øyne: det er et bevisst valg om å prioritere Amsterdam-plattformen over Energimila-formen, og det er forsvarlig gitt at Energimila er B. Men det er ikke gratis, og bremsene i §7 leses hver morgen.


4. Konklusjon

1. Hullet er større enn både v1 og planen sier. Slik planen står: ~62 kval-km på langtur, mot 125/159/178 i sub-3-blokkene og et P5-gulv på 80.

2. Planens 94-tall er inflatert — det inkluderer 31 km midtuke-3/1 som ingen av de historiske tallene inneholder. Verdt å rette i plandokumentet.

3. Fartsholder-jobben skal telle. Utvid til 31 km. 21 km på MP+13 inne i en lang tur er nøyaktig det Frankfurt-blokken fikk uttelling for.

4. u32-langturen med 5-4-3-2-1 er den beste enkeltendringen. +15 km, og den fyller uka som ellers står på null.

5. u40 5×5 @ MP: ja. +4 km og en økt du har kjørt før.

6. Med alle tre: 102. Over gulvet, under Kbh-24, fem langturer med kvalitet mot tre.

7. Uendret fra v1, og det står seg: P4 er den eneste konfidens-A-diskriminatoren. De to siste 30k+ før taper — nå u36-turen og u40 — avgjør mer enn totalsummen. NY-23 hadde 171 og løp 3:09.

Det ærligste jeg kan si nå: du hadde rett i at kilometere ble oversett, og du hadde rett i at det var inkonsistent. Jeg fant inkonsistensen fordi du insisterte, ikke fordi jeg sjekket godt nok første gang.

Langtur-kvalitet mot Amsterdam (v1)Hva: Første vurdering av MP-dosen på langtur mot Amsterdam, målt mot de tidligere sub-3-blokkene.
Konklusjon: Erstattet av v2 samme dag — v1 hadde to feil som endrer konklusjonen.
Opus2026-08-02
#amsterdam#langtur#MP-km

Langtur-kvalitet mot Amsterdam — er dosen tilstrekkelig?

Dato: 2026-08-02 · Skrevet av: claude-opus-5 på Carls forespørsel

Spørsmål: Er mengden kvalitet på langtur frem mot Amsterdam 18.10 tilstrekkelig? Bør fartsholder-jobben 6.9, generalprøven 12.9 og København HM 20.9 telle med?

Kilder: `quality.json`, `Running_Report_Tverrmaraton-Syntese_v1.md` (P1–P10), `Running_Brief_Plan_Kbh-Amsterdam_v4.md` §9

Instruks fra Carl: ikke pynt på sannhetene.


1. Kortversjonen

Du har rett i at det er et hull. Det er også riktig at planen allerede vet om det — men den er mer optimistisk formulert enn tallene bærer.

Planens eget regnskap: 94 eksplisitte MP-km. Mot dine egne sub-3-blokker:

BlokkMP-kmUtfall
Frankfurt 25**178**2:53:06 — PR
Berlin 241592:59:34
London 251313:19:12 (varme)
Kbh 241252:59:11
NY 231713:09:02 — motbeviset
Valencia 24**80**2:56:36
**Amsterdam 26 (plan)****94**?

Amsterdam ligger over P5-gulvet på 80 (konfidens A) og under målbåndet 120–180 (konfidens B). Det er 31 km under Kbh-24, 65 under Berlin, 84 under Frankfurt.

Men — og dette er det viktigste i hele notatet — bare 53 av de 94 ligger på langtur. Resten er midtuke-3/1-økter i u40–42. Deler man opp, blir bildet strammere enn 94-tallet antyder.

Svaret på om Kbh/Trondheim bør telle: nei, ikke inn i P5. Begrunnelsen i §4. Men den underliggende observasjonen din er riktig, og §5 sier hva som faktisk kan gjøres.


2. Hva som faktisk ligger inne

Levert så langt (fra 28.06, 5 uker):

DatoDistanseKval-kmKlasse
05.0733,50L1 rolig
11.0733,60L1 rolig
18.0734,1**6,0**L3 tempo-finish
25.0732,20L1 rolig
01.0834,2**2,8**L3 progresjon (avbrutt)
**8,8**

Fem 30k+ på fem uker, men 8,8 kvalitets-km totalt. Fire av fem turer var rene L1-turer. Det er en bevisst akkumulasjonsfase — men det betyr at hele MP-dosen ligger foran deg, i en blokk som allerede er trang.

Planlagt resten:

UkeLangturMP-km på langtur
u3226–28 rolig0
u3322 rolig (Energimila-uke)0
u34**34 L4: 3×6 @ MP****18**
u35**34 L4: 14 km samm. @ MP****14**
u3630 m/ siste 6–8 @ HMP 3:500 (HMP)
u3720 m/ 5 @ 3:47–3:500 (ikke langtur, HMP)
u38— Kbh HM0
u3922 rolig L1 (immunvakt)0
u40**36 L4: 3×7 @ MP****21**
u4118 km rolig0
u42— Amsterdam0
**53**

53 planlagte + 8,8 leverte = ~62 MP-km på langtur. De resterende 31 av planens 94 er midtuke-3/1 (u40: 12, u41: 15, u42: 4).

Til sammenligning hadde Frankfurt-blokken ti langturer med kvalitet, snitt 16 km per tur, og Berlin seks med snitt 21.

Amsterdam har tre. u34, u35, u40. Det er tallet som betyr noe.


3. Hvorfor hullet finnes — og at det ikke er en forglemmelse

Planen sier det selv, og den har rett: prisen for to A-mål fire uker fra hverandre er tre uker maratonspesifikk trening.

  • u37–38: Kbh-taper. −60–70 km mot fortsatt bygg.
  • u39: kalenderstyrt immunvakt etter HM. Null kvalitet, «uansett følelse».

Det er tre uker midt i det som i en ren maratonblokk ville vært den mest MP-spesifikke fasen (T−6 til T−4). I Frankfurt-blokken lå det 25 km MP (13.9), 30 km progresjon (27.9) og 28 km (5.10) i nøyaktig det vinduet. I Amsterdam-blokken ligger det en HM-race og en immunvakt.

Det er ikke en planleggingsfeil. Det er kostnaden ved valget du har tatt, og du tok det med åpne øyne.


4. Bør Trondheim, generalprøven og Kbh telle? Ærlig svar: nei

Jeg forstår argumentet — 21 km på 3:47 og 21 km på 4:15 er begge ekte maratonrelevant arbeid. Men P5 måler noe smalere enn «hardt arbeid på lang tur», og det er derfor tallet i det hele tatt korrelerer med utfall.

P5 måler MP-km sent i en lang tur. Adaptasjonen er evnen til å holde maratonfart på trøtte bein etter 25–30 km — substratbruk, løpsøkonomi under glykogenpress, mekanisk holdbarhet. Alle de historiske tallene (125/159/178) er bygget av 5–7 km-blokker på MP inne i 34–40 km-turer.

1. Trondheim 6.9, fartsholder 21,1 km @ 4:15 + forlenget nedjogg til 30+

  • 4:15 er MP+13 (Amsterdam-MP 4:01). Det er ikke MP-arbeid, det er øvre L2/nedre L3.
  • Den ligger i starten av turen, ikke sent. Adaptasjonen P5 måler krever MP etter akkumulert tretthet.
  • Den gir deg en 30k+ til. Men P3 er allerede grønn: 9 planlagt mot krav ≥5 og mål 8–13.
  • Den ligger T−14 før Kbh HM. Planen har allerede byttet u41-langturen til 18 km nettopp av taper-hensyn. Å bulke opp 6.9 går mot samme logikk.

Verdi som MP-km: null. Verdi som durability og hyggelig dag: reell. Gjør det hvis du vil ha turen — ikke fordi det flytter en KPI.

2. Generalprøven 12.9, 20 km m/ 5 @ 3:47–3:50

  • 20 km er ikke en langtur. Ingen av dine historiske P5-bidrag kom fra turer under 25 km.
  • 3:47–3:50 er HMP, 11–14 s/km raskere enn MP. Det er terskelarbeid.
  • Planen teller den allerede — separat, som «~13 HMP-km u36–37». Å flytte den inn i P5 er å telle den to ganger under et annet navn.

3. København HM 20.9

  • Det er et race. Syntesemodellen har en egen `tune-up`-kolonne, og Kbh er ført der.
  • Kbh 24 og Frankfurt 25 hadde begge 2 tune-ups. Å i tillegg telle racet som langtur-kvalitet gjør Amsterdam-blokken kunstig sammenlignbar med blokker som ikke gjorde det.

Fellesnevneren: å telle disse tar 94 → ~149 og får Amsterdam til å se ut som Berlin. Det ville vært den ene måten å gjøre KPI-en verdiløs på. Sammenligningsgrunnlaget ditt er bygget av seks maratonblokker med én definisjon; endrer du definisjonen for den syvende, mister du hele serien.


5. Det som faktisk kan gjøres

Realistiske steder å hente ekte MP-km, med kostnad:

GrepMP-kmKostnad
**u32 langtur 26–28: legg inn 2×4 km @ MP**+8Ligger uken før Energimila. Planen sier «INGEN mini-taper», så en moderat MP-blokk er forsvarlig — men det er én stressor til i en uke som allerede har kontroll #3 fredag.
**u36 30 km: bytt siste 6–8 fra HMP til MP**+6–8Mister 6–8 HMP-km rett før Kbh. Dårlig bytte to uker før et HM-A-mål. **Frarådes.**
**u34/u35: øk fra 18/14 til 20/18**+6Billigst av alle. u34 og u35 er allerede L4-turer med full fylling; å legge til én blokk hver er marginal ekstra kostnad.
**u40 36 km: 3×7 → 4×7**+7u40 er storuka og allerede den tyngste. Grenser mot forsering.

Tar du u32 (+8) og u34/u35 (+6), lander du på ~108 MP-km. Det er fortsatt under 120, men det er over Valencia-24 (80) og nærmer seg Kbh-24 (125).

Mer enn det får du ikke uten å kutte i Kbh. Og det er ikke et bytte jeg vil anbefale på tallgrunnlag alene.


6. Det som betyr mer enn tallet

Syntesen din er eksplisitt på dette, og det er verdt å lese en gang til:

> P5: A for ≥80, B for «mer er bedre». Kravet er MP-km × P4, aldri MP-km alene.

NY 23: 171 MP-km. Decoupling 3,6. Øktscore 7,0. Resultat 3:09 — 3,2 % under prognosen.

Valencia 24: 80 MP-km. Decoupling −2,3. Resultat 2:56:36 — den gang PR.

Det er den samme lærdommen sett fra begge sider. Volumet av MP-km er en plattform, ikke en prediktor. P4 er den eneste KPI-en som skiller NY-23 fra alle sub-3-blokkene — de to siste 30k+ før taper, minst én med decoupling ≤1 % og score ≥8.

For Amsterdam betyr det at u36 (30 km, 5.9) og u40 (36 km, 3.10) er de to turene som avgjør P4. Ikke hvor mange MP-km som står i regnskapet, men om de to turene utføres kontrollert.

Én ærlig innvending mot min egen konklusjon: Valencia-24 arvet en fullført Berlin-blokk åtte uker tidligere. De 80 MP-km sto på et fundament av 159. Amsterdam arver en HM-blokk, ikke en maratonblokk. Det svekker «80 holder»-argumentet, og det er grunnen til at jeg ikke sier at 94 er nok — bare at det er over gulvet.


7. Konklusjon

1. Hullet er reelt og større enn 94-tallet antyder. Bare 53 planlagte MP-km ligger på langtur; resten er midtuke. Tre langturer med kvalitet mot Frankfurts ti og Berlins seks.

2. Det er en strukturell kostnad, ikke en forglemmelse. To A-mål fire uker fra hverandre koster u37–39.

3. Ikke reklassifiser Trondheim, generalprøven eller Kbh inn i P5. Det løser tallet og ødelegger målestokken.

4. Realistisk oppside er u32 + u34/u35 ≈ +14 km → ~108. Alt utover det går på bekostning av København.

5. Bruk energien på P4 i stedet. 5.9 og 3.10 er turene som avgjør. Ett av dine egne funn sier at 171 MP-km utført dårlig ga 3:09.

6. Forlenget nedjogg 6.9: gjør det hvis du vil ha en 30k+ og en fin dag på hytta-nivå. Ikke for KPI-ens skyld, og vær klar over at det er T−14 før et A-mål.

Det ærligste jeg kan si: Amsterdam-blokken er en god HM-blokk med en maraton bakpå. Sub-2:50 er fortsatt innenfor — Valencia-24 viser at det går på lav MP-dose når fundamentet er der og utførelsen er ren — men marginen er tynnere enn i Frankfurt, og den ligger i utførelsen av to langturer, ikke i regnearket.

📋 Syntese, status & system (16)

Syvårs-syntesen 2019→2026Hva: Era-fortellingen om hvordan nivået flyttet seg, og hva 2027 bør bygge.
Konklusjon: Fire mekanismer avløste hverandre (volum→TOSK→LT2→realisering); hvert platå brutt av NESTE spak.
Fable2026-07-07
#era#3:30→2:53#langsikt

Syvårs-syntesen 2019→2026 — era-fortellingen (v2)

FABLE-17 · skrevet 2026-07-07 · v2 erstatter v1 samme dag: F15 (Infeksjonsvinduene) og F16 (Subjektiv-signal) er nå kjørt, og v1s to største åpne avhengigheter er foldet inn (immun-aksen i §2/§3/§5/§6, språk-nullet i §3/§6, oppdatert ærlighetsnotat §7). v1 beholdt for sporbarhet. Kilder: `training_blocks.json` (LÅST) · `races.json` · `activities.json`/`quality.json` (665 økter) · `training_load.json` · `zones.json` · ankere: Tverrmaraton-Syntesen (nivåbanen + oppskriften) og LT2-Motoren (F9); nå også Infeksjonsvinduene (F15) og Subjektiv-Signal (F16), med støtte i F5/F6/F7 og Sammendrag v2. Alt read-only; kun denne fila er skrevet.

Ramme (uendret): era-konfundering dominerer — 2024–26 er bedre på nesten alt samtidig, n per era-overgang er 1. Dette er konsolidering og langsiktslærdom, ikke høst-operativt. Alt operativt for Energimila/Kbh/Amsterdam bor i Blokkplan v3 og røres ikke her. F15s immunvakt-regler og F16s brief-forslag er også operative og bor i sine egne rapporter — her tas de bare inn som era-lærdom.


0. Kortversjon

Reisen 3:30→2:53 er ikke én historie, men fire mekanismer som avløste hverandre da den forrige var uttømt: (1) volumtrappa 14→50→61→80–84 km/u bygde plattformen — intet sub-3 under 85 km/u i blokk / CTL 106; (2) TOSK-effekten (fra nov 2022) leverte terskelkvalitet og pacing-tog på race-dagen — fade-serien går fra +5,1 % til ≤±0,7 % i tog; (3) dobbel-terskel/LT2-motoren flyttet terskelfarten ~3:55→3:44 og gjorde 3:49 aerobt billig; (4) realiserings-disiplinen (2025–26) — det som gjenstod da dose sluttet å diskriminere. Hvert platå ble brutt av neste mekanisme, aldri av mer av den forrige.

v2 legger til den femte tråden som løper under hele fortellingen: infeksjonskosten. Den er systemets dyreste tapskilde, den vokser i synlighet med dokumentasjonen (Paris-23 11 sykedager → Frankfurt-25 7 → Berlin HM-26 to post-race-infeksjoner), og F15 viser at den er wellness-stille — flu-B PCR+ var nær usynlig for detektoren, begge Berlin-infeksjonene kom uten prodrom. Immunvakt kan derfor ikke være HRV-utløst; den må være profylaktisk og kalenderstyrt. Og F16 lukker en hel klasse spekulasjon: over sju år og en beskrivelsesrate som gikk 0→97 %, leder Carls egne ord ingenting — ikke sykdom, ikke sprekk, ikke PB. Systemets verdi lå aldri i å fange atletens intuisjon. For 2027 sier banen: volum som spak er brukt opp, motoren og realiseringen (nå inkludert immun-vernet) er spakene som gjenstår, og 2:45-motoren (~1:19:08 HM / 35:52 10k — sistnevnte er dagens Energimila-prediksjon) er under bygging nå.


1. Nivåbanen — sju år på én side

PB-status ved årsslutt (offisielle tider; Nidaros-22 (9,6 km målt) utelatt som kort-målt):

År10kHMMaratonkm/årkm/uPeak CTLLT2-anker (æra)Definerende
20191:44:427581569— (pre-soner)Første HM (sep). Grunnmuren.
202042:071:35:362 13641774:25Covid-solo-løp; −9 min på HM på ett år.
202142:071:33:453:30:072 52949924:15Maraton-debut, alt brukt (HR 188/190).
202242:071:29:163:14:232 61650964:05Tre maraton på ett år; første TOSK-økt (nov).
202339:261:27:493:09:023 17861104≈4:00 (proxy-brudd fra 4:20)Volumtrapp; NY −3,2 % — dose uten utførelse; Paris 11 sykedager.
202438:38(ikke løpt)**2:56:37**4 17080**115**3:57 @4 mmol lab (mars)Plattform-året: 85 TOSK, første sub-3, tre M.
2025**37:24**1:24:24**2:53:06**4 357841063:44 in-session (feb)London-kollaps + Frankfurt-PB (negativ split) + 7 sykedager.
2026 (per 7.7)**1:21:19**2 095~77953:49 @3,3 mmol lab (feb)Mølle-vinteren → HM −3:05; VO2maks 61,7; to post-race-infeksjoner.

Tre avlesninger: (1) maraton-stegene følger volum-stegene med ~ett års lag (61→80 km/u ga 3:09→2:56); (2) HM-hoppene kommer i terskel-fasene (−4:29 med TOSK-inngangen; −3:25 + −3:05 med dobbel-terskel/mølle 2025–26); (3) 10k-en er den jevneste banen — motoren, ikke arrangementet. En fjerde, ny i v2: hver moden æra bærer en infeksjonsregning (siste kolonne fra 2023) — den er ikke støy, den er en systematisk kostnad F15 nå har karakterisert.

2. Eraene — seks kapitler

E1 · 2019–2020: Grunnmuren. 758 km blir 2 136; første HM 1:44:42 → 1:35:36 på 14 måneder. Covid-året er solo-løp med egen tidtaking, pre-sone-æra (LT ukjent). Lærdommen som overlever: nybegynner-responsen på rent volum var enorm og billig.

E2 · 2021–2022: Maraton-læretiden på volumplatå. km/u står nesten stille (49→50), men maratontiden faller 3:30→3:14 gjennom fire løp på 15 måneder — racecraft-læring, ikke kapasitet. Feilene er lærebok: Oslo «knakk i siste bakken» (fade +5,1 %), Valencia «for hardt ut» (−1,9 %). Val-22-blokka var cappet til 11 uker av Oslo — PB likevel, første hint om at året er enheten, ikke blokka. 5.11.2022: første TOSK-økt (HM 1:29:16) — materialets viktigste enkelt-dato utenom race-dagene.

E3 · 2023: Volumtrappa — dose uten utførelse, og infeksjonskostens første regning. 2 616→3 178 km (+21 %), CTL 96→104, TOSK 1→19 økter, LT2-proxyens første brudd (4:20→4:00). Men era-ens to maraton viser gapet: Paris ødelagt av 11 sykedager (systemets dyreste tapskilde demonstrert første gang — F15 gjenkjenner den milde post-Paris-perioden 10.4.23 som sannsynlig «open window»-infeksjon), og NY −3,2 % med materialets dårligste langtur-utførelse høyeste dose til da. 2023 fødte P4-regelen (plattform uten utførelse realiseres ikke) — den ble bare ikke formulert før 2026.

E4 · 2024: Plattform-året. Spranget: 61→80 km/u, peak CTL 115 (all-time), 85 TOSK-økter, første dobbel-terskel-fase (12 dobbel-dager; første 17.12.2023), tre maraton — Kbh 2:59:11 (første sub-3, i TOSK-tog på 4:15), Berlin 2:59:34 (mageknip km 27–30 — realiserings-risikoen viser seg), Valencia 2:56:37 (PB på 8,9-ukers cappet blokk). Lab-LT2 mars: 3:57 @ 4 mmol. Og — synlig først i ettertid via in-session-laktaten (F9 Funn 1) — det store LT2-løftet (~3:55→3:44) skjedde her og inn i tidlig 2025, drevet av volum + dobbel-terskel, ikke av noen enkelt magisk blokk.

E5 · 2025: Realiserings-året — begge retninger. Volumet flater (84 km/u), og året viser at over plattform-terskelen avgjør dagen: London 3:19:12 (+18,4 % fade, dagsform-kollaps ingen KPI varslet — fortsatt ulukket) mot Frankfurt 2:53:06 (negativ split, siste km raskest, 7 sykedager i blokka). EnergiMila 37:24 og Trondheim HM 1:24:24 kvitterer motoren. Infeksjonsregningen er også her, og F15 gir den navn: den severe perioden 27.10.25 (+1 d etter Frankfurt, 10 dagers hale) er nå foreslått re-typet fra «uavklart» til infection (konfidens B) — «Frankfurt kostet 7 sykedager» får et ærlig navn, og bekreftet-infeksjon-tellingen løftes fra 2 til 3. Frankfurt-blokka er samtidig volum-takets empiriske funn: >90–95 km/u kjøpte sykdom, ikke målbar fart.

E6 · 2025/26: Mølle-vinteren — konsoliderings-æraen. Bakken-basen nov–des 2025 (10 dobbel-dager på 8,7 uker) rett inn i Berlin-HM-bygget jan–mar (89,6 km/u, 124 I3-drag @ 3:52), med 19 mølle-kvalitetsøkter nov–mar, det høyeste i materialet (de fire foregående vintrene: 7–14). Resultat: 1:21:19 (−3:05 på seks måneder), løpt lab-LT2 i 80 minutter; lab-kvitteringen 24.02: LT2 3:49 @ 3,3 mmol, VO2maks 61,7, 3:49 nå <2,7 mmol. Prisen, nå karakterisert av F15: den kliniske episoden rett etter Berlin HM (detektert som to perioder, 30.3–2.4 og 6.4–20.4) var systemets tydeligste infeksjonssignatur — og likevel wellness-stille før den slo til (HRV normal/høy dagen før løpet, 0/2 prodrom). F16 bekrefter fra språksiden: PB-teksten «Melder sub 1:20 til Køben 💪» sto dagen før — kroppen gikk til sengs på under 48 timer uten språklig eller autonomt forvarsel. 2026 er også året systemet selv ble treneren (pipeline, modell-LOO 1,27 % T-14, gates) — og med F15/F16 fikk analyselaget kartlagt sine to siste blinde flekker: immun-aksen og den subjektive kanalen.

3. Hva flyttet nivået — mekanismene rangert

M1 — Volumplattformen (2023–24) er største enkeltforklaring på maraton-banen. Skarpt brudd, aldri krysset: intet sub-3 under 85 km/u / CTL 106 (Tverrmaraton F1, r=+0,92). Men mekanismen er terskel-formet: over plattformen slutter dose å forklare utfall (Kbh hadde 3× Frankfurts drag og løp 6 min saktere).

M2 — TOSK-effekten er dobbel, og halvparten undervurdert. Treningssiden (1→19→85 økter/år) er synlig i kval-km-trappa. Race-siden er målbar alene: alle fire tog-disponerte løp har fade ≤+1,7 %; alt før første tog spenner +2,0…+5,1 %. Pacing-disiplin ble outsourcet til en mekanisme, ikke modnet fram. Første TOSK-økt (nov 2022) deler materialet.

M3 — LT2-motoren er broen fra sub-3 til 2:53 — bygd før den ble brukt. Løftet ~3:55→3:44 (matchet laktat: 9 s/km @3,3 mmol) daterer seg til 2024→tidlig 2025; Berlin-HM-blokka konsoliderte (senket laktat-ved-fart) mer enn den flyttet (F9 Funn 1). Aerob effektivitet er samme historie på race-flaten: Kbh 2:59 på HR 172,8 (over LT2) mot Frankfurt 2:53 på HR 161,9 (I3) — hele 2:59→2:53-steget er effektivitet, ikke tak.

M4 — Realiserings-disiplinen er det som gjenstod, og den er yngst (2025–26) — nå med immun-aksen kartlagt. Fylling øvd → Frankfurt rent der Berlin nesten røk (F6); taper-asymmetrien funnet (F5); race-eve-flaggene validert (F7/Tverrmaraton R5); absorpsjonsklassene kvantifisert (F7). v2s tilføyelse: F15 gir realiseringen en fjerde søyle — immun-vernet — og den snur en intuisjon på hodet. Fordi infeksjonene er wellness-stille (flu-B PCR+ nær usynlig, 0/2 prodrom, RHR non-responder, CRP), kan immunvakta ikke vente på et signal: den må være profylaktisk og kalenderstyrt (søvn, fylling, eksponeringsvern race-eve→D+10), og «frisk» kan aldri krysses av på RHR eller CRP — kun på symptomer + varighet. F16 lukker den siste kandidat-kanalen: språket leder ingenting, så det finnes ingen subjektiv tidlig-varsling å bygge på heller. Realiseringen flytter ikke nivået — den beskytter det, og v2 gjør beskyttelseslaget komplett: tall + kalender + symptomer, aldri atletens ord eller RHR. London-dagsformen er restrisikoen som fortsatt gjenstår ulukket.

Det som IKKE flyttet nivået (validert negativt, viktig for 2027): kvalitets-km over ~25/u (London hadde materialets høyeste — dårligst utfall) · dype tapere (+49/+54 kostet 15 CTL uten gevinst) · MP-km uten utførelse (NY: 171 MP-km, −3,2 %) · volum over ~95 km/u (Frankfurt: 7 sykedager) · vekt/HRV/søvn som prediksjons-features · og nå: subjektivt tekstsignal som ledende indikator (F16 — robust null; en språk-gate ville kostet PB-er, jf. Barcelona-22 «dette kommer til å gå dårlig» → PB, og Kbh-24s hele spekter uka før sub-3).

4. Hva platået når — og hva som brøt hvert platå

PlatåPeriodeNivå som stodDet som brøt det
Volum #12021–22 (49–50 km/u)M ~3:14–3:20, høy variansVolumtrappa 2023 (+21 %)
Utførelse2023 (CTL 104, dose OK)NY −3,2 % tross doseTOSK-integrasjon + langtur-disiplin 2024
HMsep 2023 → sep 2025 (1:27:49)(delvis kunstig — HM ikke løpt i 2024)Terskel-fasene: −3:25 (2025), −3:05 (mølle-vinteren)
Maraton-steg2024→25: −2:34, −3:31 (mot −9:51 i 2024)Stegene krymper mot Riegel-modenhetEffektivitet (M3) — ikke mer dose
Volum #2 (taket)2025 (98 km/u forsøkt)Sykdom, ikke fartIkke brutt — **akseptert** som tak (85–95)
LT2-proxy 2026Q1–Q2 (3:52→3:55)Base-artefakt, ikke regresjon (F9 §4)Sein-blokk-dosen u29–37 (3:49→3:45-drag) — pågår

Mønsteret: hvert platå ble brutt av en ny mekanisme, aldri av mer av den forrige. Det er syntesens viktigste enkelt-lærdom, og den peker direkte på 2027-spørsmålet: hvilken mekanisme er den neste? F15/F16 skjerper svaret negativt — det er ikke en subjektiv-signal-gate (null) og ikke mer volum (taket); det ligger i motor (3:45-terskel), durability × utførelse, og friske uker vernet av et kalenderstyrt immun-lag.

5. Riegel-modenheten, alderslinjen og immun-aksen

Riegel-krysningen (Tverrmaraton §4) skjedde mellom NY-23 og Kbh-24: siden da er maratontiden ≈ 10k-Riegel-1,06 — et modenhets-sertifikat betinget på langtur-plattformen. Kortdistanse-nivået i dag setter maraton-taket: Berlin HM 1:21:19 → Riegel-1,06 ≈ 2:49:30; modellens Amsterdam 2:47:56 priser i tillegg inn LT2-banen. Motsatt vei: 2:45:00 krever ~1:19:08 HM / 35:52 10k — det siste er på sekundet dagens Energimila-prediksjon. Banen sier ikke at 2:45 er neste steg; den sier at motoren for 2:45 er under bygging nå, og at Energimila/Kbh er sertifikat-testene.

Alderslinjen (42 om ti dager): HRmax-konvensjonen faller ~1 slag/år, VO2maks 61,7 ved 41,6 er en betydelig reserve (maraton-nivået bruker den ikke opp — gapet er durability/effektivitet, ikke tak). Ingenting i materialet viser aldersbrems i farten ennå. Men v2 kan nå peke presist på hvor aldringen faktisk vil bite først: restitusjon og immunforsvar, ikke VO2. F15 gjør dette konkret — race er en 4–5-dagers absorpsjonsenhet (F7), infeksjons-susceptibiliteten løper ~7–10 d post-race. Restitusjon og immunforsvar (ikke fart) blir trolig den bindende beskrankningen med alderen. Praktisk arkitektur-konsekvens: planlegg 2027 for at restitusjons- og immun-kapasitet, ikke fart, blir den bindende beskrankningen — og at immun-vernet må være bygget inn i race-ukene fra kalenderen, ikke improvisert på signal.

6. 2027-arkitekturen — hva banen sier (etter Amsterdam)

Ikke en plan (den lages etter Amsterdam, med fasiten i hånda) — men era-lærdommene, nå komplette etter F15/F16, gir arkitektur-prinsipper og tre kandidat-former.

Prinsipper banen har betalt for:

1. Vinteren er motor-fabrikken — men den er også virussesong. Begge store terskel-løft kom i vinter-konsolidering (2024-vintrene, mølle-vinteren 2025/26). En Bakken-base (dobbel-terskel hver 3.–4. uke, mølla som verktøy, ingen vår-maraton å taper mot) bør være fast inventar. F15-forbeholdet: mølle-vinterens motor-gevinst kom sammen med post-Berlin-infeksjonen — vinter-motoren og eksponeringsvernet må planlegges i samme åndedrag.

2. Volumet er en plattform som vedlikeholdes (85–95 km/u i bygg), ikke en spak som økes. Neste nivå kjøpes i terskelfart (3:45-drag), MP-durability × P4-utførelse, og friske uker — nå med et konkret immun-lag (F15) som en del av «friske uker».

3. Året er enheten. Begge cappede blokker (Val-22, Val-24) ga PB på høy base — rekkefølgen base→bygg betyr mer enn blokklengden. A-målet kan legges der logistikk/vær er best (alle maraton-PB-ene ligger på 7–12 °C racesnitt — velg kaldt, uavhengig av kalendermåned).

4. Vår-slottet er testbane, ikke A-mål. Vår-HM/10k som motor-sertifikat (Berlin HM-modellen) ga mer per risiko-krone enn vår-maraton. Svak n, era-konfundert — men det er mønsteret.

Tre kandidat-former (avgjøres av Amsterdam-fasiten):

  • A · Gjenta 2026-malen (vinter-motor → vår-HM-sertifikat → høst-A-maraton): kontinuitets-valget; riktig hvis Amsterdam lander 2:48–2:52 og lab-retesten kvitterer 3:45-terskelen. Mål-sone 2:45–2:48 høsten 2027.
  • B · 2024-malen på dagens base (2–3 maraton, cappede blokker på høy base): maksimerer racecraft-reps og utnytter året-er-enheten. v1 satte som forbehold at «FABLE-15-vernene må finnes først» — de finnes nå (F15 §4, IV1–IV5), så denne formen er mer tilgjengelig enn i v1; men F15 skjerper også prisen (hver A-race er en 7–10-dagers infeksjons-eksponering, forsterket ved 42–43), så flere maraton = flere eksponeringsvinduer å vokte.
  • C · Motor-året (10k/HM-fokus, maraton hviler): riktig hvis Amsterdam avslører at kortdistanse-nivået er beskrankningen, eller hvis høsten koster en ny infeksjonsrunde. Bygger 1:19/35:5x-motoren 2:45 uansett krever — og minimerer infeksjons-eksponeringen (færre A-maraton).

Felles for alle tre: vinter-basen 2026/27 er ikke-forhandlbar, og immun-vernet (F15) bygges inn i hver race-uke fra kalenderen — begge er de best dokumenterte investeringene i materialet.

7. Ærlighetsnotat

Era-konfunderingen er total og kan ikke regnes bort: 2024–26 er bedre på volum, kvalitet, gruppe, disiplin, utstyr, kunnskap og verktøy samtidig; mekanisme-attribusjonen i §3 er informert fortelling med skarpe brudd som støtte, ikke kausal identifikasjon. Sone-æraene er inkonsistente før 2023; alle pre-2023-intensitetstall er retningsindikatorer. Laktat finnes ikke før feb 2024 — LT2-banen 2019–23 er proxy-only. PB-tabellen (§1) blander løpsår og formår (HM ikke løpt i 2024); Val-24 føres 2:56:37 per Tverrmaraton-fasiten. Riegel-regnestykkene bruker eksakt 1,06-formel.

Uendret fra v1: §6 ekstrapolerer forbi materialet — ingen løp er løpt på 4:01/km, aldersbrems er antatt-kommende men uobservert, vår/høst-asymmetrien hviler på n=4 vår-maraton hvorav to hadde uavhengige forklaringer. Den viktigste avhengigheten i v1 (F15/F16 ukjørt) er nå lukket, og dette er den reviderte lesningen — men den arver kilderapportenes n-svakhet, ikke omgår den. Konsolidering (hub-kort, CHANGELOG, TODO-kryss) gjøres i egen økt per parallellprotokollen — ikke her.

Fable-vinduet — samlet sammendragHva: Kartet over alle 19 hovedfunn fra Fable-vinduet med kilde per funn.
Konklusjon: Motoren er der, realiseringen gjenstår; les kilderapportene for dybden.
Opus2026-07-07
#sammendrag#19 funn#oversikt

Fable-vinduet 05.–07.07 — samlet sammendrag v3 (komplett: alle 18 leveranser)

Dato: 2026-07-07 (oppdatert etter Runde A) · Erstatter v1/v2 (arkivert). Dekker HELE vinduet: økt 1–3, FABLE-4–11, 15/16/17, Runde A (18–21) + fiksene 07.07 og plandossieret. Kartet — terrenget bor i kilderapportene (hub → Verktøy, ⌘K).

1. De nitten hovedfunnene

1. Sub-2:50-plattformen er bygd, reglene kjent — ≥85 km/u + CTL 106+; P4-porten (utførelse, ikke dose) skiller NY-23 fra sub-3-laget. (økt 2)

2. All maraton-tid lekker i km 35–40; kollaps er binær (hendelse vs brudd — skillbare live på steglengde+HR). London var synlig fra km 2 → km 5-gate. (F6)

3. Åpningskilometeren er kortdistansens sterkeste diskriminator; Nidaros-25 = postM × vind × åpning, ikke dagsform. (F5)

4. Taper er distanse-asymmetrisk: 10k-PB uten taper, HM-PB med → E1: Energimila-taperen skrotet. (F5→F8)

5. Absorpsjon i tre klasser: kvalitet ~0–1 d (autonomt gratis), 30k+ 2–3 d, maraton 4–5 d; RHR er non-responder; post-race-krateret er godartet. (F7)

6. Søvnregelen «<78 aldri vellykket» var feil og er FJERNET (G1 utført); søvn = HRV-proxy, <74 = myk obs, HRV<55 = ekte gate. (F4b)

7. Italia ga partiell varme-adaptasjon (B−), fasit ved T2.5 19.7; mulig gratis form-vindu u30. (F4a)

8. LT2-løftet (9 s/km @3,3 mmol) kom FØR Berlin-blokka; 3:49 er nå aerobt billig → terskel flyttes på 3:45–3:47-drag; K6-port: I3-dragsnitt ≤3:47 innen ~1.9. (F9)

9. HRV-dagflagget gjelder maraton, ikke kort distanse (2/3 flagg foran PB-er) → G2. (F5)

10. Blokkplan v3 + A3-regelverk + plandossier: hele planapparatet er samlet og forhandlingsklart (dialog 08.07). (F8/F10/dossier)

11. Infeksjonene er WELLNESS-STILLE (flu-B PCR+ nær usynlig; 0/2 prodrom) → immunvakt må være profylaktisk/kalenderstyrt, aldri HRV-utløst; vernet varer til D+10, ikke D+3. (F15, konfidens A)

12. Hjemme-30k+ åpner infeksjonsdøra i 15 % — uten reise (universell open-window, ikke medisin); A-race dobler frekvens og varighet. (F15, revidert)

13. Ordene dine leder INGENTING — robust, prekommittert null (sykdom, sprekk, PB: alle testene negative; Barcelona-«dette går dårlig»→PB er kronvitnet). Eneste språk-verdi: eksplisitt sykdomsord fanger milde infeksjoner detektoren ikke ser (11/14 utenfor periodene). (F16)

14. Sju år = fire mekanismer som avløste hverandre (volum → TOSK → LT2-motor → realisering) + en femte tråd: infeksjonskosten. Hvert platå ble brutt av NESTE mekanisme, aldri mer av forrige. Volum-taket (~95) er akseptert, ikke brutt. (F17)

15. 2:45-motoren er under bygging nå (krever ~1:19:08 HM / 35:52 10k = dagens Energimila-prediksjon); alderen vil bite restitusjon/immun først, ikke VO2. 2027-arkitektur: tre kandidat-former (A gjenta / B fler-maraton / C motor-år), avgjøres av Amsterdam-fasiten; vinter-basen + kalenderstyrt immun-vern er ikke-forhandlbare. (F17)

16. AG%-banen stiger fortsatt på alle distanser (10k 75,1 · HM 75,9 · M 74,7, steg +2–3,7 poeng/PB) — ingen avmatning; motoren ligger foran maratonen (HM → Riegel 2:49:32: sub-2:50 ligger alt i beina); 2:45 ≈ 2028–29 (44–45 år) ved dagens stigning; maraton-PB-vinduet topper SIST (durability bygges ennå). Lab-retesten aug/sep er viktigste enkeltdatapunkt. (F18)

17. Du er volum-responder på aksen som betyr mest (aerob@128 sporer volum; treg spak ~26 u) — terskel/dobbel er raske høybase-skjerpere (~4–8 u), dobbel-terskel virker KUN på høy base; 4×4/kort-VO2 er uprøvd → ren test i vinter-basen. Regel: aldri intensitet på bekostning av rolig-volum. (F19)

18. Kontinuiteten din brytes av kalender og virus, nesten aldri av kropp (ETT skade-avbrudd på 7,5 år); kostnad = timing × varighet (4 infeksjonsdager i byggefase rev to måneder; 21 spredte dager i 2025 var ≈ gratis); friskeste år = beste år; peak-CTL er disponibel. Invester i fravær av dyre avbrudd, ikke i en ratio. (F20)

19. Søvnarkitekturen er en HRV-proxy — NULL selvstendig signal (lukker spekulasjonen, ingen ny regel); race-eve-frykten avkreftet: natten før løp ligger på baseline — det er T−2-reisenatten som er kort, og Frankfurt-PB kom likevel. Arkitekturens rolle er sykdomsdeteksjon (brukes alt). (F21)

2. Venter på Carl

#BeslutningKilde
C1**Re-typing-køen:** 2025-10-27 → infection (B) + 6 øvrige forslag (C) — bekreft, så oppdateres illness_classificationF15 §3
C3**Plan-dialogen 08.07** (Opus) — dossieret er grunnlaget; race-uke-hygiene (søvn/fylling) tas inn i race-ukeneDossier
C4**Race-portefølje (F22):** Praha HM 3.4.27 = 2027-sertifikatet (strek 1:19:08); Genève M 9.5.27 = realiserings-løp T−5u etter Praha (sikt 2:48–2:52, aldri 2:45 der) — bekreft rollefordelingenF22
C5**Biomarkører (F23 v2):** retest 21.07 = respons-sjekk på jern/D3/omega-3 (startet 28.04); måler mot carl.json-mål (ferritin 100/150, D 75, Hb 14,5)F23 v2

3. Kø-status

⏳ OPUS-IMPL-1 — FORTSATT IKKE KJØRT (G2–G5, G8, OPPSKRIFT-2, O2 + SNAP-1b pkt. 8) — perfekt jobb for token-ventetiden (Opus-kvote er separat). · Opus-køen ellers: O7 mappe-reorg · O8 kortdistanse-telemetri · O9 COACH-v2 (+ F16-antiregel + F19-volumvern-regelen) · O10 sko · O13 illness_language_log + A4-brief-linje. · O1 varme del 2 etter 17.7. · ✓ Runde A FERDIG (funn 16–19 over). · Runde B klar (~90 min, tokens): FABLE-22 Race-portefølje 2027–30 (fastpunkter: Praha HM 3.4.27 · Genève M 9.5.27; leser F18) · 23 Biomarkør · 24 Miljø-atlas · 25 Biomekanikk. · Plan-dialogen (Opus, 08.07): dossieret klart; IV1–IV5 + F19-regelen tas inn der.

4. Tallene etter hele vinduet

HvaFør vinduet
Modell-LOO (alle/T-14)1,97 / 1,59 %**1,53 / 1,27 %**
Race-dashboards29/33**33/33**
Immunvakt-doktrineHRV-reaktiv, 72 t**kalenderstyrt, D+10, IV1–IV5**
Subjektiv kanaluutforsket spekulasjon**lukket som null** (+ A4-typing-verdi)
LT2-forståelse«Berlin-blokka flyttet den»**løftet kom 2024→tidlig-25; 3:49 er billig; dose-mål u29–37 definert**
Coaching-reglersøvn<78-regel (feil)**G1 rettet; O9-revisjon spec-et**
Planapparatetfragmentert (4+ kilder)**v3 + dossier + målbilde: ett sted per rolle**
Pipeline-feil funnet i vinduet**git-lås (fikset) · score-orden (fikset) · snapshot-kontaminering (fikset)**
Langsiktshorisontudefinert**2:45-motor målsatt · 2027-former A/B/C · Praha/Genève fastpunkter**
Systemtilstand (helhetlig)Hva: Tre lag: maskineri, innsikter og kø — hele uka på to sider.
Konklusjon: De to stille morgentall-feilene er lukket; sub-2:50 ligger i beina.
Opus2026-07-07
#status#pipeline#innsikt

Systemtilstand 2026-07-07 — hele Fable-vinduet 05.–07.07 på to sider

Hva dette er: ett dokument som samler seks dager med endringer — maskineri, innsikter og det som gjenstår — for deg som var ute av detaljene mens det skjedde. Bredere enn Sammendrag v3 (som kun dekker analysene). Kilderapportene ligger på hub → Verktøy (⌘K); dette er kartet, ikke terrenget.


Lag 1 — Modell & pipeline: maskineriet

> Leser du bare én linje: de to stille feilene som ga deg gale tall om morgenen — feilskåret ny økt og kontaminert beredskap på reisedager — er begge lukket. Morgenbriefen kan nå leses rett på første sync.

EndringHva ble gjortHva det betyr for deg
**Score-orden (steg 7a)**Ny økt ble skåret på `hr_avg`-fallback før streamen var inne (6,7), og re-skåret til 8,0 ved neste sync. Repstats re-synkes nå etter stream-fetch.Øktskåren i brief/status er riktig på **første** sync — ikke feil i 12 timer og selvhelet i det stille.
**SNAP-1/1b**Post-økt-snapshot (ferie/reise: TR 55 var målt etter økta) flagges nå `post_activity`. Beredskap bruker gårsdagens TR ved kontaminert snapshot.Beredskaps-skåren lyver ikke på reisedager der du løper før døgnets første sync. HRV/RHR/søvn er nattverdier, uendret.
**Git-lås rotfiks**En forlatt `HEAD.lock` fra en sandbox-økt blokkerte sync i to døgn. `backup.py` rydder nå stale HEAD/refs-locks (60 s-vern); ny regel: Claude-økter kjører aldri git.Sync stopper ikke lenger på låsefiler den ikke selv laget.
**RACE-1 lukket**De fire gamle løpene (THM-19, solo-HM-20, skogsmaraton-21, Nidaros-25) fikk dashboards → **33/33** (var 29/33). Streamene lå i rådumpene hele tiden.Alle løp søkbare på Racer-fanen/⌘K. Datalaget ble komplett — det er dette som muliggjorde tverr-analysene (F5/F6).
**B2 vind**Presis tidsvektet race-vind kvantifisert (β +0,0220, ~0,12 pp LOO). Kvadratisk form testet, forkastet — hele gevinsten bodde i de 2 løpene >6 m/s.Prognosen priser vind riktigere. Ingen atferdsendring; re-testes når neste vindløp lander.
**B6 residual-logging**Ekskluderte løp (parkrun/testløp, effort_b) predikeres med full modell og logges som `excluded_residuals`.Framtidige testløp blir automatiske overvåkningspunkter for modelldrift — uten å koste et A-løp.
**KLASS-2 språk**Gaten heter nå «dysregulering (stress/sykdom)», ikke «sykdom». Race-eve-flagget skiller infeksjon/uavklart (hardt) fra ren stress (mild linje).Prediksjon/brief roper ikke lenger «6 sykdomsdager (Paris/Frankfurt)» på seks stressdager.
**G1 søvnregel fjernet**«Søvnscore <78 = aldri vellykket kvalitet» motbevist (n=340) og strøket fra COACH_INSTRUCTIONS. Erstattet: HRV-basert gate (<74 = myk obs; abort HRV<55 alene).Du frarådes ikke lenger kvalitet på en natt med søvn 76 og god HRV. Første empirisk motbeviste coaching-regel som er ryddet.

Netto på modellen: LOO 1,97 → 1,53 % (T-14 1,59 → 1,27 %).


Lag 2 — Innsiktene: hva som faktisk endrer hvordan du trener

> Leser du bare én linje: sub-2:50 ligger alt i beina (Berlin HM 1:21:19 → Riegel 2:49:32). Gapet er realisering — pacing, immunvern, fueling — ikke motor. 2:45 er en 2028–29-sak (alder 44–45), ikke nå.

Motoren er der, realiseringen gjenstår. Sju år (3:30→2:53) var fire mekanismer som avløste hverandre: volumtrapp → TOSK → LT2-motor → realisering. Hvert platå ble brutt av den neste mekanismen, aldri mer av den forrige. Volum-taket (~95 km/u) er akseptert, ikke brutt. AG% stiger fortsatt på alle distanser (10k 75,1 · HM 75,9 · M 74,7) — ingen avmatning. Energimila 12.8 er go/no-go-sjekkpunktet: 36:57-streken = sub-2:50-Riegel. (F17/F18)

Terskel flyttes videre på 3:45–3:47-drag, ikke 3:49. LT2-løftet (9 s/km @ 3,3 mmol) kom før Berlin-blokka; 3:49 er nå aerobt billig (<2,7 mmol). K6-porten: 8-ukers I3-dragsnitt ≤3:47 innen ~1.9 = direkte Kbh-prediktor. (F9)

Rolig-volum er hellig. Du er volum-responder på aksen som betyr mest (aerob@128, treg spak ~26 u). Terskel/dobbel er raske skjerpere (~4–8 u) men virker kun på høy base. Regelen: aldri intensitet på bekostning av rolig-volum. 4×4/kort-VO2 er uprøvd → ren test i vinter-basen 26/27. (F19)

Immunvernet må være kalenderstyrt, ikke HRV-utløst. Infeksjonene er wellness-stille — flu-B PCR+ var nær usynlig for detektoren, ingen prodrom. u39-immunvakta planlegges uansett HRV; vernet varer til D+10, ikke D+3. IV1–IV4 er billig race-hygiene (søvn/fylling/folkemengde) rundt alle tre løp. Den gamle immunsuppresjon-rammen er revidert (se errata). (F15 + errata)

Taper er distanse-asymmetrisk. 10k-PB-ene kom uten taper (Energimila på TSB −6 / 101 km-uke); HM-PB-ene med. Derfor: ingen mini-taper før Energimila (u32 holder ~95 km), ekte taper før Kbh. (F5→F8, E1)

Absorpsjon i tre klasser: kvalitet ~0–1 d (autonomt gratis), 30k+ 2–3 d, maraton 4–5 d. RHR er non-responder for deg — les HRV+BB, ikke RHR. Post-race-krateret etter et velkjørt løp er godartet, ikke et faresignal. (F7)

Maraton lekker i km 35–40; kollaps er binær. Hendelse vs brudd er skillbart live på steglengde + HR (steg-kollaps −5…−19 % = brudd; intakt steg = hendelse, ikke jag). London var synlig fra km 2 → km 5-gate (HR ≥170 på planfart = bytt til nedre CI). Reserven finnes nesten alltid (9/11 spurter). (F6)

To kanaler er lukket som null — slutt å lete der. Ordene dine leder ingenting (Barcelona-«dette går dårlig» → PB er kronvitnet). Søvnarkitekturen bærer null signal utover HRV, og race-eve-frykten er avkreftet (natten før løp ligger på baseline; det er T−2-reisenatten som er kort, og Frankfurt-PB kom likevel). (F16/F21/F4b)

Kontinuitet er betingelsen, ikke spaken. Ett ufrivillig skade-avbrudd på 7,5 år — ellers bryter kalender og virus, nesten aldri kropp. Kostnad = timing × varighet: 4 infeksjonsdager i byggefase rev to måneder; 21 spredte dager i 2025 var ≈ gratis. Invester i fravær av dyre avbrudd. (F20)

Langsiktig: 2027 har tre kandidat-former (A gjenta / B fler-maraton / C motor-år), avgjøres av Amsterdam-fasiten. Fastpunkter: Praha HM 3.4.27 = 2027-sertifikatet (strek 1:19:08); Genève M 9.5.27 = realiserings-løp T−5u etter Praha (sikt 2:48–2:52, aldri 2:45 der). (F22)


Lag 3 — Hva venter

> Leser du bare én linje: ingen av de 19 funnene er kodet inn ennå. OPUS-IMPL-1 er neste steg, og det er en Opus-jobb — Fable-tiden går til analyse.

OPUS-IMPL-1 — fortsatt ikke kjørt. Åtte punkter ligger klare: G2 (hrv-flagg distanse-avhengig), G3 (fase-formet pacing-plan + km 5/25/35-gates), G4 (decoupling-metrikk), G5 (post-race-krater-demping), G8 (B1b-absorpsjonsflagg), OPPSKRIFT-2 (taper-port + MP-mål 120–150 + Energimila-strek på Mål-fanen), O2 (Frankfurt-siderettelser), SNAP-1b pkt. 8 (konsument-vern i brief/status/readiness). Alle spec-er er komplette i kilderapportene. Perfekt jobb for token-ventetiden (Opus-kvote er separat).

Din beslutningskø (C1–C6):

#BeslutningNår
C1Re-typing: 2025-10-27 → infection (+ 6 forslag)Når du får bekreftet
C3Plan-dialogen 08.07 (Opus) — dossieret er grunnlaget; race-uke-hygiene inn i race-ukeneI morgen
C4Race-portefølje: bekreft Praha/Genève-rollene
C5Biomarkør-retest **21.07** = respons-sjekk jern/D3/omega-3 (fra 28.04) mot carl.json-målOm to uker

Plan-dialogen 08.07 (Opus): `training_plan_daily.json` spikres der — ingen økt er dag-festet ennå. `TRAINING_PLAN.md` er STALE (april-tilstand); dossieret (`Running_Brief_Plandossier-Amsterdam_v1.md`) er forhandlingsgrunnlaget.

To ulike lab-retester, ikke bland dem: 21.07 = biomarkør (jern/D3/omega-3, respons på tilskudd fra 28.04). Aug/sep = VO2/LT2 — F18 kaller den viktigste enkeltdatapunktet for hele langtidshorisonten (VO2 61,7 ble målt forkjølet → reelt trolig 63–65).

FABLE-24 (Miljø-atlas) + FABLE-25 (Biomekanikk): spec'et og kjørbart, men venter. Du er snart tom for Fable-tokens → begge tas på Opus 4.8.


Konsolideringsnotat (for Opus/hub): 2026-07-07 — Systemtilstand v1. Helhetsbilde av vinduet 05.–07.07 i tre lag (pipeline: score-orden/SNAP/git-lås/RACE-1/B2/B6/KLASS-2/G1, LOO 1,97→1,53 %; 19 innsikter destillert til beslutninger; hva venter: OPUS-IMPL-1, C1–C6, plan-dialog 08.07, retest 21.07 + VO2 aug/sep, FABLE-24/25). Erstatter ikke Sammendrag v3 — bredere (dekker maskineri + kø), ikke dypere.

Analyseforslag Runde CHva: Ni nye analyseforslag med Fable/Opus-tiering + «allerede dekket»-liste.
Konklusjon: Fable-verdig: fueling→km 35–40, taper-anatomi, realiserings-gap; resten Opus-able.
Opus2026-07-07
#forslag#framtid#tiering

Analyseforslag Runde C — hva som IKKE er analysert ennå

Dato: 2026-07-07 · Formål: meta-review med friske øyne etter 19 funn + F22/F23. Hva gjenstår, og hva er verdt Fable-tid vs Opus-tid? Datalaget er sjekket (ikke bare foreslått blindt) — der en kilde er tynn, står det.


Allerede dekket (foreslå ikke duplikater)

Maraton-syntese (F17/tverrmaraton) · kortdistanse-syntese (F5) · pacing-DNA maraton (F6) · absorpsjon (F7) · varme/Italia (F4a) · søvn: score (F4b) + arkitektur (F21) · LT2-motor (F9) · responder-profil volum/intensitet (F19) · kontinuitet (F20) · livstids-PR/AG%/2:45-bane (F18) · infeksjon revidert (F15 + errata) · subjektiv-signal (F16) · biomarkører (F23) · race-portefølje Praha/Genève (F22) · era-syntese (F17). Spec'et men ikke kjørt (ikke foreslå på nytt): FABLE-24 Miljø-atlas (kulde/mørke/mølle/årshjul) · FABLE-25 Biomekanikk (kadens/steglengde/GCT/stride-kollaps). Begge venter på Opus 4.8.


Ni nye forslag

Tier-definisjon: Fable-verdig = krever metodedesign fra bunnen, kryss-korpus-syntese eller dømmekraft (multiple-testing, konfundering, medisinsk-nær varsomhet) Opus ikke matcher. Opus-able = mekanisk anvendelse av en kjent metode med ferdig spec.

1. Fueling → km 35–40-lekkasjen *(Fable-verdig)*

  • Spørsmål: samvarierer karbo-inntak (g/t) med den nøyaktige fade-sonen F6 fant — lekker de underfylte løpene mer i km 35–40 enn de velfylte, kontrollert for pace og varme?
  • Kilder: `fueling_log.json` (g/t per langtur, tynn — parset fra desc) + de 11 maraton-sidenes ernæring-seksjoner (den rikeste fueling-kilden) · F6 (fade-profil per km) · F7 (absorpsjon) · race_weather.
  • Hvorfor: F6 lokaliserte hvor tid lekker, men ikke hvorfor. Fueling er den siste uanalyserte input-spaken på den eneste failure-sonen som betyr noe for sub-2:50. Direkte operativt for Amsterdam.
  • Tier: Fable — n=11, tynn fueling-logg og km 35–40-konfundering (tretthet vs glykogen vs varme) krever dømmekraft for å ikke overtolke. Ærlig konfidens er hele jobben.

2. Taper-anatomien — lengde × dybde × load-fall *(Fable-verdig)*

  • Spørsmål: F5 svarte om du skal tapre (distanse-asymmetrisk); dette svarer hvordan — hvilken taper-lengde, volumfall og TSB-inngang ga best race-residual på tvers av 11 maraton + kortløp?
  • Kilder: `training_load.json` (CTL/TSB-baner inn i hvert løp) · `races.json` + LOO-residualer · training_blocks (LÅST) · maraton-sidenes taper-seksjoner.
  • Hvorfor: taper er der realiseringen bor (Lag 2-tesen). Du har 11 maraton å lære taper-kurven av, og den er aldri lest på tvers som én variabel. Mater OPPSKRIFT-2s taper-port direkte.
  • Tier: Fable — kryss-race-syntese + konfundering (god blokk vs god taper) + n=11.

3. Realiserings-gapet dekomponert *(Fable-verdig)*

  • Spørsmål: av LOO-residualvariansen — hvor mye er styrbart (pacing-disiplin, fueling, taper, søvn) vs ustyrbart (vær, felt, dagsform)? M.a.o.: hvor mange sekunder av sub-2:50/2:45 er faktisk dine å ta?
  • Kilder: `race_predict_model.json` (residualer per løp) · F5/F6/F7/F15-funnene som styrbare akser · race_weather (ustyrbar).
  • Hvorfor: hele korpuset gjentar «gapet er realisering, ikke tak» — men ingen har tallfestet hvor stor den styrbare andelen er. Det er meta-spørsmålet bak hele sesongen.
  • Tier: Fable — syntese av synteser, krever dømmekraft på hva som teller som styrbart. Merk: vinner på å vente til Amsterdam legger til ett datapunkt (T−0 okt).

4. Trening → langtids-helse (VO2/kardiovaskulær bane) *(Fable-verdig)*

  • Spørsmål: hva sier treningsdataene om langsiktig helsegevinst? VO2-banen, RHR, HRV og blodtrykk som langtids-markører, ærlig rammet (assosiasjon, ikke løfte).
  • Kilder: `oxygen_capacity.json` (VO2-karriereprojeksjon finnes alt) · wellness (HRV/RHR-baner) · `blood_pressure_log.json` (tynn, 6 punkter).
  • Hvorfor: performance-korpuset er mettet (19 funn); dette åpner et nytt domene distinkt fra F23. Høy leverage per token.
  • Tier: Fable — kryss-domene, medisinsk-nær varsomhet (aldri løfte om utfall), og dømmekraft på evidenskvalitet. Du er lege/PhD — rammen må tåle din egen fasit.

5. Kanari-økta — hvilken økt varsler race-form *(Fable-grense / Opus-able med streng forhåndsregistrering)*

  • Spørsmål: hvilken enkelt økt-signatur i de siste 8 ukene korrelerer tettest med race-residual per distanse (generaliserer K6-porten fra F9 til alle tre distansene)?
  • Kilder: `quality.json` (økt-KPI-er) · `fitness_filter.json` (q155/EF/aerob) · races + LOO · training_blocks.
  • Hvorfor: gir deg én «kanari-økt» per distanse — en tidlig, konkret go/no-go langt før race-uka.
  • Tier: grense. Med n=33 løp og mange kandidat-prediktorer er multiple-testing en reell felle → forhåndsregistrering av kandidater er nødvendig. Kjør Opus hvis markørene prekommitteres stramt; ellers Fable.

6. Detrenings-/reversibilitetskurven *(Opus-able)*

  • Spørsmål: hvor fort faller formen (CTL-halveringstid, EF-retur) under de dokumenterte avbruddene — og hva koster sommerens Europa-bilferie konkret?
  • Kilder: `training_load.json` (CTL rundt hull) · activities (hull-deteksjon, arvet fra F20) · wellness · F20 (avbrudds-katalogen — bygg på, ikke dupliser).
  • Hvorfor: F20 katalogiserte avbruddene og kostnaden; dette tallfester decay-raten så du kan planlegge rundt kjente framtidige hull. Tidsaktuelt (Italia-turen pågår nå).
  • Tier: Opus — eksponentiell decay-fit på CTL/EF er en kjent metode; F20 ga rammen.

7. Intensitetsfordeling / polariseringsindeks *(Opus-able)*

  • Spørsmål: er treningen faktisk polarisert (80/20 lav/høy), eller ligger for mye i grå sone — og hvordan rimer den reelle fordelingen med at du er volum-responder (F19)?
  • Kilder: activities/quality (tid-i-sone) · zones.json · F19 (tolknings-anker).
  • Hvorfor: en TID/TIZ-fordeling er aldri regnet ut på tvers; kan avdekke om adaptasjon ligger igjen i grå-sone-drift.
  • Tier: Opus — TID/TIZ er standard-metode; tolkningen mot F19 er lett Fable-krydder, men bulk er mekanisk.

8. Mikrosyklus-arkitekturen *(Opus-able)*

  • Spørsmål: hvor mange dager mellom kvalitetsøkter (og hard-lett-mønsteret) gir best øktscore og adaptasjon — validerer A3-forhandlerens spacing-constraints empirisk?
  • Kilder: `quality.json` (dato-avstand mellom kvalitet, score) · training_load · F7 (absorpsjons-avstandene som hypotese).
  • Hvorfor: A3-regelverket (F10) antar minimumsavstander; dette tester dem mot dine egne data før de kodes inn.
  • Tier: Opus — grupperings-/korrelasjonsscan med F7/F10 som ferdig hypotese-ramme.

9. Amsterdam pre-mortem *(Fable-verdig — men tidsstyrt)*

  • Spørsmål: hva er den mest sannsynlige failure-moden for Amsterdam, og hvilket vern adresserer hver — en syntese av F6 (km 35–40), F15 (u39-immunvakt), F5 (taper) og fueling (#1) til én beslutnings-side.
  • Kilder: alle relevante funn + gjeldende blokkplan-status.
  • Hvorfor: samler vernene til én operativ risiko-side før løpet.
  • Tier: Fable (beslutnings-syntese) — men kjør ~T−3u (slutten av sept), ikke nå. For tidlig gir spekulasjon; nær race gir presisjon.

Sjekket, men ikke modent: Styrke → durability/økonomi-transfer (kobler F6 stride-kollaps til styrke) er en god idé, men `strength_log.json` har n=9 (rekonstruert fra ChatGPT-historikk). For tynt for dose-respons. Rev:iter når styrke-loggingen modnes — da Opus-able.


Anbefaling om rekkefølge (hvis tokens til bare 1–2)

Først: #1 Fueling → km 35–40. Siste uanalyserte input-spak på den eneste failure-sonen som betyr noe for det nære målet (sub-2:50 Amsterdam). Høyest operativ verdi per token.

Så: #4 Trening → langtids-helse. Åpner et nytt domene distinkt fra alt gjort, og performance-korpuset er alt mettet — marginal-verdien av et 20. performance-funn er lavere enn av det første langtids-helse-funnet.

Tredje, hvis mer: #3 Realiserings-gapet — men den vinner på å vente til Amsterdam legger til et datapunkt. #2 Taper-anatomien er det tryggeste rene performance-valget om du heller vil bli i det sporet.

Alt annet (#5–8) er Opus-able med de spec-ene som står her — spar Fable til #1/#4.


Konsolideringsnotat (for Opus/hub): 2026-07-07 — Analyseforslag Runde C v1. Ni nye analyser med Fable/Opus-tiering + «allerede dekket»-liste. Fable-verdig: #1 fueling→km35-40, #2 taper-anatomi, #3 realiserings-gap, #4 healthspan-syntese, #9 Amsterdam pre-mortem (tidsstyrt T−3u). Opus-able: #6 detrening/reversibilitet, #7 polarisering, #8 mikrosyklus; #5 kanari-økt = grense. Anbefalt rekkefølge ved knappe tokens: #1 → #4 → #3/#2. Strength→transfer sjekket og forkastet (strength_log n=9). F24/F25 fortsatt de eneste andre uåpnede.

Skåring 2026 — full gjennomgangHva: Alle 97 kvalitetsøkter i 2026 gjennom åtte skåringsløyper — korte drag, langtur-skåren og løpsskåren.
Konklusjon: Korte drag var systematisk underskåret og langtur-skåren målte volum, ikke utførelse — grunnlaget for Skåring 2.0.
2026-09-09
#skåring#korte drag#langtur#løp

Skåring 2026 — full gjennomgang: inventar, korte drag og langtur

Dato: 2026-09-09 (v1.1 — del 4 om løp lagt til, del 0/1 rettet) · Status: RAPPORT. Ingen historisk økt er endret. Alle tall under «prototype» og «tørrkjøring» er beregnet uten å skrive til `quality.json`.

Kilder: `data/processed/quality.json` (97 kvalitetsøkter 2026) · `data/experiments/score_v3_dryrun_2026.json` (v3-tørrkjøring, 08.09) · `data/experiments/v3kort_prototype_2026.json` (ny, fra `scripts/experiments/score_v3kort_prototype.py`) · `data/experiments/kortdrag_komponenter_2026.json` og `kortdrag_blokkhr_2026.json` (komponent- og blokk-HR-dump) · `data/experiments/skaaring_2026_inventar.json` (hele inventaret som JSON) · `data/processed/race_index.json`, `races.json`, `data/static/race_scores_lock.json` og `scripts/_race_helpers.py` (løp).

Bestilling (08.09): «1. Gi en rapport over hvordan alle øktene i 2026 blir skåret. 2. Kom med forslag til hvordan VO2max, 45/15 og 400-m skal skåres fremover. Økter med korte drag blir konsekvent skåret veldig lavt med dagens modell. 3. Gå gjennom langtur-skår, kom med din analyse, hvordan det skåres nå og hva som kan forbedres.»


0. Kort versjon

1. 97 økter i 2026 går gjennom åtte ulike skåringsløyper (v2, v3, 45/15-skårer, HR-tagg-skårer, langtur-skårer, løpsskårer, skjønn — og «ingen skårer»). To økter — Wildsee-tempoen 30.06 og 45/15-økta 11.02 — har fabrikkerte tall (5,0 eksekusjon / 7,0 kontekst er kodens fallback, ikke en måling). Løpene har egen skårer (`score_race`, del 4): Berlin HM 8,9, Energimila 7,9 — men intervall-pipelinen speiler dem som 6,0 (fallback) og null, og det er dét økt-sidene viser.

2. Korte drag er systematisk underskåret, og det er ikke tilfeldig. Over alle år: 45/15- og 1-min-økter snitter 6,62 (10 % når ≥ 8), mot 7,8–7,9 for 1000-metere og lengre (55–60 % når ≥ 8). I 2026: 6,87 mot 8,5–8,6, og ingen 45/15-økt over 7,4. Årsaken er at skåreren krever en pulstopp (≥ 165/175) som Carl fysiologisk ikke når på 45-sekundersdrag — blokkpuls 135–156, topp 145–167 — og legger 45 % av vekten på akkurat det. Spesifikasjonen i `session_types.json` sier «blokk-snitt», koden gjør noe annet.

3. Forslag «v3-kort» (del 2.3): samme prinsipp som v3 — eksekusjon = løp det som var forskrevet, økonomi = lav puls/laktat på forskrevet fart belønnes — med tre tilpasninger for korte drag: forskrivningen leses fra km/t-bånd og rampe, HR-«stimulus» blir en informativ sjekk med gulv 6 (ikke et krav), og restitusjon måles over faktisk pause. Prototypen gir de tolv kortdrags-øktene i 2026 snitt 9,1 mot lagret 7,3 — men én komponent (hr_cost på 400-metere) er inflatert og trenger Carl-baseline før produksjon. Tallene er illustrasjon, ikke vedtak.

4. *Langtur-skåreren er en god volum-skårer og en dårlig eksekusjons-skårer. Skåren korrelerer −0,66 med cruise-puls og +0,42 med distanse; komponenten «aerob» gir 10 til 20 av 27 økter og skiller ikke, men står for 35 % av vekten på L1. Den slår hardt og feil der cruise-definisjonen svikter: 31.01 (6×2 km) og 28.02 (3×4 km) i Ranheimshallen fikk aerob 3 fordi dragene ble talt som cruise; 13.02 (5-4-3-2-1 løpt nøyaktig på forskrivning 4:12→3:57) fikk 8,0 fordi flytkilometerne ble talt som cruise; 06.09 (1:29:32 mot 1:30:00) fikk pace_okonomi 4 fordi nedjoggen ble cruise. Progresjonskomponenten belønner høy* puls i avslutningen — motsatt av økonomiprinsippet.

5. Løpsskåren måler pacing-form, ikke prestasjon. Energimila 36:43 (PB med 41 s, negativ split, 93 % av makspuls, 17 s under målet) får 7,9 «på linje med form» — samme tall og samme komponenter som fjorårets 37:24 — fordi utfall bare måles mot PB, pulsstigningen gjennom et 10 km-løp trekker 0,7 som «drift», og hverken mål, modellprediksjon eller WA-poeng brukes selv om alle tre finnes i systemet. Berlin har to skårer (8,9 manuell, 9,2 auto) på ulikt splitt-grunnlag. Forslag «løp v2» i del 4.5.

6. Ingenting er skåret om. Del 5 lister hva du må avgjøre før noe endres.


Del 1 — Hvordan alle øktene i 2026 skåres

1.1 Løypene — hvilken kode som skårer hva

LøypeTrefferHva den målerTiersØkter 2026
**v2** `score_session_typed_v2`intervall med tag `terskel`, `over_terskel`, `aerob` (+ `mp_pace`)pct_reps_in_zone 0,30 · pct_quality_km_in_zone 0,20 · inter_rep_drift / pa_hr_coupling / hr_recovery / pace_target 0,15 · laktat_treff 0,10. HR-bånd tosidig (lav-grace fra 08.09 hvis laktat måles). Kombinert = eks × 0,7 + ktx × 0,3≥ 9 Eksepsjonell · ≥ 8 Sterk · ≥ 6 Solid · ≥ 4 Akseptabel**54**
**v3** `score_session_typed_v3` (opt-in `SCORER_V3=1`)samme taggerpace_target 0,20 · pace_evenness 0,15 · completion 0,15 · hr_cost 0,20 · laktat_cost 0,10 · inter_rep_drift 0,10 · hr_recovery 0,10som v2**1** (08.09)
**45/15** `score_session_45_15``45_15_terskel`, `45_15_hoy`block_max_hr 0,30 (topp ≥ 165/175) · block_drift 0,20 · pace_cv 0,15 · hr_max_respons 0,15 · pace_target 0,25 (fast bånd, ignorerer forskrivning)som v2**6**
**HR-tagg via v2**`vo2max`, `r_pace_kort`, `bakkeintervall`pct_reps_in_zone 0,25–0,30 mot HR-bånd (steady-HR per drag) · hr_recovery · drift · pace_target(_per_rep)som v2**5** (4 lagret `vo2max`, 1 `r_pace_kort`; tre av dem får *live* tag `r_pace_kort`)
**NTNU 4×4** `score_vo2max_4x4``quality_subtype == vo2max_4x4`TIZ / peak-HR / completionsom v2**0**
**Skjønn** `discretionary_two_block_v0`01.06 (3×2 km + 4×500 m)manuelt satt**1**

16 av de 68 intervalløktene mangler `_scorer_version` (skåret før versjonsstempling 18.07, fordelt over løypene) — de er frosne, men ikke reproduserbare.

**Løp** `_race_helpers.score_race` via `build_race_index.py``race` (i `races.json`)pacing_strategy 2,5 · pacing_consistency 1,5 · hr_control 1,5 · finish_strong 1,0 · time_outcome 2,5 (mot PB) · pb_leap 0,7 · difficulty 1,0 — additiv, cappet 10≥ 9,5 Eksepsjonell · ≥ 8,5 Sterk — over forventning · ≥ 7,5 Solid — på linje med form · ≥ 6,5 Godkjent · ≥ 6 Akseptabel · ≥ 5 Pacingfeil · ellers Alvorlig feil**2** (Berlin 8,9 manuell / 9,2 auto; Energimila 7,9). Intervall-pipelinen speiler dem i `quality.json` som 6,0-fallback / null
**Ingen skårer**intervall uten tagingen komponenter → koden faller tilbake til **eksekusjon 5,0 / kontekst 7,0 → 6,0 «Solid»****1** (30.06 Wildsee)
**Langtur** `enrich_langtur.compute_langtur_score``long_run`distanse · aerob · pace_okonomi · decoupling · kvalitet/progresjon, vekter per L-klasse**≥ 9 Sterk · ≥ 8 Solid · ≥ 7 OK · ≥ 6 Under forventning** — andre etiketter enn intervall**27**

Legg merke til tier-kollisjonen: en langtur på 9,3 heter «Sterk», en intervalløkt på 9,3 heter «Eksepsjonell», et løp på 9,3 heter «Sterk — over forventning». Ukesevalen og hubben viser begge uten å skille.

1.2 Fordelingen

Etter type (lagret skår):

TypenSnittSDMinMaksAndel ≥ 8Andel ≥ 9
Intervall, pace-tagg (terskel/over_terskel/aerob)568,600,716,19,786 %34 %
Intervall, 45/1566,800,555,97,4**0 %**0 %
Intervall, vo2max / r_pace_kort (1-min, 400 m)57,681,504,98,960 %0 %
Intervall uten tag16,0fallback
Løp (løpsskårer, `race_index`)28,47,98,950 %0 %
Langtur278,560,726,79,581 %30 %

Etter draglengde — alle år i `quality.json` (skåret intervall, n = 433):

DragklasseAlle år nSnittMedian≥ 82026 nSnitt 2026≥ 8 i 2026
**Mikro** (≤ 60 s: 45/15, 1 min)60**6,62**7,0**10 %**7**6,87****0 %**
**Kort** (61–120 s: 400 m, 500 m)216,956,538 %57,9080 %
Mellom (2–5 min: 1000 m, 3 min)2377,798,155 %288,6289 %
Lang (> 5 min: 2000 m, 12 min)1157,888,460 %288,5079 %

Gapet på 1,2–1,7 poeng mellom mikro og resten er stabilt over sju år. Det er ikke at Carl løper 45/15 dårlig — det er modellen (del 2).

1.3 Full tabell — alle 97 økter

Kolonnen «v3 tørrkj.» er v3-tørrkjøringen fra 08.09 (kun pace-tagger). Kolonnen «v3-kort proto» er prototypen fra del 2 (kun korte drag). Begge er hva økta ville fått, ikke hva den har. Komponentforkortelser for langtur: dis = distanse · pac = pace_okonomi · aer = aerob · dec = decoupling · kva = kvalitet · pro = progresjon.

#DatoTypeØktTag (lagret)SkårTierEks.Ktx.Skårerv3 tørrkj.v3-kort protoMerknad
101-01intervall8 x 1000 — 8 x 1000 progresjonterskel**8,0**Sterk7,59,3v2.48,7mølle; HR upålitelig; v3-flagg: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte
201-05intervallMandagsTOSK — 2 x (3-2-1 km) pyramideterskel**7,5**Solid6,98,7v2.47,0
301-07intervallOnsdagsTOSK — 8 x 1000 @ 3:45over_terskel**8,8**Sterk9,08,2v2.48,7
401-10langtur L220k i Ranheimshallen — rolig (20,0 km)**6,7**Under forventninglangturdis 7 · pac 8 · aer 7 · dec 5; Ranheimshallen; dec — % ved -5.8 °C
501-12intervallMandagsTOSK — 3 x 3000 @ 3:55terskel**8,5**Sterk8,68,39,1
601-14intervallOnsdagsTOSK — 5 x 1000 @ ~4:00terskel**9,0**Eksepsjonell9,38,1v2.48,7
701-17langtur L1Afternoon Run — rolig (21,1 km)**8,8**Solidlangturdis 7 · pac 8 · aer 10 · dec 10
801-19intervallMandagsTOSK — 4 x 2000 @ 3:55terskel**8,9**Sterk9,28,39,1
901-21intervallOnsdagsTOSK — 10 x 1000 (8 @ 3:55, 1 @ 3:45, 1 @ 3terskel**8,9**Sterk9,57,6v2.48,7
1001-27intervall3 x 12 min — 3 x 12 min @ 3:55terskel**8,0**Sterk7,98,18,7mølle
1101-29intervall3 x 10 x 45/15 — 3 x 10 x 45/15 @ 3:4545_15_terskel**7,3**Solid7,08,18,9mølle
1201-31langtur L4Ranheimshallen — Sammenhengende langtur 19 km, 6 x 20 (19,2 km)**7,8**OKlangturdis 6 · pac 9 · aer 3 · dec 10 · kva 10; Ranheimshallen; **cruise forurenset av dragene**
1302-02intervallMandagsTOSK — 2 x 10 x 400 @ 3:40-3:25over_terskel**8,4**Sterk8,29,0v2.48,89,4v3-flagg: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte
1402-04intervallOnsdagsTOSK — 10 x 1000 @ 3:50terskel**9,1**Eksepsjonell9,28,9v2.48,8
1502-07langtur L4Ranheimshallen — Sammenhengende: 12 km @ 5:00 + 10 km (22,3 km)**9,1**Sterklangturdis 7,5 · pac 9 · aer 10 · dec 10 · kva 9; Ranheimshallen
1602-09intervallMandagsTOSK — 6 x 2000 @ 3:55-3:50terskel**8,9**Sterk9,08,9v2.49,0
1702-11intervallMorning Run — 10 x 45/15 @ 15-16 km/t45_15_terskel**6,3**Solid5,09,2v2.49,3**eks. 5,0 = fallback (ingen komponenter)**; mølle
1802-13langtur L45-4-3-2-1 km — 5-4-3-2-1 km @ 4:12-4:06-4:01-3:58-3 (24,8 km)**8,0**Solidlangturdis 8 · pac 8 · aer 5 · dec 7 · kva 10
1902-18intervall3 x 12 min — 3 x 12 min @ 3:55-3:52over_terskel**8,6**Sterk8,39,2v2.48,9mølle
2002-20intervall12 x 1 min — 12 x 1 min @ 3:35vo2max**7,3**Solid6,68,99,5mølle
2102-21langtur L1Morning Run — rolig (21,1 km)**8,8**Solidlangturdis 7 · pac 8 · aer 10 · dec 10
2202-25intervallOnsdagsTOSK — 8 x 1000 @ 3:55terskel**8,3**Sterk8,28,88,9
2302-28langtur L5Ranheimshallen — 3 x 4 km @ 3:57-3:56-3:56 (20,2 km)**7,2**OKlangturdis 7 · pac 9 · aer 3 · dec 7 · kva 9; Ranheimshallen; **cruise forurenset av dragene**
2403-02intervallMandagsTOSK — 2 x 10 x 400 @ 3:40-3:30vo2max**8,7**Sterk8,59,0v2.49,4
2503-04intervallOnsdagsTOSK — 12 x 1000 @ 3:50terskel**9,1**Eksepsjonell9,29,0v2.49,6
2603-07langtur L4LørdagsTOSK — 2 segmenter (2-9 km) (26,1 km)**9,3**Sterklangturdis 8,5 · pac 9 · aer 10 · dec 10 · kva 9
2703-09intervallMandagsTOSK — 6 x 2000 @ 3:50terskel**9,2**Eksepsjonell9,29,2v2.49,6
2803-11intervallOnsdagsTOSK — 12 x 1000 @ 3:50terskel**9,5**Eksepsjonell9,69,1v2.49,4
2903-14langtur L5Lørdagslang — 15 km @ 4:55 + 10 km @ 3:58 (vind ød (26,0 km)**9,3**Sterklangturdis 8,5 · pac 9 · aer 10 · dec 10 · kva 9
3003-16intervallMandagsTOSK — 5 x 2000 @ 3:50terskel**8,8**Sterk8,69,3v2.48,8
3103-18intervallOnsdagsTOSK — 3 x 3000 @ 3:55-3:53-3:52terskel**9,1**Eksepsjonell9,09,5v2.49,5
3203-21langtur L5Lørdagslang — 15 km @ 5:00 + 5 km @ 3:55 (avbrutt (21,4 km)**7,7**OKlangturdis 7 · pac 6 · aer 9 · dec 10 · kva 7
3303-23intervallMandagsTOSK — 2 x 2000 + 2 x 1000 @ 3:55terskel**8,8**Sterk8,79,0v2.49,2
3403-25intervall4 x 1000 — 4 x 1000 @ 3:53-3:52-3:51-3:52terskel**9,4**Eksepsjonell9,59,3v2.49,6
3503-29løp🇩🇪 Berlin halvmaraton 1:21:19**8,9**Sterk — over forventningløp (MD; auto 9,2)løpsskår fra `race_index`; `quality.json` viser **fallback 6,0 (5,0/7,0)** og økt-siden «behandler den som langtur»
3604-09intervall6 x 1000 — 6 x 1000 aerob (post-sykdom)aerob**8,3**Sterk8,47,98,3HR upålitelig; v3-flagg: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte; ingen
3704-13intervallMandagsTOSK — TOSK terskelterskel**7,2**Solid6,78,5v2.47,4v3-flagg: ingen forskrivning i strukturen — eksekusjon tak 8,5
3804-19intervall2 x 10 x 45/15 — 2 x 10 x 45/15 @ 13-15 km/t45_15_terskel**5,9**Akseptabel5,66,5v2.48,6
3904-23intervall3 x 10 x 45/15 — 3 x 10 x 45/15 @ 13-16 km/t45_15_terskel**6,7**Solid6,27,8v2.47,0
4004-25intervall3 x 10 min — 3 x 10 minaerob**6,9**Solid6,09,1v2.48,7mølle; v3-flagg: ingen forskrivning i strukturen — eksekusjon tak 8,5
4104-28intervall3 x 2000 — 3 x 2000terskel**8,8**Sterk8,68,39,2
4204-30intervall4 x 1000 — 8 x 1000 @ 3:55 (planlagt 8, gjennomterskel**6,1**Solid5,47,57,1
4305-11intervallMandagsTOSK — 2 x 800 + 2 x 2000 @ 4:10aerob**9,1**Eksepsjonell9,19,1v2.48,8
4405-13intervallOnsdagsTOSK — 6 x 1000 @ 4:00terskel**8,3**Sterk7,99,1v2.48,2
4505-16langtur L2Morning Run — rolig (20,0 km)**7,3**OKlangturdis 7 · pac 6 · aer 7 · dec 9
4605-18intervallMandagsTOSK — 2 x 10 x 400 @ 3:45-3:30vo2max**8,9**Sterk8,98,9v2.49,6
4705-20intervallOnsdagsTOSK — 8 x 1000 @ 4:00-3:55terskel**9,2**Eksepsjonell9,48,5v2.49,2
4805-23langtur L1Rolig langtur — rolig (22,6 km)**9,0**Sterklangturdis 7,5 · pac 8 · aer 10 · dec 10
4905-25intervall4 x 2000 — 4 x 2000terskel**9,1**Eksepsjonell9,09,5v2.49,2
5005-27intervallOnsdagsTOSK — 10 x 1000 @ 3:57-3:48terskel**9,5**Eksepsjonell9,59,5v2.49,2
5105-30langtur L1Hydrocup — rolig (26,1 km)**9,4**Sterklangturdis 8,5 · pac 9 · aer 10 · dec 10
5206-01intervallMandagsTOSK — 3×2 km + 4×500 mterskel**8,9**Sterk8,89,58,1metode `discretionary_two_block_v0`
5306-03intervallOnsdagsTOSK — 10 x 1000 @ 4:00-3:50terskel**9,3**Eksepsjonell9,49,0v2.48,9
5406-06langtur L4LørdagsTOSK — 6 km tempo (27,0 km)**8,9**Solidlangturdis 8,5 · pac 9 · aer 10 · dec 10 · kva 8
5506-08intervall5 x 5 min — 5 x 5 minaerob**8,6**Sterk8,39,29,0
5606-08intervallMandagsTOSK — 3 x 2000 @ 3:55 Lt(3) 3,8terskel**7,7**Solid7,09,2v2.48,8
5706-10intervallOnsdagsTOSK — 10 x 1000 @ 4:00-3:45terskel**9,3**Eksepsjonell9,59,0v2.49,3
5806-13langtur L1LørdagsTOSK — rolig (31,0 km)**9,3**Sterklangturdis 9 · pac 8 · aer 10 · dec 10
5906-15intervall6 x 5 min — 6 x 5 minaerob**9,2**Eksepsjonell9,29,19,2
6006-15intervall3 x 10 x 45/15 — 3 x 10 x 45/1545_15_terskel**7,4**Solid6,79,1v2.49,4
6106-17intervallOnsdagsTOSK — 10 x 1000 @ 3:57-3:44terskel**8,9**Sterk9,28,2v2.48,4
6206-20langtur L4LørdagsTOSK — 5-4-3-2-1 km segmenter (30,0 km)**8,4**Solidlangturdis 9 · pac 6 · aer 10 · dec 7 · kva 9
6306-22intervall3 x 10 x 45/15 — 3 x 10 x 45/1545_15_hoy**7,2**Solid6,59,1v2.49,3
6406-26intervall2 x Wildsee — 2 x 2500 @ 4:00terskel**8,6**Sterk8,78,38,1
6506-30intervall7 x Wildsee — 7 km sammenhengende tempo**6,0**Solid5,07,0v2.4**eks. 5,0 = fallback (ingen komponenter)**; **ktx. 7,0 = fallback**; uten tag → ingen skårer
6607-01intervall2 x 10 x 400m — 2 x 10 x 400mvo2max**4,9**Akseptabel3,77,9v2.49,1mølle
6707-04intervall3 x 12 min — 3 x 12 minaerob**7,3**Solid6,88,6v2.48,6v3-flagg: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte; ingen
6807-05langtur L1Søndagslang — rolig (33,5 km)**8,3**Solidlangturdis 9,5 · pac 9 · aer 10 · dec 3; dec 6,5 % ved 24.9 °C
6907-07intervall4 x 2000 — 4 x 2000terskel**7,9**Solid7,68,68,9
7007-09intervall10 x 1000 🇮🇹 — 10 x 1000 🇮🇹terskel**7,1**Solid7,17,08,2
7107-11langtur L1Lørdagslang — rolig (33,6 km)**8,3**Solidlangturdis 9,5 · pac 9 · aer 10 · dec 3; dec 6,6 % ved 20.2 °C
7207-14intervall5 x 2000 — 5 x 2000terskel**8,8**Sterk9,28,19,1
7307-17intervall8 x 1000 — 8 x 1000over_terskel**8,9**Sterk8,99,1v2.48,7v3-flagg: ingen forskrivning i strukturen — eksekusjon tak 8,5
7407-18langtur L3LørdagsTOSK — tempo-finish 6 km (34,1 km)**8,9**Solidlangturdis 9,5 · pac 8 · aer 10 · dec 7 · pro 9
7507-20intervall5 x 2000 — 5 x 2000terskel**8,7**Sterk8,88,6v2.49,3
7607-23intervall6 x 1000 🔥 — 6 x 1000 🔥terskel**8,1**Sterk7,88,8v2.48,8
7707-25langtur L1LørdagsTOSK — rolig (32,2 km)**9,5**Sterklangturdis 9,5 · pac 8 · aer 10 · dec 10
7807-27intervallMandagsTOSK — 5 x 2000 (90 s stå)terskel**8,4**Sterk8,38,4v2.48,5
7907-29intervall6 x 5 min — 6 x 5 minaerob**8,6**Sterk8,39,2v2.49,2
8007-29intervallOnsdagsTOSK — 10 x 1000 @ 3:50terskel**8,3**Sterk8,09,0v2.49,7
8108-01langtur L3LørdagsTOSK — progresjon (34,2 km)**8,6**Solidlangturdis 9,5 · pac 8 · aer 7 · dec 10 · pro 9
8208-05intervallOnsdagsTOSK — 6 x 1000 @ 3:42-42-43-43-42-39over_terskel**9,0**Eksepsjonell9,09,1v2.49,0
8308-07langtur L4Langtur — 6-5-4-3-2-1 km segmenter (33,0 km)**8,3**Solidlangturdis 9,5 · pac 6 · aer 10 · dec 3 · kva 10; dec 6,6 % ved 10.3 °C
8408-12løpEnergimila 36:43 🔥**7,9**Solid — på linje med formløp (auto)løpsskår fra `race_index`; `quality.json` **null**, økt-siden «INGEN SKÅR»
8508-14langtur L1Afternoon Run — rolig (20,0 km)**8,7**Solidlangturdis 7 · pac 8 · aer 10 · dec 9
8608-16langtur L1SoloTOSK — rolig (30,0 km)**8,9**Solidlangturdis 9 · pac 9 · aer 10 · dec 7
8708-17intervallMandagsTOSK — 5 x 2000 @ 3:50terskel**9,0**Eksepsjonell9,08,9v2.49,5
8808-19intervall5x6 min — 5x6 minaerob**9,2**Eksepsjonell9,29,2v2.49,2
8908-19intervall10 x 1000 — 10 x 1000terskel**8,2**Sterk7,89,2v2.48,9v3-flagg: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte
9008-22langtur L4LørdagsTOSK — 9.6+6+5+5 km segmenter (35,0 km)**8,9**Solidlangturdis 10 · pac 8 · aer 10 · dec 7 · kva 9
9108-24intervallMandagsTOSK — 3 x 3200 @ 3:50-3:49-3:49terskel**8,8**Sterk8,59,4v2.48,8HR upålitelig
9208-26intervall5 x 6 min — 5 x 6 minaerob**9,2**Eksepsjonell9,29,1v2.49,0
9308-26intervallOnsdagsTOSK — 2 x 10 x 400 @r_pace_kort**8,6**Sterk8,49,1v2.49,5
9408-30langtur L4Søndagslang — 4×5 km (33,0 km)**9,5**Sterklangturdis 9,5 · pac 8 · aer 10 · dec 9 · kva 10
9509-03intervall4 x 2000 — 4 x 2000terskel**8,8**Sterk8,69,4v2.48,6
9609-06langtur L4Fartsholder TM — 1 × 20 km (32,1 km)**8,2**Solidlangturdis 9,5 · pac 4 · aer 10 · dec 7 · kva 9
9709-08intervall5 x 2000 👷‍♂️ — 5 x 2000 👷‍♂️terskel**9,7**Eksepsjonell9,99,4v3.09,7

1.4 Funn fra inventaret

1. To fabrikkerte skårer, og løpene speiles feil. Wildsee 30.06 (7 km sammenhengende tempo i fjellet, ingen tag) står med 6,0 «Solid» — det er kodens fallback 5,0 × 0,7 + 7,0 × 0,3, ikke en måling. 45/15-økta 11.02 har eksekusjon 5,0 fordi ingen drag hadde `hr_avg` (mølle uten pulsbelte-synk) — den fikk 6,3 for en økt som ble løpt nøyaktig på forskrivning (belte 15–16 km/t). Løpene har riktige skårer i `race_index` (Berlin 8,9, Energimila 7,9 — del 4), men `quality.json` speiler Berlin som 6,0-fallback og Energimila som null, og økt-sidene viser det. F4-fiksen (20.07) fjernet 5,0-fallbacken for nye økter; de gamle står.

2. Samme økt, tre tagger. De fire 2×10×400-øktene er lagret som `over_terskel` (02.02), `vo2max` (02.03, 18.05, 01.07) og `r_pace_kort` (26.08). Tre av dem får en annen tag live enn den lagrede (`get_effective_target_band` velger `r_pace_kort` for 02.03 og 18.05 og 01.07). Tag-hygiene må på plass før en ny skårer, ellers skårer samme økt ulikt avhengig av hvilket ord som sto i Strava-tittelen.

3. `vo2max`-taggen brukes på økter som ikke er VO2max-økter. 12×1 min @ 3:35 (20.02) er ikke 4×4; HR-båndet [166, 175] er for 4-minuttersdrag. Ingen økt i 2026 er en ekte 4×4.

4. 16 av 68 intervalløkter mangler `_scorer_version` (skåret før 18.07 og siden frosset). De er ikke feil, men de er ikke reproduserbare — `_score_inputs` finnes bare på 26.08.

5. To langturer i Ranheimshallen er skåret på feil grunnlag. 31.01 (6×2 km) og 28.02 (3×4 km) har drag uten `per_km` — da er `rep_km_set` tom, og hele løpet inkludert dragene blir «cruise». Cruise-HR 153 og 161 → aerob 3 → 7,8 og 7,2. Det er to gode terskel-langturer som står som «OK». Detaljer i del 3.

6. Dobbeltøkt-dagene (08.06, 15.06, 29.07, 19.08, 26.08) har to kvalitetsøkter samme dato. v3-tørrkjøringsfilen er riktig (én rad per økt), men alt som slår opp «skår for dato» — inkludert mitt eget første inventar-utkast — kollapser dem. Nøkkel må være `activity_id`, aldri dato.

7. v3-flaggene som er verdt å lese: 01.01 og 02.02 har «≥ 10 bpm under forventet uten laktat — sjekk pulsbelte». 01.01 er allerede `hr_unreliable`; 02.02 (400-metere) er et falskt flagg fordi LT-linjen ikke gjelder for 88-sekundersdrag — se del 2.3 om hvorfor.

8. Sesongen i tall: pace-tagg-øktene ligger på 8,60 med 86 % ≥ 8; v3 ville løftet snittet til 8,86 og strammet spredningen (SD 0,76 → 0,56) — se v3-rapporten 08.09. Langturene ligger på samme nivå (8,56). Det er kortdrags-øktene som skiller seg ut, og det er dem del 2 handler om.


Del 2 — Korte drag: VO2max-kort, 45/15 og 400 m

2.1 Problemet i tall

Tolv økter i 2026 har drag på ≤ 120 s: seks 45/15-økter, én 12×1 min, fire 2×10×400 og én 2×10×400 på mølle. Snitt lagret skår 7,3; ingen 45/15-økt over 7,4; laveste 4,9 (2×10×400 på mølle 01.07, løpt 3:27–3:42 i pen progresjon, ett drag 4:00). Til sammenligning: pace-tagg-øktene samme år snitter 8,60.

Mønsteret er gammelt (tabellen i 1.2): 60 mikroøkter siden 2020 snitter 6,62. Så det er ikke form, ikke enkeltdager og ikke tag-rot alene. Det er modellen.

2.2 Hvorfor — mekanismene

A. Pulsen rekker ikke opp, og skåreren straffer det. Puls henger 30–60 s etter belastning. På et 45-sekundersdrag når den aldri steady state; på et 400-meterdrag (85–90 s) nesten. Målt fra streamene (`kortdrag_blokkhr_2026.json`):

ØktBlokk-snitt HR per settSiste 2 min per settTopp per sett% av 186 (snitt / topp)
29.01 3×10×45/15 @ 3:45 mølle148 · 148 · 156146 · 140 · 159164 · 163 · 16780–84 / 88–90
11.02 10×45/15 @ 15–16 km/t mølle15115916681 / 89
19.04 2×10×45/15 @ 13–15 km/t135 · 142138 · 146145 · 15072–76 / 78–81
23.04 3×10×45/15 @ 13–16 km/t136 · 142 · 149136 · 148 · 155149 · 158 · 16373–80 / 80–88
15.06 3×10×45/15 (15–17 km/t)139 · 144 · 141143 · 151 · 155150 · 158 · 16375–77 / 81–88
22.06 3×10×45/15 @ 15–18 km/t (hoy)135 · 138 · 145138 · 144 · 153147 · 149 · 15773–78 / 79–84
20.02 12×1 min @ 3:35 mølle13513616673 / 89
02.03 2×10×400 @ 3:40→3:30 bane148 · 150150 · 157169 · 17579–80 / 91–94
18.05 2×10×400 @ 3:45→3:30 bane148 · 153152 · 157168 · 17580–82 / 90–94
01.07 2×10×400 @ 16–18 km/t mølle141 · 144144 · 146158 · 16376–78 / 85–88
26.08 2×10×400 @ 3:32 bane145 · 148148 · 152167 · 17078–79 / 90–91

Carl når topp 145–167 på 45/15 og 158–175 på 400-metere. Skåreren `score_session_45_15` krever topp ≥ 165 (terskel) / ≥ 175 (hoy) i ≥ 75 % av settene for 9,5, og gir 4,5 for alt under 25 % — en klippe uten gradient: 164 mot 165 (29.01) gir samme 4,5 som 149 mot 165 (19.04). Komponenten har vekt 0,30. Så måles den samme toppen én gang til i `hr_max_respons` (vekt 0,15: ≥ 175 → 9,5, ≥ 167 → 8, ≥ 160 → 6,5, ellers 5). 45 % av eksekusjonsvekten er ett tall Carl fysiologisk ikke leverer på dette formatet. Og toppen koden ser er per-drag `hr_max` fra Garmin-lappen — den ekte toppen kommer i flyten etter draget (29.01 sett 3: lap-max 164, stream-topp 167).

B. Spesifikasjonen og koden er uenige. `session_types.json` sier for `45_15_terskel`: «Block-avg HR i terskel-sonen», `hr_block_avg_band [160, 169]`, `scoring_focus: block_avg`; for `45_15_hoy`: «Drag-vinduer 45 s er for korte for individuell HR-respons; scoreren bruker BLOCK-AVG over 10×45/15-blokk», bånd [154, 167], peak «90–95 % (163–172)». Koden bruker ingen blokk-snitt og krever 175 for hoy. Og selv JSON-båndet bommer: Carls blokk-snitt er 135–156, 10–25 bpm under [160, 169]. Båndene er lærebok-prosenter av makspuls, ikke Carls observerte respons.

C. Forskrivningen ignoreres. `pace_target` i 45/15-skåreren bruker et fast bånd (terskel 3:45–4:10 → 9; hoy < 3:45 → 9, ellers 7/5). 19.04 var forskrevet 13–15 km/t (4:00–4:37) etter sykdom og løpt 4:41 → 6,0 for å følge planen. 22.06 var forskrevet 15–18 km/t og løpt 3:45 flatt → 7,0 fordi «hoy skal være under 3:45». 15.06 har forskrivning per sett i beskrivelsen («1-10: 15-16 kmh, 11-20: 16-17 kmh, 21-30: 17 kmh») som ingen parser leser — `target_pace: null`.

D. Målestøy skåres som eksekusjon. `pace_cv` (0,15) straffer CV over 3/5/8 %. Et 45-sekunders GPS-segment på 172–189 m har ±5 % usikkerhet i seg selv (15.06: CV 8,1 % → 4,5). På mølle er beltet eksakt, men farten koden ser kommer fra footpod (29.01: belte 3:45, footpod 3:47–4:09 → «avvik»).

E. «Litt for kontrollert». `block_drift` gir 7,0 når pulsen stiger 0–5 bpm gjennom settet og 9,0 ved 5–15. Lav drift på riktig fart er økonomi. Det er den samme feilen v3 rettet for lange drag.

F. Fallback 5,0. 11.02: dragene mangler `hr_avg` (mølle, belte ikke synket til lapper) → null komponenter → eksekusjon 5,0 → 6,3. Streamen har puls hele veien (blokk 151, topp 166). F4 (20.07) satte `execution_total = None` i stedet — men bare for nye økter.

G. VO2max-taggen på 1-minuttere. 20.02 (12×1 min @ 3:35) skåres via v2 mot `vo2max`-båndet [166, 175] steady-HR. Steady-HR på 60-sekundersdrag er 129–140. «Ingen reps i sonen» → 2,5 på vekt 0,25. Restitusjonen (52 bpm) fikk 9,5, farten var beltets. Økta var gjennomført som forskrevet.

H. 400-meterne får hverken fart eller puls riktig. 01.07 (mølle, «2 x 10 x 400m», beskrivelse «@ 16-18 kmh»): ingen «@ m:ss» i strukturen → ingen pace-komponent. Igjen står `pct_reps_in_zone` mot [158, 177] steady-HR (mølle-steady 131–145 → «0 % i band» → 3,5) og `hr_recovery` (4,0: beltet gikk i pausene, «60 s senere» er inne i neste drag). To komponenter, 45 % av vekten, eksekusjon 3,7. På bane (02.03, 18.05, 26.08) redder pace-rampe-stien og laktat skåren opp til 8,6–8,9, men `hr_recovery` med fast 60-s-vindu måler inn i neste drag når pausene er kortere (02.03: fall 36 → 1 bpm utover i økta → 6,0), og `inter_rep_drift` første→siste drag straffer en bevisst spurt (26.08: rep 20 = 168 mot 160 på rep 19 → «+12 bpm» → 3,0).

Oppsummert per økt — komponenten som senket den:

ØktLagretEks.Det som senketDet som faktisk skjedde
29.01 3×10×45/15 @ 3:45, mølle7,37,0block_max_hr 4,5 (164 vs 165) · hr_max_respons 6,5 · block_drift 7,0 «for kontrollert»belte på 3:45, 29/30 drag, blokk 148–156, topp 167
11.02 10×45/15 @ 15–16 km/t, mølle6,3**5,0**ingen komponenter → fallbackpå belte som forskrevet, blokk 151, topp 166
20.02 12×1 min @ 3:35, mølle7,36,6pct_reps_in_zone 2,5 (0/12 i [166,175])12/12 på belte, restitusjon 52 bpm, topp 166
02.03 2×10×400 @ 3:40→3:30, bane8,78,5hr_recovery 6,0 (60-s-vindu > pause)18/20 innen ±5 s/km av rampa, topp 175
19.04 2×10×45/15 @ 13–15 km/t5,95,6block_max_hr 4,5 (149 vs 165) · pace_target 6,0 (4:41 mot fast 3:45–4:10) · hr_max_respons 5,0forskrevet lett etter sykdom, løpt 4:41 = innenfor 13–15 km/t
23.04 3×10×45/15 @ 13–16 km/t6,76,2block_max_hr 4,5 · pace_target 6,0 (5:19) · pace_cv 6,0 (7,6 %)4:44–5:21 per sett inkl. flyt → terreng/GPS; «overskudd igjen»
18.05 2×10×400 @ 3:45→3:30, bane8,98,9(ingen; live 9,3 etter lav-grace)20/20 på rampa, laktat 3,2/3,9, topp 175
15.06 3×10×45/15 per-sett km/t7,46,7block_max_hr 4,5 (162 vs 165) · pace_cv 4,5 (8,1 % GPS) · hr_max_respons 6,54:15/4:05/3:45 mot 3:45–4:00/3:32–3:45/3:32 — sett 3 på, sett 1–2 litt sakte målt med GPS
22.06 3×10×45/15 @ 15–18 km/t (hoy)7,26,5block_max_hr 4,5 (156 vs **175**) · hr_max_respons 5,0 · pace_target 7,0 («< 3:45»)løpt 3:45 flatt innenfor 15–18 km/t, topp 157
01.07 2×10×400, mølle**4,9****3,7**pct_reps_in_zone 3,5 (0 % i [158,177]) · hr_recovery 4,0 · ingen pace-komponent3:27–3:42 i progresjon, 20/20, topp 163
26.08 2×10×400 @ 3:32, bane8,68,4inter_rep_drift 3,0 (+12, spurt på rep 20)0 s/km avvik, 18/20 i sone, restitusjon 46 bpm
02.02 2×10×400 @ 3:40→3:25, bane (`over_terskel`)8,48,2v2 tosidig HR-bånd (v3: 8,8)20/20 på rampa, blokk 148–150

2.3 Forslag: «v3-kort»

Samme filosofi som v3 — skåren skal gjenspeile hvor nøyaktig økta ble gjennomført, og belønne økonomi — med tre tilpasninger for korte drag: forskrivningen må leses fra der Carl skriver den (km/t, bånd, per sett, rampe); puls er ikke et eksekusjonskrav, men en informativ stimulus-sjekk med gulv; restitusjon måles over den pausen som faktisk fantes.

Ruting. Økta går til v3-kort når ≥ 60 % av kvalitetstiden ligger i drag ≤ 120 s. Klasse mikro (≤ 60 s: 45/15, 30/30, 1 min) og kort (61–120 s: 400 m, 500 m). Sammensatte økter (01.06: 3×2 km + 4×500 m) rutes blokkvis, ikke etter median draglengde — prototypen bommet der, og det er en reell kant.

Komponenter og vekter (normaliseres over dem som finnes, som i v3):

KomponentVektMåler10 vedMerknad
**pace_target**0,25snittavvik per drag *utenfor* forskrevet båndmikro ≤ 10 s/km · kort ≤ 5 s/kmbånd fra «@ 15-16 km/t», «13-16 kmh», «1-10: 15-16 kmh» (per sett), «@ 3:40-3:30» (rampe per sett) eller «@ 3:45». **Mølle:** beltet = forskrivningen; footpod/GPS-avvik ≤ 6 % ignoreres → 9,5 (ikke 10: vi har ikke *målt* farten). Ingen forskrivning → komponent utgår + flagg
**completion**0,15utførte / forskrevne drag100 %som v3
**evenness**0,10pace-CV innen settmikro ≤ 4 % · kort ≤ 2 %toleranser satt etter målestøy; utgår ved rampe
**stimulus**0,10nådde blokken det fysiologiske målet?45/15: siste-2-min-HR i beste sett ≥ Carl-mål · 400 m / 1 min: sett-topp ≥ Carl-mål**informativ — gulv 6.** Carl-mål fra observert 2026-fordeling, ikke %-tabell: `45_15_terskel` 150 · `45_15_hoy` 156 · `r_pace_kort` 168 · `vo2max_kort` 160; mølle −5
**hr_cost**0,20puls på forskrevet fart, *lavere = bedre*≤ −8 bpm mot referanse**mikro:** siste-2-min-HR mot LT-linjen ved blokk-snittfart *inkl. flyt* (45 s @ 3:50 + 15 s flyt ≈ 4:05/km → forventet ≈ 163). **kort:** LT-linjen gjelder *ikke* (drag under steady state) — referansen må være Carls egen baseline per arena: sett-topp på 400 m ved 3:25–3:40 er **163–168 på bane** (9 økter siden 2024), **156–158 på mølle** (5 økter); fart-hellingen innenfor dette fartsområdet er ikke oppløselig i Carls data (SD 13 bpm per drag) → konstant baseline ± 5 bpm
**laktat_cost**0,10målt laktat mot taggens bånd, *lavere = bedre*under båndets gulvutgår når ikke målt (som v3)
**block_drift**0,10siste-2-min-HR sett 1 → siste sett≤ +8 bpm9 ved ≤ 12, 8 ved ≤ 16, 6,5 ved ≤ 20. **Ingen straff for lav drift**
**recovery**0,10HR-fall fra dragslutt til neste dragstart, over *faktisk* pause≥ 40 bpmbare pauser ≥ 45 s (45/15 har ingen → utgår). Belte som går i pausen → «pause ikke identifiserbar» → utgår, ikke 4,0

Kombinert = eksekusjon × 0,7 + kontekst × 0,3, samme tiers som resten (og samme tier-kompresjon som v3-rapporten foreslo: ≥ 9,4 Eksepsjonell · ≥ 8,5 Sterk).

Hva som forsvinner: block_max_hr-klippen, hr_max_respons (dobbelttelling), «litt for kontrollert», fast pace-bånd som overstyrer forskrivningen, fast 60-s restitusjonsvindu, 5,0-fallback, første→siste-drift.

2.4 Prototype-resultat (illustrasjon — ikke lagret)

`scripts/experiments/score_v3kort_prototype.py 2026` skårer de tolv øktene uten å skrive. Kontekst-skår er den lagrede. Kolonnen «nøytral hr_cost» setter hr_cost = 8 på 400-meterne, fordi prototypen bruker LT-linjen som referanse der og gir −20 til −35 bpm — det er ikke økonomi, det er at 88-sekundersdrag ikke når steady state. Produksjonsversjonen trenger Carl-baselinen over.

ØktLagretPrototypeNøytral hr_costDet som driver
29.01 3×10×45/15 @ 3:45 mølle7,38,98,9completion 8 (29/30), block_drift 8 (+13)
02.02 2×10×400 @ 3:40→3:258,49,49,1recovery 7,5 (25 bpm)
11.02 10×45/15 @ 15–16 km/t mølle6,39,39,3hr_cost 8 (−1 bpm) — ærlig 9,3 i stedet for fabrikkert 6,3
20.02 12×1 min @ 3:35 mølle7,39,59,5alt på; stimulus 10 (topp 166)
02.03 2×10×400 @ 3:40→3:308,79,49,2recovery 7,5 (21 bpm over faktisk pause)
19.04 2×10×45/15 @ 13–15 km/t5,98,68,6stimulus 8 (146 vs 150), ktx 6,5 (sykdom)
23.04 3×10×45/15 @ 13–16 km/t6,7**7,0**7,0pace_target 5 (44 s/km utenfor bånd), hr_cost 4 (+17), block_drift 6,5 (+19) — **terreng eller reelt avvik; trenger arena-flagg**
18.05 2×10×400 @ 3:45→3:308,99,69,3laktat 9,5, recovery 9 (39 bpm)
15.06 3×10×45/15 per-sett km/t7,49,49,4pace_target 9 (13 s/km, sett 1–2 litt sakte)
22.06 3×10×45/15 @ 15–18 km/t hoy7,29,39,3stimulus 9 (153 vs 156), block_drift 8 (+15)
01.07 2×10×400 mølle4,99,18,9pace 9,5 (belte), completion 10, recovery 9 (31 bpm)
26.08 2×10×400 @ 3:328,69,59,3pace_target 9 (parseren leste bare «@ 3:32»; beskrivelsen har per-drag-mål 3:25–3:32 som ble truffet — parser-begrensning, ikke avvik), recovery 10 (50 bpm)
**Snitt****7,3****9,1****9,0**

Tre ærlige forbehold: (1) snittet 9,0–9,1 er trolig for høyt uten tier-kompresjonen — prototypen er vennlig kalibrert, og det er lettere å stramme en modell som måler riktig ting enn å redde en som måler feil ting; (2) 23.04 kan være en økt som faktisk ble løpt for sakte, eller terreng — datagrunnlaget (GPS-fart 4:44–5:21 inkl. flyt, beskrivelsen «overskudd igjen») avgjør ikke; (3) hr_cost for kort-klassen er ikke ferdig — Carl-baselinen må bygges av de 21 400-meterøktene i arkivet (9 bane, 7 vei, 5 mølle) før den brukes.

2.5 Det som må ryddes før v3-kort kan slås på

1. Tag-hygiene: alle 2×10×400 → `r_pace_kort`; `vo2max` forbeholdes drag ≥ 3 min (ekte 4×4/5×4); ny tag `vo2max_kort` for 1-min/200 m-økter (eller la `r_pace_kort` dekke 45–120 s). Lagret `score_tag` og live effektiv tag må være samme.

2. Forskrivnings-parser: km/t-bånd («15-16 km/t», «13-16 kmh»), per-sett-linjer («1-10: 15-16 kmh»), rampe («@ 3:40-3:30») og «@ m:ss» — lagres som `prescription` på økta så skåren er reproduserbar. Beskrivelsesfeltet har dataene allerede.

3. Arena-flagg: `is_treadmill` finnes; `terreng` gjør det ikke (19.04, 23.04). Uten det kan ikke pace-toleransen velges riktig.

4. Stream-baserte blokkmål: blokk-snitt, siste-2-min og sett-topp fra streamen (ikke lap-`hr_max`) — `kortdrag_blokkhr_2026.json` viser hvordan.

5. Carl-baseline for kort-klassen: sett-topp og `hr_last_30s` per arena fra arkivet; `hr_last_30s` finnes bare fra 26.08 og må fylles bakover.

6. Historisk kjøring: tørrkjør alle 81 kortdrags-økter 2020–2026 mot v3-kort før aktivering, som for v3. Ingen re-skåring uten eget vedtak.


Del 3 — Langtur-skåren

3.1 Slik skåres den nå (`enrich_langtur.compute_langtur_score`)

Fem komponenter, vektet per L-klasse. Fysiologi per periode: LT1 = 160 (159 før 01.09), LT2 = 170 (169), LT2-fart = 3:45 (3:49), periode-MP = 4:04,8.

KomponentBeregningTrinn
**distanse**absolutt km≥ 35 → 10 · ≥ 32 → 9,5 · ≥ 30 → 9 · ≥ 26 → 8,5 · ≥ 24 → 8 · ≥ 22 → 7,5 · ≥ 20 → 7 · ellers 6
**aerob**cruise-HR (snitt av km-lapper *utenfor* dragene) mot LT1≤ LT1−20 (140) → 10 · ≤ −17 → 9 · ≤ −12 → 7 · ≤ −7 → 5 · ellers 3 · mangler → 5
**pace_okonomi**cruise-fart × (cruise-HR / (LT1−9)) = «fart ved anker-puls 151», mot LT2-fart + 26/41/56/71/86 s (4:11 / 4:26 / 4:41 / 4:56 / 5:11)→ 10 / 9 / 8 / 6 / 4 / 2
**decoupling**fart/puls-forhold andre halvdel mot første, *hele løpet*; toleranse (dist−25)/10 × 0,5 pp< 2 → 10 · < 3 → 9 · < 4,5 → 7 · < 6 → 5 · < 9 → 3 · ellers 1 · **mangler → 5**
**kvalitet** (type B: L4/L5)min(volum, intensitet). Volum: kvalitets-km ≥ 15 → 10 · ≥ 12 → 9,5 · ≥ 9 → 9 · ≥ 6 → 8 · ≥ 4 → 7 · ≥ 2,5 → 6. Intensitet L4: kvalitetsfart mot periode-MP, avvik ≤ 8 s → 10 · ≤ 18 → 9 · ≤ 30 → 8 · ≤ 45 → 6. L5: kvalitets-HR ≥ LT2 → 10 · ≥ LT2−4 → 9 · ≥ −9 → 8 · ≥ −14 → 7
**progresjon** (type C: L3)kvalitets-HR i avslutningen≥ LT2 → 10 · ≥ LT2−14 → 9 · ≥ LT2−21 → 7 · ellers 6

Vekter: L1 aerob 0,35 · distanse 0,25 · pace_okonomi 0,20 · decoupling 0,20 — L2 aerob 0,30 · decoupling 0,25 · distanse 0,25 · pace_okonomi 0,20 — L3 progresjon 0,30 · aerob 0,25 · distanse/decoupling/pace_okonomi 0,15 — L4/L5 kvalitet 0,35 · aerob 0,20 · distanse/decoupling/pace_okonomi 0,15. Manglende komponent teller 5 (`components.get(k, 5)`). Tiers: ≥ 9 Sterk · ≥ 8 Solid · ≥ 7 OK · ≥ 6 Under forventning.

3.2 Fordelingen 2026 (27 langturer)

Snitt 8,56, SD 0,72, spenn 6,7–9,5. Tiers: Sterk 8 · Solid 14 · OK 4 · Under forventning 1. Klasser: L1 10 · L4 10 · L5 3 · L2 2 · L3 2.

KomponentnSnittSDVerdier (antall)
distanse278,331,136 (1) · 7 (7) · 7,5 (2) · 8 (1) · 8,5 (4) · 9 (3) · 9,5 (8) · 10 (1)
aerob278,932,11**3 (2)** · 5 (1) · 7 (3) · 9 (1) · **10 (20)**
pace_okonomi277,931,254 (1) · 6 (4) · 8 (12) · 9 (10)
decoupling278,152,32**3 (3)** · 5 (1) · 7 (7) · 9 (3) · 10 (13)
kvalitet139,080,837 (1) · 8 (1) · 9 (7) · 10 (4)
progresjon29,0009 (2)

Korrelasjoner med totalskår: cruise-puls −0,66, distanse +0,42, decoupling −0,22. Skåren er i praksis «hvor lav var pulsen og hvor langt løp du».

3.3 Det som fungerer

Distanse-stigen speiler blokkens progresjon og er lett å forstå. L-klassene skiller riktig mellom rolig volum, MP-langtur og terskelblokker, og kvalitetskomponenten for L4 (fart mot periode-MP) er i tråd med prinsippet — 30.08 (4×5 km @ 4:04→3:59, løpt 4:02) får 10 der, og 9,5 totalt, som er riktig. Decoupling-toleransen som vokser med distansen er fornuftig. Skalaen er stabil over år (vekter konstruert for å bevare 2023–2026-skårer).

3.4 Svakhetene

1. «aerob» skiller ikke — og når den slår, slår den feil. 20 av 27 får 10 fordi Carl cruiser på 122–140 og terskelen for 10 er 140. På L1 er det 35 % av vekten som alltid gir 3,5 poeng. De sju som ikke får 10 er nesten alle målefeil: 31.01 (6×2 km, Ranheimshallen) og 28.02 (3×4 km, Ranheimshallen) har drag uten `per_km` → `rep_km_set` tom → dragene telles som cruise → cruise-HR 153 / 161 → aerob 3 → 7,8 og 7,2 «OK» for to gode terskel-langturer. 13.02 (5-4-3-2-1 km @ 4:12-4:06-4:01-3:58-3:57, løpt 4:11-4:05-4:01-3:58-3:57 — nøyaktig på forskrivning) får aerob 5 fordi «cruise» er flytkilometerne mellom segmentene (4:40→4:25, HR 147,6) → 8,0 «Solid». 10.01 (20 km i hallen) får 7 uten GPS og med hall-puls. Det er «god dag straffes»-mønsteret i langtur-form: presis gjennomføring, lav skår.

2. Cruise-definisjonen er «alt som ikke er drag». Den fanger oppvarming, nedjogg, flyt og drag som ikke ble oppdaget. 06.09 (1:29:32 mot 1:30:00): cruise = 4 km oppvarming + 7 km nedjogg-subbing på 5:23 med puls 139,5 → anker-fart 4:58 → pace_okonomi 4 → 8,2. Det pacing-jobben ble målt på var subbingen etterpå. 01.08 («progressivt frem til 24 km, deretter rolig»): bare 2,8 km oppdaget som kvalitet, og fordi de siste 10 km var rolige, ser hel-løp-decoupling bra ut (10) — modellen belønner en rolig avslutning og straffer en hard, uansett hva planen var.

3. pace_okonomi bruker en forholdsmodell (fart × HR/anker) som antar at puls er proporsjonal med fart gjennom origo. Det er den ikke — og v3 bruker allerede LT-linjen (LT1→LT2) for intervaller. To ulike økonomimodeller i samme system gir to ulike svar på samme spørsmål. aerob og pace_okonomi er dessuten to blikk på samme tall (cruise-HR), til sammen 55 % av L1-vekten.

4. Decoupling måles på hele løpet og uten vær. Strukturerte økter forurenser den (06.09: 3,4 % hel-løp mot −0,05 % inne i HM-blokken; 07.08 6-5-4-3-2-1: 6,58 % → 3). Varme gjør det samme (05.07: 24,9 °C, 6,47 % → 3; 11.07: 20 °C / 81 %, 6,56 % → 3) — tre 33 km-turer i sommervarme mistet ~1,4 poeng hver på en komponent som beskriver været. Mangler decoupling (10.01, ingen GPS) → 5, altså straff for manglende data.

5. Distanse er absolutt, ikke mot plan. En planlagt 20 km-langtur får 7 på distanse uansett hvor perfekt den er; praktisk tak ≈ 9,0 (14.08: 20,0 km, aerob 10, decoupling 9 → 8,7). En 35 km starter 0,75 poeng høyere før noe er vurdert. Etter prinsippet «skåren gjenspeiler hvor nøyaktig jeg gjennomførte økta» skal distanse måles mot det som var planlagt.

6. Progresjon belønner høy puls. L3 gir 10 bare hvis avslutningspulsen når LT2 (170). 18.07 (157 → 9) og 01.08 (164 → 9). En progressiv avslutning på MP med puls 157 er bedre enn med 170 — komponenten er økonomiprinsippet snudd på hodet. (18.07 var dessuten «2 × 3000 @ 4:07 + lang nedjogg», ikke en progresjonstur — formatdeteksjon `auto` klassifiserte den som L3.)

7. Ingen forskrivnings-komponent. Beskrivelsene inneholder forskrivningen («4 x 5 km @ 4:04-4:03-4:01-3:59», «5-4-3-2-1 km @ 4:12-4:06-4:01-3:58-3:57 / 1 km flyt @ 4:40-4:35-4:30-4:25», «Del 2 av maraton på 3:00»), men `target_pace` er null på 25 av 27 og ingenting måler om segmentene ble truffet. L4-intensitet måles mot periode-MP, ikke mot det økta ba om: 06.09 var forskrevet 4:15 og løpt 4:15 → «+10 s mot MP» → 9, ikke 10.

8. Økonomi i kvalitetsblokken skåres ikke. Puls mot LT-linjen ved MP-fart (v3s `hr_cost`), laktat på langtur (måles ofte) — ingen av delene inngår. 30.08: 161 ved 4:02 (forventet ≈ 164) er økonomi som ikke telles.

9. Tier-etikettene kolliderer med intervall (Sterk/Solid/OK mot Eksepsjonell/Sterk/Solid), og «Under forventning» finnes ikke på intervall-skalaen.

3.5 Forslag: «langtur v2»

Samme to søyler som v3: eksekusjon (gjorde du det som var planlagt) og økonomi (hva kostet det). Vektene under er startpunkt.

KomponentA (L1/L2)B/C (L3–L5)Måler
**distanse_vs_plan**0,200,15utført / planlagt km (plan fra treningsplan/blokk eller deklarert i beskrivelsen); ≥ 97 % → 10, ≥ 92 % → 9, ≥ 85 % → 7,5, ellers 6. Ingen plan → dagens absolutt-stige, flagget
**struktur_troskap**0,25per segment: fart mot forskrivning (parset fra beskrivelsen — dataene finnes), toleranse ±4 s/km per km-segment; 06.09 → 10, 13.02 → 10, 30.08 → 10
**cruise_jevnhet**0,15km-fart-CV i cruise, terreng-justert; erstatter ikke noe, men gir A-økter en eksekusjonskomponent
**completion**0,10segmenter utført / forskrevet
**aerob_kost**0,300,15 (0,05 når kvalitet ≥ 50 % av distansen)cruise-HR mot LT-linjen ved cruise-fart (`expected_hr_at_pace`, samme som v3), *lavere = bedre*; erstatter både aerob og pace_okonomi
**decoupling**0,200,10kun på *cruise-blokker* ≥ 5 km (første mot siste halvdel av hver blokk), vær-justert (+1 pp toleranse per 5 °C over 15 °C; fuktighet ≥ 80 % flagges); mangler → komponent utgår, ikke 5
**kvalitet_kost**0,15HR i kvalitetssegmentene mot LT-linjen ved segmentfarten, *lavere = bedre* (v3s hr_cost)
**laktat_kost**0,15 hvis målt0,10 hvis måltmot forventet ved farten (< LT1-verdi på cruise, ≤ MP-bånd i blokk)

Vektene normaliseres over komponentene som finnes. Progresjon (C) blir struktur_troskap (fart-progresjonen som forskrevet) + kvalitet_kost i avslutningen — ikke «puls ≥ LT2».

Cruise-definisjon (det viktigste enkeltgrepet): km-lapper som (a) ikke er drag, (b) ikke er flyt (km mellom to drag med < 2 km avstand), (c) ikke er oppvarming/nedjogg (første/siste km når økta har deklarert eller sammenslått struktur, eller når farten der er > 15 % tregere enn cruise-medianen), og (d) for hall-økter uten km-lapper: avled per-km fra streamens distanse så dragene faktisk ekskluderes.

Tiers: én skala for hele systemet (intervallens, med v3-kompresjonen ≥ 9,4 / ≥ 8,5 / ≥ 7 / ≥ 5,5).

Hva som ville skjedd med problem-øktene (kvalitativt — ikke beregnet, ikke lagret): 31.01 og 28.02 får aerob målt på ekte cruise (≈ 135–140) → ≈ +1,4 poeng (aerob 3 → 10 på vekt 0,2), fra 7,8/7,2 til 9,2/8,6; 13.02 med flyt ekskludert og struktur_troskap 10 → fra 8,0 til ≥ 9; 06.09 med oppvarming/nedjogg ute av cruise, struktur_troskap 10 på 4:15 og blokk-decoupling −0,05 % → fra 8,2 opp; 05.07/11.07 med vær-justert decoupling → ≈ +1,4 (decoupling 3 → 10 på vekt 0,2), fra 8,3 til ~9,7; 14.08 (planlagt 20 km) → distanse_vs_plan 10 i stedet for 7. 30.08 og 25.07 (9,5) forblir der de er — de er riktig skåret i dag.

Trinnvis: (1) cruise-definisjonen og hall-per_km alene retter 31.01/28.02/13.02/06.09 uten å endre modellen; (2) LT-linje-økonomi erstatter aerob + pace_okonomi; (3) forskrivnings-parser + struktur_troskap; (4) blokk-decoupling + vær; (5) distanse mot plan; (6) tørrkjøring over alle 35 langturer 2026 (oppgave 17 fra 27.08 er allerede en tørrkjørings-rigg) før noe aktiveres.


Del 4 — Løpsskåren (lagt til 09.09 etter Carls påpekning)

Rettelse: i første utgave sto det at løp ikke har noen skårer. Det er feil. Løp skåres av `_race_helpers.score_race` (kalt fra `race_auto_score.py` / `build_race_index.py`), og skårene ligger i `data/processed/race_index.json` med frys i `data/static/race_scores_lock.json`. Det jeg så, var intervall-pipelinens speil av løpene i `quality.json` — og der er tallene fabrikkerte. Begge deler er beskrevet under.

4.1 Hvor løpsskårene ligger — og hva de tre flatene viser

FlateBerlin HM 29.03 (1:21:19)Energimila 12.08 (36:43)
`race_index.json` / hubbens løpstabell / `Races/*_dashboard.html`**8,9** «Sterk — over forventning» (`score_source: execution_md`, frosset 10.07) · auto `score_race` **9,2****7,9** «Solid — på linje med form» (`auto_pacing`, ikke frosset)
`quality.json` (intervall-pipelinen)`session_score` **6,0** = fallback 5,0/7,0`session_score` **null**
`Sessions/2026/*_session.html` (økt-siden)«Score 4 … Score-systemet behandler den som langtur, ikke race … Total · SOLID 6»«INGEN SKÅR · Tag: ? · Tag-resolusjon feilet»

Hubben viser altså riktig tall; økt-siden for samme dag viser søppel. Og Berlin har to skårer: 8,9 fra den manuelt skrevne dypanalysen (bygget på offisielle 5-km-passeringer 19:30-19:22-19:21-18:59: Δ −5,1 s/km, CV 2,4 %) og 9,2 fra auto-skåreren (GPS-km: Δ −3,4, CV 1,4 %). Forskjellen på 0,3 er målegrunnlag, ikke prestasjon — og det er den manuelle som er frosset.

4.2 Modellen (`score_race`)

Additiv 10-poengsskala, distansebevisste terskler:

KomponentMaksMålerFull pott ved
pacing_strategy2,5fart andre halvdel − førsteM: −4…+2 s/km · HM: −6…0 · **10 km: −12…−2**
pacing_consistency1,5CV over km-splitter (GPS, ikke høydejustert)M < 2,5 % · HM < 2,0 % · 10 km < 1,5 %
hr_control1,5HR-drift Q1 → Q4< 5 bpm (1,3 ved < 12; 0,8 ved < 20; 0,3 ved < 30)
finish_strong1,0siste 25 % mot første 75 %≤ 0 s/km
time_outcome2,5tid mot **PB i kategorien** (mål-pace bare hvis ingen PB)≤ +0,5 % av PB (2,1 ved ≤ 2 %; 1,5 ved ≤ 5 %; 1,0 ved ≤ 10 %)
pb_leap_bonus0,7størrelse på PB≥ 5 % (0,4 ved ≥ 3 %; 0,2 ved ≥ 1 %)
difficulty_bonus1,0vind ≥ 5/8 m/s, temp ≥ 20/25 eller ≤ 0 °C, kupert — **bare hvis utfall ≥ 1,0**

Sum 10,7 → cappet 10. HR upålitelig → HR-komponenten ut og total × 10/9. Tiers: ≥ 9,5 Eksepsjonell · ≥ 8,5 «Sterk — over forventning» · ≥ 7,5 «Solid — på linje med form» · ≥ 6,5 «Godkjent — ett tydelig mønster kostet tid» · ≥ 6 «Akseptabel — flere mindre feil» · ≥ 5 «Pacingfeil» · ellers «Alvorlig feil».

4.3 De to løpene i 2026, komponent for komponent

KomponentBerlin HM (auto 9,2)Energimila (7,9)
pacing_strategy2,5 — Δ −3,4 «sweet spot for HM»**2,2** — Δ −1,8 «jevn» (10 km-modellen vil ha −2 til −12)
pacing_consistency1,5 — CV 1,4 %**1,2** — CV 1,9 % (de to «trege» km er løypas to bakker, 6–7 hm hver; sluttspurten 3:30 står for over halve variansen)
hr_control1,3 — +6 bpm**0,8** — +13 bpm mellom første og siste kvartdel (åpningskilometeren 155, maks 179 — innsatskurven i et 10 km-løp)
finish_strong1,0 — −5,4 s/km1,0 — −1,7 s/km (siste km 3:30)
time_outcome2,5 — PB −4,0 %2,5 — PB −1,9 %
pb_leap_bonus0,40,2
difficulty_bonus0 — 3,9 °C, 3,1 m/s = «lette/normale forhold»0 — 12,9 °C, 3,2 m/s

Energimila 36:43 — PB med 41 s, negativ split, siste km 3:30, snittpuls 172 (93 % av maks), 17 s under det deklarerte målet sub 37:00 — får nøyaktig samme skår og komponenter som fjorårets 37:24, og tier-teksten «på linje med form». Sommernattsløpet 2025 (38:26, 374 WA-poeng) fikk 9,2. Energimila 2026 (36:43, 469 WA-poeng) fikk 7,9. Modellen måler pacing-form, ikke prestasjon, men tier-tekstene lover en form-sammenligning den ikke gjør.

4.4 Svakhetene

1. Utfall måles bare mot PB. Mål (carl.json `targets_2026`: Energimila sub 37:00, target_s 2220), modellprediksjon (`race_predictions.json`: dagen før Berlin sa modellen 1:25:16 — Carl løp 4,6 % fortere) og WA-poeng (`wa_points` stemples på hvert løp) finnes i systemet, men ingen av dem brukes. Konsekvens: et 10 km i maratonblokk på 37:30 som treffer modellen får 1,5/2,5 og «Godkjent — ett tydelig mønster kostet tid», en tier-tekst som påstår en feil ingen komponent har funnet. Og «på linje med form» settes uten at formen er målt: Energimila 469 WA mot 484 (Berlin) / 485 (Frankfurt) — 484 WA tilsvarer 36:28 på 10 km, så 36:43 var 0,7 % under toppformen, i maratonblokk uten taper. Det er «på linje med form», og det kan modellen faktisk si hvis den bruker tallene.

2. hr_control straffer innsatskurven. På 10 km og HM skal pulsen stige fra 85 % til 95 % gjennom løpet; +13 bpm Q1→Q4 er et maksimalt 10 km-løp, ikke tap av kontroll. Komponenten ble laget for maraton (tidlig drift som varsel om kollaps). Den er anti-korrelert med god eksekusjon på kortere distanser: Nidaros 24.05.2024 (positiv split +15,6 s/km, kollaps) fikk 1,5/1,5 for «meget stabil HR (+1 bpm)» — pulsen flatet ut fordi farten falt.

3. 10 km-sweet-spot krever negativ split på 2–12 s/km. Et jevnt løp i tog (−1,8) taper 0,3. Jevn pacing er det vanligste optimum på 10 km når man ikke løper alene; kravet er strengere enn for HM (−6…0) uten fysiologisk grunn.

4. Konsistens på GPS-km uten høydejustering, og med sluttspurten inne. Energimilas CV 1,9 % blir ≈ 1,6 % med bakkekilometerne justert og 0,6 % når siste km (3:30-spurten) holdes utenfor — komponenten straffer altså en spurt som en annen komponent (finish_strong) belønner. Grensen for «meget jevn» er 1,5 %. Berlin: den frosne skåren bruker offisielle 5-km-splitter, auto-skåren GPS-km; ingen felt sier hvilket grunnlag som gjelder.

5. Vanskelighetsbonus er portet på utfall ≥ 1,0. Dårlige forhold teller bare når det gikk bra — det er baklengs; forhold forklarer først og fremst langsomme tider. Tersklene (≥ 20 °C, ≥ 5 m/s) gjør at 3,9 °C med 11 km/t vind er «lette/normale forhold».

6. To skårer per løp (manuell MD mot auto), ulikt grunnlag, den manuelle frosset og ikke reproduserbar; auto-tallet ligger ved siden av som `score_race`. Frankfurt: 9,4 manuell / 9,2 auto. Trondheim HM 2025: 8,3 / 7,7. Hvilket tall er «skåren» avhenger av hvem som spør.

7. «5k-split fra EnergiMila 2025» ligger som eget løp i `races.json` (6,2, «innen 10 % av PB»). Den forurenser snitt og kategori-PB for «kort».

8. Intervall-pipelinen fabrikkerer. `quality.json`-oppføringen for Berlin har 6,0 (5,0/7,0), Energimila null; økt-sidene viser dette. Intervall-pipelinen bør enten lese `race_index` eller la feltet stå tomt med lenke til løps-dashboardet — aldri en fallback.

4.5 Forslag: «løp v2»

Tre søyler, samme filosofi som resten: utfall mot det som var forventet, eksekusjon mot planen, og en kvittering for at det var et løp. Forhold brukes til å justere forventningen, ikke som bonuspoeng.

SøyleMaksKomponenter
**Utfall**4,0 (+0,5 PB-bonus, total cappet 10)tid mot **forventning** = deklarert mål i carl.json når det finnes, ellers modellprediksjon dag −1, ellers WA-form (beste WA-poeng siste 12 mnd omregnet til distansen). ≤ −2 % → 4,0 · ≤ −0,5 % → 3,5 · ≤ +0,5 % → 3,0 · ≤ +2 % → 2,0 · ≤ +4 % → 1,0 · ellers 0,5. Forventningen justeres for forhold (temp ≥ 18 °C: +1 % per 3 °C; vind ≥ 4 m/s: +0,5–1 %; stigning ≥ 1 %: +1 %). PB-bonus 0,2/0,4/0,5 for ≥ 1/3/5 % som i dag. **WA-form vises alltid som tekst** («469 WA — 0,7 % under toppform 484») og styrer tier-teksten «på linje med form»
**Eksekusjon**4,5strategi 1,5 (M −4…+2, HM −6…0, **10 km −8…+1**; plan i beskrivelsen overstyrer kategori-idealet) · jevnhet 1,0 (høydejusterte km, siste km unntatt; offisielle passeringer når de finnes, og `split_basis` lagres) · avslutning 1,0 (siste 25 % mot første 75 %, høydejustert) · kollaps-vakt 1,0 (ingen km i siste tredjedel > +8 s/km mot snitt; det er *denne* som skal fange Nidaros 2024, ikke HR)
**Innsats-kvittering**1,5snittpuls som andel av maks: 10 km ≥ 90 % · HM ≥ 85 % · M ≥ 80 % → 1,5; under → 1,0 og flagg «B-løp?» (`effort_b`). Maraton beholder i tillegg tidlig-drift som varsel (Q1→Q3 > 12 bpm → −0,5). **Ingen drift-komponent på 10 km/HM.** HR upålitelig → komponent utgår, vektene normaliseres (ikke × 10/9 av en annen sum)

Tiers harmoniseres med resten av systemet (≥ 9,4 / ≥ 8,5 / ≥ 7 / ≥ 5,5), og tier-teksten får bare påstå en årsak («… kostet tid») når kollaps-vakten eller strategi-komponenten faktisk har trukket. Én skår per løp: auto-skåreren på det grunnlaget som lagres i `split_basis`; dypanalysen siterer den. Bakover-kompatibilitet: dagens `score_race` beholdes som `score_race_v1` i `race_index` så historikken ikke mister tallene.

Illustrasjon (for hånd, ikke beregnet av kode, ikke lagret):

Berlin HMEnergimila
Utfallforventning: mål ikke lagret for Berlin (bør inn i carl.json) → modell dag −1 1:25:16 → **−4,6 % → 4,0** · PB-bonus 0,4 · WA 484 = toppformmål sub 37:00 → **−0,8 % → 3,5** · PB-bonus 0,2 · WA 469 = 0,7 % under toppform → «på linje med form»
Eksekusjonstrategi 1,5 · jevnhet 1,0 · avslutning 1,0 · kollaps-vakt 1,0 → **4,5**strategi 1,5 (−1,8 innenfor −8…+1) · jevnhet 1,0 (0,6 % høydejustert, uten spurtkilometeren) · avslutning 1,0 · kollaps-vakt 1,0 → **4,5**
Innsats87 % av maks på HM → **1,5**93 % på 10 km → **1,5**
**Sum****10,0 (cappet)** → Eksepsjonell**9,7** → Eksepsjonell

Begge løpene ender altså i toppsjiktet — som de skal: to PB-er med negativ split, sterk avslutning og maksimal innsats. Forskjellen mellom dem (0,3) kommer fra PB-størrelse og avstand til forventning, ikke fra pulsdrift på 10 km. Kalibreringen (om 36:43 i maratonblokk skal være 9,7 eller 9,3) er din — men den bør avgjøres av utfall-trinnene, ikke av at modellen ikke ser mål, form og forhold.

Det som må ryddes: (1) lagre deklarert mål per løp i carl.json også bakover (Berlin mangler); (2) `split_basis` og én skår per løp; (3) fjern «5k-split»-oppføringen fra `races.json` (behold som `split_pr` på moderløpet); (4) intervall-pipelinen leser `race_index` for `quality_type == race` i stedet for fallback; (5) tørrkjør løp v2 på alle 33 skårbare løp 2019–2026 før noe fryses på nytt.


Del 5 — Hva som IKKE er gjort, og hva du må avgjøre

Ikke gjort: ingen økt og ingen løp er re-skåret, ingen lås/frys er rørt, ingen skårer er endret. Det eneste nye i repoet er `scripts/experiments/score_v3kort_prototype.py` (leser, skriver aldri) og fem JSON-filer under `data/experiments/`. Hubben og ukesevalen er uendret.

Avgjørelser som ligger hos deg:

1. v3 som standard for pace-tagger (`SCORER_V3=1` i sync) — med eller uten tier-kompresjon (≥ 9,4 / ≥ 8,5). Ubesvart siden 08.09.

2. v3-kort: godkjenne designet i 2.3 → jeg implementerer, bygger Carl-baselinen for 400 m fra arkivet, tørrkjører alle 81 kortdrags-økter 2020–2026 og legger fram tallene før noe slås på.

3. Langtur v2: godkjenne retningen i 3.5 — eller bare trinn 1 (cruise-definisjonen), som er en ren feilretting og kan tørrkjøres alene.

4. Tag-hygiene for 400-meterne og `vo2max`-taggen (2.5 pkt 1) — dette bør gjøres uansett.

5. Løp v2 (del 4.5): godkjenne retningen — utfall mot mål/modell/WA-form, ingen drift-komponent på 10 km/HM, én skår per løp — og rydde `quality.json`-speilingen så økt-sidene viser løpsskåren i stedet for fallback.

6. Re-skåring av historikk: hvis du vil at 31.01, 28.02, 13.02, 11.02, 01.07 osv. skal riktig skår og ikke bare stå i en rapport, må du oppheve regelen «ikke endre tidligere økter» eksplisitt per økt (`unlock_session.py --aid --reason`). Jeg gjør ikke det på eget initiativ.

Fortsatt åpent fra før: K6-port mot lab-LT2 før København 13.09/20.09, W36-tilleggsrader, W35 `justified`-klassifisering, `pct_quality_km_in_zone` på 2000-metere, `pace_steady_state_s`-feilplassering (07.01, 19.01, 11.03).

Skåring v3 — tørrkjøring 2026Hva: Skåring v3 (utførelse + økonomi) tørrkjørt på alle 2026-økter, uten å røre frosne skår.
Konklusjon: v2 straffet økonomisk løping; v3 belønner lav puls og laktat på forskrevet fart — forløperen til Skåring 2.0.
2026-09-08
#skåring#v3#økonomi#tørrkjøring

Skåring v3 — eksekusjon + økonomi: dry-run over 2026

Dato: 2026-09-08 · Status: FORSLAG. v3 er anvendt på én økt (08.09.2026). Alle andre økter er urørt og frosne. Denne rapporten viser hva de ville fått.

Kilde: `scripts/experiments/score_v3_dryrun.py --year 2026` → `data/experiments/score_v3_dryrun_2026.json`


1. Bakgrunn — hva som var galt

Carl-instruks 08.09: «Skåren må gjenspeile hvor nøyaktig jeg gjennomførte økta, og samtidig belønne når jeg løper økonomisk, med lav HR og lav laktat. En god dag bør belønnes fremfor å straffes.»

v2 legger 50 % av eksekusjonsvekten på to komponenter som spør om pulsen lå i taggens HR-bånd, scoret tosidig. For en økt forskrevet på fart er det baklengs: puls under båndet på riktig fart er økonomi, ikke underlevering. Målt over 66 intervalløkter i 2026:

HR-posisjon mot båndetnSnittskår v2Snitt eksekusjon
Under24**7,85****7,52**
I båndet388,768,72
Over26,505,70

Det tydeligste enkelttilfellet: 16.03 @ 3:50, puls 165,5, laktat 3,9 (over terskel) skåret 8,8. 08.09 @ 3:51, puls 157,7, laktat 2,2 skåret 7,3. Den dyre dagen slo den billige med 1,5 poeng.

En underliggende feil kom i tillegg: `pct_quality_km_in_zone` måler puls per kilometer, og på 2000-metersdrag fra stående pause er første kilometer per definisjon ramp-up. Koden hopper over komponenten for 1000-metersdrag av nøyaktig den grunnen — men bruker den for 2000-metersdrag, der samme forurensning er halve datagrunnlaget.

2. Hva v3 er

Gjelder kun pace-forskrevne tagger: `terskel`, `over_terskel`, `aerob`, `mp_pace`. HR-forskrevne økter (`vo2max`, `45_15_`, `r_pace_kort`, `bakkeintervall`) beholder v2 — der er* pulsen målet.

KomponentVektMåler10 ved
**pace_target**0,20snittavvik per drag fra forskrivning (rampe eller flat)≤1 s/km
**pace_evenness**0,15spenn raskeste–tregeste drag (utgår ved rampe/progresjon/sammensatt)≤2 s/km
**completion**0,15utførte drag / forskrevne100 %
**hr_cost**0,20steady-puls mot labbens LT1→LT2-linje ved farten, *lavere = bedre*≤−8 bpm, bekreftet av laktat
**laktat_cost**0,10målt mot taggens bånd, *lavere = bedre* (utgår hvis ikke målt)under båndets gulv
**inter_rep_drift**0,10steady drag 1 → siste (utgår ved progresjon)≤+2 bpm
**hr_recovery**0,10fall på 60 s i pausene, **kalibrert på Carls fordeling** (median 52)≥60 bpm

Vektene normaliseres over de komponentene som finnes. Kombinert = eksekusjon × 0,7 + kontekst × 0,3, samme tiers som v2.

Fem vern:

1. `hr_cost` ≤−8 gir 10 kun når målt laktat ligger i taggens bånd. Uten laktat er taket 9, og ≤−10 flagges «sjekk pulsbelte». Belte-dropout skal ikke belønnes.

2. Er målt laktat over taggens bånd, kan `hr_cost` ikke gi mer enn 7. Den direkte målingen vinner over proxyen i begge retninger.

3. Uten forskrivning i strukturen er eksekusjonstaket 8,5 — uten målestokk kan man ikke hevde nøyaktighet.

4. HR-upålitelige økter mister HR-komponentene og får tak 8,5 (som v2).

5. Drag-fart leses fra Strava-lappen, ikke `pace_steady_state_s`. Sistnevnte viste seg feil-lokalisert på flere 2026-økter (19.01: lapp 3:55, steady 3:41).

`hr_recovery` var i v2 en konstant: terskelen for 9,5 er ≥30 bpm, og 85 % av Carls økter ligger over. Rekalibrert til p10 13 · median 52 · p90 63.

3. Resultat over 2026

55 økter dekkes av v3. 12 økter beholder v2 (HR-forskrevne tagger eller manglende tag).

v2**v3**
Snitt8.54**8.86**
Standardavvik0.76**0.56**
≥9,0 Eksepsjonell21**25**
8–9 Sterk2327
6–8 Solid103
<610
≥9,438

Δ per økt: snitt +0.32 · median +0.20 · min -0.6 · maks +1.8. Opp ≥0,3: 24 · ned ≤−0,3: 7 · uendret: 24.

Retningen er riktig: korrelasjonen mellom skår og HR-avvik fra forventet går fra r = −0,21 (v2) til −0,36 (v3) — lavere puls gir tydeligere høyere skår. Og paret som utløste kritikken snur: 16.03 (dyr dag) 8,8 mot 08.09 (billig dag) 9,7.

Prisen er kompresjon. Spredningen krymper med en fjerdedel, og 45 % av øktene lander på Eksepsjonell. Se §6.

4. Full tabell

Avvik = steady-puls minus labbens forventning ved farten (negativ = økonomisk). ‼ = v3-flagg. !HR = puls flagget upålitelig.

DatoØktTagFartSteady-pulsForventetAvvikLaktatv2**v3**Δ
01-01!HR 8 x 1000terskel3:48158.0168.4-10.48.0**8.7**+0.7 ‼
01-05MandagsTOSKterskel3:53162.83.97.6**7.0**-0.6
01-07OnsdagsTOSKover_terskel3:45166.9173.3-6.44.78.9**8.7**-0.2
01-12MandagsTOSKterskel3:55166.9169.0-2.18.6**9.1**+0.5
01-14OnsdagsTOSKterskel3:59162.2166.6-4.48.7**8.7**+0.0
01-19MandagsTOSKterskel3:55165.8172.3-6.59.0**9.1**+0.1
01-21OnsdagsTOSKterskel3:55164.6170.0-5.39.0**8.7**-0.3
01-273 x 12 minterskel3:55169.6168.8+0.77.5**8.7**+1.2
02-02MandagsTOSKover_terskel3:32153.6178.4-24.88.5**8.8**+0.3 ‼
02-04OnsdagsTOSKterskel3:50162.8172.6-9.83.48.8**8.8**+0.0
02-09MandagsTOSKterskel3:52164.9169.9-5.08.9**9.0**+0.1
02-183 x 12 minover_terskel3:54167.7167.7+0.08.2**8.9**+0.7
02-25OnsdagsTOSKterskel3:55159.2168.6-9.47.4**8.9**+1.5
03-04OnsdagsTOSKterskel3:50160.8172.1-11.22.28.7**9.6**+0.9
03-09MandagsTOSKterskel3:50163.5170.9-7.42.69.2**9.6**+0.4
03-11OnsdagsTOSKterskel3:50163.1171.5-8.42.79.5**9.4**-0.1
03-16MandagsTOSKterskel3:50165.5170.8-5.23.98.8**8.8**+0.0
03-18OnsdagsTOSKterskel3:54163.1168.9-5.82.59.2**9.5**+0.3
03-23MandagsTOSKterskel3:55163.1170.2-7.12.28.5**9.2**+0.7
03-254 x 1000terskel3:52160.9168.8-7.99.4**9.6**+0.2
04-13MandagsTOSKterskel4:15158.6157.0+1.67.2**7.4**+0.2 ‼
04-253 x 10 minaerob4:17163.2160.6+2.76.9**8.7**+1.8 ‼
04-283 x 2000terskel3:53166.1167.3-1.38.8**9.2**+0.4
04-304 x 1000terskel3:58170.1165.7+4.55.6**7.1**+1.5
05-11MandagsTOSKaerob4:10154.3161.3-7.02.49.1**8.8**-0.3
05-13OnsdagsTOSKterskel4:00160.1165.2-5.13.97.9**8.2**+0.3
05-20OnsdagsTOSKterskel3:58160.3165.6-5.22.09.2**9.2**+0.0
05-254 x 2000terskel3:58164.0166.2-2.29.1**9.2**+0.1
05-27OnsdagsTOSKterskel3:52164.1167.0-2.99.5**9.2**-0.3
06-01MandagsTOSKterskel3:50168.0173.0-5.08.3**8.1**-0.2
06-03OnsdagsTOSKterskel3:55163.7167.3-3.72.99.3**8.9**-0.4
06-085 x 5 minaerob4:10155.5161.2-5.78.6**9.0**+0.4
06-08MandagsTOSKterskel3:55161.5166.7-5.23.87.7**8.8**+1.1
06-10OnsdagsTOSKterskel3:52161.8168.4-6.69.3**9.3**+0.0
06-156 x 5 minaerob4:10154.8160.6-5.79.2**9.2**+0.0
06-17OnsdagsTOSKterskel3:50162.5168.7-6.23.38.9**8.4**-0.5
06-262 x Wildseeterskel4:00164.0163.2+0.88.6**8.1**-0.5
07-043 x 12 minaerob3:46158.2170.3-12.17.5**8.6**+1.1 ‼
07-074 x 2000terskel3:53163.9167.4-3.58.0**8.9**+0.9
07-0910 x 1000 🇮🇹terskel3:48160.2169.2-9.17.2**8.2**+1.0
07-145 x 2000terskel3:55166.2166.7-0.59.0**9.1**+0.1
07-178 x 1000over_terskel3:42169.5171.8-2.34.29.0**8.7**-0.3 ‼
07-205 x 2000terskel3:52160.8167.8-7.02.97.8**9.3**+1.5
07-236 x 1000 🔥terskel3:39166.7174.8-8.18.6**8.8**+0.2
07-27MandagsTOSKterskel3:49161.3167.9-6.63.48.1**8.5**+0.4
07-296 x 5 minaerob4:10155.4160.0-4.69.0**9.2**+0.2
07-29OnsdagsTOSKterskel3:50159.1169.1-9.92.79.0**9.7**+0.7
08-05OnsdagsTOSKover_terskel3:42168.8171.8-3.03.89.2**9.0**-0.2
08-17MandagsTOSKterskel3:50164.1169.4-5.22.59.2**9.5**+0.3
08-195x6 minaerob4:10155.9159.7-3.89.2**9.2**+0.0
08-1910 x 1000terskel3:44160.5170.5-10.08.3**8.9**+0.6 ‼
08-24!HR MandagsTOSKterskel3:482.78.8**8.8**+0.0
08-265 x 6 minaerob4:10150.7161.0-10.39.2**9.0**-0.2
09-034 x 2000terskel3:50166.1169.3-3.13.68.8**8.6**-0.2
09-085 x 2000 👷‍♂️terskel3:51157.7168.1-10.32.28.2**9.7**+1.5

5. Økter det er verdt å se på

Størst løft

  • 04-25 3 x 10 min (aerob, 4:17): 6.9 → 8.7. HR-avvik +2.7, laktat —. Komponenter: pace_evenness 9.0 · completion 10.0 · hr_cost 7.0 · inter_rep_drift 10.0 · hr_recovery 8.0
  • 07-20 5 x 2000 (terskel, 3:52): 7.8 → 9.3. HR-avvik -7.0, laktat 2.9. Komponenter: pace_target 10.0 · pace_evenness 10.0 · completion 10.0 · hr_cost 9.0 · laktat_cost 8.0 · inter_rep_drift 10.0 · hr_recovery 10.0
  • 02-25 OnsdagsTOSK (terskel, 3:55): 7.4 → 8.9. HR-avvik -9.4, laktat —. Komponenter: pace_target 9.5 · pace_evenness 8.0 · completion 10.0 · hr_cost 9.0 · inter_rep_drift 7.5 · hr_recovery 9.0
  • 04-30 4 x 1000 (terskel, 3:58): 5.6 → 7.1. HR-avvik +4.5, laktat —. Komponenter: pace_target 9.5 · pace_evenness 6.5 · completion 4.0 · hr_cost 5.5 · inter_rep_drift 9.0 · hr_recovery 8.0
  • 09-08 5 x 2000 👷‍♂️ (terskel, 3:51): 8.2 → 9.7. HR-avvik -10.3, laktat 2.2. Komponenter: pace_target 10.0 · pace_evenness 10.0 · completion 10.0 · hr_cost 10.0 · laktat_cost 9.5 · inter_rep_drift 9.0 · hr_recovery 10.0
  • 01-27 3 x 12 min (terskel, 3:55): 7.5 → 8.7. HR-avvik +0.7, laktat —. Komponenter: pace_target 9.0 · pace_evenness 10.0 · completion 10.0 · hr_cost 7.0 · inter_rep_drift 9.0 · hr_recovery 8.0
  • 06-08 MandagsTOSK (terskel, 3:55): 7.7 → 8.8. HR-avvik -5.2, laktat 3.8. Komponenter: pace_target 9.5 · pace_evenness 10.0 · completion 10.0 · hr_cost 7.0 · laktat_cost 6.0 · inter_rep_drift 9.0 · hr_recovery 9.0
  • 07-04 3 x 12 min (aerob, 3:46): 7.5 → 8.6. HR-avvik -12.1, laktat —. Komponenter: completion 10.0 · hr_cost 9.0 · hr_recovery 8.0

De største løftene er nettopp øktene med puls klart under forventet: 25.02, 20.07, 08.09, 09.07 (Italia, varme). Det er mønsteret Carl beskrev fra februar/mars.

Unntakene: 25.04 (3×10 min aerob, puls +2,7 over forventet) løftes fra 6,9 til 8,7. v2 straffet den for puls over aerob-båndets tak på 160; v3 gir `hr_cost` 7 og tak 8,5 på eksekusjon fordi strukturen mangler forskrivning. Det er trolig riktigere enn 6,9, men «Sterk» for en litt dyr dag uten fartsmål er raust. 30.04 (8 planlagt, 4 gjennomført, puls +4,5) går fra 5,6 til 7,2 — halvferdig økt på dårlig dag, avbrutt fornuftig; 7,2 «Solid» virker rimeligere enn 5,6 «Akseptabel».

Størst fall

  • 01-05 MandagsTOSK (terskel, 3:53): 7.6 → 7.0. HR-avvik —, laktat 3.9. Komponenter: pace_target 4.5 · completion 10.0 · hr_cost 7.0 · laktat_cost 4.0 · hr_recovery 4.0
  • 06-17 OnsdagsTOSK (terskel, 3:50): 8.9 → 8.4. HR-avvik -6.2, laktat 3.3. Komponenter: pace_target 10.0 · completion 10.0 · hr_cost 7.0 · laktat_cost 6.0 · hr_recovery 9.0
  • 06-26 2 x Wildsee (terskel, 4:00): 8.6 → 8.1. HR-avvik 0.8, laktat —. Komponenter: pace_target 7.5 · pace_evenness 5.0 · completion 10.0 · hr_cost 8.0 · inter_rep_drift 10.0 · hr_recovery 9.0
  • 06-03 OnsdagsTOSK (terskel, 3:55): 9.3 → 8.9. HR-avvik -3.7, laktat 2.9. Komponenter: pace_target 9.5 · completion 10.0 · hr_cost 8.0 · laktat_cost 8.0 · hr_recovery 8.0
  • 01-21 OnsdagsTOSK (terskel, 3:55): 9.0 → 8.7. HR-avvik -5.3, laktat —. Komponenter: pace_target 10.0 · completion 10.0 · hr_cost 8.0 · hr_recovery 8.0

Fallene er små (maks −0,6) og skyldes laktat over båndet (05.01, 11.05) eller puls over forventet linje (26.06 «Wildsee» — trolig terreng linja ikke passer for).

Flagget av v3

  • 01-01 8 x 1000: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte
  • 02-02 MandagsTOSK: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte
  • 04-13 MandagsTOSK: ingen forskrivning i strukturen — eksekusjon tak 8,5
  • 04-25 3 x 10 min: ingen forskrivning i strukturen — eksekusjon tak 8,5
  • 07-04 3 x 12 min: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte; ingen forskrivning i strukturen — eksekusjon tak 8,5
  • 07-17 8 x 1000: ingen forskrivning i strukturen — eksekusjon tak 8,5
  • 08-19 10 x 1000: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte

6. Det som må avgjøres

A. Tiergrensene. v3 gir Eksepsjonell til 25 av 55 økter. Enten aksepteres det — en godt trent løper som leverer forskrivningen nøyaktig på gode dager er eksepsjonell mesteparten av tiden, og innenfor en blokk der forskrivningene står stille mens formen stiger skal skåren stige (det er modellen som sier «hev forskrivningene») — eller v3 får egne grenser. Forslag: Eksepsjonell ≥9,4 · Sterk ≥8,5 · Solid ≥7,0. Da blir det 8 Eksepsjonell (15 %). Jeg har ikke endret tiers; de deles med v2 og de frosne øktene.

B. Aktivering. v3 er opt-in (`SCORER_V3=1`) og har kun rørt 08.09. Skal den bli standard for nye økter fra nå? Frosne økter re-skåres uansett aldri.

C. `aerob`-taggen. Forventningslinja ekstrapoleres under LT1 og er mindre forankret der. 04.07 er tagget aerob men løpt på 3:46 — en tag-feil v3 arver og flagger (puls −12 uten laktat). Taggingen bør ryddes uavhengig av v3.

D. Strukturstrenger uten forskrivning («8 x 1000», «3 x 10 min») gir eksekusjonstak 8,5. Legges «@ fart» inn i Strava-tittelen, forsvinner taket. Kortformen «3:42-42-43» parses ikke som rampe.

E. `pace_steady_state_s` er upålitelig på flere 2026-økter (19.01, 11.03, 07.01 viser 10–15 s/km avvik fra lappen). `pipeline_health` fanger det ikke — sjekken ser bare 2023. Det påvirker `hr_steady_state` for de samme øktene, i både v2 og v3. Bør undersøkes separat.

7. Hva som IKKE er gjort

  • Ingen historisk økt er re-skåret. Dry-run-tallene ligger i JSON-en; quality.json er urørt for alle unntatt 08.09.
  • v2 er ikke endret utover lav-grace-rettelsen fra tidligere i dag (som bare rørte 08.09).
  • Tiergrensene er ikke rørt.
  • HR-forskrevne økttyper er ikke rørt.
Regelregisteret — arkitekturHva: Kan systemets regler samles ett sted og alltid være oppdatert? Kart over hvor reglene bor, og forslag til register.
Konklusjon: Ja — et register som verifiseres mot koden hver sync (drift-sikret), ikke en manuelt vedlikeholdt side.
Fable2026-07-22
#regler#regelregister#drift

Regelregister — kan systemets regler samles ett sted, alltid oppdatert?

Fable, 2026-07-22. Analyse/design — ingen kode endret, ingen data skrevet. Svar på Carls spørsmål: en egen regel-fane/visning, og en failsafe mot at den kommer i utakt. Leveranse: denne analysen + `FABLE_REGELREGISTER_PROMPT.md` (kjøres i fersk chat for implementering).

Kort svar

Ja, det er en god idé — men bare hvis visningen ikke kan komme i utakt, ellers gjenskaper den akkurat problemet du vil løse (en regel som «lever utenfor rekkevidde» er ikke bedre av å stå feil et nytt sted). En manuelt vedlikeholdt regel-side ville drevet fra hverandre på uker, akkurat som dokumentene gjør nå. Løsningen er ikke en side, men et regelregister med en verifiserings-failsafe: ett katalog-fil over reglene som betyr noe, hver med en peker til kilden sin, pluss en test i sync som leser den faktiske verdien i koden/config og roper hvis registeret har drevet fra virkeligheten. Visningen (hub-fane) rendrer registeret — så det som vises er det koden bruker.

Full «alt leses fra ett felles regelsett» er derimot ikke realistisk på kort sikt, av en grunn kartleggingen gjorde tydelig (§1): de fleste reglene er ikke rene konstanter, de er inline magiske tall spredt gjennom funksjonskropper. Du kan ikke sentralisere hundrevis av dem uten en massiv, risikabel refaktor. Den ærlige veien er registeret + failsafe nå, og gradvis migrering av «regler som betyr noe» til delte konstanter etterpå — der de nye wellness/sykdom/strain-reglene alt ligger.

1. Regel-kartet — hvor bor reglene i dag, og hvorfor føles de utenfor rekkevidde

Kartleggingen (grep over stagede scripts + docs) viser tre slag regler, med svært ulik tilgjengelighet:

(a) Inline magiske tall i kode — flertallet, verst tilgjengelig. Terskler ligger begravd i funksjonskropper: `if delta >= 5: score += 3.0` (detect_illness), `if tsb > -10:` (generate_status), drag-deteksjon, skåre-vekter, HRV/RHR-bånd. Tetthet i bare fem stagede filer: detect_illness ~37, predict_illness ~29, generate_status ~69, race_readiness ~19, morning_brief ~18 terskel-sammenligninger. Over ~125 scripts er dette hundrevis. Ikke alle er «regler» (mange er data-vakter som `len(x) >= 5`), men en meningsfull andel er ekte tunbare regler. De er umulige å se uten å lese koden — kjernen i frustrasjonen din.

(b) Config/fasit i JSON — middels tilgjengelig, maskinlesbar. `zones.json` (fysiologi per æra — LT1/LT2/soner, den store), `carl.json` (`targets_2026`), `athlete_profile.json`, `session_types.json`, `quality_overrides.json`, `race_overrides.json`, `illness_classification.json` + de nye `illness_confirmed.json`. Disse er alt sentralisert og lesbare — men spredt over mange filer og uten en samlet visning.

(c) Prosa-policyer i docs — lesbare, men drifter. ~35 regel-linjer i SYSTEM_OVERVIEW §1/§4 (ALDRI git · lock-system · TOSK stående pauser 60/90 s · immunvakt u33/u38–39 · medisin holdes utenfor), ~44 i COACH_INSTRUCTIONS (HRV/RHR/søvn-terskler, abort-kriterier). Disse er policy, ikke tall — de kan ikke reduseres til én verdi, og de er nettopp der drift skjer (COACH sa «søvn <78 = aldri vellykket» i månedsvis etter at det var motbevist).

Nyansen som avgjør designet: de siste tingene vi bygde (wellness/sykdom/strain) har rene modul-konstanter — `DEEP_MIN_CARDINAL`, `HEAT_FORKLAR_C`, `STRAIN_WINDOW=10`, `STRAIN_MIN_DISTURBED=6`, øverst i `predict_illness.py`, med kommentar. Det er nøyaktig fordi vi bygde dem bevisst. Så det finnes et spekter: ny kode har rene knotter, gammel kode har inline tall. Migrering går fra høyre mot venstre på det spekteret.

2. Hvorfor de naive løsningene feiler

En manuelt vedlikeholdt regel-side (bare skriv opp reglene i en HTML/markdown) løser synligheten, men ikke drift. Den ville vært utdatert første gang noen endret en terskel uten å oppdatere siden — og siden ville da aktivt lyve, som er verre enn ingen side (falsk trygghet). Du sa det selv: failsafe er ufravikelig.

Full single-source-of-truth (alt leses fra ett `rules.json`) er idealet, men upraktisk her: de fleste reglene er inline tall, ikke konfig-verdier. Å trekke hundrevis av inline-terskler ut til ett felles sett er en refaktor som rører nesten hver fil, med tilhørende regresjons-risiko — og noen «regler» er algoritmer (REDUSER = dyp + persistens), ikke tall, og lar seg ikke redusere til en JSON-verdi. Big-bang her er feil.

3. Arkitekturen som virker: register + verifiserings-failsafe + visning

Tre deler:

(1) Regelregisteret — `data/static/rules_registry.json`. Én kuratert katalog over reglene som betyr noe (anslag 60–100, ikke alle inline tall). Hver oppføring:

```

{ "id": "wellness.strain.min_disturbed",

"domene": "Wellness/Belastning",

"navn": "Belastnings-varsel: min forstyrrede dager",

"verdi": 6, "enhet": "av 10 dager",

"beskrivelse": "≥6 av siste 10 dager forstyrret utløser varsel",

"kilde": {"fil": "predict_illness.py", "symbol": "STRAIN_MIN_DISTURBED"},

"maskinsjekk": true }

```

For config-regler peker `kilde` inn i en JSON (`{"fil":"data/static/zones.json","path":"physiology_by_period.2026.LT2"}`); for prosa-policy er `maskinsjekk:false` og `verdi` en kort oppsummering.

(2) Failsafe — `scripts/verify_rules.py`, kjørt som sync-vakthund. For hver `maskinsjekk:true`-oppføring: importer modulen / les JSON-pathen, hent den faktiske verdien, og assert at den er lik registeret. Drift → sync feiler høyt (som `run_model_chain_tests`). Dette er garantien: en tunbar konstant kan ikke endres i koden uten at registeret enten stemmer eller alarmen går. Prosa-oppføringer kan ikke auto-sjekkes — de får en `sist_gjennomgått`-dato og listes som «manuell».

(3) Visningen — hub-fane «Regler» (under Verktøy). En generert flate som rendrer registeret gruppert på domene (Trening · Wellness/Sykdom · Belastning · Prediksjon · Skåring · Races · Ufravikelig), med verdi, kilde-peker, og maskinsjekk-status. Read-only. Alltid korrekt for maskinsjekk-oppføringene fordi verify leser live-verdien hver sync — det som vises er det koden kjører.

Migrering, ikke big-bang. Registeret starter med det som alt er rene konstanter (wellness/sykdom/strain — gratis) + config-JSON-ene (zones/targets/session_types — maskinsjekkbare i dag) + prosa-policyene (manuelle). Andelen som er drift-sikret vokser når du, én regel av gangen, løfter et inline tall som betyr noe opp til en modul-konstant og registrerer det. Nye regler skal fra nå registreres når de lages (den disiplinen håndheves av verify for konstanter).

4. Ærlig vurdering

Er det en god idé? Ja — men verdien ligger i failsafe-en, ikke i visningen. Med register + verify får du to ting du mangler i dag: reglene blir synlige ett sted, og de tunbare kan ikke drive i det skjulte. Uten verify er det bare enda et dokument som drifter.

Hva er drift-sikret vs ikke. Fullt drift-sikret: modul-konstanter (som de nye) + config-JSON-verdier. Ikke auto-sikret: inline magiske tall (til de løftes til konstanter) og prosa-policyer (krever gjennomgang). Registeret er ærlig om dette per oppføring (`maskinsjekk`-flagget), så du ser hvilke regler som er garantert ferske og hvilke som hviler på disiplin.

Kostnaden. Engangs-kurateringen av 60–100 oppføringer med kilde-pekere er reelt arbeid (en fersk Opus/Sonnet-økt). Deretter en liten løpende disiplin: ny regel → ny registeroppføring (håndhevet av verify for konstanter). Det er billigere enn dagens tilstand, der regler bare forsvinner ut av syne.

Fallgruve å unngå: ikke prøv å registrere alle inline tall — de fleste er data-vakter, ikke regler. Kuratér «regler Carl faktisk kan ønske å se eller justere». For mange oppføringer drukner de viktige og gjør vedlikeholdet tungt.

5. Hub-fane eller Analyse-punkt?

Hub, ikke Analyse-mappa. Regel-visningen er en levende referanse som konsumeres (som de andre hub-flatene), ikke en menneskeskrevet analyse. Den hører under Verktøy-fanen (som alt samler 17 inline-analyser). Analyse-mappa er for synteser/rapporter — en regel-visning der ville selv blitt en «utenfor rekkevidde»-fil. Selve registeret bor i `data/static/`, verify i `scripts/`, visningen genereres til hub-en.

Analyse-mappe-oppryddingen er en separat sak (lagt til TODO) — den er reell uansett dette, men bør ikke blandes inn i regelregisteret.

6. Anbefalt faseinndeling

1. Skjelett + failsafe først (minst risiko, størst verdi): bygg `rules_registry.json` med bare de alt-rene domenene (wellness/sykdom/strain-konstanter + zones/targets/session_types-config) + `verify_rules.py` i sync. Da står failsafe-mekanikken før innholdet vokser.

2. Prosa-policyene inn (SYSTEM_OVERVIEW §1/§4 + COACH-terskler) som `maskinsjekk:false` med gjennomgått-dato — sentraliserer det som drifter mest.

3. Hub «Regler»-fane som rendrer registeret.

4. Gradvis migrering: løft inline tall som betyr noe (skåre-tiers, TSB-bånd, drag-terskler) til modul-konstanter og registrer dem — én domene av gangen, hver med verify.

Steg 1–3 er en avgrenset fersk-økt (se prompt). Steg 4 er løpende.


Konsolidering: regel-fane er verdt det KUN med en verifiserings-failsafe (register + `verify_rules.py` i sync som asserter registeret mot live kode/config). Full single-source er upraktisk (reglene er inline magiske tall, ikke konstanter); løsningen er kuratert register + drift-vern nå + gradvis migrering av regler-som-betyr-noe til delte konstanter. Hub-fane under Verktøy, ikke Analyse-mappa. Implementering: `FABLE_REGELREGISTER_PROMPT.md`.

Fable-rollen i systemetHva: Kart over hvordan Fable brukes i systemet, grensene og rangerte muligheter framover.
Konklusjon: Fable reserveres for metodedesign, kryss-syntese og dømmekraft; marginalverdien av flere engangssynteser er nå lav.
Fable2026-07-19
#fable#roller#system

Fable-rollen i systemet — kart, grenser, rangerte muligheter (v1)

Dato: 2026-07-19 · Skrevet av: Claude (Fable, FABLE_ROLLE-I-SYSTEMET_PROMPT) · Modus: kun vurdering — ingen filer endret utover denne rapporten, ingen git, ingen sync. · Grunnlag: About_me + Stemmeprofil · SYSTEM_OVERVIEW (05.07) · CURRENT_STATUS (18.07) · TODO m/ spec-banken · CHANGELOG t.o.m. 18.07 · alle fem FABLE_*-promptene · de tre batch-instruksene · COACH_INSTRUCTIONS · Fable-Vinduet-Sammendrag v3 · to synteser lest i dybde (SubjektivSignal, Syvårs-syntesen v2; resten via sammendraget) · Systemrevisjon v1 (19.07) · Skåring-og-Prosa-gjennomgangen (18.07) · Plandialog-Handoff (09.07) · fullt mappetre.

Én setning: Arbeidsdelingen din er allerede riktig i prinsippet — feilen ligger ikke i hva jeg brukes til, men i kadensen: nesten all Fable-verdi hittil er engangs, mens systemets neste gevinst ligger i to–tre stående løkker (ukesevaluering, race-trioen) og i regelen om at hver revisjon skal ende i en deterministisk vakt som gjør gjentaket unødvendig. Og: ikke bestill flere store synteser nå — korpuset er høstet, og implementeringskøen henger etter.


1. Kart over dagens bruk + dom

#BruksområdeOmfangDom
1Dype engangssynteser20 rapporter i `Analyser/synteser/`; vinduet 05.–07.07 alene: 18 leveranser, 19 hovedfunn**Reell verdi, høyest i systemet** — men marginalverdien av *flere* er nå lav (se under)
2Plan-dialog09.07 (Opus) + 18.07 (Fable) → v4.3 skrevet inn m/ frossen original + evalspec**Reell verdi.** Langtur-densiteten 5 → 11× 30+ kom av historikk-tabellen, ikke av teori
3System-/skåringsrevisjon18.07 (14 forslag) + 19.07 (F1–F16, R1–R12)**Reell verdi** — fant det testene ikke ser (frosne langtur-skår som re-skåres daglig, 08.08-vs-12.08-datosprik, stale prognosekilder)
4ModellvurderingFABLE_MODELLVURDERING-malen: LOO-dom på foreslåtte endringer**Riktig bruk**, hendelsesstyrt. Holder modellen ærlig uten å røre den
5Hub-design-runder4 runder + mockup-arbeidsformen**Var reell verdi** (trenings-siden). Nå avtagende — din egen 2-dagersplan sa det: «verdien ligger i ANALYSENE, ikke i flere flater»
6Prosa-batcherKjøres på Sonnet; Fable skrev instruksene (bl.a. FABLE-11) og QA-arkitekturen**Riktig plassert.** Fables rolle her er instruksforfatter, ikke skribent
7Ad hoc datakvalitetKval-km-diskrepansen, D/R-simuleringen, de fire skåringsbuggene 18.07**Høy verdi per time.** Mønsteret: du ser et rart tall, Fable graver til rotårsak

Dommen i sum: policyen du formulerte 06.07 — «Fable reserveres for analyser som krever metodedesign, kryss-korpus-syntese eller dømmekraft» — er riktig, og den etterleves. Bevisene på at bruken har flyttet noe reelt er konkrete: søvnregelen «<78 aldri vellykket» falsifisert og fjernet (n=340, β≈0, p=0,83); immunvakta lagt om fra HRV-reaktiv til kalenderstyrt (F15) og inn i v4.3; volum-vernregelen (F19) inn i COACH_INSTRUCTIONS; modell-LOO 1,97 → 1,53 % gjennom vinduet; fire skåringsbugger funnet ved å grave i én økt. Dette er ikke pynt.

Pynt-kandidatene er få, men de finnes: flere hub-idérunder på en flate som er funksjonelt komplett; RC1 (fueling-analyse) på en logg med 0 datapunkter; F24/F25 fra Runde B som er nice-to-have uten operativ mottaker. Og én ærlig observasjon om syntesene: F20 og F21 leverte i hovedsak null-funn og bekreftelser. Det er metodisk sunt — men det er også signalet om at korpuset er ferdig høstet med dagens datagrunnlag. Neste synteselag krever ny data (laktat-kontrollserien, fueling-loggen, lab 31.8, tre race-fasiter i høst), ikke ny lesing av gammel.

Én infrastruktur-styrke som fortjener å bli nevnt eksplisitt: FABLE_*-promptbanken. Fem gjenbrukbare overføringsprompter med About_me-preamble, fredningsregler og leveranseformat er grunnen til at Fable-bruken din er reproduserbar og ikke avhengig av at du husker rammene per samtale. Det er samme grep som brief-first var for prosaen.


2. Tredelingen — og hvor grensene faktisk står

(a) Pipelinen gjør best: alt som skal være identisk i morgen. Henting, klassifisering, skåring, TSB, gates og bremser, briefs, HTML, varsling, vakthunder — og all tallproduksjon. Prinsipp: tall fødes i Python og siteres av alle andre. Dette er allerede systemets ryggrad, og de dyreste feilene dine har kommet nettopp der prinsippet ble brutt (hallusinerte skår før brief-first; post-økt-TSB sitert som morgenverdi).

(b) Fable gjør best — seks jobber, alle med samme kontrakt (forslag/dokument ut, aldri skriv til data):

1. Metodedesign første gang noe skal undersøkes (prekommittering, blinding, konfounder-kontroll — F16 er malen).

2. Kryss-korpus-lesing: språk, 633 prosafiler, docs mot kode mot flater — ting bare en LLM kan lese semantisk.

3. Revisjon: finne klasser av feil som tester ikke fanger (18.–19.07-rapportene).

4. Avgrenset dømmekraft under vedtatte regler: plan-dialog, ukesevaluering — veie motstridende signaler og skrive begrunnelsen ned.

5. Adversariell vurdering av endringsforslag (modellvurderings-malen).

6. Instruksforfatting til billigere modeller — Fable designer løypa, Sonnet drifter den.

(c) Bare du: mål og målhierarki, godkjenning av enhver regel, risiko-appetitt (110 vs 120), frys-/retyping-beslutninger (C1-køen), alt medisinsk (ditt kliniske domene), og «skriv det inn». Det beste beviset på at (c) er en aktiv funksjon og ikke et stempel, står i Plandialog-Handoff §5: AI-en generaliserte «RHR non-responder» fra akutt-funnet, du protesterte, og post-Berlin-dataene ga deg rett — RHR/oHR er blant de reneste markørene for vedvarende overreach. Uten din innvending hadde planen manglet sin viktigste live-brems.

Kadens-prinsippet som binder tredelingen: (a) eier alt som kjører automatisk. (b) er engangs, hendelsesstyrt eller ukentlig — alltid med deg i løkka. Ingenting av (b) skal inn i sync_daily.

Tre steder grensene er feil plassert i praksis:

1. Ukesevalueringen har ingen operatør. Den ble vedtatt 18.07 (10-punkts skjema hver søndag + forhåndsdefinerte justeringsregler, amendments-logg, frossen original), men ingen eier kjøringen. Da faller den enten på deg (tid du ikke trenger å bruke) eller på ad hoc-chats (inkonsistens — akkurat det COACH-regel 9 forbyr). Den hører hjemme i (b) med (c)-godkjenning. Dette er den største enkeltfeilplasseringen.

2. Funn → vakt-konvertering skjer ikke systematisk. Revisjonene finner feilklasser (datosprik mellom hardkodede mål, stale kilder, frys-hull), og de blir rapportpunkter — ikke deterministiske vakter. Regelen som bør inn i alle revisjonsprompter: hvert funn skal følges av forslaget til vakten som gjør gjentak umulig. Fable skal aktivt gjøre seg selv overflødig per funn-klasse; det som blir igjen til neste revisjon, skal være nye klasser.

3. Analyseproduksjon > absorpsjon. 20 synteser er levert; O7–O15, reskår-køen (19 prosa + 95 frosne, pluss 96/135 fra 18.07-buggene) og R1–R12 fra revisjonen står. Flere Fable-analyser nå flytter ikke prestasjonen din — implementering og drift gjør det. Grensefeilen er ikke kvalitet, den er kø-balanse.


3. Rangerte muligheter (verdi × innsats)

#MulighetKadensVerdiInnsats
1Søndags-ukesevalueringen som fast AI-øktUkentligHøyLav
2Race-trioen: pre-mortem T−21 · dybdeanalyse T+2–4 · residual-økt T+7Hendelsesstyrt (3 løp i høst)HøyLav–middels
3Regel-register med evidensstatusEtter blokk (post-Amsterdam), så årligMiddels–høyMiddels
4Prekommittert design av vinterens 4×4-testEngangs (november)Middels–høyLav
5Prosa-korpus-miningEngangs, eksplorativUsikkerMiddels
6Årsrapporten (D15)Engangs (desember)MiddelsMiddels

1. Ukesevalueringen. Input: `training_plan_daily.json` + frossen original (`data/plan_snapshots/2026_KbhAmsterdam_ORIGINAL_v4.json`) + evalspec + ukas quality/activities/wellness + `plan_amendments.json`. Output: utfylt 10-punkts skjema + eventuelle amendment-forslag i vedtatt format + 10–15 linjer begrunnelse — du godkjenner, ingenting skrives uten «skriv det inn». Hvorfor AI og ikke kode: koden regner alt avviket allerede (build_weekly_from_daily, ukesrapportene) — men justeringsreglene er prinsipper som kan stå mot hverandre (bremsene sier hold igjen, trappa er fredet, K6-porten vil ha dose), og avveiningen med skriftlig begrunnelse er dømmekraftsarbeid. Hvorfor ikke bare du: du er godkjenneren; verdien er at vurderingen ligger ferdig skrevet og konsistent hver søndag, mot 13 uker og tre løp der plan-vs-virkelighet-avvik koster mest. Hvorfor Fable først: de første 3–4 rundene kalibrerer løypa (er reglene komplette? holder amendment-formatet?) og ender i en FABLE_UKESEVAL-instruks — deretter nedgraderes driften til billigere modell, samme bane som prosaen gikk. ~20–40 min per runde.

2. Race-trioen. Mønsteret finnes allerede i deler (maraton-fasiten, post_race_calibration, RC9-spec-en for Amsterdam-pre-mortem T−3u ≈ 27.9) — gjør det til stående løype per løp: T−21 pre-mortem (hva kan velte dette løpet, med failure-modes fra dine egne data — for Kbh: ~30.08), T+2–4 dybdeanalyse (fasit-formatet), T+7 residual-økt (modellavvik → hypoteser → eventuelt modellvurderings-mal). Hvorfor Fable: syntese på tvers av stream/vær/plan/historikk og adversariell tenkning i ett forsøk; koden lager tallgrunnlaget, økta skriver dommen. Energimila 12.08 er første test — og revisjonens F8 viser at outlook_history har hull (10/15 dager), så sørg for at T−14/T−7-snapshotene (29.07 / 05.08) faktisk finnes før du trenger dem.

3. Regel-registeret. Én økt etter Amsterdam: hver regel i COACH_INSTRUCTIONS/planfila/hub-bremsene får ID, kilde, n, dato og re-test-kriterium. Ingen nye regler, ingen endring — kun evidensstatus og kryssreferanse (revisjonens F12 viste at tersklene alt lever i fire representasjoner). Hvorfor Fable: regeltekst mot 11+ rapporter og rådata er semantisk kryss-lesing. Hvorfor det er verdt det: G1 beviste at regler kan være feil i årevis; F16 beviste at fraværet av en regel kan være riktig. Et register gjør begge feilmodi synlige — og det er råmaterialet A3-forhandleren trenger som maskinlesbare regler uansett.

4. Vinterens 4×4-test. F19 sier kort-VO2 er uprøvd og skal ren-testes i vinter-basen. Verdien avgjøres av designet før testen: dose, utfallsmål (aerob@128? q155? laktat-ved-fart?), konfounder-kontroll (mølle-vinter = era-skifte), stopp-regler. Én Fable-økt i november med F16-metodens prekommittering. Billig forsikring mot en bortkastet vinter-intervensjon.

5. Prosa-korpus-mining. De 633 dyp-analysene er skrevet, men aldri lest på tvers. Én økt: finnes gjentakende mekanismer i prosaen som ikke er kodet noe sted — oppvarmingslengde vs første-drag-kvalitet, «tung start»-mønsteret, drag-3-fenomener, pause-disiplin? Output er en hypoteseliste til deterministisk testing, ikke konklusjoner. Jeg er usikker på utbyttet — F16-erfaringen tilsier at null-funn er sannsynlig — så sett taket til én økt og regn den som et lodd.

6. Årsrapporten. D15 står i TODO. Syntese + språk over et år med tre A-løp og lab-retest er en naturlig desember-økt; Syvårs-syntesen er halve malen. Lav hast.


4. Anti-bruk — her skal du IKKE bruke meg

1. Aldri i sync_daily eller noe automatisk steg. Determinismen er systemets ryggrad; en LLM i autoløypa gir flater som ikke reproduserer, og feil som ikke kan diffes. Alt jeg gjør skal være en samtale med deg i enden.

2. Aldri tallproduksjon. Skår, prognoser, TSB, terskler, drag-tabeller. Historikken er entydig: hallusinerte skår fødte «ALDRI HALLUSINERE SKÅR»-regelen, og race_outlook er eneste prognosekilde av samme grunn. Jeg vurderer modellen; jeg er den aldri. Ber du meg «anslå» en race-tid utenom modellen, er svaret nei.

3. Ikke daglig beredskaps- og øktbeslutning. Gates og bremser er deterministiske med vilje. COACH-regel 9 (samme data → samme råd) kan ingen LLM garantere på tvers av sesjoner — og F16 viste at det ikke finnes noe subjektivt signal en LLM skulle «tolke» inn i morgenbeslutningen uansett. Morning brief forblir kode.

4. Ikke batch-prosa. 1 500-ords økt-analyser på 664 økter er Sonnet-arbeid i en arkitektur (brief-first) som allerede bærer kvaliteten. Fable her er feil kost/nytte.

5. Ikke flere store synteser på eksisterende data nå. Metning: null-funnene i F20/F21, impl-køen som venter. Ny syntese først når høstens nye data (laktatserie, race-fasiter, lab 31.8) er i hus.

6. Ikke hub-vedlikehold. 9 494-linjers-byggeren (F7) er Opus-impl-arbeid med mockup-godkjenning fra deg; Fable hører hjemme på arkitekturnivået, ikke i patchene.

7. Ikke analyse av tomme logger. RC1 på en fueling_log med 0/14 dager logget blir design forkledd som funn. Logging først.

8. Ikke medisinske vurderinger, ikke nye coaching-regler, aldri fra én enkelt analyse. (c)-domenet. Det står i alle promptene dine av god grunn, og det skal fortsette å stå der.


5. Én ting å prøve først

Ukesevalueringen — første kjøring nå. Begrunnelsen: infrastrukturen ble ferdig i går (v4.3 skrevet inn, original frosset, evalspec og amendment-format vedtatt), første søndag er i dag, og blokka du går inn i — 13 uker mot Energimila/Kbh/Amsterdam med langtur-trapp, laktatserie, lab 31.8 og K6-port 13.9 — er nøyaktig perioden der en konsistent, skriftlig plan-vs-virkelighet-vurdering betaler seg mest. Oppgaven er avgrenset dømmekraft under regler du allerede har godkjent: ingen hellige regler røres, ingenting skrives uten ditt «skriv det inn». Og den etablerer det stående driftsleddet Fable-bruken din mangler i dag, med innebygd exit: etter 3–4 runder er instruksen skrevet og driften kan nedgraderes.

Konkret: kjør u29 i kveld som pilot (T2.5-gate-dagen — kalibrer skjemaet mot en uke som delvis lå før v4.3), u30 søndag 26.07 som første fulle runde. Sier du go, skriver neste økt FABLE_UKESEVAL_PROMPT-utkastet — i denne runden er ingenting endret.


Grunnlag og avgrensning: alle tall i rapporten er hentet fra kildene i headeren (tellinger per 05.–19.07); ingenting er regnet på nytt her. Systemrevisjonen 19.07 dekker teknisk tilstand — denne rapporten dekker arbeidsdelingen og overlapper den bevisst ikke. Skrevet som eneste leveranse; ingen git, ingen sync, ingen endring i eksisterende filer.

Systemrevisjon v1Hva: Overordnet teknisk gjennomgang av hele repoet: kontrakter, frosne tall, skrivere og lesere, vakthunder.
Konklusjon: Designet er modent; svakhetene er glipp mellom design og virkelighet — kontrakter som ikke håndheves og frosne tall med kjente feil.
Fable2026-07-19
#system#revisjon#lås/frys#quality.json

Systemrevisjon v1 — overordnet teknisk gjennomgang

Dato: 2026-07-19 · Skrevet av: Claude (Fable, FABLE_SYSTEM-REVIEW_PROMPT) · Modus: kun vurdering — ingen kode-, data- eller regelendringer, ingen git. · Grunnlag: hele repoet staget til sandbox (218 filer: alle 124 scripts/-py + 18 rot-py + tests/ + kjernedocs + quality.json/activities.json + 30 datafiler), full filliste fra disk med størrelser/mtimes, pytest kjørt i sandbox-kopi (186 tester), dybdelesing av sync_daily/persist/quality_write_guard/race_outlook/rotate_backups/backup + skanning av quality_session_metrics (3 350 l) og build_hub_dashboard (9 494 l), kryssgrep av skrivere/lesere per datafil. Bygger på `Running_Report_Systemgjennomgang-Forbedringsforslag_v1` (04.07), `Running_Report_Systemtilstand_2026-07-07_v1` og `Running_Report_A3-Forhandlerregler_v1` (06.07).


1. Tilstandsbilde

Systemet er modent på de stedene det er bevisst bygget for å være modent: vakthund-arkitekturen (scope-snapshot med sha1 per entry, hub-sanity, races-present, sessions-root, stream-integritet, LOO-vern i steg 15c), lås/frys-disiplinen (664/670 økter låst+fryst), PREDICTION_MODEL sin forkastet-logg (~26 testede signaler med LOO-dom), CHANGELOG-disiplinen (samme-dags-føring, komprimering til _arkiv), og plan-maskineriet etter v4.3 (frossen originalplan + evalspec + amendments-format). Dette er uvanlig godt for et én-manns-system, og det meste av det som ble anbefalt 04.–07.07 er faktisk gjennomført (§2).

De reelle svakhetene ligger ikke i design, men i fire klasser av glipp mellom design og virkelighet:

1. Kontrakter som dokumenteres men ikke håndheves. «Alle skriv til quality.json går via safe_write_quality» er sant for 8 scripts og usant for minst 7 — inkludert de tre største skriverne. Rollback-loggen dekker derfor et mindretall av faktiske skriv. (F1)

2. Frosne tall med kjente feil. Frys-disiplinen er riktig, men beholdningen som ligger frosset ble skåret med formler som 18.07 viste seg å ha fire bugger. Re-skår av 44 ufrosne flyttet tier på 19 (43 %). De 95–96 frosne i køen har samme skjevhet — og køen spores nå i tre ulike dokumenter. (F2)

3. Duplisert konfig som har begynt å sprike. Målløpene er hardkodet i 3 filer; huben teller ned til Energimila 08.08 mens modellen og planen sier 12.08. CURRENT_STATUS henter «Garmin spår» fra en fil frosset 15.05 og advarer «111 dager gamle» — mens ferske Garmin-tall (18.07) ligger i nabofila. (F3, F4)

4. Normalisert støy. 28 tester som feiler hver kjøring kalles «miljøfeil»; ~24 av dem tester moduler som ble arkivert for uker siden. 113 `except: pass` i aktiv kode. outlook_history mangler 5 av 15 dager uten at noe sier fra. Slikt lærer deg å overse alarmer — det er slik neste stille korrupsjon overlever. (F5, F8)

Ingen av disse er akutte. Alle er billigere å fikse nå enn etter Energimila, og tre av dem (F2, F4, F6) påvirker tall du faktisk leser om morgenen.


2. Hva er gjort siden gjennomgangene 04.–07.07

Verifisert mot CHANGELOG (14 entries etter 07.07) og faktisk filtilstand, ikke mot hukommelse.

Anbefaling (04.07-rapporten)Status per 19.07Belegg
B1 læringsløkke: daglig prediksjonshistorikk**Gjort, med hull**outlook_history.json: 10 rader 04.–18.07, mangler 06., 11.–13., 16.07 (F8)
B2 vind-re-fit**Gjort**β +0,0220, LOO 1,577→1,529 %, kvadratisk testet/forkastet
C2 sykdomsmodell valideres**Gjort**Backtest v2, KLASS-2/4, kalenderstyrt immunvakt i v4.3-planen
C3 fylling-tracking**Rør bygget, tomt**extract_fueling i sync; fueling_log.json = 116 bytes; ernæring 0/14 dager logget
D1 dual-path persist↔HTML**Åpen**Kanonisk-score-override (totals) er plaster; HTML rekomputerer fortsatt komponenter live (§5)
D2 mass-reskår frosne**Åpen — og vokst**95 i massreskår-køen + 96 sirkulær-rampe + 135 pace-target identifisert 18.07 (F2)
D3 backup-rotasjon**Delvis**rotate_backups dekker 2 mønstre; 26 quality-baks (132 MB) fra juni ligger urørt (F11)
D4 test-suite modellkjeden**Gjort**test_model_chain (LOO<1,6 %-assert, feature-kontrakt, heat-prior) + steg 15c i sync
D5 vakthund-whitelistÅpenIkke i CHANGELOG
D8 hr_review_queue → hubÅpenhr_review_queue.json sist 03.07
D9 mobil-hub**Motstridende**Pensjonert 04.07 → «fikset» til race_outlook 15.07 → erklært «død flate» 16.07. Uavklart.
D14 JSON-API**Gjort**Sessions/api/ (build_api, 05.07)
OPUS-IMPL-1 (G2–G5, G8, OPPSKRIFT-2)**Gjort**CHANGELOG 07.07 del 8
A3-forhandler → apply_plan_amendment.py**Ikke bygget**Fila finnes ikke; design-rapporten står klar
Prosa-timing + prognose-harmonisering (nye 15.07)**Gjort, ufullstendig**Mobil + øktside harmonisert; generate_status ble ikke tatt (F4)
Fire skåringsbugger (18.07)**Gjort for nye skår**Smal D, sirkulær rampe, fabrikert 5.0, laktat-dict — historikken venter (F2)
Treningsplan v4.3 + frossen original + evalspec**Gjort**u30–42 skrevet inn, snapshot + 10-punkts ukeevaluering

I tillegg siden 07.07: bulk lås+frys (10.07), auto lås+frys ved prosa, race-skår fylt og fryst (28/33; 5 bevisst uskåret), medisin fjernet fra hub (09.07), analysebibliotek på hub, «Blokka nå»-forside + blokkplan-graf v2 (18.07). Tempoet er høyt og loggført. Det som IKKE har skjedd, er i hovedsak det som krever kjedelig vedlikehold uten synlig gevinst — som er nøyaktig der revisjonen nå peker.


3. Prioriterte funn

Alvorlighet: hvor galt blir det hvis det står urørt. Innsats: realistisk arbeidsmengde.

#FunnAlvorlighetInnsats
F1Skrivevern-kontrakten håndheves ikke: classify, persist, repstats-sync, lock, block_tagger, verify_stream_integrity skriver quality.json direkteHøy0,5–1 d
F2Frossen skår-beholdning med fire kjente formelfeil; reskår-kø spredt på tre dokumenterHøy0,5 d + Sonnet-batch
F3Energimila-dato 2026-08-08 i hub vs 2026-08-12 i modell/plan; mål hardkodet i 3 filerMiddels (høy synlighet)1–2 t
F4generate_status leser race_predictions.json (frosset 15.05) — CURRENT_STATUS viser utdaterte Garmin-tall med falsk stale-advarsel; race_prob/hub_pdf leser samme døde filMiddels1–2 t
F5Test-rot: ~24 av 186 tester målrettet mot arkiverte moduler, normalisert som «miljøfeil»; null dekning av scorer, guard, lås/frys, sync-rekkefølgeHøy0,5–1 d
F6sync_daily publiserer uansett: ingen kritisk-steg-abort, git-push kjører selv ved vakthund-alarmMiddels–høy2–4 t
F7Hub-monolitt: 9 494 linjer, build() = 5 274 linjer, 3 .bak-kopier (1,3 MB) i scripts/ som side-versjoneringMiddelsdager (kan fases)
F8113 `except: pass` i aktiv kode; outlook_history-hull (5/15 dager) skjules av ett av demMiddels2–4 t for de kritiske
F9Skår reproduserer ikke per konstruksjon: context-komponenter leser NÅVÆRENDE planfil/wellness; ingen formel-versjonstagg i lagret skårMiddels30 min (tagg)
F10Docs-avvik: guard-påstanden, make_shareable listet som aktiv (ligger i _arkiv), 116 vs 124 scripts, mobil-flate uavklart; TODO.md = 205 seksjoner hvorav 26 ferdigmarkerteMiddels1–2 t
F1126 quality.json-baks (132 MB) + 16 planfil-baks utenfor rotasjon; .git = 3,0 GB og vokser med hver syncMiddels1 t + Carl-git-jobb
F12Readiness-terskler i 4 representasjoner (COACH-tabell, planfilas bremser 41/46/55, hub-beredskap, brief-relativ) uten kanon-filLav–middelsdesign-valg
F13Daglig sync er fortsatt manuell (office-PC 06:00 ugjort, TODO #24/44); >7 d fravær krever manuell sync_allMiddelsoppsett-jobb
F14Ingen kontraktstest mot Garmin/Strava-API-svar; feltnavn-endring har alt bitt én gang (time10K)Lav–middels2 t
F15predict_illness leser flate TR/BB/stress for dagens risiko — SNAP-1b-vernet dekker ikke denne konsumentenLav1 t
F16Småanomalier: én `easy`-entry låst inne i quality.json (2024-10-08 «2 x 4»); 670 entries vs dokumentert 664; hub_coach.html 16,5 MBLavopprydding

F1 — Skrivevernet er en delvis sannhet

SYSTEM_OVERVIEW §4.2: «ALLE skriv til quality.json går via safe_write_quality() … Aldri direkte json.dump.» Grep viser 8 scripts som bruker guarden (enrich_langtur, freeze_session, prosa_autofreeze, sync_lactate, tag_training_blocks, unlock_session, vo2max_4x4 + guarden selv) — og direkte skriv i minst 7: classify_activities.py:1998 (den største skriveren — bygger hele fila på nytt hver sync), persist_quality_scores.py:278, sync_repstats_to_quality.py:108, redetect_langtur_reps.py:543, lock_session.py:169/216, block_tagger.py:250, verify_stream_integrity.py:109. Konsekvensen er dobbel: (a) guardens diff-sjekker (FROZEN_FIELD, LOCKED_REPS_COUNT, STREAM_DROP) kjøres ikke på de skrivene som historisk har laget problemene, og (b) snapshot-ringbufferen i data/snapshots/ — dokumentert som «eneste rollback-vei» — fanger bare guard-skrivene. Scriptene har riktignok egen lock/frozen-respekt i logikken (persist filtrerer _frozen/_locked selv), men det er nettopp per-script-disiplin write-guarden ble bygget for å erstatte. I tillegg er ingen av skrivene atomiske (write_text rett på fila, ikke tmp+rename — heller ikke guardens egen); et krasj midt i et 5,8 MB-skriv gir trunkert quality.json. Git-historikken redder deg da, men det er en manuell redning. REFACTOR-2 i TODO beskriver akkurat denne jobben og har stått siden 31.05.

F2 — Frosne tall med kjent skjevhet er nå største datakvalitetsrisiko

Kronologien: skårene ble persistert i juni (297) og juli (150), deretter bulk-fryst 10.07. 18.07 ble fire formelfeil funnet og fikset — men bare fremover: fantom-target 4:00/km rammet 135 intervalløkter, sirkulær pace-rampe ga gratis 9,5 på komponenten med størst vekt (0,30) for 96 progresjons-økter (19 med verdien faktisk lagret), laktat ble aldri skåret (30 økter mistet halv vekt), og «ingen komponenter» ble til fabrikkert 5,0. Kalibreringen av hvor mye dette flytter finnes alt: massreskåren 05.07 re-skåret 44 ufrosne og endret tier på 19 — inkludert hopp som 6,8→9,2. Tier-fordelingen i den frosne beholdningen er altså systematisk skjev (progressive økter for høyt på eksekusjon, deklarert-target-økter for lavt), og det er denne fordelingen blokk-KPI-er, «beste økt»-sammenligninger og prosa-referanser leser. Køen for å rette det spores i tre dokumenter med tre ulike tall (Massreskaar-køen 05.07: 95 frosne + 19 prosa; CHANGELOG 18.07: 96/135/19; TODO D2) — ingen av dem er komplette etter 18.07-fiksene. Dette er ikke et argument mot frys — frys er riktig — men mot å la en kjent-feil beholdning ligge uten én autoritativ kø og en dato.

F3 — Duplisert målkonfig har alt gitt sprikende datoer

race_outlook.py:40–45 definerer de tre målene (12.08 / 20.09 / 18.10, target 2220/4800/10200 s). pacing_plan.py:196–201 har sin egen kopi. build_hub_dashboard.py har en tredje — med Energimila 2026-08-08 på linje 1760 og 1939. Hubens nedtelling og race-strip teller altså mot 8. august mens P(mål)-tallet ved siden av (hentet fra race_outlook) gjelder 12. august. plan_whatif leser riktignok race_outlook.json (riktig mønster). Målene hører hjemme ett sted — naturlig kandidat er carl.json (som i dag ikke har goals-blokk) eller en egen goals.json som race_outlook leser — med alle andre som konsumenter av race_outlook.json.

F4 — To prognose-verdener, tre dager etter at du vedtok én

15.07-instruksen («race_outlook eneste kilde, Garmin lite sekundært») ble gjennomført for mobil-hub og øktsidene, men generate_status.py:42/494 leser fortsatt race_predictions.json — en fil sist skrevet 15.05 med Garmin-estimater fra 29.03. Resultatet står i CURRENT_STATUS §Neste mål: «Garmin spår 37:34 / 1:19:59 / 2:57:46» pluss advarselen «Garmin-prognosene er 111 dager gamle — sjekk om Garmin Connect leverer nye estimater». Garmin leverer nye estimater: garmin_race_predictions.json er datert 18.07 (10k 38:04, HM 1:22:02, M 2:59:29) og garmin_pred_history har daglige rader siden 05.07. Advarselen er altså feil fil, ikke feil feed — og CURRENT_STATUS, som ligger i coaching-lesestacken, viser verken race_outlook-prognosen eller ferske Garmin-tall. Samme døde fil leses fortsatt av build_hub_dashboard.py:4232 (pred_history) etter at 17.07-fiksen bare byttet kilde for header-sparklinen. Andre stale-lesere av samme klasse: hub leser advanced_analytics.json (01.06) og t1_prediksjons_status.json (01.06). Og pipeline_health.json — selve meta-overvåkingen — skrives bare av sync_all (sist 14.06) og leses av ingen.

F5 — Testsuiten lyver om sin egen dekning

186 tester samles inn; i sandbox passerte 146. De «28 miljøfeilene» CHANGELOG har normalisert siden minst 15.07 er i hovedsak ikke miljø: 13 tester importerer zones_loader, 7 make_shareable, 2 kjører zones_validator/carl_validator — alle fire moduler ligger i _arkiv/scripts_v1 og _arkiv/scripts_engangs (make_shareable står samtidig som aktivt verktøy i SYSTEM_OVERVIEW §3.4). test_elliptical_is_easy asserterer atferd fra før juni-policyen (ellipse → cross_training) og feiler på riktig oppførsel. Dette er død vekt som gjør «alle tester grønne» umulig og lærer deg å lese røde tall som støy. Viktigere er hva som IKKE testes: score_session_typed_v2 (564 linjer, vekter, bånd — null tester), safe_write_quality/diff-semantikken (null), lås/frys-kontrakten (null — 18.07-buggene hadde vært synlige med en golden-file-test), sync_daily-rekkefølgen (steg 7a-ordningsbuggen 07.07 var nettopp en rekkefølgefeil), classify-rebuild-resurrect. Det som finnes og er bra: test_model_chain (LOO-tak 1,6 %, feature-kontrakt, heat-prior) kjørt i hver sync, test_snap1b_consumers, test_data_integrity.

F6 — Pipelinen publiserer uansett hva som feiler

sync_daily kjører 55–56 steg lineært; run() logger feil og går videre. Det finnes ingen kritisk-steg-klasse: feiler strava_sync eller merge_data, kjører classify/persist/hub videre på stale input, og backup.py committer og pusher resultatet til hub.pintzka.com — også når scope-vakthunden i steg 17 har slått alarm (alarmen printes; pushen i steg 18 kjører ubetinget). Vaktholdet er altså detektivt, ikke preventivt. SNAP-1-erfaringen (stale activities.json ved snapshot-flagging) viser at nettopp delvis-ferdig-tilstand er en reell feilklasse hos deg. Minimums-fiksen er liten: definer steg 1–4 (+ compute_load) som kritiske → abort før publisering; og la vakthund-alarm sette exit-vern foran backup.py-steget.

F7 — Huben er systemets største enkeltrisiko for vedlikehold

build_hub_dashboard.py: 9 494 linjer, 62 funksjoner, hvorav build() alene er 5 274 linjer; ~33 % av linjene er innbakt HTML/CSS/JS; 24 `<script>`-blokker; 38 unike .json-referanser; 65 except-Exception. Endringsprosessen er blitt: ta .bak-kopi, kjør engangs-patch-script (arkivert etterpå), verifiser med headless-render. Det fungerer — 18.07-leveransene beviser det — men kostnaden vises alt: tre .bak-kopier (1,3 MB) ligger i scripts/ som parallell versjonering ved siden av git, og Energimila-datofeilen (F3) er akkurat den typen feil en monolitt med hardkodede verdier produserer. Full oppsplitting er en stor jobb med regresjonrisiko og bør IKKE gjøres som bigbang. Realistisk fasing: (1) flytt CSS + JS til egne filer som leses inn ved bygging (fjerner ~3 000 linjer streng), (2) del build() i én funksjon per fane, (3) samle alle konstanter (mål, datoer, terskler) øverst eller i konfig. hub_coach.html på 16,5 MB (vs hub 2,2 MB) bør samtidig forklares eller pensjoneres.

F8 — Stille svelging er systemets vane, og den koster alt nå

113 `except: pass`-forekomster i aktiv kode (65 bare i hub-byggeren). Det konkrete eksempelet: race_outlook pakker outlook_history-append i try/except pass — historikken som skal bære post-race-kalibreringen har 10 rader på 15 dager, og du får aldri vite om et hull skyldes at sync ikke kjørte (reise) eller at appenden feilet. Tilsvarende svelges risk-flagg-beregningen i sin helhet. Prinsipp verdt å innføre: except-pass er greit for kosmetikk (tooltips, farger), aldri for data som skrives eller flagg som styrer råd. De ~10 kritiske stedene kan finnes med ett grep og fikses på en kveld.

F9 — Reproduserbarhet: skåren er en funksjon av når den ble beregnet

Re-skår-avvikene du har sett har tre kilder, og bare to er fikset: (1) rekkefølgefeilen (hr_avg-fallback før stream — fikset 07.07 med steg 7a), (2) formelfeilene (fikset 18.07), og (3) den strukturelle: build_session_metrics leser NÅVÆRENDE training_plan_weekly (fase-koherens), wellness (pre-readiness) og 8-ukers-baseline fra all_quality. Kjør persist på samme økt to måneder senere og context-komponentene kan legitimt endre seg fordi konteksten er en annen fil. Frys er riktig svar på dette — men da må det være eksplisitt at «frossen skår = skåret med formel X på dato Y», ellers er avvik ved re-kjøring udiagnostiserbart. I dag lagres _scored_at men ingen formel-versjon. Én linje i persist (f.eks. `_scorer_version: "v2.4-20260718"`, bumpes ved hver formelendring i CHANGELOG) gjør hvert fremtidig avvik forklarbart og gjør reskår-køer trivielt avgrensbare («alt skåret med < v2.4»).

F10 — Dokumentasjonen: god helhet, konkrete løgner

SYSTEM_OVERVIEW er reelt kanonisk og imponerende presis på arkitektur — men inneholder nå fire verifiserbart gale påstander: guard-dekningen («alle skriv», «~20 scripts» — reelt 8), make_shareable.py som aktivt verktøy (arkivert), «116 aktive .py» i scripts/ (124 ligger der), tests «16» (17 filer, 186 tester). Mobil-flatens status er selvmotsigende på tvers av tre CHANGELOG-entries (pensjonert/fikset/død). TODO.md er ikke en kirkegård, men den er to ting i én fil: en skarp, levende topp (FABLE-spec-bank, G-køer, juli-beslutninger) oppå et sediment fra mai (205 seksjoner totalt; 26 fortsatt merket FERDIG/FULLFØRT i strid med regelen om å flytte til CHANGELOG; HUB-14..32 og EXPLORER-2..10 fra medio mai som ingen har prioritert siden). CHANGELOG har komprimeringsregel ved ~1 500 linjer; TODO (1 552 linjer) har ingen. Én kilde til sannhet per tema holdes ellers godt — PLAN_STRUKTUR/PREDICTION_MODEL/COACH_INSTRUCTIONS krysspeker riktig.

F11 — Lagringshygiene: 132 MB baks og en 3,0 GB .git

rotate_backups virker, men dekker to mønstre (bak_progdetect, bak_rollup). Utenfor: 26 quality.json-baks på 132 MB i data/processed (20 fra juni-operasjoner), 16 training_plan-baks i data/static, 3 hub-byggerbaks i scripts/, + carl/medication/shoe/strength/quality_overrides-baks. Alt committes til git — og .git er nå 3,0 GB. Driverne er daglige multi-MB-blobber (quality 5,8 MB, strava_activities 6,5 MB, wellness 3,4 MB, hub.html 2,2 MB, hub_data.js 1,2 MB, hub_coach 16,5 MB) ganger 2–4 commits/dag pluss hver bak-fil. Dette knekker ingenting i morgen, men clone/push og Cloudflare-bygg blir gradvis tregere, og en 10 GB+ .git ved årsslutt er sannsynlig med dagens kurve. Tiltak er Carl-jobber, ikke Claude: utvid rotate til alle bak-mønstre i data/, .gitignore bak-filer og snapshots-ringbufferen, og vurdér git gc --aggressive / historie-trimming ved neste anledning.

Solid — det som fortjener eksplisitt friskmelding

Vakthund-settet med snapshot-diff per entry er reell beskyttelse og har fanget ekte feil. Lås/frys + resurrect i classify løste langtur-tapsklassen permanent. Prognosekjeden har regresjonsvern i produksjon (steg 15c) — det har de færreste hobbyprosjekter og en del profesjonelle. KLASS-språket (dysregulering vs infeksjon) er konsekvent gjennomført i alle brukervendte flater jeg fant. SNAP-1/1b-vernet respekteres av alle fire hovedkonsumenter (verifisert med grep + testen). Planfil-arkitekturen (dagene er sannheten, uketall regnes, snapshot fryses, amendments logges) er den ryddigste delen av hele systemet. Og beslutningshygienen — Carl-godkjenning, forkastet-logger, «ikke gjeninnfør uten ny evidens» — er systemets sterkeste enkeltegenskap.


4. Arkitektur og dataflyt (spørsmål 1)

Orkestreringen er et lineært subprocess-tog: 55–56 steg i sync_daily avhengig av ukedag (57 append-punkter i koden; SYSTEM_OVERVIEW sier 52 — talt før 15.07-tilleggene), 41 referanser i sync_all, 21 i regen_dashboards. Rekkefølge-avhengighetene som historisk har bitt (compute_load før persist; repstats-resync etter stream-fetch; race-overrides før classify) er nå riktige OG dokumentert i kommentarene — bra. Men avhengighetene finnes bare som kommentarer; ingenting hindrer neste omflytting i å gjeninnføre en rekkefølgefeil (testhull, F5). Idempotens er gjennomgående godt ivaretatt (delta-vinduer, only-missing-vern, dedup-appends). Delvis feilet sync: se F6 — pipelinen har ikke noe begrep om det, og publiserer. Enkeltpunkter: quality.json (664 økters eneste sannhet, 5,8 MB, ikke-atomiske skriv — F1), sync-maskinen (manuell kjøring, F13), Garmin-auth (garth-tokens med browser-fallback — har historisk krevd manuell fornying), og hub.html som eneste konsum-kanal (bevisst valg, akseptabel risiko når verify_hub_sanity står foran push).

Konkret sårbarhets-svar på «hva skjer hvis»: Garmin endrer API → sync-steget feiler høylytt (bra), men pipelinen fortsetter og publiserer stale wellness (F6); feltnavn-endringer som ikke gir exception (jf. time10K) gir stille feil uten kontraktstest (F14). En fil mangler → de fleste lesere har load-or-empty-fallbacks; du får tomme seksjoner, ikke krasj — som er både robusthet og maskering. Borte en uke → 7d-delta dekker det så vidt; lengre krever manuell sync_all (30–60 min) og outlook_history får hull.

5. Skåringssystemet (spørsmål 3)

Designet er riktig tenkt: én metrics-bygger, én type-bevisst scorer med effective_target_band fra session_types.json, spesialløyper for 45/15 og 4×4 (NTNU), persist som eneste kanoniske skriver, frys mot formeldrift. Kompleksiteten er reell men begrunnet — problemet er ikke at scoreren er for komplisert, men at den mangler tre sikkerhetsegenskaper: versjonering (F9), golden-file-tester (F5) og guard-tvang på skrivestien (F1). Dual-path-en (D1) er fortsatt halvåpen: HTML-siden importerer nå riktignok samme compute_target_pace_s fra persist (delt kilde — bra), og overstyrer totals med persisterte verdier, men komponent-nedbrytingen på øktsiden rekomputeres live. Etter neste formelendring vil en frossen økt vise komponenter som ikke summerer til sin egen frosne total. Varig fiks er å persistere komponentene sammen med totalen ved skåring og la HTML rendre lagret struktur — da dør hele klassen. Den reelle risikoen per i dag er F2-beholdningen: fram til de 96/135 frosne er kontrollert re-skåret, bør historiske tier-sammenligninger på tvers av progresjons-økter leses med skepsis.

6. Prognosemodellen (spørsmål 4)

Min vurdering etter å ha lest race_predict/race_outlook/fitness_filter-koden og PREDICTION_MODEL: dette er den mest etterprøvbare delen av systemet, og tilliten er berettiget — innenfor det modellen selv oppgir. Leave-one-race-out per løp er riktig protokoll ved n=33; feature-settet er lite og fysiologisk motivert; forkastet-listen (~26 signaler med LOO-dom, inkludert fristende ting som HRV og vekt) er sjeldent god forskningshygiene; CI-ene er empiriske kvantiler etter at split-normal-faktorene ble målt til 83–85 % reell dekning; LOO-vernet kjører i hver sync. Hva race_outlook reelt tilfører utover race_predict: projeksjonen mot distanse-spesifikk demonstrert form (gjenvinning 56 d + maks 0,5 % bedring), taper-bonus, ferskhetsnøytralisering og målsannsynlighet med riktig hale — alt lesbart og konservativt. Svakhetene: (a) kalibreringssløyfen som skal bevise modellen fremover (outlook_history → post_race_calibration) har hull og null feilvarsling (F8) — Energimila blir første reelle test, sørg for at T-14/T-7-snapshotene finnes; (b) GOALS hardkodet (F3); (c) død kode i utkanten: PROJ_DAMP/PROJ_CAP er ubrukte konstanter og fitness_trend_s_per_90d er permanent 0 etter at trend-framskrivingen ble erstattet (a_90 = a_now) — feltet bør fjernes før noen leser det som signal; (d) 5 av 33 løp mangler fortsatt session_score (bevisst uskåret: THM-19, solo-HM-20, skogsmaraton-21, London-25, Nidaros-25) — irrelevant for modellen (den leser races.json), men verdt å lukke for konsistens. Garmin-tallene er korrekt ute av modellen; F4 handler om visning, ikke modell.

7. Coaching-apparatet (spørsmål 5)

Strukturen er bedre enn den ser ut som fra COACH_INSTRUCTIONS alene: daterte PERMANENT-regler, lagdelt leserekkefølge, og — viktigst — dokumentert regel-TILBAKETREKKING med evidens (G1-søvnregelen fjernet på n=340 med β≈0, p=0,83). Det er den motsatte feilen av regel-akkresjon, og den skal du være stolt av. Tre strukturelle svakheter: (1) Reglene i COACH_INSTRUCTIONS har datoer men ikke ID-er, mens A3-designet innførte U/M/H/V-ID-er og planfila v4.3 nå bærer egne tallfestede bremser (RHR 41 / oHR 46 / HRV 55) — tre navnerom for delvis overlappende regler, uten kryssreferanse. Når forhandleren (A3) bygges, må den uansett ha maskinlesbare regler (negotiator_rules.json er alt foreslått i A3 §9) — det er riktig anledning til å gi HELE regelapparatet ID-er og én kanon-fil som COACH-dokumentet rendres fra eller peker inn i. (2) Håndhevelsen er spredt: gate-tabellen håndheves av deg i dialog, bremsene av planfila/hub, beredskaps-skåren av hub-koden, brief-en bruker relative terskler (±10/15 % mot 7d-snitt) som ikke er gate-tabellens absolutte bånd — fire representasjoner som i dag stemmer overens omtrent, men ingen test sier fra når de glir (samme klasse som F3). (3) Sporbarheten på råd-til-utfall finnes (daily_log, ukesrapporter, evalspec v4.3) men RPE-innsamlingen som skulle gi motparten til exec-score (04.07-rapportens A4) er fortsatt ikke i drift. Ingen nye coaching-regler foreslås her, i tråd med instruksen.

8. Analyser og dokumentasjonshelse (spørsmål 6)

Analyselaget (20 synteser + manifest + hub-bibliotek) er velorganisert og indeksert; funn-til-beslutning-sporet (F-nummer → G-kø → CHANGELOG) er uvanlig ryddig. Dokumentasjonshelsen ellers: se F10. Ett tillegg: CLEANUP_INVENTORY (14.06) var et godt øyeblikksbilde men er nå fem uker og én stor omorganisering gammel; den bør enten dateres om ved neste opprydding eller degraderes eksplisitt til historikk, ellers blir den lest som gjeldende klassifisering.

9. Teknisk gjeld og død kode (spørsmål 8)

Orphan-analysen (import- og subprocess-bevisst, verifisert mot docs): av 124 scripts/-py er ~57 i daglig pipeline, ~17 til i sync_all/regen, ~24 dokumenterte manuelle verktøy — og 26 har ingen automatisert innkaller. Av disse er 18 dokumenterte batch-/QC-verktøy (prosa-kjeden, qc_easy_hr, manual_rep_correction, post_race_calibration m.fl. — reelle verktøy, riktig plassert), mens 8 er udokumenterte kandidater for _arkiv: _fable19_classify, build_drag_verification_report, check_overwrite_safe, context_crosscheck, gen_light_frontmatter, lactate_drift, race_data_pack, warm_weather_cache. Rot-nivået: fitparse_min.py refereres ikke av kode. Arkivdisiplinen for øvrig er god (53 engangs-scripts korrekt i scripts/_arkiv). Over-engineering vs skjørt: systemet er generelt ikke over-engineered — hvert lag svarer på en dokumentert hendelse — men hub-monolitten (F7) og de tre parallelle backup-regimene (bak-filer + snapshots-ringbuffer + git) er dyrere enn nytten. Størst konsentrasjon av skjørhet: alt som må endres to steder for å forbli sant (mål, terskler, guard-påstanden, mobil-status).

10. Anbefalt rekkefølge

Rangert på risiko-per-time. Ingen av disse er startet — alt legges fram for beslutning.

#TiltakEffektInnsats
R1Energimila-dato + samle GOALS i én kilde (race_outlook leser goals.json/carl.json; hub/pacing konsumerer race_outlook.json)Lukker F3, hindrer gjentak1–2 t
R2generate_status → race_outlook som prognose + garmin_race_predictions (fersk) som sekundær; pensjonér race_predictions.json-lesing i race_probLukker F41–2 t
R3`_scorer_version` i persist + persistér komponent-strukturen (lukker dual-path D1 varig)F9 + D12–3 t
R4Én autoritativ reskår-kø (slå sammen 05.07 + 18.07-listene), deretter kontrollert unlock→persist→re-frys-batch med før/etter-diff og prosa-revisjonskøLukker F20,5 d + batch
R5Test-vask: arkivér de ~24 døde testene, rett elliptical-testen; nye vern: golden-file på score_session_typed_v2 (3–4 økter), guard-kontraktstest, lås/frys-semantikk, sync-rekkefølge-assertLukker F50,5–1 d
R6sync_daily: kritisk-steg-abort (steg 1–4 + compute_load) og push-sperre ved vakthund-alarmLukker F62–4 t
R7REFACTOR-2: guard-tvang på de 7 direkte-skriverne + tmp+rename i guardenLukker F10,5–1 d
R8except-pass-gjennomgang på datakritiske steder (outlook_history først, med hull-varsel)F82–4 t
R9rotate_backups → alle bak-mønstre; .gitignore baks/snapshots; Carl: git gc / historie-trimF111 t + Carl
R10Docs-synk: guard-avsnittet, make_shareable, tallene, mobil-beslutning; TODO-komprimering til _arkiv à la CHANGELOGF101–2 t
R11Hub fase 1: CSS/JS ut i egne filer, konstanter samlet; ikke bigbangF7 ned0,5–1 d
R12Senere: kontraktstest API-svar (F14), predict_illness-snapshot (F15), apply_plan_amendment (A3), pipeline_health inn i daglig sync + hub

R1–R3 er én kveldsøkt samlet og fjerner de tre feilene som er synlige på flatene du leser daglig. R4–R7 er kjernen av revisjonen og bør ligge før Energimila (12.08), slik at både skår-beholdningen og publiserings-vernet er rene inn i race-sekvensen.


Vedlegg — verifiserte tall

670 entries i quality.json (419 interval / 217 long_run / 33 race / 1 easy-anomali) · 664 låst + 664 fryst · 447/452 kvalitetsøkter skåret (5 race bevisst uskåret) · 133 _progresjon-flagget · 124 .py i scripts/ + 18 i rot + 3 i lib · 55–56 steg i sync_daily · 8 scripts bruker safe_write_quality, ≥7 skriver quality.json direkte · 186 tester (146 pass i sandbox; ~24 mot arkiverte moduler) · TODO 1 552 linjer / 205 seksjoner / 26 ferdigmarkerte · CHANGELOG 490 linjer, 14 entries etter 07.07 · build_hub_dashboard 9 494 linjer, build() 5 274, 33 % innbakt HTML/JS, 65 except · 113 except-pass i aktiv kode · outlook_history 10/15 dager · 26 quality-baks = 132 MB · .git 3,0 GB · data/raw 4 074 filer / 384 MB · hub_coach.html 16,5 MB · Garmin-predictor: race_predictions.json frosset 15.05 (innhold 29.03) vs garmin_race_predictions.json 18.07.

Metode-forbehold: pytest-tallene er fra sandbox med delvis datasett — på din maskin er fasiten 158/186 med de samme ~24 døde testene i feilbunken. Grep-baserte tellinger (except-pass, lesere/skrivere) kan ha enkeltfeil i marginene; alle enkeltfunn (F1–F16) er verifisert mot kildelinjer.

Skåring og prosa — gjennomgangHva: Full gjennomgang av skåring og prosa med forslag framover — ingen skår eller instruks endret.
Konklusjon: Hovedfunn: frosne langtur-skår var ikke frosne — de ble re-skåret hver natt fordi frysvernet ikke dekket langtur-feltene.
Fable2026-07-18
#skåring#prosa#frys#langtur

Skåring og prosa: full systemgjennomgang med forslag fremover

Dato: 2026-07-18 (natt) · Skrevet av: Claude (Fable 5) · Status: READ-ONLY gjennomgang — ingen kode endret, ingen skår rørt, ingen instruks redigert. Alle forslag gjelder KUN fremover; frossen historikk står.

Omfang: skåringssystemet for kvalitetsøkter (`quality_session_metrics.py` + `persist_quality_scores.py`), langturer (`enrich_langtur.py`), race-skår (kort), og prosa-malene (`KVALITETSOKT_PROSA_BATCH_INSTRUKS_V3` · `LANGTUR_PROSA_BATCH_INSTRUKS_V3` · `RACE_PROSA_BATCH_INSTRUKS_V1` · `_TEMPLATE.md` · `langtur_prosa_spec_v2.md` + støtteskript). Lest mot SYSTEM_OVERVIEW, CHANGELOG (inkl. nattens fire skåringsfikser), TODO, D/R-rapporten 17.07 og koden slik den står nå (mtime 23:38–23:46).


1. Systemet i ett blikk

Kjeden er: Strava/Garmin → classify → streams/repstats → `persist_quality_scores` (kvalitetsøkter) / `enrich_langtur --force` (langturer) → brief (`build_session_brief` / `build_langtur_brief`) → prosa (Claude-økt etter instruks) → HTML-bygg → auto lås+frys (`prosa_autofreeze`) → hub. Skår-sannheten bor i `quality.json`; brief er snapshotet prosaen får lov å sitere; `_locked` verner mot pipeline, `_frozen` verner skår mot formel-drift; `safe_write_quality` er skrivevakten med snapshot-ringbuffer.

Det finnes i praksis fire separate skåringssystemer med hver sin skala-semantikk:

SystemMotorTier-vokabular
Kvalitetsøkter`score_session_typed_v2` (70 % eksekusjon / 30 % kontekst)Eksepsjonell ≥9 · Sterk ≥8 · Solid ≥6 · Akseptabel ≥4 · Svak <4
Langturer`compute_langtur_score` (L1–L6-vektet, periode-fysiologi)Sterk ≥9 · Solid ≥8 · OK ≥7 · Under forventning ≥6 · Svak <6
Raceexecution-MD primær → `race_auto_score` fallback, fryst i `race_scores_lock`egne labels («Sterk — over forventning»)
Uker`weekly_scores.json` (gjennomføring A–F)bokstavkarakter

Dette er et gjennomarbeidet system. Hovedinntrykket er at kvaliteten ligger langt over hobbyprosjekt-nivå: skrivevern, frys-disiplin, vakthunder, brief-first prosa og en feilkultur der hver historisk blemme er blitt til en eksplisitt regel. Svakhetene under er reelle, men de er svakheter i et sterkt system.


2. Skåring av kvalitetsøkter — styrker

1. Type-bevisst eksekusjon. Vektene følger øktas formål (pct_in_zone 0,30 · drift 0,15 · coupling 0,15 · HR-recovery 0,15 · pace-target 0,15 · laktat 0,10; plan_completion 0,25 kun ved avbrudd, med multiplikativ straff floor 0,5). 45/15 og 4×4 NTNU har egne scorere i stedet for å tvinges gjennom generisk logikk — 4×4-fiksen (TIZ/peak-HR/completion, 70/30) er riktig medisin mot mølle-stigning-straffen.

2. 70/30-splitten skiller «hva du leverte» fra «hva dagen tillot» — og konteksten kan både trekke (sykdom ≤5 d: −1,5; TSB <−25: −1) og løfte (TSB >+5: +0,5). Det matcher Carl-bandene fra instruksen (TSB −15..−25 = produktiv overload, ikke «burde hvilt»).

3. HR-upålitelig-håndteringen er mønstergyldig: komponentene droppes helt, resten re-vektes proporsjonalt, execution cappes på 8,5, banner i HTML. Manglende måling behandles som manglende — ikke som middels.

4. Nattens fire fikser er riktige, og riktig valgt. Smal D fremfor bred D er nøyaktig det D/R-rapportens §7 viste var nødvendig (bred D drepte ekte pace-komponenter på 46 økter og tolvdoblet 5.0-konstanten). R fjerner en gratis 9,5 på 0,30-vekt uten å røre kontrollgruppa. Laktat-dict-fiksen gjør at halvert pct_in_zone-vekt endelig får laktat-komponenten som motytelse. 17.07-retaggingen (terskel → over_terskel) traff rotårsaken.

5. Frys-arkitekturen virker etter hensikten for kvalitetsøkter: persist hopper over `_frozen` alltid og `_locked` uten eksplisitt `--allow-locked --force`; bare 19 av 96 rampe-økter hadde den sirkulære 9,5-en faktisk lagret — frysen isolerte resten fra buggen. Det er selve beviset på at modellen «feil rammes fremover, ikke bakover» fungerer.

6. D/R-rapporten selv (simulering med ekte scorer, speilet rot, kontrollgruppe, eksplisitt «hva jeg ikke kan verifisere») setter en metodestandard som bør gjenbrukes ved enhver fremtidig skåringsendring.


3. Kvalitetsøkter — funn og svakheter (fremover)

F1. Nattens 5.0-fiks krasjer på veien ut — «Ingen skår» kan aldri returneres

`score_session_typed_v2` setter nå `execution_total = None` ved tom komponentliste (riktig), men return-blokka gjør `round(execution_total, 1)` (linje ~1820) → `TypeError` når verdien er None, og `"raw": round(raw, 2)` (linje ~1831) → `NameError` fordi `raw` bare defineres i else-grenen. None-stien kan altså aldri returnere `tier: "Ingen skår"` — den kaster unntak.

Konsekvens: i `persist_quality_scores` fanges det som «typed_score feilet» (økten forblir uskåret — semantisk nesten riktig, men som feilmelding, ikke som beslutning); i `build_quality_session_dashboard` ryker hele metrics-blokka («⚠ Fase B metrikker feilet»), slik at komponentnedbrytning/§10-data forsvinner fra HTML for de øktene — også i frozen-grenen, som kaller samme funksjon for å hente live-komponenter. Rammer få økter i dag (9 stk. i D/R-universet er både HR-upålitelige og uten deklarert target — alle frosne), men rammer enhver fremtidig økt i samme situasjon. Fiks er to linjer: `round(x, 1) if x is not None else None`, og flytt `raw` inn i samme guard.

F2. `persist_quality_scores` skriver quality.json UTENOM skrivevakten

Linje 278: `QUALITY_FILE.write_text(json.dumps(...))` — direkte skriv. SYSTEM_OVERVIEW §4.2 sier «ALLE skriv til quality.json går via safe_write_quality()». Scriptet respekterer frys/lås selv, men hopper over LOCKED_VIOLATION/STREAM_DROP/FROZEN_FIELD-diffen og legger ikke snapshot i ringbufferen — som er eneste rollback-vei. Dette er et daglig sync-steg (8). Én import og ett kall å rette.

F3. Frys-vernet dekker IKKE langtur-skår — og sync re-skårer dem daglig

Dette er gjennomgangens viktigste enkeltfunn, detaljer i §4. Nevnes her fordi det bryter med frys-løftet i §4.2.

F4. Fabrikkerte konstanter finnes fortsatt tre steder

Nattens fiks fjernet 5.0-konstanten i hovedscoreren, men: (a) 45/15-scoreren har fortsatt `execution_total = 5.0` ved tom komponentliste (linje ~1218); (b) tidlig retur når `effective_target_band` ikke resolver returnerer hardkodet exec 5.0 / ctx 7.0 / combined 6.0 «Solid» (linje ~1293–1305) — en tag-resolusjonsfeil blir stående som en middels skår; (c) kontekst-score defaulter til 7.0 når pre-readiness mangler. Samme filosofi bør gjelde overalt: ingen måling → None, ikke et påfunnet tall.

F5. Skår uten dekningsdeklarasjon

En skår bygget på én komponent med vekt 0,15 presenteres identisk med en bygget på seks komponenter (vektnormaliseringen skjuler det). D/R §8.3: 12 av 96 økter har ≤2 komponenter. `weights_used` finnes i typed_score men persisteres ikke som dekningsmål. Forslag: lagre `score_coverage` (sum aktiv vekt + antall komponenter) sammen med skåren, vis «tynn skår»-merke i HTML/prosa under en terskel (f.eks. vektsum <0,45).

F6. Reproduserbarhet: skår-input fryses ikke med skåren

8,5-vs-8,6-caset i D/R §2: kontekst-composite driftet 0,2 fordi wellness-felter finaliseres etter skåringstidspunktet (TR 92 → 53). Frysen låser resultatet, men ikke inputen — en fersk re-skåring av samme økt kan avvike ±0,1 av rene wellness-driftsgrunner. Forslag fremover: persist et lite `_score_inputs`-snapshot (composite, TSB, days_since_illness) ved skåring, så enhver senere revisjon kan reprodusere eksakt.

F7. Bivirkning: `_plan_completion_multiplier` lekker inn i quality.json

Scoreren skriver feltet rett i session-dicten (linje ~1705); neste persist-skriv tar det med til disk. Harmløst i dag, men det er skår-intern mellomtilstand som ikke hører hjemme i datalaget. Returner den i typed_score i stedet.


4. Langtur-skåringen — styrker og svakheter

Styrkene først: L1–L6-klassifisering med klasse-spesifikke vekter er riktig abstraksjon (rolig volum skal ikke måles som MP-tur). Periode-fysiologien (LT-ankre per æra fra `physiology_loader`) løser 2019–2022-problemet elegant — offsetene er kalibrert så 2023–2026 står stille. Distanse-skalert decoupling-toleranse, HR-justert pace-økonomi mot LT1−9-anker, og MP-troskap målt mot periodens maratonfart er alle gjennomtenkte. HR-upålitelig håndteres med samme drop-og-renormaliser-mønster som kvalitetsøktene.

F3 (hovedfunnet). Frosne langtur-skår er ikke frosne

Tre fakta som til sammen bryter frys-garantien:

1. `sync_daily.py` linje 200 kjører `enrich_langtur --force` hver dag (SYSTEM_OVERVIEW §3.1 steg 8b bekrefter). Kommentaren i `enrich_langtur.py` («Routine sync kjører uten FORCE → låste hoppes») beskriver en verden som ikke lenger finnes.

2. `enrich_langtur` sjekker kun `_locked` + har-skår + not FORCE — aldri `_frozen`. Med FORCE re-klassifiseres og re-skåres alle 213 langturer daglig, inkludert de som ble bulk-fryst 10.07.

3. `FROZEN_CORE_FIELDS` i `quality_write_guard` verner `reps/session_score/execution_score/context_score/score_tier/score_tag/_scored_at` — ikke `langtur_score`, `langtur_score_tier`, `langtur_score_components` eller `longrun_class`. Skrivevakten slipper altså endrede langtur-skår på frosne økter rett gjennom.

I dag er dette latent: samme formel + samme data gir samme tall hver natt. Men neste justering i `compute_langtur_score` eller i `zones.json`-periodene skriver stille om hele den historiske langtur-skår-flaten ved første sync — prosaen som siterer skår blir stale uten at noe flagger det. Det er nøyaktig scenarioet frys-regelen ble innført for å umuliggjøre (og motsatt vei: en endring i rep-deteksjonen som flytter `reps` på en frossen langtur vil BLOKKERE hele dagens skriv, siden `reps` ER vernet — sync-brudd). Forslag: (a) legg langtur-feltene inn i `FROZEN_CORE_FIELDS`, (b) la enrich hoppe over skår-beregning for `_frozen` (metadata-berikelse kan fortsatt kjøre), (c) rett den stale kommentaren, (d) pytest-vakt som fryser en fiktiv langtur, endrer formelen og verifiserer at skåren står.

Øvrige langtur-svakheter

  • Fabrikkert 5 for manglende måling: `decoupling is None → 5`, `cruise_hr_avg is None → 5`, pace-økonomi-fallback 5, og `components.get(k, 5)` i vektsummen. Kvalitetsscoreren forlot akkurat denne filosofien i natt; langtur-scoreren bør følge (drop + renormaliser, som den alt gjør ved HR-upålitelig).
  • `min(vol, inten)` vs kommentaren: koden sier at kvalitetskomponenten «blander volum med intensitet, så korte sterke blokker ikke straffes på volum alene» — men `min()` gjør det motsatte: en 2,5 km sterk blokk cappes på vol=6 uansett inten=10. Hvis intensjonen er blanding, er formelen feil (f.eks. 0,5·vol + 0,5·inten, eller maks(min-regel, vektet snitt)); hvis intensjonen er «begge må være til stede», bør kommentaren si det.
  • `inten = 8`-default for type B uten målt q-HR/q-pace er et skjønnstall med god begrunnelse (Strava-forskriften er autoritativ) — men den bør merkes i components-note så prosa kan se at intensiteten er antatt, ikke målt.
  • Tier-vokabularet kolliderer med kvalitetsøktene: «Sterk» betyr ≥9 på langtur men 8–9 på kvalitetsøkt; «Solid» betyr 8–9 på langtur men 6–8 på kvalitetsøkt. Samme ord, ulik valuta, side om side på hub-en og i prosa. Omdøping bakover er utelukket (frosne `score_tier`-strenger + prosa som siterer dem); forslaget er fremover-dokumentasjon: én linje i hub-tooltip/legende per flate («langtur-tiers: Sterk ≥9 …») + en regel i prosa-instruksene om aldri å sammenligne tier-labels på tvers av økttyper, kun tall.

5. Race-skår (kort)

Ordningen etter 10.07 er ryddig: execution-MD primær, `race_auto_score` (pacing-composite) som fallback, alt fryst i `race_scores_lock.json` nøklet på `race_id`, 33/34 med skår. `session_score: 6.0`-placeholderen i quality.json for race er en kjent felle og er godt skiltet i RACE-instruksens regel B. To ting fremover: (1) placeholderen kunne med fordel settes til `null` i stedet for 6.0 — en verdi som ser ekte ut er farligere enn et hull (krever tining av race-entriene én gang; du sa fremover-kun, så dette kan vente til neste naturlige unlock); (2) den parkerte EXPLORER-2 (27 døde race-lenker) står som avtalt.


6. Prosa-systemet — styrker

1. Brief-first er den bærende ideen, og den er riktig. Prosaen får bare sitere pre-flight-briefen; hele slurv-klassen fra mai (gjettet sko, hr_avg-feller, utdaterte LT-verdier) ble konstruert bort i stedet for formanet bort.

2. Anti-hallusinasjonsreglene er født av faktiske feil og er presise: skår siteres ordrett, tilde forbudt, `hr_steady_state` ikke `hr_avg` (5–10 bpm-feilen), `training_load_pre` ikke post-økt-TSB (14.07-caset: −15,85 vs +0,46), `captured_at`-sjekk på TR, planlagt ≠ gjennomført, data_warnings er for skriveren ikke leseren, ingen race-tidsprognoser uten belegg, sammenlign kun bakover i tid. Dette er den beste delen av hele malverket.

3. Autofreeze-kjeden (prosa → HTML-bygg → lås+frys, idempotent, race-safe, gated på at MD faktisk finnes) fjernet et helt manuelt disiplinkrav.

4. Provenance-vernet (aldri overskrive Opus-prosa, positiv markør-sjekk, pre-write guard) har riktig instinkt — svakhetene er i implementasjonen (§7).

5. Ordtall med QA-håndhevelse (langtur: `langtur_prosa_wordcheck.py`, 5-og-5-protokoll) + eksplisitt «aldri padd for å nå gulvet» er riktig balanse mellom dybdekrav og fyll-risiko.

6. Race-instruksens «pek, ikke dupliser» (300–500 ord, lenk til dashboards/maraton-sider) er riktig arkitektur — analysen bor der den renderes.


7. Prosa-systemet — svakheter (fremover)

P-A. Langtur-prosa har tre overlappende spesifikasjoner, og to av dem motsier hverandre

I omløp: (1) `langtur_prosa_prompt.md` (Haiku-API-æraen, `batch_langtur_prosa.py` — reelt død etter at v2 erstattet outputen), (2) `LANGTUR_PROSA_BATCH_INSTRUKS_V3.md` — 8 seksjoner, 1200–1800 ord, «Sonnet 4.6 anbefalt», (3) `langtur_prosa_spec_v2.md` (13.06) — 10 seksjoner, ≥2000 ord for 2023–2026, Opus 4.8, håndhevet av wordcheck-scriptet. Alle 213 langturer ble skrevet med (3). Likevel peker SYSTEM_OVERVIEW §2.1 fortsatt på (2) som «styrer Sonnet-prosabatcher», og (2) fikk athlete-kontekst-preamble så sent som 07.07 — den vedlikeholdes som om den er gjeldende. En fersk økt som plukker V3 i god tro leverer 1400-ords 8-seksjons prosa som QA-scriptet underkjenner (<2000) og som bryter formatet til de 213 eksisterende. Forslag: utpek spec_v2 som eneste kanon for langtur-prosa, flytt V3 og Haiku-paret til `_arkiv/utdaterte_instrukser/`, oppdater SYSTEM_OVERVIEW-pekeren. (Ev. omvendt hvis du faktisk vil ha kortere langtur-prosa fremover — men da må wordcheck-gulvene og spec_v2 endres samtidig. Poenget er: én kanon.)

P-B. `_TEMPLATE.md` henger etter instruksen den skal være autoritativ for

Instruksen (oppdatert 15.07) påbyr `training_load_pre` og `wellness_pre` med captured_at-forbehold. Malen — som instruksen kaller «den autoritative malen» — sier fortsatt «ATL/CTL/TSB — fra `training_load`-feltet» i pre-flight og «bruk wellness_morning_snapshot» uten forbeholdet. To dokumenter med eierskap til samme regel har nå ulik ordlyd; SYSTEM_OVERVIEW §10s eierskapsprinsipp (oppdater KUN i eier-dokumentet, andre kryss-refererer) er brutt i miniatyr. Samme gjelder 12-seksjonslista som står duplisert i instruksen («OPPSUMMERT FRA _TEMPLATE.md») — hver duplisering er et fremtidig drift-punkt. Forslag: malen eier struktur + datakilderegler; instruksen eier arbeidsflyt/lock-regler og LENKER til malen uten å gjengi den.

P-C. Vekt-faktafeil i kanonisk dokument

`carl.json`/`athlete_profile.json`/malen/spec_v2 sier 74 kg (Garmin siste: 73,3 kg 22.05.26). SYSTEM_OVERVIEW §9 sier «~83 kg». En W/kg-beregning som leser §9 bommer med ~12 %. Rett §9 ved neste naturlige SYSTEM_OVERVIEW-oppdatering.

P-D. Provenance hviler på modellnavn-strenger og en 8 KB-heuristikk

`needs_prosa`/`safe_to_overwrite` matcher på `claude-opus`/`claude-sonnet`/`deep_analysis_writer_v2` + filstørrelse 8000 bytes. Tre skjørheter: (1) en fil <8 KB uten kjente markører faller gjennom til «trenger prosa» og er lovlig å overskrive — små håndskrevne filer vernes i dag bare av manuelle skip-lister (2026-05-23-referansen, London/Berlin-prosaene); (2) verne-hierarkiet er bundet til modell-FAMILIE (opus = hellig, sonnet = omskrivbar) — prosa skrevet av en tredje familie (Fable, fremtidige navn) har ingen definert plass; (3) frontmatter-malene hardkoder `writer: claude-sonnet-4-6` uansett hvem som faktisk skriver, så hub-ens AI-badge (Fable/Opus/Sonnet) og fremtidig deteksjon feilinformeres i det øyeblikket en annen modell brukes. Forslag: innfør to eksplisitte frontmatter-felt fremover: `writer: {faktisk modell-ID}` (skriveren setter inn sin egen, aldri hardkodet i mal) og `writer_class: batch | deep | manual` + `protected: true` for alt som aldri skal auto-overskrives. Detektorene sjekker feltene først; strengmatchingen beholdes kun som fallback for gamle filer. Da overlever vernet modellskifter uten instruks-kirurgi.

P-E. QA-en er asymmetrisk

Langtur-prosa har wordcheck + 5-og-5-protokoll; kvalitetsøkt-prosa (1500–2500 ord, 12 seksjoner) har ingen tilsvarende mekanisk sjekk, og konsistens prosa↔kanonisk skår sjekkes bare når noen manuelt kjører `prosa_queue.py`. Forslag: generaliser wordcheck til begge maler (den kjenner allerede seksjonsmønsteret), og legg `prosa_queue.py --check` som ikke-kritisk vakthund i sync (rapporterer stale prosa, endrer ingenting). Massreskår-køens 19 + 95 (O6) er for øvrig fortsatt åpen og blir første reelle test av den løypa.


8. Modellspørsmålet: er prosa låst til Sonnet 4.6?

Nei — teknisk er ingenting låst. Batch-instruksene er lim-inn-dokumenter; modellen velges i chat-oppstarten, og ingen kode håndhever valget. Men tre ting gjør 4.6 til de facto standard: instruksene anbefaler den eksplisitt («Sonnet 4.6 anbefalt» i begge V3-instrukser), `generate_prosa_prompt.py` genererer batch-prompter med «Sonnet 4.6» i tittelen, og frontmatter-malene hardkoder `writer: claude-sonnet-4-6` — så selv prosa skrevet av en annen modell blir stemplet som Sonnet 4.6.

Og ja — 4.6 er nå én generasjon bak. Claude Sonnet 5 ble lansert 30.06.2026. Repoets egen modellhistorikk (Haiku 4.5-API-batchen som ga for grunn prosa → Sonnet 4.6-batcher → Opus 4.7/4.8 for dyp prosa → Fable for tunge analyser) viser at modellnivå faktisk flytter kvaliteten i akkurat denne oppgaven, så pinningen har en reell kostnad, ikke bare kosmetisk.

Arbeidsdelingen din (Fable = syntese/metodevalg, Opus = dyp prosa, Sonnet = batch-mekanikk — Fable-2dagersplan-prinsippet) er fortsatt riktig. Forslaget er ikke å endre den, men å av-pinne versjonene:

  • M1: Bytt «Sonnet 4.6 anbefalt» → «nyeste Sonnet (per juli 2026: Sonnet 5); Opus/Fable ved behov for dybde» i begge V3-instrukser + race-instruksen, og la modellanbefalingen bo ETT sted (f.eks. en to-linjers «Modellvalg»-blokk i SYSTEM_OVERVIEW §10 som instruksene peker til). Da er neste modellgenerasjon én linje å oppdatere, ikke fire dokumenter.
  • M2: `writer:` = faktisk modell, alltid (se P-D). Revisions-lista likeså.
  • M3: Vern på `writer_class`/`protected`, ikke på modellfamilie-strenger (se P-D).

9. Prioriterte forslag — samlet (alle fremover-kun)

#TiltakHvorforInnsats
1Guard `round(None)`/`raw` i return-blokka til `score_session_typed_v2`«Ingen skår»-stien krasjer i stedet for å returnere (F1)2 linjer
2Frys-vern for langtur: `langtur_score*` + `longrun_class` inn i `FROZEN_CORE_FIELDS`, enrich hopper skår for `_frozen`, rett stale FORCE-kommentar, pytest-vaktFrosne langtur-skår kan i dag drifte stille ved neste formel-/zones-endring (F3)liten
3Rut `persist_quality_scores`-skrivet gjennom `safe_write_quality`Daglig skriv uten snapshot/rollback og utenom vaktene (F2)3 linjer
4Fjern gjenværende fabrikkerte konstanter: 45/15-5.0, etb-tidligretur 5.0/7.0/6.0, ctx-default 7.0 → NoneSamme filosofi som nattens fiks, konsekvent gjennomført (F4)liten
5Én kanon for langtur-prosa: spec_v2 utpekes, V3 + Haiku-paret arkiveres, SYSTEM_OVERVIEW-peker oppdateres1200–1800 vs ≥2000 ord og 8 vs 10 seksjoner i samtidig omløp (P-A)flytt + 2 pekere
6Modell-avpinning M1–M3 (nyeste Sonnet, writer=faktisk modell, writer_class/protected)4.6 er én generasjon bak (Sonnet 5, 30.06.26); provenance tåler ikke modellskifte (P-D, §8)instruks-redigering
7Synk `_TEMPLATE.md` med 15.07-reglene (`training_load_pre`, captured_at) + fjern duplisert seksjonsliste fra instruksenTo autoritative dokumenter sier ulike ting om samme felt (P-B)liten
8`score_coverage` persisteres + «tynn skår»-merke i HTML/prosa (f.eks. vektsum <0,45)12 av 96 økter hviler på ≤2 komponenter uten at det synes (F5)middels
9`_score_inputs`-snapshot ved skåring (composite, TSB, days_since_illness)8,5/8,6-driften: input fryses ikke med resultatet (F6)liten
10Langtur: manglende måling → komponent ut + renormaliser (ikke 5); avklar `min(vol, inten)` mot intensjonen; merk `inten=8`-antagelsenSamme «ingen fabrikkerte tall»-linje som kvalitetssiden (§4)middels
11Tier-legende per flate i hub + prosa-regel «sammenlign aldri tier-labels på tvers av økttyper»Sterk/Solid betyr ulike tallbånd på kvalitet vs langtur (§4)liten
12Wordcheck generalisert til kvalitetsøkt-prosa + `prosa_queue --check` som ikke-kritisk sync-vakthundQA-asymmetri; stale prosa oppdages i dag manuelt (P-E)middels
13Stopp `_plan_completion_multiplier`-lekkasjen til quality.jsonSkår-intern tilstand i datalaget (F7)liten
14Rett «~83 kg» i SYSTEM_OVERVIEW §9 (74/73,3 kg er kanon)W/kg-feil på ~12 % for enhver som leser §9 (P-C)1 linje

Rekkefølge-logikk: 1–4 er kode-korrekthet og bør tas i én liten økt (med D/R-metodens kontrollgruppe-disiplin); 5–7 er dokument-kirurgi uten kode; 8–12 er kvalitetsløft som kan tas når det passer; 13–14 er plukk.

10. Hva jeg bevisst IKKE foreslår

Ingen re-skåring eller re-prosa av frossen historikk (massreskår-køens 19 + 95 står som din beslutning, O6); ingen omdøping av tier-labels bakover (lagrede strenger + prosa-sitater gjør det til et blandingsvokabular-prosjekt); ingen endring av 70/30-arkitekturen eller L1–L6-klassene — begge bærer godt. Frys-prinsippet «feil rettes fremover, historikk står» er systemets ryggrad og er lagt til grunn for alt over.


Grunnlag: SYSTEM_OVERVIEW (05.07) · CHANGELOG t.o.m. nattens skåringsfiks-oppføring · TODO (08.07) · `Analyser/Rapport_Skaaringsfikser_D-og-R_v1.md` (17.07) · kode per 17.07 kl. 23:42 (`quality_session_metrics.py`, `persist_quality_scores.py`, `enrich_langtur.py`, `quality_write_guard.py`, `prosa_autofreeze.py`, `validate_scores.py`, `sync_daily.py` linje 200, scorere for 4×4/45-15/race) · alle tre batch-instrukser + `_TEMPLATE.md` + `langtur_prosa_spec_v2.md` + wordcheck/queue/digest-skriptene. Ingenting i repoet er endret av denne økta; rapporten er eneste nye fil.

Hub runde 4 — design-auditHva: Design-audit av hele den gamle huben rendret i Chromium: talkonflikter, designsystem, ytelse og tiltaksliste.
Konklusjon: Tre paletter, 28 skriftstørrelser og 880 kB inline data — forslagene om nøytral topplinje, én dom og én grafkomponent ble Hub 2.0.
2026-07-18
#hub#design#audit

Hub — runde 4: design-audit + designsystem

Dato: 2026-07-18 · Scope: hele hub-en, design-hovedvekt · Metode: hub.html (bygg 18.07 20:48) rendret headless Chromium — alle 12 hovedfaner i 1440 px lys, 9 flater mørk, 6 flater 390 px — pluss kodegjennomgang av `build_hub_dashboard.py` (9 494 linjer) og rendret CSS/JS.

Etter: runde 1 (17,9→2,6 MB, W1/T1), runde 2 (R1–R13), runde 3 (A/B/C-forslag), Blokka nå + Blokkplan-SVG v2 (18.07, godkjent mockup). Disse flatene er ferske og fredet her.

Ingenting i byggeren er endret. To mockups følger: `Running_Mockup_Forside_v1.html` · `Running_Mockup_Grafstil_v1.html` (begge med lys/mørk-knapp).


1. Diagnose — tallene først

MålingVerdi
hub.html2 194 kB: markup ~867 kB · inline JS 984 kB (23 blokker) · CSS 73 kB (12 blokker) · 1 base64-PNG 219 kB. + hub_data.js 1 155 kB
Inline datatabeller i HTML-enRO_ROWS 465 kB · KV_ROWS 211 kB · LR_ROWS 158 kB · RACE_ROWS 24 kB · modell-M 25 kB ≈ **880 kB som hører hjemme i hub_data.js**
DOM ved last**51 032 noder** · 15 av 24 Chart.js-instanser tegnes ved last (resten lazy)
Lastetid lokal fil1,5 s til load — akseptabelt; Cloudflare-cache gjør resten
Sidehøyder @1440Rolige **41 184 px** (1 409 rader rendret) · Kvalitet 14 058 · Langtur 8 619 · Mål 7 559
font-size i CSS**28 unike verdier** (8–40 px, inkl. 9,5/10,5/11,5/12,5/13,5) — tokens `--fs-xs…xl` finnes, men brukes nesten ikke
border-radius / box-shadow21 / 25 unike verdier
Inline `style="…"`**1 299 stk** (color 740, font-size 591) — G3/C4 fra runde 1–3 står i praksis åpen
Hardkodede farger114 unike hex i CSS (202 forekomster) + 62 unike hex i graf-JS (171) — utenom variabelsystemet
Kategorifarger**3 ulike paletter for samme kategorier** (se §3.2)
Tooltip-konfig22 tooltip-blokker, 20 unike — ingen `Chart.defaults`, ingen felles graf-komponent
Breakpoints720 px ×4, 700 ×2, 640, 900, 1100 — fem ulike grenser

2. Innholdsfeil og talkonflikter (synlige nå, med rotårsak)

F1 · Energimila-nedtelling feil i headeren. Header-strip: «21d». Blokka nå/Mål: «om 25 d». Rotårsak: `em = date(2026, 8, 8)` hardkodet (L4255, + strengen «2026-08-08» L1939) — løpet er 12.08. (2 linjer)

F2 · «Plan vs faktisk · uke 29: 524,9 / 92 km · +470 %» (Historikk & form). `compute_plan_vs_actual` (L2276) matcher aktiviteter på `isocalendar()[1] == iso_week` uten år — summerer uke 29 fra alle år 2019–2026. Riktig er 86,8/92. (1 linje)

F3 · Tre TSB- og to CTL-verdier samtidig. Hero-flis −14/94 (bevisst «i går EOD», kommentar L4259) · Bremser + Uka-tabellen −31 (post-økt i dag) · Mål-fanen «TSB −31.2 / CTL 98.3» · Historikk-kort CTL 98. Konvensjonen finnes men er umerket — det ser ut som feil. Forslag: én visningskonvensjon (morgen/pre-økt) + suffiks der annet vises («TSB −31 (post-økt)»). (labels: ~30 min)

F4 · To motstridende dommer på forsiden. Status-pille «Moderat — modifiser 6,5/10» 250 px fra morgenbriefens «Klar for trening — full kvalitet OK» — med HRV 61 (−15) og søvn 6,0 t rett under. To generatorer, to konklusjoner. Forslag: beredskapen eier dommen; briefen viser kontekst, ikke egen overskrift-dom (mockup 1). (se §5 P1)

F5 · To ulike «ukas plan». Trening→Uka: 108 km (training_plan_daily, v4.3). Mål-fanen «Denne ukas plan»: mål-volum 91 km med andre økter (auto-generert weekly_plan/training_prescription). Én sannhet finnes — Mål-fanen bør vise den, eller merkes «modellens generiske uke». (30 min–1 t)

F6 · Rolige turer: alle 1 409 økter «🏠 Inne», vær-kolonnen tom. Rotårsak L8300: `_is_indoor = not _has_gps` — kilden mangler GPS-felt for rolige. Kvalitet-fanen gjør det riktig (mølle/hall-tagger). Fiks klassifiseringen eller dropp arena/vær-kolonnene her. (30 min)

F7 · «Nike Nike Zoom Fly 6» — merke+modell dobles i sko-navn på Rolige (21 forekomster i RO_ROWS). (10 min)

F8 · Ukesrapport-stopp W23 + stale banner. Nyeste rapport = W23 (1.–7. juni). Banneret «→ Fra ukesrapport 2026-W23: uka leverte (A) — gjenta strukturen» vises på Uka-fanen som om det gjaldt nå (6 uker gammelt), og «W29/W30 ikke frosset» lyser rødt. Fiks snapshot-kjeden (T5-oppfølging) og demp banneret automatisk når rapporten er >2 uker gammel. (pipeline 1–2 t)

F9 · Skår-farger: tre skalaer for samme tall. Kvalitet-pille: grønn ≥9 / blå ≥8 / gull ≥6,5 / rød. Langtur-farge: grønn ≥8,5 / blå ≥7 / gull ≥6 / oransje. Race: egen tredje. Samme 8,9 er blå på Kvalitet og grønn på Langtur. Kanoniske tiere finnes (Sterk ≥9 · Solid ≥8 · OK ≥7 · Under ≥6): én `scoreClass()` + én pille-komponent + synlig legend. (45 min)

F10 · Kropp & lab: dubletter og døde rader. «VITAMIN D» (BAD, sist 22.04.2025) ved siden av «- VITAMIN D3» (NEUTRAL, uten ref) · «VITAMIN B12 235, sist 28.11.2024» ved siden av «AKTIVT-B12 105,6» (foretrukket markør) · Tester-raden «Laktatprofil Lade — venter på data» fra 03.2024. Vis foretrukket markør, arkiver resten bak «vis alle». (30 min)

F12 · Vekt-panelet defaulter til 1 år og stopper 22.05 (siste måling) — ser dødt ut ved siden av 30d-panelene. Merk «siste måling 22.05» i panelheaderen. (15 min)


3. Design-audit

3.1 Hero/header (alle faner)

Hele topplinja er statusfarget (gull-gradient ved «moderat») og er sidas mest dominerende flate uansett innhold. Tre problemer: (a) statusfargen gjentas ikke semantisk — 13 fliser i 13 pastellfarger der fargen er metrikk-identitet, ikke tilstand; TSB −14 er grå, HRV 61 rosa; (b) gull-på-gull: Kbh-pillen «60 %» (gull) forsvinner mot gull bakgrunn; (c) i mørk modus består gullbanneret uendret og lyser. Forslag (mockup 1): nøytral mørk-teal identitetsflate, status samlet i ÉN statuslinje, fliser nøytrale med 3 px varsel-stripe kun ved avvik (gull/rød — normal = ingen farge). Fane-raden selv er god (aktiv teal, rolig hover); mobil-scroll fungerer (36 px høy).

3.2 Fargesystem

Samme seks kategorier har tre paletter: kalender-dots (`#5acc6e/#ada6e0/#ff7575/#6db4ff/#ffcb05`), `_CATEGORY_COLORS` i blokkplan/volum-PNG (`#8aa399/#4a7baa/#c95555/#c8a951`), og Chart.js-volumgrafen (teal/lyseblå/rød/gull). Langtur er lilla ett sted og blå to andre; styrke-blå kolliderer med langtur-blå; sko-fanen bruker teal for «kvalitet» som ellers er rød. I graf-JS ligger 62 unike hex uten system. Forslag: én kanonisk kategoripalett, CVD-validert i begge moduser (validator fra designverktøyet, alle sjekker PASS):

KategoriLysMørk
rolig`#3F9D6B``#4EA576`
langtur`#3F77C2``#5B93DB`
kvalitet`#C24E4E``#DB6B6B`
styrke`#8873CC``#9683D6`
race`#A98428``#B8862F`
hvil/annetnøytral grå utenfor serien

Rekkefølgen over er også stable-/legend-rekkefølgen (validert på nabopar). Statusfarger (`--ok/--warn/--alert/--stress/--info`) reserveres for tilstand og gjenbrukes aldri som seriefarge. Sone-rampen I1–I5 beholdes som egen sekvensiell skala.

3.3 Typografi og komponenter

28 font-størrelser og 1 299 inline styles betyr i praksis: hver flate har sin egen dialekt. Kropp & lab, Blokka nå og Sko viser allerede riktig retning (small-caps kicker, verdi stor, ref-linje dempet, status i kant-stripe/chip). Forslag: lås skalaen til `--fs-xs 11 / sm 12,5 / md 14 / lg 17 / xl 22 / hero 28`, radius 8/10/12, én kort-skygge — og gjenbruk fire komponenter overalt: `card + kicker`, `stat-tile`, `status-pill/chip`, `md-tabell`. Emoji beholdes i fane-raden (identitet), tones ut av seksjonsoverskrifter (58 av 362 h2/h3 har emoji i dag) — Kropp & lab-stilen er normen for «rolig/profesjonell».

3.4 Grafsystem (26 canvas)

Ingen `Chart.defaults`; 20 unike tooltip-konfigurasjoner; høyder 190–300 px; datoakser med fulle ISO-datoer («2026-06-19») i Wellness, «29. mar» på Mål, «26-04-27» på Historikk; legend av/på tilfeldig; serifarger fra 62 løse hex. Mørk modus: bare deler leser CSS-variabler (14 getComputedStyle-kall), resten står med lys-farger. Forslag (mockup 2): én `hubChart()`-fabrikk — høyde 190 px, «18.7»-datoformat maks 6 ticks, kun horisontal grid `--chart-grid`, felles mørk tooltip, rå dagslinje tynn/35 % + 7d-snitt som hovedlinje + 50d-baseline stiplet gull, hendelses-overlay (infeksjon/stress/uavklart/ferie) som felles plugin, farger lest fra CSS-variabler ved init + re-render ved `matchMedia('prefers-color-scheme')`-endring. Wellness i tillegg: én felles rekkevidde-rad i stedet for ti. Søvn-grafens doble y-akse (score venstre, timer høyre) bør bli score-graf + timer-minigraf — to skalaer, to grafer.

3.5 Mørk modus — konkrete brudd (rendret og målt)

1. Mål-fanen er helt lys i mørk modus — det inlinede prediksjon-fragmentet beholder egen lys palett (`#faf9f6`-flate, hvite kort/knapper). Største enkeltbrudd. Fiks: la scope-CSS-en arve hub-tokens (map `--bg/--card/--fg` inn i `#maal-inline`).

2. Morgenbrief-kortet har en hardkodet lys diagonal-gradient som blir en grå «flekk» i mørkt; venstrekolonnens etiketter mister kontrast.

3. Immunvakt-banneret: lys gul bakgrunn består mens teksten bytter til lys — kontrast ~1,5:1, uleselig.

4. Matplotlib-PNG-ene (CTL-projeksjon, årsvolum m.fl.) er hvite plater i mørkt.

5. Hero-gullet og blood-tooltip (hvit) består. Kvalitet/Langtur/Sko/Blokkplan virker; av de 114 unike CSS-hexene ligger flertallet utenfor dark-overrides og bør sorteres én gang (mange er harmløse chip-pasteller).

3.6 Mobil (390 px, målt)

Fane-rad scroller pent; forsiden fungerer, men hero-en tar hele første skjerm (~750 px før innhold). Brudd: Uka-kalenderen beholder 7 kolonner → hele siden sidescroller (524 px bred); weekplan-tabellen 551 px; Mål-fragmentet 430 px. Kvalitet/race-tabellene løses OK med intern scroll. Forslag: <640 px → kalender som dagliste (agenda) for inneværende uke + kompakt ukestripe; hero kollapser til statuslinje + 4 fliser; Mål-fragmentet får `max-width:100vw`-overstyring.

3.7 Tetthet vs. støy — hva fortjener plassen

Forsiden svarer i dag godt på «hvordan ligger jeg an» (fliser/racer) men «hva gjør jeg i dag» ligger 630 px ned, under to bannere. Mockup 1 snur hierarkiet: dom → nøkkeltall → dagens økt (med immunvakt integrert som stripe i øktkortet — den styrer jo økta) → kontekst → vær. Race-info står i dag 3× innen 300 px på Mål (topplinje + tre kort + header-strip): behold kortene, dropp topplinja. Wellness: Overnight HR-panelet dupliserer RHR (Garmin-RHR er nattbasert, W2-punktet står åpent) — legg oHR som toggle i RHR-panelet. Avtaler/Analyser/Styrke bærer sin plass.


4. Ytelse

Ett 2,2 MB dokument er ikke problemet (1,5 s lokal last, PWA-cache) — DOM-en er: 51 032 noder, hvorav Rolige alene rendrer 1 409 rader (41 184 px). Tre grep uten å miste «alt på én side»:

1. Flytt RO/KV/LR/RACE_ROWS (~880 kB) til hub_data.js (R4-mønsteret) — HTML-delen krymper til ~1,3 MB og datafila cacher separat på innholds-hash. (1–2 t)

2. Render arkivtabellene fra JS ved første faneåpning (lazy, som Wellness-grafene i dag) og vis siste 200 rader + «vis alle». DOM ved last anslås ned mot ~20 000 noder. (2–3 t)

3. La eager-grafene utenfor aktiv fane (15 tegnes ved last i dag) initieres ved faneåpning — mønsteret finnes alt i `initWellCharts`. (1 t)


5. Prioritert tiltaksliste (effekt × innsats)

PriHvaInnsats
**P0**F1, F2, F6, F7, F11 + F12 (rene feil, ingen designvalg)~1,5 t
**P1****Forside + status-konsolidering** (mockup 1): nøytral header, én dom (F4), 8+«flere» fliser m/ semantisk stripe, dagens økt øverst, F3-labels3–4 t
**P2****hubChart()-utrulling** (mockup 2): Wellness først (10 grafer), så Historikk/Analyser/PR; felles tooltip/akser/palett; dark-refresh-hook4–6 t
**P3**Mørk modus-resten: Mål-scope arver tokens · morgenbrief-gradient · immunvakt-banner · PNG→hubChart eller mørk variant (§3.5)2–3 t
**P4**Kategoripalett kanoniseres (§3.2) i kalender, blokkplan-SVG, volumgrafer, sko-badges + skår-skala F92 t
**P5**Ytelse §4 (data-flytt, lazy arkiv, lazy grafer)4–6 t
**P6**Mobil §3.6 (agenda-kalender, hero-kollaps, Mål-bredde)2–3 t
**P7**Innhold: F5, F8, F10 + Avtaler-iframen inline med `_inline_standalone_page` (siste iframe sammen med explorer)3–4 t
**P8**Hygiene: 5 breakpoints → 2 (720/1100) · inline styles → klasser der flater likevel røres (løpende)løpende

P0 kan tas uten mockup-godkjenning om du vil — det er faktafeil, ikke design. Alt annet venter på deg.


6. Mockups til godkjenning

`Running_Mockup_Forside_v1.html` — Oversikt → I dag med ekte 18.07-data. Endringer å ta stilling til enkeltvis: (1) nøytral header i stedet for statusfarget gull; (2) én statuslinje som eneste dom; (3) 13→8 fliser + «flere», farge kun ved avvik, delta-linje mot baseline; (4) dagens økt som hovedkort med immunvakt integrert; (5) morgenbrief komprimert til kontekst-kolonne; (6) kortere datoformat.

`Running_Mockup_Grafstil_v1.html` — hubChart-systemet på fire Wellness-paneler med ekte 90-dagersserier, hendelses-overlay, felles rekkevidde-rad og fungerende lys/mørk-bytte (grafene re-tegnes fra CSS-variabler — samme mekanisme som foreslås i byggeren).

Begge har 🌗-knapp oppe til høyre. Si hva som godkjennes/forkastes, så implementeres kun det — med backup av byggeren først, `python3 scripts/build_hub_dashboard.py` og render-verifisering lys+mørk som sist.

Fable-planen — to dagerHva: Plan for to Fable-dager: hvilke analyser som krever dømmekraft, og hva som går til Sonnet-batcher.
Konklusjon: Fable brukes der syntese i ett forsøk betyr mest; mekanikken (revisjonskøen, backfill) går til Sonnet.
2026-07-05
#fable#plan#prioritering

Fable-planen — to dager, maksimal utnyttelse

Dato: 2026-07-05 · Prinsipp: Fable brukes der dømmekraft/syntese i ett forsøk betyr mest (dype analyser, metodevalg, tverr-syntese). Sonnet-batcher tar mekanikk (revisjonskøen: 19 prosa + 95 frosne, HIST-backfill). Hver økt under = én frisk samtale, session-sized.


DAG 1 — analyse-tung (svarer på «maraton-analysene» + «nye sammenhenger»)

Økt 1 — NY SYSTEM_OVERVIEW + CHANGELOG-komprimering (Carl-forslag 5.7 — riktig første jobb). Full inventar av HELE mappetreet (denne planens forgjenger overså Sessions/races/maraton — beviset på at dagens dokumentasjon ikke speiler virkeligheten). Skriv SYSTEM_OVERVIEW fra bunnen: hva finnes, hvor ligger det, hvem eier hva, hvilke scripts genererer hva. Komprimer CHANGELOG (3 400+ linjer) til årets hovedlinjer + flytt detaljene til `_arkiv/CHANGELOG_full_2026H1.md`. Inkluder RYDD-1 (dashboard-duplikatene → _arkiv).

Økt 2 — Tverr-maraton-syntesen (flyttet opp — grunnlaget FINNES allerede). Alle 11 maraton har komplette 13-seksjons-analyser i `Sessions/races/maraton/` med kvantifiserte treningsblokker. Syntesen leser alle 11 + modell-LOO-residualene: hva skiller beste fra verste (blokk-KPI, pacing-disiplin, fylling/mage per løp, race-eve, vær-justert) → sub-3-oppskrift v2 med konfidens per KPI. race_deep-FRAMEWORK-vinkelen (Riegel/TSB-korreksjon per løp) flettes inn der maraton-sidene ikke dekker den.

Økt 3 — Modell-mat (utvikling): (a) RACE-1 lukkes: utvid stream-fetch til `race`-type (én linje, samme fiks som langtur) + bygg dashboards for de 4 gamle løpene; (b) B2 vind-re-fit — race_weather har nå wind_mean_ms per løp, 30-min-jobb som skjerper vind-koeffisienten; (c) B6 B-løps-residualer logges (dobler kalibreringstilfanget gratis); (d) stress-gate v2 (KLASS-2): rekalibrer backtesten mot stress-onsets som mål (det er dét den faktisk predikerer — 27 %-recall-tallet får nytt, ærligere hjem) + språkvask i brief/status.

DAG 2 — syntese + de tunge løftene

Økt 4 — To nye sammenhenger (data finnes, aldri analysert):

1. Varme-adaptasjons-kvantifisering — Italia-ukene er et naturlig eksperiment: HRV/RHR/EF før–under–etter, mot fjorårets samme uker. Tallfester plasmavolum-effekten du kommer hjem med 17.7 → direkte input til u29-doseringen og T2.5-tolkningen 19.7. Tidskritisk — gjør denne før hjemkomst.

2. Søvn→kvalitetsøkt-verifisering — «søvnscore < 78 = aldri vellykket kvalitet»-regelen i COACH_INSTRUCTIONS er gammel; test mot alle skårede økter (n≈420) og skjerp/flytt terskelen med konfidens.

Økt 5 — valg etter smak: (a) A3 ukeplan-forhandleren (mest coaching-transformative som gjenstår), eller (b) DESIGN-1-resten hvis du har kjørt `npm i -D playwright` — da kan økta SE fanene og gjøre typografi/hero/farge-løftet ordentlig med før/etter-screenshots.

Parallelt (ikke Fable)

  • Sonnet-batch: `Analyser/Massreskaar_revisjonskoe_2026-07-05.md` (19 prosa-revisjoner + 95 frosne unlock-løype) + HIST-1-prosa videre bakover.
  • Brukersteg (5 min): HEAD.lock-kommandoen · `npm i -D playwright` · vurder ny Strava bulk-eksport (låser opp HRQC-1 FIT-skann → wrist/belte-fasit for hele historikken — kandidat hvis en økt blir til overs).

Helt nye hub-elementer (etter de to dagene, mindre modell-avhengig)

Tidsreise-modus (A5) · events-tidslinjen utvidet til alle grafer · D15 årsrapport-generator (desember) · A1b widgets-token. Hub-en er ellers funksjonelt komplett — verdien de neste dagene ligger i ANALYSENE, ikke i flere flater.

Systemgjennomgang — forbedringsforslagHva: Systemgjennomgang med ferske øyne: forbedringsforslag for coaching, data og drift.
Konklusjon: Systemet er modent; de svake punktene er læringsløkker som ikke er lukket, tynt innsamlede subjektive data og gamle kjente feil.
2026-07-04
#system#forslag#coaching

Systemgjennomgang med ferske øyne — forbedringsforslag

Dato: 2026-07-04 · Grunnlag: CHANGELOG, SYSTEM_OVERVIEW, PREDICTION_MODEL, TODO, all kode/data gjennomgått i denne sesjonen (modellrevisjon, blokkanalyse, HR-QC, planarbeid)

Overordnet vurdering: Systemet er uvanlig modent — kanonisk eierskap per fil, vakthunder, lock/freeze-disiplin, validert modell, alt konsumeres via én kanal (hub). De svake punktene er ikke arkitektur, men (a) læringsløkker som ikke er lukket (race → modell → plan), (b) subjektive data som samles tynt (RPE, ernæring, smerte), og (c) noen kjente bugs/TODO-er som har ligget lenge (dual-path, mass-reskår, mobil).


A. Coaching (12)

1. Post-race debrief-protokoll. Auto-rapport samme kveld: predikert vs faktisk vs CI + splits + HR-drift + 5 strukturerte subjektive spørsmål (pacing-følelse, mage, fylling, mental, «hva ville du endret»). Lagres i Races/ og mates til neste blokkplan. Energimila 12.8 = pilot.

2. Banister what-if på planfila (MOD-6). Planen ligger nå strukturert dag-for-dag → simuler «−10 km/u», «dropp uke 35-dobbel», «syk 5 dager» og se Amsterdam-effekten. Gjør planjusteringer datadrevne i stedet for magefølelse.

3. Readiness-gate som eksplisitt beslutningsregel. I dag prosa i morning brief; gjør om til trafikklys per planlagt økt (HRV/RHR/søvn-terskler fra COACH_INSTRUCTIONS) + konkret auto-forslag («flytt PM-økta til torsdag»).

4. RPE-logg 30 sek etter hver kvalitetsøkt (TODO #6): én Pushover-reply med tall 1–10 + ett ord. Divergens exec-score høy/RPE høy over 2 uker = tidligste overbelastningsvarsel som finnes.

5. Laktat-protokoll på rytme: fast kontrolløkt hver 14. dag i blokk (5×2000 @ 3:52, måling etter drag 2 og 5) → LT2-drift-kurve gjennom blokka i stedet for ad hoc-punkter. Mater både coaching og (senere) Kalman.

6. Varme-adaptasjon som ressurs nå: Italia-ukene er de facto varmeblokk. Protokollfør: 10–14 d eksponering gir plasmavolum-løft som vises som HRV-hopp/RHR-fall ved hjemkomst — ikke tolk det som formhopp i seg selv, men bruk det i uke 30–31-doseringen.

7. Styrke inn i samme planfil. strength_plan.json lever parallelt med egne uker; slå sammen med training_plan_daily (felt per dag) + auto-konfliktsjekk (aldri tung underkropp <36 t før TOSK/langtur; din 4-øvelses-regel håndheves).

8. Taper-cockpit: egen visning siste 14 d før mål — TSB-bane mot race-dag (mål: +5–+15), HRV-CV-trend (skal falle), søvnbank, sjekkliste (sko, fylling, drop-bag). Historisk fasit: alle PR-maraton på positiv TSB.

9. Pacing-plan-generator per race: km-for-km mål fra modellprediksjon + løypeprofil + værvindu; eksport som utskrivbar tabell/armbånd-PDF. Amsterdam: flat, men vind-legger på 30–38 km bør planlegges.

10. Ukentlig auto-retro søndag kveld (bygger på Ukesrapporter): faktisk vs plan + KPI-avvik + ett konkret justeringsforslag for neste uke. Nå er rapporten deskriptiv; gjør den preskriptiv.

11. Teknikk-overvåkning under fatigue: running dynamics finnes per økt — flagg når GCT/vertikal ratio degraderer >X % i siste tredjedel av langturer (durability-markør, NY-2023-lærdommen).

12. 2027-målprosess etter Amsterdam: datadrevet sesongevaluering (blokk-KPI-er vs utfall) + neste nivå-mål (sub-2:45? bane-10k sub-36?) mens motivasjonen fra høstresultatene er fersk.

B. Prediction (12)

1. Lukk læringsløkka: auto-append per race i PREDICTION_MODEL §validering (predikert@T-14/T-7/race-eve vs faktisk + CI-treff). I dag manuell hukommelse; gjør det til pipeline-steg race-kvelden.

2. Vind-re-fit med backfillede data: race_weather.json har nå wind_mean_ms per løp — dagens vind-koeffisient er fitted på upresis aktivitets-vind. Samme øvelse som temp (og vurder retningsvekting à la langtur-WGAP).

3. Laktat som Kalman-kilde når loggen har ~10+ punkter på kontrolløkter (henger på A5-protokollen).

4. Personalisert taper-bonus: TAPER_BONUS er litteratur-konstant; du har nå 3 PR-løp med kjent TSB — estimer eget optimum (TSB-race-dag ↔ residual) når n vokser.

5. Race-readiness-score T-7: kombiner TSB-prognose, HRV-CV, sykefravær siste 14 d, terskeldose til én kalibrert score med historisk treffprosent — «grønn/gul/rød uke før».

6. B-løp som gratis kalibrering: parkrun/testløp tagges effort_b (ute av fit) men residualene LOGGES — dobler datapunkt-tilfanget uten å koste A-races.

7. Garmin-benchmark-spor: garmin_race_predictions.json ligger der — plot Garmin vs egen modell vs faktisk over tid på prediksjon.html (sanity + moral).

8. Vær-scenario-slider på prediksjon.html: temp 8–24° → tid per mål (heat-prior er implementert; eksponer den interaktivt).

9. Form-fall-varsel: Kalman-tilstand svekket >1,5 % over 14 d → Pushover («form-dipp — sykdom/last? sjekk hub»). Motstykket til dagens sykdomsvarsel.

10. Usikkerhets-dekomponering: vis CI-bidrag (modell-σ vs projeksjons-σ vs tilstands-σ) per mål — gjør det tydelig at Amsterdam-usikkerheten krymper mest av å løpe Kbh.

11. Per-distanse k og HM-durability når n≥40 (10k-terskeldose har HM-analog: HMP-km siste 6 u — testbar allerede nå).

12. 5k-splitt-strategi fra modellen for 10k-løp (Energimila: modellens 35:59 → 17:55/18:04-splitt med negativ-split-bias som historisk matcher deg).

C. Lifestyle / wellness (12)

1. Søvn-regularitet som KPI (leggetids-varians, ikke bare score/timer) — sterkeste enkle immun-prediktor; data ligger alt i Garmin-søvn.

2. Sykdomsprediksjonen må valideres og få tenner: predict_illness finnes — backtest mot 2025–26-utbruddene, og la høy risiko + planlagt dobbel-terskel auto-foreslå bytte (45 % av utbrudd starter på ATL ≥ p75).

3. Fylling-tracking per langtur: g karbo/t som felt (parse Strava-desc «80g/t» slik laktat parses). KPI: 85–90 på L4-turer. Historisk mage-risiko på maraton reduseres i trening, ikke på race-dag.

4. Immunvakt-sjekkliste som widget etter race/storøkter (72 t): søvn ≥7,5 t, unngå trengsel, karbo+frukt, null kvalitet — avkrysses i hub.

5. Blodprøve-rytme: fast vår/høst-panel (ferritin/Hb/D-vit; feb viste ferritin 61 = ok) med kalender-reminder — jern er billigste 2–3 %-forsikringen for maratonløpere.

6. Race-vekt-bånd på hub: biometrics-trend mot erfart racevekt (Frankfurt-vekta) uten å gjøre vekt til styringsmål (modellen forkastet den — dette er helse-overvåkning, ikke prediktor).

7. Kalendertetthet som kapasitetssignal: familiekalenderen synces alt — uker med reise/kvelds-tetthet flagges «lav kapasitet» i ukeplan-forslag (matcher TOSK-fravær-realitet).

8. HRV-CV-graf siste 6 uker før hvert mål på hub (taper-KPI, r=−0,82-funnet) med målbånd.

9. Koffein-protokoll: systematiser (3 mg/kg 45 min før kvalitet/race, kutt etter kl. 14 ellers) — morning brief har alt koffeinvindu-hint, gjør det doserbart.

10. AVVIST (Carl 2026-07-09): medisin-info hører ikke hjemme på huben.

11. Alkohol-friksjon ned: loggen brukes knapt — Pushover-reply «vin 2» i stedet for script-kjøring, ellers forblir illness-filteret blindt.

12. Middags-hvile i varmeperioder (nå): 20 min før 15:00 — dokumentert effekt på kveldsøkt-kvalitet og søvntrykk; relevant for Italia-ukene og evt. varm august.

D. Andre forbedringer (20)

1. Dual-path-bug permanent fiks (persist ↔ HTML) — eldste åpne arkitektur-gjeld; én beregning, HTML rendrer persistert.

2. Mass-reskår de ~98 frosne progressive øktene (detektoren er nå stabil) + prosa-revisjon der tier endres.

3. Backup-rotasjon: 50+ `quality.json.bak_progdetect_*` (~300 MB) — behold siste 5, arkiver resten automatisk i sync.

4. Test-suite for modellkjeden (TODO #39): CI-assert på LOO (feil hvis T-14 MAE > 1,5 %) + guard på feature-navn/rekkefølge — beskytter mot stille regresjon.

5. Vakthund-whitelist: forventede endringer (ulåste økter <14 d, training_load re-beregning etter gap) ekskluderes → alarm kun på ekte anomalier (dagens alarm var støy).

6. RACE-1 fullføres: stream/data for de 4 gamle løpene (trengs også for vind-re-fit).

7. HRQC-1 FIT-sensor-skann + forny Strava bulk-eksport → wrist/belte-fasit for hele historikken.

8. hr_review_queue → hub-side med sortert kø og «bekreft/avvis»-arbeidsflyt (statisk: generert sjekkliste som skriver tilbake via script).

9. Mobil-først hub (mobil.pintzka.com) — Plan/Blokkplan-fanene finnes ikke på mobil i dag; du konsumerer via telefon på reise.

10. Kanonisk sonedefinisjon (TODO #31): I1–I5 defineres i dag i minst 3 filer — én kilde (zones.json) som alle renderere importerer.

11. Sentralt Carl-objekt (TODO #40): fysiologi/PR/mål lastes i dag fil-for-fil i hvert script.

12. HIST-1 prosa-backfill 2019–2022 ferdigstilles — historikken er skåret men ikke fortalt; blokkanalyser blir bedre med kontekst.

13. Office-PC 06:00-automatisering (TODO #24/44) — siste brukersteg for helautomatisk morgenpipeline.

14. Lite JSON-API på Cloudflare (race_outlook.json + plan eksponert bak Access) → fremtidige klienter (widgets, Apple Watch-komplikasjon) slipper HTML-parsing.

15. Årsrapport-generator: 2026-oppsummering (volum, PR-er, blokker, sykdom, KPI-er) som PDF i desember — motivasjon + deling.

16. Strukturert skade-/smertelogg (TODO #27) koblet mot belastning (nå: bare injury_log-stubbe).

17. Sko-effekt-analyse: racesko vs treningssko som kovariat på kvalitetsøkt-pace (shoe_mileage er komplett — er Vaporfly-øktene systematisk 3–5 s/km «for gode» i form-signalene?).

18. Fast test-segment månedlig (TODO #11) som ekstra Kalman-kilde med lav R (kontrollerte forhold).

19. Vær-styrt øktflytting: yr-ukevarsel finnes — ukeplan-forslag som legger kvalitet på beste dag (vind <4 m/s for baneøkter).

20. «Dagens hvorfor» i morning brief: én LLM-setning som kobler dagens økt til Amsterdam-målet («36 min terskel i dag = MP-holdbarhet 18. oktober») — billig, høy motivasjonseffekt.


Prioriteringsforslag hvis alt ikke skal gjøres: A1+B1 (læringsløkka), C2+C3 (sykdom+fylling — de to historisk dyreste tapskildene), D1+D4 (gjeld+vern), B2 (vind-re-fit er 30 min nå som dataene ligger der). Si hvilke som skal inn i TODO, så føres de med referanser.

Hub runde 1 — Wellness og TreningHva: Gjennomgang av Wellness og Trening-underfanene i den gamle huben: vekt, dubletter og utdatert innhold.
Konklusjon: 16,4 av 17,9 MB var innbakte PNG-er og flere visninger var duplisert — grunnlaget for slankingen i runde 1.
2026-07-04
#hub#wellness#opprydding

Hub-gjennomgang: Oversikt→Wellness + Trening-undertabs — forslag

Dato: 2026-07-04 · Scope: Wellness-undertab (Oversikt) + alle 8 undertabs på Trening · kode + rendret hub gjennomgått

Ikke rørt i denne gjennomgangen: I dag-panen (nylig kuratert), Kvalitet/Langtur/Race/Mål-fanene.


Diagnose — tallene først

FunnMåling
hub.html totalvekt**17,9 MB** — hvorav **16,4 MB er 124 innbakte PNG-er**
Wellness-panelet alene**90 PNG-er** (10 metrikker × 9 tidsvinduer, pre-rendret)
Historikk-panelet20 PNG-er til (PMC 8 · volum 7 · soner 5) + 2 Chart.js-grafer + 2 enkelt-PNG
Plan-undertabenViser `TRAINING_PLAN.md` sist endret **15. mai** («Fase 0 → Fase 1») — utdatert ved siden av spikret blokkplan
UkesrapporterSiste rapport = **W22 (mai)**. Rotårsak: `snapshot_week_plan.py` kjøres ikke i sync → `build_week_report` feiler stille hver dag siden W24
Mobil-hub8 kB stub — ingen wellness, ingen plan (kjent D9)

Dupliseringer funnet:

1. Blokkplan-uketabellen finnes to steder — Trening→🗺️ Blokkplan OG Mål-fanen (prediksjon.html «Blokkplan → Amsterdam»). Samme tabell, to kilder til drift.

2. Fire volum-visualiseringer i Historikk: PNG-ranges, Chart.js månedlig, Chart.js år-for-år, PNG akkumulert-år.

3. Ukesframdrift vises 3 steder: hero UKE-KM-flis, Trening-header-bar, Denne uka-sumrad.

4. «Denne uka» og «Kalender» viser samme dager (plan + faktisk) i to formater rett ved siden av hverandre.

5. LT2-evolusjon i Wellness = Garmin-10K-pred × 1,04 — en proxy som lever ved siden av den ekte terskelform-grafen (matchet-puls m/ CI) på Mål-fanen.

6. Overnight HR ≈ RHR (Garmins RHR er allerede nattbasert) — to nesten identiske grafer.

7. Navnekollisjon: hovedfane «📅 Kalender» (familie) vs Trening→«📅 Kalender» (trening).


W — Oversikt → Wellness

W1. Chart.js i stedet for 90 PNG-er (viktigst av alt). Én canvas per metrikk, dataserien som kompakt JSON, range-knappene filtrerer klientside — nøyaktig mønsteret aero-/form-grafene på prediksjon.html allerede bruker. Chart.js lastes alt i hub. Effekt: 17,9 → ~2–3 MB, rask lasting på mobil/Cloudflare, ekte tooltips. Erstatter ARCH-7 (lazy-load) — bedre løsning på samme problem. (3–4 t)

W2. Metrikk-sanering: 11 → 8 paneler. Slå sammen Søvntimer + Søvnscore til ett panel (toggle/to akser). Slå Overnight HR + Respirasjon sammen til ett «Natt»-panel, kollapset som default — eller dropp overnight HR helt (RHR dekker det). Fjern LT2-evolusjon (Garmin-proxyen) — erstatt med lenke til terskelform på Mål. (1 t, gjøres samtidig med W1)

W3. Sykdoms-/alkohol-overlay på HRV- og RHR-grafene. Skravér illness_periods, prikk alkohol-events. Dataene ligger der; dips blir tolkbare i stedet for mystiske. (1 t etter W1)

W4. Nytt kort: «Sykdomsgate nå». Gate-status fra illness_prediction (alarm / ATL-persentil / post-illness-etterklang) ved siden av Søvngjeld- og HRV-CV-kortene. C2 beregner alt — dette er ren rendering. (30 min)

W5. HRV-CV: fra tall-kort til mini-graf m/ målbånd. 6-ukers CV-serie + nedre-tertil-bånd — serien beregnes allerede i race_readiness (C8). Tallkortet i dag skjuler trenden, og trenden er poenget (r=−0,82). (30 min)

W6. Vekt-panelet: race-vekt-bånd (Frankfurt-vekta ±1 kg) som horisontalt bånd — helseovervåkning, ikke styringsmål (C6). (15 min)

W7. Søvn-regularitet-kort (C1) — leggetids-varians siste 14 d. Forbehold: wellness.json har i dag ikke leggetidspunkt, bare varighet/score — krever nytt felt fra Garmin-søvn-synken først. Parker hvis feltet ikke er lett tilgjengelig.

Beholdes som i dag: streaks, søvngjeld-kortet, beredskap-historikk, 7-dagers-tabellen.


T — Trening-undertabs

T1. 8 → 5 undertabs:

NyInnholdAbsorberer
📅 **Uka & kalender**Avvikstabellen (Denne uka) øverst + 4-ukers kalenderen underKalender + Denne uka
🗺️ **Blokkplan**Som i dag + T4-KPI-er
🔥 **Historikk & form**Intensity-grid · ETT volum-modul · soner · PMC · CTL-projeksjonHistorikk + CTL/ATL
📈 **Ukesrapporter**Som i dag, men med T5-fiks
⚙️ **Øktformer & regler**Som i dag + T8Plan (fjernes — se T2)

T2. Fjern Plan-undertaben. TRAINING_PLAN.md er fra 15. mai og motsier blokkplanen. Enten arkiveres dokumentet, eller det skrives om til et kort «filosofi»-dokument som limes inn under Øktformer & regler. En fane som viser en utdatert plan er aktivt villedende. (15 min + evt. dok-jobb)

T3. Blokkplan = én sannhet. Fjern «Blokkplan → Amsterdam»-tabellen fra Mål-fanen/prediksjon.html; behold «Denne ukas plan» der + én lenke «→ full blokkplan (Trening)». (30 min)

T4. Blokkplan-KPI-raden mangler tre ting vi nå har data for: fylling g/t siste L4-tur (fueling_log, KPI 85–90) · siste laktat-kontrollpunkt (lactate_drift) · langtur-score-snitt + decoupling i blokka — det siste er BLK-3 fra TODO (NY-2023-lærdommen: antall 30k+ er ikke nok) og mangler helt i dag. (1–1,5 t, lukker BLK-3)

T5. Ukesrapporter: fiks eller fjern. Rotårsak: `snapshot_week_plan.py` har ikke kjørt siden 31. mai → ingen frosset baseline → build_week_report hopper over. Fiks: legg snapshot-steget i sync_daily (kjøres mandag, snapshotter inneværende uke) + kjør backfill for W24–W27 der plan-daily finnes. Samtidig A10 fra forslagsbanken: én preskriptiv linje per rapport («ett konkret justeringsforslag for neste uke»). En fane med 6 uker gamle data er verre enn ingen fane. (1–2 t)

T6. «Denne uka»-tabellen: type-treff, ikke bare km. Kvalitetsøkt gjennomført som easy (eller motsatt) skal flagges selv når km stemmer. + valgfri TSB-kolonne per dag. (45 min)

T7. Én ukesframdrift-indikator. Dropp baren i Trening-headeren (hero-flisen UKE-KM viser det samme). (10 min)

T8. Øktformer-fanen henter ikke den nye A5-seksjonen — regex-listen i hub-koden inkluderer ikke «Laktat-kontrolløkt»-headeren fra COACH_INSTRUCTIONS. Én linje. (5 min)


G — Globalt

G1. Mobil-hub: etter W1 er hoved-hubben lett nok (~2 MB) til at mobil kan bruke samme fil med responsiv CSS → vurder å pensjonere build_mobile_hub-stubben (dagens 8 kB dekker nesten ingenting — D9). (vurderes etter W1)

G2. Rename hovedfanen «📅 Kalender» → «👨‍👩‍👧 Avtaler» (familiekalender-iframen) så den ikke kolliderer med treningskalenderen. (5 min)

G3. Stil-konsistens: Blokkplan/Denne uka bruker rå inline-styles; trekk ut felles .kpi-card/.tbl-klasser når flatene likevel røres (W1/T1). Lav prioritet.


Anbefalt rekkefølge

1. W1 + T2-volumopprydding — vekt/ytelse, størst effekt (4–5 t)

2. T1 + T2 + T3 + T7 + G2 — struktur og duplikater (2–3 t)

3. T5 — gjenopplive Ukesrapporter (1–2 t)

4. W4 + W5 + T4 + T8 — nye datakilder inn (2 t)

5. W2 + W3 + W6 + T6 — polish (2 t)

6. G1 mobil — etter at W1 har vist ny vekt

Alt er rene bygge-script-endringer (build_hub_dashboard / build_prediction_dashboard / sync-wiring) — ingen datafiler, ingen låste økter berøres. W7 er den eneste som krever ny datainnhenting.

Hub runde 2 — videre forslagHva: Videre forbedringsforslag for huben etter slankingen fra 17,9 til 2,6 MB.
Konklusjon: Sparklines, lukking av ukesloopen, sammenlign to metrikker og år-velger på heatmapen — de fleste er senere gjennomført.
2026-07-04
#hub#forslag

Hub — videre forbedringsforslag (runde 2)

Dato: 2026-07-04 · Etter: runde 1 gjennomført (hub 17,9 → 2,6 MB, Trening 8→5 undertabs, ukesrapporter gjenopplivet — se CHANGELOG). Forslagene under er nye, informert av dypdykket i koden.

Fikset underveis i runde 1 (utenfor opprinnelig scope, men åpenbart galt): T1-widgeten viste «−10 dager til evaluering (22. mai)» i ukevis (skjules nå når evalueringen er passert) · beredskaps-pillen pekte på en tom skjult tab (peker nå til beredskap-grafen) · hero-flisenes scroll-ankre matchet ikke de nye panelene (KEYMAP lagt inn).


Daglig verdi

R1. Sparklines i hero-flisene. WELL-seriene ligger nå i sida — en 30-dagers mini-sparkline under HRV/RHR/søvn/TR/BB-flisene gir trend på ett blikk uten fanebytte. Billig etter W1. (1–2 t)

R7. Uka & kalender: lukk ukes-loopen visuelt. (a) toggle «neste uke» i avvikstabellen, (b) badge «baseline W28 frosset ✓» når snapshot finnes, (c) vis forrige ukes A10-forslag («→ Neste uke: …») øverst — i dag ligger det bare i Ukesrapporter-fanen, men det handler om DENNE uka. (1–2 t)

R8. Race-pills med readiness-/risiko-prikk. Hero-pillene viser bare %; en liten farget prikk fra B5-scoren + rødt flagg når race-eve-risikoflagg er aktivt kobler readiness til det du faktisk ser hver dag. (Beslektet med B5b i TODO — morning brief T-7.) (1 t)

R5. Metrikk-overlay i Wellness. «Sammenlign»-velger som tegner to valgfrie metrikker normalisert i samme graf (f.eks. overnight HR vs RHR — poenget ditt om at de skiller lag; HRV vs stress). Mønster-jakt uten eksport. (2 t)

R6. Intensitets-heatmap med år-velger. Grid-en dekker siste 365 d; med årknapper 2019–2026 blir den et komplett treningsatlas. INTENSITY_DATA må utvides all-time (samme kompakt-mønster som WELL). (1–2 t)

Robusthet & arkitektur

R3. Hub-vakthund i sync. Hub-en er nå JS-tung — et lite `verify_hub_sanity.py`-steg etter bygging: størrelse < 5 MB, alle forventede canvas-id-er til stede, WELL-JSON parser, (valgfritt) `node --check` på inline-scripts der node finnes. Fanger stille brudd FØR push til hub.pintzka.com. (1 t — anbefales først)

R4. WELL → egen datafil. 526 kB JSON ligger inline i HTML-en; som `Sessions/hub_data.json` med `fetch()` caches data og HTML separat hos Cloudflare, og fremtidige klienter (widgets, D14-API-tanken) gjenbruker samme fil. (1–2 t)

R2. Fanekonsolidering 13 → ~9 hovedfaner. Kvalitetsøkter + Langturer + Rolige turer er tre arkivfaner med samme mønster (liste → iframe) — slå sammen til én «Økter»-fane med type-/årsfilter (ARCH-3-grepet). Sko kan bli undertab under Trening; Tester + Helse kan vurderes som «Kropp & lab». Mindre kognitiv last — men dette er smak: si hvilke sammenslåinger du faktisk vil ha før noe gjøres. (3–5 t avhengig av valg)

Innhold som mangler

R9. AVVIST (Carl 2026-07-09): medisin-info hører ikke hjemme på treningshuben.

R10. Quality explorer inn som undertab (EXPLORER-1 fra TODO). Standalone-sida (427 økter) inn under Kvalitet-fanen — etter T1-øvelsen er fragment+inline-JSON-mønsteret kjent. (2–3 t)

Kosmetikk (billig nå, valgfritt)

R11. PWA-lett. Manifest + ikon + theme-color → hub.pintzka.com kan «legges til hjemskjerm» på iPhone som app. Erstatter den pensjonerte mobil-hubben uten ny kode — sida er lett nok nå. (30 min)

R12. Dark mode. CSS-variablene er samlet i :root; en `prefers-color-scheme: dark`-blokk + Chart.js-farger fra variabler → kveldsvennlig hub. (1–2 t)

R13. Hurtigsøk (⌘K). Globalt søk over økter (dato/navn/type) → åpner session-HTML direkte. Sessions-indeksen finnes som data. (2–3 t)


Anbefalt rekkefølge

1. R3 (vakthund — sikre det som nettopp ble bygget)

2. R1 + R7 + R8 (daglig verdi, små)

3. R4 (datafil-splitt)

4. R9 + R10 (innhold)

5. R11 + R12 + R13 (kosmetikk)

6. R2 (fanekonsolidering — trenger dine valg først)

Hub runde 3 — ambisiøse forslagHva: Ambisiøse oppgraderinger: API og iPhone-widgets, interaktiv plan-what-if og ukeplan-forhandler.
Konklusjon: Plattformgrepene (API, widgets, plan-what-if) er reelle prosjekter; resten er finpuss.
2026-07-04
#hub#api#widgets#what-if

Hub — runde 3: videre og ambisiøse oppgraderinger

Dato: 2026-07-04 · Etter: runde 1 (17,9→2,6 MB, strukturopprydding) + runde 2 (R1–R13: hub_data.js-splitt, sanity-vakthund, sparklines, overlay, all-time heatmap, ⌘K-søk, PWA-lett, dark mode, Kropp & lab, Verktøy ryddet).

Hub-en er nå rask, ren og vaktet. Forslagene under er neste nivå — sortert fra «gjør plattformen til noe mer» ned til finpuss. De store (A-delen) er reelle prosjekter, ikke kvelds-fikser.


A. Ambisiøse (plattform-nivå)

A1. JSON-API + iOS-widgets (D14 fullført ut). hub_data.js, race_outlook.json, race_readiness.json og morning_brief_today.json ligger allerede som statiske filer bak Cloudflare — ett steg til: eksponer dem som stabile endepunkter (`/api/outlook.json` …) bak Cloudflare Access, og bygg 2–3 Scriptable-widgets for iPhone-hjemskjermen: «Dagens økt + beredskap», «Amsterdam-prediksjon + P %», «Blokk-KPI». Da trenger du ikke engang åpne hub-en de fleste dager. Apple Watch-komplikasjon via samme kilde er mulig senere. (4–6 t inkl. widgets)

A2. Interaktiv plan-what-if på Mål-fanen. plan_whatif.py har de validerte kanalene (β_tsb, β_M-durab, CTL-skalering, sykdomsheuristikk) — eksponer koeffisientene + TRIMP-projeksjonen i JSON og regn klientside med sliders: «−X % volum», «syk N dager fra dato», «dropp N langturer» → live Amsterdam-delta + P(sub-2:50). Samme grep som dagens hva-hvis, men på PLANEN i stedet for abstrakt formgevinst. Ærlighets-krav: samme «retning, ikke sekunder»-merkelapp som CLI-en. (3–4 t)

A3. Ukeplan-forhandleren. I Uka & kalender: klikk en planlagt økt → «flytt til …»-meny som klient-side validerer mot regelboka (aldri to harde på rad, tung underkropp <36 t før TOSK/langtur, immunvakt-vinduer, HRV-gate) og viser TSB-konsekvensen. Endringen skrives IKKE direkte (snapshot-disiplinen er hellig) — den genererer en ferdig amendment-JSON du limer inn i coaching-økta, som logger den i plan_amendments med begrunnelse. Plan-endringer blir datadrevne og sporbare uten å bryte ukesrapport-scoringen. (5–8 t — den mest coaching-transformative)

A5. Tidsreise-modus. Dato-slider øverst: sett hub-tilstanden til vilkårlig historisk dato — form-anker, prediksjoner (fra outlook_history), blokk-KPI-er og beredskap slik de VAR. Uvurderlig for post-race-evaluering («hva visste vi T-14?») og for å etterprøve modellen ærlig. Krever at flere serier snapshottes daglig (outlook_history gjør det alt; readiness/KPI må føyes til). (4–6 t)

B. Analyse-dybde

B1. Durability-dashboard (rapportens A11). Running dynamics ligger per økt: GCT, vertikal ratio, kadens. Bygg «degradering siste tredjedel»-metrikk for langturer (Δ GCT/ratio 1. vs siste tredjedel) → tidsserie på Langtur-fanen + KPI i Blokkplan. Dette er NY-2023-markøren (formen så fin ut, holdbarheten sviktet) kvantifisert. (3–4 t + validering mot kjente case)

B2. Race-uke-cockpit. Taper-cockpiten (T-14) utvides i selve race-uka: pacing-planen inline, yr-værvindu for starttidspunktet, drikkestasjon-notater, race-eve-sjekkliste — én side som er ALT du trenger fra mandag til startstreken. Energimila 12.8 = pilot. (2–3 t, mest sammenstilling)

B3. «Dagens hvorfor» (rapportens D20). Én linje i morning brief + hub som kobler dagens økt til målet: «36 min terskel i dag = MP-holdbarhet 18. oktober». Regelbasert v1 (økt-type × fase → setningsmal); LLM-variant kan komme i prosa-batchen. Billig, høy motivasjonseffekt. (1–2 t)

C. Robusthet & finpuss

C1. Service worker → ekte offline-PWA. Bygger på R11: cache hub.html + hub_data.js + siste økt-HTML-er → hub-en åpner på fly/i tunnel. NB: cache-invalidering må følge ?v-hashen. (2–3 t)

C2. Visuell regresjonstest. Playwright/headless på Mac-en: screenshot av hver hovedfane etter bygging, pikseldiff mot forrige — alarm ved stor endring uten data-endring. Fanger CSS/JS-brekkasje som sanity-vakthunden ikke ser (den sjekker struktur, ikke rendering). (3–4 t + node-avhengighet)

C3. Mobil-finpuss på 390 px. Nå som én side skal dekke mobil: audit av tab-raden (scrollbar?), hero-kollaps, brede tabeller → kort-layout, touch-mål ≥44 px. (2–3 t)

C4. G3-resten: trekk gjenværende inline-styles (blokkplan-KPI, uka-tabellen, søkemodalen) ut i klasser. (1 t, ved neste anledning)


Anbefalt rekkefølge

1. A1 (API + widgets — mest daglig verdi per time)

2. A2 (plan-what-if på hub — modellen finnes, bare UI)

3. B2 før 12.8 (race-uke-cockpit klar til Energimila)

4. B1 (durability — lukker A11 før maratonblokka teller)

5. A3/A4/A5 (velg én per økt — A3 hvis coaching-flyt, A4/A5 hvis analyse)

6. C1–C4 etter smak

Ingen av disse rører øktfanene (fredet) eller datafiler med lås/frys.

⚙️ Hurtigvalg & systeminfo

📖 Regler

Alle reglene og tersklene systemet styrer etter, samlet ett sted og skrevet ut. Klikk en gruppe for å åpne den, og teknisk ▾ ved en regel for å se eksakte verdier, koder og hvor den bor. 115 regler i 15 grupper · 25 drift-sikret (verifiseres mot koden hver sync). Read-only.

Belastning og stress4Fanger vedvarende belastning som ikke skyldes en enkelt hard dag.
Belastningsvarsel
Har kroppen vært forstyrret 6 eller flere av de siste 10 dagene — uten at det kan forklares av varme eller en nylig infeksjon — utløses et varsel om vedvarende belastning.
Teknisk: predict_illness.py · STRAIN_MIN_DISTURBED=6, STRAIN_WINDOW=10, STRAIN_HEAT_MAX=4 · drift-sikret · sist gjennomgått 2026-07-23
Overbelastning eller livsstress
Er treningsbelastningen samtidig høy (akutt last i øvre sjikt, eller formen godt i minus), tolkes varselet som funksjonell overbelastning — vurder en lettere uke. Er lasten normal, tolkes det som livsstress.
Teknisk: predict_illness.py · STRAIN_OVERREACH_ATL_P=70 (ATL-persentil), STRAIN_OVERREACH_TSB=-15 · drift-sikret · sist gjennomgått 2026-07-23
Restitusjon etter sykdom
De første 21 dagene etter en bekreftet infeksjon flagges aldri som belastning — da forventer vi at kroppen bruker tid på å hente seg inn.
Teknisk: predict_illness.py · STRAIN_RECOVERY_BUFFER=21 dager · drift-sikret · sist gjennomgått 2026-07-23
Kort blaff teller ikke
Forstyrrelser som varer under 4 dager rapporteres ikke som et varsel. Signalet skal være fler-dagers, ikke en enkelt dårlig natt.
Teknisk: predict_illness.py · STRAIN_MIN_WINDOW=4 dager · drift-sikret · sist gjennomgått 2026-07-23
Sykdom og autonom forstyrrelse9Skiller det handlingsverdige (infeksjon / ekte overbelastning) fra det forbigående (varme, reise, én hard økt).
Reduser
Når minst 2 av de tre nattmålte markørene — hvilepuls, HRV og natte-puls — er forhøyet samtidig, OG dette har vart (i dag pluss minst 2 av de siste 3 dagene), regnes forstyrrelsen som infeksjonslignende. Da: bytt kvalitet med rolig, prioriter søvn og næring.
Teknisk: predict_illness.py · DEEP_MIN_CARDINAL=2, REDUCE_PERSIST_DAYS=2 · CARDINAL_MARKERS = hvilepuls/HRV/natte-puls · drift-sikret · sist gjennomgått 2026-07-23
Se an
Er det alarm (minst 2 markører forhøyet) men det ikke er vedvarende og dypt, er det sannsynligvis forbigående eller en ytre årsak. Du kan trolig fortsette — sjekk varme, reise, hard økt eller søvn og adresser årsaken.
Teknisk: predict_illness.py · nivå SE_AN når ≥2 aktive men ikke deep+persist · sist gjennomgått 2026-07-23
Fortsett
Ingen aktiv autonom forstyrrelse — kjør planen.
Teknisk: predict_illness.py · nivå FORTSETT · sist gjennomgått 2026-07-23
Varme forklarer bort
Er det 20 grader eller varmere den dagen (eller du nettopp har løpt et langløp), nedgraderes «reduser» til «se an» — varmen er da et mer sannsynlig alibi enn sykdom. Ved tydelige symptomer (sår hals, hoste) behandles det likevel som reduser.
Teknisk: predict_illness.py · HEAT_FORKLAR_C=20.0 grader · drift-sikret · sist gjennomgått 2026-07-23
Når en markør er «forhøyet»
Hvilepuls minst 1,5 slag over ditt normale i 3 dager eller mer · HRV rundt 10 % under ditt snitt · natte-puls minst 4 slag over normalen i 3 dager · søvnscore under 80 to netter på rad · stress over 25 i 3 dager.
Teknisk: predict_illness._evaluate_window · inline terskler (løftes til konstanter i fase 4) · sist gjennomgått 2026-07-23
Sykdomsdag (bakoverskuende)
En dag merkes som sykdom når sykdomsscoren når 2,5 (mild). 4,5 = moderat, 6,5 = alvorlig. Scoren bygger på hvor mye hvilepuls, natte-puls, respirasjon og søvn avviker fra ditt eget snitt de siste 14 dagene.
Teknisk: detect_illness.py · ILLNESS_THRESH=2,5 + BASELINE_DAYS=14 (drift-sikret) · severity 4,5/6,5 (inline) · sist gjennomgått 2026-07-23
Sammenslåing av sykdomsperioder
Enkeltdager slås sammen til én periode hvis det er 2 dager eller mindre mellom dem. En enkeltstående dag må nå minst 4,5 i score for å telle som periode.
Teknisk: detect_illness.py · MERGE_GAP=2, SINGLE_DAY_MIN=4,5 · drift-sikret · sist gjennomgått 2026-07-23
Post-race-krater er godartet
Et HRV-fall på 30–45 % morgenen etter et godt tapret løp er forventet — kroppens kvittering for uttaket, ikke sykdom. Sykdomsgaten leser ikke dette som en ny onset de første dagene etter et halvmaraton/maraton.
Teknisk: predict_illness.py · demping D+1..D+4 for løp ≥19 km · logikk · sist gjennomgått 2026-07-23
Infeksjon er ikke det samme som stress
Detektoren måler autonom forstyrrelse og kan ikke skille selv. Du merker hver periode manuelt som infeksjon eller stress — det er fasiten resten bygger på.
Teknisk: illness_classification.json (Carl-kanonisk) · røres aldri av pipeline · sist gjennomgått 2026-07-23
Fysiologi og soner7Ankeret alt annet måles mot (lab Granåsen, labtest 2 den 1. september 2026; februar-verdiene i parentes).
Aerob terskel (LT1)
Puls 160, fart 4:12 per km, laktat 1,4 (februar: 159 / 4:12 / 1,5). Grensen mellom rolig og moderat.
Teknisk: zones.json · lt1_hr=160, lt1_pace_per_km=4:12, lt1_lactate_mmol=1,4 · drift-sikret · oppdatert 2026-09-01 (labtest 2) · sist gjennomgått 2026-07-23
Anaerob terskel (LT2)
Puls 170, fart 3:45 per km, laktat 2,8 (Biosen-skala; februar: 169 / 3:49 / 3,3). Dette er grensen terskeløktene styres etter. Øvre grense = labens 3,2-linje: 3:43 / 171.
Teknisk: zones.json · lt2_hr=170, lt2_pace_per_km=3:45, lt2_lactate_mmol=2,8 · lt2_upper_bound 16,15 km/t / 3:43 / 171 / 3,2 · drift-sikret · oppdatert 2026-09-01 (labtest 2) · sist gjennomgått 2026-07-23
Makspuls og VO2maks
Makspuls 186 (referanse for alle sonene; høyeste målte puls 184 + 2 i labrapporten 01.09.2026 — Carl-konvensjonen +5 ville gitt 189, makspulstesten 10.11.2025 ga 188). VO2maks 61,1 (februar 61,7).
Teknisk: zones.json · hrmax_operational=186, vo2max_lab=61,1, max_hr_measured_at_vo2max=184 · drift-sikret · oppdatert 2026-09-01 (labtest 2) · sist gjennomgått 2026-07-23
Pulssoner
I1 veldig lett 102–140 · I2 lett 141–160 · I3 moderat / maratonfart 161–170 · I4 hard / terskel 171–176 · I5 veldig hard / VO2maks 177–186. Samme tall som på klokka (labrapport 01.09.2026; februar lå 1 slag lavere).
Teknisk: zones.json · hr_zones nedre grenser 102/141/161/171/177, tak 186 · physiology_by_period[5].hr_zones eksplisitt · drift-sikret · oppdatert 2026-09-01 · sist gjennomgått 2026-07-23
Terskeløkt-bånd
En terskeløkt skal ligge på puls 161–170 og laktat 2,0–3,3 (Biosen-skala, dvs. TaiDoc × 0,7; øvre = labens 3,2-linje) — ikke over LT2. Litt drift opp til 171–173 mot slutten av draget er greit.
Teknisk: session_types.json · terskel.hr_steady_band=[161,170] (dynamisk [lt1+1, lt2]), laktat_band=[2,0–3,3], grace 171–173 · drift-sikret · oppdatert 2026-09-01 · sist gjennomgått 2026-07-23
Fysiologi bakover i tid
Fra 01.09.2026 gjelder LT1 160 / LT2 170 / maks 186 (labtest 2). For 2023–31.08.2026 gjelder 159 / 169 / 186 (februar-lab) — puls-grensene er stabile bakover, men fartsgrensene er det ikke: i 2023/24 lå du 8–15 sekunder per km saktere. Eldre perioder har egne LT2-verdier (2020: 170, 2022: 172).
Teknisk: zones.json · physiology_by_period 2020 lt2=170, 2022 lt2=172, 2023–2026-08 lt2=169, 2026-09→ lt2=170 · drift-sikret · oppdatert 2026-09-01 · sist gjennomgått 2026-07-23
Garmins estimater brukes aldri som sannhet
VO2maks, terskel og soner fra Garmin brukes kun til sammenligning — aldri som fasit. Lab-tallene gjelder.
Teknisk: SYSTEM_OVERVIEW §9 · policy · sist gjennomgått 2026-07-23
Økt-typer og mål-bånd11Båndene hver økt-type scores mot (leses dynamisk fra dine LT-verdier).
Kalibrering av båndene
Alle øktbånd regnes ut fra dine LT-verdier ved kjøretid (carl.json:fysiologi): LT1 160, LT2 170, makspuls 186, lab-målt maks 184. Ny labtest = oppdater kilden, alle bånd flytter seg (gjort 01.09.2026).
Teknisk: session_types.json · _kalibrering lt1_hr_ref=160, lt2_hr_ref=170, max_hr_ref=186, lab_max_ref=184 · drift-sikret · oppdatert 2026-09-01 · sist gjennomgått 2026-07-23
Terskel
Norsk sub-terskel: puls 161–170, laktat 2,0–3,3 (Biosen-skala), fart 3:45–4:10. Ikke over LT2 (3:45 / 170 fra 01.09.2026).
Teknisk: session_types.json · terskel · sist gjennomgått 2026-07-23
Over-terskel
Tempo litt over LT2: puls 169–177, laktat 3,3–5,0, fart 3:30–3:45.
Teknisk: session_types.json · over_terskel · sist gjennomgått 2026-07-23
Aerob (lett kvalitet)
Sub-maraton: puls 145–159, laktat 1,2–2,0. Restitusjons-kvalitet og maraton-progresjon.
Teknisk: session_types.json · aerob · sist gjennomgått 2026-07-23
VO2maks (lange drag)
3–5 min drag: puls-steady 166–175 (90–95 % av lab-målt maks 184), kan nå 175–184 på siste drag, laktat 4,5–7,0. (Februar: 163–172 / 172–181 med lab-maks 181.)
Teknisk: session_types.json · vo2max.hr_steady_band=[166,175], hr_max_band=[175,184], _lab_max_ref=184 · drift-sikret · oppdatert 2026-09-01 · sist gjennomgått 2026-07-23
45/15 intensive
Måles på blokk-snitt (draget er for kort for puls): blokk-snitt 154–167, topp 163–172, laktat 3,5–6,0.
Teknisk: session_types.json · 45_15_hoy · blokk-avg · sist gjennomgått 2026-07-23
Korte VO2-drag (200/400 m)
Puls henger etter farten, så vi scorer siste 30 sek av draget: sett 1 drag 5–10 = 155–170, sett 2 = 163–174, topp siste drag 172–179.
Teknisk: session_types.json · r_pace_kort · hr_last_30s · sist gjennomgått 2026-07-23
Maratonfart (langtur-kvalitet)
Puls 158–167, laktat 1,8–2,8. Fokus på kobling puls/fart (decoupling).
Teknisk: session_types.json · mp_pace · sist gjennomgått 2026-07-23
Bakkeintervall
8–15 × 200 m motbakke: blokk-snitt 160–172, topp 168–178, laktat 4,0–7,0.
Teknisk: session_types.json · bakkeintervall · sist gjennomgått 2026-07-23
Langtur
Puls 140–159, generisk. Kan ha kvalitetsblokk (maratonfart) i sen fase.
Teknisk: session_types.json · langtur · sist gjennomgått 2026-07-23
Ny økt-type som ikke passer
Passer ikke en økt noen tag (pyramide, ny X-økt-variant), legges en ny tag til før scoring — ikke tving den inn i feil eksisterende tag.
Teknisk: session_types.json · policy · sist gjennomgått 2026-07-23
Beredskap og dagsstyring10Sjekkes før hver kvalitetsøkt. HRV og hvilepuls er primære; søvn og stress bekrefter.
Toppdag
HRV 75 ms eller høyere og hvilepuls 38 eller lavere = toppform. Full kvalitet, utnytt dagen.
Teknisk: COACH_INSTRUCTIONS §HRV/RHR-styring · kalibrert mot 1295 HRV-dager / 1310 RHR-dager · manuell · sist gjennomgått 2026-07-23
Grønt
HRV 65–74, hvilepuls 39–40 = normal god kvalitetsdag. Kjør planlagt økt.
Teknisk: COACH_INSTRUCTIONS §HRV/RHR-styring · manuell · sist gjennomgått 2026-07-23
Modifiser
HRV 55–64, hvilepuls 41–42 = lett belastet. Reduser enten intensitet eller volum — ikke begge.
Teknisk: COACH_INSTRUCTIONS §HRV/RHR-styring · manuell · sist gjennomgått 2026-07-23
Gult
HRV under 55, eller hvilepuls 43 og oppover = klar belastning. Kun rolig (I1), ingen terskel eller kvalitet.
Teknisk: COACH_INSTRUCTIONS §HRV/RHR-styring · manuell · sist gjennomgått 2026-07-23
Rødt
HRV under 45, eller hvilepuls 44 og oppover = kritisk (sykdom/overbelastning). All trening avlyses — hvile eller lett gåtur.
Teknisk: COACH_INSTRUCTIONS §HRV/RHR-styring · manuell · sist gjennomgått 2026-07-23
Søvn
Reell knekk går ved søvnscore under 74 (myk observasjon, ikke grunn til å avlyse alene). Under 75 kombinert med HRV under 60 = dropp kvalitet uansett følelse. Søvn bekrefter HRV, den er ikke en selvstendig prediktor.
Teknisk: COACH_INSTRUCTIONS §Søvnscore (G1-revisjon: ingen selvstendig effekt når HRV kontrolleres) · manuell · sist gjennomgått 2026-07-23
Stress
Under 22 bekrefter god natt. Over 28 = kroppen signaliserer belastning; over 28 kombinert med HRV under 55 = utsett kvalitet.
Teknisk: COACH_INSTRUCTIONS §Stress_avg · manuell · sist gjennomgått 2026-07-23
Beredskap-gate
Samlet beredskapsscore under 5 av 10 = ikke kvalitet. 5–7 = modifiser. 8 og oppover = full kvalitet.
Teknisk: build_hub_dashboard.assess_beredskap() · terskler inline · sist gjennomgått 2026-07-23
Slik vektes beredskap
Komponentene som veies sammen (0–10): HRV teller mest, deretter hvilepuls, så søvn og treningsbelastning. HRV måles mot 50-dagers snitt (dag 4–54 bakover).
Teknisk: SYSTEM_OVERVIEW §6 · HRV 3p / RHR 3p (kronisk 2 + akutt 1) / søvn 2p / TR 2p · sist gjennomgått 2026-07-23
Motstridende markører
Er markørene uenige (f.eks. høy HRV men høy hvilepuls), legges vekt på den dårligste.
Teknisk: COACH_INSTRUCTIONS §HRV/RHR-styring · policy · sist gjennomgått 2026-07-23
Treningsbelastning og gjennomføring10De faste kjørereglene for uka.
Kvalitetstak
Maksimalt 3 kvalitetsøkter per uke (pluss eventuelt en dobbel-terskel morgenøkt). Aldri to harde dager på rad (unntak: dobbel terskel innen samme dag).
Teknisk: COACH_INSTRUCTIONS §Belastningsregler · manuell · sist gjennomgått 2026-07-23
Nedtrappingsuke
Hver 4. uke trappes volumet ned til rundt 70 %.
Teknisk: COACH_INSTRUCTIONS §Belastningsregler · manuell · sist gjennomgått 2026-07-23
TOSK-pauser
Stående pauser, alltid: 60 sekunder etter 1000-metersdrag, 90 sekunder etter 2000-metersdrag. Ikke jogge-pauser.
Teknisk: SYSTEM_OVERVIEW §1.2 · policy · sist gjennomgått 2026-07-23
Restitusjon før ny kvalitet
En kvalitetsøkt er nesten gratis (0–1 dag). Etter en langtur på 30 km+ skal det gå minst 48 timer før ny kvalitet. Etter maraton er 72 timer et gulv — sikt kvalitet-retur dag 4–5. Les restitusjonen på HRV og Body Battery, ikke på hvilepuls (den beveger seg lite for deg).
Teknisk: COACH_INSTRUCTIONS §Absorpsjon per økt-klasse (D4) · manuell · sist gjennomgått 2026-07-23
Immunvakt etter løp
3–5 dager uten kvalitet etter hvert løp: søvn 7–8 timer, karbo og frukt, unngå trengsel.
Teknisk: COACH_INSTRUCTIONS §Race-planlegging pkt 2 · manuell · sist gjennomgått 2026-07-23
Etter maraton
Ingen 10k- eller 5k-satsing 15–45 dager etter et maraton — formen er målbart svekket i det vinduet.
Teknisk: PREDICTION_MODEL / COACH · postM-vindu · manuell · sist gjennomgått 2026-07-23
Varme er et lovlig stimulus
På varme dager: puls under 138 på alt rolig, kvalitet kun om morgenen eller i skygge. Ikke jag pace i varmen; høyere decoupling er da normalt (ca. 8 sek/km per 5 grader).
Teknisk: COACH_INSTRUCTIONS §Intensitetsstyring (D6) · manuell · sist gjennomgått 2026-07-23
Volum er makrospaken
Aldri intensitet på bekostning av rolig-volum. Terskel skjerper en base — den erstatter den ikke. 4×4/kort-VO2/bakke er uprøvd for deg og hører hjemme i vinter-basen, ikke sein-blokk.
Teknisk: COACH_INSTRUCTIONS §Treningsfilosofi (D9) · manuell · sist gjennomgått 2026-07-23
Subjektiv tyngde før løp
«Tunge/råtne bein» siste uke før et løp har null prediktiv verdi (Barcelona-22, Kbh-24). Bruk subjektivt til økt-forståelse, ikke til å avlyse et mål. Eneste språk-trigger med verdi: eksplisitt sykdomsord i ny Strava-tekst.
Teknisk: COACH_INSTRUCTIONS §Anti-regel (D8) · manuell · sist gjennomgått 2026-07-23
Faste ukedagsformat
Mandag TOSK: variable drag-lengder (ikke 1000 m). Onsdag TOSK: 1000-metere. Lørdag: langtur, ofte med kvalitet. Hovedregel, ikke absolutt — avgjøres i dialog.
Teknisk: COACH_INSTRUCTIONS §Faste øktformater · manuell · sist gjennomgått 2026-07-23
Race-planlegging5Reglene rundt selve løpene.
Taper er distanse-asymmetrisk
10k tåler — og foretrekker ofte — full treningsuke på høy plattform (alle 10k-PB-ene kom uten taper). HM og maraton vil ha ekte nedtrapping. Ikke gi et 10k halvmaraton-respekt.
Teknisk: COACH_INSTRUCTIONS §Race-planlegging (D2) · manuell · sist gjennomgått 2026-07-23
Race-eve-sjekk
For maraton: HRV 10 % eller mer under baseline kvelden før = sikt nedre halvdel av intervallet. For 10k/HM har dag-før-HRV ingen prediksjonsverdi alene (fyrte foran to av tre kort-PB-er) — behandle som informasjon, ikke måljustering.
Teknisk: COACH · race-eve-flagg (D3) · manuell · sist gjennomgått 2026-07-23
Taper-KPI
HRV-svingningen (CV) skal falle gjennom taper. Kjør løpet på positiv form (TSB) — alle PR-maraton hadde +5/+7/+37.
Teknisk: COACH_INSTRUCTIONS §Race-planlegging pkt 4 · manuell · sist gjennomgått 2026-07-23
Laktat-kontrolløkt
Hver 14. dag i blokk kjøres 5 × 2000 på 3:52 per km (band 3:48–3:58), 90 sek stående pause, laktat målt etter drag 2 og drag 5. Gir en drift-kurve for terskelen gjennom blokka.
Teknisk: COACH_INSTRUCTIONS §Laktat-kontrolløkt (A5) · protokoll · sist gjennomgått 2026-07-23
Maraton-pacing
Styres av fase-plan med gates ved km 5/25/35 + fyllingsprotokoll + vindsone-regel — ikke lineære pacing-linjer. All maraton-tid lekker km 35–40; kollapsen er binær og synlig live på steglengde + puls.
Teknisk: COACH_INSTRUCTIONS §Race-uke-gates (D7) · manuell · sist gjennomgått 2026-07-23
Intensitet og terskeldose3Hvor hardt terskeldraget faktisk skal ligge.
LT2-dosen
Bekreftet av labtest 2 (01.09.2026): LT2 er 3:45 / 170 / 2,8 mmol, øvre grense 3:43 / 171 / 3,2. 3:49 er aerobt billig (~2,5 mmol). Hoveddoseraget (I3) skal ligge på 3:45–3:47 (2,8–3,2 mmol Biosen ≈ 4,0–4,5 på TaiDoc rå); de skarpeste I3/I4-øktene 3:43–3:45.
Teknisk: COACH_INSTRUCTIONS §Intensitetsstyring (D5) · manuell · bekreftet 2026-09-01 (labtest 2) · sist gjennomgått 2026-07-23
K6-porten mot København
Operativ prediktor: 8-ukers snitt av I3-drag på 3:47 eller raskere innen ca. 1. september. Dosevindu uke 29–37.
Teknisk: COACH_INSTRUCTIONS §Intensitetsstyring · manuell · sist gjennomgått 2026-07-23
Laktatmåling
Måles ca. 30 sekunder etter draget (Granåsen/Olympiatoppen-protokoll) med TaiDoc TD-4289, som er plasma-kalibrert og viser ~40 % over labens Biosen. Rå verdi × 0,7 = Biosen-skala — det er den konverterte verdien som logges i Strava som Lt(N) X,Y, og alle laktatbånd og -mål er på Biosen-skala. Mølle-punkter sammenlignes kun med mølle-punkter.
Teknisk: SYSTEM_OVERVIEW §9 / COACH · protokoll · zones.json athlete.meter_to_lab_factor=0,7 · drift-sikret · oppdatert 2026-09-01 · sist gjennomgått 2026-07-23
Slik scores øktene — delmål15En økt-score bygges av flere delmål (komponenter) som veies sammen.
Fra delmål til karakter
Hvert delmål gir 0–10. De veies sammen til en gjennomførings-score. Endelig score = gjennomføring 70 % + kontekst 30 % (dagsform, plan-samsvar). Deretter tier-etikett.
Teknisk: quality_session_metrics.py · execution = Σ(delmål × vekt); combined = exec ×0,70 + kontekst ×0,30 · sist gjennomgått 2026-07-23
Delmål: andel drag i sone
Ditt foretrukne mål: hvor stor andel av dragene traff mål-sonen (puls-band eller pace-rampe). ≥75 % → 9,5 · ≥50 % → 7,5 · ≥25 % → 5,5 · under → 3,5. Veier typisk 30 %.
Teknisk: quality_session_metrics.py · pct_reps_in_zone · vekt = scoring_pct_in_zone_weight (default 0,30) · sist gjennomgått 2026-07-23
Delmål: puls-treff
Traff du mål-pulsen? For lange terskeldrag brukes steady-state-puls, for medium siste 500 m, for korte drag snittet av drag-topp-puls.
Teknisk: quality_session_metrics.py · hr_steady / hr_last_500m / hr_max_avg (HR_WEIGHTS) · sist gjennomgått 2026-07-23
Delmål: drift mellom drag
Steg steady-pulsen fra første til siste drag? Lav drift = jevn, godt kontrollert økt.
Teknisk: quality_session_metrics.py · inter_rep_drift · vekt 0,15–0,30 (ekskluderes for progressive) · sist gjennomgått 2026-07-23
Delmål: drift i draget
Innen hvert enkelt drag — holdt pulsen seg, eller krøp den oppover? Brukes mest for lange drag og tempo.
Teknisk: quality_session_metrics.py · intra_rep_drift · vekt ~0,25 (xlong/tempo) · sist gjennomgått 2026-07-23
Delmål: pace/puls-kobling
Klarte du å holde farten uten at pulsen løp fra deg (decoupling)? Viktig for tempo og langtur-kvalitet.
Teknisk: quality_session_metrics.py · pa_hr_coupling · vekt ~0,20 · sist gjennomgått 2026-07-23
Delmål: restitusjon mellom drag
Hvor mye falt pulsen i pausene? God restitusjon = kapasitet igjen i serien.
Teknisk: quality_session_metrics.py · hr_recovery · vekt 0,10–0,15 · sist gjennomgått 2026-07-23
Delmål: tid i sonen og fart-treff
Hvor mye av økta lå i mål-sonen (time_in_zone), og traff du mål-farten (pace_target, mest for langtur).
Teknisk: quality_session_metrics.py · time_in_zone 0,10–0,30, pace_target 0,15 · sist gjennomgått 2026-07-23
Vektene varierer per økt-type
Korte drag: puls-topp 40 % + blokk-snitt 30 % + drift 15 % + restitusjon 15 %. Terskel (lange): steady-puls 40 % + drift 25 % + tid-i-sone 15 %. Tempo: steady-puls 40 % + drift-i-draget 25 % + pace/puls 20 %. Langtur: steady-puls 30 % + pace/puls 20 % + fart-treff 15 % + stabilitet 15 %.
Teknisk: quality_session_metrics.py · HR_WEIGHTS · sist gjennomgått 2026-07-23
Laktat trumfer puls
Er laktat målt og treffer båndet, halveres vekten på puls-andelen og bunn-scoren løftes — laktat er da sannheten, ikke pulsen.
Teknisk: quality_session_metrics.py · effective_weight = pct_in_zone_weight × 0,5 når laktat finnes · sist gjennomgått 2026-07-23
Kvalitetsøkt-tier
Eksepsjonell fra 9, Sterk fra 8, Solid fra 6, Akseptabel fra 4, Svak under 4.
Teknisk: quality_session_metrics.py · combined-tier cutoffs (inline, løftes fase 4) · sist gjennomgått 2026-07-23
Langtur-tier
Sterk fra 9, Solid fra 8, OK fra 7, Under forventning fra 6, Svak under 6.
Teknisk: enrich_langtur.py · langtur-tier cutoffs (inline, løftes fase 4) · sist gjennomgått 2026-07-23
Upålitelig puls
Er pulsen kjent upålitelig for økta, droppes puls-komponentene og gjennomføringen kan ikke score høyere enn 8,5 (pace alene skal ikke gi topp).
Teknisk: quality_session_metrics.py · execution-cap 8,5 · hr_unreliable.json (28 økter) · sist gjennomgått 2026-07-23
Prosa bruker aldri drag-snitt
Terskel-vurderinger bruker alltid steady-state-pulsen (evt. siste 500 m), aldri drag-snittet — snittet inkluderer opptrapping og undervurderer.
Teknisk: SYSTEM_OVERVIEW §4.4 · policy · sist gjennomgått 2026-07-23
Progressive økter
På progressive intervaller ekskluderes drift (drift er hensikten); det scores på treff mot pace-rampen (±5 sek/km per drag), ikke et flatt puls-band.
Teknisk: quality_session_metrics.py · _progresjon-flagg · pace-rampe ±5 s/km · sist gjennomgått 2026-07-23
Prediksjonsmodell8Hvordan løpstider anslås (tre lag, fysiologi først, n=33 løp).
Tre lag
Lag 1 fastsetter nivået (dagens form som «10k-ekvivalent pace»). Lag 2 er et Kalman-filter som smelter sammen flere form-kilder. Lag 3 skalerer til distanse og forhold (en liten regresjon på residualen).
Teknisk: PREDICTION_MODEL §3 · race_predict.py + fitness_filter.py + race_outlook.py · sist gjennomgått 2026-07-23
Nivå-anker (60/40)
Nivået er 60 % beste nylige løp (omregnet til 10k-ekvivalent) + 40 % Kalman-fusjon. Løp er sannhet for race-fart; treningen trekker mot forsiktighet.
Teknisk: race_outlook.py · BLEND_RACE=0,6 · sist gjennomgått 2026-07-23
Riegel-eksponent
Distanse-skalering med din egen eksponent — for tiden rundt 1,10 (standard er 1,06; du falmer litt mer enn typisk over distanse). Re-kalibreres for hvert løp.
Teknisk: race_outlook.json · k_effective≈1,098 (dok. nevner 1,093 fra 17.06 — re-fittes løpende) · sist gjennomgått 2026-07-23
Distanse/forhold-korreksjoner
På toppen av nivået justeres for: distanse, varme (over 15 grader), vind, ferskhet (form/TSB), maraton-durability (langtur-volum) og 10k-terskeldose.
Teknisk: race_predict.py · β: log(dist) +0,093, vind +0,022, tsb +0,004, M-durability +0,032, 10k-dose +0,021 · sist gjennomgått 2026-07-23
Presisjon
Treffer i snitt innen 1,53 % på den strengeste testen (hold-ett-løp-ut), 1,27 % på 14-dagers horisont. Vernet av en regresjonstest i sync (alarm over 1,6 %).
Teknisk: PREDICTION_MODEL topplinje · LOO 1,53 % / T-14 1,27 % · sist gjennomgått 2026-07-23
Usikkerhet er asymmetrisk
Oppsiden er strammere (fysiologisk tak), nedsiden fetere (vær, mage, dårlig dag). Intervallet settes fra empiriske 90 %-kvantiler per distanse: 10k [−5,6, +3,3] %, HM [−3,6, +3,6] %, maraton [−2,4, +1,4] %.
Teknisk: race_predict.py · q_pct (empiriske kvantiler) · sist gjennomgått 2026-07-23
Dagens anslag er live
Selve mål-sannsynlighetene og predikerte tidene endrer seg hver dag og vises på prediksjon.html — de hører ikke hjemme som en fast regel her.
Teknisk: race_outlook.json (regenereres daglig) · IKKE hardkodet i registeret · sist gjennomgått 2026-07-23
Testet og forkastet
Ikke gjeninnfør uten ny evidens: vekt, HRV/RHR/søvn som race-features, kronisk last (kollineær), kritisk fart, maskinlæring (for lite data, n=33).
Teknisk: PREDICTION_MODEL §6 · ~26 signaler testet med samme LOO · sist gjennomgått 2026-07-23
Kalman-fusjon (oppbygging)11Lag 2 i detalj: hvordan den skjulte formtilstanden smelter sammen mange støyende kilder.
Én skjult formtilstand
Filteret holder ett tall: din «10k-ekvivalente pace» akkurat nå. Den kan ikke måles direkte, men estimeres fra alt som sier noe om form.
Teknisk: fitness_filter.py · latent 10k-ekv pace (s/km) · sist gjennomgått 2026-07-23
Hvordan tilstanden utvikler seg (tids-steget)
Fra dag til dag antas formen å vandre litt tilfeldig (random-walk), eventuelt med en liten last-drevet drift (Banister-lignende). Det er «prediksjonssteget» før dagens målinger tas inn.
Teknisk: fitness_filter.py · H1: random-walk + valgfri last-drift · sist gjennomgått 2026-07-23
Hvordan målinger korrigerer (fusjonssteget)
Hver ny måling trekker estimatet mot seg — men vektet etter hvor pålitelig kilden er. En presis kilde (løp) flytter estimatet mye; en støyende (VO2-intervall) lite. Det er selve Kalman-fusjonen.
Teknisk: fitness_filter.py · H2: måle-oppdatering, vektet med måle-støy R · sist gjennomgått 2026-07-23
Hver kilde kalibreres til samme skala
Alle kilder oversettes til 10k-ekvivalent pace via en lineær kalibrering (stigning + forskyvning) tilpasset på løpene dine. Støyen R settes fra hvor mye kilden bommet i den kalibreringen.
Teknisk: fitness_filter.py · slope+offset per kilde, kalibrert på races.json; R = residual-spredning · sist gjennomgått 2026-07-23
Kilde: løp
Direkte omregning av løp til 10k-ekvivalent. Den desidert mest pålitelige kilden.
Teknisk: R ≈ 5,0 sek (mest presis) · dominerer estimatet · sist gjennomgått 2026-07-23
Kilde: matchet-puls dragfart (q155)
Interpolert dragfart ved fast puls 155 — innsats-uavhengig, så den fanger form uten å forurenses av hvor hardt du gikk.
Teknisk: R ≈ 8,6 sek · mest presise treningssignal · sist gjennomgått 2026-07-23
Kilde: effektivitet (EF)
Effekt delt på puls på kvalitet + langtur — en økonomi-trend over tid.
Teknisk: R ≈ 9,0 sek · sist gjennomgått 2026-07-23
Kilde: aerob rolig-pace @128
Puls-normalisert rolig-fart ved puls 128 (42-dagers median). Robust base-form-signal.
Teknisk: R ≈ 9,1 sek · sist gjennomgått 2026-07-23
Kilde: terskel- og VO2-økter
I3/I4-økt-pace (LT2) og I4/I5-intervall-pace (VO2). Nyttige, men innsats-konfunderte, så støyen blåses opp og de teller mindre.
Teknisk: R ≈ 11 sek (lt2) / ≈ 16 sek (vo2) — minst presise · sist gjennomgått 2026-07-23
Hvorfor fusjon i det hele tatt
Ingen enkeltkilde er nok: løp er sjeldne, treningssignaler er støyende. Ved å veie dem etter pålitelighet får du et jevnere, mer robust form-estimat enn noen enkeltkilde alene (Kalman-alene treffer ~2,97 %).
Teknisk: PREDICTION_MODEL §3 Lag 2 · Kalman-LOO ~2,97 % · sist gjennomgått 2026-07-23
Hva som med vilje IKKE er inne
HRV, hvilepuls og søvn ligger IKKE i Kalman-filteret — de spår trenings-readiness, ikke race-resultat (litteratur + egne tester). De hører hjemme i dagsstyringen, ikke i formtilstanden.
Teknisk: PREDICTION_MODEL §6 · readiness forkastet som prediktor · sist gjennomgått 2026-07-23
Mål 2026 og rekorder4Sesongens løp og dine bekreftede rekorder (dagens modell-anslag: se prediksjon.html).
Energimila 10 km
12. august 2026 i Trondheim — mål under 37:00 (3:42 per km).
Teknisk: carl.json · targets_2026[0] · drift-sikret (dato) · sist gjennomgått 2026-07-23
København halvmaraton
20. september 2026 — mål under 1:20:00 (3:47 per km).
Teknisk: carl.json · targets_2026[1] · drift-sikret (dato) · sist gjennomgått 2026-07-23
Amsterdam maraton
18. oktober 2026 — mål under 2:50:00 (4:01 per km).
Teknisk: carl.json · targets_2026[2] · drift-sikret (dato) · sist gjennomgått 2026-07-23
Dine rekorder
5k 18:38 (2026) · 10k 37:24 (Energimila 2025) · HM 1:21:19 (Berlin 2026) · maraton 2:53:06 (Frankfurt 2025).
Teknisk: carl.json · pbs (bekreftet mot excel_prs history 2026; excel_prs.current viser gamle 2019-tider — ubrukt/utdatert) · sist gjennomgått 2026-07-23
Helse og blodmarkører6Målverdiene for blodprøver og tilskudd.
Hemoglobin (Hb)
Nedre referanse er 13,4, og under 13,5 regnes som kronisk lavt. Ønsket mål er over 14.
Teknisk: carl.json · hb_referanse_min=13,4, hb_chronic_low=13,5, hb_optimal_athlete=14 · drift-sikret · sist gjennomgått 2026-07-23
Ferritin
Referanse-minimum 20, mål for utholdenhetsutøver 100, aspirasjon 150.
Teknisk: carl.json · ferritin_optimal_athlete=100 · drift-sikret · sist gjennomgått 2026-07-23
Vitamin D
Referanse-minimum 50, mål 75.
Teknisk: carl.json · vitd_optimal=75 · drift-sikret · sist gjennomgått 2026-07-23
B12
Referanse-minimum 170; under 250 er en bekymringsgrense.
Teknisk: carl.json · b12_referanse_min=170, b12_low_concern_threshold=250 · drift-sikret · sist gjennomgått 2026-07-23
SHBG og vekt
SHBG over 50 gir lav fri testosteron — hold vekten ikke under 73 kg.
Teknisk: carl.json · shbg_high_threshold=50 · drift-sikret · sist gjennomgått 2026-07-23
Tilskuddsprotokoll
Jern (Feraccru 30 mg), D3 (vedlikehold 6400 IE) og omega-3 (2000 mg) tas annenhver dag. Re-test Hb/ferritin/D/B12 ca. 12 uker etter start.
Teknisk: carl.json · active_protocol_2026 · sist gjennomgått 2026-07-23
Faser, arena og karriere4Rammene rundt sesongen.
Treningsfaser 2026
Aktiv hvile (apr) → aerob restart (apr–mai) → aerob + VO2max (mai–jun) → HM-spesifikk (jun–aug) → HM-taper + race (aug–sep) → maraton-spesifikk + race (sep–okt).
Teknisk: carl.json · training_phases_2026 (6 faser) · sist gjennomgått 2026-07-23
Arena-begrensning
Friidrettsbanen er stengt 1. juni–24. juli; TOSK kjøres da på piren (rett, flat strekning). Økter merkes utendørs, ikke utendørs bane.
Teknisk: carl.json · arena_constraints · datoer · sist gjennomgått 2026-07-23
Karrierevindu
Topp-vinduet er 2026–2028. Aldringen koster ca. 0,7 % per år. Aldersgrense for sub-1:20 HM og sub-2:50 maraton er rundt 45 år.
Teknisk: carl.json · karriere · Tanaka & Seals · sist gjennomgått 2026-07-23
Vektgulv
Referansevekt 74 kg; ikke under 73 kg (SHBG/testosteron).
Teknisk: carl.json · identitet + helse · manuell · sist gjennomgått 2026-07-23
System og datahåndtering8Interne arbeidsflyt-regler — mindre relevant for treningen, tatt med for fullstendighet.
Strava er master
GPS, runder og effekt kommer fra Strava; Garmin tilfører treningseffekt, soner og wellness.
Teknisk: SYSTEM_OVERVIEW §11.1 · sist gjennomgått 2026-07-23
Låste økter røres aldri
En verifisert økt endres aldri automatisk av pipelinen.
Teknisk: SYSTEM_OVERVIEW §1.3 · _locked · sist gjennomgått 2026-07-23
Frosne tall står evig
Når en økt er ferdig, låses score/reps så formel-endringer ikke flytter historiske tall.
Teknisk: SYSTEM_OVERVIEW §4.2 · _frozen · sist gjennomgått 2026-07-23
Aldri slett
Opprydding = flytt til arkiv (reversibelt). Alltid.
Teknisk: SYSTEM_OVERVIEW §1.4 · sist gjennomgått 2026-07-23
Familiekalender
Kalenderen gjelder hele familien — anta aldri at du skal delta på noe, spør.
Teknisk: SYSTEM_OVERVIEW §1.1 · sist gjennomgått 2026-07-23
Medisin holdes utenfor
Fast biologisk medisin inngår aldri i trenings-, prestasjons- eller infeksjonsanalyser eller hub-visning. Klinisk domene.
Teknisk: SYSTEM_OVERVIEW §1.5 · sist gjennomgått 2026-07-23
Form-tall (TSB)
Formen for en økt = forrige dags rad (øktdagens rad er etter økta). TSB +5..+15 = topp-restituert, under −10 = utmattet, over +20 = under-belastet.
Teknisk: SYSTEM_OVERVIEW §4.3 + COACH · policy + terskler · sist gjennomgått 2026-07-23
Sykdom vs beredskap
Sykdoms-deteksjon er historisk klassifisering; treningsberedskap er en dagsbeslutning. To ulike ting.
Teknisk: SYSTEM_OVERVIEW §11.2 · sist gjennomgått 2026-07-23
Ingen regler matcher søket.