public.biomarkers. Each row has a unit, the system it rolls up to, and three bands: the lab reference range, a tighter optimal range, and optional clinical alert thresholds. See Grading for how they combine.
Systems
The figure has 13 systems. Four of them (Neurology & Cognition, Vision & Hearing, Bone & Body Composition, Skin) have no biomarkers yet, so they stay dark for everyone.Biomarkers
All 41 biomarkers currently in the catalogue. Each row also carries analiases list that the importers match names against.
Thyroid
Respiratory
Cardiovascular
Liver
Kidney
Metabolic & Gut
Hormones & Prostate
Blood & Immune
Muscle & Performance
Pending changes
Two migrations are committed but not applied. Both change how a live record is graded, so applying them is a deliberate step for someone who has read the rows.New biomarkers
20260822160000_healthkit_biomarkers.sql adds three biomarkers the iPhone can read but the catalogue has no row for:
Sex-specific bands
20260822160100_sex_aware_bands.sql adds biomarker_bands, which holds per-sex overrides. Without it, several bands are male bands with a unisex label: a healthy woman’s total testosterone grades as alert against an optimal band of 500–900 ng/dL.
An override replaces the whole band for a user whose profiles.sex matches. Users who haven’t said, or who chose intersex or prefer not to say, keep the default band, which is deliberately the wider one.
Every override stores its source in a
source column, so each threshold can be checked.
The same migration also:
- Adds
body_fat_pct(Body fat, %, default 5–31, optimal 11–28) andwaist_circumference(Waist, cm, default ≤ 102, optimal ≤ 94). - Fixes the default band for
free_testosterone. It is declared in pg/mL but was seeded with ng/dL numbers, a factor of ten too low. The default becomes 3–300, optimal 5–300.
