chore(release): v1.34.3 — say the thing the surface already knew

Thirty-four changes, most of them one shape: something the server or the screen
already knew and did not say. A closed schema that omitted three fields it sends.
A fence around sensitive data that the contract never described, so the native
client dropped an affordance rather than risk crossing it. An ingest whose only
durable trace fired on success, leaving "did the phone even post" unanswerable. A
profile save that discarded valid fields to punish an invalid neighbour. A card
titled "that day" that received the day and threw it away.
This commit is contained in:
Marc-André Bombeck committed 2026-07-31 01:27:29 +02:00
1 parent 9b69be8ab5
commit 4c35c16d64
4 files changed
+71 -3

No files matched your search

+68
View File
@@ -2,6 +2,74 @@
## [Unreleased]
## [1.34.3] — 2026-07-31
A release about surfaces that knew something and did not say it.
### Added
- The workout page now shows the day around a session instead of linking away
from it: the day's pulse curve, the night before, and that day's mood, on the
page. It also offers the previous session of the same sport in one tap, says
how many workouts the list holds, and lets a sport narrow it.
- When a nutrient sync arrives and nothing can be stored, the nutrients page now
says so and why, in plain sentences, instead of showing the same empty page
someone would see who never synced at all.
### Changed
- The health score appears once. It is a single card below the greeting with the
breakdown behind one expander, rather than a compact copy in the greeting plus
nine full-width blocks underneath. Scores with too little input leave the grid
but keep their name and the reason they are not scored.
- The Coach input is one row tall until you type. It used to reserve a second row
for its buttons before anything had been written.
- Card headings sit closer to their content. A card with a title and no
description reserved space for a description that was never there, which
affected 45 of the 48 cards in the app.
### Fixed
- A profile save no longer discards everything because one field is invalid.
Valid fields are saved, rejected ones are named, and if nothing can be saved
the message says which field blocked it. Validator wording no longer reaches
the screen.
- A failed read on the nutrients page is no longer shown as "no data yet".
### Contract
- Share-link selection now publishes which leaves belong to which group and which
group is the sensitive one. The server always knew; a client that could not see
it had to withhold "select all" rather than risk sending psychometric scores in
a single tap.
- The dashboard snapshot schema declares three fields the route has been sending
all along. Because that schema is closed, a strictly generated client rejected
the real response.
- Rhythm events carry their own six-value classification, separate from the
three-value one on ECG rows.
- Six routes that clients consume were added to the published specification,
including sixteen skip reasons enumerated from the source rather than
transcribed. Three schemas were named in the specification's own prose while
never being emitted; all three are now published.
### Operations
- The optional worker in the bundled compose file inherited 14 of the app's 62
environment variables, missing every mail, push and notification value. It is
the process that sends notifications, so a split deployment ran a worker that
silently sent nothing. Both services now share one definition.
- Bounded log rotation on both containers, dropped capabilities and a memory
limit on the app, with the reasoning recorded, including why the database gets
neither.
- Every nutrient ingest call is now recorded, not only the ones that stored a
row. The single durable trace used to be conditional on success, so a batch
that was entirely rejected looked exactly like a batch that never arrived.
- The build carries its own memory ceiling, so a local run, CI and the published
image all invoke it the same way.
- The self-hosting notes warn that a pinned image reference stays pinned, and name
the two checks that catch a deploy which reports success while serving the
previous release.
## [1.34.2] — 2026-07-30
Point release. One workout that arrived more than once, and several surfaces
+1 -1
View File
@@ -1,7 +1,7 @@
openapi: 3.1.0
info:
title: HealthLog API
version: 1.34.2
version: 1.34.3
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.2",
"version": "1.34.3",
"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.2";
/* @sw-version-fallback */ "v1.34.3";
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/*`