Repository navigation
Description
NOOP version
12.0.0
Platform
iOS
OS version
iOS 27
WHOOP strap / Oura ring model
WHOOP 5.0
Where the data is coming from
Live Bluetooth (WHOOP strap connected)
Test Centre profile
Sleep & Rest
What happens
On a fresh iOS install, NOOP labels my WHOOP 5.0 MG as a "WHOOP 4.0". I
removed it and re-added it with the Add-a-WHOOP wizard, which created a
second device entry for the same strap:
my-whoop: archived, "WHOOP 4.0"whoop-5A0…: active, "5.0 MG"
The overnight history offload is then attributed to the archived my-whoop
(#1881). Only live HR goes to the active entry.
When scoring 29 Oct, the day owner is the active entry because it has 234 live
HR samples and no gravity. So a full synced night (about 8 h, 75k+ v18
records with HR, R-R, gravity and sleep_state under my-whoop) is never
looked at:
- no sleep session;
- no HRV;
- Today says "2 of the last 2 nights recorded no HRV. Check the strap is worn
overnight and syncing." The strap was worn and synced.
Three separate problems seem to combine:
- Wrong model stamp. The Skin Temp, Wrong Strap Model #716 stamp (
Strand/BLE/BLEManager.swift~5917)
usesselectedModel, the family currently being scanned for, not the strap
that matched. A fresh install scans 4.0 first, so a 5.0 gets stamped "WHOOP
4.0" before it's even identified. - Re-adding the same strap creates a new id, while its data keeps landing
on the old archived id. - Day-owner choice. The active entry wins with any data, even a few
minutes of live HR, over another entry for the same strap that holds the whole
night.
Workaround (confirmed): remove the duplicate active entry (whoop-5A0…)
in Devices and relaunch. The night then scores normally.
Possibly related (macOS staging 12.1.0 / 198, separate earlier install):
dailyMetric for 2026-10-28 has a sleepHrOnly=1 night of about 20 h (about
19.6 h "deep"). It was built from roughly 75 min of scattered live HR across
two short connections, with no overnight history. HR-only staging seems to
treat long gaps with no data as sleep.
What you expected instead
- The seeded device is labelled with the family that actually matched (5.0
MG), so there's no reason to remove and re-add it.- Re-adding a strap that matches an archived entry reactivates that entry, or
otherwise keeps one strap = one id, instead of splitting live data and history
across two ids. - The night is scored from the entry that actually holds it. A few minutes of
live HR on another entry for the same strap shouldn't override a full night. - The "no HRV" message doesn't blame wear or sync when R-R data for that night
exists.
- Re-adding a strap that matches an archived entry reactivates that entry, or
Steps to reproduce
Environment: NOOP iOS 12.0.0 (435), sideloaded; iOS 27.0.1, iPhone16,2. WHOOP
5.0 MG, firmware 50.42.1.0 (hwRev=WG50_r52). Single strap.
- Fresh NOOP install on iOS with a WHOOP 5.0 / MG strap nearby. NOOP scans
for WHOOP 4.0 first. - Open Devices: the strap is listed as "WHOOP 4.0".
- Remove that device.
- Add the strap again via the Add-a-WHOOP wizard (it shows as WHOOP 5.0 /
MG). - Wear the strap overnight and let NOOP sync the history in the morning.
- Open Today: no sleep for the night, and "N of the last N nights recorded no
HRV". - Optional: Test Centre → Sleep test mode → relaunch. The log shows
dayOwner … readId=<new id> hrRows=<few hundred>andsleep-detect … NO-NIGHT … grav=0 … reason=no-motionfor that day.
Strap log
Model stamped as 4.0 before the 5.0 is identified:
[08:19:57] Scanning for WHOOP 4.0…
[08:19:58] Updated device model from "WHOOP" to "WHOOP 4.0" (#716)
[08:19:58] Discovered <name> (rssi -62) — WHOOP PUFFIN service 1150 detected
but unsupported; NOOP will not connect or send commands.
[08:20:05] Scanning for WHOOP 5.0 / MG…
[08:20:06] WHOOP 5/MG detected — discovering puffin characteristics
(experimental).
Remove + re-add; the link (and history) goes to the archived id:
[08:21:51] Device removed — released the strap: stopped auto-reconnect,
dropped the link, cleared targeting. …
[08:21:56] Add-a-WHOOP scan: presenting nearby WHOOP 5.0 / MG straps
[08:22:00] Add-a-WHOOP scan: stopped
Read spine re-pointed to active device after registry change (#814).
[08:22:48] Connecting to selected strap <device> — targeted
[08:22:48] Attributing this link to my-whoop — the strap that connected, not
the active device (#1881)
Scoring the night (re-score after relaunch, 18:09):
[sleep] [sleep] hr-only gate day=2026-10-29 attempted=true
reason=no-motion-no-hypnogram grav=0 stored=0
sleep day=2026-10-29 totalSleepMin=nil stages=nil eff=nil matched=0
source=computed
hrv day=2026-10-29 window=whole avgHrv=nil
sleep-detect day=2026-10-29 NO-NIGHT hr=234 rr=154 resp=0 grav=0 skin=0
steps=0 provided=0 window=48h reason=no-motion
[universal] dayOwner day=2026-10-29 readId=whoop-5A0… writeActiveId=whoop-5A0…
hrRows=234 provenance=measured
sleep-detect day=2026-10-28 NO-NIGHT hr=13274 rr=0 resp=0 grav=13286
skin=13286 steps=13286 provided=0 window=54h reason=staged-none
[universal] dayOwner day=2026-10-28 readId=my-whoop writeActiveId=whoop-5A0…
hrRows=13274 provenance=measured
Before you submit
- I attached my exported NOOP .zip (not a screenshot of the Live screen). If my bug is a clearly reproducible UI issue I described exactly how to see it instead.
- I attached or pasted a strap log above — or my bug is a clearly reproducible UI issue that doesn't need one (e.g. a typo, a button that does nothing) and I've described exactly how to see it.
- I checked the Troubleshooting guide — especially "history syncs but no data" (most often the strap isn't banking history to flash; charge it to 100% and reconnect).
- I checked the FAQ and — if I'm on a WHOOP 5.0 / MG — the 5.0/MG status page, or — if I'm on an Oura ring — the Oura ring support table, and this isn't an already-known limit (e.g. SpO₂, recovery/sleep on the 5/MG, or no Recovery / HRV on a ring-only day).
- I've left out anything personal (strap serial, account email, raw export).
Activity
andreyeurope commentedon Oct 29, 2026
I can provide the fix and more data if needed.