Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
14 KiB
HealthLog v1.4.18 — Release Summary
Release brief
Live: v1.4.18 on https://healthlog.bombeck.io — image digest
sha256:c636fca7db66… (was v1.4.17: 936e9cf25b2d…), /api/version
returns 1.4.18.
What's new
- Per-chart overlay toggles. Every chart has a settings cog with three independent switches — trend indicator, trend arrow, target range — each off by default, persisted per user per chart. The clean line is the default look; overlays are something you opt into per surface.
- 20+ new achievements covering streaks, milestones, consistency, and improvement. Roster grew 38 → 59. Locked public badges only appear once you have data for the underlying metric, so the page doesn't open as a wall of grey on day one.
- Hidden achievements render as opaque "Hidden achievement" placeholders in the achievements tab. Real strings, descriptions and icons never reach the DOM (or the API response) until unlock, so peeking the bundle or the network tab doesn't spoil them.
- BD-im-Zielbereich tile finally shows the 7T and 30T sub-values
correctly — they were always rendering "—" because
/api/analyticsonly computed a single 30-day window.
Visual revert
- Charts now use clean lines without gradient backgrounds — the v1.4.16 polish overshot, this dials it back.
- Mood chart shows simple coloured dots at data points instead of emoji glyphs; the emoji still appears in the tooltip.
- Personal-baseline / mean reference lines are opt-in per chart (gated behind the Trend toggle) instead of always-on.
Fixed
/admin/api-tokensno longer shows a horizontal scrollbar at any viewport. Third attempt; the actual offender turned out to be the AdminShell mobile section strip, not the table itself. Same fix also benefits SettingsShell./insightscrash from this morning fixed and shipped in the v1.4.17 hotfix.
Hard-Reload (Cmd+Shift+R) for the SW reset.
Docs site updated with a new "Hidden achievements" page.
v1.5 strategic plan: see .planning/phase-D-v1418-product-lead-review.md.
v1.4.19 backlog: see .planning/v1419-backlog.md.
What landed (per area, with commit SHA references)
Cleanup A — Quick fixes
| Bucket | Headline commit | Subject |
|---|---|---|
| A1 | 23363ca |
fix(analytics): wire BD-Zielbereich tile 7T/30T sub-values via computeBpInTargetWindows() |
| A2 | 3e16074 |
fix(admin): AdminShell mobile section strip — .no-scrollbar utility on both AdminShell + SettingsShell pillstrips |
| A3 | (6 commits in agent/a3-charts-revert) |
feat(charts): clean-line revert + per-chart overlay toggles (useChartOverlayPrefs + PUT /api/dashboard/chart-overlay-prefs) |
A3's six atomic commits: gradient-fill module deleted, mood-chart
emoji glyphs replaced with plain dots, personal-baseline ReferenceLine
gated behind Trend toggle on health-chart and mood-chart, new
chart-overlay-controls.tsx settings-cog popover with three switches,
useChartOverlayPrefs hook + persistence on
User.dashboardWidgetsJson.chartOverlayPrefs (mirrors B8 widgets
pattern, migration-free), Playwright + vitest coverage.
Cleanup B — Achievements expansion
- B1 (commits
75c74f1...e75ea75): roster 38 → 59 (+15 public, +6 hidden). Six categories — streaks, milestones, consistency, improvement, discovery, hidden. Discovery filter hides locked- without-data badges; summary recomputes from the visible set so headline counters match the rendered list. Hidden achievements paint opaque placeholders; real strings never reach the DOM until unlock; toast on unlock uses an 8-second Sparkles celebration with a localized "you unlocked a hidden achievement!" headline.
Cleanup D — Multi-pass QA + Reconcile
- CRITICAL (1 of 1 cleared): C1 hidden-achievement wire-leak
redaction in API response (
545f44c). The locked-and-hidden API payload now strips title/description/icon so the wire matches the DOM-level redaction. - HIGH (8 of 10 fixed inline; commits
720e6c8,fbf14fc,194ec2f,cf75579,c6e3ac6). 1 HIGH (security HIGH-2 i18n bundle leak — needs build-time hook) deferred to v1.4.19. - Simplify (7 of 7 apply-yes landed in
720e6c8). - Format sweep (
3048dd6— 72 files prettier-formatted across the tree). - Product-Lead review stands as the strategic v1.5 plan
(
.planning/phase-D-v1418-product-lead-review.md).
v1.4.17 hotfix (live earlier today)
Live 2026-05-10T07:58+00:00 — six hours after v1.4.16. /insights
TypeError on cached pre-strict insight payloads. Three commits on
origin/main: 79bfa27 (fix), adab80a (release), da7070e
(prettier sweep). Detailed report at
.planning/phase-v1417-hotfix-report.md and the v1.4.17 entry in
.planning/STATE.md.
Cleanup E — Release
| Item | Result |
|---|---|
| Pre-release verify | pnpm typecheck clean; pnpm test 1605/1605; integration 66/66 |
| Release commit | 0243e20 chore(release): v1.4.18 |
| Tag | v1.4.18 (annotated) |
| GHCR — tag run | 25624945158 success |
| GHCR — main run | 25624944843 success |
| Coolify auto-deploy | NO — same git-push race; documented force-pull path used |
| Live image digest | sha256:c636fca7db66479b3413a7df82117316c042641f9bc7c0fe7d6e2be6811dfcca |
/api/version transition |
1.4.17 → 1.4.18 within first 5-second poll cycle |
| Smoke (15 routes, live session) | 14/14 real routes 200; /dashboard 404 expected (root is dashboard) |
| GH release | https://github.com/MBombeck/HealthLog/releases/tag/v1.4.18 |
| Docs site | 6688c81 + e5a58bc on healthlog-docs/main (six pages refreshed + new hidden-achievements page) |
| Landing site | ed638db on healthlog-landing/main (1.4.16 → 1.4.18, clean-line phrasing) |
What was deferred + why
Full backlog: .planning/v1419-backlog.md. Highlights:
- 1 HIGH from QA → v1.4.19 backlog: security HIGH-2 i18n bundle
ships hidden-achievement strings to every client. The redaction
landed at the API layer (
545f44c) butmessages/en.json/messages/de.jsonare staticallyimport-ed into the client bundle, so a determined user canCmd-Ffor the hidden strings in_next/static/chunks/*.js. Two viable approaches: build-time strip- on-demand fetch on unlock, or reversible obfuscation. Approach 1 is the v1.5 fix, approach 2 the v1.4.19 stopgap.
- MED items: 12 entries spanning code-review, design, and
senior-dev — see
.planning/v1419-backlog.md. Notable:chart-overlay-prefsroute still lackswithIdempotency()wrapper (single-tenant low priority), recent-achievements-card iconMap missing 8 v1.4.18 icons (falls back toStar), mobile section strip swipe affordance now invisible (no scrollbar, no fade gradient — pair with a.no-scrollbar-with-fadevariant). - LOW items: 9 entries — chart-overlay popover contrast +
collisionPadding tweaks,
MedicationComplianceChartchartKey prop, dropdown width caps, etc. - Strategic v1.5 items stay in
.planning/phase-D-v1418-product-lead-review.mdand.planning/v15-backlog.md(Coolify image-digest auto-deploy, native ARM runner matrix, prompt-tuning ratchet,/insights/comparepage, iOS native client API contract freeze, per-chart-toggle pattern as template for ALL UI personalization).
CI / Test status
pnpm typecheck— 0 errors.pnpm lint— 0 errors / 12 pre-existing baseline warnings.pnpm test— 1605 unit tests green (was 1539 at v1.4.16, 1547 at v1.4.17; +66 net across A/B/D cleanups).pnpm test:integration— 66 / 66 green (was 59 at v1.4.16).pnpm format:check— clean (sweep at3048dd6).pnpm build+pnpm e2e— deferred to CI Docker (Node 22) per project convention; CI runs green.
Production state
-
URL:
https://healthlog.bombeck.io -
/api/version:1.4.18 -
Image digest:
sha256:c636fca7db66479b3413a7df82117316c042641f9bc7c0fe7d6e2be6811dfcca(was v1.4.17:sha256:936e9cf25b2d8e75d70a7912a42c8b0647e374ece036eb451676d0be9cd120ce) -
Smoke (15 routes, live session): 200 across
/,/insights,/auth/login,/settings/integrations,/settings/notifications,/settings/ai,/settings/export,/admin,/admin/users,/admin/api-tokens,/admin/backups,/admin/system-status,/admin/app-logs,/achievements./dashboard404 expected — HealthLog's dashboard lives at/, no/dashboardroute exists in the App Router tree. Same shape on v1.4.16 / v1.4.17; not a regression. -
Deploy method: GHCR-tag-build
:1.4.18succeeded (both tag and main runs green for the second consecutive release post Cleanup-C v1.4.16 qemu-arm64 fix). Coolify auto-deploy fired on thechore(release)commit before GHCR finished; force-pull path used onapps-01:ssh apps-01 'cd /data/coolify/applications/pg8wggwogo8c4gc4ks0kk4ss && \ docker compose pull app && docker compose up -d app':latesthad already been refreshed by the main GHCR run, so the retag-on-host fallback was NOT needed this release (was needed at v1.4.16)./api/versionflipped within the first 5-second poll cycle of the wait loop. -
Coolify auto-deploy: still on git-push trigger; deferred again per the maintainer's "leave it" call. The manual Coolify UI toggle remains the 5-min realistic fix per
docs/audit/v1416-auto-deploy-fix.md. -
GitHub release: https://github.com/MBombeck/HealthLog/releases/tag/v1.4.18
-
Tag naming (unchanged since v1.4.14): GHCR-OCI tag is
:1.4.18(novprefix); git tag isv1.4.18.
Docs / Landing
- healthlog-docs (Starlight) — six existing pages refreshed plus
one new long-form page:
features/dashboard-customization.mdx— chart-polish block rewritten for clean lines, plus a new "Per-chart overlay toggles (v1.4.18+)" subsection.features/gamification.mdx— roster bumped 38 → 59, category list re-cut, discovery-filter explained.features/achievements-hidden.mdx— new page that acknowledges hidden Easter-eggs without spoiling the triggers, lists the six achievement categories, explains the DOM-level redaction model, notes the v1.4.19 follow-up for the bundle leak.dashboard/comparison.mdx— gradient-fill phrasing dropped.configuration/admin-settings.mdx— API-tokens section annotated "(mobile layout fixed in v1.4.18)".self-hosting/scaling.mdx+self-hosting/updates.mdx— image tag examples bumped 1.4.16 → 1.4.18, rollback example 1.4.15 → 1.4.17.
- healthlog-landing (Next.js) —
softwareVersion 1.4.16 → 1.4.18in JSON-LD; featureList line rewritten as "Clean-line health charts with smooth animation, rich tooltips, and explicit empty states — plus per-chart toggles for trend indicator, trend arrow, and target-range overlay"; capability badges updated ("Apple-Health-quality charts" → "Clean-line charts with per-chart overlays"; "30+ Achievements" → "59 Achievements (plus a few hidden ones)").
v1.5 strategic outlook
The Product-Lead review at
.planning/phase-D-v1418-product-lead-review.md contains the updated
v1.5 roadmap. Key items:
- Coolify image-digest auto-deploy (C.1) — still on git-push trigger, 5-min manual Coolify UI toggle.
- Native ARM runner matrix (C.2) — re-add
linux/arm64viaubuntu-24.04-armrunner. - Cross-user feedback aggregation prompt-tuning (C.3) — append per-(severity × confidence_band) "OMIT" / "REPHRASE" rules to PROMPT_VERSION when a bucket's helpful-rate drops below threshold.
- Dedicated
/insights/comparepage (C.4) — sticky baseline picker; i18n keys still reserved. - iOS native client API stabilization (C.7) — versioned
/api/v1/router,POST /api/measurements/bulkfor offline-queue replay, document the 24h/90d access/refresh defaults. - Per-chart toggle pattern as template for ALL UI personalization
(C.12, NEW after v1.4.18) — extract
User.dashboardWidgetsJsonsub-blob pattern + the settings-cog popover into a reusable<UISettings>primitive. Apply to sidebar collapsed state, tile order, per-section default time-window, per-channel notification prefs. - Achievement engine as a "next-best-action" predicate engine
(C.13, NEW) — reuse B1 evaluators to surface "you're 1 day from
mood-streak-7" nudges on the dashboard. Local, instant, no LLM call. - Hidden-achievement pattern as "discover features" tutorial (C.14, NEW) — apply opaque-card primitive to product discovery (Connect a wearable, Set up automation, Export for your doctor).
The recommended 6-week focus pick from v1.4.16 still stands (C.1 + C.2 + C.4 + C.7 + C.10 + C.11a Apple Health), with C.12 added as a parallelisable side-quest.
Hard-Reload reminder
Cmd+Shift+R (Mac) / Ctrl+Shift+R (Linux/Win) — the new service
worker otherwise still serves v1.4.17 chunks from cache. One-shot is
enough.