# Dashboard QC Report — 2026-08-02 01:15:54
_Today = 2026-08-02, Yesterday = 2026-08-01_

## Summary
- PASS: 53
- WARN: 4
- FAIL: 21

**Overall: FAIL**

## Checks

### FAIL (21)

- [FAIL] **Last scheduled run — all steps passed** — FAILED STEPS: pull_withings.py: exit=1
- [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
- [FAIL] **Withings — most recent weigh-in** — 2026-07-25 09:37:00 (8d old)
- [FAIL] **Static review — Long-term arc (Goals hero)** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — Build the base (Activity hero)** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — Protein-first (Nutrition hero)** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — Body composition (Body hero)** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — Data sources of truth (Data hero)** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — Recipes hero** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — Source-of-truth policy (Data)** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — Refresh cadence (Data)** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — Recovery interpretation thresholds** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — GKI interpretation thresholds** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — Yesterday score weights** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — Mounjaro week-3 narrative transition** — reviewed 63d ago (cadence 30d) — STALE, re-read now
- [FAIL] **Static review — health_config.md weekly review** — reviewed 63d ago (cadence 30d) — STALE, re-read now

### WARN (4)

- [WARN] **Static review — Mounjaro nutrition sub (macro targets card)** — reviewed 22d ago (cadence 14d) — re-read soon
- [WARN] **Static review — Strict keto vs moderate low-carb** — reviewed 22d ago (cadence 14d) — re-read soon
- [WARN] **Static review — Pill organizer headings (Data)** — reviewed 22d ago (cadence 14d) — re-read soon
- [WARN] **Static review — meds_supplements.csv review** — reviewed 22d 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** — 453KB, 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** — 260726 beurer-bp-bridge.csv (0.0h old)
- [PASS] **Dashboard HTML present** — Fitness_Dashboard.html (463,463 chars)
- [PASS] **Today tab — eyebrow date** — Dashboard shows AUG 02, 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': '119 g', 'Net Carbs': '14 g', 'Fat': '88 g', 'Sugar': '0 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=119
- [PASS] **Nutrition tab — Carbs fresh today+yesterday** — today=0, yesterday=0
- [PASS] **Nutrition tab — Fat fresh today+yesterday** — today=0, yesterday=88
- [PASS] **Nutrition tab — Sugar fresh today+yesterday** — today=0.0, yesterday=0.0
- [PASS] **Nutrition tab — Calories in fresh today+yesterday** — today=0, yesterday=1286
- [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/96 days populated, latest=0.0
- [PASS] **MFP source — column coverage** — All expected columns present
- [PASS] **MFP source — fiber populated** — today='0.0', yesterday='0.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 119g (target &ge;153g &mdash; 22% under)'
- [PASS] **Hydration honesty** — No null-as-zero hydration fabrication
- [PASS] **Static review — Vitamin D loading protocol (Data)** — reviewed 5d 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=5 fail=20
- [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_