Skip to content

0.9.29 - recovery/sleep miscalculated almost daily #448

Closed

Description

@cb0806151

What happened?

Almost every day I'm fighting with sync times for an accurate sleep record/recovery score; I wake up, it hasn't fully synced yet, so I get the wrong recovery score and incomplete sleep data until syncing and then recalculation completes.

It'd be such a better daily user experience if there was the option to set a wakeup time (7AM in my case) and these two areas of the app:

Image

would show a loading/syncing icon until the app has caught up to that wakeup time and then the sleep and recovery calculation are kicked off. Otherwise I'm dealing with inaccurate data every day until syncing is done (which in some cases is 4-5 hours after I wake up)

Steps to reproduce

  1. Wear the band overnight
  2. Check it in the morning
  3. Note that sleep/recovery has already calculated even though syncing hasn't caught up to wakeup time

App version

0.9.29

Platform

Android (APK)

Phone model and OS version

Moto G power 2022 - Android version: 12 S3RQS32.20-42-10-9-12

Which band?

WHOOP 4.0

Screenshots

No response

Quick checks

  • The official WHOOP app is not also connected to this band
  • I've searched existing issues for this

Activity

  1. gentbot commented on Sep 22, 2026

    @gentbot
    Contributor

    But if the data hasn't synced then it is incredibly unlikely that the calculation would be accurate.

    Is the expectation that a "wake time" would count as a place to automatically try and sync the data if the app is running?

    Just trying to understand more clearly what you mean or what is expected as this seems like an interesting area.

  2. cb0806151 commented on Sep 22, 2026

    @cb0806151
    Author

    But if the data hasn't synced then it is incredibly unlikely that the calculation would be accurate.

    Is the expectation that a "wake time" would count as a place to automatically try and sync the data if the app is running?

    Just trying to understand more clearly what you mean or what is expected as this seems like an interesting area.

    True

    No, the wakeTime is to be tested against the dataSyncedUpToTime; when the dataSyncedUpToTime is greater than or equal to the wakeTime, then the recovery and sleep stats calculations can be started. Pseudocose example:

    if (!hasRecoveryRun && 
    !areSleepStatsCalculated && 
    dataSyncedUpToTime >= wakeTime
    ) {
    hasRecoveryRun = true
    areSleepStatsCalculated = true
    runRecoveryCalculation()
    runSleepStatsCalculations()
    } else {
    // Check again after next update to the dataSyncedUpToTime variable
    }
    

    This ensures the sleep stats and recovery aren't recalculating repeatedly as syncing is bringing in more sleep data, instead it's waiting until all sleep data is brought in then running the calculations. It's only recalculating on days when the user sleeps in or if the user doesn't set a regular wake up time.

    Many thanks for the clarification question, appreciate it 👍

  3. added a commit that references this issue on Oct 4, 2026
  4. cb0806151 commented on Oct 14, 2026

    @cb0806151
    Author

    Version 0.11.3 fix worked perfectly! Didn't send me a notification until it had synced all the way up to my regular wake time and only sent that one notification. Thanks @abdulsaheel!

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions