¶ Bodylog sleep recovery and health charts - 2026-07-27
Bodylog now:
- retains Health Connect sleep-stage totals and intervals and performs one versioned enrichment upload for previously synced sleep sessions without changing their server identity;
- estimates sleep need on web and Android from actual sleep, accumulated shortfall, and Body Battery recovery, targeting a morning Body Battery of 80;
- labels the estimate
provisional until 14 matched sleep/recovery nights are available and bounds the estimate and carried debt;
- overlays the red sleep-need line on the sleep chart;
- merges direct Garmin and Health Connect daily steps without adding overlapping source totals;
- shows reference lines at 8,000 steps and 95% pulse ox (general reference, not a medical threshold);
- renders sampled Garmin stress as a dense histogram: 0-25 blue, 26-75 orange, 76-100 red;
- supplies bounded raw Body Battery samples for sleep/recovery matching and keeps stress as intraday data;
- labels Connect IQ temperature as
Watch temperature because it is not verified body or skin temperature.
¶ Android Health entry follow-up
The Android Health page now:
- removes manual Heart BPM and HRV fields so those metrics remain device-sourced;
- presents stress as a labeled choice and gives Mood, Energy, and Body feeling separate full-width controls;
- removes the redundant clear-description and refresh buttons;
- places a microphone action at the bottom-right of the health-note field;
- keeps stress as a value-colored bar histogram;
- renders sleep as one 24-hour vertical timeline per local day, with available Light, Deep, REM, and generic sleep intervals at their actual clock times;
- splits sleep intervals at local midnight so overnight sleep and midday naps are immediately distinguishable;
- preserves the red sleep-need duration marker beside the daily timeline;
- maps timeline positions by local wall-clock time across daylight-saving offset changes.
¶ Garmin and Health Connect capability boundary
- Health Connect can supply sleep phases, RMSSD HRV, steps, respiration, and other records only when an installed provider publishes them. Existing Garmin sleep sessions contained stage records; the Android update will enrich them once on the next Health Connect synchronization.
- Connect IQ can provide direct daily steps, a current respiration-rate snapshot, generic watch temperature, and active heart-beat intervals while an app is running. It does not expose Garmin's historical HRV, proprietary sleep-need, optimal bedtime, rhythm, breathing-variation, or restless-moment history.
- A future Garmin enterprise Health API/SDK integration is required for proprietary Garmin Connect sleep and recovery fields not exposed through Health Connect or Connect IQ.
- Feature PR:
BodyLog/Bodylog.dev#797
- Feature commit:
ddf86c195e270b0b7e273a026e40899e0559e17d
- Deployed source:
8c5facd0d42d8b0b12a14d1f03331632733e0f65
- Kubernetes image:
gitea.app.lan/bodylog/bodylog.dev:sha-8c5facd0d42d
- Android version:
0.1.2026061851-8c5facd0d42d
- Android APK SHA-256:
fd99fe0f8ebec2e2a5b3efd59a9c9ba0a08d9c0b9489cba3512e5b18374d55d2
¶ Android Health page release
- Health-page PR:
BodyLog/Bodylog.dev#801
- Health-page commit:
68fafcd3cf2b9f8f1a2aa752cf5408af341a78cd
- Local-clock correction PR:
BodyLog/Bodylog.dev#803
- Corrected deployed source:
c454e6879eeda5d6d500a872c17b03b775071ce4
- Kubernetes image:
gitea.app.lan/bodylog/bodylog.dev:sha-c454e6879eed
- Android version:
0.1.2026061861-c454e6879eed
- Android APK SHA-256:
18f24cce7fe9629658b25f3475a273ea25f5aa4461871878842452821bc4399a
Initial release verification:
- Rust: 177 passed, 14 database-gated tests ignored in the unit run.
- Garmin PostgreSQL integration: passed.
- Profile/health PostgreSQL integration suite: passed.
- Frontend: 127 tests passed and production build passed.
- Android: full debug unit suite and release build passed under Java 21; the exact Java 17, Garmin-enabled, signed-release configuration also passed locally.
- CI run task 7294: all 24 steps passed, including signed APK build, image publication, secret synchronization, and rollout.
Android Health page verification:
- Focused Android tests passed for the composer contract, sleep-stage parsing, stress presentation, midnight splitting, naps, and Body Battery behavior.
- The complete Android debug unit suite, release build, and vital lint passed before merge and again after integration with current
main.
- CI tasks 7302 (Android internal testing) and 7303 (build and deploy) completed successfully for corrected commit
c454e6879eed.
- Kubernetes deployment generation 1364 is observed; one of one replicas is ready with zero restarts.
/healthz returned ok.
- The published APK manifest reports version code
2026061861 and version name 0.1.2026061861-c454e6879eed.
- The downloaded APK matches the published SHA-256 and verifies with one signer using APK Signature Scheme v2.