Skip to content

WHOOP 5.0 labelled "WHOOP 4.0" on first scan → remove + re-add creates a duplicate device → the night's history is ignored (no sleep, "no HRV") #2880

Open

Description

@andreyeurope

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:
  1. Wrong model stamp. The Skin Temp, Wrong Strap Model #716 stamp (Strand/BLE/BLEManager.swift ~5917)
    uses selectedModel, 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.
  2. Re-adding the same strap creates a new id, while its data keeps landing
    on the old archived id.
  3. 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.

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.

  1. Fresh NOOP install on iOS with a WHOOP 5.0 / MG strap nearby. NOOP scans
    for WHOOP 4.0 first.
  2. Open Devices: the strap is listed as "WHOOP 4.0".
  3. Remove that device.
  4. Add the strap again via the Add-a-WHOOP wizard (it shows as WHOOP 5.0 /
    MG).
  5. Wear the strap overnight and let NOOP sync the history in the morning.
  6. Open Today: no sleep for the night, and "N of the last N nights recorded no
    HRV".
  7. Optional: Test Centre → Sleep test mode → relaunch. The log shows dayOwner … readId=<new id> hrRows=<few hundred> and sleep-detect … NO-NIGHT … grav=0 … reason=no-motion for 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

  1. andreyeurope commented on Oct 29, 2026

    @andreyeurope
    Author

    I can provide the fix and more data if needed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions