Personal Training OS: Requirements & Traceability
Personal Training OS: Test Cases

Personal Training OS: Test Cases

1. Verification test cases
TC-NOTE-SCOPE
1.1. Suite scope note (2026-07-08; increments verified 2026-07-10 in run-2), not a test case
UID: TC-NOTE-SCOPE
METHOD: Analysis
AUTOMATED: No
STATEMENT:

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.

TC-01
1.2. Hockey not-attended does not count
UID: TC-01
METHOD: Test
AUTOMATED: Yes
STATEMENT:

A hockey session with Attendance = Did Not Attend has Counts Toward Training (auto) = false.

RELATIONS (Parent):
TC-02
1.3. Hockey attended counts
UID: TC-02
METHOD: Test
AUTOMATED: Yes
STATEMENT:

A hockey session with Attendance = Attended has Counts Toward Training (auto) = true.

RELATIONS (Parent):
TC-03
1.4. Completed run counts
UID: TC-03
METHOD: Test
AUTOMATED: Yes
STATEMENT:

A non-hockey session with Status = Completed has Counts Toward Training (auto) = true.

RELATIONS (Parent):
TC-04
1.5. Planned session does not count
UID: TC-04
METHOD: Test
AUTOMATED: No
STATEMENT:

A non-hockey session with Status = Planned has Counts = false; setting Status = Completed flips it to true.

RELATIONS (Parent):
TC-05
1.6. Shoe mileage rollup equals 16
UID: TC-05
METHOD: Test
AUTOMATED: Yes
STATEMENT:

an example running shoe Total Miles = 16 (sum of Distance from the two linked runs, 11 + 5).

RELATIONS (Parent):
TC-06
1.7. Rollup updates on new run
UID: TC-06
METHOD: Test
AUTOMATED: No
STATEMENT:

Linking a new run to the shoe increases Total Miles; unlinking returns it to the prior value.

RELATIONS (Parent):
TC-07
1.8. Secondary User is first-class
UID: TC-07
METHOD: Test
AUTOMATED: Yes
STATEMENT:

Secondary User exists in People and is selectable as Person on sessions/goals/metrics.

RELATIONS (Parent):
TC-08
1.9. Person filter isolates data
UID: TC-08
METHOD: Test
AUTOMATED: No
STATEMENT:

Filtering by Person = Primary User vs Secondary User returns only that person's rows.

RELATIONS (Parent):
TC-09
1.10. Manual source default
UID: TC-09
METHOD: Inspection
AUTOMATED: No
STATEMENT:

A hand-created session has Source = Manual.

RELATIONS (Parent):
TC-10
1.11. Equipment availability correct
UID: TC-10
METHOD: Test
AUTOMATED: Yes
STATEMENT:

Kettlebells, Net, Barbell, Medicine ball = Not available; Stickhandling ball = Pending; the rest Available.

RELATIONS (Parent):
TC-11
1.12. Templates use available gear only
UID: TC-11
METHOD: Inspection
AUTOMATED: No
STATEMENT:

The seeded Workout Templates reference only Available equipment.

RELATIONS (Parent):
TC-12
1.13. Race seeds correct
UID: TC-12
METHOD: Test
AUTOMATED: Yes
STATEMENT:

Example Half Marathon = Half Marathon / Goal 2:00:00; Example 5K = 5K.

RELATIONS (Parent):
TC-13
1.14. Historical runs correct
UID: TC-13
METHOD: Test
AUTOMATED: Yes
STATEMENT:

11-mile long run = 11 mi / Long; 5-mile hill repeats = 5 mi / Hills.

RELATIONS (Parent):
TC-14
1.15. Session relationships wired
UID: TC-14
METHOD: Inspection
AUTOMATED: No
STATEMENT:

The 11-mile run relates to Person, Running Shoe, Running Route, and Training Block.

RELATIONS (Parent):
TC-15
1.16. Goal linked to Race
UID: TC-15
METHOD: Test
AUTOMATED: Yes
STATEMENT:

The Sub-2:00 goal has a Race relation to the Example Half Marathon.

RELATIONS (Parent):
TC-16
1.17. Source-of-truth game link
UID: TC-16
METHOD: Demonstration
AUTOMATED: No
STATEMENT:

A hockey session can relate to a Team A/Team B game without altering the source game DB.

RELATIONS (Parent):
TC-17
1.18. Page placement
UID: TC-17
METHOD: Inspection
AUTOMATED: No
STATEMENT:

The Personal Training OS page is a child of Personal Dashboard, linked below Inbox.

RELATIONS (Parent):
TC-18
1.19. Mobile capture
UID: TC-18
METHOD: Demonstration
AUTOMATED: No
STATEMENT:

A session/check-in can be logged with low effort in the Notion mobile app.

RELATIONS (Parent):
TC-19
1.20. Backup and recovery
UID: TC-19
METHOD: Demonstration
AUTOMATED: No
STATEMENT:

The OS data can be exported from Notion and is restorable.

RELATIONS (Parent):
TC-20
1.21. Training materials present
UID: TC-20
METHOD: Test
AUTOMATED: Yes
STATEMENT:

At least one running, one strength, and one hockey Workout Template exist, plus Hockey Drills.

RELATIONS (Parent):
TC-21
1.22. Garmin daily wellness metrics provenance (Increment 2b)
UID: TC-21
METHOD: Test
AUTOMATED: Yes
STATEMENT:

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.

RELATIONS (Parent):
TC-22
1.23. Withings weight provenance (Increment 2c)
UID: TC-22
METHOD: Test
AUTOMATED: Yes
STATEMENT:

Each Metrics/Check-ins row sourced from Withings carries a withings-<grpid> Source ID, a Weight value, and an Imported At timestamp.

RELATIONS (Parent):
TC-23
1.24. Garmin activities into Training Sessions (Increment 2a)
UID: TC-23
METHOD: Test
AUTOMATED: Yes
STATEMENT:

Each Training Session row sourced from Garmin carries a Garmin Activity ID and an Imported At timestamp.

RELATIONS (Parent):
TC-24
1.25. Hockey games auto-scheduled (Increment 3)
UID: TC-24
METHOD: Test
AUTOMATED: Yes
STATEMENT:

Each Training Session row sourced from the Hockey DB links a source game (Gabagools or Bacon).

RELATIONS (Parent):
TC-25
1.26. MyFitnessPal nutrition at per-meal grain (Increment 4)
UID: TC-25
METHOD: Test
AUTOMATED: Yes
STATEMENT:

Each Nutrition Log row sourced from MyFitnessPal carries an mfp-<date>-<meal> Source ID, a Meal, a Calories value, and an Imported At timestamp.

RELATIONS (Parent):
TC-26
1.27. Idempotent upsert, unique Source IDs
UID: TC-26
METHOD: Test
AUTOMATED: Yes
STATEMENT:

No two synced rows within a database share a Source ID, confirming idempotent upserts across the Metrics, Nutrition, and Training Sessions databases.

RELATIONS (Parent):
TC-27
1.28. Synced rows relate to a Person
UID: TC-27
METHOD: Test
AUTOMATED: Yes
STATEMENT:

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.

RELATIONS (Parent):