Skip to content

NOOP AI 9.3.0 DX Beta

Choose a tag to compare

@github-actions github-actions released this 01 Aug 11:34

NOOP AI 9.3.0 DX Beta

Built on RyanBR's NOOP 9.3.0 (35 upstream commits since 9.2.1), this release takes upstream's health
imports and scoring corrections while keeping every fork surface — the Coach, its memory, and the
Heute prototype — intact.

Added

  • Water and caffeine import from Apple Health (upstream ryanbr#949). Read-only in both directions that
    matter: imported entries keep their own row so they can never overwrite a manual one, and NOOP
    never writes either type back. iPhone asks permission once for the two new scopes, including for
    users who granted Health access before this version existed. The Coach's log_caffeine tool writes
    through the same shared store, so chat-logged and imported intakes sit side by side.
  • One Customize Today editor (upstream ryanbr#940). The separate Arrange, Key Metrics and Your Cards
    sheets are replaced by a single Shown/Hidden list with drag-to-reorder, Cancel/Save over a draft,
    and "Edit" rows that deep-link to the two child pages. The fork's Tiles per row picker moved
    onto the Key Metrics page and is now discarded by Cancel like every other setting there.
    • The Coach banner is an ordinary row in that list. It can be dragged to any position or moved
      to Hidden, exactly as before. The floating Coach button and the Heute header entry are unchanged.

Changed

  • Effort scoring (upstream ryanbr#963, ryanbr#983). Heart-rate samples are weighted by their own gap rather
    than the window's first one, and a saved workout is scored against your measured resting heart rate
    instead of a hardcoded 60. Expect Effort numbers to move in either direction, including on past days.
  • Version identity is 9.3.0 DX Beta (build 215; Android versionCode 307). The AltStore and
    SideStore source moves to this release as it is published, so "Check for updates" and a sideload
    install both resolve to 9.3.0 DX Beta.
  • This release ships a macOS build too. 9.2.1 and 9.2.2 DX Beta were iOS-only; the release now
    carries NOOP-macos-v9.3.0-dx-beta.zip (universal x86_64 + arm64, ad-hoc signed so macOS 26 can
    hold its Bluetooth permission) alongside the unsigned iOS .ipa.

Fixed

  • Oura days no longer spike to a 90+ resting heart rate (upstream ryanbr#375). A nap or a short
    fragment could outrank the real night and claim the whole day's numbers. Re-import your Oura
    history to correct days already stored.
  • Sleep staging cannot jump from awake to deep or REM (upstream ryanbr#348/ryanbr#987).
  • The i18n gate is green again. The watch String Catalogs had accumulated Xcode build churn that
    invented three untranslatable keys and pushed the non-focus locales past their ratchet allowance,
    and two fork release titles were still raw Kotlin literals. Both are fixed; the audit baselines
    were ratcheted down (Android 215 → 213, Apple 64 → 16 tracked entries).
  • The tools/ tree is normalised into Tools/ (upstream ryanbr#979/ryanbr#1009). The fork carried both
    spellings; on a case-insensitive macOS checkout they look like one directory, so upstream's rename
    did not land here and six linux-capture files stayed on an older revision — the new spo2_candidate_82
    tests arrived without the decoder change they cover, and Tools Python CI was red. The 27 stray
    paths moved, the six files match upstream again, and the suite runs 212 tests green.
  • The Whoop source badge is visible again on Classic Today. A fork commit had suppressed the
    per-ring provenance badge whenever the resolved source was "Whoop", which for a WHOOP user hid it
    entirely under the Charge and Rest rings. Both Today screens now match upstream exactly.

Verification

  • xcodebuild build of both app targets — macOS Strand built universal
    (ARCHS="x86_64 arm64" ONLY_ACTIVE_ARCH=NO, the way CI builds it, so an arm64-only thinning cannot
    hide an Intel break) and iOS NOOPiOS for the simulator — both succeeded.
  • swift test for WhoopProtocol (472), WhoopStore (334), StrandAnalytics (1209) and StrandImport
    (221) — all green.
  • StrandTests under xcodebuild … test1726 tests, 0 failures (1 skipped). The
    CoachMemoryDedupTests failure noted while this merge was in flight is resolved.
  • Tools/linux-capture212 tests green after the Tools/ normalisation above (the workflow
    requires at least 200 to be discovered). Tools/i18n_audit.py --ci green.
  • Not verified on hardware. Strand/BLE/BLEManager.swift merged automatically (upstream +201
    lines) and no CI or local test covers the CoreBluetooth path. Pair with a real strap and watch one
    offload.

Thanks

Built on upstream work by:

And everyone who filed the reports behind these fixes.