From 6333d4d9891c0df137b08661e47664706d1cd6e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Thu, 23 Jul 2026 22:50:03 +0200 Subject: [PATCH] =?UTF-8?q?chore(release):=20v1.32.9=20=E2=80=94=20Coach?= =?UTF-8?q?=20Guard=20II=20(grounding=20ledger=20+=20action=20ladder)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Coach output guard now tracks the numbers it was shown across the whole conversation, so a figure carried forward or grounded in a goal, a schedule, or a reference band stops being marked unverified, while an invented one is still caught and a fabricated risk number now blocks in six languages. --- CHANGELOG.md | 26 +++++++++++++++++++++++++- docs/api/openapi.yaml | 2 +- package.json | 2 +- public/sw.js | 2 +- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f703f8600..7bd4500c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,31 @@ ## [Unreleased] -## [1.32.8] — 2026-07-23 +## [1.32.9] — 2026-07-23 + +The Coach output guard now remembers the numbers you were actually shown across +a whole conversation, so figures you legitimately carry forward stop getting +marked unverified while an invented one still gets caught. + +- **A figure from earlier in the chat is no longer flagged when you bring it + back up.** The guard now keeps a running record of every number the Coach was + given this turn and in earlier turns, plus your goal figures, your medication + doses, and the reference bands it was shown. A value it can trace to one of + those is left alone even a few turns later. A value the Coach only wrote in an + earlier reply is never trusted on that basis, so a number that once slipped + through cannot quietly become authoritative later. +- **An educational sentence keeps its numbers.** A line that states a general + guideline, like the note that adults usually need seven to nine hours of + sleep, is recognised as a reference and left intact instead of having its + numbers stripped. This works in every supported language. +- **A dose you are actually on reads as a restatement, a different one does + not.** When the Coach says to keep taking a dose, the reminder is allowed only + when the amount matches a dose on your schedule. A wrong maintenance amount, or + any wording that nudges the dose up or down, is still held back. +- **Fabricated risk numbers are caught in more languages.** The screen that + blocks an invented clinical risk figure or a named risk-engine result now + reads French, Spanish, Italian, and Polish to the same depth it already read + English and German, including a percentage written out in words. Health records written through the app now carry where they came from, and a HealthKit sync can say what set it off. diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index ba6cce1d8..dfb1ae2d9 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.8 + version: 1.32.9 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 5587af24b..c6118fca8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.32.8", + "version": "1.32.9", "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 3f14e5752..cf98f70fb 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.8"; + /* @sw-version-fallback */ "v1.32.9"; 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/*`