{"markdown":"# Brevet — Methods\n\n> The science behind every Coach recommendation: which models we\n> use, which papers we cite, where the limits are. Brevet is a\n> wellness / training-coaching platform — explicitly **not** a\n> medical device under EU MDR.\n\nThis page intentionally describes the science, not the\nimplementation. Exact thresholds, consensus gates, and module\nlayout are tuned per cohort and revised as we learn.\n\nOne promise frames everything below: **when we cannot estimate\nsomething honestly, we say nothing** — no fabricated precision, no\ncited model the code doesn't actually implement, and \"modeled\"\nnever dressed up as \"measured\".\n\n---\n\n## 1. Virtual Recovery Score (VRS)\n\n**What the rider sees.** A 0–100 score with a colour-band (green /\nyellow / red), a confidence indicator, and a per-component\nbreakdown that expands on tap.\n\n**Method.** A layered score built from autonomic, sleep, recovery-\nkinetics, ride, and life-event signals, gated against a tier-aware\nACWR floor and an illness / life-event veto. Each component\ncontributes within a bounded range so a single noisy signal cannot\ndominate the score.\n\n**Citations underpinning the components.**\n\n* CTL / ATL / Form (training stress balance) — Banister 1975.\n* ACWR (acute:chronic workload ratio) — Gabbett 2016 / Williams 2017.\n* HRV vs the rider's own individualized baseline band (ln rMSSD) —\n  Plews 2013. See §2 — this is one of the things we do better than\n  most.\n* HRV balance (7-day / 28-day) — Plews 2017.\n* Resting heart-rate z-score — Buchheit 2014.\n* Respiratory rate as wellness signal — Schmitt 2013.\n* Sleep duration / debt — Lastella 2018.\n* Recovery kinetics (multi-week rebound trend) — Plews & Laursen 2018.\n* W' balance (anaerobic depletion / recovery) — Skiba 2012.\n* Decoupling (HR drift vs power) — Coggan 2003.\n* Session-RPE (subjective load vs prescribed intensity) — Foster 2001.\n\n**Confidence + provisional flag.** When the number of available\nsignals or the model's confidence drops below an internally tuned\ngate, the score is flagged **provisional** — the UI dims the ring\nand prepends a \"PROVISIONAL\" badge. Riders should expect this\nduring the first 14 days of use and after any extended gap.\n\n**HRV circadian bias.** Evening HRV samples overstate variability\nby ~12 % on average compared to morning samples (Plews 2017). When\nthe rider's sample timing is evening-dominant the morning composer\nsurfaces a hint; the engine does not correct silently.\n\n---\n\n## 2. Individualized HRV readiness band\n\n**What the rider sees.** Plain language tied to *their own* normal:\n\"HRV 9 % below your baseline — lower than usual for you\", \"right in\nyour usual range\", or \"well recovered\". The exact same verdict\ndrives the morning briefing, today's workout, and the readiness\nscore — one voice, never two surfaces disagreeing about the same\nheartbeat.\n\n**Why a fixed percentage is the wrong tool — and what we do\ninstead.** Most platforms flag HRV against a one-size cut-off\n(\"below 70 % of baseline\"). But day-to-day HRV variability differs\nenormously between people. The *same* 70 % cut sits at roughly two\nstandard deviations for a high-variability rider but seven for a\nvery steady one — so it over-flags the first and, more dangerously,\n*never fires* for the second, hiding the meaningful dips of exactly\nthe most consistent athletes. Brevet instead judges every rider\nagainst their **own** baseline *and their own spread*. This is the\nestablished sports-science position, not our invention (Buchheit\n2014; Plews et al. 2012).\n\n**Method.** Resting / nocturnal RMSSD is natural-log-transformed\n(ln rMSSD) — the field standard, because raw RMSSD is right-skewed\n(Plews 2013; al Haddad 2011). Each rider's baseline carries not\njust a rolling mean but their *own* day-to-day spread; for a\nlog-normal quantity that ln-space spread is, to first order, the\nrider's within-athlete coefficient of variation. Today's reading is\nexpressed as a z-score in that personal spread — which *is* the\nindividualized \"smallest worthwhile change\" band the literature\nrecommends (≈0.5–1 × CV; Flatt & Esco 2015; Buchheit 2014, who is\ncandid that the exact multiplier is a reasoned choice, not a proven\nconstant). Inside the band is normal *for that rider*; clearly\nbelow it eases the day.\n\n**Guardrails that keep it honest.**\n\n* **Settling period.** Until a rider has enough readings\n  (~2 weeks at ≥3/week; Plews et al. 2014) the band reports\n  \"still learning your normal\" and raises no deviation alarm — a\n  thin baseline never triggers a downgrade.\n* **Saturation check.** In very fit riders a low HRV alongside an\n  unusually low resting heart rate is ambiguous, not automatically\n  fatigue (Goldberger 2001). The band flags this so the Coach\n  hedges rather than over-reacting.\n* **One metric family.** Apple Health reports HRV as SDNN; most\n  other wearables report RMSSD; despite the shared millisecond unit\n  they are not interchangeable, so a rider's baseline is built\n  within one metric and never pools the two.\n* **No frequency-domain \"balance\".** The LF/HF ratio is excluded by\n  design — it is among the least reliable HRV measures and does not\n  validly index \"sympatho-vagal balance\" (Billman 2013).\n\n**Citations.** Plews 2013 / 2014; Buchheit 2014; Flatt & Esco 2015;\nal Haddad 2011; Billman 2013; Goldberger 2001.\n\n**Honest limits.** HRV is noisy: a single day reflects last night\n(a late drink, short sleep) as much as training. We act on the\ntrend across the band, never on one spike, and the band is a\n*training-readiness* signal relative to your own history — not a\nhealth monitor, and not a diagnosis.\n\n---\n\n## 3. Acute:Chronic Workload Ratio (ACWR)\n\n**What the rider sees.** A small ratio next to the weekly briefing,\ncolour-banded by a tier-aware risk zone.\n\n**Method.** Two computations run side by side:\n\n* **SMA** (Simple Moving Average): 7-day acute over 28-day chronic.\n  Gabbett 2016.\n* **EWMA** (Exponentially Weighted Moving Average): Banister 1975 /\n  Williams 2017 / Lolli 2019. Less noisy than SMA, handles single-\n  spike days better.\n\n**Tier-aware risk bands.** Bands are calibrated per athlete\nexperience tier (beginner → recreational → trained → elite) so a\nspike that is genuinely risky for a beginner is recognised as\nnormal load for an elite. Tier thresholds are tuned from cohort\ndata and revised over time.\n\n**Load-quality axis.** When a disproportionate share of acute-\nwindow load was performed at threshold intensity or above, the\nzone shifts one step toward higher risk. Coggan 2003 framing:\nintensity-driven overload is more dangerous than volume-driven\noverload.\n\n---\n\n## 4. Intelligence engine — correlations + trends\n\n**What the rider sees.** Weekly insights of the form *\"Your\nefficiency factor improved 5.2 % over 28 days (95 % CI: 2.1–8.3 %,\np<0.01, n=22 rides)\"* — every trend comes with the statistical\nevidence behind it.\n\n**Method.**\n\n* **Pearson + Spearman correlation** with exact p-values, minimum\n  sample size for any reported correlation.\n* **Bootstrap slope confidence interval** for trend direction —\n  trends are only declared improving or declining when the\n  bootstrap CI excludes zero (Efron & Tibshirani 1993).\n* **Benjamini–Hochberg FDR correction** across the multi-hypothesis\n  surface at α=0.05 (Benjamini & Hochberg 1995).\n\nTier-aware risk thresholds match the ACWR bands above — the\nacceptable form floor varies with experience.\n\n**Drawn as honestly as computed.** Trend charts use a date-true\ntime axis (a six-week break occupies six weeks of chart, not one\nride-slot — equal-index spacing would make the visual slope an\nartifact of ride frequency), and the post-ride power trace renders\na per-bucket min/max envelope so the printed MAX always lies on\nthe drawn curve. A chart that contradicts its own numbers is a\nsmall lie; we don't tell it.\n\n---\n\n## 5. Plan generator — periodization that never ends\n\n**What the rider sees.** A continuous, rolling training plan with\nweekly phase labels, daily workout prescriptions, and a season\ncockpit ribbon. The plan extends itself week by week — it never\nsimply \"runs out\".\n\n**Method.** Phase state-machine `BASE → BUILD → PEAK → TAPER →\nRACE → RECOVERY`, with three guard conditions on every weekly\ntransition:\n\n* **CTL ramp guard** — tier-specific weekly ramp ceiling.\n* **ACWR guard** — blocks forward progression when ACWR is in the\n  high-risk zone.\n* **Regression detector** — a BUILD or PEAK rider with a falling\n  CTL streak is offered a BASE retreat instead of pushing through.\n\n**Intensity density scales with the athlete.** Trained and elite\nriders with five or more training days carry **two** hard sessions\nper loading week — Seiler's polarized model at that volume implies\n2–3 high-intensity sessions, and a single weekly quality day is\nnot a credible elite prescription. Beginners and recreational\nriders keep the gentler one-hard-day structure. Rest-day spacing\nand the no-three-hard-days-in-a-row guarantee hold at every tier.\n\n**Progression inside the block is real, not implied.** Within a\nloading block, the selected quality session's **time at target\nintensity** rises week over week (the adaptive dose; Buchheit &\nLaursen 2013) and resets on the recovery week — so week 3 of a\nVO2max block can never quietly serve a lighter session than week 1\njust because the TSS arithmetic happened to match.\n\n**Time-in-zone targets, calibrated as time.** The weekly\ndistribution audit compares Z1/Z2 vs Z3 vs Z4+ **time** against\nthe phase's target style. The targets are calibrated for\ntime-in-zone, not Seiler's session-count headline — by time, a\ncorrectly polarized elite spends only ~3–8 % above the second\nthreshold (Seiler & Kjerland 2006; Stöggl & Sperlich 2015; Treff\n2019), and a model that expected 15 % would mislabel exactly the\nriders doing it right.\n\n**The learned aerobic threshold steers the easy days.** When a\nrider has a measured first threshold (manual entry or the HRV ramp\ntest in §8), recovery- and endurance-day watt ceilings cap at\n*their* LT1 instead of a population fraction of CP — and the cap\nonly ever makes \"easy\" easier, never harder. Easy days that are\nactually easy are the most under-coached intervention in endurance\nsport.\n\n**Race specificity.** Distance + terrain shape the phase\ndistribution — a flat criterium and a 200 km hilly gravel race do\nnot get the same plan.\n\n**Tier-aware prescription mode.** Beginners are led by HR-Reserve %\nbecause their power numbers are too volatile to anchor a workout;\nelites are led by power; everyone in between gets the relevant\naxis side by side. Lead axis and ordered fallbacks are emitted on\nevery plan day.\n\n---\n\n## 6. Critical Power detection\n\n**What the rider sees.** A CP/W' estimate with a confidence tag\n(lab-measured, validated test recent, validated test stale,\nestimated, default). When the tag is \"default\" or \"estimated\",\nplan prescription is forced HR-led regardless of tier.\n\n**Method.** Three independent estimators run on a recent-ride peak\nprofile, then a consensus gate requires the most recent detections\nto agree before a change is applied:\n\n* **3-min vs 12-min** two-point estimate (Monod & Scherrer 1965).\n* **Power-duration hyperbola fit** — the 2-parameter\n  Monod–Scherrer form, fit strictly over severe-domain efforts\n  (~2–15 min; Jones 2010, Vanhatalo 2011). Efforts at or below CP\n  (long climbs, hour records) are excluded from the hyperbola by\n  construction: including them biases CP down and W' up, and W'\n  feeds in-ride pacing and the readiness model. We deliberately do\n  **not** claim the 3-parameter Morton model — the short-duration\n  ceiling is handled by an explicit Pmax cap, and we say so.\n* **Linear work-distance** fallback for sparse data.\n\nThe fit's confidence requires at least two distinct severe-domain\nmaxes — a curve carried by one sprint and one long ride alone is\nlabelled low-confidence regardless of how well it fits.\n\nA per-rider cooldown prevents CP from oscillating on noisy data.\nLarge jumps force-apply immediately so a clear breakthrough isn't\nheld back.\n\n---\n\n## 7. Stop-sign engine — anomaly + data-deviation\n\n**What the rider sees.** A red banner on the morning briefing when\nthe engine detects an anomaly the rider should consider before\ntraining (RHR elevated for several days, HRV collapsed, unusual\nrespiratory rate, body temperature elevation, etc.).\n\n**Method.** Modified Z-score (MAD-based) outlier rejection over a\nrolling baseline window with a chronic comparison (Iglewicz &\nHoaglin 1993). Consecutive-day streak detection respects calendar-\nday gaps.\n\nFive language rules apply to every Stop-Sign emission:\n\n> Descriptive, never diagnostic. No condition names. The user\n> always decides. Consistent wellness framing. No medical-accuracy\n> claims.\n\nEach Stop-Sign emission is descriptive (\"RHR is X bpm above your\nbaseline\") and never diagnostic (\"you have condition Y\"). The\nrider always has a one-tap override.\n\n---\n\n## 8. Aerobic threshold + autonomic load from HRV (DFA-α1)\n\n**What it is.** Beat-to-beat heart-rate variability carries more than\na morning readiness number. From a chest strap that streams RR\nintervals (e.g. Polar H10), Brevet computes the short-term *detrended\nfluctuation analysis* scaling exponent, **DFA-α1** — a measure of the\nfractal correlation in the heartbeat. At easy efforts α1 sits near\n1.0 (correlated, \"relaxed\"); as intensity rises it falls toward 0.5\n(uncorrelated), and the power at which it crosses well-known cut-offs\nmarks ventilatory/lactate-threshold proxies.\n\n**Aerobic threshold (HRVT1).** During a *guided* sub-maximal ramp —\nsix steady 3-minute steps the app controls — α1 is computed on a\nsliding window and paired with the average power in each window. The\npower where the (power, α1) curve crosses **α1 = 0.75** estimates the\n**first threshold (HRVT1 ≈ LT1 / aerobic threshold)**; the **0.50**\ncrossing estimates the second. Cut-offs follow Rogers et al. 2021;\nthe artifact-correction and windowing follow Lipponen & Tarvainen\n2019 (RR correction) and Peng et al. 1995 (DFA). The estimate feeds\nthe **same** canonical threshold store (`lt1_service`) the\nHR-power-deflection estimator writes to — one aerobic-threshold\nnumber, blended, never a parallel value. The differentiator vs other\nplatforms: *we control the ramp*, so the curve is clean enough to\nread instead of mined from noisy free rides.\n\n**And the number actually trains you.** The learned threshold is\nnot a trophy in the profile: it caps the easy-day watt windows\n(§5), anchors the race-readiness threshold panel, and the profile\nshows where it came from and from how many rides. A test that\nchanges nothing the next morning is theatre; this one changes the\nwatts you're asked to ride.\n\n**Autonomic load across a ride.** On *any* RR ride (not just the\nramp), the same single α1 pass yields a trajectory: how α1 drifted\nfrom the first third of the session to the last. A ride that holds\nα1 high is autonomically \"cheap\"; one where α1 collapses early \"went\ndeep\". This is the nervous-system complement to the power-based\ndurability score (cardiac drift vs power fade) — start-relative, so a\nnaturally low-HRV rider isn't mislabelled for a steady easy day.\n\n**Honest limits.** A DFA-α1 threshold is a **group-level** estimate,\nnot an individually-exact lab value — confidence is dominated by how\ncleanly and monotonically α1 declined across the ramp and is **capped\nat 0.85** no matter how textbook the curve. High-intensity α1 is the\nmost artifact-fragile region (ectopic beats distort it), so the\nsecond (0.50) crossing is treated as the weaker of the two and is\n**not** allowed to move the rider's Critical Power. RR quality gates\nevery window (artifact rate ≤ 5 %); below that the estimate is\ndiscarded rather than guessed.\n\n---\n\n## 9. Durability — how your engine holds up deep into a ride\n\n**What the rider sees.** A durability score per ride, a power-fade\ncurve banded by accumulated work (kJ), a repeat-effort retention\nread on interval days, and Coach prose when the pattern shifts.\n\n**Why it matters.** Fresh 5-minute power wins lab tests; power\nafter 2 000 kJ wins races. Current research treats fatigue-resisted\npower as its own trainable quality, distinct from fresh CP\n(Maunder 2021; Spragg 2023 in professional cyclists), and it is\nhighly individual.\n\n**Method — three independent reads, one verdict.**\n\n* **kJ-banded power fade.** Best efforts are compared across\n  accumulated-work bands within the same ride, so \"how much does\n  your top end fade after 1 000 / 1 500 / 2 000 kJ\" becomes a curve\n  rather than an anecdote. The curve is persisted per ride and\n  trends over the season.\n* **Repeat-effort retention (indoor-native).** On ERG interval\n  days the trainer holds watts flat — so raw power can't show\n  fatigue. Instead we read the **heart-rate cost of the same\n  watts** across reps (Pw:HR). Later reps at the same power and\n  rising HR = the aerobic system paying more for the same work.\n  This makes durability trainable and measurable through a whole\n  indoor winter.\n* **Warmup-excluded decoupling.** Cardiac drift vs power over the\n  ride (Coggan 2003), with the first minutes excluded — early HR\n  lag is a warmup artifact, and folding it into the baseline is\n  the most common way platforms fabricate \"drift\". One definition,\n  used live, post-ride, and in trends — never three disagreeing\n  numbers.\n\n**The drift doesn't just get scored — it acts, in-ride and ahead.**\nThe same warmup-excluded decoupling drives two controls beyond the\npost-ride number:\n\n* **In-ride governor (aerobic days).** On a steady endurance / recovery\n  block the trainer holds the *prescribed* power and eases it — in small\n  steps, with a one-tap \"hold power\" override always on screen — **only**\n  when decoupling climbs past a sustained distress threshold (≈8 %, the\n  point Friel / Coggan call no-longer-aerobic-specific). A few beats of\n  benign thermoregulatory drift are left alone, on purpose: protecting the\n  dose matters more than chasing a harmless climb. This is the inverse of a\n  naïve \"ride to heart rate\" mode (which eases power for *any* drift and\n  quietly under-doses the session). On hard days, where decoupling is\n  expected, the governor stays dormant.\n* **Pre-ride forecast.** From the rider's recent typical decoupling and\n  today's planned duration, the morning briefing forecasts the drift to\n  expect — \"about X % is normal for you on a ride this long\" — so a benign\n  climb is recognised, not chased. It says nothing below a few qualifying\n  rides of history.\n\nBoth are descriptive *training* signals tied to the rider's own recent\npattern, never a health readout, and the rider always holds the override.\n\n**Honest limits.** The *forward* prediction of how CP decays with\naccumulated kJ is currently a population-calibrated model\n(anchored in the spirit of Leo 2021 / Maunder 2021, not derived\nfrom them) — it is labelled **modeled**, never measured, and the\nper-rider measured fade curves above are the path to replacing it\nwith your own numbers. Research also indicates W' fades more than\nCP; a CP-only decay model understates that, and we say so rather\nthan pretend otherwise.\n\n---\n\n## 10. Fueling & substrate — demand first, then intake\n\n**What the rider sees.** A pre-ride fueling line (\"~65 g/h CHO, this\nsession digs to ~70 % glycogen\"), a daily CHO target periodised by\nthe plan day, a race-week protocol, and a morning note when\nyesterday left the tank low.\n\n**Method.**\n\n* **Substrate demand.** Session CHO/fat oxidation is integrated\n  over the prescribed intensity profile (crossover concept:\n  Brooks & Mercier 1994; San Millán & Brooks 2018 framing for the\n  FatMax region), scaled by the rider's glycolytic profile\n  (VLaMax, see §12). Demand is what the body *burns*.\n* **Gut-capped intake.** What you can *absorb* is a separate,\n  trainable ceiling (~60 g/h single-source, ~90+ g/h with a\n  2:1 → 1:0.8 glucose:fructose mix at higher rates — Jeukendrup\n  2014). **Burned carbohydrate never inflates the intake\n  prescription** — demand explains the *why*, the gut sets the\n  *how much*. On long hard days the honest answer is \"you will\n  finish in deficit\"; we print it instead of prescribing an\n  impossible 120 g/h.\n* **Glycogen across the ride — and across midnight.** A bounded\n  glycogen model simulates store depletion through the session at\n  the prescribed intake. Since 2026 the simulation **starts from\n  this morning's estimated stores**, not a magically full tank:\n  yesterday's measured burn minus logged (or conservatively\n  assumed) overnight resynthesis (Burke 2017's 24–48 h window).\n  The day after a big day is the highest-leverage fueling moment;\n  a model that resets at midnight cannot see it.\n* **Demand-aware low-fuel nudge.** The pre-quality-day check\n  compares logged intake against a floor that *rises with\n  yesterday's burn* (base 2 g/kg, capped at 4 g/kg — deliberately\n  conservative against Burke 2011's 5–7 g/kg heavy-day band). A\n  flat floor fires identically after a rest day and after a\n  280-gram-burn day — the accidental \"train-low\" trap\n  (Stellingwerff 2021) a demand-blind check cannot detect.\n  Riders on a declared fat-loss goal are exempted: their deficit\n  is the prescription, and warning them out of it would be wrong.\n* **Race week.** Day-by-day carb-load protocol (up to 10–12 g/kg\n  on the final loading days), day-0 breakfast ~3 h out, and a\n  caffeine bracket of 3–6 mg/kg ~60 min before the start (Burke\n  2008; Grgic 2020 meta-analysis) — framed by habituation, always\n  the rider's call.\n* **Evidence-graded ergogenics, honestly gated.** Dietary nitrate\n  (~6–8 mmol, 2–3 h pre-start; Jones 2018, AIS Group A) leads —\n  the rare aid that benefits everyday athletes *more* than elites.\n  Sodium bicarbonate (0.2–0.3 g/kg; Grgic 2021 meta) appears\n  **only** for short high-intensity events, always with the\n  GI-distress caveat and the test-in-training-first rule — the same\n  honesty pattern as the gut-training ramp. Nothing here is a\n  prescription; everything is \"what evidence-graded practice looks\n  like, your call\".\n\n**Honest limits.** Substrate models are models: kitchen scales and\ngut feel beat any simulation. Everything here is descriptive\nfueling guidance for sport, not dietary or medical advice.\n\n---\n\n## 11. Stimulus-equivalent cross-training\n\n**What the rider sees.** For today's prescribed session, matched\nalternatives in running, swimming, hiking, rowing — each with an\nintensity target (HR zone / RPE), an equivalent duration, and an\nhonest ≈TSS. Plus a strength slot sized to the day.\n\n**Method.** Sessions are mapped by **physiological intent, not by\nTSS** — a 60-minute Z2 ride and a ~45-minute Z2 run produce\ndifferent TSS numbers but the same aerobic stimulus (mitochondrial\nsignal, fat metabolism), so the substitute is matched on purpose\nand HR/RPE, with per-sport duration ratios reflecting impact load\n(Friel's cross-sport mapping). Strength placement follows the\nconcurrent-training interference literature (Mujika & Padilla\n2003; Bompa): the rest day is the *best* strength window, easy\ndays take light work, and on hard days the honest advice is to\nskip it. Completing an aerobic substitute (synced from Apple\nHealth / Health Connect) closes the aerobic plan day automatically\n— a swim threshold set is *not* a bike VO2max session, so quality\ndays never auto-close from cross-training.\n\n---\n\n## 12. Glycolytic profile (VLaMax) — personalisation with a caveat\n\n**What the rider sees.** A sprinter ↔ diesel profile that shifts\nfueling (higher CHO flux for high-VLaMax riders at the same power)\nand shapes race-specific build prescriptions.\n\n**Method.** Where no lab value exists, the glycolytic profile is\n*estimated* from the rider's sprint-vs-threshold power signature\nand updated after rides with genuine sprint content.\n\n**Honest limits.** ERG-mode riding suppresses true sprint\nexpression, so an indoor-only signature is a **low-confidence\nproxy**, tagged as such — and a low-confidence VLaMax deliberately\n*dampens* how far it can move fueling numbers. A lab lactate test\nbeats the estimate; enter it and the estimate steps aside.\n\n---\n\n## 13. Outdoor rides — first-class, honestly graded\n\n**What the rider sees.** Imported rides (FIT files, Apple Health /\nHealth Connect) land on the correct local calendar day, count\ntoward the plan, and — when the day prescribed structured work —\ncarry a per-interval execution read with the planned steps drawn\nunder the actual power trace.\n\n**Method.**\n\n* **The athlete's day, not UTC's.** FIT device-local timestamps\n  (and the companion's timezone offset) date the ride on *your*\n  calendar day — an 18:00 ride in Denver is not tomorrow's\n  training.\n* **Plan-guided interval detection.** When the plan prescribed\n  reps, the power stream is searched for them with the detection\n  threshold derived from the *prescription itself* (midway between\n  prescribed recovery and work intensities). Each found rep is\n  graded against its prescribed target.\n* **The refusal rule.** If the detected rep count doesn't plausibly\n  match the prescription (a 4×6 ridden against a 5×5), the system\n  emits **nothing** — no fabricated adherence in either direction.\n  Detected reps are provenance-flagged and never feed the\n  ERG-assumption metrics (repeat-effort retention reads trainer-\n  held watts, not noisy road reps).\n* **Source priority on duplicates.** When the same ride arrives\n  twice (watch auto-sync + manual FIT upload), the richer source\n  wins deterministically and the summary copy is shadowed — never\n  double-counted, never order-dependent data loss.\n\n---\n\n## 14. Same-workout benchmark — proof you're improving\n\n**What the rider sees.** After a structured session: *\"Same workout\nas 3 weeks ago: +9 W per rep at −4 bpm across 5 reps — measurably\nstronger.\"*\n\n**Method.** This ride's work reps are aligned index-by-index\nagainst the *same workout's* previous attempt. Because ERG mode\nholds watts flat, a power-pinned comparison verdicts on the\n**heart-rate cost of the same power** — the physiologically\nmeaningful direction (same work, lower internal cost = aerobic\nimprovement). Structure mismatches refuse to compare; a single rep\nis an anecdote, not a benchmark; and a worse day is framed as what\nit is: *one data point, not a trend*.\n\n**Why we lead with it.** Same-session-at-lower-HR is the most\nrider-legible progress evidence that exists — more legible than\nCTL, and it works for riders who never do formal tests.\n\n---\n\n## 15. Per-athlete model fitting — held-out or it doesn't ship\n\n**What it is.** Population constants are honest defaults, not\ndestiny. Where the data supports it, Brevet fits model parameters\n*per rider* — currently the HRV-fatigue time constant, with the\nW'-balance recovery τ and durability decay on the same harness.\n\n**Method.** Every personal fit runs a **fit → validate → accept**\nloop: the candidate parameter must beat the population default on\n*held-out* data (not the data it was fitted on) before it is\nadopted. A fit that only explains the past doesn't get to steer\nthe future. Fits run on a weekly cycle; a rider with too little\nclean data simply keeps the well-tested default — silently, with\nno fake personalisation.\n\n**Honest limits.** This is the slowest feature we build, on\npurpose. Most \"AI-personalised\" claims in this market are a\npopulation curve with your name on it; we'd rather tell you the\ndefault is still active.\n\n---\n\n## 16. Adaptive session control — W'bal-titrated intervals\n\n**What the rider sees.** On a VO2 session the Coach can build, each\nhard interval ends when your modelled energy reserve (W'-balance)\ndrains to a target floor — that drain *is* the stimulus — instead of\non a fixed clock. The recovery between reps ends when the reserve has\nrecharged enough to repeat the effort, and the set finishes when you\ncan no longer reach the floor in time (true repeatability), rather\nthan after an arbitrary rep count. A persistent one-tap **\"hold the\nplan\"** control is always on screen: tap it and the session reverts to\nthe prescribed fixed durations. The rider always decides.\n\n**Method.** Each block is a small state machine with typed exit\nconditions; a classic fixed interval is just the special case \"exit\non time\". The reserve is the Skiba W'-balance model — W' depletes\nonly above Critical Power and reconstitutes below it on a recovery\ntime constant (Skiba, Chidnok, Vanhatalo & Jones 2012; Skiba et al.\n2015), the same model and the same per-rider τ used elsewhere on this\npage (§15), shared 1:1 between the in-ride engine and the post-ride\nanalysis. A **training-domain switch** is non-negotiable: a W'-balance\nfloor exit may arm **only** above CP (VO2 / anaerobic), where the\nreserve actually moves; aerobic work (endurance, tempo, sweet-spot,\nthreshold-at-CP) keeps duration as the dose and is never cut short by\nthis. Every dynamic block also carries a minimum-duration floor (so\nnoise can't end it early) and a maximum-duration ceiling (so the\nemergent duration is bounded) — which is what keeps the training-load\naccounting honest: the planned load is modelled from the *expected*\ndurations, so the ramp-rate guard isn't blinded by a variable session.\n\n**Honest limits.** W'-balance is a **model built on your *estimated*\nCP/W'**, not a measurement — the floor is only ever as trustworthy as\nthe test behind your CP. So this control **arms only when your CP is\nbacked by an actual test** (lab or a recent/stale field test, §6);\non an estimated or default CP it stays off and you simply ride the\nfixed-duration version, because titrating you to a floor derived from\na soft number is not something we'll do. The W'-balance reserve is\ncomputed from power, not from any live cardiac or DFA-α1 signal. (Live\n*decoupling* does drive the aerobic-day power governor in §9 — but this\nanaerobic interval floor stays power-only on purpose, and DFA-α1 stays\npost-ride by design, §8.) And the override above is not a courtesy: it\nis the design constraint that lets this feature exist at all.\n\n---\n\n## 17. What we don't claim\n\nBrevet does not claim:\n\n* Medical accuracy. Any \"validated against clinical marker X\" or\n  \"Y % accurate at detecting Z\" framing is excluded — that is\n  medical-device territory under EU MDR.\n* Early-warning detection of any condition.\n* Substitute for medical advice.\n* W'-balance precision. The in-ride reserve and its interval floors\n  (§16) are a *model* on your estimated CP/W', not a measured energy\n  state — useful for shaping a session, never a physiological readout.\n* Models we don't implement. If a citation appears on this page,\n  the thing it describes actually runs — and where we use a\n  simplification instead (see §6), we name it.\n\nThese are not lawyer-speak hedges — they are the design constraints\nthe engineering side respects.\n\n---\n\n## Feedback\n\nIf you spot a methodological issue, a wrong citation, or a\ncontradiction between two surfaces, write to `science@brevet.app`.\nWe read every message and revise the methods accordingly.\n","commit_sha":"unknown","commit_sha_short":"unknown"}