From 3a9f619001b16ab0fd274f3b75b8e314a2420ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Mon, 19 Oct 2026 18:18:12 +0200 Subject: [PATCH] chore(release): v1.43.6 --- CHANGELOG.md | 60 +++++++++++++++++++++++++++++++++++++++++++ docs/api/openapi.yaml | 2 +- package.json | 2 +- public/sw.js | 2 +- 4 files changed, 63 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc35f1a3a..edaec9b8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,65 @@ # Changelog +## [1.43.6] — 2026-10-19 + +### Fixed + +- **A long measurement history no longer loads in one response.** The list for + cumulative types (steps, active energy and similar) loaded every day since + the first reading in one request and drew one table row per day; past 5000 + raw rows the oldest days were cut off without a word. The server now pages + over days with a correct total, folds the days in SQL instead of reading raw + rows into the process, and the list shows 25 days per page. The sleep list + pages over nights the same way and no longer stops at one year; a night older + than a year opens its detail. For `groupBy=day`, `limit` counts days. The + `partial` flag and the `windowFrom` field are gone because nothing is cut off + any more (Refs #1245). +- **A Google Health backfill that keeps moving no longer stops at a page + ceiling.** The ceiling counted pages across every attempt and was never + reset, so a dense type such as heart rate reached it after roughly two and a + half years and every later slice stopped at the same wall. A walk now stops + only when it has not moved back in time for 20 pages in a row, or when it + reaches the horizon (`GOOGLE_HEALTH_BACKFILL_HORIZON_YEARS`, 20 by default). A + type that ends says where its history ends and why, on the integration card, + instead of showing "loading" forever (Refs #1220). +- **Consistency in the sleep score no longer reads 0 after a day without a + night.** A day on which the ring recorded only a nap was placed on the clock + by that nap, hours away from the other nights, and one such day in thirty + pushed the spread past the scale. A day only counts toward the rhythm when its + main sleep is long enough; the nap still counts toward that day's sleep. When + there are not enough nights to judge a rhythm, the row says so instead of + showing a number (Refs #1204). +- **An empty recovery page says what is missing.** For an Oura account the page + names the cause: the connection lacks the heart-health permission, or the + provider returned no resilience level for the account, and links to + reconnecting in the first case (Refs #1204). +- **No empty frame under the next appointment.** The "since the last visit" card + drew its border before knowing whether it had anything to show. Optional + tiles on the insights pages no longer flash a skeleton that collapses to + nothing, and a failed read on them now says so with a retry instead of + vanishing (Refs #1241). +- Workout dates in the list, the header and the dashboard tile follow the + profile timezone instead of the browser's. + +### Added + +- **Heap diagnostics.** The process logs `runtime.heap.sampled` every five + minutes (every minute above 70 % of the heap limit) and, once, a + `runtime.heap.pressure` report above 85 % that lists the oldest requests and + jobs in flight and the busiest routes. With `HEALTHLOG_HEAP_SNAPSHOT=1` it also + writes one heap snapshot into `HEALTHLOG_DIAG_DIR`; a snapshot holds plain + health data, see `docs/ops/heap-diagnostics.md`. +- A nightly run of the full multi-year Google Health backfill test; the run on + every pull request uses a tenth of the pages. + +### Changed + +- Dependabot keeps `next`, `eslint-config-next` and `@next/bundle-analyzer` out of + the weekly groups, so a red Next bump no longer holds the other updates red. +- The timezone guard also matches `getDateTimeFormat(locale, options)` calls + that leave the zone out, and comments and test fixtures no longer carry + personal names. + ## [1.43.5] — 2026-10-18 ### Fixed diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index 4630613f7..7cf4bd1d8 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.5 + version: 1.43.6 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 6dab1f0ab..bc81db282 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.43.5", + "version": "1.43.6", "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 62fac31c7..d11d4b1b8 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.5"; + /* @sw-version-fallback */ "v1.43.6"; 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/*`