Skip to content

Label skin temp: absolute °C vs Δ°C baseline deviation (#622) — supersedes #1221 - #1224

Merged
ryanbr merged 1 commit into
mainfrom
feat/skin-temp-label-622
Aug 10, 2026
Merged

ryanbr merged 1 commit into
mainfrom
feat/skin-temp-label-622

Conversation

@ryanbr

@ryanbr ryanbr commented Aug 10, 2026

Copy link
Copy Markdown
Owner

Based on #1221 by @dnesdan, rebased onto current main + reconciled with the just-merged #1223 + localized. Supersedes #1221 (which went CONFLICTING after #1223 landed). Fixes #622.

What (from #1221)

Live skin temp on Today/Health showed a bare −0.1° while the deep timeline showed ~34°C, so users thought the homepage was broken. Both are correct (absolute wrist °C vs signed deviation from personal baseline, both stored in skinTempDevC); the bug was presentation. Adds a SkinTempDisplay helper (Swift + Kotlin twin) that labels the scale honestly:

  • Kind: absolute (v ≥ 20, via the existing VitalBands.isAbsoluteSkinTemp contract) vs deviation.
  • Unit: °C/°F vs Δ°C/Δ°F; numbers unsigned-absolute vs always-signed-deviation. (Correct °F handling: a deviation scales by 9/5 with no +32 offset.)
  • UI: title Skin Temp vs Skin Temp Δ, vs baseline caption on live deviation, honest empty-state.
  • No score/decode change; deep timeline (already absolute) untouched. Twin unit tests (7 vectors each).

My reconcile + fix-up

Verification

  • Kotlin: SkinTempDisplayTest (7) + SchemaOracleTest (4, unaffected) green; compileFullDebugKotlin clean; i18n_audit --ci exit 0.
  • Swift: SkinTempDisplay is in StrandAnalytics → validated by swift-packages CI (test (StrandAnalytics)). VitalSignsSummary/MetricCatalog are app-target — I'll run the compile gate (testing build) before merge.

Closes #622. Credit: @dnesdan.

Co-authored-by: dnesdan dnesdan@users.noreply.github.com

Live BLE stores ±°C vs personal baseline in skinTempDevC while deep timeline
charts absolute wrist °C — so Today/Health showing bare "−0.1°" looked like a
broken thermometer next to a 34°C chart.

Add SkinTempDisplay (Swift + Kotlin twin): kind, Δ°C unit, signed number
format. Wire Health vitals, Health detail, Today skin card, Metric/Compare
formatters so absolute reads "34.2 °C" and deviation reads "−0.1 Δ°C" with
"vs baseline" provenance. Empty caption notes the ~4-night calibration path.

No score/math change; no BLE change.
@ryanbr
ryanbr merged commit 9b3dd0e into main Aug 10, 2026
19 checks passed
@ryanbr
ryanbr deleted the feat/skin-temp-label-622 branch August 10, 2026 12:26
ryanbr added a commit that referenced this pull request Aug 11, 2026
#1228)

#1224 (#622) deliberately changed how computed skin temp presents — a
deviation now renders as a signed baseline delta ("+1.1 Δ°F" / "-7.6 Δ°F"
/ "+0.6 Δ°C") and its provenance caption reads "vs baseline" — but the two
app-target tests that pin those strings were never updated. Because
app-build.yml is disabled, no default CI runs StrandTests, so main went red
silently at that merge.

- UnitFormatterTests.testSkinTempMetricPicksDeltaVsAbsoluteByValue: expect
  the signed Δ deviation strings; absolute readings still format plain.
- VitalSourceResolutionTests.testComputedSkinTemperatureShowsComputedCaption:
  expect the "vs baseline" caption.
- VitalSignsSummary: refresh the stale doc comment ("Overnight computed" ->
  "vs baseline") to match the shipped label.

Test/comment-only; matches behavior already on main.
simoncad7 pushed a commit to simoncad7/noop that referenced this pull request Aug 17, 2026
…yanbr#1224)

Label the bimodal skin-temp field honestly (absolute °C vs signed Δ°C deviation) via a SkinTempDisplay helper (Swift + Kotlin twin). Presentation-only; no score/decode change.

Original work by @dnesdan; rebase onto main + reconcile with ryanbr#1223 + localize the new strings by ryanbr.

Co-authored-by: Dan Urbanek <abc@dnesdan.cz>
simoncad7 pushed a commit to simoncad7/noop that referenced this pull request Aug 17, 2026
…relabel (ryanbr#1228)

ryanbr#1224 (ryanbr#622) deliberately changed how computed skin temp presents — a
deviation now renders as a signed baseline delta ("+1.1 Δ°F" / "-7.6 Δ°F"
/ "+0.6 Δ°C") and its provenance caption reads "vs baseline" — but the two
app-target tests that pin those strings were never updated. Because
app-build.yml is disabled, no default CI runs StrandTests, so main went red
silently at that merge.

- UnitFormatterTests.testSkinTempMetricPicksDeltaVsAbsoluteByValue: expect
  the signed Δ deviation strings; absolute readings still format plain.
- VitalSourceResolutionTests.testComputedSkinTemperatureShowsComputedCaption:
  expect the "vs baseline" caption.
- VitalSignsSummary: refresh the stale doc comment ("Overnight computed" ->
  "vs baseline") to match the shipped label.

Test/comment-only; matches behavior already on main.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Skin temperature expressed as -0.1°C vs actual temp

2 participants