chore(release): v1.4.19

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Marc-André BombeckandClaude Opus 4.7 committed 2026-05-10 14:34:01 +02:00
1 parent 1f5ad68033
commit 89f00cf832
2 files changed
+105 -1

No files matched your search

+104
View File
@@ -1,5 +1,109 @@
# Changelog
## [1.4.19] — 2026-05-10
### Fixed
- **BD-Zielbereich headline now shows independent values for 7T / 30T /
total.** The big number used to be identical to the 30T sub-value
because `/api/analytics` aliased `bpInTargetPct` to `last30Days?.pct`.
`computeBpInTargetWindows()` now returns a third `allTime` window and
the route routes the headline through it, so the three numbers can
legitimately differ (Marc's data: 50 % / 50 % / 10.8 %).
- **Charts mobile header no longer breaks the layout on Pixel 5.** The
card header switches to a mobile-first stack below `sm` (title +
chips on row 1, range tabs + cog right-aligned on row 2 with
`flex-nowrap`) so the tabs always own a single row down to 280 px
(Galaxy Fold compact). Bucket-aggregation chips and comparison
captions hide on mobile to free horizontal budget.
- **Charts x-axis tick density unified across every chart wrapper.**
New `src/lib/charts/x-axis-density.ts` helper + `useViewportWidth`
hook caps visible ticks at 4 (Fold) / 6 (Pixel 5 / iPhone 12) / 8
(small tablet) / 10 (desktop). Wired into HealthChart, MoodChart,
MedicationComplianceChart, and ComplianceLineChart, so the
medication chart no longer overloads with one tick per day.
- **`/admin/api-tokens` table no longer triggers a horizontal
scrollbar at any viewport (4th attempt).** Truncate-with-tooltip
pattern on token-name, username, and permission badge, plus
`table-fixed` + colgroup widths on the desktop table. Mobile falls
back to the existing card list, now walked end-to-end by an e2e
regression.
- **Spurious mini-scrollbar on `/admin/feedback` tab strip.** The
shared `tabsListVariants` primitive picked up `overflow-y-hidden`
so the strip no longer paints a 1 px slither below the tabs.
- **`/insights` raw `metric: blood_pressure_sweet` template leak.**
`STRIP_TOKEN_REGEX` widened to `[A-Za-z0-9_]+` so lowercase template
remnants are scrubbed from AI prose; the uppercase render allowlist
(`PARSE_TOKEN_REGEX`) is unchanged.
- **AdminShell hides the collapse button on single-section pages.**
No more dead "Einklappen" affordance when the route only exposes
one section.
- **Mobile Sys/Dia badge enum mismatch on blood-pressure rows.**
CRITICAL from QA — the badge enum on mobile measurement rows
decoded the wrong key. Fixed before tag with a TDD guard.
- **6 CRITICAL + 21 HIGH copy / consistency / a11y findings from the
quality-of-life audit.** Time-window range strings now respect the
active locale, login overview filters out non-auth events, the
date / datetime input pair forwards `lang` so the native picker
uses the user's locale, raw enum badges are humanised, audit-action
labels are localised and link back to the row, achievement titles
no longer insult the user, and a long tail of admin / settings copy
consistency.
### Changed
- **Settings → Integrations status displays consolidated.** Withings
and Mood Log cards now share a single canonical
`<IntegrationStatusPill>` chip top-right ("Connected · 12 min ago"
with locale-aware relative-time bucketing). The redundant v1.4.15
banner trio (`connected / last successful / last attempt`) and Mood
Log's bottom-of-card "letzter Sync" line are gone; both cards now
carry a divider between header and body for visual symmetry.
Actionable error text stays as a compact inline alert above the
action row.
- **Comparison overlay control removed from the dashboard.** The
toggle now lives only on `/insights`, folded into the hero meta
band where there is room for it. The dashboard ditches the
always-visible knob.
- **`/insights`: single page-level refresh button.** The hero owns
the only refresh affordance; redundant per-section refresh links
removed (the per-recommendation Regenerate button from v1.4.16
stays).
- **`/insights`: small BP / Weight tile strip removed.** Duplicated
the dashboard tiles. `-157` lines on `src/app/insights/page.tsx`
plus dead helpers, plus the orphan "Persönlicher AI Berater"
subtitle.
- **AI insight prompt no longer opens with a default-positivity
sentence about data quality.** GROUND RULE 7 (EN + DE) forbids
"Your data foundation is strong" / "Datengrundlage ist sehr stark"
openers; data-quality caveats only allowed when n < 7 in the
analyzed window, recencyDays > 14, or a coverage gap biases the
comparison. `PROMPT_VERSION` bumped 4.16.1 → 4.19.0 so feedback
aggregation can attribute responses to the new rule.
- **Settings input heights, vertical spacing, and right-side action
buttons consistent across all sub-routes (mobile + desktop).**
Every form input is now 36 px (`h-9`); Account → Password,
Account → Restart onboarding tour, and Dashboard → Reset to
defaults stack the action below the title on `<sm` (full-width)
and right-align on `≥sm`, fixing the Pixel-5 right-edge overflow
on the tour button. Sprache select gets its own row at the bottom
of the Profile card; card-internal `space-y` standardised to
`space-y-4`.
- **Zielwerte status labels translated to German** (Low / On Target
/ Stable / Moderate). 11 `targets.label.<TYPE>` + 41
`targets.status.<key>` entries in EN + DE; page uses
`STATUS_CATEGORY_KEY` to normalise server strings.
### Deferred to v1.4.20
- 3 HIGH from QA — `/insights` `data?.` narrowing refactor,
`/admin/api-tokens` touch-tooltip (needs Popover swap), and
`/insights` hero density (folded into the v1.4.20 redesign).
- 31 MED + 16 LOW from the quality-of-life audit. Short-list at
`.planning/v1420-backlog.md`.
- `/insights` redesign with AI Coach — separate roadmap, design
handoff at `~/Downloads/design_handoff_insights_redesign`.
## [1.4.18] — 2026-05-10
### Added
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "healthlog",
"version": "1.4.18",
"version": "1.4.19",
"private": true,
"packageManager": "pnpm@10.31.0",
"scripts": {