From 4ac39a70529f4afa9e4f5adf7e8435dfd9cc1e65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Fri, 24 Jul 2026 21:26:35 +0200 Subject: [PATCH] =?UTF-8?q?chore(release):=20v1.32.24=20=E2=80=94=20isolat?= =?UTF-8?q?e=20Polar=20collections=20and=20log=20envelope=20drift?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per-collection isolation for the Polar vitals sync: one unavailable data type no longer blanks the rest, a failing collection is named on the integration status, and an unexpected response shape is logged instead of reading as no data. Bump version, regenerate the OpenAPI version string, add the changelog entry. --- CHANGELOG.md | 19 +++++++++++++++++++ docs/api/openapi.yaml | 2 +- package.json | 2 +- public/sw.js | 2 +- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85e4490d5..6b42cf3fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,25 @@ ## [Unreleased] +## [1.32.24] — 2026-07-24 + +Polar sync is more resilient when one data type is unavailable. A single +collection that a device or account cannot serve no longer blanks the rest of +the Polar data on every hourly check. + +- **One unavailable Polar data type no longer blocks the others.** SpO2 on a + watch without the sensor, or a data type an account is not entitled to, used + to fail the whole Polar sync and leave recharge, sleep, and activity empty. + Each collection now imports on its own, so the ones that are available still + come in and only the one that failed is held back. +- **A failing Polar collection is named on the integration status.** When a + collection cannot be read, the sync is recorded as failed with the failing + collection named, instead of showing a healthy state over missing data. +- **Unexpected Polar response shapes are logged, not read as empty.** If Polar + returns a body that does not match the expected shape, it is now recorded for + diagnosis rather than silently treated as "no data", which previously could + mark a sync healthy while importing nothing. + ## [1.32.23] — 2026-07-24 Sync status now tells the truth for the connected wearables and CGM sources. A diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index b02b00b47..0f7ef5f94 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.32.23 + version: 1.32.24 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 3dbbb9edd..1ef486bb1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.32.23", + "version": "1.32.24", "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 e9d38b708..0ad558d70 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.32.23"; + /* @sw-version-fallback */ "v1.32.24"; 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/*`