chore(release): v1.34.4 — one question, one answer

Every fix in this release is the same shape underneath. Two places in the code
were each deciding something they both had to agree on, and nothing made them
agree: two copies of the due-day rule, two clocks on one card, two server caches
behind one page, two ideas of where a nap belongs.

The version anchors, the changelog and the published specification move together
as usual.
This commit is contained in:
Marc-André Bombeck committed 2026-07-31 08:29:37 +02:00
1 parent 36ab24727f
commit 001641f57e
4 files changed
+52 -3

No files matched your search

+49
View File
@@ -2,6 +2,55 @@
## [Unreleased]
## [1.34.4] — 2026-07-31
A release about two places in the code answering one question differently.
### Added
- An inferred nap is now shown as its own band in the sleep stage view instead of
being blended into that night. A nap used to be counted into the night's stages,
so a day with a long afternoon sleep read as a longer and shallower night than
it was. Nights without a nap look exactly as they did, with no empty band and no
legend entry for something that is not there.
### Fixed
- A checkup that is due tomorrow says tomorrow. The dashboard card worked its due
line out in rolling 24-hour steps while the checkups page used calendar days, so
the same appointment could read as due tomorrow on one screen and in two days on
the other. Both now read one shared rule.
- The due line and the date printed beside it are worked out on the same clock.
One used the device's timezone and the other the profile's, which disagree by a
day for anyone travelling or on a machine set to another zone.
- Recording something no longer takes minutes to appear on the home page. The page
render and the API were each holding their own copy of the server cache, so a
write emptied one and left the other serving the state from before it. They now
share one.
- Returning to the dashboard no longer answers a refresh with a reading fetched
before your last entry.
- The onboarding profile step says when the server could not accept a field.
Valid answers are kept, rejected ones are named, and if nothing could be saved
the message says which field blocked it.
- A cycle symptom's intensity survives a backup and restore. It was recorded and
shown, and every export quietly dropped it. Older backup files still restore,
with the intensity honestly absent rather than filled in with a zero.
### Removed
- The Health-Score explainer switch in the operator settings. It promised a control
that was deliberately removed two releases ago, so it had been switching nothing
for months.
### Internal
- The sleep composition and the single-night view now agree about which session is
the night, because they ask the same function rather than each deciding.
- A test that was meant to prove a dose taken before midnight stops reminding could
not fail: the stand-in for the database ignored the time window it was asked for.
It now honours it, and both directions are pinned, so a genuinely missed dose
still escalates.
## [1.34.3] — 2026-07-31
A release about surfaces that knew something and did not say it.
+1 -1
View File
@@ -1,7 +1,7 @@
openapi: 3.1.0
info:
title: HealthLog API
version: 1.34.3
version: 1.34.4
description: >-
Self-hosted personal-health-tracking PWA — public API surface for the iOS native client and external ingest.
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "healthlog",
"version": "1.34.3",
"version": "1.34.4",
"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",
+1 -1
View File
@@ -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.34.3";
/* @sw-version-fallback */ "v1.34.4";
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/*`