Scope of this suite. TC-01 through TC-20 verify the v1.0 baseline (recorded baseline run 20/20 test cases Pass on 2026-07-05, plus 7/7 UAT Accept). TC-21 through TC-27 verify the post-release increments (2a-2c Garmin activities, Garmin daily wellness metrics, and Withings weight; 3 hockey auto-schedule; 4 MyFitnessPal nutrition at per-meal grain), added and executed in run-2 on 2026-07-10 (17/17 automated Pass). That run found and fixed defect D-08 (three sync scripts wrote rows without a Person relation) and hardened the baseline cases against live-data mutation. The increments are therefore formally verified, closing the operational-evidence-only gap noted at the v1.0 baseline. This element is a documentation note, not an executable test; it carries no Parent relation and asserts no result. See pm/project-state.md for the authoritative as-built state.
-
9.4. Count only after Attended HOK-004 The system shall only count a hockey game toward training after it is marked Attended.
-
9.2. Existing game databases are source of truth HOK-002 The system shall keep the existing hockey game databases as the source of truth for game data.
-
-
9.6. Default not counted until Attended HOK-006 By default the system shall set a hockey game to not count toward training until it is marked Attended.
-
9.4. Count only after Attended HOK-004 The system shall only count a hockey game toward training after it is marked Attended.
-
9.2. Existing game databases are source of truth HOK-002 The system shall keep the existing hockey game databases as the source of truth for game data.
-
-
-
9.8. Not attended excluded from load HOK-008 If a hockey game is not marked Attended, then the system shall exclude it from training-load calculations.
-
9.4. Count only after Attended HOK-004 The system shall only count a hockey game toward training after it is marked Attended.
-
9.2. Existing game databases are source of truth HOK-002 The system shall keep the existing hockey game databases as the source of truth for game data.
-
-
A hockey session with Attendance = Did Not Attend has Counts Toward Training (auto) = false.
-
9.7. Attended marks it counting HOK-007 When a hockey Game Training Session is marked Attended, the system shall set Counts Toward Training? to true.
-
9.4. Count only after Attended HOK-004 The system shall only count a hockey game toward training after it is marked Attended.
-
9.2. Existing game databases are source of truth HOK-002 The system shall keep the existing hockey game databases as the source of truth for game data.
-
-
A hockey session with Attendance = Attended has Counts Toward Training (auto) = true.
-
9.4. Count only after Attended HOK-004 The system shall only count a hockey game toward training after it is marked Attended.
-
9.2. Existing game databases are source of truth HOK-002 The system shall keep the existing hockey game databases as the source of truth for game data.
-
A non-hockey session with Status = Completed has Counts Toward Training (auto) = true.
-
9.4. Count only after Attended HOK-004 The system shall only count a hockey game toward training after it is marked Attended.
-
9.2. Existing game databases are source of truth HOK-002 The system shall keep the existing hockey game databases as the source of truth for game data.
-
A non-hockey session with Status = Planned has Counts = false; setting Status = Completed flips it to true.
-
12.4. Total mileage rollup SHO-004 The system shall compute total mileage per shoe via a rollup or formula that sums Distance across the Training Sessions related to that shoe.
-
12.1. Create Running Shoes SHO-001 The system shall create a Running Shoes database.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
an example running shoe Total Miles = 16 (sum of Distance from the two linked runs, 11 + 5).
-
12.4. Total mileage rollup SHO-004 The system shall compute total mileage per shoe via a rollup or formula that sums Distance across the Training Sessions related to that shoe.
-
12.1. Create Running Shoes SHO-001 The system shall create a Running Shoes database.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
Linking a new run to the shoe increases Total Miles; unlinking returns it to the prior value.
-
2.5. Secondary User first-class across areas PEO-005 The system shall allow Secondary User to be referenced from Goals, Races, Metrics/Check-ins, Nutrition Log, and future training structures, not solely as a placeholder.
-
2.1. Create People database PEO-001 The system shall create a People database.
-
-
5.5. Relates to People TS-005 Each Training Session shall relate to People via a Person relation.
-
5.1. Create Training Sessions TS-001 The system shall create a Training Sessions database as the central log of all training activity.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
2.6. Person relation on attributable databases PEO-006 Every database that records person-attributable data shall relate to People via a Person relation rather than free text.
-
2.1. Create People database PEO-001 The system shall create a People database.
-
-
Secondary User exists in People and is selectable as Person on sessions/goals/metrics.
-
19.2. Metrics and Nutrition relate to People REL-002 The system shall relate Metrics/Check-ins and Nutrition Log to People.
Filtering by Person = Primary User vs Secondary User returns only that person's rows.
-
4.4. Manual default source AUTO-004 When a record is created by hand rather than an integration, the system shall default its Source to Manual.
-
4.2. Standard automation field set AUTO-002 Each key database shall include Source, Source ID, External URL, Imported At, Last Synced At, Sync Status, Manual Override, and Raw Data/Notes where meaningful.
-
4.1. Build automation fields in now AUTO-001 The system shall build automation fields into key databases at creation time.
-
-
A hand-created session has Source = Manual.
-
10.4. Stickhandling ball pending EQP-004 The system shall mark the stickhandling ball as pending and not currently usable.
-
10.1. Templates reflect available equipment only EQP-001 The system shall reflect currently available equipment only in workout templates and exercise library defaults.
-
-
10.5. No unavailable equipment assumptions EQP-005 The system shall not assume availability of kettlebells, net, barbell, or medicine ball in any template.
-
10.1. Templates reflect available equipment only EQP-001 The system shall reflect currently available equipment only in workout templates and exercise library defaults.
-
Kettlebells, Net, Barbell, Medicine ball = Not available; Stickhandling ball = Pending; the rest Available.
-
10.6. No template requires unavailable equipment EQP-006 If a Workout Template would require unavailable equipment, then the system shall not present it as a currently-doable template.
-
10.5. No unavailable equipment assumptions EQP-005 The system shall not assume availability of kettlebells, net, barbell, or medicine ball in any template.
-
10.1. Templates reflect available equipment only EQP-001 The system shall reflect currently available equipment only in workout templates and exercise library defaults.
-
-
The seeded Workout Templates reference only Available equipment.
-
8.3. Seed Example Half Marathon RACE-003 When the Races database is created, the system shall seed the Example Half Marathon on an example date for Primary User, Type Half Marathon, Goal sub-2 ideal finish strong acceptable, Goal Time 2:00:00, Status Training/Registered.
-
8.1. Create Races database RACE-001 The system shall create a Races database.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
-
8.4. Seed Example 5K RACE-004 When the Races database is created, the system shall seed the Example 5K on an example date for Primary User, Type 5K, Status Registered/Planned.
-
8.1. Create Races database RACE-001 The system shall create a Races database.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
Example Half Marathon = Half Marathon / Goal 2:00:00; Example 5K = 5K.
-
7.1. Seed 5-mile hill repeats HIST-001 The system shall add a completed Training Session for the 5-mile hill repeats run on an example date.
-
5.1. Create Training Sessions TS-001 The system shall create a Training Sessions database as the central log of all training activity.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
-
7.2. Seed 11-mile long run HIST-002 The system shall add a completed Training Session for the 11-mile long run on an example date.
-
5.1. Create Training Sessions TS-001 The system shall create a Training Sessions database as the central log of all training activity.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
11-mile long run = 11 mi / Long; 5-mile hill repeats = 5 mi / Hills.
-
19.1. Session relationships REL-001 The system shall relate Training Sessions to People, Training Blocks, Races, Running Shoes, Running Routes, Exercise Log, and the source game for hockey.
-
5.8. Shoe and Route relations TS-008 Each Training Session shall provide a Running Shoe relation and a Running Route relation.
-
5.1. Create Training Sessions TS-001 The system shall create a Training Sessions database as the central log of all training activity.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
The 11-mile run relates to Person, Running Shoe, Running Route, and Training Block.
-
17.3. Goal to Race relation GOL-003 Where a Goal is tied to a race, the system shall allow it to relate to a Race.
-
17.1. Create Goals GOL-001 The system shall create a Goals database.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
The Sub-2:00 goal has a Race relation to the Example Half Marathon.
-
9.2. Existing game databases are source of truth HOK-002 The system shall keep the existing hockey game databases as the source of truth for game data.
A hockey session can relate to a Team A/Team B game without altering the source game DB.
-
1.2. Child of Personal Dashboard NAV-002 The system shall exist as a child page under the "Personal Dashboard" page.
-
1.3. Link below Inbox NAV-003 When the Personal Training OS page is created, the system shall place a link to it directly below the "Inbox" link on the Personal Dashboard.
-
1.1. Personal Training OS page NAV-001 The system shall be created as a Notion page titled "Personal Training OS".
-
The Personal Training OS page is a child of Personal Dashboard, linked below Inbox.
-
20.6. Mobile low-effort capture NFR-USE-001 The system shall be usable on the Notion mobile apps so that data capture is low-effort across devices.
A session/check-in can be logged with low effort in the Notion mobile app.
-
20.3. Backup and recovery NFR-BKP-001 The system shall support periodic export of its data so that training records are recoverable after accidental loss.
The OS data can be exported from Notion and is restorable.
-
11.3. Create Workout Templates TMP-001 The system shall create a Workout Templates database composed of exercises from the Exercise Library.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
18.1. Create Hockey Drills DRL-001 The system shall create a Hockey Drills database.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
At least one running, one strength, and one hockey Workout Template exist, plus Hockey Drills.
-
4.6. Sync populates provenance fields AUTO-006 When an automated import creates or updates a record, the system shall populate Source, Source ID, Imported At, and Last Synced At for that record.
-
4.2. Standard automation field set AUTO-002 Each key database shall include Source, Source ID, External URL, Imported At, Last Synced At, Sync Status, Manual Override, and Raw Data/Notes where meaningful.
-
4.1. Build automation fields in now AUTO-001 The system shall build automation fields into key databases at creation time.
-
-
-
14.2. Automation fields on metrics MET-002 Each Metrics/Check-ins record shall carry the standard automation fields.
-
14.1. Create Metrics/Check-ins MET-001 The system shall create a Metrics/Check-ins database up front.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
4.2. Standard automation field set AUTO-002 Each key database shall include Source, Source ID, External URL, Imported At, Last Synced At, Sync Status, Manual Override, and Raw Data/Notes where meaningful.
-
4.1. Build automation fields in now AUTO-001 The system shall build automation fields into key databases at creation time.
-
-
-
14.3. Metrics sources MET-003 The Metrics/Check-ins database shall be automation-ready for Garmin, Apple Health, Apple Watch, and Manual.
-
14.1. Create Metrics/Check-ins MET-001 The system shall create a Metrics/Check-ins database up front.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
Each Metrics/Check-ins row sourced from Garmin carries a garmin-metrics-<date> Source ID, an Imported At timestamp, and at least one wellness value.
-
4.6. Sync populates provenance fields AUTO-006 When an automated import creates or updates a record, the system shall populate Source, Source ID, Imported At, and Last Synced At for that record.
-
4.2. Standard automation field set AUTO-002 Each key database shall include Source, Source ID, External URL, Imported At, Last Synced At, Sync Status, Manual Override, and Raw Data/Notes where meaningful.
-
4.1. Build automation fields in now AUTO-001 The system shall build automation fields into key databases at creation time.
-
-
-
14.3. Metrics sources MET-003 The Metrics/Check-ins database shall be automation-ready for Garmin, Apple Health, Apple Watch, and Manual.
-
14.1. Create Metrics/Check-ins MET-001 The system shall create a Metrics/Check-ins database up front.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
Each Metrics/Check-ins row sourced from Withings carries a withings-<grpid> Source ID, a Weight value, and an Imported At timestamp.
-
4.6. Sync populates provenance fields AUTO-006 When an automated import creates or updates a record, the system shall populate Source, Source ID, Imported At, and Last Synced At for that record.
-
4.2. Standard automation field set AUTO-002 Each key database shall include Source, Source ID, External URL, Imported At, Last Synced At, Sync Status, Manual Override, and Raw Data/Notes where meaningful.
-
4.1. Build automation fields in now AUTO-001 The system shall build automation fields into key databases at creation time.
-
-
-
5.1. Create Training Sessions TS-001 The system shall create a Training Sessions database as the central log of all training activity.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
5.3. Session Type TS-003 Each Training Session shall provide a Session Type such as Run, Race, Workout, or Hockey Game.
-
5.1. Create Training Sessions TS-001 The system shall create a Training Sessions database as the central log of all training activity.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
Each Training Session row sourced from Garmin carries a Garmin Activity ID and an Imported At timestamp.
-
9.2. Existing game databases are source of truth HOK-002 The system shall keep the existing hockey game databases as the source of truth for game data.
-
5.3. Session Type TS-003 Each Training Session shall provide a Session Type such as Run, Race, Workout, or Hockey Game.
-
5.1. Create Training Sessions TS-001 The system shall create a Training Sessions database as the central log of all training activity.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
Each Training Session row sourced from the Hockey DB links a source game (Gabagools or Bacon).
-
4.6. Sync populates provenance fields AUTO-006 When an automated import creates or updates a record, the system shall populate Source, Source ID, Imported At, and Last Synced At for that record.
-
4.2. Standard automation field set AUTO-002 Each key database shall include Source, Source ID, External URL, Imported At, Last Synced At, Sync Status, Manual Override, and Raw Data/Notes where meaningful.
-
4.1. Build automation fields in now AUTO-001 The system shall build automation fields into key databases at creation time.
-
-
-
15.2. Automation fields on nutrition NUT-002 Each Nutrition Log record shall carry the standard automation fields.
-
15.1. Create Nutrition Log NUT-001 The system shall create a Nutrition Log database up front.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
4.2. Standard automation field set AUTO-002 Each key database shall include Source, Source ID, External URL, Imported At, Last Synced At, Sync Status, Manual Override, and Raw Data/Notes where meaningful.
-
4.1. Build automation fields in now AUTO-001 The system shall build automation fields into key databases at creation time.
-
-
-
15.3. Nutrition sources NUT-003 The Nutrition Log database shall be automation-ready for MyFitnessPal and Manual.
-
15.1. Create Nutrition Log NUT-001 The system shall create a Nutrition Log database up front.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
Each Nutrition Log row sourced from MyFitnessPal carries an mfp-<date>-<meal> Source ID, a Meal, a Calories value, and an Imported At timestamp.
-
4.6. Sync populates provenance fields AUTO-006 When an automated import creates or updates a record, the system shall populate Source, Source ID, Imported At, and Last Synced At for that record.
-
4.2. Standard automation field set AUTO-002 Each key database shall include Source, Source ID, External URL, Imported At, Last Synced At, Sync Status, Manual Override, and Raw Data/Notes where meaningful.
-
4.1. Build automation fields in now AUTO-001 The system shall build automation fields into key databases at creation time.
-
-
No two synced rows within a database share a Source ID, confirming idempotent upserts across the Metrics, Nutrition, and Training Sessions databases.
-
14.4. Metrics relate to People MET-004 Each Metrics/Check-ins record shall relate to People.
-
14.1. Create Metrics/Check-ins MET-001 The system shall create a Metrics/Check-ins database up front.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
-
15.5. Nutrition relates to People NUT-005 Each Nutrition Log record shall relate to People.
-
15.1. Create Nutrition Log NUT-001 The system shall create a Nutrition Log database up front.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
-
5.5. Relates to People TS-005 Each Training Session shall relate to People via a Person relation.
-
5.1. Create Training Sessions TS-001 The system shall create a Training Sessions database as the central log of all training activity.
-
3.1. Create all databases up front ARCH-001 The system shall create the full set of databases at build time regardless of immediate use.
-
-
2.6. Person relation on attributable databases PEO-006 Every database that records person-attributable data shall relate to People via a Person relation rather than free text.
-
2.1. Create People database PEO-001 The system shall create a People database.
-
-
Every synced row (Garmin, Withings, MyFitnessPal, Hockey DB) across Metrics, Nutrition, and Training Sessions relates to a Person. This case found defect D-08; the fix and a 54-row backfill landed in run-2.