Skip to content

NOOP 8.5.0

Latest

Choose a tag to compare

@github-actions github-actions released this 09 Jul 04:53
3a17263

NOOP v8.5.0

A data-and-polish release: a new native raw-SpO₂ readout, unit/display fixes that make skin temperature and Effort honour your settings, the return of the live workout card, steadier battery behaviour, and a lighter, faster app. Update from the Releases page, AltStore, or brew upgrade.

Added

  • Raw SpO₂ on the Health screen (WHOOP 4.0, #93). The strap only streams the raw red/IR PPG optical channels — the calibrated blood-oxygen % is a WHOOP cloud computation NOOP can't reproduce. Rather than fake a number, NOOP now surfaces the nightly raw red/IR ADC means as an honest, explicitly uncalibrated "Raw SpO₂" reading. Both platforms.
  • Fitness Age shows a countdown while it builds (#81). Instead of an empty gauge, Fitness Age now says how many more nights of wear it needs before it can score you.

Fixed

  • Skin temperature respects the Fahrenheit setting (#101). The Deep Timeline hard-coded skin temp to °C — the line, axis, stats and readout ignored your unit preference. They now convert to °F when you've chosen it. Both platforms.
  • The Today "Effort" ring follows your Effort scale (#45). The hero gauge ignored the 0–100 vs WHOOP 0–21 setting and always showed 0–100. It now shows the scale you picked, with one decimal on the compressed 0–21 axis (matching WHOOP and the rest of the app).
  • The "workout in progress" card is back on Home (#105). The Liquid Home rewrite dropped the live indicator that appears while a manual workout is running. It's restored, auto-appears/clears with the workout, and taps through to the live view.
  • Apple Health steps import into your daily totals (#89). Imported steps were written everywhere except the daily-metric row the step display actually reads, so they never showed. Fixed on both platforms.
  • Clearer "Overnight only" HRV wording (#92). The setting now spells out that continuous background HRV capture (including daytime naps) is paused outside your quiet-hours window, and points you at the "Take an HRV reading" button on the Live screen for an on-demand daytime reading. Both platforms.
  • Low-battery alert no longer re-fires while charging (#80). Plugging in no longer re-triggers the low-battery notification.
  • Battery estimate fixes (#99). A low-state-of-charge cap and a corrected slope window keep the battery estimate honest near empty.
  • Home-screen widget shows current battery (#114). The widget could display a stale value; it now refreshes to the latest reading.
  • Smaller display fixes. The Motion metric is now labelled "g" (#102); skin-temp banding no longer misreads an absolute reading (#111); the steps empty-state reads correctly on WHOOP 5.0/MG (#107); Today hero labels no longer wrap (#78); and the Settings Appearance card has its row dividers back (#79).

Performance

  • Export imports can't balloon memory (#70, #125). The WHOOP and wearable-export importers were bounded per-entry but not on the sum of what they held in RAM. A large or crafted export could accumulate unbounded data before parsing; a per-import total-byte budget now caps peak memory, and a truncated import says so rather than silently dropping data. Both platforms.
  • Snappier Sleep screen (#128). The sleep-consistency chart rebuilt its per-night bed/wake fold on every frame; it's now memoized, so scrolling reuses it.
  • Fewer per-render allocations on Today (#129). Date formatters that were allocated on every ~1 Hz redraw are hoisted to shared, cached instances.

Diagnostics & honesty

  • Oura ring: the log now says WHY a time anchor was rejected (#91). When an Oura ring's UTC anchor won't land (so sleep/daily can't be timed), the strap log now names the reason — an implausible timestamp — instead of failing silently.
  • Test Centre no longer cries "missing sleep" when sleep was computed (#127). The Sleep & Rest capture check keyed only on a deep gate trace that legitimately doesn't re-emit when a night was already scored; it now also accepts the per-day computed-sleep line as proof, so a valid capture reads complete. Both platforms.

Notes

  • Raw SpO₂ is a raw sensor reading (unit "ADC"), not a calibrated blood-oxygen percentage — an accurate % needs WHOOP's proprietary calibration curve, which no independent app has. The calibrated % still comes through a WHOOP or Apple Health import.

What's Changed

  • Battery estimate: scale the sanity cap to current SoC — fixes "9% = 3 days" (#99) in #118
  • Widget: keep the Home-screen widget fresh (publish on background + live battery/connection) (#114) in #117
  • Steps: make the no-motion empty state WHOOP 5/MG-aware (#107) in #116
  • Skin temp: fix Fahrenheit (deviation must not get the +32 offset) (#111) in #115
  • Fix battery estimate anchoring on a stale, multi-cycle-old peak (#99) in #109
  • Fix unlabeled Motion readout in Deep Timeline (#102) in #108
  • Raw SpO2 on Health: WHOOP 4.0 raw PPG ADC — iOS/macOS + Android (#93) in #119
  • Settings: add missing row dividers in the Appearance card (#79) in #83
  • Battery alert: stop re-firing the low-battery notification while charging (#80) in #82
  • Fitness Age: "N more nights" countdown while it's building (iOS + Android) in #81
  • fix(issue #92): clarify overnight-only HRV setting and manual HRV reading in #95
  • iOS/macOS: clarify overnight-only HRV setting copy (#92) in #120
  • Today/Deep Timeline: respect °F + Effort scale on the hero, with one-decimal Effort (#45, #101) in #121
  • Android Deep Timeline: respect °F for skin temp (#101) in #122
  • Oura: log WHY a UTC anchor was rejected — iOS + Android (#91) in #123
  • Apple Health import: write steps to DailyMetric — iOS + Android (#89) in #124
  • Android import: bound peak RAM with a per-import total-byte budget (#70 parity) in #125
  • perf: bound import RAM with a per-import total-byte budget in #70
  • Today (liquid): restore the 'workout in progress' card (#105) in #126
  • Perf: hoist per-render DateFormatters to static in #129
  • Sleep: memoize SleepConsistencyCard per-night fold (perf) in #128
  • Test Centre: capture check accepts computed-sleep evidence (#127) in #130
  • Today hero: keep ring labels/pills on one line (oversized card, #74) in #78
  • Release v8.5.0: changelog + version bump in #131

Downloads — NOOP Staging identity, installs beside the official app (separate data):

  • AndroidNOOP-android-v8.5.0.apk (com.noop.whoop.staging)
  • macOSNOOP-macos-v8.5.0.zip (unzip, then right-click → Open)
  • iOSNOOP-ios-unsigned-v8.5.0.ipa (AltStore / Sideloadly)