From 2ef7f04e89d5bede2f9eaf76fd9df947f858019d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Sun, 17 May 2026 00:06:18 +0200 Subject: [PATCH] =?UTF-8?q?v1.4.34.3=20=E2=80=94=20remove=20the=20dashboar?= =?UTF-8?q?d=20Coach=20CTA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Per maintainer directive — the v1.4.34 IW-B "Frag den Coach" sparkles button sat next to the "Hinzufügen" dropdown on the dashboard hero and read as visual noise rather than a useful surface. Remove it; the Coach drawer remains reachable from the /insights tree (its original home), and the auth-shell `` + drawer mount stay intact so any future page that wants its own opt-in CTA can call `askCoach()` without churn. The hook usages this leaves orphaned in `src/app/page.tsx`: - `useCoachLaunch` (only consumer was the CTA) - `useFeatureFlags` (only gate was `featureFlags.coach`) - `Sparkles` icon import All drop out cleanly. First release that lets v1.4.34.2's `pull_policy: always` show its worth — the deploy mechanic should pick up the new image without a manual host-side retag fallback. --- .../round-v1434-1-perf-hotfix-closure.md | 35 +++++++++++++++---- CHANGELOG.md | 18 ++++++++++ package.json | 2 +- src/app/page.tsx | 33 ----------------- 4 files changed, 48 insertions(+), 40 deletions(-) diff --git a/.planning/round-v1434-1-perf-hotfix-closure.md b/.planning/round-v1434-1-perf-hotfix-closure.md index e3d8d4c43..489a0086f 100644 --- a/.planning/round-v1434-1-perf-hotfix-closure.md +++ b/.planning/round-v1434-1-perf-hotfix-closure.md @@ -1,8 +1,13 @@ -# v1.4.34.1 — Insights cold-mount perf hotfix — closure +# v1.4.34.1 + v1.4.34.2 — Insights perf hotfix + Coolify deploy mechanic fix — closure -Shipped: 2026-05-16T22:27Z -Tag: `v1.4.34.1` -Release: +Shipped: + +| Release | Time (UTC) | Tag | Notes | +| --- | --- | --- | --- | +| v1.4.34.1 | 2026-05-16T20:27Z | [v1.4.34.1](https://github.com/MBombeck/HealthLog/releases/tag/v1.4.34.1) | Insights cold-mount perf hotfix (SQL aggregator + cache wraps + scatter sizing) | +| v1.4.34.2 | 2026-05-16T21:14Z | [v1.4.34.2](https://github.com/MBombeck/HealthLog/releases/tag/v1.4.34.2) | `pull_policy: always` on docker-compose to defeat Coolify's `:latest` pull-skip bug | + +Both LIVE on `healthlog.bombeck.io` (verified `/api/version` returns `"1.4.34.2"`). ## What was broken @@ -118,12 +123,30 @@ CREATE TABLE measurement_rollups ( ## Operator actions still pending (from v1.4.34 closure) -These are environment-side and unchanged by v1.4.34.1: +These are environment-side, mostly unchanged by v1.4.34.1/.2: 1. edge01 Coolify MCP daemon restart. 2. edge01 `DATABASE_URL` pool-bump (apps01 already drained). 3. Coolify resource-limits resize on apps01 (CPU=2, Memory=1g, Reservation=512m). -4. Coolify "watch registry for new digests" toggle on both hosts. +4. ~~Coolify "watch registry for new digests" toggle on both hosts.~~ **Obsoleted by v1.4.34.2 `pull_policy: always` — Docker now pulls every `compose up` regardless of the Coolify-side toggle.** 5. apps01 env-var duplicate-pair prune (28 entries). The pool-bump (#2) and resource-cap (#3) make the SECOND comprehensive call inside the window even cheaper, but neither is needed for the perf fix to land. + +## v1.4.34.2 — the deploy-mechanic addendum + +While verifying v1.4.34.1 live, the version endpoint kept reporting `"1.4.34"`. Three force-rebuilds via the Coolify MCP each finished in ~20 seconds — no real registry pull. Root cause: `docker-compose.yml` declared no `pull_policy`, so Docker's default ("only pull if missing") happily skipped the registry round-trip and restarted the container with the locally cached `:latest` digest from v1.4.34. + +``` +[Pulling & building required images.] ← line emitted... +[Adding build arguments...] ← ...261 ms later. No pull happened. +[Removing old containers.] +[Starting new application.] +[New container started.] ← 20-second deploy, prior image in container. +``` + +The `Coolify MCP application update` call setting `docker_registry_image_name` + `docker_registry_image_tag` had no effect because the `dockercompose` build-pack reads from `docker_compose_raw`, not from those fields — Coolify regenerated the same `:latest`-compose every deploy. + +**Fix**: declare `pull_policy: always` on the `app` service. Compose-up now re-checks the registry digest on every `up`, regardless of the local cache state. Bundle-shipped as v1.4.34.2 with the v1.4.34.1 perf payload riding the same `:latest` refresh. + +From v1.4.34.2 onwards every release lands on prod without a host-side retag fallback, and Operator-Action #4 from the v1.4.34 closure is obsoleted. diff --git a/CHANGELOG.md b/CHANGELOG.md index d7187cf6f..edc31f4bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## [1.4.34.3] — 2026-05-17 — Remove the dashboard Coach CTA + +Per maintainer directive: the dashboard hero CTA that v1.4.34 added +("Frag den Coach" sparkles button next to "Hinzufügen") is removed +from the dashboard. The Coach surface remains reachable from the +`/insights` tree where it originally lived; the auth-shell-level +`` + drawer mount stay intact so other pages +that want to surface a Coach CTA can opt in cleanly. The button was +visually loud on the dashboard hero and not the right placement for +the surface. + +### Changed + +- `src/app/page.tsx` no longer renders the dashboard Coach CTA. The + `useCoachLaunch` hook, the `useFeatureFlags` hook (only used for + the CTA gate), and the `Sparkles` icon import all drop out of the + dashboard tree as a side effect. + ## [1.4.34.2] — 2026-05-16 — `pull_policy: always` so Coolify deploys actually pull Bundle-release hotfix for the v1.4.34.1 deploy stall. The GHCR image diff --git a/package.json b/package.json index 3d38947e4..f88720d7b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.4.34.2", + "version": "1.4.34.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", diff --git a/src/app/page.tsx b/src/app/page.tsx index 85c62d0bc..9e5591337 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -13,7 +13,6 @@ import { Percent, Plus, Smile, - Sparkles, Target, TrendingUp, Waves, @@ -62,8 +61,6 @@ const MedicationComplianceChart = dynamic( { ssr: false, loading: () => }, ); import { useTranslations, useFormatters } from "@/lib/i18n/context"; -import { useCoachLaunch } from "@/lib/insights/coach-launch-context"; -import { useFeatureFlags } from "@/hooks/use-feature-flags"; import { queryKeys } from "@/lib/query-keys"; import { useAnalyticsQuery } from "@/lib/queries/use-analytics-query"; import type { DataSummary } from "@/lib/analytics/trends"; @@ -198,14 +195,6 @@ export default function DashboardPage() { const { isAuthenticated, user } = useAuth(); const { t } = useTranslations(); const fmt = useFormatters(); - // v1.4.34 IW-B — Coach launch context lives on the auth-shell now so - // every authed route (this dashboard included) can call `askCoach()`. - // Returns `null` outside the provider; the dashboard hero CTA self- - // gates on the hook + the operator's coach feature flag so the - // button silently disappears when either is unavailable. - const coachLaunch = useCoachLaunch(); - const featureFlags = useFeatureFlags(); - const coachEnabled = featureFlags.coach && coachLaunch !== null; const [quickEntryDialog, setQuickEntryDialog] = useState< "measurement" | "mood" | null >(null); @@ -545,28 +534,6 @@ export default function DashboardPage() {

{welcomeText}

- {/* v1.4.34 IW-B — dashboard hero CTA to the Coach drawer. The - provider lives on the auth-shell now so this button can - call `askCoach()` from the same context every authed - surface shares. Mobile-first: 44 px tap target via - `min-h-11` (WCAG 2.5.5), shrinks back to 36 px on `sm:` - upwards alongside the sibling "Hinzufügen" button. Self- - gates on the provider mount + the operator's `coach` - feature flag so the button disappears cleanly when the - Coach surface is disabled or unreachable. */} - {coachEnabled && coachLaunch ? ( - - ) : null} {/* v1.4.33 maintainer-item-7 — restore proportional sizing