Nutrition daily plan
Generate the athlete's forward-looking daily nutrition plan.
This skill produces a standalone Markdown document at athlete/logs/daily-nutrition/YYYY-MM-DD.md. It is not an athlete-facing Telegram message. It writes the plan file, records a ## System event in the current canonical daily log, outputs only NO_REPLY in channel text, and exits.
Before writing into the canonical daily log, read and apply skills/athlete-daily-log/SKILL.md. Use its ## System table contract for the audit row.
Required read order
Read these sources before writing the plan. If a source is missing, continue and write [data unavailable - reason] where that evidence would have been used.
- Yesterday's canonical daily log:
athlete/logs/daily/YYYY-MM-DD.md - Today's canonical daily log:
athlete/logs/daily/YYYY-MM-DD.md, creating the daily log only if the workflow requires it - Today's calendar file:
athlete/calendar/YYYY-MM-DD.md, when present - Rolling 7-day plan:
athlete/rolling-7-day.md - TrainingPeaks planned and completed workout evidence, when available
- Athlete profile:
athlete/PROFILE.md - Season goals:
athlete/context/season-goals.md - Travel schedule:
athlete/context/travel-schedule.md - Delivery config:
athlete/delivery-config.md - Yesterday's daily nutrition plan:
athlete/logs/daily-nutrition/YYYY-MM-DD.md, when present - Recipe index and saved recipes:
athlete/recipes/ - Open-Meteo weather for the athlete's effective current location
- Race calendar:
athlete/context/race-calendar.md - Previous three daily logs for recurring nutrition gaps
- These references:
references/document-template.mdreferences/energy-target-methodology.mdreferences/timing-targets.mdreferences/meal-option-guidelines.mdreferences/product-verification.md
Output contract
Write exactly one daily plan file per run:
athlete/logs/daily-nutrition/YYYY-MM-DD.md
The file starts with this frontmatter, title, athlete identity block, and nutrition requirement notes:
---
label: YYYY-MM-DD
---
# Nutrition Plan
Name: **[athlete full name]**\
Date: [generated date in long form]
[Dietary and special nutrition requirement notes.]
Use # Nutrition Plan as the H1 even though canonical dated daily logs use date headings. This output is a standalone daily nutrition plan, not the canonical athlete-day log.
In the daily snapshot metadata table, use the generated date row as the Markdown table head row:
| Date {.whitespace-nowrap} | YYYY-MM-DD |
|---|---|
| **Training day type** | [easy / moderate / hard / race / rest] |
Section order
Use this order exactly:
- Frontmatter, title, athlete identity block, and nutrition requirement notes
- Daily snapshot metadata block
## Daily energy target## Full-day macro targets## Timing breakdown## Pre-[ride/session/race] meal ([timing]), omitted only when not applicable## During [ride/race] - [rate] g CHO per hour, omitted for sessions under 60 minutes and replaced by a one-line note## Post-[ride/session/race] recovery ([window]), omitted on rest days- Context-named dinner heading
## Evening snack ([timing])## Supplement and hydration notes## Travel-day pack list (for [today/tomorrow]), only when travel today or tomorrow is present## Carry-forward
Follow references/document-template.md for the canonical table shapes, wording density, Retype Column syntax, and conditional sections.
Keep references/document-template.md generic. It must not contain filled-in athlete names, calendar dates, workout names, locations, weather, foods, products, or nutrition constraints from a specific generated plan. Use bracketed placeholders for values that are athlete-, date-, workout-, location-, or restriction-specific.
Place a Markdown horizontal rule before every H2 section in the generated plan. The rule must be --- on its own line with one empty line above and one empty line below it. Do not add this separator before the H1 title or before H3 recipe option headings.
Calculation rules
Use references/energy-target-methodology.md for:
- Mifflin-St Jeor, Harris-Benedict revised, and Cunningham formulas, including when to use Harris-Benedict versus Cunningham as the second comparison column
- body-mass and FFM fallback handling
- energy availability floor logic
- macro g/kg rate selection
- overshoot logic and citation notes
Use references/timing-targets.md for per-window allocation by day type.
Before writing the plan, personally validate the arithmetic in ## Daily energy target, ## Full-day macro targets, and ## Timing breakdown. Do not treat the energy availability screen as automatically binding when FFM and training expenditure are estimated. After the full-day macro table, compare yesterday's target and actuals against today's targets with a compact five-column table: Macro, Yesterday target, Yesterday actual, Diff, and Today target, with separate rows for Calories, Carbs, Protein, and Fat. Put {.compact} on its own line immediately above this comparison table. Pull Yesterday target from yesterday's daily nutrition plan when present; otherwise use [data unavailable - yesterday target missing]. Put the difference between yesterday's target and yesterday's actual in the Diff column. For negative values, wrap the absolute value in parentheses, such as (802 kcal); for positive values, write the value without a plus sign, such as 5 g. Do not append dietary labels or restriction tags to section or recipe headings; the nutrition requirement notes and certification notes carry dietary restriction information. All numeric table columns must be right-aligned. Escape ~ as \~ inside Markdown content.
Nutrition role review gate
All meal ideas, snack options, recipe options, during-session fuel choices, recovery shake recipes, supplement recommendations, recovery drink suggestions, and product verification lists must be reviewed by the nutrition agent or nutrition role before they are written into the plan file.
This gate applies to sections 6 through 12. It does not block Coach Luca from calculating sections 3 through 5, but the nutrition role may flag a target that conflicts with athlete context or known contraindications.
Required sequence:
- Coach Luca derives daily context, energy target, macro target, and timing breakdown.
- Coach Luca proposes food-content sections and product lists.
- Nutrition agent or nutrition role reviews the proposed content against dietary restrictions, health constraints, training load, travel/race context, and recent patterns.
- Coach Luca incorporates any revisions.
- Coach Luca writes the final plan file.
Do not write food content from general memory alone.
Fallback rules
- If body mass is missing from
athlete/PROFILE.md, use the most recently logged value in recent daily logs or athlete notes. If none is available, fall back to the athlete's stated typical in-season body mass. If still unavailable, use[data unavailable - body mass missing]in affected calculations and continue. - If FFM is not measured, estimate cautiously and state the assumption in the Daily energy target Notes column.
- If TrainingPeaks is unavailable, derive session context from the calendar and rolling 7-day plan, and note the fallback in the Daily snapshot.
- If weather cannot be fetched, write
Hydration environment: [data unavailable - weather fetch failed]and continue. - If any meal option cannot be made confidently compatible with the athlete's documented dietary requirements, replace it rather than warning around it.
Channel and delivery rules
- The only permitted channel text output is
NO_REPLY. - Never call the message tool.
- Never send the plan by Telegram during this cron.
- Do not include attribution footers in the plan file.
- Record one
## Systemrow in today's canonical daily log stating that the daily nutrition plan was generated, where it was saved, whether fallback data was used, and whether nutrition review completed.
Completion rule
The workflow is complete only when:
- the daily plan file exists at the expected path
- the document contains all required applicable sections in order
- sections 3 through 5 contain traceable calculations or explicit fallback placeholders
- all food content has passed the nutrition role review gate for the athlete's documented dietary requirements
- today's canonical daily log contains a
## Systemevent for the save - the visible channel output is only
NO_REPLY