Historiske grafer for kroppstilstand. Velg tidsvindu — opp til alt-time. Daglig verdi (transparent) + 7-dagers glidende snitt (mørk linje) + baseline (gull) der relevant.
| Dato | HRV | Status | RHR | Søvn | Stress | TR |
|---|---|---|---|---|---|---|
| 2026-09-11 | 68 | BALANCED | 38 | 6.6h/84 | 12 | 88 |
| 2026-09-10 | 74 | BALANCED | 38 | 7.5h/96 | 20 | 76 |
| 2026-09-09 | 78 | BALANCED | 37 | 8.1h/94 | 16 | 75 |
| 2026-09-08 | 63 | BALANCED | 38 | 7.2h/83 | 18 | 58 |
| 2026-09-07 | 63 | BALANCED | 38 | 8.1h/90 | 19 | 54 |
| 2026-09-06 | 68 | BALANCED | 39 | 8.1h/89 | 21 | 23 |
| 2026-09-05 | 65 | BALANCED | 39 | 8.0h/91 | 21 | 81 |
| RHR 7d | 38 / brems ≥41 | grønn |
| Overnight-HR 7d | 42 / brems ≥46 | grønn |
| HRV / baseline | 68 / 62 (abort <55) | grønn |
| TSB (morgen) | -6 | info |
| Dato | Dag | Struktur | Kategori | Drag | n | Total | Kv-km | Pace drag | HR snitt | HR maks | Score | Sko | Vær |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
|---|
Beregnet fra offisielle distanser og tider. Klikk en rad for å åpne race-dashboard.
| # | Tid | Pace | Dato | Løp | Skår |
|---|---|---|---|---|---|
| 1 🏆 | 18:38 | 3:44/km | 2025-08-13 | 5k-split fra EnergiMila 2025 (første halvdel) | 6.2 |
| # | Tid | Pace | Dato | Løp | Skår |
|---|---|---|---|---|---|
| 1 🏆 | 36:43 | 3:40/km | 2026-08-12 | Energimila 36:43 🔥 | 9.8 |
| 2 | 37:24 | 3:44/km | 2025-08-13 | EnergiMila 37:24 🥳🤩 | 7.9 |
| 3 | 38:26 | 3:51/km | 2025-06-07 | Sommernattsløpet 38:26 🥳 | 8.8 |
| 4 | 38:38 | 3:52/km | 2024-03-22 | 10k på bane. 38:38 og pers 🥳 | 7.7 |
| 5 | 39:25 | 3:56/km | 2024-05-25 | Nidaros Løpefest 39:25 | 4.4 |
| # | Tid | Pace | Dato | Løp | Skår |
|---|---|---|---|---|---|
| 1 🏆 | 1:21:19 | 3:51/km | 2026-03-29 | 🇩🇪 Berlin halvmaraton 1:21:19 🇩🇪 | 9.8 |
| 2 | 1:24:24 | 4:00/km | 2025-09-06 | Trondheim halvmaraton 1:24:24 | 8.3 |
| 3 | 1:27:49 | 4:10/km | 2023-09-02 | Trondheim halvmaraton 2023 - 1:27:49 🎉 | 8.2 |
| 4 | 1:29:16 | 4:14/km | 2022-11-05 | Halvmaraton med TOSK | 8.9 |
| 5 | 1:33:45 | 4:27/km | 2021-08-08 | Halvmaraton | 6.9 |
| # | Tid | Pace | Dato | Løp | Skår |
|---|---|---|---|---|---|
| 1 🏆 | 2:53:06 | 4:06/km | 2025-10-26 | 🇩🇪 Frankfurt Maraton 2:53:06 🇩🇪 | 9.4 |
| 2 | 2:56:36 | 4:11/km | 2024-12-01 | Valencia Maraton 2:56:36 🇪🇸 | 8.0 |
| 3 | 2:59:11 | 4:15/km | 2024-05-05 | København Maraton 2:59:11 🇩🇰 | 8.6 |
| 4 | 2:59:34 | 4:15/km | 2024-09-29 | Berlin Maraton 2:59:34 🇩🇪 | 8.0 |
| 5 | 3:09:02 | 4:29/km | 2023-11-05 | New York Marathon 3:09:02 🗽🎉 | 5.9 |
| # | Tid | Pace | Dato | Løp | Skår |
|---|---|---|---|---|---|
| 1 🏆 | 10:49 | 3:36/km | 2024-03-10 | 3000 meter - 10:49 | 2.2 |
Hver kurve viser den raskeste tiden per race over historikken (akkumulert PR-progresjon). Punkter er race-tider, kurven er rullende minimum.
É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.
| Dato | Ukedag | Navn | Arena | Dist | Tid | Pace | HR snitt | HR maks | Stign | Sko | Vær | Temp |
|---|
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) →
| Dato | Type | Tittel | Resultat |
|---|---|---|---|
| 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 | 💗 Makspulstest | Makspulstest → | HRmax 188 (peak 183 + 5) |
| 2024-05-31 | 💗 Makspulstest | Makspulstest → | HRmax 185 (peak 180 + 5) |
| 2024-03-01 | 🩸 Laktatprofil | Laktatprofil Løplabbet Lade → | Første laktatprofil — venter på data |
| 2020-05-10 | 💗 Makspulstest | Mislykket forsøk på makspulstest → | HRmax 186 (peak 181 + 5) |
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.
| Dato | Vekt | Endring | Kilde |
|---|---|---|---|
| 2026-09-09 | 73.8 kg | -0.4 | garmin |
| 2026-08-09 | 74.2 kg | +0.0 | garmin |
| 2026-08-04 | 74.2 kg | -0.4 | garmin |
| 2026-07-30 | 74.6 kg | -0.6 | manuell |
| 2026-07-20 | 75.2 kg | +1.7 | garmin |
| 2026-06-07 | 73.5 kg | +0.2 | garmin |
| 2026-05-22 | 73.3 kg | -0.2 | garmin |
| 2026-05-19 | 73.5 kg | +0.0 | garmin |
| Dato | mmHg | Puls | Kontekst |
|---|---|---|---|
| 2026-07-29 | 122/75 | 40 | legekontor |
| 2026-06-04 | 123/75 | 38 | formiddag, før lunsj, ikke spist |
| 2025-10-14 | 114/71 | 38 | morgen |
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.
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 13,2 g/dL | 13,4 - 17,0 |
| 20.04.2026 | 13,5 g/dL | 13,4 - 17,0 |
| 10.03.2026 | 13,5 g/dL | 13,4 - 17,0 |
| 06.01.2026 | 13,1 g/dL | 13,4 - 17,0 |
| 03.06.2025 | 13,3 g/dL | 13,4 - 17,0 |
| 22.04.2025 | 12,8 g/dL | 13,4 - 17,0 |
| 28.11.2024 | 13,0 g/dL | 13,4 - 17,0 |
| 22.05.2024 | 13,7 g/dL | 13,4 - 17,0 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 0,41 | 0,40 - 0,50 |
| 10.03.2026 | 0,42 | 0,40 - 0,50 |
| 06.01.2026 | 0,40 | 0,40 - 0,50 |
| 03.06.2025 | 0,41 | 0,40 - 0,50 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 94 fL | 82 - 98 |
| 10.03.2026 | 94 fL | 82 - 98 |
| 06.01.2026 | 91 fL | 82 - 98 |
| 22.04.2025 | 95 fL | 82 - 98 |
| 28.11.2024 | 99 fL | 82 - 98 |
| 22.05.2024 | 93 fL | 82 - 98 |
| 24.01.2024 | 95 fL | 82 - 98 |
| 27.02.2023 | 92 fL | 82 - 98 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 30 pg | 27 - 33 |
| 10.03.2026 | 30 pg | 27 - 33 |
| 06.01.2026 | 30 pg | 27 - 33 |
| 22.04.2025 | 30 pg | 27 - 33 |
| 28.11.2024 | 31 pg | 27 - 33 |
| 22.05.2024 | 30 pg | 27 - 33 |
| 24.01.2024 | 30 pg | 27 - 33 |
| 27.02.2023 | 30 pg | 27 - 33 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 65 ug/L | 20 - 300 |
| 20.04.2026 | 61 ug/L | 20 - 300 |
| 10.03.2026 | 71 ug/L | 20 - 300 |
| 06.01.2026 | 53 ug/L | 20 - 300 |
| 03.06.2025 | 71 ug/L | 20 - 300 |
| 22.04.2025 | 83 ug/L | 20 - 300 |
| 28.11.2024 | 94 ug/L | 20 - 300 |
| 22.05.2024 | 93 ug/L | 20 - 300 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 1,11 mg/L | 0,76 - 1,76 |
| 03.06.2025 | 1,10 mg/L | 0,76 - 1,76 |
| 24.01.2024 | 1,44 mg/L | 0,76 - 1,76 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 26 % | 15 - 57 |
| 03.06.2025 | 20 % | 15 - 57 |
| 24.01.2024 | 25 % | 15 - 57 |
| 14.09.2010 | 8 % | 15 - 57 |
| 02.02.2009 | 35 % | 15 - 57 |
| 11.09.2007 | 27 % | 15 - 57 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 0,03 10^12/L | 0,03 - 0,11 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 120,6 pmol/L | >60 |
| 20.04.2026 | 105,6 pmol/L | >60 |
| 22.04.2025 | 115,5 pmol/L | >60 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 83 nmol/L | 50 - 150 |
| 22.04.2025 | 49 nmol/L | 50 - 150 |
| 24.01.2024 | 58 nmol/L | 50 - 150 |
| 27.02.2023 | 54 nmol/L | 50 - 150 |
| 30.05.2022 | 56 nmol/L | 50 - 150 |
| 17.12.2021 | 46 nmol/L | 50 - 150 |
| 04.09.2019 | 57 nmol/L | 50 - 150 |
| 04.04.2019 | 43 nmol/L | 50 - 150 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 83 nmol/L | — |
| 22.04.2025 | 49 nmol/L | — |
| 24.01.2024 | 58 nmol/L | — |
| 27.02.2023 | 54 nmol/L | — |
| 30.05.2022 | 56 nmol/L | — |
| 17.12.2021 | 46 nmol/L | — |
| 04.09.2019 | 57 nmol/L | — |
| 04.04.2019 | 43 nmol/L | — |
| Dato | Verdi | Ref |
|---|---|---|
| 28.11.2024 | 235 pmol/L | 170 - 650 |
| 22.05.2024 | 266 pmol/L | 170 - 650 |
| 24.01.2024 | 266 pmol/L | 170 - 650 |
| 27.02.2023 | 424 pmol/L | 170 - 650 |
| 30.05.2022 | 262 pmol/L | 170 - 650 |
| 17.12.2021 | 251 pmol/L | 170 - 650 |
| 08.02.2021 | 299 pmol/L | 170 - 650 |
| 04.09.2019 | 319 pmol/L | 170 - 650 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 20,8 nmol/L | >5,7 |
| 20.04.2026 | 16,9 nmol/L | >5,7 |
| 30.05.2022 | 16,9 nmol/L | >5,7 |
| 17.12.2021 | 12,1 nmol/L | >5,7 |
| 08.02.2021 | 15,7 nmol/L | >5,7 |
| 04.09.2019 | 16,5 nmol/L | >5,7 |
| Dato | Verdi | Ref |
|---|---|---|
| 14.09.2010 | 2,35 mmol/L | 2,15 - 2,51 |
| Dato | Verdi | Ref |
|---|---|---|
| 20.04.2026 | 1,5 mU/L | 0,20 - 4,0 |
| 10.03.2026 | 1,5 mU/L | 0,20 - 4,0 |
| 06.01.2026 | 1,6 mU/L | 0,20 - 4,0 |
| 22.04.2025 | 2,2 mU/L | 0,20 - 4,0 |
| 28.11.2024 | 1,4 mU/L | 0,20 - 4,0 |
| 22.05.2024 | 1,9 mU/L | 0,20 - 4,0 |
| 24.01.2024 | 1,6 mU/L | 0,20 - 4,0 |
| 27.02.2023 | 1,4 mU/L | 0,20 - 4,0 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 24 nmol/L | 8 - 35 |
| 10.03.2026 | 21 nmol/L | 8 - 35 |
| 06.01.2026 | 19 nmol/L | 8 - 35 |
| 03.06.2025 | 27 nmol/L | 8 - 35 |
| 27.02.2023 | 23 nmol/L | 8 - 35 |
| 11.09.2007 | 33 nmol/L | 8 - 35 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 73 nmol/L | 8 - 60 |
| 10.03.2026 | 68 nmol/L | 8 - 60 |
| 06.01.2026 | 71 nmol/L | 8 - 60 |
| 03.06.2025 | 70 nmol/L | 8 - 60 |
| 27.02.2023 | 66 nmol/L | 8 - 60 |
| 11.09.2007 | 36 nmol/L | 8 - 60 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 3,2 | 2,3 - 9,9 |
| 10.03.2026 | 3,2 | 2,3 - 9,9 |
| 06.01.2026 | 2,7 | 2,3 - 9,9 |
| 03.06.2025 | 3,8 | 2,3 - 9,9 |
| 27.02.2023 | 3,5 | 2,3 - 9,9 |
| Dato | Verdi | Ref |
|---|---|---|
| 20.04.2026 | 15,4 pmol/L | 11,0 - 23,0 |
| 03.07.2020 | 16,7 pmol/L | 11,0 - 23,0 |
| 04.04.2019 | 14,9 pmol/L | 11,0 - 23,0 |
| 03.09.2018 | 18,3 pmol/L | 11,0 - 23,0 |
| 28.09.2017 | 16,9 pmol/L | 11,0 - 23,0 |
| 22.03.2017 | 18,3 pmol/L | 11,0 - 23,0 |
| 17.10.2016 | 16,9 pmol/L | 11,0 - 23,0 |
| 10.02.2016 | 16,4 pmol/L | 11,0 - 23,0 |
| Dato | Verdi | Ref |
|---|---|---|
| 20.04.2026 | 5,6 pmol/L | 3,5 - 6,5 |
| Dato | Verdi | Ref |
|---|---|---|
| 20.04.2026 | 382 nmol/L | 200 - 650 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 76 umol/L | 60 - 105 |
| 20.04.2026 | 77 umol/L | 60 - 105 |
| 10.03.2026 | 74 umol/L | 60 - 105 |
| 06.01.2026 | 73 umol/L | 60 - 105 |
| 22.04.2025 | 81 umol/L | 60 - 105 |
| 28.11.2024 | 76 umol/L | 60 - 105 |
| 22.05.2024 | 75 umol/L | 60 - 105 |
| 24.01.2024 | 74 umol/L | 60 - 105 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 106 mL/min/1,73m2 | >65 |
| 20.04.2026 | 106 mL/min/1,73m2 | >65 |
| 10.03.2026 | 108 mL/min/1,73m2 | >65 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 47 g/L | 35 - 45 |
| 10.03.2026 | 46 g/L | 35 - 45 |
| 06.01.2026 | 49 g/L | 35 - 45 |
| 03.06.2025 | 45 g/L | 35 - 45 |
| 27.02.2023 | 47 g/L | 36 - 48 |
| 11.09.2007 | 47 g/L | 36 - 48 |
| Dato | Verdi | Ref |
|---|---|---|
| 06.01.2026 | 109 mL/min/1,73m2 | >65 |
| 22.04.2025 | 104 mL/min/1,73m2 | >65 |
| 28.11.2024 | 108 mL/min/1,73m2 | >65 |
| 22.05.2024 | 109 mL/min/1,73m2 | >68 |
| 24.01.2024 | 110 mL/min/1,73m2 | >68 |
| 27.02.2023 | 109 mL/min/1,73m2 | >68 |
| 30.05.2022 | 112 mL/min/1,73m2 | >68 |
| 17.12.2021 | 110 mL/min/1,73m2 | >68 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 25 U/L | <70 |
| 20.04.2026 | 22 U/L | <70 |
| 06.01.2026 | 31 U/L | <70 |
| 22.04.2025 | 17 U/L | <70 |
| 28.11.2024 | 20 U/L | <70 |
| 22.05.2024 | 22 U/L | <70 |
| 24.01.2024 | 19 U/L | <70 |
| 27.02.2023 | 20 U/L | <70 |
| Dato | Verdi | Ref |
|---|---|---|
| 08.02.2021 | 20 U/L | <45 |
| 03.07.2020 | 20 U/L | <45 |
| 04.09.2019 | 20 U/L | <45 |
| 04.04.2019 | 26 U/L | <45 |
| 03.09.2018 | 16 U/L | <45 |
| 28.09.2017 | 17 U/L | <45 |
| 22.03.2017 | 20 U/L | <45 |
| 17.10.2016 | 21 U/L | <45 |
| Dato | Verdi | Ref |
|---|---|---|
| 03.07.2020 | 6 umol/L | <26 |
| 04.04.2019 | 11 umol/L | <26 |
| 03.09.2018 | 9 umol/L | <26 |
| 28.09.2017 | 9 umol/L | <26 |
| 22.03.2017 | 12 umol/L | <26 |
| 17.10.2016 | 10 umol/L | <26 |
| 10.02.2016 | 11 umol/L | <26 |
| 21.10.2015 | 9 umol/L | <26 |
| Dato | Verdi | Ref |
|---|---|---|
| 17.10.2016 | 13 U/L | <80 |
| 10.02.2016 | 14 U/L | <80 |
| 21.10.2015 | 17 U/L | <80 |
| 14.09.2010 | 23 U/L | <80 |
| Dato | Verdi | Ref |
|---|---|---|
| 06.01.2026 | 0,4 mg/L | <5 |
| Dato | Verdi | Ref |
|---|---|---|
| 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 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 5,4 10^9 /L | 3,5 - 10,0 |
| 20.04.2026 | 5,9 10^9 /L | 3,5 - 10,0 |
| 06.01.2026 | 6,9 10^9 /L | 3,5 - 10,0 |
| 22.04.2025 | 6,2 10^9 /L | 3,5 - 10,0 |
| 28.11.2024 | 6,9 10^9 /L | 3,5 - 10,0 |
| 22.05.2024 | 7,4 10^9 /L | 3,5 - 10,0 |
| 24.01.2024 | 4,7 10^9 /L | 3,5 - 10,0 |
| 27.02.2023 | 5,0 10^9 /L | 3,5 - 10,0 |
| Dato | Verdi | Ref |
|---|---|---|
| 06.01.2026 | 3,0 mmol/L | 1,4 - 4,7 |
| 27.02.2023 | 3,0 mmol/L | 1,4 - 4,7 |
| Dato | Verdi | Ref |
|---|---|---|
| 06.01.2026 | 0,87 ug/L | <2,0 |
| 03.06.2025 | 0,86 ug/L | <2,0 |
| 28.09.2017 | 0,86 ug/L | 0 - 2,5 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 19,1 umol/L | 9,0 - 34,0 |
| 03.06.2025 | 13,9 umol/L | 9,0 - 34,0 |
| 24.01.2024 | 18,6 umol/L | 9,0 - 34,0 |
| 14.09.2010 | 5,2 umol/L | 9,0 - 34,0 |
| 02.02.2009 | 25,0 umol/L | 9,0 - 34,0 |
| 11.09.2007 | 21,2 umol/L | 9,0 - 34,0 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 71 umol/L | 49 - 83 |
| 03.06.2025 | 69 umol/L | 49 - 83 |
| 24.01.2024 | 74 umol/L | 49 - 83 |
| 14.09.2010 | 67 umol/L | 49 - 83 |
| 02.02.2009 | 71 umol/L | 49 - 83 |
| 11.09.2007 | 80 umol/L | 49 - 83 |
| Dato | Verdi | Ref |
|---|---|---|
| 03.06.2025 | 5 U/L | 1 - 12 |
| 11.09.2007 | 5 U/L | < 12 |
| Dato | Verdi | Ref |
|---|---|---|
| 03.06.2025 | 4 U/L | 1 - 10 |
| 11.09.2007 | 5 U/L | < 12 |
| Dato | Verdi | Ref |
|---|---|---|
| 22.04.2025 | 243 10^9 /L | 145 - 348 |
| 28.11.2024 | 229 10^9 /L | 145 - 348 |
| 22.05.2024 | 273 10^9 /L | 145 - 348 |
| 24.01.2024 | 261 10^9 /L | 145 - 348 |
| 27.02.2023 | 237 10^9 /L | 145 - 348 |
| 30.05.2022 | 262 10^9 /L | 145 - 348 |
| 17.12.2021 | 267 10^9 /L | 145 - 348 |
| 14.09.2010 | 292 10^9 /L | 145 - 348 |
| Dato | Verdi | Ref |
|---|---|---|
| 20.04.2026 | 67 U/L | <400 |
| 24.01.2024 | 69 U/L | <400 |
| Dato | Verdi | Ref |
|---|---|---|
| 27.02.2023 | 4,8 mmol/L | 3,3 - 6,9 |
| 21.10.2015 | 4,8 mmol/L | 3,3 - 6,9 |
| Dato | Verdi | Ref |
|---|---|---|
| 27.02.2023 | <100 mg/L | <250 |
| Dato | Verdi | Ref |
|---|---|---|
| 30.05.2022 | 13,2 umol/L | 5,0 - 15,0 |
| Dato | Verdi | Ref |
|---|---|---|
| 30.05.2022 | 0,15 umol/L | <0,30 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 140 mmol/L | 137 - 145 |
| 30.05.2022 | 140 mmol/L | 137 - 145 |
| 17.12.2021 | 142 mmol/L | 137 - 145 |
| 08.02.2021 | 141 mmol/L | 137 - 145 |
| 03.07.2020 | 142 mmol/L | 137 - 145 |
| 04.09.2019 | 139 mmol/L | 137 - 145 |
| 04.04.2019 | 139 mmol/L | 137 - 145 |
| 03.09.2018 | 141 mmol/L | 137 - 145 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 4,1 mmol/L | 3,6 - 5,0 |
| 30.05.2022 | 4,0 mmol/L | 3,6 - 5,0 |
| 17.12.2021 | 4,3 mmol/L | 3,6 - 5,0 |
| 08.02.2021 | 4,3 mmol/L | 3,6 - 5,0 |
| 03.07.2020 | 4,1 mmol/L | 3,6 - 5,0 |
| 04.09.2019 | 4,0 mmol/L | 3,6 - 5,0 |
| 04.04.2019 | 4,4 mmol/L | 3,6 - 5,0 |
| 03.09.2018 | 4,2 mmol/L | 3,6 - 5,0 |
| Dato | Verdi | Ref |
|---|---|---|
| 03.07.2020 | 57 U/L | <105 |
| 04.04.2019 | 52 U/L | <105 |
| 03.09.2018 | 47 U/L | <105 |
| 28.09.2017 | 46 U/L | <105 |
| 22.03.2017 | 49 U/L | <105 |
| 17.10.2016 | 45 U/L | <105 |
| 10.02.2016 | 53 U/L | <105 |
| 21.10.2015 | 55 U/L | <105 |
| Dato | Verdi | Ref |
|---|---|---|
| 04.09.2019 | 0,07 umol/L | NEG (<0,03) |
| Dato | Verdi | Ref |
|---|---|---|
| 17.10.2016 | 349 umol/L | 230 - 480 |
| 10.02.2016 | 345 umol/L | 230 - 480 |
| 21.10.2015 | 344 umol/L | 230 - 480 |
| Dato | Verdi | Ref |
|---|---|---|
| 17.10.2016 | 50 U/L | 25 - 120 |
| 10.02.2016 | 50 U/L | 25 - 120 |
| 21.10.2015 | 48 U/L | 25 - 120 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.10.2015 | 5,6 % | <6,1 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.10.2015 | 1,8 mmol/L | 0,8 - 2,1 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | Utført | — |
| 20.04.2026 | Utført | — |
| 14.09.2010 | Utført | — |
| 02.02.2009 | Utført | — |
| Dato | Verdi | Ref |
|---|---|---|
| 14.09.2010 | 4,9 10^9 /L | 1,6 - 8,3 |
| 02.02.2009 | 2,5 10^9 /L | 1,6 - 8,3 |
| Dato | Verdi | Ref |
|---|---|---|
| 14.09.2010 | 2,2 10^9 /L | 0,8 - 5,0 |
| 02.02.2009 | 2,1 10^9 /L | 0,8 - 5,0 |
| Dato | Verdi | Ref |
|---|---|---|
| 14.09.2010 | 0,9 10^9 /L | 0,1 - 1,0 |
| 02.02.2009 | 0,3 10^9 /L | 0,1 - 1,0 |
| Dato | Verdi | Ref |
|---|---|---|
| 14.09.2010 | 0,1 10^9 /L | <0,7 |
| 02.02.2009 | 0,2 10^9 /L | <0,7 |
| Dato | Verdi | Ref |
|---|---|---|
| 14.09.2010 | 0 10^9 /L | <0,2 |
| 02.02.2009 | 0,0 10^9 /L | <0,2 |
| Dato | Verdi | Ref |
|---|---|---|
| 14.09.2010 | Se kommentar nmol/L | — |
| Dato | Verdi | Ref |
|---|---|---|
| 11.09.2007 | 3,8 mmol/L | 3,2 - 8,1 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 1,5 10^9 /L | 1,5 - 7,3 |
| 20.04.2026 | 1,9 10^9 /L | 1,5 - 7,3 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 3,3 10^9 /L | 1,1 - 3,3 |
| 20.04.2026 | 3,4 10^9 /L | 1,1 - 3,3 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 0,4 10^9 /L | 0,2 - 0,8 |
| 20.04.2026 | 0,3 10^9 /L | 0,2 - 0,8 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | 0,2 10^9 /L | <0,4 |
| 20.04.2026 | 0,2 10^9 /L | <0,4 |
| Dato | Verdi | Ref |
|---|---|---|
| 21.07.2026 | <0,1 10^9 /L | <0,2 |
| 20.04.2026 | <0,1 10^9 /L | <0,2 |
| Dato | Verdi | Ref |
|---|---|---|
| 20.04.2026 | 176 U/L | <205 |
| Dato | Verdi | Ref |
|---|---|---|
| 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).
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 →
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.
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.
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.
Ø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.
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).
Δ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 | Økt | Format | Arena | Drag | Snitt | Siste 500 | Puls | Laktat | Forv. | Δlaktat | Δ (slutt) | Δpuls | Δfart | TSB |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-09-08 | 5 x 2000 👷♂️ | 5x2000 | Vei/pir | 5 | 3:50 | 3:48 | 159 | 2.3 | 2.5 | -0.2 | -0.3 | -8 | +3 | -17 |
| 2026-09-08 | 5 x 2000 👷♂️ | 5x2000 | Vei/pir | 2 | 3:50 | 3:46 | 157 | 2.2 | 2.5 | -0.3 | -0.5 | -10 | +4 | -17 |
| 2026-09-03 | 4 x 2000 | 4x2000 | Vei/pir | 4 | 3:45 | 3:40 | 168 | 4.0 | 2.8 | +1.2 | +0.2 | -2 | -6 | -5 |
| 2026-09-03 | 4 x 2000 | 4x2000 | Vei/pir | 2 | 3:48 | 3:46 | 166 | 3.2 | 2.6 | +0.6 | +0.5 | -3 | -5 | -5 |
| 2026-08-24 | MandagsTOSK | 3x3200 | Utendørs bane | 3 | 3:48 | 2.7 | 2.6 | +0.1 | -1 | -15 | ||||
| 2026-08-17 | MandagsTOSK | 5x2000 | Utendørs bane | 5 | 3:47 | 3:44 | 164 | 2.5 | 2.7 | -0.2 | -0.5 | -5 | +3 | -5 |
| 2026-08-17 | MandagsTOSK | 5x2000 | Utendørs bane | 2 | 3:49 | 3:50 | 165 | 2.5 | 2.6 | -0.1 | +0.0 | -3 | +1 | -5 |
| 2026-08-05 | OnsdagsTOSK | 6x1000 | Utendørs bane | 6 | 3:39 | 3:40 | 171 | 3.8 | 4.0 | -0.2 | -0.1 | -2 | +1 | -9 |
| 2026-07-29 | OnsdagsTOSK | 10x1000 | Utendørs bane | 8 | 3:49 | 3:48 | 160 | 2.7 | 2.6 | +0.1 | +0.0 | -8 | -1 | -22 |
| 2026-07-27 | MandagsTOSK | 5x2000 | Utendørs bane | 4 | 3:51 | 163 | 3.4 | 2.5 | +0.9 | -4 | -8 | -19 | ||
| 2026-07-20 | 5 x 2000 | 5x2000 | Vei/pir | 5 | 3:51 | 3:54 | 162 | 2.5 | 2.5 | +0.0 | +0.2 | -6 | +0 | -22 |
| 2026-07-20 | 5 x 2000 | 5x2000 | Vei/pir | 2 | 3:51 | 3:52 | 161 | 3.2 | 2.5 | +0.7 | +0.8 | -7 | -7 | -22 |
| 2026-07-17 | 8 x 1000 | 8x1000 | Vei/pir | 8 | 3:37 | 3:36 | 173 | 5.2 | 4.5 | +0.8 | +0.6 | -1 | -4 | -9 |
| 2026-07-17 | 8 x 1000 | 8x1000 | Vei/pir | 6 | 3:39 | 3:39 | 170 | 4.5 | 4.1 | +0.4 | +0.4 | -3 | -2 | -9 |
| 2026-07-17 | 8 x 1000 | 8x1000 | Vei/pir | 4 | 3:43 | 3:45 | 169 | 3.7 | 3.3 | +0.4 | +0.6 | -3 | -2 | -9 |
| 2026-07-17 | 8 x 1000 | 8x1000 | Vei/pir | 2 | 3:48 | 3:48 | 167 | 3.6 | 2.8 | +0.8 | +0.9 | -2 | -6 | -9 |
| 2026-06-17 | OnsdagsTOSK | 10x1000 | Vei/pir | 10 | 3:44 | 3:44 | 165 | 3.4 | 3.3 | +0.1 | +0.0 | -6 | -1 | -23 |
| 2026-06-17 | OnsdagsTOSK | 10x1000 | Vei/pir | 6 | 3:49 | 3:48 | 163 | 3.3 | 2.8 | +0.5 | +0.4 | -6 | -5 | -23 |
| 2026-06-08 | MandagsTOSK | 3x2000 | Vei/pir | 3 | 3:53 | 3:53 | 163 | 3.8 | 2.5 | +1.3 | +1.3 | -4 | -12 | -28 |
| 2026-06-03 | OnsdagsTOSK | 10x1000 | Vei/pir | 10 | 3:51 | 3:51 | 167 | 3.1 | 2.7 | +0.4 | +0.4 | -1 | -5 | -25 |
| 2026-06-03 | OnsdagsTOSK | 10x1000 | Vei/pir | 6 | 3:52 | 3:53 | 163 | 2.6 | 2.6 | +0.0 | +0.1 | -5 | -0 | -25 |
| 2026-05-20 | OnsdagsTOSK | 8x1000 | Utendørs bane | 8 | 3:54 | 3:55 | 163 | 2.0 | 2.5 | -0.5 | -0.4 | -4 | +6 | -8 |
| 2026-05-18 | MandagsTOSK | 20x400 | Utendørs bane | 20 | 3:30 | 4:17 | 168 | 3.9 | 5.7 | -1.8 | +2.5 | -12 | +11 | -10 |
| 2026-05-18 | MandagsTOSK | 20x400 | Utendørs bane | 10 | 3:35 | 4:37 | 163 | 3.2 | 4.8 | -1.6 | +2.1 | -13 | +11 | -10 |
| 2026-05-13 | OnsdagsTOSK | 6x1000 | Utendørs bane | 6 | 4:00 | 4:01 | 160 | 4.2 | 2.0 | +2.2 | +2.2 | -3 | -21 | 5 |
| 2026-05-13 | OnsdagsTOSK | 6x1000 | Utendørs bane | 4 | 3:56 | 3:55 | 162 | 3.5 | 2.3 | +1.2 | +1.1 | -3 | -12 | 5 |
| 2026-05-11 | MandagsTOSK | 4drag 0.8-2.0 km | Utendørs bane | 4 | 4:10 | 4:09 | 154 | 2.1 | 1.6 | +0.5 | +0.5 | -5 | -11 | 7 |
| 2026-05-11 | MandagsTOSK | 4drag 0.8-2.0 km | Utendørs bane | 3 | 4:10 | 4:10 | 154 | 2.7 | 1.6 | +1.1 | +1.1 | -5 | -18 | 7 |
| 2026-03-23 | MandagsTOSK | 4drag 1.0-2.0 km | Innendørs bane | 2 | 3:55 | 3:47 | 163 | 2.2 | 2.5 | -0.3 | -1.1 | -3 | +3 | -2 |
| 2026-03-18 | OnsdagsTOSK | 3x3000 | Innendørs bane | 3 | 3:52 | 3:48 | 164 | 2.5 | 2.8 | -0.3 | -0.7 | -4 | +3 | -8 |
| 2026-03-16 | MandagsTOSK | 5x2000 | Innendørs bane | 5 | 3:49 | 3:47 | 166 | 3.9 | 3.1 | +0.8 | +0.6 | -3 | -7 | -16 |
| 2026-03-11 | OnsdagsTOSK | 12x1000 | Innendørs bane | 12 | 3:49 | 3:46 | 161 | 2.6 | 3.1 | -0.6 | -0.9 | -8 | +5 | -9 |
| 2026-03-11 | OnsdagsTOSK | 12x1000 | Innendørs bane | 6 | 3:49 | 3:44 | 164 | 2.7 | 3.1 | -0.5 | -1.0 | -6 | +4 | -9 |
| 2026-03-09 | MandagsTOSK | 6x2000 | Innendørs bane | 6 | 3:50 | 3:47 | 163 | 2.5 | 3.0 | -0.6 | -0.9 | -6 | +5 | -10 |
| 2026-03-09 | MandagsTOSK | 6x2000 | Innendørs bane | 4 | 3:49 | 3:44 | 164 | 2.7 | 3.2 | -0.5 | -1.0 | -6 | +4 | -10 |
| 2026-03-04 | OnsdagsTOSK | 12x1000 | Innendørs bane | 12 | 3:49 | 3:45 | 160 | 2.5 | 3.2 | -0.7 | -1.1 | -10 | +6 | -6 |
| 2026-03-04 | OnsdagsTOSK | 12x1000 | Innendørs bane | 6 | 3:49 | 3:42 | 159 | 1.9 | 3.2 | -1.3 | -2.1 | -10 | +15 | -6 |
| 2026-02-04 | OnsdagsTOSK | 10x1000 | Innendørs bane | 10 | 3:49 | 3:44 | 161 | 2.7 | 3.2 | -0.5 | -1.0 | -9 | +5 | -2 |
| 2026-02-04 | OnsdagsTOSK | 10x1000 | Innendørs bane | 5 | 3:49 | 3:43 | 163 | 4.0 | 3.2 | +0.8 | +0.1 | -7 | -7 | -2 |
| 2026-01-31 | Ranheimshallen | 6x2062 | Innendørs bane | 6 | 3:45 | 166 | 4.2 | 3.6 | +0.6 | -6 | -5 | -10 | ||
| 2026-01-07 | OnsdagsTOSK | 8x1000 | Innendørs bane | 6 | 3:45 | 3:40 | 169 | 4.7 | 3.6 | +1.1 | +0.5 | -3 | -9 | 3 |
| 2026-01-05 | MandagsTOSK | 12x1000 | Innendørs bane | 5 | 3:46 | 175 | 4.0 | 3.5 | +0.5 | +4 | -4 | -2 | ||
| 2026-01-05 | MandagsTOSK | 12x1000 | Innendørs bane | 2 | 3:50 | 153 | 3.8 | 3.1 | +0.7 | -16 | -6 | -2 | ||
| 2025-02-26 | OnsdagsTOSK | 10x1000 | Innendørs bane | 5 | 3:45 | 3:42 | 170 | 3.2 | 3.6 | -0.5 | -0.8 | -2 | +4 | -24 |
| 2025-02-24 | MandagsTOSK | 10x2000 | Innendørs bane | 10 | 3:56 | 3:57 | 165 | 2.4 | 2.5 | -0.1 | +0.0 | -1 | +1 | -27 |
| 2025-02-24 | MandagsTOSK | 10x2000 | Innendørs bane | 6 | 4:03 | 4:00 | 158 | 2.3 | 1.9 | +0.4 | +0.2 | -5 | -5 | -27 |
| 2025-02-12 | OnsdagsTOSK | 10x1000 | Innendørs bane | 10 | 3:44 | 3:44 | 165 | 3.3 | 3.8 | -0.5 | -0.5 | -8 | +4 | -20 |
| 2024-11-04 | MandagsTOSK | 5x3000 | Innendørs bane | 3 | 4:03 | 4:05 | 159 | 2.2 | 1.9 | +0.3 | +0.3 | -4 | -4 | -22 |
| 2024-07-03 | OnsdagsTOSK | 8x1000 | Utendørs bane | 8 | 3:36 | 150 | 6.8 | 4.7 | +2.1 | -27 | -16* | -23 | ||
| 2024-07-03 | OnsdagsTOSK | 8x1000 | Utendørs bane | 6 | 3:47 | 148 | 4.2 | 3.4 | +0.8 | -23 | -7 | -23 | ||
| 2024-07-03 | OnsdagsTOSK | 8x1000 | Utendørs bane | 2 | 3:56 | 150 | 3.6 | 2.5 | +1.1 | -16 | -11 | -23 | ||
| 2024-04-10 | OnsdagsTOSK | 5x4000 | Innendørs bane | 4 | 3:58 | 3:57 | 140 | 3.0 | 2.3 | +0.7 | +0.7 | -25 | -7 | -6 |
| 2024-04-10 | OnsdagsTOSK | 5x4000 | Innendørs bane | 2 | 3:56 | 3:58 | 148 | 2.5 | 2.5 | +0.0 | +0.2 | -18 | -0 | -6 |
| 2024-04-03 | OnsdagsTOSK | 12x1000 | Innendørs bane | 10 | 3:57 | 152 | 2.2 | 2.4 | -0.2 | -14 | +2 | -16 | ||
| 2024-04-03 | OnsdagsTOSK | 12x1000 | Innendørs bane | 5 | 4:01 | 154 | 1.6 | 2.0 | -0.4 | -10 | +11 | -16 | ||
| 2024-03-18 | MandagsTOSK | 8x2000 | Innendørs bane | 7 | 4:03 | 4:02 | 157 | 5.3 | 1.9 | +3.4 | +3.3 | -5 | -32* | -23 |
| 2024-03-13 | OnsdagsTOSK | 20x1000 | Innendørs bane | 10 | 4:09 | 147 | 3.1 | 1.7 | +1.4 | -14 | -19 | -20 | ||
| 2024-03-04 | MandagsTOSK | 8x2000 | Innendørs bane | 7 | 3:56 | 3:57 | 164 | 3.1 | 2.5 | +0.6 | +0.7 | -2 | -6 | -25 |
| 2024-03-04 | MandagsTOSK | 8x2000 | Innendørs bane | 3 | 3:55 | 3:49 | 164 | 3.2 | 2.6 | +0.6 | +0.0 | -2 | -6 | -25 |
| 2024-02-21 | OnsdagsTOSK | 12x1000 | Innendørs bane | 8 | 3:52 | 160 | 3.1 | 2.9 | +0.2 | -8 | -2 | -15 | ||
| 2024-02-12 | MandagsTOSK | 7x2000 | Innendørs bane | 6 | 3:58 | 3:57 | 163 | 1.8 | 2.3 | -0.5 | -0.6 | -2 | +9 | -16 |
| 2024-02-12 | MandagsTOSK | 7x2000 | Innendørs bane | 2 | 3:56 | 3:57 | 165 | 2.4 | 2.5 | -0.1 | +0.0 | -1 | +1 | -16 |
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
| Komponent | Poeng | Verdi | Vurdering |
|---|---|---|---|
| TSB race-dag (prognose) | 2/2 | 30.6 | i målbåndet +25…+35 |
| HRV-CV 6 uker | 3/3 | 11.0 | nivå lav vs egen historikk · trend fallende ✓ |
| Sykdomsfravær 14 d | 2/2 | 0 | friskt vindu |
| Taper-ferskhet (kval-km 7d/6u-snitt) | 0/2 | 1.21 | full treningsdose — ikke tapret |
plan_whatif.py.| Distanse | Nå | Pace | Taper | Gevinst |
|---|---|---|---|---|
| 5 km | 16:44 | 3:21/km | 16:32 | −12s |
| 10 km | 36:03 | 3:36/km | 35:32 | −30s |
| Halvmaraton | 1:22:21 | 3:54/km | 1:20:52 | −89s |
| Maraton | 2:47:47 | 3:59/km | 2:43:25 | −262s |
| Sone | Fart/km | Puls | Evne nå | Merknad |
|---|---|---|---|---|
| Restitusjon | 5:21–5:54/km | <125 | — | Super-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/km | 138–156 | — | Brukes 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/km | 158–162 | — | Lab: 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/km | 161–166 | — | Må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/km | 166–170 | 3:48 | Lab: 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/km | 176–186 | — | 3–5 min-drag (1000–1200 m). Pulsen henger etter — kjør på fart. |
| Fart / R-pace | 2:55–3:07/km | — | — | 200–600 m. Økonomi/spenst, full pause. |
| Dato | Laktat | Fart | Puls |
|---|---|---|---|
| 2026-09-03 | 3.2 mmol | 3:48/km | 166 |
| 2026-09-03 | 4.0 mmol | 3:45/km | 168 |
| 2026-09-08 | 2.2 mmol | 3:50/km | 157 |
| 2026-09-08 | 2.3 mmol | 3:50/km | 159 |
| Dag | Type | Økt | Hensikt |
|---|---|---|---|
| Man | Rolig + stigningsløp | 8 km rolig @ 4:55–5:27 + 6×100 m stigninger | Restitusjon fra helgas langtur, holde steget kvikt. |
| Tir | Terskel (LT2) | 5×2000 m @ 3:45–3:48 (puls 166–170), 75 s pause + 3 km opp/ned | Terskelvolum — størst utbytte for HM, bærer også maraton. |
| Ons | Rolig | 9 km rolig @ 4:55–5:27 | Aerob mengde. |
| Tor | Lang terskel | 3×3000 m @ 3:45–3:48 (puls 166–170), 90 s pause + 3 km opp/ned | HM-spesifikk terskelutholdenhet (Kbh, mål 3:47/km). |
| Fre | Restitusjon | 6 km veldig rolig @ 5:21–5:54 | Lett, full restitusjon før helga. |
| Lør | Langtur m/ maraton-fart | 35 km, siste 12 km @ 3:58–4:05 (MP) | Maraton-spesifikt 25k+-volum — sesongens flaskehals. Bygg økonomi under tretthet. |
| Søn | Rolig volum | 10 km rolig @ 4:55–5:27 | Volum på trette bein (maraton-utholdenhet). |
| 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-intervaller | 3:40/km |
| Form (CTL) / ferskhet (TSB) — dagens rad, etter dagens økt | 105.9 / 8.0 |
| Mengde siste 4 uker · kvalitet-km 12u | 413.9 km · 196.9 km |
| Lengste langtur (12u) | 35.0 km |
| Når | Snittfeil (MAE) |
|---|---|
| T−84 dager | 2.35% |
| T−56 dager | 2.03% |
| T−28 dager | 1.67% |
| T−14 dager | 1.29% |
| T−7 dager | 1.44% |
| Distanse | ± (95%) |
|---|---|
| 10 km | ±2.8% |
| Halvmaraton | ±4.4% |
| Maraton | ±3.7% |
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.
⚡ 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.
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.
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).
| # | Løp | Tid | vs modell (T-14) | Fade (2./1. halvdel) | Snitt-HR vs LT2 | Vær (racesnitt) | Definerende hendelse |
|---|---|---|---|---|---|---|---|
| 1 | Trondheim 2021 | 3:30:07 | −1,4 % | (GPS-usikker) | 163,8 · LT1+3 | 11,1° · 1,7 m/s | Debut. Maks-HR 188 av 190 — alt brukt. |
| 2 | Barcelona 2022 | 3:25:19 | +0,4 % | −0,3 % | 159,9 · under LT1 | **18,5°** · 1,3 | Varme. Holdt bevisst igjen — reserve ubrukt. |
| 3 | Oslo 2022 | 3:19:48 | **+1,7 %** | **+5,1 %** | 165,5 | 14,3° · 3,6 | «Knakk i siste bakken» — null MP-arbeid i blokka. |
| 4 | Valencia 2022 | 3:14:23 | −1,9 % | +2,0 % | 162,9 | 10,7° · 1,2 | «Gikk ut for hardt, vondt fra 20 km.» |
| 5 | Paris 2023 | 3:21:46 | −1,2 % | +0,7 % | 167 · = LT2 | 8,4° · **6,1** | 11 sykedager (kne + infeksjoner), halv oppkjøring. |
| 6 | New York 2023 | 3:09:02 | **−3,2 %** | +1,9 % | 173 · **over LT2** | 11,4° · 1,0 | Krampe-fare. Langturene raske men dårlig utført. |
| 7 | København 2024 | **2:59:11** | +0,5 % | +0,5 % | 172,8 · over LT2 | 11,9° · 3,7 | Første sub-3. TOSK-tog i 4:15. «Ødelagt på 38 km.» |
| 8 | Berlin 2024 | 2:59:34 | +0,2 % | +1,7 % | (HR korrupt) | 11,0° · 3,4 | Mageknip km 27–30 — nesten kostet sub-3. |
| 9 | Valencia 2024 | 2:56:37 | +0,5 % | +0,3 % | 156,6 · under LT1 | 11,9° · 1,5 | PB tross 3 d forkjølelse. Materialets dypeste taper. |
| 10 | London 2025 | 3:19:12 | (ekskl.) | **+18,4 %** | 150,9 · maks 179 | **16,8° (maks 19,2)** · 0,3 | Dagsform-kollaps: «Tungt fra start, ble bare verre.» |
| 11 | Frankfurt 2025 | **2:53:06** | −1,0 % | **−0,7 %** (off. −3,0 s/km) | 161,9 · I3 | 7,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.
| Blokk | km/u | kval-km/u | 30k+ | MP-km | øktscore | LT-score | dcp 30k+ | syk (blokk / siste 6 u) | peak CTL | race-TSB | drag-snitt | tune-up |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Trondheim 21 | 61,3 | 5,3 | 6 | 6 | 5,68 | 7,96 | — | 0 / 0 | 91,7 | +37 | 4:17 | 1 |
| Barcelona 22 | 47,3 | 4,6 | 2 | 0 | 5,42 | 7,66 | — | 2 / 0 | 77,3 | +19,5 | 4:33 | 0 |
| Oslo 22 | 64,1 | 8,1 | 2 | 106 | 5,97 | 7,56 | 5,3 | 3 / 0 | 95,9 | +33,7 | 4:18 | 0 |
| Valencia 22 | 61,9 | 12,5 | 4 | 72 | 6,29 | 7,55 | — | 0 / 0 | 94,7 | +20,3 | 4:12 | 1* |
| Paris 23 | 37,7 | 6,0 | 3 | 25 | 6,15 | 7,12 | — | **11 / 6** | 86,1 | +34,3 | 4:24 | 0 |
| NY 23 | 71,2 | 17,1 | 6 | 171 | 7,29 | **7,01** | **3,6** | 0 / 0 | 104,0 | +33,9 | 4:00 | 2 |
| **Kbh 24** | 91,6 | 23,9 | 10 | 125 | 8,26 | 8,43 | 1,4 | 1 / 0 | 115,0 | +49 | 3:59 | 2 |
| **Berlin 24** | 86,6 | 25,3 | 8 | 159 | 8,35 | 8,19 | 2,9 | 0 / 0 | 109,2 | +37 | 4:10 | 0 |
| **Valencia 24** | 85,9 | 23,1 | 5 | 80 | 7,94 | 8,16 | −2,3 | 2 / 0 | 113,9 | +54 | 4:14 | 0 |
| London 25 | 82,4 | **25,6** | 7 | 131 | 7,95 | 8,57 | 0,3 | 1 / 0 | **100,0** | +32,8 | 4:04 | 0 |
| **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.*
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).
§2.9-seriene på tvers gir den reneste utviklingshistorien i materialet — avviket mellom kort-distanse-Riegel (eksp. 1,06) og faktisk maratontid:
| År | Løp | Prediktor | Riegel-ekv. | Faktisk | Avvik |
|---|---|---|---|---|---|
| 2021 | Trondheim | HM 1:33:45 | ~3:15:30 | 3:30:07 | **+15 min** (reell eksponent ~1,14) |
| 2022 | Valencia | HM 1:29:16 (B) | ~3:07:30 | 3:14:23 | +6–7 min |
| 2023 | NY | 10k 39:26 / HM 1:27:52 | 2:57:37 / 3:02:15 | 3:09:02 | +11 / +7 min |
| 2024 | København | 10k 38:38 | 2:57:43 | 2:59:11 | +1,5 min |
| 2025 | Frankfurt | 10k 37:24 / HM 1:24:24 | 2:53:40 / 2:57:10 | 2: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.)
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.
| # | KPI | Krav (grønn) | Konfidens | Evidens |
|---|---|---|---|---|
| P1 | Ukevolum | **≥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. |
| P2 | Peak CTL | **106–115** | **A** | Skarpt brudd 104→106. Kollineær med P1 — de er ett krav i praksis. |
| P3 | Langturer ≥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. |
| P4 | Langtur-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). |
| P5 | MP-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. |
| P6 | Kvalitets-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. |
| P8 | Sykedager | **≤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. |
| P9 | Taper | **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 vindu | Frankfurt-modellen (kort/frisk, CTL bevart) er malen. HRV-CV skal falle gjennom taper (r=−0,82, n=7 → **B**). |
| P10 | Tune-up | **10k (helst) 4–6 uker ut — obligatorisk** | **A** som prediktor (Kbh/Frankfurt: treff ±1,5 min), **B** som risiko-detektor | 3 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 %). |
| # | KPI | Krav | Konfidens | Evidens |
|---|---|---|---|---|
| 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 %. |
| R2 | Gruppe | **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. |
| R3 | HR-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.) |
| R4 | Fylling | **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. |
| R5 | Race-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. |
| R6 | Dagsform-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. |
| R7 | Væ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. |
| R8 | Etter 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. |
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.
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.
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.
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.
| # | Løp | Tid | vs modell (T-14) | Åpning km 1 (vs snitt) | Fade | Vær (racesnitt) | dsm | Definerende |
|---|---|---|---|---|---|---|---|---|
| 1 | Tordenskiold 2020 (solo) | 43:42 | (B-innsats: +3,0) | −0,4 | −1,5 % | 8,7° · 3,0 | — | Solo-testløp, sub-45-mål. |
| 2 | Høst-10k 2020 | 42:07 | +0,2 | −4,5 | −1,2 % | 8,8° · 2,8 | — | PB −2 min. |
| 3 | Nidaros 2022 | 39:48 | −0,6 | −4,0 | +2,0 % | 14,6° · 3,4 | **13** | 13 d etter Barcelona. Kort løype (9,55). |
| 4 | Tordenskiold 2023 | 41:26 | +1,5 | −6,8 | +4,3 % | 13,6° · 4,8 | 37 | Kupert (km-er med +25 hm) — fade er terreng. |
| 5 | Nidaros 2023 | 39:58 | **+1,8** | +1,8 | −0,7 % | 8,6° · 5,0 | 62 | Første sub-40. Jevn, 3:50-avslutning. |
| 6 | Oslo 10k 2023 | 39:26 | −0,7 | −1,4 | −0,2 % | 13,0° · 2,8 | 167 | PB. Dødsjevn. |
| 7 | 10k bane 2024 | 38:38 | −1,2 | −1,6 | +1,8 % | 4,4° · 1,3 | 138 | PB midt i blokk (TSB-pre +2,3). |
| 8 | Nidaros 2024 | 39: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. |
| 9 | Nidaros 2025 | 40:54 | **−4,7** | **−21,3** | **+10,9 %** | 6,0° · **5,9** | **27** | Gåten — se §3. |
| 10 | Sommernattsløpet 2025 | 38:25 | +1,2 | +0,1 | −1,1 % | 11,1° · 2,3 | 41 | PB 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,1 | 108 | PB −1:01. Jevn 3:47 + 3:36-avslutning. Modell-treff på sekundet. |
| # | Løp | Tid | vs modell (T-14) | Åpning km 1 (vs snitt) | Fade | Vær | Definerende |
|---|---|---|---|---|---|---|---|
| 1 | Trondheim HM 2019 | 1:44:42 | −3,9 | +7,8 | −4,7 % | 10,4° · 1,2 | Debut. Modellen kjenner ikke 2019-plattformen. |
| 2 | Solo-HM 2020 | 1:42:05 | −1,1 | +2,9 | −3,6 % | 7,6° · 1,9 | «All out med tunge bein», TSB-pre −15. |
| 3 | Familiehalv 2020 | 1:44:02 | (sosialt: −4,8) | +2,8 | −2,1 % | 12,0° · 5,8 | Ekskludert (sosial). |
| 4 | HM okt 2020 | 1:36:07 | −2,2 | −1,0 | 0,0 % | 6,0° · 3,9 | PB −6 min. |
| 5 | HM 2021 | 1:33:45 | −0,4 | +0,1 | +1,4 % | 16,7° · 3,4 | Fra TSB −50 (T−14) til +11 på dagen — overload→rebound. |
| 6 | Skogsmaraton 2021 (HM-trail) | 1:56:04 | (trail: −20,6) | — | +12,0 % | 14,4° · 4,2 | Terreng/+494 hm. Ekskludert, selvforklarende. |
| 7 | TOSK-HM 2022 | 1:29:16 | (B-innsats: +4,3) | +6,5 | −1,5 % | 8,8° · 5,2 | B-løp i TOSK-følge — likevel raskere enn modellen. |
| 8 | Trondheim HM 2023 | 1:27:49 | +0,3 | −1,0 | −2,2 % | 14,7° · 2,6 | PB på dyp taper (TSB-pre +36). HR-sensorfeil. |
| 9 | **Trondheim HM 2025** | **1:24:24** | −0,8 | +7,8 | −2,6 % | 15,8° · 2,6 | PB. −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,8 | PB, 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.
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.)
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.
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.)
| Kategori | n | snitt | σ (T-14) | Uten én outlier |
|---|---|---|---|---|
| 10k | 10 | −0,20 | 1,75 | **uten Nidaros-25: +0,29 / σ 0,97** — modellens strammeste kategori |
| HM | 7 | −0,93 | 1,63 | 2023+: +0,3/−0,8/+1,6 · pre-2023: −3,9/−1,1/−2,2/−0,4 |
| M | 10 | −0,55 | 1,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).
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).
| # | Regel | Krav | Konfidens | Evidens |
|---|---|---|---|---|
| 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. |
| RE2 | Profil | **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. |
| RE3 | Ingen 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. |
| RE4 | Siste harde økt | **Full terskel senest T−5 (fre 7.8); T−2 kun strides.** | B | K3-mekanismen (ferskhet, ikke fitness); Berlin-blokkas siste-uke-mønster. |
| RE5 | Væ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. |
| RE6 | Race-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.** | B | K5: 2 av 3 kortdistanse-flagg foran PB-er. |
| RE7 | Verktø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.
Gapet: 1:21:19 → 1:19:59 = 80 s = 3,8 s/km (3:51 → 3:47). Berlin-fasiten sier hvor de bor:
| # | Kilde | s/km | Konfidens | Evidens |
|---|---|---|---|---|
| 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.
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).
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.
| Løp | Åpning km 1 | Banket <30k | Tap 35k→mål | Brudd-onset | Recovery | EF-drift 31–35 | Stride 35–40 vs 5–10 | Siste 2,2 km | km-SD (vind) |
|---|---|---|---|---|---|---|---|---|---|
| Trondheim 21 | +1,6 % | 52 s | 23 s | — | — | −4,6 % | −0,6 % | **−14,7 s/km** | 4,7 (1,7 m/s) |
| Barcelona 22 | +4,2 % | 67 s | 17 s | — | — | +1,1 % | −2,3 % | **−14,3** | 3,8 (1,3) |
| Oslo 22 | **−3,7 %** | **215 s** | **159 s** | km 24→35 | nei (kollaps 37–39) | −4,0 % | **−11,3 %** | +1,2 | 4,4 (3,6) |
| Valencia 22 | +0,2 % | 76 s | 55 s | km 35 | nei | −1,2 % | −1,8 % | +0,7 | 3,0 (1,2) |
| Paris 23 | +1,5 % | 101 s | 82 s | km 37 | nei | −0,0 %* | **−6,0 %** | −4,4 | 7,2 (**6,1**) |
| NY 23 | (Verrazzano) | 149 s | 54 s | km 37 | delvis | (ingen HR) | **−5,4 %** | −5,1 | 5,9 (1,0) |
| København 24 | +0,4 % | 52 s | 39 s | — | — | **−8,5 %** | −2,6 % | −3,3 | 2,7 (3,7) |
| Berlin 24 | +1,1 % | 56 s | 16 s | km 28 (GI) | **JA — full** | (ingen HR) | −1,9 % | −3,6 | 3,4 (3,4) |
| Valencia 24 | +3,0 % | 28 s | 20 s | — | — | (HR død fra 21) | −2,2 % | −10,1 | 2,8 (1,5) |
| London 25 | (syk fra start) | — | 313 s | km ~16–20 | nei | (syk baseline)* | **−19,1 %** | +48,2 | 4,3 (0,3) |
| **Frankfurt 25** | **+5,4 %** | **29 s** | **0 s** | — | — | **−0,1 %** | **−0,5 %** | −4,6 | 3,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).*
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.
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:
| Fase | Km | Pace | Regel + in-race-gate |
|---|---|---|---|
| Åpning | 1 | **4:10–4:11** | Frankfurt-malen (+9 s). HR skal være <155 (Frankfurt km 1: 148). Trengsel er gratis her. |
| Nedtrapping | 2–3 | 4:06 → 4:04 | Fortsatt over mål. Ikke vev deg inn i 3:55-tog. |
| Innfasing | 4–8 | 4: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ås | 9–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-lull | 24–26 | 4:01–4:02 | Gel + fokuspunkt — mini-dippen i 6/11 løp starter her (D1). |
| GI-protokoll | 27–30 | 4:01 | Ved 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. |
| Vindsonen | 30–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 frislipp | 38–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ål | 41–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).
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.
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.
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.
10k (baseline km 2–3 → sein km 7–9):
| Løp | Tid | resid T-14 | Åpning km1 vs snitt | Fade (2H vs 1H) | EF-drift | Steg-drift sein | KadensΔ | Siste km |
|---|---|---|---|---|---|---|---|---|
| Tordenskiold-20 (solo) | 43:42 | (+5,3 B) | +4,5 | −6,5 % | +1,3 % | +4,5 % | −1,3 | 3:37 |
| Høst-10k-20 | 42:07 | +0,2 | −6,4 | +0,2 % | −1,2 % | +0,6 % | +0,1 | 4:30 |
| Nidaros-22 (9,65 km) | 39:48 | −0,6 | −3,0 | +1,8 % | −4,4 % | −3,8 % | −0,3 | 4:01 |
| Tordenskiold-23 (terreng)¹ | 41:26 | +1,5 | −1,9 | −1,5 % | −7,2 % | −3,9 % | −1,2 | 3:13 |
| Nidaros-23 (HR ute) | 39:58 | +1,8 | +7,0 | −4,7 % | — | −1,3 % | +0,3 | 3:10 |
| Oslo-10k-23 | 39:26 | −0,7 | +3,8 | −5,1 % | −1,2 % | −0,5 % | −0,5 | 2:59 |
| Bane-24 | 38:38 | −1,2 | −1,6 | +1,7 % | −0,9 % | −1,7 % | −2,0 | 3:53 |
| **Nidaros-24** (postM) | 39:25 | +0,3 | **−9,8** | **+5,3 %** | −4,9 % | **−6,6 %** | −1,1 | 3:44 |
| **Nidaros-25** (sprekk) | 40:54 | **−4,7** | **−29,4** | **+20,0 %** | — | **−8,8 %** | −3,4 | 5:50 |
| Sommernatt-25 | 38:26 | +1,2 | +2,3 | −2,6 % | +1,4 % | +1,1 % | −0,0 | 3:30 |
| **EnergiMila-25** (PB) | 37:24 | 0,0 | +4,5 | −2,7 % | −2,7 % | −0,4 % | +0,1 | 3:19 |
HM (baseline km 3–8 → sein):
| Løp | Tid | resid | Åpning km1 | Fade | EF-drift | Steg-drift | KadensΔ | Siste km |
|---|---|---|---|---|---|---|---|---|
| Trondheim-HM-19 (debut) | 1:44:42 | −3,9 | +9,5 | −4,9 % | (+2,9)² | +4,4 % | +0,9 | 4:44 |
| Solo-HM-20 | 1:42:05 | −1,1 | +4,2 | −3,2 % | −0,8 % | +2,9 % | +0,4 | 4:54 |
| HM-okt-20 | 1:35:36 | −2,2 | +0,2 | −0,5 % | −1,9 % | −1,2 % | +1,6 | 4:16 |
| HM-21 | 1:33:45 | −0,4 | +1,2 | +0,5 % | (−11,7)² | −0,7 % | −1,9 | 4:09 |
| TOSK-HM-22 (B) | 1:29:16 | (+4,8 B) | +7,9 | −2,3 % | −1,0 % | −0,4 % | +2,1 | 3:57 |
| Trondheim-HM-23 (HR-feil) | 1:27:49 | +0,3 | +0,0 | −2,3 % | (ekskl.)² | +2,2 % | +1,0 | 3:59 |
| **Trondheim-HM-25** (PB) | 1:24:24 | −0,8 | +9,3 | −3,4 % | −3,1 % | −0,4 % | +3,2 | 3:31 |
| **Berlin-HM-26** (PB) | 1:21:19 | +1,6 | +6,2 | −2,2 % | +1,7 % | +0,8 % | +1,8 | 3: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.
Berlin HM-26 per-500m, med gap til lab-LT2 (HR 169):
| km | 1–10,5 (åpning+lås) | 11–15 (midtlås) | 15–18 (venting) | 18–21,1 (frislipp) |
|---|---|---|---|---|
| HR-snitt | 160,7 | 163 | 163 | **165–168** |
| Gap til LT2 | +5…+8 | +6 | +6 | +1…+4 |
| Pace | 3:51 | 3:50 | 3:48 | **3:45 → 3:41 → 3:29** |
| Steglengde | 1,41 | 1,41 | 1,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 6–7 for de to sprekkene mot de to rene PB-ene (baseline km 3–5,5 → brudd km 5,5–7,5):
| Løp | Steglengde | Kadens | HR | Pace |
|---|---|---|---|---|
| **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,1 | 172,2 → 171,7 = −0,4 | +1,5 % |
| Sommernatt-25 (PB) | 1,424 → 1,433 = +0,7 % | +0,3 | 174,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.
Per-km variasjonskoeffisient (CV), pace vs watts:
| Løp | Vind (racesnitt) | Pace-CV | Watts-CV | Utfall |
|---|---|---|---|---|
| **Nidaros-25** | **5,9 m/s** | **13,0 %** | 8,4 % | sprekk −4,7 % |
| Oslo-10k-23 | 2,8 m/s | 7,2 % | 4,4 % | PB (kupert løype) |
| Nidaros-24 | 1,7 m/s | 3,7 % | 5,5 % | sprekk (watts > pace) |
| EnergiMila-25 | 1,1 m/s | 3,6 % | 2,8 % | PB |
| Sommernatt-25 | 2,3 m/s | 2,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.
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.
Bygger på F5s RE1–RE7, nå med per-sekund-gates:
| km | Gate | Tall |
|---|---|---|
| 1 | Åpning etter watt, ikke pace | 3:40–3:44 **OG** 465–480 W. Aldri <3:38 / >495 W km 1. |
| 2–5 | Lås | 3: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–9 | Frislipp gradvis | Alt 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. |
| eve | Belte-sjekk | Puls-belte testes i kulde/regn (Nidaros-25-lærdommen). |
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.
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).
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).
| Akse | Fakta | Mot PB-profilen |
|---|---|---|
| Løype | Flat, 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 |
| Temperatur | Start 10:00 (2026-utgaven). Praha tidlig april: morgen 2–6°, dagshøy ~11–13° → racevindu typisk **6–12°** | ✓ i PB-vinduet 7–12° |
| Felt/tog | RunCzech-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.
| Akse | Fakta | Mot 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 |
| Temperatur | Start 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/tog | Fartholdere 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.
| Praha-utfall | Riegel-latent M | Genè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:5x | 2: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).
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:
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.
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.
| Slot | Form A′ — «2026-malen + dobbel vår» (F18-favoritt) | Form B′ — racecraft-maks | Form C′ — motor-året |
|---|---|---|---|
| Nov–feb | Motor-vinter (ikke-forhandlbar i alle former) | Motor-vinter | Motor-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.5 | M-bro (2×30k+ MP, P4-port) | M-bro | Ingen 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–jun | postM-fredning (ingen 10k-A 15–45 d) → base | postM-fredning → base | 10k-sesong fra sent juni (Energimila-klassen, lokal = null eksponeringskost) |
| Jul–aug | Sommerbase (Italia-varme = naturlig adaptasjon, O1-rammene) | Sommerbase | 10k/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å året | Ingen 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 2026 | 4–5 — flest vinduer, F15-prisen | 2–3, laveste risiko |
| Velges hvis | Amsterdam 2:48–2:52 + lab kvitterer motoren (F18 default) | Amsterdam viser at utførelses-varians (ikke kapasitet) er gapet | Amsterdam 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.
| # | Løp | Dato 2027 | Avstand fra Genève | For | Mot |
|---|---|---|---|---|---|
| 1 | **Valencia** | søn 5.12 (typisk slot, ikke offisielt bekreftet) | T+30 u | Carls 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 u | PB-banen 2025 (7,3° racesnitt), flat, kaldt-garantien best i oktober-klassen | 2025-blokka der kjøpte 7 sykedager på 98 km/u — dose-, ikke arena-feil, men respekter taket 85–95 |
| 3 | Amsterdam | ~17.10 (typisk slot) | T+23 u | Kjent logistikk/bane fra 2026; fasit-sammenligning år-over-år | Ingen fordel utover det kjente; vær-odds som Frankfurt minus |
| 4 | Berlin | søn 26.9 (bekreftet) | T+20 u | Feltet/toget dypest av alle | Tidligst: 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.
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:
| Dom | Konfidens | Hvorfor |
|---|---|---|
| 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) |
É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.
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`.
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.
| Metrikk | Verdi |
|---|---|
| Distanse (offisiell / GPS) | 10,0 km / 10,01 km |
| Tid | **36:43** |
| Snittpace | **3:40/km** |
| HR snitt / maks | 172 / 179 bpm |
| Effekt snitt | 475 W |
| Kadens snitt | 182 spm |
| Steglengde snitt | 150 cm |
| GCT snitt | 213 ms |
| Vertical ratio | 6,33 % |
| Aerob TE | 4,6 |
| Sko | **Nike Alphafly 3** (debut — 6 km forsøkstur dagen før) |
PB-progresjon i kategorien:
| Dato | Tid | Pace | Løp |
|---|---|---|---|
| 2020-05-28 | 43:42 | 4:22/km | Tordenskioldløpet solo |
| 2020-10-16 | 42:07 | 4:13/km | Høstens 10k |
| 2022-05-21 | 39:48 | 3:59/km | Nidaros løpefest |
| 2023-09-16 | 39:26 | 3:57/km | Oslo Maraton 10k |
| 2024-03-22 | 38:38 | 3:52/km | 10k på bane |
| 2025-06-07 | 38:25 | 3:50/km | Sommernattsløpet |
| 2025-08-13 | 37:23 | 3:44/km | EnergiMila 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.
| Metrikk | Verdi | Kontekst |
|---|---|---|
| HRV | **83 ms** | kraftig over 7d-snitt (~72) |
| RHR | **36 bpm** | under baseline 37,7 |
| Søvn | 7,1 t / score 86 | god |
| 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.
Nær ditt dokumenterte klimaoptimum (~10 °C). Ingen værjustering av resultatet — dette var reell form.
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.
| Lap | Dist (m) | Tid | Pace | HR |
|---|---|---|---|---|
| 1 | 1067 | 3:56 | 3:41/km | 156 |
| 2 | 949 | 3:28 | 3:39/km | 170 |
| 3 | 1008 | 3:42 | 3:40/km | 173 |
| 4 | 1017 | 3:47 | 3:43/km | 174 |
| 5 | 967 | 3:33 | 3:40/km | 174 |
| 6 | 1001 | 3:37 | 3:36/km | 175 |
| 7 | 946 | 3:29 | 3:40/km | 174 |
| 8 | 1010 | 3:43 | 3:40/km | 175 |
| 9 | 1013 | 3:49 | 3:46/km | 175 |
| 10 | 1036 | 3:36 | 3:28/km | 176 |
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.
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.
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.
| Metrikk | Verdi | 2025-referanse | Endring |
|---|---|---|---|
| Kadens | 182 spm | 182 spm | → |
| Steglengde | 150 cm | 146 cm | **+4 cm** |
| GCT | 213 ms | 214 ms | → |
| Vertical ratio | 6,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.
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.
| Komponent | Estimat | Notat |
|---|---|---|
| Pacing-strategi | 2,3/2,5 | negativ splitt −2,3 s/km (aggressivt neg. −5 til −10 er 10k-idealet i malen) |
| Pacing-konsistens | 1,2/1,5 | CV ~2,0 % |
| HR-kontroll | 0,9/1,5 | drift +13 Q1→Q4 |
| Sterk avslutning | 1,0/1,0 | siste lap 3:28/km |
| Tid-utfall | 2,5/2,5 | PB −1,8 % |
| PB-byks-bonus | 0,2/0,7 | moderat byks |
| Vanskelighetsbonus | 0,0/1,0 | optimale forhold |
| **Total** | **~8,1/10** | *Solid, på grensen til Sterk* |
| Metrikk | 2025 | 2026 | Endring |
|---|---|---|---|
| Tid | 37:23 | 36:43 | **−40 s** |
| Snittpace | 3:44/km | 3:40/km | −4,0 s/km |
| HR snitt | 170 | 172 | +2 |
| Splitt | −1,5 s/km | −2,3 s/km | mer negativ |
| HR-drift Q1→Q4 | +15,4 | ~+13 | bedre |
| Temperatur | 19,0 °C | 12,9 °C | −6 °C (fordel 2026, verdt ~10–15 s) |
| TSB (pre) | ~−10 | +2 | bedre timet taper |
| Sko | Alphafly #5 | Alphafly 3 | debut |
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.
Med 36:43 som nytt anker (personlig Riegel-eksponent 1,064, kalibrert Orkanger→Frankfurt 2025):
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.
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?
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).
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»:
| Lab | Dato | Protokoll | LT2-def | LT2-pace (rapportert) | LT2-HR |
|---|---|---|---|---|---|
| Løplabbet Lade (Leirdal) | 2024-03-01 | 5 trinn, 0 % | **4 mmol** | 3:57/km (15,2 km/t) | 164 |
| Granåsen (Moxnes) | 2026-02-24 | 5-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):
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:
| Kvartal | Proxy-LT2 | Kvartal | Proxy-LT2 | |
|---|---|---|---|---|
| 2022-Q1 | 4:22 | 2024-Q3 | 4:00 | |
| 2022-Q3 | 4:09 | 2024-Q4 | 4:08 | |
| 2023-Q2 | 4:25 | 2025-Q2 | **3:50** | |
| 2023-Q4 | 4:00 | 2025-Q4 | **3:48** | |
| 2024-Q1 | 4:00 | 2026-Q1 | 3:52 | |
| 2024-Q2 | 4:05 | 2026-Q2 | 3: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.
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»:
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 på 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øp | Racefart | I3-dragsnitt 8u | Diff |
|---|---|---|---|
| Berlin HM 2026 (1:21:19) | 3:50 | 3:51 | **−2 s** |
| Trondheim HM 2025 (1:24:24) | 3:59 | 3:54 | +6 s |
| Nidaros 10k 2023 (39:58) | 3:58 | 4:14 | −16 s |
| Oslo 10k 2023 (39:26) | 3:53 | 4:00 | −7 s |
| Bane-10k 2024 (38:38) | 3:52 | 4:02 | −11 s |
| EnergiMila 2025 (37:24) | 3:44 | 3: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.
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:
| Parameter | Mål u29–37 | Forankring |
|---|---|---|
| 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 blokka | In-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-retest | aug/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.
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.
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.
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.
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 så 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).
Fire kontinuerlige form-kanaler, alle i sekunder/km (lavere = raskere = bedre):
| Kanal | Hva | Uavhengig 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-proxy | Median I3/I4-øktpace (56-d) | **NEI, delvis sirkulær** — dosen (terskeldrag) *definerer* metrikken. |
| VO2-proxy | Median 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):
| År | aerob@128 | LT2 | VO2 | fusjonert (10k-ekv) |
|---|---|---|---|---|
| 2020 | 360 | 263 | 263 | 268 |
| 2021 | 355 | 261 | 254 | 255 |
| 2022 | 352 | 264 | 259 | 258 |
| 2023 | 343 | 258 | 237 | 247 |
| 2024 | 327 | 240 | 249 | 236 |
| 2025 | 323 | 240 | 232 | 234 |
| 2026 | 316 | 233 | 225 | 230 |
`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.
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.
| Rang | Stimulus | Flytter hvilken kanal | Evidens (retning, styrke) | Konfidens |
|---|---|---|---|---|
| **1** | **Ren volum (rolig km)** | aerob@128 + fusjonert race-form | Nivå 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.
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 vinduet | vs 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:
| Kanal | Best vindu | r ved 4 u | r ved 8 u | r 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.
Dobbel-terskel × base (bekreftet). Formet som spørsmålet stilte det — er dobbel kun effektivt på høy base? Ja, empirisk:
| Tilstand | LT2-bedring de neste 2–6 u | n |
|---|---|---|
| Dobbel-uke + høy base (≥median uke-km) | **+2,6 s/km** | 10 |
| Dobbel-uke + lav base | +1,7 s/km | 1 |
| Ingen dobbel (alle uker) | +0,2 s/km | 323 |
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/26 | aerob@128 | LT2 | fusjonert |
|---|---|---|---|
| Start (2025-11-01) | 312 | 240 | 229 |
| 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.
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.
*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.
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å.
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.
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.
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.
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.
| Vindu | Datoer | Sted | Temp (løp) | n dager |
|---|---|---|---|---|
| **PRE26** (baseline) | 25.5–21.6 | Trondheim | 9–18 °C | 28 |
| **UND26** (eksponering) | 22.6–5.7 | transit → Berlin → Dresden → **Seefeld 1180 m** → Bolzano 240 m | 16–28 °C | 14 |
| PRE25 (kontroll) | 25.5–21.6 2025 | Trondheim | 9–17 °C | 28 |
| UND25 (kontroll) | 22.6–5.7 2025 | Trondheim | 10–18 °C | 14 |
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).
Difference-in-differences (DiD) = (UND26−PRE26) − (UND25−PRE25). DiD isolerer det som er spesielt for 2026-vinduet fra vanlig sesong-drift.
| Markør | PRE26 | UND26 | Δ26 | PRE25 | UND25 | Δ25 | **DiD** | Tolkning |
|---|---|---|---|---|---|---|---|---|
| RHR | 38,5 | 39,6 | +1,2 | 39,9 | 38,7 | −1,2 | **+2,4** | motsatt av sesong — akutt strain |
| HRV | 71,1 | 68,0 | −3,1 | 66,5 | 68,9 | +2,4 | **−5,6** | undertrykt autonomi |
| Søvnscore | 85,7 | 78,6 | −7,1 | 82,8 | 81,6 | −1,2 | **−5,9** | varme+reise ødelegger søvn |
| Stress_avg | 18,7 | 23,9 | +5,1 | 21,3 | 21,4 | +0,1 | **+5,0** | nattlig belastning opp |
| Training readiness | 68,1 | 65,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.
Splitter vi UND26 på høyde forsvinner det meste av «forverringen»:
| Del-vindu | Sted | RHR | HRV |
|---|---|---|---|
| Seefeld-uka (26.6–2.7) | 1180 m | **40,7** | **64,7** |
| Lav-høyde-dager (resten) | 40–240 m | 38,6 | 71,3 |
| **Bolzano sluttdager (4.–5.7)** | **240 m** | **36,5** | **79** |
| PRE26-baseline (referanse) | Trondheim | 38,5 | 71,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.
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.
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:
| Vindu | Rå-EF (median) | Temp-just. EF (median) |
|---|---|---|
| PRE26 | 2,527 | 2,541 |
| UND26 | 2,394 | 2,462 |
| PRE25 | 2,502 | 2,490 |
| UND25 | 2,314 | 2,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).
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:
Vi vet ikke hvilket scenario før målingen. Det er hele poenget med å designe del 2 som en ren utfylling.
Til u29 (siste ferieuke, 6.–16.7):
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:
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.
`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.
| Søvn-bin | n | Snitt-score | Median | %≥7,5 | %≥8,0 | Maks |
|---|---|---|---|---|---|---|
| [0,74) | 30 | **7,05** | 6,85 | 47 % | 37 % | 9,1 |
| [74,78) | 37 | **7,65** | 8,20 | 65 % | 51 % | 9,4 |
| [78,82) | 67 | 7,64 | 7,70 | 60 % | 46 % | 9,4 |
| [82,86) | 79 | 7,55 | 7,90 | 56 % | 49 % | 9,4 |
| [86,90) | 63 | 7,63 | 8,20 | 60 % | 54 % | 9,5 |
| [90,101) | 64 | **8,01** | 8,20 | 75 % | 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).
Ukessnitt (den faktiske påstanden): For hver ISO-uke: snitt-søvn den uka vs beste kvalitet ≥8,0.
| Uke-snitt søvn | n uker | P(minst én kvalitet ≥8) |
|---|---|---|
| <78 | 38 | **0,50** |
| [78,82) | 35 | 0,54 |
| [82,86) | 40 | 0,62 |
| ≥86 | 73 | 0,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.
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):
| Gate | Fyrer | P(dårlig \ | fyrer) | Recall |
|---|---|---|---|---|
| søvn<78 (dagens regel) | 60 | 0,33 | 0,25 | |
| søvn<74 | 27 | 0,52 | 0,17 | |
| søvn<75 & HRV<60 (COACH abort) | 24 | 0,50 | 0,15 | |
| **HRV<55 alene** | 42 | **0,52** | **0,27** | |
| søvn<74 ELLER HRV<55 | 54 | 0,50 | 0,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.
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.
`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.
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.
Andel av løpsminutter. H:M = høy dividert på terskel (<1 = mer terskel enn VO2 = pyramidal).
| År | Lav % | Mid % | Høy % | H:M | Klasse | Økter L/M/H |
|---|---|---|---|---|---|---|
| 2020 | 80,6 | 12,3 | 7,1 | 0,58 | pyramidal | 211/27/16 |
| 2021 | 81,1 | 13,9 | 4,9 | 0,36 | pyramidal | 193/32/13 |
| 2022 | 81,5 | 13,5 | 4,9 | 0,36 | pyramidal | 195/28/11 |
| 2023 | 75,9 | 14,8 | 9,4 | 0,63 | pyramidal | 234/38/26 |
| **2024** | 72,8 | **19,3** | 7,9 | 0,41 | pyramidal | 272/**78**/30 |
| 2025 | 78,3 | 13,4 | 8,3 | 0,62 | pyramidal | 294/52/38 |
| 2026* | 74,7 | 17,9 | 7,4 | 0,41 | pyramidal | 139/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.
Sone-minutter innenfor hver låste build-blokk (`training_blocks.json`):
| Blk | Mål | Uker | Lav % | Mid % | Høy % | Klasse |
|---|---|---|---|---|---|---|
| 1 | Trondheim M 2021 | 16 | 75,4 | 24,1 | 0,5 | pyramidal |
| 4 | Valencia M 2022 | 11 | 74,8 | 14,0 | 11,1 | pyramidal (nær balansert) |
| 5 | Paris M 2023 | 16 | 78,6 | 21,4 | 0,0 | pyramidal (ren terskel) |
| 6 | New York M 2023 | 16 | 79,6 | 10,3 | 10,2 | pyramidal (nær balansert) |
| 7 | København M 2024 | 16 | 71,8 | 18,2 | 10,0 | pyramidal |
| 8 | Berlin M 2024 | 16 | 77,1 | 16,9 | 6,0 | pyramidal |
| 10 | London M 2025 | 16 | 75,9 | 15,9 | 8,2 | pyramidal |
| 11 | Frankfurt M 2025 | 16 | 82,6 | 14,9 | 2,5 | pyramidal |
| 13 | Amsterdam M 2026 | 16 | 59,2 | 32,3 | 8,5 | pyramidal (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.
Motor = EF (fra RC6). Utfallsdata:
| År | EF | 10k-PB | HM-PB | M-PB | Peak-CTL |
|---|---|---|---|---|---|
| 2020 | 1,303 | 42:07 | 1:36:07 | — | 77 |
| 2022 | 1,329 | 39:48 | 1:29:16 | 3:14:28 | 96 |
| 2023 | 1,376 | 39:26 | 1:27:52 | 3:09:07 | 104 |
| **2024** | 1,435 | 38:38 | — | **2:56:37** | 115 |
| **2025** | 1,472 | **37:23** | 1:24:22 | **2:53:06** | 106 |
| 2026 | 1,479 | — | 1:21:18 | — | 95 |
Korrelasjoner (år-nivå, n=6–7, retningsgivende):
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.
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).
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.
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.
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.
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):
| Variant | MAE alle | T-14 | 10k T-14 | HM T-14 | M T-14 |
|---|---|---|---|---|---|
| Dagens modell | 1,78 % | 1,59 % | 2,02 % | 1,27 % | 1,38 % |
| + post-maraton-vindu | 1,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.
Alle korte løp 15–45 dager etter et maraton underpresterer mot modellen. Mønsteret er komplett og entydig i historikken:
| Dato | Løp | Dager etter M | Feil vs modell |
|---|---|---|---|
| 2022-05-21 | Nidaros 10k (13 d etter Barcelona) | 13 | ±0,0 % |
| 2024-05-25 | Nidaros 10k (etter København) | 20 | −2,6 % |
| 2025-05-24 | Nidaros 10k (etter London) | 27 | **−7,7 %** |
| 2023-05-09 | Tordenskiold 10k (etter Paris) | 37 | −3,5 % |
| 2025-06-07 | Sommernattsløpet (etter London) | 41 | −1,4 % |
| 2023-06-03 | Nidaros 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.
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.
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:
| Kat | n | 90 %-intervall (feil i %) |
|---|---|---|
| 10k | 33 | −5,6 … +3,3 |
| HM | 24 | −3,6 … +3,6 |
| M | 30 | −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.
`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°».
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 baseline | Snittfeil 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.
Alle 10 maratonblokker med utfall, sortert etter «slo modellen» (err T-14):
| Blokk | Tid | vs modell | km/u | kval-km/u | 30k+ | MP-km | øktscore | langtur-score | dcp | sykedager |
|---|---|---|---|---|---|---|---|---|---|---|
| Oslo 2022 | 3:19:48 | +1,2 % | 64 | 8 | 2 | 106 | 5,97 | 7,56 | 2,1 | 3 |
| Valencia 2024 | 2:56:37 | +0,8 % | 86 | 23 | 5 | 80 | 7,89 | 8,16 | 0,7 | 2 |
| København 2024 | 2:59:20 | +0,2 % | 92 | 24 | 10 | 125 | 8,14 | 8,43 | 1,4 | 1 |
| Berlin 2024 | 2:59:41 | +0,1 % | 87 | 25 | 8 | 159 | 8,12 | 8,19 | 1,9 | 0 |
| Barcelona 2022 | 3:25:19 | −0,7 % | 47 | 5 | 2 | 0 | 5,42 | 7,66 | −0,5 | 2 |
| Valencia 2022 | 3:14:28 | −1,6 % | 62 | 13 | 4 | 72 | 6,32 | 7,55 | 3,5 | 0 |
| Trondheim 2021 | 3:30:07 | −1,7 % | 61 | 5 | 6 | 6 | 5,66 | 7,96 | 1,2 | 0 |
| Paris 2023 | 3:21:03 | −2,2 % | 38 | 6 | 3 | 25 | 6,15 | 7,12 | −0,3 | **11** |
| Frankfurt 2025 | 2:53:06 | −2,4 % | 98 | 21 | 13 | 178 | 7,57 | 8,62 | 2,1 | **7** |
| New York 2023 | 3:09:07 | −3,0 % | 71 | 17 | 6 | 171 | 7,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:
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.
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.
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.
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.
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ørrelse | Verdi | Merknad |
|---|---|---|
| Open-standard 10k | 26:24 | Herrer, 2020-utgaven (Kipruto-æra) |
| Open-standard HM | 58:01 | Herrer, pre-mai-2020 WR (Kamworor 2019) |
| Open-standard maraton | 2:01:39 | Herrer, 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,915 | Enkelt-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.
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):
| Dato | Alder | Tid | AG% | Δ |
|---|---|---|---|---|
| 2020-10-16 | 36 | 42:07 | 64,7 % | — |
| 2023-06-03 | 38 | 39:52 | 69,1 % | +4,4 |
| 2023-09-16 | 39 | 39:26 | 70,3 % | +1,2 |
| 2024-03-22 | 39 | 38:38 | 71,7 % | +1,5 |
| 2025-06-07 | 40 | 38:25 | 72,6 % | +0,9 |
| **2025-08-13** | **41** | **37:23** | **75,1 %** | **+2,5** |
Halvmaraton (open-std 58:01):
| Dato | Alder | Tid | AG% | Δ |
|---|---|---|---|---|
| 2019-09-07 | 35 | 1:44:42 | 56,8 % | — |
| 2020-10-30 | 36 | 1:35:36 | 62,6 % | +5,8 |
| 2021-08-08 | 37 | 1:33:45 | 64,2 % | +1,6 |
| 2022-11-05 | 38 | 1:29:16 | 67,8 % | +3,6 |
| 2023-09-02 | 39 | 1:27:49 | 69,4 % | +1,5 |
| 2025-09-06 | 41 | 1:24:24 | 73,1 % | +3,7 |
| **2026-03-29** | **41** | **1:21:19** | **75,9 %** | **+2,8** |
Maraton (open-std 2:01:39):
| Dato | Alder | Tid | AG% | Δ |
|---|---|---|---|---|
| 2021-09-04 | 37 | 3:30:07 | 60,1 % | — |
| 2022-05-08 | 37 | 3:25:19 | 61,5 % | +1,4 |
| 2022-09-17 | 38 | 3:19:48 | 63,5 % | +2,1 |
| 2022-12-04 | 38 | 3:14:23 | 65,3 % | +1,8 |
| 2023-11-05 | 39 | 3:09:02 | 67,6 % | +2,3 |
| 2024-05-05 | 39 | 2:59:11 | 71,3 % | +3,7 |
| 2024-12-01 | 40 | 2:56:37 | 72,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.
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:23 | 2:51:58 |
| Faktisk maraton-PB | 2:53:06 |
Maratonen ligger 1,5–3,5 minutter bak det motoren tilsier. To lesninger, begge peker samme vei:
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.
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).
| Distanse | AG% nå | Vindu åpent | Sannsynlig topp | Livstids-estimat (konfidens) | Hva den er begrenset av |
|---|---|---|---|---|---|
| **10k** | 75,1 % | nå | 2026–2028 (42–44) | **35:30–36:00** (M) | VO2 — topper først, mest aldersfølsom |
| **HM** | 75,9 % | nå | 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:
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).
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.
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:
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).
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:
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.
> ⚠️ 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).
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):
| Fasit | Ferske onsets | Recall | Lead (median) | FP-episoder/18 mnd |
|---|---|---|---|---|
| **all** (v1-tallet) | 11 | 3/11 (27 %) | 6 d | 4 |
| **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) | 1 | 0/1 | — | for tynt (n=1) |
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).
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.
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.
Dynamikk-dekning per år (andel løp med steglengde/GCT/vertikal):
| År | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 |
|---|---|---|---|---|---|---|---|---|
| Dynamikk-dekning | 0 % | 0 % | 69 % | **5 %** | 61 % | 94 % | 96 % | 45 % |
| GCT (ms) | – | – | 256,3 | 256,4 | 258,8 | 251,9 | 250,5 | 250,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.
To uavhengige kilder, samme historie. quality_avg_cadence (Garmin-målt i kvalitetsvinduet, uavhengig av steglengde-derivering):
| År | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 | 2026 |
|---|---|---|---|---|---|---|---|
| Snitt-kadens | 173,2 | 175,3 | 175,8 | 176,6 | 177,3 | **180,6** | 181,2 |
| Median | 173 | 176 | 175,5 | 177 | 180 | **182** | 181,5 |
| p90 (fort-ende) | 179 | 179 | 183,5 | 184,2 | 184,0 | **186** | 185 |
| Quality-fart (m/s) | 3,3 | 3,3 | 3,1 | 3,2 | 3,4 | 3,4 | 3,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.
Ved matchet fart (2024–25, ren sensor-æra, per løp), høy- vs lav-kadens-halvdel:
| n | Kadens | GCT (ms) | Vert. sprett (cm) | Vert. ratio | Økonomi (EF) | |
|---|---|---|---|---|---|---|
| Lav kadens | 443 | 163,4 | 255,6 | 8,99 | 7,87 | 23,65 |
| **Høy kadens** | 443 | 176,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.
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.
`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.
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.
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.
Ø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).
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):
| Segment | n | EF_dm mølle | EF_dm ute | Pace@HR mølle | Pace@HR ute |
|---|---|---|---|---|---|
| Alle årstider | 16 / 1429 | −0,26 | 0,00 | 324 s/km | 315 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):
| Segment | n mølle / ute | Skår mølle | Skår ute | Exec mølle | Exec ute |
|---|---|---|---|---|---|
| Alle kvalitetsøkter | 12 / 435 | 7,40 | 7,48 | 7,12 | 7,34 |
| Vinter nov–mar | 5 / 185 | 7,58 | 7,59 | 7,02 | 7,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.
EF_dm per måned, ren pool (2020–26, temp-dekket, vinsorisert, n=1152). Positiv = bedre enn eget årssnitt:
| jan | feb | mar | apr | mai | jun | jul | aug | sep | okt | nov | des | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 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 |
| dagslys | 5,8 | 8,5 | 11,7 | 14,9 | 18,3 | 20,3 | 19,2 | 16,0 | 12,7 | 9,6 | 6,5 | 4,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.
Pace ved matchet puls (HR 130–145, ute), som isolerer temperatur fra intensitet:
| Temp | <−5 | −5–0 | 0–8 | 8–15 | >15 |
|---|---|---|---|---|---|
| Pace (s/km) | 328,6 | 328,0 | 328,4 | **320,1** | 333,0 |
| EF_dm | −0,2 | −0,6 | −0,7 | 0,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).
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.
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.
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».
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.
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.
LOO-MAE i % av løpstid (bias i parentes; − = modellen for optimistisk):
| Horisont | Før | Etter | Grid-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ør | Etter | I 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.
| Feil | for rent race-anker vs. ren Kalman, binnet på anker-alder (T≤28): |
|---|
| Anker-alder | Race-anker | Kalman | n |
|---|---|---|---|
| 0–45 d | 1,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.
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.
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.
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/`.
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).
| Økt-klasse | n (akutt / retur) | HRVΔ% D+1 | RHRΔ D+1 | BBΔ D+1 | HRV-retur median | **Wellness-kostnad** |
|---|---|---|---|---|---|---|
| Kvalitet terskel | 268 (257 / 220) | **0,0 %** | 0 | −3 | 1 d | **~0–1 dag** (52 % ingen dip) |
| Kvalitet VO2/4×4 | 59 (59 / 55) | **+2,3 %** | 0 | −2 | 1 d | **~0–1 dag** |
| Langtur 25–30 km | 20 (20 / 20) | +1,6 % | −1 | +3 | 1 d | **~1 dag** |
| Langtur 30 km+ | 59 (56 / 54) | −1,6 % | −1 | −2 | 2 d | **~2–3 dager** |
| Race 10k | 8 (8 / 7) | −17 % | +1 | −18 | ~2,5 d | **~2–4 dager** |
| Race HM | 4 (3 / 3) | −45 %* | −1 | −45* | ~2,5 d | **~2–3 dager** (tynt) |
| Race maraton | 9 (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.
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.)*
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.
| Påstand | Konfidens | Hvorfor |
|---|---|---|
| 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 |
É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.
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.
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 så 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.
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.
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-ledd | HRV |
|---|---|---|
| `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.)
Sammenligner arkitektur på netter før topp-desil (snitt-score 9,29) mot bunn-desil (5,04) kvalitetsøkter, k=34 hver:
| Metrikk | Topp | Bunn | Δ | MWU p |
|---|---|---|---|---|
| Lett søvn (min) | 263 | 227 | +36 | 0,002 |
| Varighet (t) | 7,3 | 6,8 | +0,4 | 0,005 |
| Dyp (min) | 94 | 106 | −12 | 0,10 |
| REM (min) | 78 | 76 | +2 | 0,66 |
| Restorativ (min) | 172 | 183 | −11 | 0,13 |
| Våken (min) | 5,8 | 4,4 | +1,4 | 0,44 |
| Effektivitet (%) | 98,8 | 98,9 | −0,2 | 0,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.
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øp | Varighet T‑1 | baseline | Δ | Dyp T‑1 | REM T‑1 |
|---|---|---|---|---|---|
| København M 2:59 | 6,6 | 7,2 | −0,6 | 115 | 68 |
| Berlin M 2:59 | 7,4 | 7,2 | +0,2 | 101 | 56 |
| Valencia M 2:56 | 6,7 | 7,2 | −0,5 | 86 | 47 |
| London M 3:19 🥵 | 7,3 | 7,1 | +0,1 | 104 | 76 |
| **Frankfurt M 2:53 (PB)** | **8,1** | 7,2 | **+0,9** | **142** | 84 |
| New York M 3:09 | 7,7 | 7,1 | +0,6 | 161 | 62 |
| 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.)
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.
Måned-snitt over alle netter 2022+ (n≈120–150/mnd):
| Mnd | Dyp | REM | Lett | Varighet | Mnd | Dyp | REM | Lett | Varighet | |
|---|---|---|---|---|---|---|---|---|---|---|
| Jan | 96 | 72 | 258 | 7,11 | Jul | 98 | 75 | 241 | 6,90 | |
| Feb | 88 | 81 | 263 | 7,21 | Aug | 101 | 69 | 244 | 6,89 | |
| Mar | 90 | 81 | 249 | 7,01 | Sep | 103 | 71 | 247 | 7,01 | |
| Apr | 91 | 81 | 255 | 7,14 | Okt | 98 | 74 | 253 | 7,08 | |
| Mai | 101 | 78 | 243 | 7,03 | Nov | 97 | 73 | 248 | 6,96 | |
| Jun | 96 | 73 | 238 | 6,79 | Des | 98 | 72 | 254 | 7,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.
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 score | p (n=323) |
|---|---|---|
| dyp_resid | −0,0033 | 0,25 |
| REM_resid | −0,0022 | 0,57 |
| våken_resid | +0,0104 | 0,18 |
| effektivitet_resid | −0,0509 | 0,16 |
| restorativ_resid | −0,0037 | 0,15 |
| lett_resid | +0,0025 | 0,13 |
| varighet_resid | +0,1359 | 0,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.
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:
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.
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.
`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).
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).
Fullstendig >5-dagers komplett-stopp-liste (2019-Q1 utelatt — pre-strukturert, CTL≈0). Klassifisert på årsak, med CTL-kostnad.
| Avbrudd | Dager | Årsak | CTL-tap | Retur | Kommentar |
|---|---|---|---|---|---|
| **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-07 | 16 | Jul/ferie | −24,8 | ~30 d | Årets største kalenderpause; frivillig. |
| 2022-12-29→01-16 | 19 | Jul + kne-hale | −6,7 | rask | Del av kne-episoden over (lav base = lite igjen å tape). |
| 2019-10-17→10-29 | 13 | Sesongslutt | −11,1 | — | Frivillig høstpause (nybegynner-æra). |
| 2021-09-05→09-11 | 7 | Post-race | −13,7 | ~14 d | Etter maraton-debut («alt brukt», HR 188/190). |
| 2024-12-02→12-07 | 6 | Post-race + reise | −13,0 | ~14 d | Etter Valencia (PB 2:56). Planlagt utladning. |
| 2023-04-03→04-08 | 6 | Post-race | −9,0 | ~10 d | Etter Paris. |
| 2019/2022 øvrige | 6–8 | Jul / vinter | −4…−9 | rask | Nybegynner-/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.
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.
| År | Median-uke km | CV % (lavere=jevnere) | Kont-fraksjon¹ | Peak-CTL | Forstyrr.-dager² | 10k-PB | Maraton-PB |
|---|---|---|---|---|---|---|---|
| 2019 | 17 | 53 | 0,62 | 69 | — | — | — |
| 2020 | 42 | 27 | 0,81 | 77 | — | 42:07 | — |
| 2021 | 47 | 33 | 0,88 | 92 | — | — | 3:30:07 |
| 2022 | 52 | 47 | 0,79 | 96 | 11 | 39:48 | 3:14:28 |
| 2023 | 68 | 30 | 0,81 | 104 | 16 | 39:26 | 3:09:07 |
| **2024** | **84** | 32 | 0,75 | **115** | **3** | 38:38 | **2:56:37** |
| **2025** | 84 | **24** | **0,88** | 106 | 21 | **37:23** | **2:53:06** |
| 2026* | 79 | 27 | 0,81 | 95 | 40 | — | 1: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*.
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.
| Funn | Konfidens | Hvorfor |
|---|---|---|
| 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 |
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.
É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.
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.
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).
| Avbrudd | Dager | CTL onset→bunn | CTL-tap | Retur (CTL≥pre) | Type |
|---|---|---|---|---|---|
| **2022-12-04 → (kne, kompound)** | 6 + 20¹ | 94,7 → 51,8 | **−42,9** | 251 d | Skade |
| 2021-12-22 → 01-08 | 17 | 77,5 → 45,2 | −32,3 | 203 d | Jul/kalender |
| 2024-12-01 → 12-08 | 7 | 96,7 → 72,4 | −24,3 | 90 d | Post-race (Valencia) |
| 2021-09-04 → 09-12 | 8 | 88,3 → 64,3 | −24,0 | >250 d | Post-race (debut-M) |
| 2022-05-08 → 05-14 | 6 | 77,3 → 64,5 | −12,8 | 66 d | Kort/vinter |
| 2023-04-02 → 04-09 | 7 | 82,0 → 71,1 | −10,9 | 103 d | Post-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.
EF-median per år, med pace@128 som intuisjon. Monoton stigning; dette er motoren som faktisk bygges.
| År | EF (m/min/bpm) | pace@128 | n |
|---|---|---|---|
| 2019 | 1,104 | 7:05 | 33 |
| 2020 | 1,303 | 6:00 | 135 |
| 2021 | 1,311 | 5:58 | 139 |
| 2022 | 1,329 | 5:53 | 118 |
| 2023 | 1,376 | 5:41 | 174 |
| 2024 | 1,435 | 5:27 | 194 |
| 2025 | 1,472 | 5:19 | 232 |
| 2026 | 1,479 | 5:17 | 119 |
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.
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.
Uke-for-uke EF etter gjenopptak 17.01.2023 (pre-nivå EF 1,355, pace@128 5:46):
| Uke tilbake | EF | vs pre | pace@128 |
|---|---|---|---|
| 0–3 | 1,346–1,363 | −0,7 … +0,6 % | 5:44–5:48 |
| 4 | 1,270 | **−6,3 %** | 6:09 |
| 5 | 1,243 | **−8,3 %** | 6:17 |
| 6 | 1,321 | −2,5 % | 5:55 |
| 7 | 1,339 | −1,2 % | 5:50 |
| 8–12 | 1,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.)
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.
| Markør | Hvor fort tapes den | Hvor fort kommer den tilbake | Konfidens |
|---|---|---|---|
| **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 brudd | Bygges over år, ikke uker (§4) | B |
| **VO2maks** | Ingen kontinuerlig data; antatt som EF | Diskret lab-anker, ingen brudd-oppløsning | C |
LT2 klatret jevnt gjennom æraene og ble aldri målbart revet av et avbrudd:
| År | LT2-anker (zones.json) | Empirisk I3-øktpace |
|---|---|---|
| 2020 | 4:25 @ HR170 | 4:27 (n=17) |
| 2021 | 4:15 @ HR171 | 4:20 (n=29) |
| 2022 | 4:05 @ HR172 | 4:30 (n=22) |
| 2023–26 | 3:49 @ HR169 | 4: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.
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.
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.
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).
Dag-for-dag (2022+):
| Man | Tir | Ons | Tor | Fre | Lør | Søn | |
|---|---|---|---|---|---|---|---|
| Kvalitet | **98** | 39 | **117** | 34 | 33 | 14 | 14 |
| Langtur | 4 | 6 | 4 | 14 | 19 | **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):
| Gap | 1 d | 2 d | 3 d | 4 d | 5 d | 6 d | 7 d |
|---|---|---|---|---|---|---|---|
| Antall | **8** | **106** | 44 | 23 | 71 | 23 | 32 |
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.
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) | 1 | 2 | 4 (ren 3-1) | 5–6 | 10+ |
|---|---|---|---|---|---|
| Antall | 20 | 3 | **3** | 9 | 11 |
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å.
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.
ΔCTL over +3 uker + kvalitetsskår, bøttet på ukas kvalitetsantall:
| Q/uke | n uker | median km | median ΔCTL(+3u) | median kval-skår |
|---|---|---|---|---|
| 0 | 55 | 49 | +0,5 | — |
| 1 | 96 | 69 | **+2,4** | 7,05 |
| 2 | 95 | 80 | +1,8 | 7,95 |
| 3 | 16 | 86 | +1,2 | 8,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.
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).
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.
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.
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).
| Populasjon | Kodede øktdager i −7..−1 | NEG_U/SICK | Rate |
|---|---|---|---|
| Før **infeksjon**-onsets (n=2 perioder, typet) | 5 | 0 | **0 %** |
| Før **stress**-onsets (n=4) | 12 | 1 | 8 % |
| Før **uavklart**-onsets (n=25) | 75 | 6 | 8 % |
| **Alle onset-vinduer** | **92** | **7** | **7,6 %** |
| Kontrolldager (utenfor ±14 d onset, −7..0 race, utenfor perioder) | 154 | 24 | **15,6 %** |
| Kontroll era-matchet (kun 2025–26) | 47 | 7 | 15 % |
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.
Konklusjon spørsmål 1: ordene bekrefter ikke engang tallene — de er ortogonale, og ingen av delene gir språket lead-verdi.
T5 — sprekk vs rene (LOO T-14-residual som dagsfasit, F5/F6-kategorier som moduslabel):
| Utfallsklasse | Kodede pre-dager | NEG | POS |
|---|---|---|---|
| Sprekker (resid ≤ −3 %: THM-19, NY-23, Nidaros-25, London-25) | 8 | **0** | 2 |
| Midtsjikt (−3..0) | 22 | 1 | 4 |
| 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.
De 14 dagene med eksplisitt sykdomsspråk (SICK + MIX-A4) mot detektor-fasiten:
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.
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.
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.
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.
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.
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.
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.
Berlin HM 29.3 (PB). Merkelappene i `illness_classification.json` setter onset 30.3 og 06.4. Den faktiske fysiologien forteller en annen historie:
| Dato | RHR | HRV | natte-HR | resp | stress | BB | Lesning |
|---|---|---|---|---|---|---|---|
| 22.–28.3 (frisk pre) | 39 | 64–80 | 40–45 | 11–12 | 20–24 | 87–100 | normal |
| **30.3** (merkelapp) | 42 | 55 | 48 | 13 | – | – | **1-dags post-race-krater** |
| 31.3–05.4 | 35–38 | 71–89 | 39–42 | 11 | 15–20 | 39–66 | **full restitusjon** |
| 06.4 (merkelapp) | 37 | 70 | 41 | 12 | 18 | 59 | rolig — ingenting |
| 07.–10.4 | 36–41 | 74–77 | 42–43 | 11–12 | 20–21 | 52–65 | mild uro |
| **14.–20.4** | **42–45** | **38–51** | **48–56** | 12–14 | 26–36 | 25–47 | **infeksjon, full styrke** |
| 21.–26.4 | 43–45 | 52–64 | 46–50 | 11–12 | 27–30 | 57–79 | langsom 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.
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.
De typede stress-periodene og ferievinduene, samme metode:
| Vindu (fasit) | RHR-Δ md | HRV-% md | natte-HR-Δ md | peak enkeltdag | Maks 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 % | +2 | HRV−38 % / ohr+11 (24.1) | 6 døgn (grunt) |
| Ferieoppstart 17.–18.6 | +2 | −3 % | +1 | RHR+2,5 | 0 |
| Bilferie 25.–29.6 (varme/alk.) | +2 | −7 % | +1 | RHR+5 / ohr+6 (29.6) | 1 |
| Ferie 3.7 | +3,5 | −16 % | +6 | RHR+3,5 / ohr+6 | 1 |
| Hjemme varme 9.–11.7 | 0 | −9 % | +3 | HRV−22 % / ohr+6 (9.7) | 1 |
| Frisk kontroll (feb, mai/juni, siste 10 d) | −1 til −2 | +3 til +19 % | −2 til 0 | — | 0 |
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.
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:
| Vindu | natte-HR-areal | dager HRV ≤ −20 % | lengste dype run |
|---|---|---|---|
| **April-infeksjon** | **80** | **10** | **8** |
| Januar (mulig tidlig-infeksjon / vinterlast) | 42 | 5 | 3 |
| Post-Berlin stress-hale (2.–5.5) | 12 | 3 | 2 |
| Bilferie (varme/alkohol) | 16 | 0 | 1 |
| Hjemme varme 9.7 | 6 | 1 | 1 |
| Ferieoppstart / frisk kontroll | 0 | 0 | 0 |
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.
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:
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).
Dette er den viktigste kritikken av det bestående. Backtestens tall, sporet til kilden:
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.
`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.
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):
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.
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:
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.
ATL-konteksten rundt de tre klassene:
| Hendelse | ATL-persentil | TSB | Klasse |
|---|---|---|---|
| April-infeksjon (14.4) | **p3** | +23 | reduser |
| Januar-creep (10.1) | p47 | +10 | forventet last / mulig mild inf. |
| Vinter-topp (15.3) | p98 | −9 | forventet last (trente gjennom) |
| Ferieoppstart (17.6) | p98 | – | eksogen (varme/reise) |
| Bilferie (27.6) | p56 | – | eksogen |
| Hjemme varme (9.7) | p72 | – | eksogen |
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.
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.
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.
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.
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.
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.
To ting kan wellness med dagens data ikke gjøre pålitelig, og det bør sies rett ut:
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.
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.
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.
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. `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.
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:
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.
`predict_illness.py` (kjøres i sync_daily steg 13):
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.
| Konstant | Verdi | Betydning / begrunnelse |
|---|---|---|
| `CARDINAL_MARKERS` | rhr_creep, hrv_drop, overnight_hr_creep | Last-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` | 2 | REDUSER = dyp i dag + ≥2 av siste 3 d dype (vedvarenhet). |
| `HEAT_FORKLAR_C` | 20.0 | Varmedag ≥ 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 d | Speiler detect_illness (+5→2,5p). |
```
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).
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.
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`.
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).
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).
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.
| Episode | Konf. | Ditt sitat | HRV | natte-HR | Det.? |
|---|---|---|---|---|---|
| **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 % | +4 | blipp 16.–17.2 |
| **2026-04-06→20** | HØY | «Nå må sykdom og drit gi seg snart…» | −46 % | +13 | **ja** (infeksjon, pk 11,5) |
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.
`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.
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.
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.
| Klasse | n | Temp-just EF (median) | vs RACE_SUPER, HR+æra+temp-matchet |
|---|---|---|---|
| TRAINER | 34 | 2,127 | **+10,7 s/km tregere** (median, n=20 matcher) |
| PLATED_TEMPO | 238 | 2,296 | +7,3 s/km tregere (n=214) |
| RACE_SUPER | 721 | 2,398 | — (referanse) |
Innen-æra (median EF, n) — den ærlige kontrollen:
| År | TRAINER | PLATED_TEMPO | RACE_SUPER | Sko-gap super−trener |
|---|---|---|---|---|
| 2021 | 2,127 (26) | 2,212 (23) | 2,263 (18) | **+0,136 (~6 %)** |
| 2022 | 2,010 (4) | 2,246 (52) | 2,268 (57) | +0,26 (tynn trener-n) |
| 2023 | 2,177 (4) | 2,285 (57) | 2,323 (119) | +0,146 |
| 2024 | — | 2,220 (30) | 2,404 (212) | (ingen trener) |
| 2025 | — | 2,452 (45) | 2,474 (210) | — |
| 2026 | — | 2,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.
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.
Testet på de fire høy-km Alphafly-parene (temp-just EF vs `gear_km_at_run`, HR 120–150):
| Par | n | km-spenn | EF tidlig | EF sein | Δ | Slope |
|---|---|---|---|---|---|---|
| AlphaFly Turquoise #2 | 192 | 0–2 296 | 2,347 | 2,427 | **+0,080** | +0,007/100km |
| Alphafly Yellow #3 | 102 | 0–1 524 | 2,407 | 2,483 | +0,076 | +0,006/100km |
| ALPHAFLY NEXT% | 77 | 0–1 328 | 2,281 | 2,311 | +0,030 | −0,002/100km |
| Alphafly Purple #4 | 80 | 0–1 306 | 2,432 | 2,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.
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:
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.
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øp | Anbefalt | Backup | Begrunnelse |
|---|---|---|---|
| **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øp | Vaporfly 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 reserve | fersk PUMA Fast-R (NY) etter Kbh | Maraton = 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.
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.
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.
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ør | Ditt mål | 20.04.2026 | Nylig bane | Mot mål |
|---|---|---|---|---|
| Ferritin | optimal 100, aspir. 150 | 61 | 104 (jan-24) → 53 → 71 → 61 | Under optimal siden midt-2024 |
| Hb | optimal 14,5 | 13,5 | 12,8–13,5, MCV 91–99 | Ved kronisk-lav (13,5), normocytisk |
| Vit D | optimal 75 | (49, apr-25) | aldri > 60, alltid < 75 | Under mål hver måling |
| B12 | bekymring < 250 | 235 (nov-24) | 424→266→266→235 fallende | Under din 250-grense, synkende |
| SHBG / fri-T-indeks | SHBG-terskel 50 | 68 / 3,2 | 66–71 / 2,7–3,8 | SHBG 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).
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.
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.2026 | Verdi | Ref |
|---|---|---|
| Nøytrofile | 1,9 | 1,5–7,3 |
| Lymfocytter | 3,4 | 1,1–3,3 (over) |
| N:L-ratio | 0,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.
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.
| Markør | Kadens | Flagg ved | Hvorfor |
|---|---|---|---|
| Ferritin + jernstatus | 21.07, så hver 3.–4. mnd i høyvolum | fortsatt fall, eller metning < 20 % | §2 — trend ned under toppvolum |
| Hb + MCV + retikulocytter | med jernstatus | Hb < 13,0 med fallende MCV | §2 — åpent pseudoanemi-spørsmål |
| Vit D | 2×/år, én sensommer én senvinter | under 50 i bunn-målingen | §2 — sesongbunn treffer vinterblokka |
| B12 (+ aktivt) | halvårlig | total < 250 fallende, aktivt lavt | §2 — synkende |
| Leukocytter m/diff | ad hoc ved mistenkt infeksjon | N:L < 1 med lymfocytose | §3 — CRP er blind for deg |
| SHBG / fri-T-indeks | halvårlig | fri-T-indeks under 2,3 | §2 — last-markør |
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.
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.
| Markør | Før | 21.07 | Ditt mål | Dom |
|---|---|---|---|---|
| Vit D (25-OH) | 49 (apr-25) | **83** | 75 | Over mål — første gang > 60 i hele serien |
| Ferritin | 61 → | 65 | 100 | Flatt, fortsatt under mål |
| Transferrinmetning | 20 (jun-25) | **26** | > 25 | I mål |
| Jern | 13,9 (jun-25) | **19,1** | 9–34 | Opp |
| sTfR | 1,10 | 1,11 | 0,76–1,76 | Stabil |
| Hb | 13,5 → | 13,2 | 14,5 | Ned 0,3 |
| Retikulocytter | — | 0,03 | 0,03–0,11 | Lav-normal (§2) |
| Aktivt-B12 | 105,6 | **120,6** | > 60 | Opp |
| Folat | 16,9 | 20,8 | > 5,7 | Opp |
| SHBG / fri-T / total-T | 68 / 3,2 / 21 | 73 / 3,2 / 24 | — | Uendret 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å.
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.
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øytrofile | Lymfocytter | N:L | |
|---|---|---|---|
| 20.04.2026 (i infeksjon) | 1,9 | 3,4 | 0,56 |
| 21.07.2026 (frisk) | 1,5 | 3,3 | 0,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.
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.
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.
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ør | Neste | Flagg ved |
|---|---|---|
| Ferritin + metning | ~3 mnd | ferritin faller igjen, eller metning < 20 % |
| Vit D | senvinter | under 50 i bunn |
| Hb + MCV | med jernstatus | Hb < 13,0 **med** fallende MCV (ellers dilusjonelt) |
| SHBG / fri-T-indeks | halvårlig | fri-T-indeks under 2,3 |
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).
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.
| Kilde | Det som hentes inn |
|---|---|
| `Running_Brief_Blokkplan-Amsterdam_v2.md` | Basis: faser, volumtak 108–110, langtur-trapp, immunvakt, dobbel terskel, styrkeregler |
| Tverrmaraton-syntesen §5–6 | P1–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.
| # | Endring | Kilde | Hvorfor |
|---|---|---|---|
| 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/§7 | Taper 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/S3 | HM-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/A5 | Berlin-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/§6 | Eneste 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/§6 | All 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/§6 | Sub-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/§3 | 30k+ 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–7 | Italia 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/§3 | RHR 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).
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.
| Uke | Datoer | km | Innhold + regler |
|---|---|---|---|
| 28 | 6.–12.7 | 100 | Italia, 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. |
| 29 | 13.–19.7 | 100 | Hjemreise 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. |
| 30 | 20.–26.7 | 100 | Re-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. |
| 31 | 27.7–2.8 | 105 | Byggetopp: 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). |
| 32 | 3.–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). |
| 33 | 10.–16.8 | 74 | **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). |
| 34 | 17.–23.8 | 104 | HM-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). |
| 35 | 24.–30.8 | 108 | **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). |
| 36 | 31.8–6.9 | 100 | Down-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). |
| 37 | 7.–13.9 | 72 | Kbh-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. |
| 38 | 14.–20.9 | 60 | **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). |
| 39 | 21.–27.9 | 75 | **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. |
| 40 | 28.9–4.10 | 100 | Storuke: 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). |
| 41 | 5.–11.10 | 90 | MP-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. |
| 42 | 12.–18.10 | 74 | Taper: 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). |
| KPI | v3-krav | Status i planen |
|---|---|---|
| P1 volum | ≥85 km/u snitt i bygget | Plan-snitt u30–41 ≈ 90 ✓ (peak 108, bevisst under Frankfurt-dosen — P8-trade) |
| P2 CTL | 106–115 peak | Følges live |
| P3 langturer 30k+ | ≥5 | Eksakt 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 alene | Plan i dag ~75–80 eksplisitt → §7.3 |
| P6 kvalitets-km | 21–25 km/u, terskel-forankret | Dragsnitt-mål sein blokk 3:43–3:45 (K6; FABLE-9 skjerper) |
| P7 øktscore | ≥7,5 snitt | Fø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 taper | TSB +30…+40 m/ CTL-tap ≤8 · HRV-CV fallende | u38 (HM-variant +20…+25) og u42 |
| P10 tune-ups | Energimila 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.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).
| Uka | INGEN taper (E1): normal u32, siste fulle terskel fre 7.8, lett dag-før m/ primer |
|---|---|
| Kjøreplan | Km 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-eve | Søvn ≥8 t · HRV-flagg alene = info (ikke måljustering) · reelle flagg: sykdom <14 d, vind |
| Verktøy | A9-generatoren mates med 36:50-mål + RE1/RE2-låsene; pulsbelte sjekkes i kulde/regn |
| Etter | Immunvakt 72 t (gulv) · kvalitet-retur dag 4–5 · HRV-dip −17 %-klassen D+1 er normalt |
| Gapet | 3,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 |
|---|---|
| Uka | Ekte taper (E2, Berlin-malen): TSB-pre +20…+25, ATL/CTL ~5:1, søvn ≥8 t |
| Kjøreplan | Husstilen: å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) |
| Etter | Race = 4–5-dagers enhet: 72 t immunvakt er gulvet, u39 er planlagt deretter — krateret er godartet |
| Fase | Km | Pace |
|---|---|---|
| Åpning | 1 | 4:10–4:11 (HR <155 — trengsel er gratis) |
| Nedtrapping | 2–3 | 4:06 → 4:04 |
| Innfasing | 4–8 | 4:02 — **gate km 5** (§4.5); aldri raskere enn 3:57 før km 8 |
| Lås | 9–24 | 4:01–4:02 i tog, korridor ±4 s; kadens-referanse noteres ~km 10 — **gate km 25** |
| Halvveis-lull | 24–26 | gel + fokuspunkt (mini-dippen i 6/11 løp) |
| GI-protokoll | 27–30 | ved mageknip: aksepter +10–15 s/km i maks 3 km, **ikke jag tilbake** (hendelse ≠ brudd; Berlin-kvitteringen: full recovery, kost <80 s) |
| Vindsonen | 30–37 | 4: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 frislipp | 38–40 | 3:58–3:59 — KUN grønn km-35-gate (reserven er reell: 9/11 løp spurter) |
| Mål | 41–42,2 | 3: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.
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.
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.
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.
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. `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).
| Uke | Dato | Dag | Type | Økt | km |
|---|---|---|---|---|---|
| 28 | 2026-07-06 | man | easy | Easy 11 km | 11 |
| 28 | 2026-07-07 | tir | easy+styrke | Easy 12 km + Rodal bodyweight (4 øv.) | 12 |
| 28 | 2026-07-08 | ons | kvalitet | Mølle/ute-terskel: 5×2000 @ 3:53–3:56 (90s) | 14 |
| 28 | 2026-07-09 | tor | easy+styrke | Easy 12 km + Rodal kjerne | 12 |
| 28 | 2026-07-10 | fre | easy | Easy 11 km | 11 |
| 28 | 2026-07-11 | lør | kvalitet-lett | 45/15 × 22 utendørs tidlig ELLER mølle: 10×1000 @ 3:52 (60 | 12 |
| 28 | 2026-07-12 | søn | langtur | Langtur 28 km rolig (tidlig morgen), fylling 80 g/t | 28 |
| **28** | **SUM** | **100** | |||
| 29 | 2026-07-13 | man | easy | Easy 11 km | 11 |
| 29 | 2026-07-14 | tir | easy+styrke | Easy 12 km + Rodal bodyweight (4 øv.) | 12 |
| 29 | 2026-07-15 | ons | kvalitet | 45/15 × 22 (kontrollert I3) | 14 |
| 29 | 2026-07-16 | tor | easy+styrke | Easy 12 km + Rodal kjerne | 12 |
| 29 | 2026-07-17 | fre | kvalitet-lett | Tempo: 3×10 min @ 3:55–4:00 (vei/mølle) — reisevennlig (fr | 12 |
| 29 | 2026-07-18 | lør | langtur | Langtur 30 km rolig (tidlig morgen) | 30 |
| 29 | 2026-07-19 | søn | easy | Easy 9 km | 9 |
| **29** | **SUM** | **100** | |||
| 30 | 2026-07-20 | man | kvalitet | MandagsTOSK re-intro: 8×1000 @ 3:55 (60s stå), kontrollert | 13 |
| 30 | 2026-07-21 | tir | easy+styrke | Easy 11 km + Styrke A re-intro 60 kg (4 øvelser) | 11 |
| 30 | 2026-07-22 | ons | easy | Easy 16 km | 16 |
| 30 | 2026-07-23 | tor | easy+styrke | Easy 10 km + Rodal 2 runder | 10 |
| 30 | 2026-07-24 | fre | easy | Easy 11 km | 11 |
| 30 | 2026-07-25 | lør | langtur | Langtur 28 km rolig L2 — fylling 80 g/t | 28 |
| 30 | 2026-07-26 | søn | easy | Easy 11 km | 11 |
| **30** | **SUM** | **100** | |||
| 31 | 2026-07-27 | man | kvalitet | MandagsTOSK: 5×2000 @ 3:52–3:55 (90s stå) | 14 |
| 31 | 2026-07-28 | tir | easy+styrke | Easy 12 km + Styrke A 65 kg | 12 |
| 31 | 2026-07-29 | ons | kvalitet | DOBBEL TERSKEL: AM 6 km @ 4:10–4:15 (LT1) · PM OnsdagsTOSK | 19 |
| 31 | 2026-07-30 | tor | easy+styrke | Easy 10 km + Rodal 2 | 10 |
| 31 | 2026-07-31 | fre | easy | Easy 9 km | 9 |
| 31 | 2026-08-01 | lør | langtur | Langtur 30 km L3 progressiv: siste 6 km 4:15→4:00 | 30 |
| 31 | 2026-08-02 | søn | easy | Easy 11 km | 11 |
| **31** | **SUM** | **105** | |||
| 32 | 2026-08-03 | man | kvalitet | MandagsTOSK 10k-spiss: 6×1000 @ 3:45–3:48 (60s stå) | 12 |
| 32 | 2026-08-04 | tir | easy+styrke | Easy 10 km + kjerne lett (ingen tunge løft) | 10 |
| 32 | 2026-08-05 | ons | kvalitet-lett | 4×400 @ 3:25 + 4×100 strides (fart uten syre) | 9 |
| 32 | 2026-08-06 | tor | easy | Easy 8 km | 8 |
| 32 | 2026-08-07 | fre | easy | Easy 6 km + 4×100 strides | 6 |
| 32 | 2026-08-08 | lør | langtur | Langtur 18 km rolig | 18 |
| 32 | 2026-08-09 | søn | easy | Easy 8 km | 8 |
| **32** | **SUM** | **71** | |||
| 33 | 2026-08-10 | man | easy | Easy 7 km + 4×100 strides | 7 |
| 33 | 2026-08-11 | tir | kvalitet-lett | Primer: 3×1000 @ 3:50 (full pause) + strides | 8 |
| 33 | 2026-08-12 | ons | race | 🏁 ENERGIMILA 10 km — mål sub-37:00 (3:42/km). Jevn start ( | 14 |
| 33 | 2026-08-13 | tor | easy | Restitusjon: easy 6 km eller hvile (immunvakt) | 6 |
| 33 | 2026-08-14 | fre | easy | Easy 8 km (immunvakt) | 8 |
| 33 | 2026-08-15 | lør | langtur | Langtur 22 km rolig (immunvakt — kun I1) | 22 |
| 33 | 2026-08-16 | søn | easy | Easy 9 km | 9 |
| **33** | **SUM** | **74** | |||
| 34 | 2026-08-17 | man | kvalitet | MandagsTOSK: 4×2000 @ 3:50 (90s stå) — HMP-terskel | 14 |
| 34 | 2026-08-18 | tir | easy+styrke | Easy 12 km + Styrke A 70 kg | 12 |
| 34 | 2026-08-19 | ons | kvalitet | DOBBEL: AM 6 km @ 4:10 (LT1) · PM 10×1000 @ 3:50 (60s stå) | 19 |
| 34 | 2026-08-20 | tor | easy+styrke | Easy 11 km + Rodal 2 | 11 |
| 34 | 2026-08-21 | fre | easy | Easy 8 km | 8 |
| 34 | 2026-08-22 | lør | langtur-kvalitet | Langtur 32 km L4: 3×5 km @ MP 4:00–4:05 i km 15–30 — race- | 32 |
| 34 | 2026-08-23 | søn | easy | Easy 8 km eller hvile | 8 |
| **34** | **SUM** | **104** | |||
| 35 | 2026-08-24 | man | kvalitet | MandagsTOSK: 3×3000 @ 3:50–3:52 (2 min stå) — HM-spesifikk | 15 |
| 35 | 2026-08-25 | tir | easy+styrke | Easy 12 km + Styrke A 70 kg | 12 |
| 35 | 2026-08-26 | ons | kvalitet | DOBBEL: AM 6 km @ 4:10 · PM 45/15 × 25 (kontrollert I3/I4) | 19 |
| 35 | 2026-08-27 | tor | easy+styrke | Easy 12 km + Rodal 1 | 12 |
| 35 | 2026-08-28 | fre | easy | Easy 8 km | 8 |
| 35 | 2026-08-29 | lør | langtur-kvalitet | Langtur 34 km L4: 12 km sammenhengende @ MP 4:00–4:03 (km | 34 |
| 35 | 2026-08-30 | søn | easy | Easy 8 km | 8 |
| **35** | **SUM** | **108** | |||
| 36 | 2026-08-31 | man | kvalitet | MandagsTOSK: 5×2000 @ 3:48–3:50 (90s stå) | 14 |
| 36 | 2026-09-01 | tir | easy+styrke | Easy 10 km + Styrke A lett (2 sett) | 10 |
| 36 | 2026-09-02 | ons | easy | Easy 16 km | 16 |
| 36 | 2026-09-03 | tor | easy+styrke | Easy 8 km + Rodal kjerne | 8 |
| 36 | 2026-09-04 | fre | easy | Easy 11 km | 11 |
| 36 | 2026-09-05 | lør | langtur-kvalitet | Langtur 28 km: siste 6 km @ HMP 3:50 (L3/L4) | 28 |
| 36 | 2026-09-06 | søn | easy | Easy 13 km | 13 |
| **36** | **SUM** | **100** | |||
| 37 | 2026-09-07 | man | kvalitet | MandagsTOSK: 5×1000 @ 3:45 (60s stå) — skarp og kort | 12 |
| 37 | 2026-09-08 | tir | easy+styrke | Easy 10 km + kjerne lett | 10 |
| 37 | 2026-09-09 | ons | easy | Easy 8 km | 8 |
| 37 | 2026-09-10 | tor | easy+styrke | Easy 8 km + Rodal lett (siste før HM) | 8 |
| 37 | 2026-09-11 | fre | easy | Easy 6 km | 6 |
| 37 | 2026-09-12 | lør | langtur-kvalitet | Langtur 20 km m/ 5 km @ HMP 3:47–3:50 (generalprøve: races | 20 |
| 37 | 2026-09-13 | søn | easy | Easy 8 km | 8 |
| **37** | **SUM** | **72** | |||
| 38 | 2026-09-14 | man | easy | Easy 8 km + 4×100 strides | 8 |
| 38 | 2026-09-15 | tir | kvalitet-lett | Primer: 4×1000 @ 3:50 (full pause) | 9 |
| 38 | 2026-09-16 | ons | easy | Easy 7 km | 7 |
| 38 | 2026-09-17 | tor | easy | Easy 6 km + 4×100 strides | 6 |
| 38 | 2026-09-18 | fre | hvile | Hvile (reise Kbh) eller 4 km løsning | 4 |
| 38 | 2026-09-19 | lør | easy | Easy 4 km + 3×100 strides (dagen før) | 4 |
| 38 | 2026-09-20 | søn | race | 🏁 KØBENHAVN HALVMARATON — mål sub-1:20:00 (3:47/km), start | 22 |
| **38** | **SUM** | **60** | |||
| 39 | 2026-09-21 | man | hvile | Hvile | 0 |
| 39 | 2026-09-22 | tir | easy | Easy 11 km | 11 |
| 39 | 2026-09-23 | ons | easy | Easy 13 km | 13 |
| 39 | 2026-09-24 | tor | easy+styrke | Easy 8 km + Rodal lett kjerne | 8 |
| 39 | 2026-09-25 | fre | easy | Easy 13 km | 13 |
| 39 | 2026-09-26 | lør | langtur | Langtur 22 km rolig L1 (kun I1 — restitusjonstur) | 22 |
| 39 | 2026-09-27 | søn | easy | Easy 8 km | 8 |
| **39** | **SUM** | **75** | |||
| 40 | 2026-09-28 | man | easy | Easy 12 km | 12 |
| 40 | 2026-09-29 | tir | kvalitet | TOSK (flyttet fra man): 5×2000 @ 3:55–3:58 — MP-terskel | 14 |
| 40 | 2026-09-30 | ons | easy+styrke | Easy 10 km + Rodal kjerne | 10 |
| 40 | 2026-10-01 | tor | easy | Easy 10 km | 10 |
| 40 | 2026-10-02 | fre | easy | Easy 8 km | 8 |
| 40 | 2026-10-03 | lør | langtur-kvalitet | LANGTUR 36 km L4: 3×6 km @ MP 4:00–4:03 (km 14–34) — gener | 36 |
| 40 | 2026-10-04 | søn | easy | Easy 10 km | 10 |
| **40** | **SUM** | **100** | |||
| 41 | 2026-10-05 | man | kvalitet | MandagsTOSK: 4×2000 @ 3:58–4:00 (MP-rytme, 90s stå) | 13 |
| 41 | 2026-10-06 | tir | easy+styrke | Easy 10 km + Styrke A lett 55 kg, 2 sett (SISTE) | 10 |
| 41 | 2026-10-07 | ons | kvalitet-lett | OnsdagsTOSK: 6×1000 @ 3:52 (60s stå) | 11 |
| 41 | 2026-10-08 | tor | easy+styrke | Easy 10 km + Rodal lett | 10 |
| 41 | 2026-10-09 | fre | easy | Easy 9 km | 9 |
| 41 | 2026-10-10 | lør | langtur-kvalitet | Langtur 26 km m/ 12 km @ MP 4:01 (T-8) — siste MP-generalp | 26 |
| 41 | 2026-10-11 | søn | easy | Easy 11 km | 11 |
| **41** | **SUM** | **90** | |||
| 42 | 2026-10-12 | man | easy | Easy 6 km | 6 |
| 42 | 2026-10-13 | tir | kvalitet-lett | MP-primer: 4×1000 @ 4:00 (full pause) | 9 |
| 42 | 2026-10-14 | ons | easy | Easy 7 km + 4×100 strides | 7 |
| 42 | 2026-10-15 | tor | easy | Easy 5 km (reise AMS) | 5 |
| 42 | 2026-10-16 | fre | hvile | Hvile | 0 |
| 42 | 2026-10-17 | lør | easy | Easy 4 km + 3×100 strides (dagen før) | 4 |
| 42 | 2026-10-18 | søn | race | 🏁 AMSTERDAM MARATON — mål sub-2:50:00 (4:01/km). Jevnt: 4: | 43 |
| **42** | **SUM** | **74** |
| # | Forslag | Uke | Dagens json | v3-anbefaling | Kilde |
|---|---|---|---|---|---|
| D1 | **Skrot mini-taperen før Energimila** | 32 | 71 km m/ nedtrapping | ~95 km normal uke, siste fulle terskel fre 7.8, lett kun dag-før | E1 (F5 K3: 10k-PB-ene kom på full uke) |
| D2 | MP-km-utvidelse på L4-turene | 34/35 | 3×5 @ MP / 12 km MP | 3×6 / 14–15 km sammenhengende | E6/§7.3 (P5-mål 120–150, gulv 80) |
| D3 | u28-reiseavvik (Italia→Tyskland→Norge) | 28 | kvalitet ons + lør-lett + langtur søn | FAKTISK kjørt: kvalitet tir (4×2000 ✓); forslag: kvalitet #2 fre (10×1000), langtur lør 26–28 m/ fylling, søn reise | Denne uka — spikres bakover |
| D4 | T2.5-utfallet → u30-aggressivitet | 30 | TOSK re-intro standard | RHR 36–37 vedvarende hjemme → tidlig FULL terskel i utladningsvinduet (17.–27.7) | §4.1 / F4a |
| D5 | Dragsnitt-progresjon mot K6-porten | 30–37 | drag-farter står per økt | 8-ukers I3-dragsnitt ≤3:47 innen ~1.9; skarpeste økter 3:43–3:45; ≥1 dobbel hver 3.–4. uke | F9 §3 |
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.
| # | Uke/økt | Innsigelsen | Alternativ | Konsekvens 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.
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ø.)
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):
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).
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:
| Mekanisme | Rolle 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.
`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.
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).
| Vindu | Definisjon | Effekt |
|---|---|---|
| **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-dagen | Ingen 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). |
| Dagstype | Flyttbar? | 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-uka | Alle 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` | Fritt | Byttes 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` | Fritt | Kan 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/M7 | Amendment 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).
| ID | Regel | Kilde/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.
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:
| ID | Regel |
|---|---|
| **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. |
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:
| ID | Regel | ||
|---|---|---|---|
| **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. |
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.
É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):
| op | Semantikk | Felter |
|---|---|---|
| `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).
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.
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.
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.
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.
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.
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.
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).
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.
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.
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).
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.
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.
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.
| # | Tema | Kilde | Netto | Prioritet |
|---|---|---|---|---|
| D1 | Søvnregel (allerede rettet — bekreft ordlyd) | G1 / F4b | Presisering | Lav (står) |
| D2 | Taper er distanse-asymmetrisk | F5 K3 / v3 E1–E2 | Ny regel | **Høy** (race-uker nå) |
| D3 | HRV-dagflagg er distanse-avhengig | F5 K5 | Skjerper §go/no-go | **Høy** |
| D4 | Absorpsjon i tre klasser + RHR-blindsone + post-race-krater godartet | F7 §3 | Erstatter løs belastningsregel | **Høy** |
| D5 | LT2-dosen tallfestet + K6-porten | F9 §3 | Skjerper intensitetsstyring | **Høy** (dose u29–37) |
| D6 | Varme som lovlig stimulus | F4a §7 | Ny sesong-regel | Middels (ferie/varme) |
| D7 | Race-uke-gates (E-serien) | v3 E1/E2/E3/E5 | Oppdaterer race-planregler | **Høy** |
| D8 | Anti-regel: subjektiv tyngde ≠ beslutningsgrunnlag | F16 | Ny anti-regel | Middels |
| D9 | Aldri intensitet på bekostning av rolig-volum | F19 | Skjerper treningsfilosofi | **Høy** |
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.
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).
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.
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).
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).
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).
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.
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.
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+.
Ikke funn, men O9-oppdraget ba om innstramming. Kandidater (Carl avgjør):
Netto mål: en frisk sesjon skal kunne lese COACH på < 10 min og ha alle reglene, med dybden ett klikk unna.
É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.
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.
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:
| Uke | v1 påsto | Faktisk (dagsplanen) |
|---|---|---|
| u32 | 26–28 rolig | **30 km HELT rolig** (trapp 6/10) |
| u33 | 22 rolig | **30 km HELT rolig** (D+4 etter Energimila) |
| u36 | 30 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:
| Blokk | Syntesen | Kun L4-langtur | L4 + 3/1-økter | **Alle langturer m/ kvalitet** |
|---|---|---|---|---|
| Kbh 24 | 125 | 99 | 99 | **125** ✓ |
| Berlin 24 | 159 | 151 | 151 | **159** ✓ |
| Frankfurt 25 | 178 | 141 | 162 | **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?
| Økt | Distanse | Ført som kval | Median av de 30 raskeste km |
|---|---|---|---|
| 27.09.25 (Frankfurt-blokka) | 35,4 km | **30 km** | **4:23** |
| 05.10.25 (Frankfurt-blokka) | 40,7 km | 28 km | 4: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.
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.
| Uke | Langtur | Kval-km |
|---|---|---|
| u27–u31 | levert: 5 × 30k+ | **8,8** |
| u32 | 30 km helt rolig | 0 |
| u33 | 30 km helt rolig (D+4) | 0 |
| u34 | 34 L4: 3×6 @ MP | 18 |
| u35 | 34 L4: 14 km samm. @ MP | 14 |
| u36 | fartsholder 24 km | 0 |
| u37 | 20 km m/ 5 @ HMP | 0 |
| u39 | 22 rolig (immunvakt) | 0 |
| u40 | 36 L4: 3×7 @ MP | 21 |
| u41 | 18 km rolig | 0 |
| **~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.
| Endring | Kval-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.
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.
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.
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.
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.
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.
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:
| Blokk | MP-km | Utfall |
|---|---|---|
| Frankfurt 25 | **178** | 2:53:06 — PR |
| Berlin 24 | 159 | 2:59:34 |
| London 25 | 131 | 3:19:12 (varme) |
| Kbh 24 | 125 | 2:59:11 |
| NY 23 | 171 | 3: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.
Levert så langt (fra 28.06, 5 uker):
| Dato | Distanse | Kval-km | Klasse |
|---|---|---|---|
| 05.07 | 33,5 | 0 | L1 rolig |
| 11.07 | 33,6 | 0 | L1 rolig |
| 18.07 | 34,1 | **6,0** | L3 tempo-finish |
| 25.07 | 32,2 | 0 | L1 rolig |
| 01.08 | 34,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:
| Uke | Langtur | MP-km på langtur |
|---|---|---|
| u32 | 26–28 rolig | 0 |
| u33 | 22 rolig (Energimila-uke) | 0 |
| u34 | **34 L4: 3×6 @ MP** | **18** |
| u35 | **34 L4: 14 km samm. @ MP** | **14** |
| u36 | 30 m/ siste 6–8 @ HMP 3:50 | 0 (HMP) |
| u37 | 20 m/ 5 @ 3:47–3:50 | 0 (ikke langtur, HMP) |
| u38 | — Kbh HM | 0 |
| u39 | 22 rolig L1 (immunvakt) | 0 |
| u40 | **36 L4: 3×7 @ MP** | **21** |
| u41 | 18 km rolig | 0 |
| u42 | — Amsterdam | 0 |
| **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.
Planen sier det selv, og den har rett: prisen for to A-mål fire uker fra hverandre er tre uker maratonspesifikk trening.
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.
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+
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
3. København HM 20.9
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.
Realistiske steder å hente ekte MP-km, med kostnad:
| Grep | MP-km | Kostnad |
|---|---|---|
| **u32 langtur 26–28: legg inn 2×4 km @ MP** | +8 | Ligger 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–8 | Mister 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** | +6 | Billigst 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** | +7 | u40 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.
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.
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.
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.
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å.
PB-status ved årsslutt (offisielle tider; Nidaros-22 (9,6 km målt) utelatt som kort-målt):
| År | 10k | HM | Maraton | km/år | km/u | Peak CTL | LT2-anker (æra) | Definerende |
|---|---|---|---|---|---|---|---|---|
| 2019 | — | 1:44:42 | — | 758 | 15 | 69 | — (pre-soner) | Første HM (sep). Grunnmuren. |
| 2020 | 42:07 | 1:35:36 | — | 2 136 | 41 | 77 | 4:25 | Covid-solo-løp; −9 min på HM på ett år. |
| 2021 | 42:07 | 1:33:45 | 3:30:07 | 2 529 | 49 | 92 | 4:15 | Maraton-debut, alt brukt (HR 188/190). |
| 2022 | 42:07 | 1:29:16 | 3:14:23 | 2 616 | 50 | 96 | 4:05 | Tre maraton på ett år; første TOSK-økt (nov). |
| 2023 | 39:26 | 1:27:49 | 3:09:02 | 3 178 | 61 | 104 | ≈4:00 (proxy-brudd fra 4:20) | Volumtrapp; NY −3,2 % — dose uten utførelse; Paris 11 sykedager. |
| 2024 | 38:38 | (ikke løpt) | **2:56:37** | 4 170 | 80 | **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 357 | 84 | 106 | 3:44 in-session (feb) | London-kollaps + Frankfurt-PB (negativ split) + 7 sykedager. |
| 2026 (per 7.7) | — | **1:21:19** | — | 2 095 | ~77 | 95 | 3: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.
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 på 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 på 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.
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).
| Platå | Periode | Nivå som stod | Det som brøt det |
|---|---|---|---|
| Volum #1 | 2021–22 (49–50 km/u) | M ~3:14–3:20, høy varians | Volumtrappa 2023 (+21 %) |
| Utførelse | 2023 (CTL 104, dose OK) | NY −3,2 % tross dose | TOSK-integrasjon + langtur-disiplin 2024 |
| HM | sep 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-steg | 2024→25: −2:34, −3:31 (mot −9:51 i 2024) | Stegene krymper mot Riegel-modenhet | Effektivitet (M3) — ikke mer dose |
| Volum #2 (taket) | 2025 (98 km/u forsøkt) | Sykdom, ikke fart | Ikke brutt — **akseptert** som tak (85–95) |
| LT2-proxy 2026 | Q1–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.
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.
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):
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.
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.
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. 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)
| # | Beslutning | Kilde |
|---|---|---|
| C1 | **Re-typing-køen:** 2025-10-27 → infection (B) + 6 øvrige forslag (C) — bekreft, så oppdateres illness_classification | F15 §3 |
| C3 | **Plan-dialogen 08.07** (Opus) — dossieret er grunnlaget; race-uke-hygiene (søvn/fylling) tas inn i race-ukene | Dossier |
| 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 rollefordelingen | F22 |
| 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 |
⏳ 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.
| Hva | Før vinduet | Nå |
|---|---|---|
| Modell-LOO (alle/T-14) | 1,97 / 1,59 % | **1,53 / 1,27 %** |
| Race-dashboards | 29/33 | **33/33** |
| Immunvakt-doktrine | HRV-reaktiv, 72 t | **kalenderstyrt, D+10, IV1–IV5** |
| Subjektiv kanal | uutforsket 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-regler | søvn<78-regel (feil) | **G1 rettet; O9-revisjon spec-et** |
| Planapparatet | fragmentert (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)** |
| Langsiktshorisont | udefinert | **2:45-motor målsatt · 2027-former A/B/C · Praha/Genève fastpunkter** |
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.
> 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.
| Endring | Hva ble gjort | Hva 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 %).
> 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)
> 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):
| # | Beslutning | Når |
|---|---|---|
| C1 | Re-typing: 2025-10-27 → infection (+ 6 forslag) | Når du får bekreftet |
| C3 | Plan-dialogen 08.07 (Opus) — dossieret er grunnlaget; race-uke-hygiene inn i race-ukene | I morgen |
| C4 | Race-portefølje: bekreft Praha/Genève-rollene | — |
| C5 | Biomarkør-retest **21.07** = respons-sjekk jern/D3/omega-3 (fra 28.04) mot carl.json-mål | Om 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.
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.
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.
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.
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.
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.
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.»
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.
| Løype | Treffer | Hva den måler | Tiers | Ø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 tagger | pace_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,10 | som 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 / completion | som 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 tag | ingen 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.
Etter type (lagret skår):
| Type | n | Snitt | SD | Min | Maks | Andel ≥ 8 | Andel ≥ 9 |
|---|---|---|---|---|---|---|---|
| Intervall, pace-tagg (terskel/over_terskel/aerob) | 56 | 8,60 | 0,71 | 6,1 | 9,7 | 86 % | 34 % |
| Intervall, 45/15 | 6 | 6,80 | 0,55 | 5,9 | 7,4 | **0 %** | 0 % |
| Intervall, vo2max / r_pace_kort (1-min, 400 m) | 5 | 7,68 | 1,50 | 4,9 | 8,9 | 60 % | 0 % |
| Intervall uten tag | 1 | 6,0 | — | — | — | fallback | — |
| Løp (løpsskårer, `race_index`) | 2 | 8,4 | — | 7,9 | 8,9 | 50 % | 0 % |
| Langtur | 27 | 8,56 | 0,72 | 6,7 | 9,5 | 81 % | 30 % |
Etter draglengde — alle år i `quality.json` (skåret intervall, n = 433):
| Dragklasse | Alle år n | Snitt | Median | ≥ 8 | 2026 n | Snitt 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) | 21 | 6,95 | 6,5 | 38 % | 5 | 7,90 | 80 % |
| Mellom (2–5 min: 1000 m, 3 min) | 237 | 7,79 | 8,1 | 55 % | 28 | 8,62 | 89 % |
| Lang (> 5 min: 2000 m, 12 min) | 115 | 7,88 | 8,4 | 60 % | 28 | 8,50 | 79 % |
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).
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.
| # | Dato | Type | Økt | Tag (lagret) | Skår | Tier | Eks. | Ktx. | Skårer | v3 tørrkj. | v3-kort proto | Merknad |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 01-01 | intervall | 8 x 1000 — 8 x 1000 progresjon | terskel | **8,0** | Sterk | 7,5 | 9,3 | v2.4 | 8,7 | — | mølle; HR upålitelig; v3-flagg: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte |
| 2 | 01-05 | intervall | MandagsTOSK — 2 x (3-2-1 km) pyramide | terskel | **7,5** | Solid | 6,9 | 8,7 | v2.4 | 7,0 | — | |
| 3 | 01-07 | intervall | OnsdagsTOSK — 8 x 1000 @ 3:45 | over_terskel | **8,8** | Sterk | 9,0 | 8,2 | v2.4 | 8,7 | — | |
| 4 | 01-10 | langtur L2 | 20k i Ranheimshallen — rolig (20,0 km) | — | **6,7** | Under forventning | — | — | langtur | — | — | dis 7 · pac 8 · aer 7 · dec 5; Ranheimshallen; dec — % ved -5.8 °C |
| 5 | 01-12 | intervall | MandagsTOSK — 3 x 3000 @ 3:55 | terskel | **8,5** | Sterk | 8,6 | 8,3 | — | 9,1 | — | |
| 6 | 01-14 | intervall | OnsdagsTOSK — 5 x 1000 @ ~4:00 | terskel | **9,0** | Eksepsjonell | 9,3 | 8,1 | v2.4 | 8,7 | — | |
| 7 | 01-17 | langtur L1 | Afternoon Run — rolig (21,1 km) | — | **8,8** | Solid | — | — | langtur | — | — | dis 7 · pac 8 · aer 10 · dec 10 |
| 8 | 01-19 | intervall | MandagsTOSK — 4 x 2000 @ 3:55 | terskel | **8,9** | Sterk | 9,2 | 8,3 | — | 9,1 | — | |
| 9 | 01-21 | intervall | OnsdagsTOSK — 10 x 1000 (8 @ 3:55, 1 @ 3:45, 1 @ 3 | terskel | **8,9** | Sterk | 9,5 | 7,6 | v2.4 | 8,7 | — | |
| 10 | 01-27 | intervall | 3 x 12 min — 3 x 12 min @ 3:55 | terskel | **8,0** | Sterk | 7,9 | 8,1 | — | 8,7 | — | mølle |
| 11 | 01-29 | intervall | 3 x 10 x 45/15 — 3 x 10 x 45/15 @ 3:45 | 45_15_terskel | **7,3** | Solid | 7,0 | 8,1 | — | — | 8,9 | mølle |
| 12 | 01-31 | langtur L4 | Ranheimshallen — Sammenhengende langtur 19 km, 6 x 20 (19,2 km) | — | **7,8** | OK | — | — | langtur | — | — | dis 6 · pac 9 · aer 3 · dec 10 · kva 10; Ranheimshallen; **cruise forurenset av dragene** |
| 13 | 02-02 | intervall | MandagsTOSK — 2 x 10 x 400 @ 3:40-3:25 | over_terskel | **8,4** | Sterk | 8,2 | 9,0 | v2.4 | 8,8 | 9,4 | v3-flagg: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte |
| 14 | 02-04 | intervall | OnsdagsTOSK — 10 x 1000 @ 3:50 | terskel | **9,1** | Eksepsjonell | 9,2 | 8,9 | v2.4 | 8,8 | — | |
| 15 | 02-07 | langtur L4 | Ranheimshallen — Sammenhengende: 12 km @ 5:00 + 10 km (22,3 km) | — | **9,1** | Sterk | — | — | langtur | — | — | dis 7,5 · pac 9 · aer 10 · dec 10 · kva 9; Ranheimshallen |
| 16 | 02-09 | intervall | MandagsTOSK — 6 x 2000 @ 3:55-3:50 | terskel | **8,9** | Sterk | 9,0 | 8,9 | v2.4 | 9,0 | — | |
| 17 | 02-11 | intervall | Morning Run — 10 x 45/15 @ 15-16 km/t | 45_15_terskel | **6,3** | Solid | 5,0 | 9,2 | v2.4 | — | 9,3 | **eks. 5,0 = fallback (ingen komponenter)**; mølle |
| 18 | 02-13 | langtur L4 | 5-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** | Solid | — | — | langtur | — | — | dis 8 · pac 8 · aer 5 · dec 7 · kva 10 |
| 19 | 02-18 | intervall | 3 x 12 min — 3 x 12 min @ 3:55-3:52 | over_terskel | **8,6** | Sterk | 8,3 | 9,2 | v2.4 | 8,9 | — | mølle |
| 20 | 02-20 | intervall | 12 x 1 min — 12 x 1 min @ 3:35 | vo2max | **7,3** | Solid | 6,6 | 8,9 | — | — | 9,5 | mølle |
| 21 | 02-21 | langtur L1 | Morning Run — rolig (21,1 km) | — | **8,8** | Solid | — | — | langtur | — | — | dis 7 · pac 8 · aer 10 · dec 10 |
| 22 | 02-25 | intervall | OnsdagsTOSK — 8 x 1000 @ 3:55 | terskel | **8,3** | Sterk | 8,2 | 8,8 | — | 8,9 | — | |
| 23 | 02-28 | langtur L5 | Ranheimshallen — 3 x 4 km @ 3:57-3:56-3:56 (20,2 km) | — | **7,2** | OK | — | — | langtur | — | — | dis 7 · pac 9 · aer 3 · dec 7 · kva 9; Ranheimshallen; **cruise forurenset av dragene** |
| 24 | 03-02 | intervall | MandagsTOSK — 2 x 10 x 400 @ 3:40-3:30 | vo2max | **8,7** | Sterk | 8,5 | 9,0 | v2.4 | — | 9,4 | |
| 25 | 03-04 | intervall | OnsdagsTOSK — 12 x 1000 @ 3:50 | terskel | **9,1** | Eksepsjonell | 9,2 | 9,0 | v2.4 | 9,6 | — | |
| 26 | 03-07 | langtur L4 | LørdagsTOSK — 2 segmenter (2-9 km) (26,1 km) | — | **9,3** | Sterk | — | — | langtur | — | — | dis 8,5 · pac 9 · aer 10 · dec 10 · kva 9 |
| 27 | 03-09 | intervall | MandagsTOSK — 6 x 2000 @ 3:50 | terskel | **9,2** | Eksepsjonell | 9,2 | 9,2 | v2.4 | 9,6 | — | |
| 28 | 03-11 | intervall | OnsdagsTOSK — 12 x 1000 @ 3:50 | terskel | **9,5** | Eksepsjonell | 9,6 | 9,1 | v2.4 | 9,4 | — | |
| 29 | 03-14 | langtur L5 | Lørdagslang — 15 km @ 4:55 + 10 km @ 3:58 (vind ød (26,0 km) | — | **9,3** | Sterk | — | — | langtur | — | — | dis 8,5 · pac 9 · aer 10 · dec 10 · kva 9 |
| 30 | 03-16 | intervall | MandagsTOSK — 5 x 2000 @ 3:50 | terskel | **8,8** | Sterk | 8,6 | 9,3 | v2.4 | 8,8 | — | |
| 31 | 03-18 | intervall | OnsdagsTOSK — 3 x 3000 @ 3:55-3:53-3:52 | terskel | **9,1** | Eksepsjonell | 9,0 | 9,5 | v2.4 | 9,5 | — | |
| 32 | 03-21 | langtur L5 | Lørdagslang — 15 km @ 5:00 + 5 km @ 3:55 (avbrutt (21,4 km) | — | **7,7** | OK | — | — | langtur | — | — | dis 7 · pac 6 · aer 9 · dec 10 · kva 7 |
| 33 | 03-23 | intervall | MandagsTOSK — 2 x 2000 + 2 x 1000 @ 3:55 | terskel | **8,8** | Sterk | 8,7 | 9,0 | v2.4 | 9,2 | — | |
| 34 | 03-25 | intervall | 4 x 1000 — 4 x 1000 @ 3:53-3:52-3:51-3:52 | terskel | **9,4** | Eksepsjonell | 9,5 | 9,3 | v2.4 | 9,6 | — | |
| 35 | 03-29 | løp | 🇩🇪 Berlin halvmaraton 1:21:19 | — | **8,9** | Sterk — over forventning | — | — | lø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» |
| 36 | 04-09 | intervall | 6 x 1000 — 6 x 1000 aerob (post-sykdom) | aerob | **8,3** | Sterk | 8,4 | 7,9 | — | 8,3 | — | HR upålitelig; v3-flagg: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte; ingen |
| 37 | 04-13 | intervall | MandagsTOSK — TOSK terskel | terskel | **7,2** | Solid | 6,7 | 8,5 | v2.4 | 7,4 | — | v3-flagg: ingen forskrivning i strukturen — eksekusjon tak 8,5 |
| 38 | 04-19 | intervall | 2 x 10 x 45/15 — 2 x 10 x 45/15 @ 13-15 km/t | 45_15_terskel | **5,9** | Akseptabel | 5,6 | 6,5 | v2.4 | — | 8,6 | |
| 39 | 04-23 | intervall | 3 x 10 x 45/15 — 3 x 10 x 45/15 @ 13-16 km/t | 45_15_terskel | **6,7** | Solid | 6,2 | 7,8 | v2.4 | — | 7,0 | |
| 40 | 04-25 | intervall | 3 x 10 min — 3 x 10 min | aerob | **6,9** | Solid | 6,0 | 9,1 | v2.4 | 8,7 | — | mølle; v3-flagg: ingen forskrivning i strukturen — eksekusjon tak 8,5 |
| 41 | 04-28 | intervall | 3 x 2000 — 3 x 2000 | terskel | **8,8** | Sterk | 8,6 | 8,3 | — | 9,2 | — | |
| 42 | 04-30 | intervall | 4 x 1000 — 8 x 1000 @ 3:55 (planlagt 8, gjennom | terskel | **6,1** | Solid | 5,4 | 7,5 | — | 7,1 | — | |
| 43 | 05-11 | intervall | MandagsTOSK — 2 x 800 + 2 x 2000 @ 4:10 | aerob | **9,1** | Eksepsjonell | 9,1 | 9,1 | v2.4 | 8,8 | — | |
| 44 | 05-13 | intervall | OnsdagsTOSK — 6 x 1000 @ 4:00 | terskel | **8,3** | Sterk | 7,9 | 9,1 | v2.4 | 8,2 | — | |
| 45 | 05-16 | langtur L2 | Morning Run — rolig (20,0 km) | — | **7,3** | OK | — | — | langtur | — | — | dis 7 · pac 6 · aer 7 · dec 9 |
| 46 | 05-18 | intervall | MandagsTOSK — 2 x 10 x 400 @ 3:45-3:30 | vo2max | **8,9** | Sterk | 8,9 | 8,9 | v2.4 | — | 9,6 | |
| 47 | 05-20 | intervall | OnsdagsTOSK — 8 x 1000 @ 4:00-3:55 | terskel | **9,2** | Eksepsjonell | 9,4 | 8,5 | v2.4 | 9,2 | — | |
| 48 | 05-23 | langtur L1 | Rolig langtur — rolig (22,6 km) | — | **9,0** | Sterk | — | — | langtur | — | — | dis 7,5 · pac 8 · aer 10 · dec 10 |
| 49 | 05-25 | intervall | 4 x 2000 — 4 x 2000 | terskel | **9,1** | Eksepsjonell | 9,0 | 9,5 | v2.4 | 9,2 | — | |
| 50 | 05-27 | intervall | OnsdagsTOSK — 10 x 1000 @ 3:57-3:48 | terskel | **9,5** | Eksepsjonell | 9,5 | 9,5 | v2.4 | 9,2 | — | |
| 51 | 05-30 | langtur L1 | Hydrocup — rolig (26,1 km) | — | **9,4** | Sterk | — | — | langtur | — | — | dis 8,5 · pac 9 · aer 10 · dec 10 |
| 52 | 06-01 | intervall | MandagsTOSK — 3×2 km + 4×500 m | terskel | **8,9** | Sterk | 8,8 | 9,5 | — | 8,1 | — | metode `discretionary_two_block_v0` |
| 53 | 06-03 | intervall | OnsdagsTOSK — 10 x 1000 @ 4:00-3:50 | terskel | **9,3** | Eksepsjonell | 9,4 | 9,0 | v2.4 | 8,9 | — | |
| 54 | 06-06 | langtur L4 | LørdagsTOSK — 6 km tempo (27,0 km) | — | **8,9** | Solid | — | — | langtur | — | — | dis 8,5 · pac 9 · aer 10 · dec 10 · kva 8 |
| 55 | 06-08 | intervall | 5 x 5 min — 5 x 5 min | aerob | **8,6** | Sterk | 8,3 | 9,2 | — | 9,0 | — | |
| 56 | 06-08 | intervall | MandagsTOSK — 3 x 2000 @ 3:55 Lt(3) 3,8 | terskel | **7,7** | Solid | 7,0 | 9,2 | v2.4 | 8,8 | — | |
| 57 | 06-10 | intervall | OnsdagsTOSK — 10 x 1000 @ 4:00-3:45 | terskel | **9,3** | Eksepsjonell | 9,5 | 9,0 | v2.4 | 9,3 | — | |
| 58 | 06-13 | langtur L1 | LørdagsTOSK — rolig (31,0 km) | — | **9,3** | Sterk | — | — | langtur | — | — | dis 9 · pac 8 · aer 10 · dec 10 |
| 59 | 06-15 | intervall | 6 x 5 min — 6 x 5 min | aerob | **9,2** | Eksepsjonell | 9,2 | 9,1 | — | 9,2 | — | |
| 60 | 06-15 | intervall | 3 x 10 x 45/15 — 3 x 10 x 45/15 | 45_15_terskel | **7,4** | Solid | 6,7 | 9,1 | v2.4 | — | 9,4 | |
| 61 | 06-17 | intervall | OnsdagsTOSK — 10 x 1000 @ 3:57-3:44 | terskel | **8,9** | Sterk | 9,2 | 8,2 | v2.4 | 8,4 | — | |
| 62 | 06-20 | langtur L4 | LørdagsTOSK — 5-4-3-2-1 km segmenter (30,0 km) | — | **8,4** | Solid | — | — | langtur | — | — | dis 9 · pac 6 · aer 10 · dec 7 · kva 9 |
| 63 | 06-22 | intervall | 3 x 10 x 45/15 — 3 x 10 x 45/15 | 45_15_hoy | **7,2** | Solid | 6,5 | 9,1 | v2.4 | — | 9,3 | |
| 64 | 06-26 | intervall | 2 x Wildsee — 2 x 2500 @ 4:00 | terskel | **8,6** | Sterk | 8,7 | 8,3 | — | 8,1 | — | |
| 65 | 06-30 | intervall | 7 x Wildsee — 7 km sammenhengende tempo | — | **6,0** | Solid | 5,0 | 7,0 | v2.4 | — | — | **eks. 5,0 = fallback (ingen komponenter)**; **ktx. 7,0 = fallback**; uten tag → ingen skårer |
| 66 | 07-01 | intervall | 2 x 10 x 400m — 2 x 10 x 400m | vo2max | **4,9** | Akseptabel | 3,7 | 7,9 | v2.4 | — | 9,1 | mølle |
| 67 | 07-04 | intervall | 3 x 12 min — 3 x 12 min | aerob | **7,3** | Solid | 6,8 | 8,6 | v2.4 | 8,6 | — | v3-flagg: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte; ingen |
| 68 | 07-05 | langtur L1 | Søndagslang — rolig (33,5 km) | — | **8,3** | Solid | — | — | langtur | — | — | dis 9,5 · pac 9 · aer 10 · dec 3; dec 6,5 % ved 24.9 °C |
| 69 | 07-07 | intervall | 4 x 2000 — 4 x 2000 | terskel | **7,9** | Solid | 7,6 | 8,6 | — | 8,9 | — | |
| 70 | 07-09 | intervall | 10 x 1000 🇮🇹 — 10 x 1000 🇮🇹 | terskel | **7,1** | Solid | 7,1 | 7,0 | — | 8,2 | — | |
| 71 | 07-11 | langtur L1 | Lørdagslang — rolig (33,6 km) | — | **8,3** | Solid | — | — | langtur | — | — | dis 9,5 · pac 9 · aer 10 · dec 3; dec 6,6 % ved 20.2 °C |
| 72 | 07-14 | intervall | 5 x 2000 — 5 x 2000 | terskel | **8,8** | Sterk | 9,2 | 8,1 | — | 9,1 | — | |
| 73 | 07-17 | intervall | 8 x 1000 — 8 x 1000 | over_terskel | **8,9** | Sterk | 8,9 | 9,1 | v2.4 | 8,7 | — | v3-flagg: ingen forskrivning i strukturen — eksekusjon tak 8,5 |
| 74 | 07-18 | langtur L3 | LørdagsTOSK — tempo-finish 6 km (34,1 km) | — | **8,9** | Solid | — | — | langtur | — | — | dis 9,5 · pac 8 · aer 10 · dec 7 · pro 9 |
| 75 | 07-20 | intervall | 5 x 2000 — 5 x 2000 | terskel | **8,7** | Sterk | 8,8 | 8,6 | v2.4 | 9,3 | — | |
| 76 | 07-23 | intervall | 6 x 1000 🔥 — 6 x 1000 🔥 | terskel | **8,1** | Sterk | 7,8 | 8,8 | v2.4 | 8,8 | — | |
| 77 | 07-25 | langtur L1 | LørdagsTOSK — rolig (32,2 km) | — | **9,5** | Sterk | — | — | langtur | — | — | dis 9,5 · pac 8 · aer 10 · dec 10 |
| 78 | 07-27 | intervall | MandagsTOSK — 5 x 2000 (90 s stå) | terskel | **8,4** | Sterk | 8,3 | 8,4 | v2.4 | 8,5 | — | |
| 79 | 07-29 | intervall | 6 x 5 min — 6 x 5 min | aerob | **8,6** | Sterk | 8,3 | 9,2 | v2.4 | 9,2 | — | |
| 80 | 07-29 | intervall | OnsdagsTOSK — 10 x 1000 @ 3:50 | terskel | **8,3** | Sterk | 8,0 | 9,0 | v2.4 | 9,7 | — | |
| 81 | 08-01 | langtur L3 | LørdagsTOSK — progresjon (34,2 km) | — | **8,6** | Solid | — | — | langtur | — | — | dis 9,5 · pac 8 · aer 7 · dec 10 · pro 9 |
| 82 | 08-05 | intervall | OnsdagsTOSK — 6 x 1000 @ 3:42-42-43-43-42-39 | over_terskel | **9,0** | Eksepsjonell | 9,0 | 9,1 | v2.4 | 9,0 | — | |
| 83 | 08-07 | langtur L4 | Langtur — 6-5-4-3-2-1 km segmenter (33,0 km) | — | **8,3** | Solid | — | — | langtur | — | — | dis 9,5 · pac 6 · aer 10 · dec 3 · kva 10; dec 6,6 % ved 10.3 °C |
| 84 | 08-12 | løp | Energimila 36:43 🔥 | — | **7,9** | Solid — på linje med form | — | — | løp (auto) | — | — | løpsskår fra `race_index`; `quality.json` **null**, økt-siden «INGEN SKÅR» |
| 85 | 08-14 | langtur L1 | Afternoon Run — rolig (20,0 km) | — | **8,7** | Solid | — | — | langtur | — | — | dis 7 · pac 8 · aer 10 · dec 9 |
| 86 | 08-16 | langtur L1 | SoloTOSK — rolig (30,0 km) | — | **8,9** | Solid | — | — | langtur | — | — | dis 9 · pac 9 · aer 10 · dec 7 |
| 87 | 08-17 | intervall | MandagsTOSK — 5 x 2000 @ 3:50 | terskel | **9,0** | Eksepsjonell | 9,0 | 8,9 | v2.4 | 9,5 | — | |
| 88 | 08-19 | intervall | 5x6 min — 5x6 min | aerob | **9,2** | Eksepsjonell | 9,2 | 9,2 | v2.4 | 9,2 | — | |
| 89 | 08-19 | intervall | 10 x 1000 — 10 x 1000 | terskel | **8,2** | Sterk | 7,8 | 9,2 | v2.4 | 8,9 | — | v3-flagg: hr_cost: ≥10 bpm under forventet uten laktat — sjekk pulsbelte |
| 90 | 08-22 | langtur L4 | LørdagsTOSK — 9.6+6+5+5 km segmenter (35,0 km) | — | **8,9** | Solid | — | — | langtur | — | — | dis 10 · pac 8 · aer 10 · dec 7 · kva 9 |
| 91 | 08-24 | intervall | MandagsTOSK — 3 x 3200 @ 3:50-3:49-3:49 | terskel | **8,8** | Sterk | 8,5 | 9,4 | v2.4 | 8,8 | — | HR upålitelig |
| 92 | 08-26 | intervall | 5 x 6 min — 5 x 6 min | aerob | **9,2** | Eksepsjonell | 9,2 | 9,1 | v2.4 | 9,0 | — | |
| 93 | 08-26 | intervall | OnsdagsTOSK — 2 x 10 x 400 @ | r_pace_kort | **8,6** | Sterk | 8,4 | 9,1 | v2.4 | — | 9,5 | |
| 94 | 08-30 | langtur L4 | Søndagslang — 4×5 km (33,0 km) | — | **9,5** | Sterk | — | — | langtur | — | — | dis 9,5 · pac 8 · aer 10 · dec 9 · kva 10 |
| 95 | 09-03 | intervall | 4 x 2000 — 4 x 2000 | terskel | **8,8** | Sterk | 8,6 | 9,4 | v2.4 | 8,6 | — | |
| 96 | 09-06 | langtur L4 | Fartsholder TM — 1 × 20 km (32,1 km) | — | **8,2** | Solid | — | — | langtur | — | — | dis 9,5 · pac 4 · aer 10 · dec 7 · kva 9 |
| 97 | 09-08 | intervall | 5 x 2000 👷♂️ — 5 x 2000 👷♂️ | terskel | **9,7** | Eksepsjonell | 9,9 | 9,4 | v3.0 | 9,7 | — |
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.
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.
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`):
| Økt | Blokk-snitt HR per sett | Siste 2 min per sett | Topp per sett | % av 186 (snitt / topp) |
|---|---|---|---|---|
| 29.01 3×10×45/15 @ 3:45 mølle | 148 · 148 · 156 | 146 · 140 · 159 | 164 · 163 · 167 | 80–84 / 88–90 |
| 11.02 10×45/15 @ 15–16 km/t mølle | 151 | 159 | 166 | 81 / 89 |
| 19.04 2×10×45/15 @ 13–15 km/t | 135 · 142 | 138 · 146 | 145 · 150 | 72–76 / 78–81 |
| 23.04 3×10×45/15 @ 13–16 km/t | 136 · 142 · 149 | 136 · 148 · 155 | 149 · 158 · 163 | 73–80 / 80–88 |
| 15.06 3×10×45/15 (15–17 km/t) | 139 · 144 · 141 | 143 · 151 · 155 | 150 · 158 · 163 | 75–77 / 81–88 |
| 22.06 3×10×45/15 @ 15–18 km/t (hoy) | 135 · 138 · 145 | 138 · 144 · 153 | 147 · 149 · 157 | 73–78 / 79–84 |
| 20.02 12×1 min @ 3:35 mølle | 135 | 136 | 166 | 73 / 89 |
| 02.03 2×10×400 @ 3:40→3:30 bane | 148 · 150 | 150 · 157 | 169 · 175 | 79–80 / 91–94 |
| 18.05 2×10×400 @ 3:45→3:30 bane | 148 · 153 | 152 · 157 | 168 · 175 | 80–82 / 90–94 |
| 01.07 2×10×400 @ 16–18 km/t mølle | 141 · 144 | 144 · 146 | 158 · 163 | 76–78 / 85–88 |
| 26.08 2×10×400 @ 3:32 bane | 145 · 148 | 148 · 152 | 167 · 170 | 78–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:
| Økt | Lagret | Eks. | Det som senket | Det som faktisk skjedde |
|---|---|---|---|---|
| 29.01 3×10×45/15 @ 3:45, mølle | 7,3 | 7,0 | block_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ølle | 6,3 | **5,0** | ingen komponenter → fallback | på belte som forskrevet, blokk 151, topp 166 |
| 20.02 12×1 min @ 3:35, mølle | 7,3 | 6,6 | pct_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, bane | 8,7 | 8,5 | hr_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/t | 5,9 | 5,6 | block_max_hr 4,5 (149 vs 165) · pace_target 6,0 (4:41 mot fast 3:45–4:10) · hr_max_respons 5,0 | forskrevet lett etter sykdom, løpt 4:41 = innenfor 13–15 km/t |
| 23.04 3×10×45/15 @ 13–16 km/t | 6,7 | 6,2 | block_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, bane | 8,9 | 8,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/t | 7,4 | 6,7 | block_max_hr 4,5 (162 vs 165) · pace_cv 4,5 (8,1 % GPS) · hr_max_respons 6,5 | 4: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,2 | 6,5 | block_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-komponent | 3:27–3:42 i progresjon, 20/20, topp 163 |
| 26.08 2×10×400 @ 3:32, bane | 8,6 | 8,4 | inter_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,4 | 8,2 | v2 tosidig HR-bånd (v3: 8,8) | 20/20 på rampa, blokk 148–150 |
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):
| Komponent | Vekt | Måler | 10 ved | Merknad |
|---|---|---|---|---|
| **pace_target** | 0,25 | snittavvik per drag *utenfor* forskrevet bånd | mikro ≤ 10 s/km · kort ≤ 5 s/km | bå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,15 | utførte / forskrevne drag | 100 % | som v3 |
| **evenness** | 0,10 | pace-CV innen sett | mikro ≤ 4 % · kort ≤ 2 % | toleranser satt etter målestøy; utgår ved rampe |
| **stimulus** | 0,10 | nå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,20 | puls 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,10 | målt laktat mot taggens bånd, *lavere = bedre* | under båndets gulv | utgår når ikke målt (som v3) |
| **block_drift** | 0,10 | siste-2-min-HR sett 1 → siste sett | ≤ +8 bpm | 9 ved ≤ 12, 8 ved ≤ 16, 6,5 ved ≤ 20. **Ingen straff for lav drift** |
| **recovery** | 0,10 | HR-fall fra dragslutt til neste dragstart, over *faktisk* pause | ≥ 40 bpm | bare 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.
`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.
| Økt | Lagret | Prototype | Nøytral hr_cost | Det som driver |
|---|---|---|---|---|
| 29.01 3×10×45/15 @ 3:45 mølle | 7,3 | 8,9 | 8,9 | completion 8 (29/30), block_drift 8 (+13) |
| 02.02 2×10×400 @ 3:40→3:25 | 8,4 | 9,4 | 9,1 | recovery 7,5 (25 bpm) |
| 11.02 10×45/15 @ 15–16 km/t mølle | 6,3 | 9,3 | 9,3 | hr_cost 8 (−1 bpm) — ærlig 9,3 i stedet for fabrikkert 6,3 |
| 20.02 12×1 min @ 3:35 mølle | 7,3 | 9,5 | 9,5 | alt på; stimulus 10 (topp 166) |
| 02.03 2×10×400 @ 3:40→3:30 | 8,7 | 9,4 | 9,2 | recovery 7,5 (21 bpm over faktisk pause) |
| 19.04 2×10×45/15 @ 13–15 km/t | 5,9 | 8,6 | 8,6 | stimulus 8 (146 vs 150), ktx 6,5 (sykdom) |
| 23.04 3×10×45/15 @ 13–16 km/t | 6,7 | **7,0** | 7,0 | pace_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:30 | 8,9 | 9,6 | 9,3 | laktat 9,5, recovery 9 (39 bpm) |
| 15.06 3×10×45/15 per-sett km/t | 7,4 | 9,4 | 9,4 | pace_target 9 (13 s/km, sett 1–2 litt sakte) |
| 22.06 3×10×45/15 @ 15–18 km/t hoy | 7,2 | 9,3 | 9,3 | stimulus 9 (153 vs 156), block_drift 8 (+15) |
| 01.07 2×10×400 mølle | 4,9 | 9,1 | 8,9 | pace 9,5 (belte), completion 10, recovery 9 (31 bpm) |
| 26.08 2×10×400 @ 3:32 | 8,6 | 9,5 | 9,3 | pace_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.
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.
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.
| Komponent | Beregning | Trinn |
|---|---|---|
| **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.
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.
| Komponent | n | Snitt | SD | Verdier (antall) |
|---|---|---|---|---|
| distanse | 27 | 8,33 | 1,13 | 6 (1) · 7 (7) · 7,5 (2) · 8 (1) · 8,5 (4) · 9 (3) · 9,5 (8) · 10 (1) |
| aerob | 27 | 8,93 | 2,11 | **3 (2)** · 5 (1) · 7 (3) · 9 (1) · **10 (20)** |
| pace_okonomi | 27 | 7,93 | 1,25 | 4 (1) · 6 (4) · 8 (12) · 9 (10) |
| decoupling | 27 | 8,15 | 2,32 | **3 (3)** · 5 (1) · 7 (7) · 9 (3) · 10 (13) |
| kvalitet | 13 | 9,08 | 0,83 | 7 (1) · 8 (1) · 9 (7) · 10 (4) |
| progresjon | 2 | 9,00 | 0 | 9 (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».
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).
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.
Samme to søyler som v3: eksekusjon (gjorde du det som var planlagt) og økonomi (hva kostet det). Vektene under er startpunkt.
| Komponent | A (L1/L2) | B/C (L3–L5) | Måler |
|---|---|---|---|
| **distanse_vs_plan** | 0,20 | 0,15 | utfø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,25 | per 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,15 | — | km-fart-CV i cruise, terreng-justert; erstatter ikke noe, men gir A-økter en eksekusjonskomponent |
| **completion** | — | 0,10 | segmenter utført / forskrevet |
| **aerob_kost** | 0,30 | 0,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,20 | 0,10 | kun 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,15 | HR i kvalitetssegmentene mot LT-linjen ved segmentfarten, *lavere = bedre* (v3s hr_cost) |
| **laktat_kost** | 0,15 hvis målt | 0,10 hvis målt | mot 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.
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.
| Flate | Berlin 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.
Additiv 10-poengsskala, distansebevisste terskler:
| Komponent | Maks | Måler | Full pott ved |
|---|---|---|---|
| pacing_strategy | 2,5 | fart andre halvdel − første | M: −4…+2 s/km · HM: −6…0 · **10 km: −12…−2** |
| pacing_consistency | 1,5 | CV over km-splitter (GPS, ikke høydejustert) | M < 2,5 % · HM < 2,0 % · 10 km < 1,5 % |
| hr_control | 1,5 | HR-drift Q1 → Q4 | < 5 bpm (1,3 ved < 12; 0,8 ved < 20; 0,3 ved < 30) |
| finish_strong | 1,0 | siste 25 % mot første 75 % | ≤ 0 s/km |
| time_outcome | 2,5 | tid 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_bonus | 0,7 | størrelse på PB | ≥ 5 % (0,4 ved ≥ 3 %; 0,2 ved ≥ 1 %) |
| difficulty_bonus | 1,0 | vind ≥ 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».
| Komponent | Berlin HM (auto 9,2) | Energimila (7,9) |
|---|---|---|
| pacing_strategy | 2,5 — Δ −3,4 «sweet spot for HM» | **2,2** — Δ −1,8 «jevn» (10 km-modellen vil ha −2 til −12) |
| pacing_consistency | 1,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_control | 1,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_strong | 1,0 — −5,4 s/km | 1,0 — −1,7 s/km (siste km 3:30) |
| time_outcome | 2,5 — PB −4,0 % | 2,5 — PB −1,9 % |
| pb_leap_bonus | 0,4 | 0,2 |
| difficulty_bonus | 0 — 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.
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.
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øyle | Maks | Komponenter |
|---|---|---|
| **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,5 | strategi 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,5 | snittpuls 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 HM | Energimila | |
|---|---|---|
| Utfall | forventning: 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 = toppform | mål sub 37:00 → **−0,8 % → 3,5** · PB-bonus 0,2 · WA 469 = 0,7 % under toppform → «på linje med form» |
| Eksekusjon | strategi 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** |
| Innsats | 87 % 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.
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 få 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).
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`
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åndet | n | Snittskår v2 | Snitt eksekusjon |
|---|---|---|---|
| Under | 24 | **7,85** | **7,52** |
| I båndet | 38 | 8,76 | 8,72 |
| Over | 2 | 6,50 | 5,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.
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.
| Komponent | Vekt | Måler | 10 ved |
|---|---|---|---|
| **pace_target** | 0,20 | snittavvik per drag fra forskrivning (rampe eller flat) | ≤1 s/km |
| **pace_evenness** | 0,15 | spenn raskeste–tregeste drag (utgår ved rampe/progresjon/sammensatt) | ≤2 s/km |
| **completion** | 0,15 | utførte drag / forskrevne | 100 % |
| **hr_cost** | 0,20 | steady-puls mot labbens LT1→LT2-linje ved farten, *lavere = bedre* | ≤−8 bpm, bekreftet av laktat |
| **laktat_cost** | 0,10 | målt mot taggens bånd, *lavere = bedre* (utgår hvis ikke målt) | under båndets gulv |
| **inter_rep_drift** | 0,10 | steady drag 1 → siste (utgår ved progresjon) | ≤+2 bpm |
| **hr_recovery** | 0,10 | fall 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.
55 økter dekkes av v3. 12 økter beholder v2 (HR-forskrevne tagger eller manglende tag).
| v2 | **v3** | |
|---|---|---|
| Snitt | 8.54 | **8.86** |
| Standardavvik | 0.76 | **0.56** |
| ≥9,0 Eksepsjonell | 21 | **25** |
| 8–9 Sterk | 23 | 27 |
| 6–8 Solid | 10 | 3 |
| <6 | 1 | 0 |
| ≥9,4 | 3 | 8 |
Δ 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.
Avvik = steady-puls minus labbens forventning ved farten (negativ = økonomisk). ‼ = v3-flagg. !HR = puls flagget upålitelig.
| Dato | Økt | Tag | Fart | Steady-puls | Forventet | Avvik | Laktat | v2 | **v3** | Δ |
|---|---|---|---|---|---|---|---|---|---|---|
| 01-01 | !HR 8 x 1000 | terskel | 3:48 | 158.0 | 168.4 | -10.4 | — | 8.0 | **8.7** | +0.7 ‼ |
| 01-05 | MandagsTOSK | terskel | 3:53 | 162.8 | — | — | 3.9 | 7.6 | **7.0** | -0.6 |
| 01-07 | OnsdagsTOSK | over_terskel | 3:45 | 166.9 | 173.3 | -6.4 | 4.7 | 8.9 | **8.7** | -0.2 |
| 01-12 | MandagsTOSK | terskel | 3:55 | 166.9 | 169.0 | -2.1 | — | 8.6 | **9.1** | +0.5 |
| 01-14 | OnsdagsTOSK | terskel | 3:59 | 162.2 | 166.6 | -4.4 | — | 8.7 | **8.7** | +0.0 |
| 01-19 | MandagsTOSK | terskel | 3:55 | 165.8 | 172.3 | -6.5 | — | 9.0 | **9.1** | +0.1 |
| 01-21 | OnsdagsTOSK | terskel | 3:55 | 164.6 | 170.0 | -5.3 | — | 9.0 | **8.7** | -0.3 |
| 01-27 | 3 x 12 min | terskel | 3:55 | 169.6 | 168.8 | +0.7 | — | 7.5 | **8.7** | +1.2 |
| 02-02 | MandagsTOSK | over_terskel | 3:32 | 153.6 | 178.4 | -24.8 | — | 8.5 | **8.8** | +0.3 ‼ |
| 02-04 | OnsdagsTOSK | terskel | 3:50 | 162.8 | 172.6 | -9.8 | 3.4 | 8.8 | **8.8** | +0.0 |
| 02-09 | MandagsTOSK | terskel | 3:52 | 164.9 | 169.9 | -5.0 | — | 8.9 | **9.0** | +0.1 |
| 02-18 | 3 x 12 min | over_terskel | 3:54 | 167.7 | 167.7 | +0.0 | — | 8.2 | **8.9** | +0.7 |
| 02-25 | OnsdagsTOSK | terskel | 3:55 | 159.2 | 168.6 | -9.4 | — | 7.4 | **8.9** | +1.5 |
| 03-04 | OnsdagsTOSK | terskel | 3:50 | 160.8 | 172.1 | -11.2 | 2.2 | 8.7 | **9.6** | +0.9 |
| 03-09 | MandagsTOSK | terskel | 3:50 | 163.5 | 170.9 | -7.4 | 2.6 | 9.2 | **9.6** | +0.4 |
| 03-11 | OnsdagsTOSK | terskel | 3:50 | 163.1 | 171.5 | -8.4 | 2.7 | 9.5 | **9.4** | -0.1 |
| 03-16 | MandagsTOSK | terskel | 3:50 | 165.5 | 170.8 | -5.2 | 3.9 | 8.8 | **8.8** | +0.0 |
| 03-18 | OnsdagsTOSK | terskel | 3:54 | 163.1 | 168.9 | -5.8 | 2.5 | 9.2 | **9.5** | +0.3 |
| 03-23 | MandagsTOSK | terskel | 3:55 | 163.1 | 170.2 | -7.1 | 2.2 | 8.5 | **9.2** | +0.7 |
| 03-25 | 4 x 1000 | terskel | 3:52 | 160.9 | 168.8 | -7.9 | — | 9.4 | **9.6** | +0.2 |
| 04-13 | MandagsTOSK | terskel | 4:15 | 158.6 | 157.0 | +1.6 | — | 7.2 | **7.4** | +0.2 ‼ |
| 04-25 | 3 x 10 min | aerob | 4:17 | 163.2 | 160.6 | +2.7 | — | 6.9 | **8.7** | +1.8 ‼ |
| 04-28 | 3 x 2000 | terskel | 3:53 | 166.1 | 167.3 | -1.3 | — | 8.8 | **9.2** | +0.4 |
| 04-30 | 4 x 1000 | terskel | 3:58 | 170.1 | 165.7 | +4.5 | — | 5.6 | **7.1** | +1.5 |
| 05-11 | MandagsTOSK | aerob | 4:10 | 154.3 | 161.3 | -7.0 | 2.4 | 9.1 | **8.8** | -0.3 |
| 05-13 | OnsdagsTOSK | terskel | 4:00 | 160.1 | 165.2 | -5.1 | 3.9 | 7.9 | **8.2** | +0.3 |
| 05-20 | OnsdagsTOSK | terskel | 3:58 | 160.3 | 165.6 | -5.2 | 2.0 | 9.2 | **9.2** | +0.0 |
| 05-25 | 4 x 2000 | terskel | 3:58 | 164.0 | 166.2 | -2.2 | — | 9.1 | **9.2** | +0.1 |
| 05-27 | OnsdagsTOSK | terskel | 3:52 | 164.1 | 167.0 | -2.9 | — | 9.5 | **9.2** | -0.3 |
| 06-01 | MandagsTOSK | terskel | 3:50 | 168.0 | 173.0 | -5.0 | — | 8.3 | **8.1** | -0.2 |
| 06-03 | OnsdagsTOSK | terskel | 3:55 | 163.7 | 167.3 | -3.7 | 2.9 | 9.3 | **8.9** | -0.4 |
| 06-08 | 5 x 5 min | aerob | 4:10 | 155.5 | 161.2 | -5.7 | — | 8.6 | **9.0** | +0.4 |
| 06-08 | MandagsTOSK | terskel | 3:55 | 161.5 | 166.7 | -5.2 | 3.8 | 7.7 | **8.8** | +1.1 |
| 06-10 | OnsdagsTOSK | terskel | 3:52 | 161.8 | 168.4 | -6.6 | — | 9.3 | **9.3** | +0.0 |
| 06-15 | 6 x 5 min | aerob | 4:10 | 154.8 | 160.6 | -5.7 | — | 9.2 | **9.2** | +0.0 |
| 06-17 | OnsdagsTOSK | terskel | 3:50 | 162.5 | 168.7 | -6.2 | 3.3 | 8.9 | **8.4** | -0.5 |
| 06-26 | 2 x Wildsee | terskel | 4:00 | 164.0 | 163.2 | +0.8 | — | 8.6 | **8.1** | -0.5 |
| 07-04 | 3 x 12 min | aerob | 3:46 | 158.2 | 170.3 | -12.1 | — | 7.5 | **8.6** | +1.1 ‼ |
| 07-07 | 4 x 2000 | terskel | 3:53 | 163.9 | 167.4 | -3.5 | — | 8.0 | **8.9** | +0.9 |
| 07-09 | 10 x 1000 🇮🇹 | terskel | 3:48 | 160.2 | 169.2 | -9.1 | — | 7.2 | **8.2** | +1.0 |
| 07-14 | 5 x 2000 | terskel | 3:55 | 166.2 | 166.7 | -0.5 | — | 9.0 | **9.1** | +0.1 |
| 07-17 | 8 x 1000 | over_terskel | 3:42 | 169.5 | 171.8 | -2.3 | 4.2 | 9.0 | **8.7** | -0.3 ‼ |
| 07-20 | 5 x 2000 | terskel | 3:52 | 160.8 | 167.8 | -7.0 | 2.9 | 7.8 | **9.3** | +1.5 |
| 07-23 | 6 x 1000 🔥 | terskel | 3:39 | 166.7 | 174.8 | -8.1 | — | 8.6 | **8.8** | +0.2 |
| 07-27 | MandagsTOSK | terskel | 3:49 | 161.3 | 167.9 | -6.6 | 3.4 | 8.1 | **8.5** | +0.4 |
| 07-29 | 6 x 5 min | aerob | 4:10 | 155.4 | 160.0 | -4.6 | — | 9.0 | **9.2** | +0.2 |
| 07-29 | OnsdagsTOSK | terskel | 3:50 | 159.1 | 169.1 | -9.9 | 2.7 | 9.0 | **9.7** | +0.7 |
| 08-05 | OnsdagsTOSK | over_terskel | 3:42 | 168.8 | 171.8 | -3.0 | 3.8 | 9.2 | **9.0** | -0.2 |
| 08-17 | MandagsTOSK | terskel | 3:50 | 164.1 | 169.4 | -5.2 | 2.5 | 9.2 | **9.5** | +0.3 |
| 08-19 | 5x6 min | aerob | 4:10 | 155.9 | 159.7 | -3.8 | — | 9.2 | **9.2** | +0.0 |
| 08-19 | 10 x 1000 | terskel | 3:44 | 160.5 | 170.5 | -10.0 | — | 8.3 | **8.9** | +0.6 ‼ |
| 08-24 | !HR MandagsTOSK | terskel | 3:48 | — | — | — | 2.7 | 8.8 | **8.8** | +0.0 |
| 08-26 | 5 x 6 min | aerob | 4:10 | 150.7 | 161.0 | -10.3 | — | 9.2 | **9.0** | -0.2 |
| 09-03 | 4 x 2000 | terskel | 3:50 | 166.1 | 169.3 | -3.1 | 3.6 | 8.8 | **8.6** | -0.2 |
| 09-08 | 5 x 2000 👷♂️ | terskel | 3:51 | 157.7 | 168.1 | -10.3 | 2.2 | 8.2 | **9.7** | +1.5 |
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».
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).
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.
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).
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.
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.
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.
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).
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.
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.
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`.
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.
| # | Bruksområde | Omfang | Dom |
|---|---|---|---|
| 1 | Dype engangssynteser | 20 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) |
| 2 | Plan-dialog | 09.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 |
| 3 | System-/skåringsrevisjon | 18.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) |
| 4 | Modellvurdering | FABLE_MODELLVURDERING-malen: LOO-dom på foreslåtte endringer | **Riktig bruk**, hendelsesstyrt. Holder modellen ærlig uten å røre den |
| 5 | Hub-design-runder | 4 runder + mockup-arbeidsformen | **Var reell verdi** (trenings-siden). Nå avtagende — din egen 2-dagersplan sa det: «verdien ligger i ANALYSENE, ikke i flere flater» |
| 6 | Prosa-batcher | Kjøres på Sonnet; Fable skrev instruksene (bl.a. FABLE-11) og QA-arkitekturen | **Riktig plassert.** Fables rolle her er instruksforfatter, ikke skribent |
| 7 | Ad hoc datakvalitet | Kval-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.
(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.
| # | Mulighet | Kadens | Verdi | Innsats |
|---|---|---|---|---|
| 1 | Søndags-ukesevalueringen som fast AI-økt | Ukentlig | Høy | Lav |
| 2 | Race-trioen: pre-mortem T−21 · dybdeanalyse T+2–4 · residual-økt T+7 | Hendelsesstyrt (3 løp i høst) | Høy | Lav–middels |
| 3 | Regel-register med evidensstatus | Etter blokk (post-Amsterdam), så årlig | Middels–høy | Middels |
| 4 | Prekommittert design av vinterens 4×4-test | Engangs (november) | Middels–høy | Lav |
| 5 | Prosa-korpus-mining | Engangs, eksplorativ | Usikker | Middels |
| 6 | Årsrapporten (D15) | Engangs (desember) | Middels | Middels |
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.
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.
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.
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).
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.
Verifisert mot CHANGELOG (14 entries etter 07.07) og faktisk filtilstand, ikke mot hukommelse.
| Anbefaling (04.07-rapporten) | Status per 19.07 | Belegg |
|---|---|---|
| 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 | Åpen | Ikke i CHANGELOG |
| D8 hr_review_queue → hub | Åpen | hr_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.
Alvorlighet: hvor galt blir det hvis det står urørt. Innsats: realistisk arbeidsmengde.
| # | Funn | Alvorlighet | Innsats |
|---|---|---|---|
| F1 | Skrivevern-kontrakten håndheves ikke: classify, persist, repstats-sync, lock, block_tagger, verify_stream_integrity skriver quality.json direkte | Høy | 0,5–1 d |
| F2 | Frossen skår-beholdning med fire kjente formelfeil; reskår-kø spredt på tre dokumenter | Høy | 0,5 d + Sonnet-batch |
| F3 | Energimila-dato 2026-08-08 i hub vs 2026-08-12 i modell/plan; mål hardkodet i 3 filer | Middels (høy synlighet) | 1–2 t |
| F4 | generate_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 fil | Middels | 1–2 t |
| F5 | Test-rot: ~24 av 186 tester målrettet mot arkiverte moduler, normalisert som «miljøfeil»; null dekning av scorer, guard, lås/frys, sync-rekkefølge | Høy | 0,5–1 d |
| F6 | sync_daily publiserer uansett: ingen kritisk-steg-abort, git-push kjører selv ved vakthund-alarm | Middels–høy | 2–4 t |
| F7 | Hub-monolitt: 9 494 linjer, build() = 5 274 linjer, 3 .bak-kopier (1,3 MB) i scripts/ som side-versjonering | Middels | dager (kan fases) |
| F8 | 113 `except: pass` i aktiv kode; outlook_history-hull (5/15 dager) skjules av ett av dem | Middels | 2–4 t for de kritiske |
| F9 | Skår reproduserer ikke per konstruksjon: context-komponenter leser NÅVÆRENDE planfil/wellness; ingen formel-versjonstagg i lagret skår | Middels | 30 min (tagg) |
| F10 | Docs-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 ferdigmarkerte | Middels | 1–2 t |
| F11 | 26 quality.json-baks (132 MB) + 16 planfil-baks utenfor rotasjon; .git = 3,0 GB og vokser med hver sync | Middels | 1 t + Carl-git-jobb |
| F12 | Readiness-terskler i 4 representasjoner (COACH-tabell, planfilas bremser 41/46/55, hub-beredskap, brief-relativ) uten kanon-fil | Lav–middels | design-valg |
| F13 | Daglig sync er fortsatt manuell (office-PC 06:00 ugjort, TODO #24/44); >7 d fravær krever manuell sync_all | Middels | oppsett-jobb |
| F14 | Ingen kontraktstest mot Garmin/Strava-API-svar; feltnavn-endring har alt bitt én gang (time10K) | Lav–middels | 2 t |
| F15 | predict_illness leser flate TR/BB/stress for dagens risiko — SNAP-1b-vernet dekker ikke denne konsumenten | Lav | 1 t |
| F16 | Små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 MB | Lav | opprydding |
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.
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.
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.
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.
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.
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.
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.
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.
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»).
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.
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.
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.
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.
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.
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.
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.
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.
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).
Rangert på risiko-per-time. Ingen av disse er startet — alt legges fram for beslutning.
| # | Tiltak | Effekt | Innsats |
|---|---|---|---|
| R1 | Energimila-dato + samle GOALS i én kilde (race_outlook leser goals.json/carl.json; hub/pacing konsumerer race_outlook.json) | Lukker F3, hindrer gjentak | 1–2 t |
| R2 | generate_status → race_outlook som prognose + garmin_race_predictions (fersk) som sekundær; pensjonér race_predictions.json-lesing i race_prob | Lukker F4 | 1–2 t |
| R3 | `_scorer_version` i persist + persistér komponent-strukturen (lukker dual-path D1 varig) | F9 + D1 | 2–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 F2 | 0,5 d + batch |
| R5 | Test-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-assert | Lukker F5 | 0,5–1 d |
| R6 | sync_daily: kritisk-steg-abort (steg 1–4 + compute_load) og push-sperre ved vakthund-alarm | Lukker F6 | 2–4 t |
| R7 | REFACTOR-2: guard-tvang på de 7 direkte-skriverne + tmp+rename i guarden | Lukker F1 | 0,5–1 d |
| R8 | except-pass-gjennomgang på datakritiske steder (outlook_history først, med hull-varsel) | F8 | 2–4 t |
| R9 | rotate_backups → alle bak-mønstre; .gitignore baks/snapshots; Carl: git gc / historie-trim | F11 | 1 t + Carl |
| R10 | Docs-synk: guard-avsnittet, make_shareable, tallene, mobil-beslutning; TODO-komprimering til _arkiv à la CHANGELOG | F10 | 1–2 t |
| R11 | Hub fase 1: CSS/JS ut i egne filer, konstanter samlet; ikke bigbang | F7 ned | 0,5–1 d |
| R12 | Senere: 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.
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.
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).
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:
| System | Motor | Tier-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 |
| Race | execution-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.
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.
`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.
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.
Dette er gjennomgangens viktigste enkeltfunn, detaljer i §4. Nevnes her fordi det bryter med frys-løftet i §4.2.
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.
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).
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.
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.
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.
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.
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.
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.
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.)
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.
`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.
`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.
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.
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:
| # | Tiltak | Hvorfor | Innsats |
|---|---|---|---|
| 1 | Guard `round(None)`/`raw` i return-blokka til `score_session_typed_v2` | «Ingen skår»-stien krasjer i stedet for å returnere (F1) | 2 linjer |
| 2 | Frys-vern for langtur: `langtur_score*` + `longrun_class` inn i `FROZEN_CORE_FIELDS`, enrich hopper skår for `_frozen`, rett stale FORCE-kommentar, pytest-vakt | Frosne langtur-skår kan i dag drifte stille ved neste formel-/zones-endring (F3) | liten |
| 3 | Rut `persist_quality_scores`-skrivet gjennom `safe_write_quality` | Daglig skriv uten snapshot/rollback og utenom vaktene (F2) | 3 linjer |
| 4 | Fjern gjenværende fabrikkerte konstanter: 45/15-5.0, etb-tidligretur 5.0/7.0/6.0, ctx-default 7.0 → None | Samme 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 oppdateres | 1200–1800 vs ≥2000 ord og 8 vs 10 seksjoner i samtidig omløp (P-A) | flytt + 2 pekere |
| 6 | Modell-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 |
| 7 | Synk `_TEMPLATE.md` med 15.07-reglene (`training_load_pre`, captured_at) + fjern duplisert seksjonsliste fra instruksen | To 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 |
| 10 | Langtur: manglende måling → komponent ut + renormaliser (ikke 5); avklar `min(vol, inten)` mot intensjonen; merk `inten=8`-antagelsen | Samme «ingen fabrikkerte tall»-linje som kvalitetssiden (§4) | middels |
| 11 | Tier-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 |
| 12 | Wordcheck generalisert til kvalitetsøkt-prosa + `prosa_queue --check` som ikke-kritisk sync-vakthund | QA-asymmetri; stale prosa oppdages i dag manuelt (P-E) | middels |
| 13 | Stopp `_plan_completion_multiplier`-lekkasjen til quality.json | Skår-intern tilstand i datalaget (F7) | liten |
| 14 | Rett «~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.
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.
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).
| Måling | Verdi |
|---|---|
| hub.html | 2 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-en | RO_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 fil | 1,5 s til load — akseptabelt; Cloudflare-cache gjør resten |
| Sidehøyder @1440 | Rolige **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-shadow | 21 / 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 farger | 114 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-konfig | 22 tooltip-blokker, 20 unike — ingen `Chart.defaults`, ingen felles graf-komponent |
| Breakpoints | 720 px ×4, 700 ×2, 640, 900, 1100 — fem ulike grenser |
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)
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).
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):
| Kategori | Lys | Mørk |
|---|---|---|
| rolig | `#3F9D6B` | `#4EA576` |
| langtur | `#3F77C2` | `#5B93DB` |
| kvalitet | `#C24E4E` | `#DB6B6B` |
| styrke | `#8873CC` | `#9683D6` |
| race | `#A98428` | `#B8862F` |
| hvil/annet | nø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.
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».
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.
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).
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.
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.
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)
| Pri | Hva | Innsats |
|---|---|---|
| **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-labels | 3–4 t |
| **P2** | **hubChart()-utrulling** (mockup 2): Wellness først (10 grafer), så Historikk/Analyser/PR; felles tooltip/akser/palett; dark-refresh-hook | 4–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 F9 | 2 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.
`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.
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.
Ø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.
Ø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.
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.
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).
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.
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).
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.
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.
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.
| Funn | Må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-panelet | 20 PNG-er til (PMC 8 · volum 7 · soner 5) + 2 Chart.js-grafer + 2 enkelt-PNG |
| Plan-undertaben | Viser `TRAINING_PLAN.md` sist endret **15. mai** («Fase 0 → Fase 1») — utdatert ved siden av spikret blokkplan |
| Ukesrapporter | Siste rapport = **W22 (mai)**. Rotårsak: `snapshot_week_plan.py` kjøres ikke i sync → `build_week_report` feiler stille hver dag siden W24 |
| Mobil-hub | 8 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).
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.
T1. 8 → 5 undertabs:
| Ny | Innhold | Absorberer |
|---|---|---|
| 📅 **Uka & kalender** | Avvikstabellen (Denne uka) øverst + 4-ukers kalenderen under | Kalender + Denne uka |
| 🗺️ **Blokkplan** | Som i dag + T4-KPI-er | — |
| 🔥 **Historikk & form** | Intensity-grid · ETT volum-modul · soner · PMC · CTL-projeksjon | Historikk + CTL/ATL |
| 📈 **Ukesrapporter** | Som i dag, men med T5-fiks | — |
| ⚙️ **Øktformer & regler** | Som i dag + T8 | Plan (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)
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.
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.
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).
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)
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)
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)
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)
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)
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.
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)
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)
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)
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.
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.