# Dashboard QC Report — 2026-07-29 00:13:48
_Today = 2026-07-29, Yesterday = 2026-07-28_

## Summary
- PASS: 53
- WARN: 18
- FAIL: 7

**Overall: FAIL**

## Checks

### FAIL (7)

- [FAIL] **Last scheduled run — publish verified live** — Publish did not verify (live_dashboard_date=None)
- [FAIL] **Activity tab — Steps fresh today+yesterday** — Both today (0) and yesterday (0) missing/zero in `steps` chart
- [FAIL] **Activity tab — Recovery % fresh today+yesterday** — Both today (None) and yesterday (None) missing/zero in `recovery` chart
- [FAIL] **Activity tab — HRV (ms) fresh today+yesterday** — Both today (None) and yesterday (None) missing/zero in `hrv` chart
- [FAIL] **Activity tab — Resting HR fresh today+yesterday** — Both today (None) and yesterday (None) missing/zero in `rhr` chart
- [FAIL] **Activity tab — Sleep (h) fresh today+yesterday** — Both today (0.0) and yesterday (0.0) missing/zero in `sleep_h` chart
- [FAIL] **Activity tab — Strain (Whoop) fresh today+yesterday** — Both today (None) and yesterday (None) missing/zero in `strain` chart

### WARN (18)

- [WARN] **Withings — most recent weigh-in** — 2026-07-25 09:37:00 (4d old)
- [WARN] **Static review — Long-term arc (Goals hero)** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — Build the base (Activity hero)** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — Protein-first (Nutrition hero)** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — Body composition (Body hero)** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — Data sources of truth (Data hero)** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — Recipes hero** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — Mounjaro nutrition sub (macro targets card)** — reviewed 18d ago (cadence 14d) — re-read soon
- [WARN] **Static review — Strict keto vs moderate low-carb** — reviewed 18d ago (cadence 14d) — re-read soon
- [WARN] **Static review — Source-of-truth policy (Data)** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — Refresh cadence (Data)** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — Pill organizer headings (Data)** — reviewed 18d ago (cadence 14d) — re-read soon
- [WARN] **Static review — Recovery interpretation thresholds** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — GKI interpretation thresholds** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — Yesterday score weights** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — Mounjaro week-3 narrative transition** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — health_config.md weekly review** — reviewed 59d ago (cadence 30d) — re-read soon
- [WARN] **Static review — meds_supplements.csv review** — reviewed 18d ago (cadence 14d) — re-read soon

### PASS (53)

- [PASS] **Script syntax — all Python scripts compile** — All 27 .py scripts compile cleanly
- [PASS] **Build output — Fitness_Dashboard.html fresh** — Written 0.0h ago
- [PASS] **Build output — HTML structural integrity** — 461KB, ends with </html>, all required sections present
- [PASS] **Freshness — Apple Health JSON** — HealthAutoExport-2026-06.json (0.0h old)
- [PASS] **Freshness — Whoop CSV** — physiological_cycles.csv (0.0h old)
- [PASS] **Freshness — Withings CSV** — sleep.csv (0.0h old)
- [PASS] **Freshness — MFP CSV** — diary.csv (0.0h old)
- [PASS] **Freshness — Keto-Mojo CSV** — search_criteria.html (0.0h old)
- [PASS] **Freshness — Beurer BP CSV** — HealthManager Pro Export - 05.12.2025 - 05.13.2026.csv (0.0h old)
- [PASS] **Dashboard HTML present** — Fitness_Dashboard.html (471,284 chars)
- [PASS] **Today tab — eyebrow date** — Dashboard shows JUL 29, 2026
- [PASS] **Today tab — header weight plausible** — 137.3 kg
- [PASS] **Today tab — header BF% plausible** — 29.3%
- [PASS] **Today tab — Recovery has value** — 83%
- [PASS] **Today tab — HRV chip non-zero** — HRV 28 ms
- [PASS] **Today tab — Sleep chip present** — 8h 57m
- [PASS] **Today tab — Macros Yesterday populated** — All 4 macros have values: {'Protein': '111 g', 'Net Carbs': '14 g', 'Fat': '129 g', 'Sugar': '7 g'}
- [PASS] **Today tab — Protein dial bg is red** — dial stroke = #f87171 (unified state palette, correct)
- [PASS] **Today tab — Lean/Fat Loss baseline** — Anchored on Mounjaro start (May 4, 2026)
- [PASS] **Nutrition tab — Protein fresh today+yesterday** — today=0, yesterday=111
- [PASS] **Nutrition tab — Carbs fresh today+yesterday** — today=0, yesterday=24
- [PASS] **Nutrition tab — Fat fresh today+yesterday** — today=0, yesterday=129
- [PASS] **Nutrition tab — Sugar fresh today+yesterday** — today=0.0, yesterday=7.0
- [PASS] **Nutrition tab — Calories in fresh today+yesterday** — today=0, yesterday=1649
- [PASS] **Nutrition tab — Calories burned fresh today+yesterday** — today=0, yesterday=0
- [PASS] **Activity tab — Exercise minutes fresh today+yesterday** — today=0, yesterday=0
- [PASS] **Nutrition tab — Fiber data fresh** — 49/92 days populated, latest=0.0
- [PASS] **MFP source — column coverage** — All expected columns present
- [PASS] **MFP source — fiber populated** — today='0.0', yesterday='9.0'
- [PASS] **Cross-source — Withings vs header weight** — Latest Withings 137.3kg (2026-07-25 09:37:00) matches header 137.3kg
- [PASS] **Drag verdict honesty** — 'Protein 111g (target &ge;153g &mdash; 27% under)'
- [PASS] **Hydration honesty** — No null-as-zero hydration fabrication
- [PASS] **Static review — Vitamin D loading protocol (Data)** — reviewed 1d ago (cadence 7d)
- [PASS] **Hero gauges identical viewBox** — Both = '0 0 220 130'
- [PASS] **Recipes tab — 14 cards present** — 53 rcp-card entries
- [PASS] **Data tab — 2/3-1/3 row layout** — data-cards-2-1-row container present
- [PASS] **Data tab — 13 source-of-truth logo tiles** — 13 sot-cell entries
- [PASS] **Data tab — 12 brand logo images linked** — 12 source-logos/* image refs
- [PASS] **Data tab — Pending data streams section removed** — absent (good)
- [PASS] **Data tab — Daily snapshot section removed** — absent (good)
- [PASS] **Data tab — Refresh Cadence card removed** — absent (good)
- [PASS] **Data tab — Old linear source-policy layout removed** — absent (good)
- [PASS] **Data tab — QC card shows real numbers** — pass=53 warn=18 fail=7
- [PASS] **Publish — qc_report.md staged** — publish_to_cloudflare.ps1 references qc_report.md
- [PASS] **Withings logo — current wordmark** — withings.svg is the current standalone wordmark (302 bytes)
- [PASS] **Source-logos folder — all 12 image files present** — All 12 files exist in source-logos/
- [PASS] **Insights wiring — window.DATA.protein_today exposed** — key present in DATA literal
- [PASS] **Insights wiring — window.DATA.steps_today exposed** — key present in DATA literal
- [PASS] **Insights wiring — window.DATA.latest_ketone exposed** — key present in DATA literal
- [PASS] **Body tab — progress photo rendered** — 4 front photo(s) on disk, photo-slot-filled present in HTML
- [PASS] **workout.js — required IIFE markers + closing OK** — 113KB, all 6 markers present, ends correctly
- [PASS] **workout.js — bracket balance** — braces: 521=521, parens: 1917=1917
- [PASS] **insights.js — water tracker has all 4 buttons** — buttons: ['250', '500', '1000', '1500'] ml

_Generated by qc_dashboard.py against Fitness_Dashboard.html_