From ec49157e857f9b0126e18d245a8ee00fcfe3171e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sat, 25 Jul 2026 22:18:03 +0200 Subject: [PATCH] =?UTF-8?q?chore(release):=20v1.32.38=20=E2=80=94=20accept?= =?UTF-8?q?=20a=20blood-glucose=20reading=20that=20carries=20no=20context?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 41 +++++++++++++++++++++++++++++++++++++++++ docs/api/openapi.yaml | 2 +- package.json | 2 +- public/sw.js | 2 +- 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1e658029f..7d5dd6562 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,47 @@ ## [Unreleased] +## [1.32.38] — 2026-07-25 + +Blood-glucose readings from anything other than the manual entry form were +never saved. + +A rule added years ago required every blood-glucose reading to carry a +context: fasting, after a meal, random, or bedtime. That is a fair thing to +ask of someone typing a reading in by hand. It is impossible for a sensor, +which measures every few minutes and cannot know what you were doing. + +So every automated path failed. A CSV import reported the rows as skipped and +still showed a green tick. Nightscout counted them as failed rows and carried +on. Apple Health has no context field at all, so not one of its readings could +ever have been stored. The same for readings written through the automation +interface, through Telegram, and through the JSON importer. None of it was +visible: no error reached anyone, and the affected charts and panels simply +stayed empty as though nothing had been measured. + +A reading with no context is now stored with no context, which is what it is. +Where a context is given it is still checked. Manual entry still asks for one, +because the form offers the choices and nothing is lost by asking. + +Absence is now shown as absence: a reading without a context is left out of the +per-context breakdowns rather than being counted as one of them. + +**Imports no longer claim to have worked when they did not.** A run that wrote +nothing is shown as a failure. A run that wrote some rows and skipped others is +shown as a partial result. Only a run that actually landed something shows as +done. Skipped rows are grouped by reason with a count instead of listing the +first fifty identical lines, and the per-row detail is still there behind a +disclosure. This covers the CSV, JSON and Apple Health cards alike. + +Reported by @lutzkind, who traced it to the parser, ran it in isolation to rule +out the timestamp and unit handling, and checked the database afterwards to +prove nothing had been written. Files that were rejected can simply be imported +again. + +**For operators.** Migration `0274` relaxes the constraint. It adds no column +and rewrites no row. Readings that were refused in the past were never stored, +so they need a fresh import from the source. + ## [1.32.37] — 2026-07-25 Two ways a record could quietly lose data, both closed. diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index 997fffdca..d9448a580 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.37 + version: 1.32.38 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 374ad5de4..1f50c9823 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.32.37", + "version": "1.32.38", "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 90b4ee924..0a394fe63 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.37"; + /* @sw-version-fallback */ "v1.32.38"; 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/*`