Release Notes, Personal Training OS v1.0 (MVP)¶
Artifact: Phase 6 (Release) · Owner: Delivery Manager (Primary User) · Date: 2026-07-05
Baseline: git tag vv-accepted (SSH-signed) · Release tag (on go-live): v1.0
Release notes answer "what are we shipping, is it trustworthy, and what are its limits?", written for the user/stakeholder, not the developer. This ships the MVP for the race week (25 to 26 Jul 2026).
What this is¶
A Notion workspace ("🏋️ Personal Training OS", under Personal Dashboard) for planning and logging running, hockey, strength, recovery, and nutrition for Primary User and Secondary User, built up front so manual use can evolve into automation later.
Highlights (what you can do at v1.0)¶
- 16 databases with a wired relational backbone (People ↔ Training Sessions ↔ Races / Training Blocks / Routes / Shoes / Templates / hockey games / Equipment).
- Multi-person from day one, Primary User and Secondary User are both first-class; per-person filtering.
- Hockey counts only when attended, enforced by a formula, not a manual checkbox.
- Automatic shoe mileage, rollup from linked runs (no manual tallying).
- Training plans that aren't empty, Workout Templates linked to Exercise Library exercises + Hockey Drills; Strength / Hockey / Mobility plans populated.
- Views & dashboard, Calendar, Planned, Hockey-by-team, By-Type chart, race and shoe tracking.
- Automation-ready fields (Source, Source ID, External URL, Imported/Synced At, Sync Status, Manual Override) present on key DBs. Garmin and Withings sync are now live and populating these; MyFitnessPal and Calendar sync remain future.
Quality / assurance¶
- Built to 101 requirements (StrictDoc EARS spec); 101/101 requirement→design coverage (gated in
build.ps1). - V&V: 20/20 test cases Pass, 7/7 UAT Accept, 0 open defects (
verification/runs/2026-07-05-summary.md). - Gate G5 signed, baseline tag
vv-accepted(verifiable:git tag -v vv-accepted).
Known limitations¶
- Backup fidelity: a Notion export → re-import restores your data and databases but not inline view layouts (Notion platform limitation, defect D-07 accepted). See the backup/recovery runbook.
- Manual source default relies on a database template (Notion can't default a select via API).
Deferred to a later release (Won't-this-release)¶
Apple Health, Calendar sync, RAG/AI insight, and users beyond Primary User + Secondary User. Per Charter §5 +
MoSCoW v1.3/v1.4 (the list as ratified at v1.1 has since been amended). MyFitnessPal (nutrition) has
since shipped as Increment 4 (2026-07-09); its Gmail-relay auto-trigger is live and verified 2026-07-09
(the operator provisioned the GMAIL_APP_PASSWORD secret and the relay ran end-to-end, aggregating and
writing the meal rows and labeling the email done), fully hands-off once the operator taps MFP "Download Your
Data" (the graceful-skip when the secret is absent remains in code as a safety net). Strava activities are
scaffolded but blocked on a paid Strava subscription (not live).
Delivered post-v1 (Increments 2-4): Garmin activities, Garmin daily wellness metrics, Withings body
weight, and hockey auto-scheduling into Training Sessions (closing D-04) are now live and running on a
daily 06:00 sync. MyFitnessPal nutrition (Increment 4, 2026-07-09) is also delivered, ingesting
per-meal nutrition into the Nutrition Log via the MFP Premium emailed CSV export. The only manual step is
tapping MFP "Download Your Data" (automating that trigger is ToS-barred); the Gmail relay (--gmail,
IMAP + a Gmail App Password) that carries everything after the tap is live and verified 2026-07-09: the
operator provisioned the GMAIL_APP_PASSWORD secret and the relay ran end-to-end (found the export email,
downloaded it, aggregated + wrote the meal rows, labeled the email done; a re-run finds 0 unprocessed), fully
hands-off. A manual --zip <export.zip> fallback also exists, and the graceful-skip when the secret is absent
remains in code as a safety net. These moved out of "deferred" after v1.0 shipped. Note: the 20/20 test cases + 7/7 UAT
attestation covers the v1.0 baseline, not the increments; the increments were formally verified separately on
2026-07-10 (verification/runs/2026-07-10-run-2.md, cases TC-21 to TC-27, 17/17 automated Pass).
CHANGELOG¶
v1.0, 2026-07-05 (initial release)¶
- Initial MVP release of the Personal Training OS: 16 databases, relational backbone, hockey-attendance formula, shoe-mileage rollup, populated training plans, core views/dashboard, automation-ready fields.
- V&V complete (G5, tag
vv-accepted).
Increment 2, 2026-07-05 (post-v1 automation, live)¶
- Garmin activities now sync to Training Sessions (runs, hockey skates, recovery/walks; plan to actual reconcile).
- Garmin daily wellness metrics now sync to Metrics/Check-ins (Readiness, VO2max, HRV, Sleep, Body Battery, Resting HR, Stress, SpO2, Respiration, Steps, Active Calories).
- Withings body weight now syncs to Metrics/Check-ins (weight only; body-composition and BP are not in the source data).
- Runs daily 06:00 via the scheduled sync harness (
run-sync.ps1, serial). - Formally verified 2026-07-10 (
verification/runs/2026-07-10-run-2.md, cases TC-21/TC-22/TC-23), on top of the dailysync.logand live rows.
Increment 3, 2026-07-05 (post-v1 automation, live)¶
- Hockey games now auto-schedule into Training Sessions with attended-skate linking, closing defect D-04.
- Runs daily 06:00 via the scheduled sync harness.
- Formally verified 2026-07-10 (
verification/runs/2026-07-10-run-2.md, case TC-24).
Increment 4, 2026-07-09 (post-v1 automation, operator-run)¶
- MyFitnessPal nutrition now ingests into the Nutrition Log at per-meal grain, capturing
every column: all macros (including fat sub-types), micronutrients (cholesterol, sodium, potassium,
sugar, vitamins/minerals), and the per-meal Time. The export is one row per logged food (several per
meal, no food-name column), so foods are summed into per-meal totals (nothing dropped). Idempotent
upsert keyed on
mfp-<date>-<meal>. - Source is the MFP Premium emailed CSV export ("Download Your Data" / "Meal Level Nutrition
Details"), user-initiated and ToS-clean (no MFP site access; MFP has no personal API and scraping is
ToS-barred). Delivered via
automation/mfp_email_to_notion.py; Nutrition Log schema extended per ADR-0007 (14 new properties). - The only manual step is tapping the MFP export (about 10s); automating that trigger is ToS-barred.
Everything after the tap is automated by the Gmail relay (
--gmail, IMAP + a Gmail App Password), which is live and verified 2026-07-09: the operator provisioned theGMAIL_APP_PASSWORDsecret and the relay ran end-to-end (found the export email, downloaded it, aggregated + wrote the meal rows, labeled the emailPTOS-Nutrition-Ingested; a re-run finds 0 unprocessed), fully hands-off. A manual--zip <export.zip>fallback also exists, and the graceful-skip when the secret is absent remains in code as a safety net. - First ingest 2026-07-09: 24 days, 71 meal rows aggregated from 115 food-level export rows, all columns populated, idempotent on re-run.
- Formally verified 2026-07-10 (
verification/runs/2026-07-10-run-2.md, case TC-25), after an initial period of operational evidence only. The 20/20 test cases + 7/7 UAT attestation covers the v1.0 baseline, not this increment; run-2 is what covers it.