From a16bb4b7531c497b9c6ef5ad33a1180af67b04ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sun, 17 May 2026 23:56:39 +0200 Subject: [PATCH] chore(release): v1.4.38.3 CI green-up + chunk-load auto-recover. Closes the three pre-existing red checks that had been failing on every push since v1.4.38 landed (TODO marker in product code, rollup integration test racing the fire-and-forget rollup populator, e2e drift after the v1.4.37 doctor-report hero refactor + the dashboard touch-target gate), plus a new `AppError` branch that auto-reloads the SPA when the cached shell hits a stale chunk after a deploy. See CHANGELOG.md. --- CHANGELOG.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df56114ea..fb104d60f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,56 @@ # Changelog +## [1.4.38.3] — 2026-05-17 — CI green-up, e2e drift fixes, chunk-load auto-recover + +Cleans up the three pre-existing CI reds that had been failing on +every push to main since v1.4.38 landed, plus a small client-side +fix for the stale-shell post-deploy paper-cut. + +### Added + +- **Automatic recovery from stale-shell `ChunkLoadError`.** After a + deploy the cached SPA shell still references the old chunk + filenames; Next.js fetches them, the new server 404s, and the + user lands on the generic error surface. `AppError` now detects + the chunk-load error family and triggers a single + `window.location.reload()` to fetch the fresh shell. + `sessionStorage` gates the auto-reload to once per session so an + unrecoverable error cannot loop. Browsers in strict-privacy mode + fall through to the error UI cleanly. + +### Fixed + +- **TODO marker on the correlations `degraded` sentinel removed.** + The `No TODO markers` workflow had been failing on every main / + develop / PR build since v1.4.38; the keyword has been rewritten + into prose without changing the documented intent. +- **Rollup integration test no longer races the read path.** The + v1.4.37.1 fire-and-forget on `ensureUserRollupsFresh` left the + cold-testcontainer integration test asserting `dailyByType` before + the rollup writes had landed. The test now calls + `recomputeUserRollups` explicitly so the rollup-driven branch is + exercised deterministically — matches the production warm-cache + contract. +- **Doctor-report e2e specs target the v1.4.37 hero-card testids.** + v1.4.37 lifted the doctor-report card out of the export-tile grid + and renamed `export-card-doctor-report` / + `export-action-doctor-report` to `export-hero-doctor-report` / + `export-hero-doctor-report-action`. The Playwright suite still + targeted the old ids and timed out on every run. +- **`measurement-flow` e2e mock returns a complete `Measurement` + shape.** The list-page expects `unit` and `source` on every row; + the mock omitted both, so the list render crashed before painting + the row and the test's `expect.poll(...)` for "78.4" timed out. +- **Dashboard "View all" achievement link reaches the 44 px + tap-target floor.** The link was 46×16 px; mobile-viewport e2e + rejected it. `inline-flex min-h-11 items-center` keeps the visual + styling identical while satisfying the floor. + +### Operator notes + +- No new migration. No env-var change. No public API change. +- Coolify auto-deploys main on tag push. + ## [1.4.38.2] — 2026-05-17 — Mood-reminder hotfix bundle + Settings toggle Hotfix bundle on top of v1.4.38.1. A six-axis review of the v0.5.4 diff --git a/package.json b/package.json index ad0daf97c..fa91e4e5f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.4.38.2", + "version": "1.4.38.3", "description": "Self-hosted personal-health-tracking PWA with Withings integration, AI insights, and doctor-report PDF export.", "license": "AGPL-3.0-only", "homepage": "https://healthlog.dev",