mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
v1.4.34.3 — remove the dashboard Coach CTA
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 `<CoachLaunchProvider>` + 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.
This commit is contained in:
1 parent
1f57dc3808
commit
2ef7f04e89
4 files changed
+48
-40
No files matched your search
@@ -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: <https://github.com/MBombeck/HealthLog/releases/tag/v1.4.34.1>
|
||||
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.
|
||||
@@ -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
|
||||
`<CoachLaunchProvider>` + 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
|
||||
|
||||
+1
-1
@@ -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",
|
||||
|
||||
@@ -13,7 +13,6 @@ import {
|
||||
Percent,
|
||||
Plus,
|
||||
Smile,
|
||||
Sparkles,
|
||||
Target,
|
||||
TrendingUp,
|
||||
Waves,
|
||||
@@ -62,8 +61,6 @@ const MedicationComplianceChart = dynamic(
|
||||
{ ssr: false, loading: () => <ChartSkeleton /> },
|
||||
);
|
||||
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() {
|
||||
<p className="text-muted-foreground mt-1 text-sm">{welcomeText}</p>
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
{/* 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 ? (
|
||||
<Button
|
||||
type="button"
|
||||
variant="outline"
|
||||
size="default"
|
||||
className="min-h-11 gap-1 sm:min-h-9"
|
||||
data-slot="dashboard-coach-cta"
|
||||
onClick={() => coachLaunch.askCoach(null)}
|
||||
>
|
||||
<Sparkles className="h-4 w-4" aria-hidden="true" />
|
||||
<span>{t("dashboard.coachCta")}</span>
|
||||
</Button>
|
||||
) : null}
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
{/* v1.4.33 maintainer-item-7 — restore proportional sizing
|
||||
|
||||
Reference in new issue
Block a user