From 4d459dbb687b0fece8eab7c432c9e39feea7d0d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Tue, 28 Jul 2026 00:09:29 +0200 Subject: [PATCH] =?UTF-8?q?chore(release):=20v1.33.2=20=E2=80=94=20the=20c?= =?UTF-8?q?ycle-symptom=20fix=20that=20did=20not=20reach=20the=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v1.33.1 claimed custom cycle symptoms were carried in backups. They were not, and the same release turned the old silent drop into a hard failure, so the accounts the fix was written for went from losing one symptom link to being unable to restore at all. --- CHANGELOG.md | 34 ++++++++++++++++++++++++++++++++++ docs/api/openapi.yaml | 2 +- package.json | 2 +- public/sw.js | 2 +- 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index addeeb34e..d0fda05cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,40 @@ ## [Unreleased] +## [1.33.2] — 2026-07-28 + +### The cycle-symptom fix in v1.33.1 did not work + +v1.33.1 said it had fixed custom cycle symptoms in backups. It had not. The +fix was real in three places and missing from the one that decides what ends +up in the file. The code that reads your cycle data returned the symptoms you +created yourself. The file format declared a field to hold them. The restore +knew how to put them back. But the step that assembles the file copies its +contents across one field at a time, and that list was never extended, so +every backup written since carried an empty list of custom symptoms. + +The same release also replaced a silent drop with an error. Before it, a +backup referencing a symptom the restoring instance did not have lost that +one link and finished. After it, the restore stops and reports a failure. +Together with the empty list, that took an account with a symptom of its own +from losing a single link to being unable to restore at all. That is the +group the fix was written for. + +Nothing in your stored data was damaged. But a backup written by v1.33.1 or +earlier does not hold the symptom definitions you created, and restoring one +of those files on this version will fail at the first day-log referencing +one. Take a fresh backup after updating and keep it alongside the older +files. + +The assembly step no longer lists fields by hand. It copies each section +whole, so a field added to a section reaches the file because of the way the +code is written rather than because somebody remembered. Both ends of this +were covered by tests that passed for the whole time it was broken, and +nothing covered the join between them, so there is now a test that writes a +real backup for an account with a symptom of its own, removes that symptom +from the database, restores the file, and checks the row and its day-log link +came back. + ## [1.33.1] — 2026-07-27 A patch release about the same thing as the one before it: places where the diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index 58dc9d0be..994139e02 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.33.1 + version: 1.33.2 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 6cca5848c..5115fa8d6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.33.1", + "version": "1.33.2", "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 8d6d19c22..e97634d40 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.33.1"; + /* @sw-version-fallback */ "v1.33.2"; 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/*`