You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Importing a Fahrenheit WHOOP export stores the °F number as if it were °C #1849
Byte-identical on both platforms, so parity holds — both are wrong the same way.
An export from a Fahrenheit WHOOP account therefore lands ~92.3 in a column the whole app reads as °C.
Why it doesn't just look slightly off
VitalBands.isAbsoluteSkinTemp(v) = v >= 20.0 classifies 92.3 as an absolute reading, so it flows through the normal absolute path rather than being rejected:
displayed as 92.3 °C — or, for a user on Fahrenheit, converted again to about 198.1 °F;
inside the 33–36 °C absolute band's history, dragging the baseline it folds;
indistinguishable after the fact from a genuine reading, because nothing records which unit the row arrived in.
The deviation case is not affected: skin_temp_f only ever appears on the absolute column.
Shape of the fix
Convert on the way in rather than aliasing — read skin_temp_f as its own key and apply (f - 32) * 5/9 before storing. The pair of importers must move together to keep the stored value byte-identical across platforms.
Two things to decide, which is why this is an issue and not a drive-by patch:
Already-imported rows. A stored 92.3 is not distinguishable from a real reading by inspection alone, though anything above the worn gate's 42 °C ceiling is physically impossible and could be healed with an explicit one-off migration. Worth deciding deliberately rather than silently rewriting stored data.
Found while verifying that the #1844/#1846 skin-temp work handles Fahrenheit — the display path does, correctly (absolute uses the full C→F, a deviation uses the factor alone, both pinned by tests). This is an ingest bug that predates that work.
Verified fixed: WhoopExportImporter now reads skin_temp_f and converts to Celsius on import. Explicit #1849 comment in Packages/StrandImport/Sources/StrandImport/WhoopExportImporter.swift lines 271-279. Android WhoopCsvImporter.kt also handles Fahrenheit.
Activity
import: convert Fahrenheit skin-temp on the way in, not alias it to °C
evoveotech commentedon Sep 10, 2026
Verified fixed:
WhoopExportImporternow readsskin_temp_fand converts to Celsius on import. Explicit#1849comment inPackages/StrandImport/Sources/StrandImport/WhoopExportImporter.swiftlines 271-279. AndroidWhoopCsvImporter.ktalso handles Fahrenheit.import: convert Fahrenheit skin-temp on the way in, not alias it to °C