Nutritional recommendations during endurance exercise are complex: they depend on exercise duration, intensity, discipline, environmental conditions, individual body composition, and the athlete's strategic goals. Current sport-science guidelines provide evidence-based ranges (e.g., 30–90 g/h carbohydrate for events lasting 1–3+ hours), but translating these guidelines into personalized, session-specific recommendations requires interpolation across multiple variables simultaneously.
The Wattness nutrition engine is a deterministic, rule-based system that computes carbohydrate intake targets (g/h), hydration rates (ml/h), and sodium requirements (mg/h) for each training session. Unlike machine-learning approaches, the engine encodes sport-science knowledge directly through parameterized curves and modifiers, making its behavior transparent and auditable.
This benchmark evaluates whether the engine's outputs consistently fall within expert-validated ranges across a comprehensive set of scenarios. We adopt a range-conformance methodology: for each scenario, a sport-science expert defines acceptable minimum and maximum values, and the engine's output is checked against those bounds.
The benchmark comprises 42 training scenarios spanning 7 axes of variation:
| Axis | Values Covered | n |
|---|---|---|
| Discipline | Bike, Run, Swim | 3 |
| Duration | 45 min – 300 min (7 levels) | 7 |
| Intensity | Tier 1 (i1) through Tier 5 (i6) | 5 |
| Temperature | Cool (≤10°C), Temperate (15–25°C), Hot (≥30°C) | 3 |
| Branch | Performance, Train-Low, Gut Training, Race Protocol | 4 |
| Body Weight | 55 kg, 70 kg, 85 kg | 3 |
| Special | Double session, Aero position, Custom sweat rate, GT weeks 1–9 | 4 |
Engine constants. The engine's internal parameterization encodes the current sport-science consensus. For carbohydrates, multi-point interpolation curves define min/max intake targets as a function of duration for each intensity tier.
Published literature. Hydration ranges follow Sawka et al. (2007) and Baker (2017), with base rates scaled by discipline-specific sweat coefficients. The 90 g/h carbohydrate cap for non-expert athletes aligns with the glucose+fructose co-ingestion limit, while the 120 g/h absolute cap reflects recent ultra-endurance data.
Expert validation. All 42 expected ranges were reviewed by a sport-science expert with 15+ years of triathlon-specific nutrition coaching.
| Metric | Definition |
|---|---|
| Hit Rate | Percentage of scenarios where engine output falls within expected [min, max] |
| Overshoot Rate | Output exceeds max (risk: GI distress) |
| Undershoot Rate | Output below min (risk: under-fueling) |
| Mean Deviation | Average difference between actual and expected midpoints |
| Safety Violations | Scenarios tagged safety that fail (zero-tolerance) |
| Dimension | n | Hit Rate | Overshoot | Undershoot | Mean Dev. |
|---|---|---|---|---|---|
| Carbohydrates | 42 | 100% | 0% | 0% | −0.02 g/h |
| Hydration | 42 | 100% | 0% | 0% | +0.04 ml/h |
| Sodium | 42 | 100% | 0% | 0% | 0 mg/h |
| Overall | 126 | 100% | 0% | 0% | — |
| Discipline | n | Carbs | Hydration | Sodium |
|---|---|---|---|---|
| Bike | 33 | 100% | 100% | 100% |
| Run | 5 | 100% | 100% | 100% |
| Swim | 4 | 100% | 100% | 100% |
| Duration | n | Carbs | Hydration | Sodium |
|---|---|---|---|---|
| Short (< 90 min) | 10 | 100% | 100% | 100% |
| Medium (90–180 min) | 27 | 100% | 100% | 100% |
| Long (> 180 min) | 5 | 100% | 100% | 100% |
| Temperature | n | Carbs | Hydration | Sodium |
|---|---|---|---|---|
| Cool (≤10°C) | 5 | 100% | 100% | 100% |
| Temperate (15–25°C) | 30 | 100% | 100% | 100% |
| Hot (≥30°C) | 7 | 100% | 100% | 100% |
Safety scenarios enforce hard constraints that must never be violated, regardless of input combinations.
| Safety Scenario | Constraint Verified | Status |
|---|---|---|
| Train-Low Zero Carbs | Train-Low branch always outputs 0 g/h carbs | PASS |
| Non-Expert Cap at 90 g/h | Non-expert context caps carbohydrate at 90 g/h | PASS |
| Recovery Zero Carbs | Recovery sessions (Tier 1) output 0 g/h | PASS |
| Gut Training Week 1 Cap | GT week 1 targets 60 g/h with max at 70 g/h | PASS |
| Concentration Warning | High carb + low hydration triggers warning (>90 g/L) | PASS |
| Non-Negative Outputs | Carbohydrate output never negative | PASS |
To quantify the contribution of each engine component, we ran 5 ablation variants that each disable a single feature while keeping the rest intact.
| Ablation Variant | Carbs | Hydration | Sodium | Overall | Safety |
|---|---|---|---|---|---|
| Full engine (baseline) | 100% | 100% | 100% | 100% | 0 |
| No discipline modifier | 85.7% | 78.6% | 100% | 88.1% | 1 |
| No weight scaling | 100% | 81.0% | 100% | 93.7% | 4 |
| No polarization hydration | 100% | 64.3% | 100% | 88.1% | 4 |
| Flat carb at 60 g/h | 71.4% | 100% | 100% | 90.5% | 3 |
| No branch modifier | 73.8% | 100% | 100% | 91.3% | 3 |
Intensity-dependent hydration scaling has the largest isolated impact on hydration accuracy (−35.7% hit rate). The low/moderate/high multipliers are essential for differentiating sweat losses across intensity levels.
Multi-point carbohydrate curves (vs. a flat 60 g/h fallback) reduce carbohydrate accuracy by 28.6%. This confirms that linear interpolation between duration-specific anchor points better reflects progressive carbohydrate oxidation capacity.
Nutritional branch modifiers (train-low = 0, gut training override, race = 1.15×) contribute 26.2% to carb accuracy. Without these, the engine cannot differentiate between metabolic adaptation and performance-fueling sessions.
Discipline-specific modifiers (run 0.85× carbs / 1.15× hydration; swim 0.6× / 0.7×) affect both dimensions. The reduced gastric tolerance during running and unique thermoregulatory environment of swimming require distinct scaling.
Weight-based hydration scaling impacts hydration only (−19%). Carbohydrate recommendations are not scaled by body weight, reflecting that intestinal absorption is the rate-limiting factor for exogenous carbohydrate oxidation.
The race-day planner generates segmented nutrition plans (pre-race, swim, T1, bike, T2, run) for triathlon races from sprint to Ironman and ultra distances. We validated 10 scenarios with 138 assertions.
| Scenario | Distance | Category | Temp. | Assertions | Status |
|---|---|---|---|---|---|
| IM Elite | Ironman | Elite | Temperate | 17 | PASS |
| IM Age-Grouper | Ironman | Age-Grouper | Temperate | 17 | PASS |
| IM Beginner | Ironman | Beginner | Temperate | 12 | PASS |
| 70.3 Competitive | Half-IM | Competitive | Temperate | 15 | PASS |
| Sprint Age-Grouper | Sprint | Age-Grouper | Temperate | 11 | PASS |
| Olympic Elite | Olympic | Elite | Temperate | 12 | PASS |
| IM Competitive (Hot) | Ironman | Competitive | Hot | 15 | PASS |
| IM AG + GT Cap | Ironman | Age-Grouper | Temperate | 12 | PASS |
| Ultra Competitive | Ultra | Competitive | Temperate | 16 | PASS |
| 70.3 Beginner + GT | Half-IM | Beginner→AG | Temperate | 11 | PASS |
Every race plan is checked for: correct 6-segment structure (pre-race → swim → T1 → bike → T2 → run), zero carbs during swim, positive durations, segment-total consistency, contingency protocols, and category-appropriate carbohydrate targets.
The benchmark is fully automated and deterministic. All scenarios, expected ranges, and assertions are version-controlled. The engine contains no randomness, no API calls, and no external dependencies at runtime.
pnpm --filter @wattson/core nutrition:benchmark -- --ablation
Key limitations:
Nutrition module validated on a reproducible internal benchmark, featuring multi-variable scenarios, safety gates, and recommendation ranges reviewed by domain expertise and aligned with current literature.
[1] Jeukendrup AE. A step towards personalized sports nutrition: carbohydrate intake during exercise. Sports Med. 2014;44(Suppl 1):S25–S33.
[2] Thomas DT, Erdman KA, Burke LM. Position of the Academy of Nutrition and Dietetics. J Acad Nutr Diet. 2016;116(3):501–528.
[3] Podlogar T, Wallis GA. New horizons in carbohydrate research. Sports Med. 2022;52(Suppl 1):5–23.
[4] Sawka MN et al. ACSM position stand: Exercise and fluid replacement. Med Sci Sports Exerc. 2007;39(2):377–390.
[5] Baker LB. Sweating rate and sweat sodium concentration in athletes. Sports Med. 2017;47(Suppl 1):111–128.
[6] Rehrer NJ et al. Gastric emptying, absorption, and carbohydrate oxidation. J Appl Physiol. 1992;72(2):468–475.
[7] Burke LM. Fueling strategies to optimize performance. Scand J Med Sci Sports. 2010;20(Suppl 2):48–58.
[8] Pfeiffer B et al. Nutritional intake and gastrointestinal problems. Med Sci Sports Exerc. 2012;44(2):344–351.