diff --git a/CHANGELOG.md b/CHANGELOG.md index 880236fd0..6c3de1b33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## [1.37.29] — 2026-08-26 + +The chart range selector said points and meant days. Someone who weighs in twice a week picked "7 pts", saw two, and reasonably concluded the chart was broken. + +### Fixed + +- The range tabs now say what they do: 7d / 30d / 90d / All, in every locale. The selector has always fetched a calendar-day window; only the labels claimed a point count. Anyone measuring less than daily saw fewer points than the tab promised and had no way to know the tab was the lying part. +- The "All" view no longer serves monthly means under a weekly-average caption. The server picked the aggregation tier from the requested window — and "All" always requests ten years — so every record came back in monthly buckets no matter how short its history, while the chart captioned the series from the real span. A four-month record showed four points labelled "Weekly avg". The tier now follows the span the data actually covers, and a test pins the server tier against the caption ladder for every span up to ten years so the two cannot drift apart again. +- The same tab no longer means two different things depending on how the chart mounted. On the dashboard's preloaded data the old code showed "the last N readings" reaching arbitrarily far back; on a directly opened chart it showed a day window. Both paths now filter to the same calendar-day window, which also keeps comparison-overlay shadow data from leaking into the visible range on sparse records. +- The mood chart windows by days like every other chart. It used to slice the last N logged days out of the whole history, so its "7" could span weeks while the weight chart's "7" meant a week. +- The aggregation chip in the chart header reads the same grain decision the chart and its data table use, instead of re-deriving it separately. + ## [1.37.28] — 2026-08-24 Eleven parts of a shared record were selectable and invisible. Ticking one and sending the link showed the recipient nothing, while the same link's PDF download carried it. diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index ebba70075..c82740bb4 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.37.28 + version: 1.37.29 description: >- Self-hosted personal-health-tracking PWA — public API surface for the iOS native client and external ingest. diff --git a/e2e/charts-mobile.spec.ts b/e2e/charts-mobile.spec.ts index 3e933b4d4..f9c5cabd3 100644 --- a/e2e/charts-mobile.spec.ts +++ b/e2e/charts-mobile.spec.ts @@ -8,8 +8,8 @@ import { mockDashboardSnapshot } from "./utils/mock-dashboard-snapshot"; * * Two assertions per chart visible in the dashboard's initial paint: * - * 1. Header layout integrity — the range tabs (`7 pts / 30 pts / - * 90 pts / All`) and the cog dropdown sit on a SINGLE horizontal + * 1. Header layout integrity — the range tabs (`7d / 30d / + * 90d / All`) and the cog dropdown sit on a SINGLE horizontal * row inside the chart card. Pre-fix the bucket-aggregation chip * ("Weekly avg" / "Monthly avg") + comparison caption pushed the * tabs onto a second row on Pixel 5 (and 3-4 rows on Galaxy Fold diff --git a/package.json b/package.json index ae18d1e36..a525395bf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.37.28", + "version": "1.37.29", "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 e9fe10cdf..05a7ea72b 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.37.28"; + /* @sw-version-fallback */ "v1.37.29"; 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/*`