github OpenStrap/edge v0.9.29

4 hours ago

Release Notes

This release adds support for additional heart-rate devices, introduces several new tracking options, and includes a number of accuracy, reliability, and data-quality fixes.

New Device Support

  • Added support for Bluetooth heart-rate chest straps for basic heart-rate tracking.
  • Added support for Oura Ring for basic heart-rate tracking.
  • Added Spanish, French, German, Chinese, and Hindi translations. The language can be changed from Profile.
  • Chest strap and Oura support currently provides heart-rate data only. These devices do not provide the full range of analytics available with WHOOP data.

New Features

  • Added daily step goals. Goals can be set and edited from the app.
  • Added workout detection prompts for workouts that have been left running. The app will ask whether you are still working out instead of continuing to record indefinitely.
  • Added Bowling as a workout type.
  • Added a General/Custom workout type for activities that are not covered by the existing list.
  • Added the ability to mark a recorded night as "Not sleep".
  • Restored the "Track something else" free-text journal entry.
  • Added GitHub, Discord, and Reddit links to Profile.

Fixes

Recovery

Fixed an issue where Recovery could remain permanently stuck at "Not scored". Certain data-cleanup operations could remove the baseline used to calculate Recovery, leaving the score unable to recover.

The common case is now handled correctly. One edge case remains: nights where no sleep is detected at all.

Sleep

Fixed an issue where short periods of sleep around midnight could be assigned to both adjacent nights. This could result in inflated sleep-need calculations on both days.

Sleep data exported to Apple Health has also been rewritten to export as a continuous night instead of multiple fragmented sleep periods.

Heart Rate

Fixed an issue where Zone 5 could be reached too easily before the app had observed a user's actual maximum heart rate. The previous fallback maximum could result in excessive effort being attributed to the highest zone.

Improved irregular heart rhythm detection so that a single irregular reading no longer triggers an alert. Alerts now require a sustained irregular pattern.

Calories

Fixed several cases where daily calorie totals could be inaccurate:

  • Walking calories were not always calculated using the user's actual pace.
  • Calories from a workout that ended early could be lost.
  • Cancelled workouts could leave calories incorrectly included in the daily total.

WHOOP

Fixed wake alarms on some WHOOP 4 devices that failed to trigger because the app was sending a command format that the firmware did not execute.

Added support for pairing WHOOP 5 and WHOOP MG.

Language

Fixed an issue where the app could default to German on first launch regardless of the device's configured language.

Also corrected a number of French and German translation issues, including grammar and pluralization.

Backups

Improved handling of corrupted NOOP backup files. The app now clearly reports when a backup is damaged instead of silently failing or presenting a misleading error.

Reliability

Included additional fixes for device synchronization, connection stability, and general reliability.

Known Limitations

  • Bluetooth heart-rate chest straps and Oura currently provide heart-rate data only and do not receive the full analytics available from WHOOP data.
  • A genuinely corrupted NOOP backup cannot currently be recovered. The import process can identify and report the corruption, but data that is already damaged in the source file cannot be restored.
  • The remaining Recovery edge case involving nights with no detected sleep is still being tracked separately.

What's Changed

  • fix(ble): arm gen4 wake alarm with the rev-1 9-byte form the firmware executes by @Pablodvs in #265
  • fix(derive): cap the live-workout derive hold so a forgotten session cannot blank Home by @DropTabl in #281
  • feat(ble): close the gen5/MG pairing gap (no wire-format in edge) by @dev-noaman in #255
  • feat(workout): "Still working out?" nudge for a forgotten live session by @DropTabl in #282
  • fix(sync): enforce safe Gen5 history task boundaries by @DropTabl in #284
  • feat(energy): price walking into Active energy from measured cadence (v77) by @DropTabl in #283
  • band-agnostic: storage, ble seam, and the first non-whoop device by @abdulsaheel in #280
  • fix irregular rhythm notification firing almost every day by @abdulsaheel in #289
  • fix ios build: known out of scope in AccessorySetup by @abdulsaheel in #292
  • language picker in profile by @abdulsaheel in #291
  • add es/fr/de/zh/hi translations by @abdulsaheel in #295
  • fix: activity-type edit regression + Active Energy workout-gap credit by @abdulsaheel in #294
  • i18n: migrate onboarding + profile strings by @abdulsaheel in #297
  • urgent: fix app defaulting to german on fresh install by @abdulsaheel in #298
  • fix(ble): the official gen5 connection bootstrap, through READY by @DropTabl in #285
  • fix(zones): anchor zone edges on max(observed ceiling, age estimate) by @DropTabl in #293
  • fix gen5 pairing test pinning a stale present() signature by @DropTabl in #302
  • gate the workout health write on a delete that actually cleared by @DropTabl in #301
  • i18n: finish the sweep across lib/ui2 + shared band/source components by @abdulsaheel in #299
  • add bowling and a general workout, and title Health Connect records by @DropTabl in #300
  • step goal editing + dashed calibrating rings by @abdulsaheel in #306
  • fix a batch of small stuff: strain copy, flaky tests, readiness clobber, gen5 rr, health export, sleep reject by @abdulsaheel in #308
  • Feat/step goal and calibrating rings by @abdulsaheel in #307
  • fix fabricated health-export leak, silenced-CTA bug, dedupe helpers, drop stray local files by @abdulsaheel in #314
  • repin + fix #305 + fix #40 by @abdulsaheel in #316
  • fix noop import: trust CRC over size, handle real corruption honestly by @abdulsaheel in #317

New Contributors

Full Changelog: v0.9.28...v0.9.29

Don't miss a new edge release

NewReleases is sending notifications on new releases.