From 455e92c5a59f0961e1b80814ab4f05c31a2cf99a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Thu, 22 Oct 2026 00:46:34 +0200 Subject: [PATCH] chore(release): v1.44.0 --- CHANGELOG.md | 107 ++++++++++++++++++++++++++++++++++++++++++ docs/api/openapi.yaml | 2 +- package.json | 2 +- public/sw.js | 2 +- 4 files changed, 110 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ff9c8570e..17d339d5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,112 @@ # Changelog +## [1.44.0] — 2026-10-22 + +### Added + +- **Import lab results and medications from a spreadsheet.** Settings > + Export & Import has a card that reads the head of a CSV file, suggests a + column for each field from its header, and lets you correct the + separator, decimal mark, date order and time zone. A check run lists + every refused row with its line and reason before anything is written, + and importing the same file again only finds duplicates. Templates for + both kinds download from the card. (#1215) +- **An activity calendar** on the workouts page: a week or month of steps, + active minutes, workouts by sport and training load, each day measured + against your own usual range and each period against the ones before. + Weekly and monthly goals are optional. Today counts as in progress until + it is over. +- **Fitness, fatigue and form** above the workout list, from the training + impulse HealthLog already stores. A day with activity data but no + training counts as rest; a day without any data is left out instead of + counted, and the card says how current the figures are. +- **Where a value comes from.** Each metric page links to a view that lists + every source with readings for a day, its place in your source priority + and which one the charts use, with a side-by-side comparison of two + sources over 30, 90 or 365 days. +- **Lab trends.** A marker with at least three readings over a year shows + its slope, and when the straight line would leave the reference range + within three years. A series whose newest reading is more than a year + old is shown without a projection. +- **The change at a medication start**, as a level and a trend change with + intervals, next to the existing before and after comparison. Days with + missed doses, pauses and other medications that changed in the window are + accounted for, and the view says when the data are too thin. +- **More in the doctor report:** sleep duration, HRV as SDNN and RMSSD, + daily steps, a workout summary per sport and the medication effect, each + only when its module is on. The medication effect is included only when + the medication list is shared too. The report names the window it + analysed. +- **More correlations:** water, caffeine, micronutrients, alcohol days, + workout minutes, training impulse, activity ring minutes, State of Mind + and room climate against that night's sleep. State of Mind, mindful + minutes and alcohol days stay on the correlations page and are never + handed to the Coach or the narrative cards. +- **Level shifts in thirteen vitals over 180 days** instead of five over 90. + Slow drifts and plateaus no longer count as a shift. +- **Mental health screeners** show whether a change reaches the threshold + that counts as meaningful. +- **Apple Health:** exercise, stand and mindful minutes, stand hours, State + of Mind and AFib burden. Workout GPS tracks are kept only when you turn + that on (Settings > Data & privacy); tracks already stored stay, and + accounts that already kept tracks start with it on. +- **Oura:** workouts, intraday heart rate and a full history backfill that + resumes after a restart. +- **Indoor climate** (CO2, temperature, humidity) through the measurement + API, with a Home Assistant blueprint. +- **A guardian can connect a managed profile's integrations** (Withings, + WHOOP, Oura, Polar, Strava, Google Health), and each card says whose + record it connects for. +- **FHIR:** Observations as a time series by `date` and `code`, with RMSSD + and workouts coded. + +### Changed + +- **Settings are sorted into nine groups:** Account, Tracking, + Arrangement, Notifications, Health profile, AI, Connections, Data and + System. Every old address still works and forwards to the new place. On + a phone one button names the current section and opens the list. Each + card saves the same way and asks once before anything destructive, and + German wording uses one word per thing. +- **All OAuth integrations refresh their tokens the same way**, so a + refresh that races another one no longer signs you out of Strava, Google + Health or Withings. One provider account can be linked to only one + record. +- **Imports from Apple Health insert large batches faster**, and the health + check answers "starting" while the background jobs come up, so a slow + boot no longer marks the container unhealthy. + +### Fixed + +- Oura no longer imports the equivalent walking distance as distance. +- A workout synced from two sources counts once in strain, the briefing + and the day view. +- The Coach's provider and model switch is back, and notification channel + switches act on the first tap again. +- Jobs queued during start-up wait for the queue instead of being dropped. + +### Upgrade notes + +- **1536 MB is the supported memory floor for the app container.** This is + the existing default of `APP_MEMORY_LIMIT`; if you lowered it, raise it + back. Below the floor the app still starts, but the boot log, the + support report and Admin > System status say so. Plan for 3 GB of RAM on + the host. +- Migrations 0424, 0430 to 0434, 0440 to 0442 and 0470 run on start. They + add columns and settings, turn the GPS track setting on for accounts + that already have tracks, and drop a cached copy of the AI insights + text, which is rebuilt on the next run. Workouts with a track but no + elevation get their climb filled in by a background pass after the + first start. +- If you use Fitbit, connect Google Health before 30 October 2026, when + Google turns the old Fitbit API off. + +### Thanks + +Thanks to @Cnote43 for the case for a spreadsheet import of twenty years of +lab results (#1215), and to @alondin and @haritowa for staying with the +Oura connection until it held (#1204). + ## [1.43.11] — 2026-10-21 ### Fixed diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index 25e93ba9f..6cc0471ec 100644 --- a/docs/api/openapi.yaml +++ b/docs/api/openapi.yaml @@ -1,7 +1,7 @@ openapi: 3.1.0 info: title: HealthLog API - version: 1.43.11 + version: 1.44.0 description: >- Self-hosted personal-health-tracking PWA — public API surface for the iOS native client and external ingest. diff --git a/package.json b/package.json index 761b2393a..15a5b2028 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.43.11", + "version": "1.44.0", "description": "Self-hosted personal-health-tracking PWA with Withings integration, AI insights, and doctor-report PDF export.", "license": "PolyForm-Noncommercial-1.0.0", "homepage": "https://healthlog.dev", diff --git a/public/sw.js b/public/sw.js index 7132c296a..58b5aebf1 100644 --- a/public/sw.js +++ b/public/sw.js @@ -36,7 +36,7 @@ try { // v1.4.38.4 → v1.4.42. Do not hand-edit; bump `package.json` and rebuild. const CACHE_VERSION = (typeof self !== "undefined" && self.__APP_VERSION__) || - /* @sw-version-fallback */ "v1.43.11"; + /* @sw-version-fallback */ "v1.44.0"; const STATIC_CACHE = `healthlog-static-${CACHE_VERSION}`; const PAGE_CACHE = `healthlog-pages-${CACHE_VERSION}`; // v1.18.6 — read-only data cache for a curated allowlist of safe GET `/api/*`