Skip to content

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 daily sync.log and 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 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 PTOS-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.